Updating branch refs/heads/andrzejr/deskbar2
         to bfb2dac65d855d2ac4e2bccc84e1e1b4ad907f94 (commit)
       from 4e48f5fdfd743d9eb407e8c8c7b792a1ccc4f024 (commit)

commit bfb2dac65d855d2ac4e2bccc84e1e1b4ad907f94
Author: Andrzej <[email protected]>
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);
_______________________________________________
Xfce4-commits mailing list
[email protected]
https://mail.xfce.org/mailman/listinfo/xfce4-commits

Reply via email to