[Xfce4-commits] <xfce4-cpufreq-plugin:master> Make layout dependent on widgets and panel sizes.

Harald Judt noreply at xfce.org
Sun Aug 18 11:32:22 CEST 2013


Updating branch refs/heads/master
         to 25bfe279a604f7cc9e248f294eca595e11771414 (commit)
       from e01d15daa5e1eefab75810ea53111f70242485d0 (commit)

commit 25bfe279a604f7cc9e248f294eca595e11771414
Author: Harald Judt <h.judt at gmx.at>
Date:   Mon Aug 12 23:21:15 2013 +0200

    Make layout dependent on widgets and panel sizes.
    
    This also fixes the layout in one-row panels.

 panel-plugin/xfce4-cpufreq-configure.c |    4 +-
 panel-plugin/xfce4-cpufreq-plugin.c    |   88 +++++++++++++++++++++++---------
 2 files changed, 64 insertions(+), 28 deletions(-)

diff --git a/panel-plugin/xfce4-cpufreq-configure.c b/panel-plugin/xfce4-cpufreq-configure.c
index 6176127..5e11c77 100644
--- a/panel-plugin/xfce4-cpufreq-configure.c
+++ b/panel-plugin/xfce4-cpufreq-configure.c
@@ -40,7 +40,6 @@ check_button_changed (GtkWidget *button, CpuFreqPluginConfigure *configure)
 		cpuFreq->options->show_icon = 
 			gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button));
 		cpufreq_update_icon (cpuFreq);
-		return;
 	}
 
 	else if (button == configure->display_freq)
@@ -59,10 +58,9 @@ check_button_changed (GtkWidget *button, CpuFreqPluginConfigure *configure)
 		else
 			cpuFreq->icon_size += 4;
 		cpufreq_update_icon (cpuFreq);
-		cpuFreq->layout_changed = TRUE;
 	}
 
-	cpufreq_prepare_label (cpuFreq);
+	cpuFreq->layout_changed = TRUE;
 	cpufreq_update_plugin ();
 }
 
diff --git a/panel-plugin/xfce4-cpufreq-plugin.c b/panel-plugin/xfce4-cpufreq-plugin.c
index ddc9eff..3cb9d4e 100644
--- a/panel-plugin/xfce4-cpufreq-plugin.c
+++ b/panel-plugin/xfce4-cpufreq-plugin.c
@@ -129,10 +129,12 @@ cpufreq_update_tooltip (GtkWidget *widget,
 static void
 cpufreq_widgets_layout (void)
 {
-	gint pos = 1;
+	GtkRequisition icon_size, label_size;
 	GtkOrientation orientation;
-	XfcePanelPluginMode mode;
 	gboolean small = cpuFreq->options->keep_compact;
+	gboolean resized = FALSE;
+	gint panel_size, pos = 1;
+	gint lw = 0, lh = 0, iw = 0, ih = 0;
 
 	switch (cpuFreq->panel_mode) {
 	case XFCE_PANEL_PLUGIN_MODE_HORIZONTAL:
@@ -148,33 +150,70 @@ cpufreq_widgets_layout (void)
 		xfce_panel_plugin_set_small (cpuFreq->plugin, FALSE);
 		break;
 	}
+
+	/* check if the label fits below the icon, else put them side by side */
+	panel_size = xfce_panel_plugin_get_size(cpuFreq->plugin);
+	if (GTK_IS_WIDGET(cpuFreq->label)) {
+		gtk_widget_size_request (cpuFreq->label, &label_size);
+		lw = label_size.width;
+		lh = label_size.height;
+	}
+	if (GTK_IS_WIDGET(cpuFreq->icon)) {
+		gtk_widget_size_request (cpuFreq->icon, &icon_size);
+		iw = icon_size.width;
+		ih = icon_size.height;
+	}
+	if (cpuFreq->panel_mode == XFCE_PANEL_PLUGIN_MODE_HORIZONTAL &&
+		orientation == GTK_ORIENTATION_VERTICAL &&
+		lh + ih + BORDER * 2 >= panel_size) {
+		orientation = GTK_ORIENTATION_HORIZONTAL;
+		resized = TRUE;
+	} else if (orientation == GTK_ORIENTATION_HORIZONTAL &&
+			   lw + iw + BORDER * 2 >= panel_size &&
+			   (cpuFreq->panel_mode == XFCE_PANEL_PLUGIN_MODE_DESKBAR ||
+				!small)) {
+		orientation = GTK_ORIENTATION_VERTICAL;
+		resized = TRUE;
+	}
+
 	gtk_orientable_set_orientation (GTK_ORIENTABLE (cpuFreq->box), orientation);
 
-	if (cpuFreq->options->keep_compact) {
+	if (small) {
 		if (orientation == GTK_ORIENTATION_VERTICAL) {
-			gtk_misc_set_alignment (GTK_MISC (cpuFreq->icon), 0.5, 0);
-			gtk_misc_set_alignment (GTK_MISC (cpuFreq->label), 0.5, 0);
+			if (cpuFreq->icon)
+				gtk_misc_set_alignment (GTK_MISC (cpuFreq->icon), 0.5, 0);
+			if (cpuFreq->label)
+				gtk_misc_set_alignment (GTK_MISC (cpuFreq->label), 0.5, 0);
 		} else {
-			gtk_misc_set_alignment (GTK_MISC (cpuFreq->icon), 0, 0.5);
-			gtk_misc_set_alignment (GTK_MISC (cpuFreq->label), 0, 0.5);
+			if (cpuFreq->icon)
+				gtk_misc_set_alignment (GTK_MISC (cpuFreq->icon), 0, 0.5);
+			if (cpuFreq->label)
+				gtk_misc_set_alignment (GTK_MISC (cpuFreq->label), 0, 0.5);
 		}
-		gtk_box_set_child_packing (GTK_BOX (cpuFreq->box),
-								   cpuFreq->icon,
-								   FALSE, FALSE, 0, GTK_PACK_START);
+		if (cpuFreq->icon)
+			gtk_box_set_child_packing (GTK_BOX (cpuFreq->box),
+									   cpuFreq->icon,
+									   FALSE, FALSE, 0, GTK_PACK_START);
 	} else {
 		if (orientation == GTK_ORIENTATION_VERTICAL) {
-			gtk_misc_set_alignment (GTK_MISC (cpuFreq->icon), 0.5, 1.0);
-			gtk_misc_set_alignment (GTK_MISC (cpuFreq->label), 0.5, 0);
+			if (cpuFreq->icon)
+				gtk_misc_set_alignment (GTK_MISC (cpuFreq->icon), 0.5, 1.0);
+			if (cpuFreq->label)
+				gtk_misc_set_alignment (GTK_MISC (cpuFreq->label), 0.5, 0);
 		} else {
-			gtk_misc_set_alignment (GTK_MISC (cpuFreq->icon), 0, 0.5);
-			gtk_misc_set_alignment (GTK_MISC (cpuFreq->label), 1.0, 0.5);
-			pos = 0;
+			if (cpuFreq->icon)
+				gtk_misc_set_alignment (GTK_MISC (cpuFreq->icon), 0, 0.5);
+			if (cpuFreq->label)
+				gtk_misc_set_alignment (GTK_MISC (cpuFreq->label), 1.0, 0.5);
+			pos = resized ? 1 : 0;
 		}
-		gtk_box_set_child_packing (GTK_BOX (cpuFreq->box),
-								   cpuFreq->icon,
-								   TRUE, TRUE, 0, GTK_PACK_START);
+		if (cpuFreq->icon)
+			gtk_box_set_child_packing (GTK_BOX (cpuFreq->box),
+									   cpuFreq->icon,
+									   TRUE, TRUE, 0, GTK_PACK_START);
 	}
-	gtk_box_reorder_child (GTK_BOX (cpuFreq->box), cpuFreq->label, pos);
+	if (cpuFreq->label)
+		gtk_box_reorder_child (GTK_BOX (cpuFreq->box), cpuFreq->label, pos);
 
 	cpuFreq->layout_changed = FALSE;
 }
@@ -183,17 +222,17 @@ gboolean
 cpufreq_update_plugin (void)
 {
 	CpuInfo *cpu;
+	gboolean ret;
 
 	g_return_val_if_fail (cpuFreq->options->show_cpu < cpuFreq->cpus->len, FALSE);
 
+	cpu = g_ptr_array_index (cpuFreq->cpus, cpuFreq->options->show_cpu);
+	ret = cpufreq_update_label (cpu);
+
 	if (cpuFreq->layout_changed)
 		cpufreq_widgets_layout ();
 
-	cpu = g_ptr_array_index (cpuFreq->cpus, cpuFreq->options->show_cpu);
-	if (cpufreq_update_label (cpu) == FALSE)
-		return FALSE;
-
-	return TRUE;
+	return ret;
 }
 
 void
@@ -227,7 +266,6 @@ cpufreq_update_icon (CpuFreqPlugin *cpufreq)
 
 	if(cpufreq->options->show_icon)
 	{
-
 		GdkPixbuf *buf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (),
 				                                     "xfce4-cpufreq-plugin", cpufreq->icon_size, 0, NULL);
 		if (buf)


More information about the Xfce4-commits mailing list