[Xfce4-commits] <xfce4-panel:andrzejr/deskbar-github> Added panel and plugin properties: - nrows - deskbar-mode

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


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

commit b4c0807f56dcca17a63569fa87b0becd430b7519
Author: Andrzej <ndrwrdck at gmail.com>
Date:   Thu Nov 10 13:08:48 2011 +0900

    Added panel and plugin properties:
    - nrows
    - deskbar-mode

 libxfce4panel/xfce-panel-plugin-provider.c |   24 ++++
 libxfce4panel/xfce-panel-plugin-provider.h |   12 ++
 libxfce4panel/xfce-panel-plugin.c          |  158 ++++++++++++++++++++++++++++
 libxfce4panel/xfce-panel-plugin.h          |    8 ++
 panel/panel-application.c                  |    4 +
 panel/panel-itembar.c                      |   27 +++++
 panel/panel-plugin-external.c              |   46 ++++++++
 panel/panel-preferences-dialog.c           |    2 +
 panel/panel-preferences-dialog.glade       |   57 ++++++++++-
 panel/panel-window.c                       |   82 ++++++++++++++
 10 files changed, 417 insertions(+), 3 deletions(-)

diff --git a/libxfce4panel/xfce-panel-plugin-provider.c b/libxfce4panel/xfce-panel-plugin-provider.c
index d7b2ec3..124d40e 100644
--- a/libxfce4panel/xfce-panel-plugin-provider.c
+++ b/libxfce4panel/xfce-panel-plugin-provider.c
@@ -126,6 +126,30 @@ xfce_panel_plugin_provider_set_orientation (XfcePanelPluginProvider *provider,
 
 
 void
+xfce_panel_plugin_provider_set_nrows (XfcePanelPluginProvider *provider,
+                                      guint                    nrows)
+{
+  panel_return_if_fail (XFCE_IS_PANEL_PLUGIN_PROVIDER (provider));
+  panel_return_if_fail (*XFCE_PANEL_PLUGIN_PROVIDER_GET_INTERFACE (provider)->set_nrows);
+
+  (*XFCE_PANEL_PLUGIN_PROVIDER_GET_INTERFACE (provider)->set_nrows) (provider, nrows);
+}
+
+
+
+void
+xfce_panel_plugin_provider_set_deskbar_mode (XfcePanelPluginProvider *provider,
+                                             gboolean                 deskbar_mode)
+{
+  panel_return_if_fail (XFCE_IS_PANEL_PLUGIN_PROVIDER (provider));
+  panel_return_if_fail (*XFCE_PANEL_PLUGIN_PROVIDER_GET_INTERFACE (provider)->set_deskbar_mode);
+
+  (*XFCE_PANEL_PLUGIN_PROVIDER_GET_INTERFACE (provider)->set_deskbar_mode) (provider, deskbar_mode);
+}
+
+
+
+void
 xfce_panel_plugin_provider_set_screen_position (XfcePanelPluginProvider *provider,
                                                 XfceScreenPosition       screen_position)
 {
diff --git a/libxfce4panel/xfce-panel-plugin-provider.h b/libxfce4panel/xfce-panel-plugin-provider.h
index bacf4c5..57e238d 100644
--- a/libxfce4panel/xfce-panel-plugin-provider.h
+++ b/libxfce4panel/xfce-panel-plugin-provider.h
@@ -69,6 +69,10 @@ struct _XfcePanelPluginProviderInterface
   void         (*set_locked)          (XfcePanelPluginProvider       *provider,
                                        gboolean                       locked);
   void         (*ask_remove)          (XfcePanelPluginProvider       *provider);
+  void         (*set_nrows)           (XfcePanelPluginProvider       *provider,
+                                       guint                         nrows);
+  void         (*set_deskbar_mode)    (XfcePanelPluginProvider       *provider,
+                                       gboolean                      deskbar_mode);
 };
 
 /* signals send from the plugin to the panel (possibly through the wrapper) */
@@ -100,6 +104,8 @@ typedef enum /*< skip >*/
 {
   PROVIDER_PROP_TYPE_SET_SIZE,                /* gint */
   PROVIDER_PROP_TYPE_SET_ORIENTATION,         /* GtkOrientation (as gint) */
+  PROVIDER_PROP_TYPE_SET_NROWS,               /* guint */
+  PROVIDER_PROP_TYPE_SET_DESKBAR_MODE,        /* gboolean */
   PROVIDER_PROP_TYPE_SET_SCREEN_POSITION,     /* XfceScreenPosition (as gint) */
   PROVIDER_PROP_TYPE_SET_BACKGROUND_ALPHA,    /* gdouble */
   PROVIDER_PROP_TYPE_SET_LOCKED,              /* gboolean */
@@ -157,6 +163,12 @@ void                  xfce_panel_plugin_provider_set_size            (XfcePanelP
 void                  xfce_panel_plugin_provider_set_orientation     (XfcePanelPluginProvider       *provider,
                                                                       GtkOrientation                 orientation);
 
+void                  xfce_panel_plugin_provider_set_nrows           (XfcePanelPluginProvider       *provider,
+                                                                      guint                          nrows);
+
+void                  xfce_panel_plugin_provider_set_deskbar_mode    (XfcePanelPluginProvider       *provider,
+                                                                      gboolean                       deskbar_mode);
+
 void                  xfce_panel_plugin_provider_set_screen_position (XfcePanelPluginProvider       *provider,
                                                                       XfceScreenPosition             screen_position);
 
diff --git a/libxfce4panel/xfce-panel-plugin.c b/libxfce4panel/xfce-panel-plugin.c
index 0251992..36d66cc 100644
--- a/libxfce4panel/xfce-panel-plugin.c
+++ b/libxfce4panel/xfce-panel-plugin.c
@@ -92,6 +92,10 @@ static void          xfce_panel_plugin_set_size               (XfcePanelPluginPr
                                                                gint                              size);
 static void          xfce_panel_plugin_set_orientation        (XfcePanelPluginProvider          *provider,
                                                                GtkOrientation                    orientation);
+static void          xfce_panel_plugin_set_nrows              (XfcePanelPluginProvider          *provider,
+                                                               guint                             nrows);
+static void          xfce_panel_plugin_set_deskbar_mode       (XfcePanelPluginProvider          *provider,
+                                                               gboolean                          deskbar_mode);
 static void          xfce_panel_plugin_set_screen_position    (XfcePanelPluginProvider          *provider,
                                                                XfceScreenPosition                screen_position);
 static void          xfce_panel_plugin_save                   (XfcePanelPluginProvider          *provider);
@@ -124,6 +128,8 @@ enum
   PROP_UNIQUE_ID,
   PROP_ORIENTATION,
   PROP_SIZE,
+  PROP_NROWS,
+  PROP_DESKBAR_MODE,
   PROP_SCREEN_POSITION,
   PROP_EXPAND,
   PROP_SHRINK
@@ -135,6 +141,8 @@ enum
   CONFIGURE_PLUGIN,
   FREE_DATA,
   ORIENTATION_CHANGED,
+  NROWS_CHANGED,
+  DESKBAR_MODE_CHANGED,
   REMOTE_EVENT,
   REMOVED,
   SAVE,
@@ -167,6 +175,8 @@ struct _XfcePanelPluginPrivate
   guint                expand : 1;
   guint                shrink : 1;
   GtkOrientation       orientation;
+  guint                nrows;
+  gboolean             deskbar_mode : 1;
   XfceScreenPosition   screen_position;
   guint                locked : 1;
   GSList              *menu_items;
@@ -391,6 +401,42 @@ xfce_panel_plugin_class_init (XfcePanelPluginClass *klass)
                   G_TYPE_BOOLEAN, 1, G_TYPE_INT);
 
   /**
+   * XfcePanelPlugin::nrows-changed
+   * @plugin : an #XfcePanelPlugin.
+   * @nrows  : the new number of rows of the panel.
+   *
+   * This signal is emmitted whenever the number of rows of the panel
+   * the @plugin is on changes. Plugins writers can for example use
+   * this signal to update their icon size.
+   **/
+  plugin_signals[NROWS_CHANGED] =
+    g_signal_new (g_intern_static_string ("nrows-changed"),
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (XfcePanelPluginClass, nrows_changed),
+                  NULL, NULL,
+                  g_cclosure_marshal_VOID__ENUM,
+                  G_TYPE_NONE, 1, G_TYPE_UINT);
+
+  /**
+   * XfcePanelPlugin::deskbar-mode-changed
+   * @plugin        : an #XfcePanelPlugin.
+   * @deskbar-mode  : a flag set to TRUE when the panel is in the deskbar mode.
+   *
+   * This signal is emmitted whenever the panel switches to or from the deskbar mode
+   * Plugins writers can for example use
+   * this signal to update the orientation of the icons.
+   **/
+  plugin_signals[DESKBAR_MODE_CHANGED] =
+    g_signal_new (g_intern_static_string ("deskbar-mode-changed"),
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (XfcePanelPluginClass, deskbar_mode_changed),
+                  NULL, NULL,
+                  g_cclosure_marshal_VOID__ENUM,
+                  G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+
+  /**
    * XfcePanelPlugin::screen-position-changed
    * @plugin   : an #XfcePanelPlugin.
    * @position : the new #XfceScreenPosition of the panel.
@@ -533,6 +579,40 @@ xfce_panel_plugin_class_init (XfcePanelPluginClass *klass)
                                                      | G_PARAM_STATIC_STRINGS));
 
   /**
+   * XfcePanelPlugin:nrows:
+   *
+   * The number of rows of the #XfcePanelPlugin. Plugin writer can use it to read the
+   * number of rows, but xfce_panel_plugin_get_nrows() is recommended.
+   *
+   * Since: 4.10
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_NROWS,
+                                   g_param_spec_uint ("nrows",
+                                                     "Number of Rows",
+                                                     "Number of rows of the plugin's panel",
+                                                     1, 8, 1,
+                                                     G_PARAM_READABLE
+                                                     | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * XfcePanelPlugin:deskbar-mode:
+   *
+   * Is the #XfcePanelPlugin in a vertical deskbar mode? Plugin writer can use it to check the
+   * deskbar-mode flag, but xfce_panel_plugin_get_deskbar_mode() is recommended.
+   *
+   * Since: 4.10
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_DESKBAR_MODE,
+                                   g_param_spec_boolean ("deskbar-mode",
+                                                         "Deskbar Mode",
+                                                         "Deskbar mode flag of the plugin's panel",
+                                                         FALSE,
+                                                         G_PARAM_READABLE
+                                                         | G_PARAM_STATIC_STRINGS));
+
+  /**
    * XfcePanelPlugin:screen-position:
    *
    * The #XfceScreenPosition of the #XfcePanelPlugin. Plugin writer can use it
@@ -601,6 +681,8 @@ xfce_panel_plugin_init (XfcePanelPlugin *plugin)
   plugin->priv->property_base = NULL;
   plugin->priv->arguments = NULL;
   plugin->priv->size = 0;
+  plugin->priv->nrows = 1;
+  plugin->priv->deskbar_mode = FALSE;
   plugin->priv->expand = FALSE;
   plugin->priv->shrink = FALSE;
   plugin->priv->orientation = GTK_ORIENTATION_HORIZONTAL;
@@ -632,6 +714,8 @@ xfce_panel_plugin_provider_init (XfcePanelPluginProviderInterface *iface)
   iface->get_unique_id = (ProviderToPluginInt) xfce_panel_plugin_get_unique_id;
   iface->set_size = xfce_panel_plugin_set_size;
   iface->set_orientation = xfce_panel_plugin_set_orientation;
+  iface->set_nrows = xfce_panel_plugin_set_nrows;
+  iface->set_deskbar_mode = xfce_panel_plugin_set_deskbar_mode;
   iface->set_screen_position = xfce_panel_plugin_set_screen_position;
   iface->save = xfce_panel_plugin_save;
   iface->get_show_configure = xfce_panel_plugin_get_show_configure;
@@ -701,6 +785,14 @@ xfce_panel_plugin_get_property (GObject    *object,
       g_value_set_int (value, private->size);
       break;
 
+    case PROP_DESKBAR_MODE:
+      g_value_set_boolean (value, private->deskbar_mode);
+      break;
+
+    case PROP_NROWS:
+      g_value_set_uint (value, private->nrows);
+      break;
+
     case PROP_SCREEN_POSITION:
       g_value_set_enum (value, private->screen_position);
       break;
@@ -1281,6 +1373,72 @@ xfce_panel_plugin_set_orientation (XfcePanelPluginProvider *provider,
 
 
 
+uint
+xfce_panel_plugin_get_nrows (XfcePanelPlugin *plugin)
+{
+  g_return_val_if_fail (XFCE_IS_PANEL_PLUGIN (plugin), TRUE);
+
+  return plugin->priv->nrows;
+}
+
+
+
+static void
+xfce_panel_plugin_set_nrows (XfcePanelPluginProvider *provider,
+                             guint                    nrows)
+{
+  XfcePanelPlugin *plugin = XFCE_PANEL_PLUGIN (provider);
+
+  panel_return_if_fail (XFCE_IS_PANEL_PLUGIN (provider));
+  /* check if update is required */
+  if (G_LIKELY (plugin->priv->nrows != nrows))
+    {
+      plugin->priv->nrows = nrows;
+
+      g_signal_emit (G_OBJECT (plugin),
+                     plugin_signals[NROWS_CHANGED], 0, nrows);
+
+      g_object_notify (G_OBJECT (plugin), "nrows");
+    }
+}
+
+
+
+gboolean
+xfce_panel_plugin_get_deskbar_mode (XfcePanelPlugin *plugin)
+{
+  g_return_val_if_fail (XFCE_IS_PANEL_PLUGIN (plugin), TRUE);
+
+  return plugin->priv->deskbar_mode;
+}
+
+
+
+static void
+xfce_panel_plugin_set_deskbar_mode (XfcePanelPluginProvider *provider,
+                                    gboolean                 deskbar_mode)
+{
+  XfcePanelPlugin *plugin = XFCE_PANEL_PLUGIN (provider);
+
+  panel_return_if_fail (XFCE_IS_PANEL_PLUGIN (provider));
+
+  /* normalize the value */
+  deskbar_mode = !!deskbar_mode;
+
+  if (G_LIKELY (plugin->priv->deskbar_mode != deskbar_mode))
+    {
+      plugin->priv->deskbar_mode = deskbar_mode;
+
+      g_signal_emit (G_OBJECT (plugin),
+                     plugin_signals[DESKBAR_MODE_CHANGED], 0,
+                     deskbar_mode);
+
+      g_object_notify (G_OBJECT (plugin), "deskbar-mode");
+    }
+}
+
+
+
 static void
 xfce_panel_plugin_set_screen_position (XfcePanelPluginProvider *provider,
                                        XfceScreenPosition       screen_position)
diff --git a/libxfce4panel/xfce-panel-plugin.h b/libxfce4panel/xfce-panel-plugin.h
index a6b8f75..f6716a0 100644
--- a/libxfce4panel/xfce-panel-plugin.h
+++ b/libxfce4panel/xfce-panel-plugin.h
@@ -118,6 +118,10 @@ struct _XfcePanelPluginClass
                                        gint                size);
   void     (*orientation_changed)     (XfcePanelPlugin    *plugin,
                                        GtkOrientation      orientation);
+  void     (*nrows_changed)           (XfcePanelPlugin    *plugin,
+                                       guint               nrows);
+  void     (*deskbar_mode_changed)    (XfcePanelPlugin    *plugin,
+                                       gboolean            deskbar_mode);
   void     (*free_data)               (XfcePanelPlugin    *plugin);
   void     (*save)                    (XfcePanelPlugin    *plugin);
   void     (*about)                   (XfcePanelPlugin    *plugin);
@@ -168,6 +172,10 @@ const gchar * const  *xfce_panel_plugin_get_arguments       (XfcePanelPlugin   *
 
 gint                  xfce_panel_plugin_get_size            (XfcePanelPlugin   *plugin) G_GNUC_PURE;
 
+guint                 xfce_panel_plugin_get_nrows           (XfcePanelPlugin   *plugin) G_GNUC_PURE;
+
+gboolean              xfce_panel_plugin_get_deskbar_mode    (XfcePanelPlugin   *plugin) G_GNUC_PURE;
+
 gboolean              xfce_panel_plugin_get_expand          (XfcePanelPlugin   *plugin) G_GNUC_PURE;
 
 void                  xfce_panel_plugin_set_expand          (XfcePanelPlugin   *plugin,
diff --git a/panel/panel-application.c b/panel/panel-application.c
index 8eecb9e..0b69b52 100644
--- a/panel/panel-application.c
+++ b/panel/panel-application.c
@@ -297,6 +297,8 @@ panel_application_xfconf_window_bindings (PanelApplication *application,
     { "output-name", G_TYPE_STRING },
     { "position", G_TYPE_STRING },
     { "disable-struts", G_TYPE_BOOLEAN },
+    { "nrows", G_TYPE_UINT },
+    { "deskbar-mode", G_TYPE_BOOLEAN },
     { NULL }
   };
 
@@ -1450,6 +1452,8 @@ panel_application_new_window (PanelApplication *application,
   itembar = panel_itembar_new ();
   exo_binding_new (G_OBJECT (window), "horizontal", G_OBJECT (itembar), "horizontal");
   exo_binding_new (G_OBJECT (window), "size", G_OBJECT (itembar), "size");
+  exo_binding_new (G_OBJECT (window), "nrows", G_OBJECT (itembar), "nrows");
+  exo_binding_new (G_OBJECT (window), "deskbar-mode", G_OBJECT (itembar), "deskbar-mode");
   gtk_container_add (GTK_CONTAINER (window), itembar);
   gtk_widget_show (itembar);
 
diff --git a/panel/panel-itembar.c b/panel/panel-itembar.c
index 209c05c..e8b5cd7 100644
--- a/panel/panel-itembar.c
+++ b/panel/panel-itembar.c
@@ -87,6 +87,8 @@ struct _PanelItembar
   /* some properties we clone from the panel window */
   guint           horizontal : 1;
   guint           size;
+  guint           nrows;
+  guint           deskbar_mode : 1;
 
   /* dnd support */
   gint            highlight_index;
@@ -105,6 +107,8 @@ enum
 {
   PROP_0,
   PROP_HORIZONTAL,
+  PROP_NROWS,
+  PROP_DESKBAR_MODE,
   PROP_SIZE
 };
 
@@ -179,6 +183,19 @@ panel_itembar_class_init (PanelItembarClass *klass)
                                                       16, 128, 48,
                                                       EXO_PARAM_WRITABLE));
 
+  g_object_class_install_property (gobject_class,
+                                   PROP_NROWS,
+                                   g_param_spec_uint ("nrows",
+                                                      NULL, NULL,
+                                                      1, 8, 1,
+                                                      EXO_PARAM_WRITABLE));
+
+  g_object_class_install_property (gobject_class,
+                                   PROP_DESKBAR_MODE,
+                                   g_param_spec_boolean ("deskbar-mode",
+                                                         NULL, NULL,
+                                                         FALSE,
+                                                         EXO_PARAM_WRITABLE));
   gtk_container_class_install_child_property (gtkcontainer_class,
                                               CHILD_PROP_EXPAND,
                                               g_param_spec_boolean ("expand",
@@ -209,6 +226,8 @@ panel_itembar_init (PanelItembar *itembar)
   itembar->children = NULL;
   itembar->horizontal = TRUE;
   itembar->size = 30;
+  itembar->nrows = 1;
+  itembar->deskbar_mode = FALSE;
   itembar->highlight_index = -1;
 
   GTK_WIDGET_SET_FLAGS (GTK_WIDGET (itembar), GTK_NO_WINDOW);
@@ -236,6 +255,14 @@ panel_itembar_set_property (GObject      *object,
       itembar->size = g_value_get_uint (value);
       break;
 
+    case PROP_NROWS:
+      itembar->nrows = g_value_get_uint (value);
+      break;
+
+    case PROP_DESKBAR_MODE:
+      itembar->deskbar_mode = g_value_get_boolean (value);
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
diff --git a/panel/panel-plugin-external.c b/panel/panel-plugin-external.c
index 4cf0a62..1c09d12 100644
--- a/panel/panel-plugin-external.c
+++ b/panel/panel-plugin-external.c
@@ -88,6 +88,10 @@ static void         panel_plugin_external_set_orientation         (XfcePanelPlug
                                                                    GtkOrientation                    orientation);
 static void         panel_plugin_external_set_screen_position     (XfcePanelPluginProvider          *provider,
                                                                    XfceScreenPosition                screen_position);
+static void         panel_plugin_external_set_nrows               (XfcePanelPluginProvider          *provider,
+                                                                   guint                             nrows);
+static void         panel_plugin_external_set_deskbar_mode        (XfcePanelPluginProvider          *provider,
+                                                                   gboolean                          deskbar_mode);
 static void         panel_plugin_external_save                    (XfcePanelPluginProvider          *provider);
 static gboolean     panel_plugin_external_get_show_configure      (XfcePanelPluginProvider          *provider);
 static void         panel_plugin_external_show_configure          (XfcePanelPluginProvider          *provider);
@@ -221,6 +225,8 @@ panel_plugin_external_provider_init (XfcePanelPluginProviderInterface *iface)
   iface->get_unique_id = panel_plugin_external_get_unique_id;
   iface->set_size = panel_plugin_external_set_size;
   iface->set_orientation = panel_plugin_external_set_orientation;
+  iface->set_nrows = panel_plugin_external_set_nrows;
+  iface->set_deskbar_mode = panel_plugin_external_set_deskbar_mode;
   iface->set_screen_position = panel_plugin_external_set_screen_position;
   iface->save = panel_plugin_external_save;
   iface->get_show_configure = panel_plugin_external_get_show_configure;
@@ -918,6 +924,46 @@ panel_plugin_external_set_orientation (XfcePanelPluginProvider *provider,
 
 
 static void
+panel_plugin_external_set_nrows (XfcePanelPluginProvider *provider,
+                                 guint                    nrows)
+{
+  GValue value = { 0, };
+
+  panel_return_if_fail (PANEL_IS_PLUGIN_EXTERNAL (provider));
+  panel_return_if_fail (XFCE_IS_PANEL_PLUGIN_PROVIDER (provider));
+
+  g_value_init (&value, G_TYPE_INT);
+  g_value_set_int (&value, nrows);
+
+  panel_plugin_external_queue_add (PANEL_PLUGIN_EXTERNAL (provider),
+                                   PROVIDER_PROP_TYPE_SET_NROWS, &value);
+
+  g_value_unset (&value);
+}
+
+
+
+static void
+panel_plugin_external_set_deskbar_mode (XfcePanelPluginProvider *provider,
+                                        gboolean                 deskbar_mode)
+{
+  GValue value = { 0, };
+
+  panel_return_if_fail (PANEL_IS_PLUGIN_EXTERNAL (provider));
+  panel_return_if_fail (XFCE_IS_PANEL_PLUGIN_PROVIDER (provider));
+
+  g_value_init (&value, G_TYPE_BOOLEAN);
+  g_value_set_boolean (&value, deskbar_mode);
+
+  panel_plugin_external_queue_add (PANEL_PLUGIN_EXTERNAL (provider),
+                                   PROVIDER_PROP_TYPE_SET_DESKBAR_MODE, &value);
+
+  g_value_unset (&value);
+}
+
+
+
+static void
 panel_plugin_external_set_screen_position (XfcePanelPluginProvider *provider,
                                            XfceScreenPosition       screen_position)
 {
diff --git a/panel/panel-preferences-dialog.c b/panel/panel-preferences-dialog.c
index eb402d3..2aacd30 100644
--- a/panel/panel-preferences-dialog.c
+++ b/panel/panel-preferences-dialog.c
@@ -423,6 +423,8 @@ panel_preferences_dialog_bindings_update (PanelPreferencesDialog *dialog)
   panel_preferences_dialog_bindings_add (dialog, "composited", "sensitive");
   panel_preferences_dialog_bindings_add (dialog, "background-style", "active");
   panel_preferences_dialog_bindings_add (dialog, "background-color", "color");
+  panel_preferences_dialog_bindings_add (dialog, "nrows", "value");
+  panel_preferences_dialog_bindings_add (dialog, "deskbar-mode", "active");
 
   /* watch image changes from the panel */
   dialog->bg_image_notify_handler_id = g_signal_connect_swapped (G_OBJECT (dialog->active),
diff --git a/panel/panel-preferences-dialog.glade b/panel/panel-preferences-dialog.glade
index 9c6ab4a..8eeaf22 100644
--- a/panel/panel-preferences-dialog.glade
+++ b/panel/panel-preferences-dialog.glade
@@ -48,6 +48,13 @@
       </row>
     </data>
   </object>
+    <object class="GtkAdjustment" id="nrows">
+    <property name="value">1</property>
+    <property name="lower">1</property>
+    <property name="upper">8</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">1</property>
+  </object>
     <object class="GtkAdjustment" id="size">
     <property name="value">16</property>
     <property name="lower">16</property>
@@ -332,6 +339,20 @@
                                     <property name="position">5</property>
                                   </packing>
                                 </child>
+                                <child>
+                                  <object class="GtkCheckButton" id="deskbar-mode">
+                                    <property name="label" translatable="yes">Vertical panel as _deskbar</property>
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">False</property>
+                                    <property name="tooltip_text" translatable="yes">Select this option to distribute items horizontally. This has an effect only when the panel is oriented vertically.</property>
+                                    <property name="use_underline">True</property>
+                                    <property name="draw_indicator">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="position">6</property>
+                                  </packing>
+                                </child>
                               </object>
                             </child>
                           </object>
@@ -364,7 +385,7 @@
                               <object class="GtkTable" id="table1">
                                 <property name="visible">True</property>
                                 <property name="border_width">6</property>
-                                <property name="n_rows">3</property>
+                                <property name="n_rows">4</property>
                                 <property name="n_columns">2</property>
                                 <property name="column_spacing">12</property>
                                 <property name="row_spacing">6</property>
@@ -395,6 +416,20 @@
                                   </packing>
                                 </child>
                                 <child>
+                                  <object class="GtkLabel" id="label18">
+                                    <property name="visible">True</property>
+                                    <property name="xalign">0</property>
+                                    <property name="label" translatable="yes">Ro_ws:</property>
+                                    <property name="use_underline">True</property>
+                                    <property name="mnemonic_widget">nrows-scale</property>
+                                  </object>
+                                  <packing>
+                                    <property name="top_attach">2</property>
+                                    <property name="bottom_attach">3</property>
+                                    <property name="x_options">GTK_FILL</property>
+                                  </packing>
+                                </child>
+                                <child>
                                   <object class="GtkHScale" id="length-scale">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
@@ -425,6 +460,22 @@
                                   </packing>
                                 </child>
                                 <child>
+                                  <object class="GtkHScale" id="nrows-scale">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="update_policy">discontinuous</property>
+                                    <property name="adjustment">nrows</property>
+                                    <property name="digits">0</property>
+                                    <property name="value_pos">right</property>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">1</property>
+                                    <property name="right_attach">2</property>
+                                    <property name="top_attach">2</property>
+                                    <property name="bottom_attach">3</property>
+                                  </packing>
+                                </child>
+                                <child>
                                   <object class="GtkCheckButton" id="length-adjust">
                                     <property name="label" translatable="yes">A_utomatically increase the length</property>
                                     <property name="visible">True</property>
@@ -436,8 +487,8 @@
                                   </object>
                                   <packing>
                                     <property name="right_attach">2</property>
-                                    <property name="top_attach">2</property>
-                                    <property name="bottom_attach">3</property>
+                                    <property name="top_attach">3</property>
+                                    <property name="bottom_attach">4</property>
                                   </packing>
                                 </child>
                               </object>
diff --git a/panel/panel-window.c b/panel/panel-window.c
index 64e184a..dd9aea1 100644
--- a/panel/panel-window.c
+++ b/panel/panel-window.c
@@ -135,6 +135,10 @@ static void         panel_window_plugin_set_orientation     (GtkWidget        *w
                                                              gpointer          user_data);
 static void         panel_window_plugin_set_size            (GtkWidget        *widget,
                                                              gpointer          user_data);
+static void         panel_window_plugin_set_nrows           (GtkWidget        *widget,
+                                                             gpointer          user_data);
+static void         panel_window_plugin_set_deskbar_mode    (GtkWidget        *widget,
+                                                             gpointer          user_data);
 static void         panel_window_plugin_set_screen_position (GtkWidget        *widget,
                                                              gpointer          user_data);
 
@@ -151,6 +155,8 @@ enum
   PROP_SPAN_MONITORS,
   PROP_OUTPUT_NAME,
   PROP_POSITION,
+  PROP_NROWS,
+  PROP_DESKBAR_MODE,
   PROP_DISABLE_STRUTS
 };
 
@@ -158,6 +164,8 @@ enum _PluginProp
 {
   PLUGIN_PROP_ORIENTATION,
   PLUGIN_PROP_SCREEN_POSITION,
+  PLUGIN_PROP_NROWS,
+  PLUGIN_PROP_DESKBAR_MODE,
   PLUGIN_PROP_SIZE
 };
 
@@ -256,7 +264,9 @@ struct _PanelWindow
   guint                size;
   gdouble              length;
   guint                length_adjust : 1;
+  guint                nrows;
   guint                horizontal : 1;
+  guint                deskbar_mode : 1;
   SnapPosition         snap_position;
   guint                span_monitors : 1;
   gchar               *output_name;
@@ -394,6 +404,18 @@ panel_window_class_init (PanelWindowClass *klass)
                                                          FALSE,
                                                          EXO_PARAM_READWRITE));
 
+  g_object_class_install_property (gobject_class,
+                                   PROP_NROWS,
+                                   g_param_spec_uint ("nrows", NULL, NULL,
+                                                      1, 8, 1,
+                                                      EXO_PARAM_READWRITE));
+
+  g_object_class_install_property (gobject_class,
+                                   PROP_DESKBAR_MODE,
+                                   g_param_spec_boolean ("deskbar-mode", NULL, NULL,
+                                                         TRUE,
+                                                         EXO_PARAM_READWRITE));
+
   gtk_widget_class_install_style_property (gtkwidget_class,
                                            g_param_spec_int ("popup-delay",
                                                              NULL,
@@ -439,6 +461,8 @@ panel_window_init (PanelWindow *window)
   window->size = 30;
   window->length = 0.10;
   window->length_adjust = TRUE;
+  window->nrows = 1;
+  window->deskbar_mode = FALSE;
   window->snap_position = SNAP_POSITION_NONE;
   window->span_monitors = FALSE;
   window->position_locked = FALSE;
@@ -525,6 +549,14 @@ panel_window_get_property (GObject    *object,
       g_value_set_boolean (value, window->struts_disabled);
       break;
 
+    case PROP_NROWS:
+      g_value_set_uint (value,  window->nrows);
+      break;
+
+    case PROP_DESKBAR_MODE:
+      g_value_set_boolean (value, window->deskbar_mode);
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -662,6 +694,24 @@ panel_window_set_property (GObject      *object,
         }
       break;
 
+    case PROP_NROWS:
+      val_uint = g_value_get_uint (value);
+      if (window->nrows != val_uint)
+        {
+          window->nrows = val_uint;
+          panel_window_plugins_update (window, PLUGIN_PROP_NROWS);
+        }
+      break;
+
+    case PROP_DESKBAR_MODE:
+      val_bool = g_value_get_boolean (value);
+      if (val_bool != window->deskbar_mode)
+        {
+          window->deskbar_mode = val_bool;
+          panel_window_plugins_update (window, PLUGIN_PROP_DESKBAR_MODE);
+        }
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -2367,6 +2417,14 @@ panel_window_plugins_update (PanelWindow *window,
     case PLUGIN_PROP_SIZE:
       func = panel_window_plugin_set_size;
       break;
+
+    case PLUGIN_PROP_NROWS:
+      func = panel_window_plugin_set_nrows;
+      break;
+
+    case PLUGIN_PROP_DESKBAR_MODE:
+      func = panel_window_plugin_set_deskbar_mode;
+      break;
       break;
 
     default:
@@ -2409,6 +2467,28 @@ panel_window_plugin_set_size (GtkWidget *widget,
                                        PANEL_WINDOW (user_data)->size);
 }
 
+static void
+panel_window_plugin_set_deskbar_mode (GtkWidget *widget,
+                                      gpointer   user_data)
+{
+  panel_return_if_fail (XFCE_IS_PANEL_PLUGIN_PROVIDER (widget));
+  panel_return_if_fail (PANEL_IS_WINDOW (user_data));
+
+  xfce_panel_plugin_provider_set_deskbar_mode (XFCE_PANEL_PLUGIN_PROVIDER (widget),
+                                               PANEL_WINDOW (user_data)->deskbar_mode);
+}
+
+static void
+panel_window_plugin_set_nrows (GtkWidget *widget,
+                               gpointer   user_data)
+{
+  panel_return_if_fail (XFCE_IS_PANEL_PLUGIN_PROVIDER (widget));
+  panel_return_if_fail (PANEL_IS_WINDOW (user_data));
+
+  xfce_panel_plugin_provider_set_nrows (XFCE_PANEL_PLUGIN_PROVIDER (widget),
+                                        PANEL_WINDOW (user_data)->nrows);
+}
+
 
 
 static void
@@ -2544,6 +2624,8 @@ panel_window_set_povider_info (PanelWindow *window,
   panel_window_plugin_set_orientation (provider, window);
   panel_window_plugin_set_screen_position (provider, window);
   panel_window_plugin_set_size (provider, window);
+  panel_window_plugin_set_nrows (provider, window);
+  panel_window_plugin_set_deskbar_mode (provider, window);
 }
 
 


More information about the Xfce4-commits mailing list