[Xfce4-commits] <xfce4-panel:andrzejr/deskbar-github> Making tasklist plugin use new deskbar-mode and nrows properties.

Andrzej noreply at xfce.org
Mon Dec 12 11:40:03 CET 2011


Updating branch refs/heads/andrzejr/deskbar-github
         to 719594570381f2bc6ad91f8616b80af7db91b2ec (commit)
       from b4c0807f56dcca17a63569fa87b0becd430b7519 (commit)

commit 719594570381f2bc6ad91f8616b80af7db91b2ec
Author: Andrzej <ndrwrdck at gmail.com>
Date:   Thu Nov 10 13:13:02 2011 +0900

    Making tasklist plugin use new deskbar-mode and nrows properties.
    
    Max-button-size and rotate-vertically have no effect but are not removed.

 plugins/tasklist/tasklist-widget.c |   65 +++++++++++++++++++++++++++++-------
 plugins/tasklist/tasklist-widget.h |    6 +++
 plugins/tasklist/tasklist.c        |   30 ++++++++++++++++
 3 files changed, 89 insertions(+), 12 deletions(-)

diff --git a/plugins/tasklist/tasklist-widget.c b/plugins/tasklist/tasklist-widget.c
index d5ad920..8044d77 100644
--- a/plugins/tasklist/tasklist-widget.c
+++ b/plugins/tasklist/tasklist-widget.c
@@ -68,7 +68,7 @@
 #define xfce_taskbar_is_locked(tasklist) (XFCE_TASKLIST (tasklist)->locked > 0)
 
 #define xfce_tasklist_get_panel_plugin(tasklist) gtk_widget_get_ancestor (GTK_WIDGET (tasklist), XFCE_TYPE_PANEL_PLUGIN)
-#define xfce_tasklist_horizontal(tasklist) ((tasklist)->horizontal || (!(tasklist)->rotate_vertically && (tasklist)->show_labels))
+#define xfce_tasklist_horizontal(tasklist) ((tasklist)->horizontal || ((tasklist)->deskbar_mode && (tasklist)->show_labels))
 #define xfce_tasklist_filter_monitors(tasklist) (!(tasklist)->all_monitors && (tasklist)->monitor_geometry.width != -1)
 #define xfce_tasklist_geometry_set_invalid(tasklist) ((tasklist)->monitor_geometry.width = -1)
 #define xfce_tasklist_geometry_has_point(tasklist, x, y) ( \
@@ -151,6 +151,12 @@ struct _XfceTasklist
   /* if we rotate buttons in a vertical panel */
   guint                 rotate_vertically : 1;
 
+  /* number of rows of window buttons */
+  guint                 nrows;
+
+  /* is panel in vertical deskbar mode? */
+  gboolean              deskbar_mode : 1;
+
   /* switch window with the mouse wheel */
   guint                 window_scrolling : 1;
 
@@ -535,6 +541,8 @@ xfce_tasklist_init (XfceTasklist *tasklist)
   tasklist->windows = NULL;
   tasklist->skipped_windows = NULL;
   tasklist->horizontal = TRUE;
+  tasklist->nrows = 1;
+  tasklist->deskbar_mode = FALSE;
   tasklist->all_workspaces = FALSE;
   tasklist->button_relief = GTK_RELIEF_NORMAL;
   tasklist->switch_workspace = TRUE;
@@ -767,7 +775,8 @@ xfce_tasklist_size_request (GtkWidget      *widget,
         {
           gtk_widget_size_request (child->button, &child_req);
 
-          child_height = MAX (child_height, child_req.height);
+          /* child_height = MAX (child_height, child_req.height); */
+          child_height = MAX (child_height, tasklist->size / tasklist->nrows);
 
           if (child->type == CHILD_TYPE_GROUP_MENU)
             continue;
@@ -789,8 +798,11 @@ xfce_tasklist_size_request (GtkWidget      *widget,
     }
   else
     {
-      rows = tasklist->size / tasklist->max_button_size;
-      rows = CLAMP (rows, 1, n_windows);
+      /* rows = tasklist->size / tasklist->max_button_size; */
+      rows = tasklist->nrows;
+      /* rows = CLAMP (rows, 1, n_windows); */
+      if (rows < 1)
+        rows = 1;
 
       cols = n_windows / rows;
       if (cols * rows < n_windows)
@@ -807,7 +819,7 @@ xfce_tasklist_size_request (GtkWidget      *widget,
   /* set the requested sizes */
   if (xfce_tasklist_horizontal (tasklist))
     {
-      if (tasklist->horizontal != xfce_tasklist_horizontal (tasklist))
+      if (tasklist->deskbar_mode)
         {
           requisition->height = child_height * n_windows;
           requisition->width = tasklist->size;
@@ -862,11 +874,12 @@ xfce_tasklist_size_layout (XfceTasklist  *tasklist,
   gint               n_buttons;
   gint               n_buttons_target;
 
-  /* if we're in the opposite vertical mode, there are no columns */
-  if (tasklist->horizontal != xfce_tasklist_horizontal (tasklist))
+  /* if we're in deskbar mode, there are no columns */
+  if (tasklist->deskbar_mode && tasklist->show_labels)
     rows = tasklist->n_windows;
   else
-    rows = alloc->height / tasklist->max_button_size;
+    /* rows = alloc->height / tasklist->max_button_size; */
+    rows = tasklist->nrows;
 
   if (rows < 1)
     rows = 1;
@@ -1063,11 +1076,9 @@ xfce_tasklist_size_allocate (GtkWidget     *widget,
           child_alloc.width = MAX (w, 1); /* TODO this is a workaround */
           child_alloc.height = h / (rows - row);
 
-          if (!tasklist->horizontal
-              && xfce_tasklist_horizontal (tasklist))
+          if (tasklist->deskbar_mode && tasklist->show_labels)
             {
-              gtk_widget_get_child_requisition (child->button, &child_req);
-              child_alloc.height = child_req.height;
+              child_alloc.height = tasklist->size / tasklist->nrows;
             }
 
           h -= child_alloc.height;
@@ -3832,6 +3843,36 @@ xfce_tasklist_set_rotate_vertically (XfceTasklist *tasklist,
 
 
 void
+xfce_tasklist_set_nrows (XfceTasklist *tasklist,
+                         guint         nrows)
+{
+  panel_return_if_fail (XFCE_IS_TASKLIST (tasklist));
+
+  if (tasklist->nrows != nrows)
+    {
+      tasklist->nrows = nrows;
+      gtk_widget_queue_resize (GTK_WIDGET (tasklist));
+    }
+}
+
+
+
+void
+xfce_tasklist_set_deskbar_mode (XfceTasklist *tasklist,
+                                gboolean      deskbar_mode)
+{
+  panel_return_if_fail (XFCE_IS_TASKLIST (tasklist));
+
+  if (tasklist->deskbar_mode != deskbar_mode)
+    {
+      tasklist->deskbar_mode = deskbar_mode;
+      xfce_tasklist_update_orientation (tasklist);
+    }
+}
+
+
+
+void
 xfce_tasklist_set_orientation (XfceTasklist   *tasklist,
                                GtkOrientation  orientation)
 {
diff --git a/plugins/tasklist/tasklist-widget.h b/plugins/tasklist/tasklist-widget.h
index 3a0eaf4..30e9777 100644
--- a/plugins/tasklist/tasklist-widget.h
+++ b/plugins/tasklist/tasklist-widget.h
@@ -71,6 +71,12 @@ void  xfce_tasklist_set_orientation         (XfceTasklist   *tasklist,
 void  xfce_tasklist_set_size                (XfceTasklist   *tasklist,
                                              gint            size);
 
+void  xfce_tasklist_set_nrows               (XfceTasklist   *tasklist,
+                                             guint           nrows);
+
+void  xfce_tasklist_set_deskbar_mode        (XfceTasklist   *tasklist,
+                                             gboolean        deskbar_mode);
+
 void  xfce_tasklist_update_monitor_geometry (XfceTasklist   *tasklist);
 
 G_END_DECLS
diff --git a/plugins/tasklist/tasklist.c b/plugins/tasklist/tasklist.c
index 1c1a332..6639761 100644
--- a/plugins/tasklist/tasklist.c
+++ b/plugins/tasklist/tasklist.c
@@ -64,6 +64,10 @@ static void     tasklist_plugin_orientation_changed     (XfcePanelPlugin    *pan
                                                          GtkOrientation      orientation);
 static gboolean tasklist_plugin_size_changed            (XfcePanelPlugin    *panel_plugin,
                                                          gint                size);
+static void     tasklist_plugin_nrows_changed           (XfcePanelPlugin    *panel_plugin,
+                                                         guint               nrows);
+static void     tasklist_plugin_deskbar_mode_changed    (XfcePanelPlugin    *panel_plugin,
+                                                         gboolean            deskbar_mode);
 static void     tasklist_plugin_screen_position_changed (XfcePanelPlugin    *panel_plugin,
                                                          XfceScreenPosition  position);
 static void     tasklist_plugin_configure_plugin        (XfcePanelPlugin    *panel_plugin);
@@ -87,6 +91,8 @@ tasklist_plugin_class_init (TasklistPluginClass *klass)
   plugin_class->construct = tasklist_plugin_construct;
   plugin_class->orientation_changed = tasklist_plugin_orientation_changed;
   plugin_class->size_changed = tasklist_plugin_size_changed;
+  plugin_class->nrows_changed = tasklist_plugin_nrows_changed;
+  plugin_class->deskbar_mode_changed = tasklist_plugin_deskbar_mode_changed;
   plugin_class->screen_position_changed = tasklist_plugin_screen_position_changed;
   plugin_class->configure_plugin = tasklist_plugin_configure_plugin;
 }
@@ -186,6 +192,30 @@ tasklist_plugin_size_changed (XfcePanelPlugin *panel_plugin,
 
 
 static void
+tasklist_plugin_nrows_changed (XfcePanelPlugin *panel_plugin,
+                               guint            nrows)
+{
+  TasklistPlugin *plugin = XFCE_TASKLIST_PLUGIN (panel_plugin);
+
+  /* set the tasklist nrows */
+  xfce_tasklist_set_nrows (XFCE_TASKLIST (plugin->tasklist), nrows);
+}
+
+
+
+static void
+tasklist_plugin_deskbar_mode_changed (XfcePanelPlugin *panel_plugin,
+                                      gboolean         deskbar_mode)
+{
+  TasklistPlugin *plugin = XFCE_TASKLIST_PLUGIN (panel_plugin);
+
+  /* set the tasklist deskbar_mode */
+  xfce_tasklist_set_deskbar_mode (XFCE_TASKLIST (plugin->tasklist), deskbar_mode);
+}
+
+
+
+static void
 tasklist_plugin_screen_position_changed (XfcePanelPlugin    *panel_plugin,
                                          XfceScreenPosition  position)
 {


More information about the Xfce4-commits mailing list