Updating branch refs/heads/andrzejr/deskbar-github to b4c0807f56dcca17a63569fa87b0becd430b7519 (commit) from fffbc69ab768dfe4279ff48dfe642953e2f76793 (commit)
commit b4c0807f56dcca17a63569fa87b0becd430b7519 Author: Andrzej <ndrwr...@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); } _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits