[Xfce4-commits] <xfce4-panel:andrzejr/deskbar-length-adjust> tasklist: added support for xfce_tasklist_length_adjust.

Andrzej noreply at xfce.org
Mon Dec 19 18:18:05 CET 2011


Updating branch refs/heads/andrzejr/deskbar-length-adjust
         to 85cd9851fe28c2ce2c743b22c79eb7f54ed43478 (commit)
       from a072867401762c7a6c0b3a1a5b881d9eb4e91476 (commit)

commit 85cd9851fe28c2ce2c743b22c79eb7f54ed43478
Author: Andrzej <ndrwrdck at gmail.com>
Date:   Tue Dec 20 02:12:40 2011 +0900

    tasklist: added support for xfce_tasklist_length_adjust.
    
    TODO currently xfce_tasklist_size_layout is called twice, which should be optimized out by caching the results of the first invocation. Not done yet as the performance was satisfactory (probably due to CPU memory caching).

 plugins/tasklist/tasklist-widget.c |   25 +++++++++++++++++++++++++
 plugins/tasklist/tasklist-widget.h |    3 +++
 plugins/tasklist/tasklist.c        |   21 ++++++++++++++++++++-
 3 files changed, 48 insertions(+), 1 deletions(-)

diff --git a/plugins/tasklist/tasklist-widget.c b/plugins/tasklist/tasklist-widget.c
index e2d3a43..8fa664b 100644
--- a/plugins/tasklist/tasklist-widget.c
+++ b/plugins/tasklist/tasklist-widget.c
@@ -3844,6 +3844,31 @@ xfce_tasklist_set_size (XfceTasklist *tasklist,
 
 
 
+gint
+xfce_tasklist_length_adjust (XfceTasklist *tasklist,
+                             gint          length)
+{
+  gint rows, cols, arrow_position;
+
+  panel_return_val_if_fail (XFCE_IS_TASKLIST (tasklist), length);
+
+  xfce_tasklist_size_layout (tasklist, length, &rows, &cols, &arrow_position);
+
+  if (arrow_position != -1)
+    {
+      if (cols == 0)
+        return ARROW_BUTTON_SIZE;
+      else if (!xfce_tasklist_deskbar (tasklist) && tasklist->show_labels)
+        return length; /* buttons can stretch to accomodate the allocated size */
+      else
+        return cols * (tasklist->size / tasklist->nrows) + ARROW_BUTTON_SIZE;
+    }
+  else
+    return length; /* all buttons fit */
+}
+
+
+
 void
 xfce_tasklist_update_monitor_geometry (XfceTasklist *tasklist)
 {
diff --git a/plugins/tasklist/tasklist-widget.h b/plugins/tasklist/tasklist-widget.h
index 5b4fc01..982d6f8 100644
--- a/plugins/tasklist/tasklist-widget.h
+++ b/plugins/tasklist/tasklist-widget.h
@@ -76,6 +76,9 @@ void  xfce_tasklist_set_nrows               (XfceTasklist   *tasklist,
 
 void  xfce_tasklist_update_monitor_geometry (XfceTasklist   *tasklist);
 
+gint  xfce_tasklist_length_adjust           (XfceTasklist   *tasklist,
+                                             gint            length);
+
 G_END_DECLS
 
 #endif /* !__XFCE_TASKLIST_H__ */
diff --git a/plugins/tasklist/tasklist.c b/plugins/tasklist/tasklist.c
index 8f12f5c..56f03dd 100644
--- a/plugins/tasklist/tasklist.c
+++ b/plugins/tasklist/tasklist.c
@@ -40,6 +40,7 @@ void tasklist_plugin_register_type (XfcePanelTypeModule *type_module);
 #define XFCE_IS_TASKLIST_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), XFCE_TYPE_TASKLIST_PLUGIN))
 #define XFCE_TASKLIST_PLUGIN_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), XFCE_TYPE_TASKLIST_PLUGIN, TasklistPluginClass))
 
+#define HANDLE_SIZE       (8)
 
 typedef struct _TasklistPluginClass TasklistPluginClass;
 struct _TasklistPluginClass
@@ -66,6 +67,8 @@ static gboolean tasklist_plugin_size_changed            (XfcePanelPlugin    *pan
                                                          gint                size);
 static void     tasklist_plugin_nrows_changed           (XfcePanelPlugin    *panel_plugin,
                                                          guint               nrows);
+static gint     tasklist_plugin_length_adjust           (XfcePanelPlugin    *panel_plugin,
+                                                         gint                length);
 static void     tasklist_plugin_screen_position_changed (XfcePanelPlugin    *panel_plugin,
                                                          XfceScreenPosition  position);
 static void     tasklist_plugin_configure_plugin        (XfcePanelPlugin    *panel_plugin);
@@ -90,6 +93,7 @@ tasklist_plugin_class_init (TasklistPluginClass *klass)
   plugin_class->mode_changed = tasklist_plugin_mode_changed;
   plugin_class->size_changed = tasklist_plugin_size_changed;
   plugin_class->nrows_changed = tasklist_plugin_nrows_changed;
+  plugin_class->length_adjust = tasklist_plugin_length_adjust;
   plugin_class->screen_position_changed = tasklist_plugin_screen_position_changed;
   plugin_class->configure_plugin = tasklist_plugin_configure_plugin;
 }
@@ -111,7 +115,7 @@ tasklist_plugin_init (TasklistPlugin *plugin)
   gtk_box_pack_start (GTK_BOX (box), plugin->handle, FALSE, FALSE, 0);
   g_signal_connect (G_OBJECT (plugin->handle), "expose-event",
       G_CALLBACK (tasklist_plugin_handle_expose_event), plugin);
-  gtk_widget_set_size_request (plugin->handle, 8, 8);
+  gtk_widget_set_size_request (plugin->handle, HANDLE_SIZE, HANDLE_SIZE);
   gtk_widget_show (plugin->handle);
 
   plugin->tasklist = g_object_new (XFCE_TYPE_TASKLIST, NULL);
@@ -212,6 +216,21 @@ tasklist_plugin_screen_position_changed (XfcePanelPlugin    *panel_plugin,
 
 
 
+static gint
+tasklist_plugin_length_adjust (XfcePanelPlugin *panel_plugin,
+                               gint             length)
+{
+  TasklistPlugin *plugin = XFCE_TASKLIST_PLUGIN (panel_plugin);
+  gint            result;
+
+  result = (GTK_WIDGET_VISIBLE (plugin->handle)) ? HANDLE_SIZE : 0;
+  result += xfce_tasklist_length_adjust (XFCE_TASKLIST (plugin->tasklist), length - result);
+
+  return result;
+}
+
+
+
 static void
 tasklist_plugin_configure_plugin (XfcePanelPlugin *panel_plugin)
 {


More information about the Xfce4-commits mailing list