[Xfce4-commits] <xfce4-panel:master> Libxfce4panel: Add new API to allow plugins to shrink.
Nick Schermer
noreply at xfce.org
Fri Apr 22 12:56:01 CEST 2011
Updating branch refs/heads/master
to 173fc38553940f4c6807aa5d7a2823882fe780e1 (commit)
from 85268551b1358c3d4412f4699c2e35f494d8b222 (commit)
commit 173fc38553940f4c6807aa5d7a2823882fe780e1
Author: Nick Schermer <nick at xfce.org>
Date: Fri Apr 22 11:47:04 2011 +0200
Libxfce4panel: Add new API to allow plugins to shrink.
This is an alternative to expanding plugins, if there is not
enough room on the panel, shrink plugins who can.
libxfce4panel/libxfce4panel.symbols | 2 +
libxfce4panel/xfce-panel-plugin-provider.h | 4 +-
libxfce4panel/xfce-panel-plugin.c | 90 +++++++++++++++++++++++++++-
libxfce4panel/xfce-panel-plugin.h | 5 ++
4 files changed, 99 insertions(+), 2 deletions(-)
diff --git a/libxfce4panel/libxfce4panel.symbols b/libxfce4panel/libxfce4panel.symbols
index 4821b79..494572c 100644
--- a/libxfce4panel/libxfce4panel.symbols
+++ b/libxfce4panel/libxfce4panel.symbols
@@ -108,6 +108,8 @@ xfce_panel_plugin_get_arguments G_GNUC_PURE
xfce_panel_plugin_get_size G_GNUC_PURE
xfce_panel_plugin_get_expand G_GNUC_PURE
xfce_panel_plugin_set_expand
+xfce_panel_plugin_get_shrink G_GNUC_PURE
+xfce_panel_plugin_set_shrink
xfce_panel_plugin_get_locked
xfce_panel_plugin_get_orientation G_GNUC_PURE
xfce_panel_plugin_get_screen_position G_GNUC_PURE
diff --git a/libxfce4panel/xfce-panel-plugin-provider.h b/libxfce4panel/xfce-panel-plugin-provider.h
index b5225ac..f4e2a5c 100644
--- a/libxfce4panel/xfce-panel-plugin-provider.h
+++ b/libxfce4panel/xfce-panel-plugin-provider.h
@@ -89,7 +89,9 @@ typedef enum /*< skip >*/
PROVIDER_SIGNAL_PANEL_HELP,
PROVIDER_SIGNAL_SHOW_CONFIGURE,
PROVIDER_SIGNAL_SHOW_ABOUT,
- PROVIDER_SIGNAL_FOCUS_PLUGIN
+ PROVIDER_SIGNAL_FOCUS_PLUGIN,
+ PROVIDER_SIGNAL_SHRINK_PLUGIN,
+ PROVIDER_SIGNAL_UNSHRINK_PLUGIN
}
XfcePanelPluginProviderSignal;
diff --git a/libxfce4panel/xfce-panel-plugin.c b/libxfce4panel/xfce-panel-plugin.c
index 360ed7d..d85a813 100644
--- a/libxfce4panel/xfce-panel-plugin.c
+++ b/libxfce4panel/xfce-panel-plugin.c
@@ -125,7 +125,8 @@ enum
PROP_ORIENTATION,
PROP_SIZE,
PROP_SCREEN_POSITION,
- PROP_EXPAND
+ PROP_EXPAND,
+ PROP_SHRINK
};
enum
@@ -164,6 +165,7 @@ struct _XfcePanelPluginPrivate
gchar **arguments;
gint size;
guint expand : 1;
+ guint shrink : 1;
GtkOrientation orientation;
XfceScreenPosition screen_position;
guint locked : 1;
@@ -563,6 +565,24 @@ xfce_panel_plugin_class_init (XfcePanelPluginClass *klass)
G_PARAM_READWRITE
| G_PARAM_STATIC_STRINGS));
+ /**
+ * XfcePanelPlugin:shrink:
+ *
+ * Wether the #XfcePanelPlugin can shrink when there is no space left on the panel.
+ * Plugin writes can use it to read or set this property, but xfce_panel_plugin_set_shrink()
+ * is recommended.
+ *
+ * Since: 4.10
+ **/
+ g_object_class_install_property (gobject_class,
+ PROP_SHRINK,
+ g_param_spec_boolean ("shrink",
+ "Shrink",
+ "Whether this plugin can shrink",
+ FALSE,
+ G_PARAM_READWRITE
+ | G_PARAM_STATIC_STRINGS));
+
item_properties = g_quark_from_static_string ("item-properties");
item_about = g_quark_from_static_string ("item-about");
}
@@ -582,6 +602,7 @@ xfce_panel_plugin_init (XfcePanelPlugin *plugin)
plugin->priv->arguments = NULL;
plugin->priv->size = 0;
plugin->priv->expand = FALSE;
+ plugin->priv->shrink = FALSE;
plugin->priv->orientation = GTK_ORIENTATION_HORIZONTAL;
plugin->priv->screen_position = XFCE_SCREEN_POSITION_NONE;
plugin->priv->menu = NULL;
@@ -688,6 +709,10 @@ xfce_panel_plugin_get_property (GObject *object,
g_value_set_boolean (value, private->expand);
break;
+ case PROP_SHRINK:
+ g_value_set_boolean (value, private->shrink);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -740,6 +765,11 @@ xfce_panel_plugin_set_property (GObject *object,
g_value_get_boolean (value));
break;
+ case PROP_SHRINK:
+ xfce_panel_plugin_set_shrink (XFCE_PANEL_PLUGIN (object),
+ g_value_get_boolean (value));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1654,6 +1684,64 @@ xfce_panel_plugin_set_expand (XfcePanelPlugin *plugin,
/**
+ * xfce_panel_plugin_get_shrink:
+ * @plugin : an #XfcePanelPlugin.
+ *
+ * Whether the plugin can shrink if the size on the panel is limited. This
+ * is effective with plugins that do not have expand set, but can accept
+ * a smaller size when needed.
+ *
+ * Returns: %TRUE when the plugin can shrink,
+ * %FALSE otherwise.
+ *
+ * Since: 4.10
+ **/
+gboolean
+xfce_panel_plugin_get_shrink (XfcePanelPlugin *plugin)
+{
+ g_return_val_if_fail (XFCE_IS_PANEL_PLUGIN (plugin), FALSE);
+ g_return_val_if_fail (XFCE_PANEL_PLUGIN_CONSTRUCTED (plugin), FALSE);
+
+ return plugin->priv->shrink;
+}
+
+
+
+/**
+ * xfce_panel_plugin_set_shrink:
+ * @plugin : an #XfcePanelPlugin.
+ * @shrink : whether the plugin can shrink.
+ *
+ * Wether the plugin can shrink if the size on the panel
+ * is limited. This does not work if the plugin is expanded.
+ **/
+void
+xfce_panel_plugin_set_shrink (XfcePanelPlugin *plugin,
+ gboolean shrink)
+{
+ g_return_if_fail (XFCE_IS_PANEL_PLUGIN (plugin));
+ g_return_if_fail (XFCE_PANEL_PLUGIN_CONSTRUCTED (plugin));
+
+ /* normalize the value */
+ shrink = !!shrink;
+
+ /* check if update is required */
+ if (G_LIKELY (xfce_panel_plugin_get_shrink (plugin) != shrink))
+ {
+ plugin->priv->shrink = shrink;
+
+ /* emit signal (in provider) */
+ xfce_panel_plugin_provider_emit_signal (XFCE_PANEL_PLUGIN_PROVIDER (plugin),
+ shrink ? PROVIDER_SIGNAL_SHRINK_PLUGIN :
+ PROVIDER_SIGNAL_UNSHRINK_PLUGIN);
+
+ g_object_notify (G_OBJECT (plugin), "shrink");
+ }
+}
+
+
+
+/**
* xfce_panel_plugin_get_orientation:
* @plugin : an #XfcePanelPlugin.
*
diff --git a/libxfce4panel/xfce-panel-plugin.h b/libxfce4panel/xfce-panel-plugin.h
index 6f802ec..b905120 100644
--- a/libxfce4panel/xfce-panel-plugin.h
+++ b/libxfce4panel/xfce-panel-plugin.h
@@ -174,6 +174,11 @@ gboolean xfce_panel_plugin_get_expand (XfcePanelPlugin *
void xfce_panel_plugin_set_expand (XfcePanelPlugin *plugin,
gboolean expand);
+gboolean xfce_panel_plugin_get_shrink (XfcePanelPlugin *plugin) G_GNUC_PURE;
+
+void xfce_panel_plugin_set_shrink (XfcePanelPlugin *plugin,
+ gboolean shrink);
+
GtkOrientation xfce_panel_plugin_get_orientation (XfcePanelPlugin *plugin) G_GNUC_PURE;
XfceScreenPosition xfce_panel_plugin_get_screen_position (XfcePanelPlugin *plugin) G_GNUC_PURE;
More information about the Xfce4-commits
mailing list