aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Uebernickel <lars.uebernickel@canonical.com>2013-09-09 14:09:57 +0200
committerLars Uebernickel <lars.uebernickel@canonical.com>2013-09-09 14:09:57 +0200
commitbb3936226c41048e4c16e9b926d6c9b23629d681 (patch)
tree55d1e07c1653af512a25f45136570adb3939a10b
parentf4fa56637405eb2112ad3516e3ac1438e79f0d41 (diff)
downloadlibayatana-indicator-bb3936226c41048e4c16e9b926d6c9b23629d681.tar.gz
libayatana-indicator-bb3936226c41048e4c16e9b926d6c9b23629d681.tar.bz2
libayatana-indicator-bb3936226c41048e4c16e9b926d6c9b23629d681.zip
Support x-canonical-secondary action
An attribute for the root menu action may contain an action name. If it exists, the action is activated whenever the middle mouse button is pressed on the indicator.
-rw-r--r--libindicator/indicator-ng.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/libindicator/indicator-ng.c b/libindicator/indicator-ng.c
index 3e63dcd..3971129 100644
--- a/libindicator/indicator-ng.c
+++ b/libindicator/indicator-ng.c
@@ -34,6 +34,7 @@ struct _IndicatorNg
gchar *profile;
gchar *header_action;
gchar *scroll_action;
+ gchar *secondary_action;
gint position;
guint name_watch_id;
@@ -160,6 +161,7 @@ indicator_ng_finalize (GObject *object)
g_free (self->accessible_desc);
g_free (self->header_action);
g_free (self->scroll_action);
+ g_free (self->secondary_action);
G_OBJECT_CLASS (indicator_ng_parent_class)->finalize (object);
}
@@ -197,6 +199,22 @@ indicator_ng_entry_scrolled (IndicatorObject *io,
}
}
+void
+indicator_ng_secondary_activate (IndicatorObject *io,
+ IndicatorObjectEntry *entry,
+ guint timestamp,
+ gpointer user_data)
+{
+ IndicatorNg *self = INDICATOR_NG (io);
+
+ g_message ("secondary: %s", self->secondary_action);
+
+ if (self->actions && self->secondary_action)
+ {
+ g_action_group_activate_action (self->actions, self->secondary_action, NULL);
+ }
+}
+
static void
indicator_ng_set_accessible_desc (IndicatorNg *self,
const gchar *accessible_desc)
@@ -352,6 +370,7 @@ indicator_ng_menu_changed (GMenuModel *menu,
{
g_clear_pointer (&self->header_action, g_free);
g_clear_pointer (&self->scroll_action, g_free);
+ g_clear_pointer (&self->secondary_action, g_free);
if (indicator_ng_menu_item_is_of_type (self->menu, 0, "com.canonical.indicator.root"))
{
@@ -372,6 +391,13 @@ indicator_ng_menu_changed (GMenuModel *menu,
g_free (action);
}
+ if (g_menu_model_get_item_attribute (self->menu, 0, "x-canonical-secondary-action", "s", &action))
+ {
+ if (g_str_has_prefix (action, "indicator."))
+ self->secondary_action = g_strdup (action + strlen ("indicator."));
+ g_free (action);
+ }
+
popup = g_menu_model_get_item_link (self->menu, 0, G_MENU_LINK_SUBMENU);
if (popup)
{
@@ -597,6 +623,7 @@ indicator_ng_class_init (IndicatorNgClass *class)
io_class->get_entries = indicator_ng_get_entries;
io_class->get_position = indicator_ng_get_position;
io_class->entry_scrolled = indicator_ng_entry_scrolled;
+ io_class->secondary_activate = indicator_ng_secondary_activate;
properties[PROP_SERVICE_FILE] = g_param_spec_string ("service-file",
"Service file",