[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