[Xfce4-commits] <xfce4-panel:andrzejr/deskbar-github> Added multi-row layout of "small" plug-ins to the panel.
Andrzej
noreply at xfce.org
Mon Dec 12 11:40:09 CET 2011
Updating branch refs/heads/andrzejr/deskbar-github
to d31a2d90bb5bd1d2234d142957d41cd8db105b8b (commit)
from 4cfca15e1faa64880dc17490d6891a9edb3342f9 (commit)
commit d31a2d90bb5bd1d2234d142957d41cd8db105b8b
Author: Andrzej <ndrwrdck at gmail.com>
Date: Fri Nov 11 05:04:51 2011 +0900
Added multi-row layout of "small" plug-ins to the panel.
Early implementation, not fully tested. D&D is not aware of different plug-in sizes.
panel/panel-itembar.c | 84 +++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 81 insertions(+), 3 deletions(-)
diff --git a/panel/panel-itembar.c b/panel/panel-itembar.c
index 8b65182..29f5efe 100644
--- a/panel/panel-itembar.c
+++ b/panel/panel-itembar.c
@@ -308,6 +308,38 @@ panel_itembar_finalize (GObject *object)
}
+static void
+panel_itembar_column_wrap (PanelItembar *itembar,
+ gint *column_row,
+ gint *x,
+ gint *y)
+{
+ *column_row = 0;
+ if (itembar->horizontal) {
+ *y = 0;
+ *x += itembar->size / itembar->nrows;
+ } else {
+ *x = 0;
+ *y += itembar->size / itembar->nrows;
+ }
+}
+
+
+static void
+panel_itembar_column_next (PanelItembar *itembar,
+ gint *column_row,
+ gint *x,
+ gint *y)
+{
+ (*column_row)++;
+ if (*column_row < itembar->nrows) {
+ if (itembar->horizontal)
+ *y += itembar->size / itembar->nrows;
+ else
+ *x += itembar->size / itembar->nrows;
+ } else panel_itembar_column_wrap(itembar, column_row, x, y);
+}
+
static void
panel_itembar_size_request (GtkWidget *widget,
@@ -319,6 +351,7 @@ panel_itembar_size_request (GtkWidget *widget,
GtkRequisition child_requisition;
gint border_width;
gint row_length = 0;
+ gint column_row = 0;
/* intialize the requisition, we always set the panel height */
if (itembar->horizontal)
@@ -344,8 +377,21 @@ panel_itembar_size_request (GtkWidget *widget,
gtk_widget_size_request (child->widget, &child_requisition);
- if (G_LIKELY (!child->wrap))
+ if (child->small)
{
+ if (column_row == 0)
+ {
+ column_row ++;
+ row_length += (itembar->size / itembar->nrows);
+ }
+ else if (column_row < itembar->nrows)
+ column_row ++;
+ else
+ column_row = 0;
+ }
+ else if (G_LIKELY (!child->wrap))
+ {
+ column_row = 0;
if (itembar->horizontal)
row_length += child_requisition.width;
else
@@ -353,6 +399,7 @@ panel_itembar_size_request (GtkWidget *widget,
}
else
{
+ column_row = 0;
/* add to size for new wrap element */
if (itembar->horizontal)
{
@@ -408,6 +455,7 @@ panel_itembar_size_allocate (GtkWidget *widget,
gboolean expand_children_fit;
gint new_length;
gint child_length;
+ gint column_row;
widget->allocation = *allocation;
@@ -425,6 +473,7 @@ panel_itembar_size_allocate (GtkWidget *widget,
expand_length_req = 0;
shrink_length_avail = 0;
shrink_length_req = 0;
+ column_row = 0;
/* get information about the expandable lengths */
for (lp = li; lp != NULL; lp = g_slist_next (lp))
@@ -442,12 +491,26 @@ panel_itembar_size_allocate (GtkWidget *widget,
gtk_widget_get_child_requisition (child->widget, &child_req);
length = itembar->horizontal ? child_req.width : child_req.height;
- if (G_UNLIKELY (child->expand))
+ if (child->small)
{
+ if (column_row == 0)
+ {
+ column_row ++;
+ expand_length_avail -= (itembar->size / itembar->nrows);
+ }
+ else if (column_row < itembar->nrows)
+ column_row ++;
+ else
+ column_row = 0;
+ }
+ else if (G_UNLIKELY (child->expand))
+ {
+ column_row = 0;
expand_length_req += length;
}
else
{
+ column_row = 0;
expand_length_avail -= length;
if (child->shrink)
@@ -484,6 +547,7 @@ panel_itembar_size_allocate (GtkWidget *widget,
}
/* allocate the children on this row */
+ column_row = 0;
for (; li != NULL; li = g_slist_next (li))
{
child = li->data;
@@ -493,12 +557,12 @@ panel_itembar_size_allocate (GtkWidget *widget,
{
itembar->highlight_x = x;
itembar->highlight_y = y;
- expand_length_avail -= itembar->size;
if (itembar->horizontal)
x += itembar->size;
else
y += itembar->size;
+ expand_length_avail -= itembar->size;
continue;
}
@@ -506,6 +570,17 @@ panel_itembar_size_allocate (GtkWidget *widget,
if (!GTK_WIDGET_VISIBLE (child->widget))
continue;
+ if (child->small) {
+ child_alloc.x = x;
+ child_alloc.y = y;
+ child_alloc.height = itembar->size / itembar->nrows;
+ child_alloc.width = itembar->size / itembar->nrows;
+ panel_itembar_column_next(itembar, &column_row, &x, &y);
+ gtk_widget_size_allocate (child->widget, &child_alloc);
+ continue;
+ } else
+ if (column_row > 0) panel_itembar_column_wrap(itembar, &column_row, &x, &y);
+
gtk_widget_get_child_requisition (child->widget, &child_req);
child_alloc.x = x;
@@ -540,6 +615,9 @@ panel_itembar_size_allocate (GtkWidget *widget,
break;
}
+ /* if (child->small) */
+ /* child_length = itembar->size / itembar->nrows; */
+ /* else */
child_length = itembar->horizontal ? child_req.width : child_req.height;
if (G_UNLIKELY (!expand_children_fit && child->expand))
More information about the Xfce4-commits
mailing list