Browse Source

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.
upstream/xfce4-panel-4.10.1
Nick Schermer 11 years ago
parent
commit
173fc38553
  1. 2
      libxfce4panel/libxfce4panel.symbols
  2. 4
      libxfce4panel/xfce-panel-plugin-provider.h
  3. 90
      libxfce4panel/xfce-panel-plugin.c
  4. 5
      libxfce4panel/xfce-panel-plugin.h

2
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

4
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;

90
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;
@ -1653,6 +1683,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.

5
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;

Loading…
Cancel
Save