[Xfce4-commits] <xfce4-panel:andrzejr/systray> systray plugin: limiting icon size to row size, fixing orientation.
Andrzej
noreply at xfce.org
Thu Apr 4 01:14:02 CEST 2013
Updating branch refs/heads/andrzejr/systray
to bf15d88d9554bba3c39a95b07482a3c5cf4b9736 (commit)
from d4c989369d06c667337512955c65948a8ed0e166 (commit)
commit bf15d88d9554bba3c39a95b07482a3c5cf4b9736
Author: Andrzej <ndrwrdck at gmail.com>
Date: Tue Jan 17 00:13:54 2012 +0900
systray plugin: limiting icon size to row size, fixing orientation.
Icon size is now max row size.
The user controlled max icon size is still available for 4.8 compat.
Maybe a better way would be to allow the user to set
a min number of rows instead of max icon size?
Centering of group of icons in the panel is disabled for consistency
with other plugins and the itembar behavior. (icons are flushed to
the top (horizontal mode) or to the left).
Allocation order of icons is changed to mimic that of itembar.
Icons are allocated along the columns (not rows, as it was before).
Haven't tested the support for non-square icons
- hopefully it still works. Can anyone confirm that?
plugins/systray/systray-box.c | 37 ++++++++++++++++++++++++++++++-------
plugins/systray/systray-box.h | 3 +++
plugins/systray/systray.c | 14 ++++++++++++++
3 files changed, 47 insertions(+), 7 deletions(-)
diff --git a/plugins/systray/systray-box.c b/plugins/systray/systray-box.c
index 06f0b46..827a1e1 100644
--- a/plugins/systray/systray-box.c
+++ b/plugins/systray/systray-box.c
@@ -100,6 +100,9 @@ struct _SystrayBox
/* allocated size by the plugin */
gint size_alloc;
+
+ /* (minimum) number of rows */
+ gint nrows;
};
@@ -147,6 +150,7 @@ systray_box_init (SystrayBox *box)
box->childeren = NULL;
box->size_max = SIZE_MAX_DEFAULT;
box->size_alloc = SIZE_MAX_DEFAULT;
+ box->nrows = 1;
box->n_hidden_childeren = 0;
box->n_visible_children = 0;
box->horizontal = TRUE;
@@ -223,6 +227,8 @@ systray_box_size_get_max_child_size (SystrayBox *box,
break;
}
+ rows = MAX (rows, box->nrows);
+
row_size = (alloc_size - (rows - 1) * SPACING) / rows;
row_size = MIN (box->size_max, row_size);
@@ -389,7 +395,7 @@ systray_box_size_allocate (GtkWidget *widget,
gdouble ratio;
gint x, x_start, x_end;
gint y, y_start, y_end;
- gint offset;
+ gint offset = 0;
GSList *li;
gint alloc_size;
gint idx;
@@ -400,7 +406,7 @@ systray_box_size_allocate (GtkWidget *widget,
alloc_size = box->horizontal ? allocation->height : allocation->width;
- systray_box_size_get_max_child_size (box, alloc_size, &rows, &row_size, &offset);
+ systray_box_size_get_max_child_size (box, alloc_size, &rows, &row_size, NULL);
panel_debug_filtered (PANEL_DEBUG_SYSTRAY, "allocate rows=%d, row_size=%d, w=%d, h=%d, horiz=%s, border=%d",
rows, row_size, allocation->width, allocation->height,
@@ -454,7 +460,7 @@ systray_box_size_allocate (GtkWidget *widget,
{
ratio = (gdouble) child_req.width / (gdouble) child_req.height;
- if (box->horizontal)
+ if (!box->horizontal)
{
child_alloc.height = row_size;
child_alloc.width = row_size * ratio;
@@ -492,8 +498,8 @@ systray_box_size_allocate (GtkWidget *widget,
ratio = 1.00;
}
- if ((box->horizontal && x + child_alloc.width > x_end)
- || (!box->horizontal && y + child_alloc.height > y_end))
+ if ((!box->horizontal && x + child_alloc.width > x_end)
+ || (box->horizontal && y + child_alloc.height > y_end))
{
if (ratio >= 2
&& li->next != NULL)
@@ -508,7 +514,7 @@ systray_box_size_allocate (GtkWidget *widget,
goto restart_allocation;
}
- if (box->horizontal)
+ if (!box->horizontal)
{
x = x_start;
y += row_size + SPACING;
@@ -549,7 +555,7 @@ systray_box_size_allocate (GtkWidget *widget,
child_alloc.x += x;
child_alloc.y += y;
- if (box->horizontal)
+ if (!box->horizontal)
x += row_size * ratio + SPACING;
else
y += row_size * ratio + SPACING;
@@ -743,6 +749,23 @@ systray_box_set_size_alloc (SystrayBox *box,
void
+systray_box_set_nrows (SystrayBox *box,
+ gint nrows)
+{
+ panel_return_if_fail (XFCE_IS_SYSTRAY_BOX (box));
+
+ if (G_LIKELY (nrows != box->nrows))
+ {
+ box->nrows = nrows;
+
+ if (box->childeren != NULL)
+ gtk_widget_queue_resize (GTK_WIDGET (box));
+ }
+}
+
+
+
+void
systray_box_set_show_hidden (SystrayBox *box,
gboolean show_hidden)
{
diff --git a/plugins/systray/systray-box.h b/plugins/systray/systray-box.h
index d396344..d2853ee 100644
--- a/plugins/systray/systray-box.h
+++ b/plugins/systray/systray-box.h
@@ -51,6 +51,9 @@ gint systray_box_get_size_max (SystrayBox *box);
void systray_box_set_size_alloc (SystrayBox *box,
gint size_alloc);
+void systray_box_set_nrows (SystrayBox *box,
+ gint nrows);
+
void systray_box_set_show_hidden (SystrayBox *box,
gboolean show_hidden);
diff --git a/plugins/systray/systray.c b/plugins/systray/systray.c
index 154bc03..975cc3f 100644
--- a/plugins/systray/systray.c
+++ b/plugins/systray/systray.c
@@ -54,6 +54,8 @@ static void systray_plugin_orientation_changed (XfcePanelPlugin
GtkOrientation orientation);
static gboolean systray_plugin_size_changed (XfcePanelPlugin *panel_plugin,
gint size);
+static void systray_plugin_nrows_changed (XfcePanelPlugin *panel_plugin,
+ guint nrows);
static void systray_plugin_configure_plugin (XfcePanelPlugin *panel_plugin);
static void systray_plugin_box_expose_event (GtkWidget *box,
GdkEventExpose *event);
@@ -172,6 +174,7 @@ systray_plugin_class_init (SystrayPluginClass *klass)
plugin_class->construct = systray_plugin_construct;
plugin_class->free_data = systray_plugin_free_data;
plugin_class->size_changed = systray_plugin_size_changed;
+ plugin_class->nrows_changed = systray_plugin_nrows_changed;
plugin_class->configure_plugin = systray_plugin_configure_plugin;
plugin_class->orientation_changed = systray_plugin_orientation_changed;
@@ -547,6 +550,17 @@ systray_plugin_size_changed (XfcePanelPlugin *panel_plugin,
static void
+systray_plugin_nrows_changed (XfcePanelPlugin *panel_plugin,
+ guint nrows)
+{
+ SystrayPlugin *plugin = XFCE_SYSTRAY_PLUGIN (panel_plugin);
+
+ systray_box_set_nrows (XFCE_SYSTRAY_BOX (plugin->box), (gint) nrows);
+}
+
+
+
+static void
systray_plugin_configure_plugin (XfcePanelPlugin *panel_plugin)
{
SystrayPlugin *plugin = XFCE_SYSTRAY_PLUGIN (panel_plugin);
More information about the Xfce4-commits
mailing list