aboutsummaryrefslogtreecommitdiff
path: root/libindicator
diff options
context:
space:
mode:
authorLars Uebernickel <lars.uebernickel@canonical.com>2013-03-25 21:49:50 -0400
committerLars Uebernickel <lars.uebernickel@canonical.com>2013-03-25 21:49:50 -0400
commitffbb3c1a57823568a8a5af27986624ff19b724b1 (patch)
treec790c411a07205330e6aa9d9d1bc3e67493468a0 /libindicator
parentb046c938db2377909a303a07836c52980c27490b (diff)
parent8232ab0e1f8b94148dbf78bc279342c0fe3f6db1 (diff)
downloadlibayatana-indicator-ffbb3c1a57823568a8a5af27986624ff19b724b1.tar.gz
libayatana-indicator-ffbb3c1a57823568a8a5af27986624ff19b724b1.tar.bz2
libayatana-indicator-ffbb3c1a57823568a8a5af27986624ff19b724b1.zip
indicator-ng: allow a dictionary as the root action's state
Diffstat (limited to 'libindicator')
-rw-r--r--libindicator/indicator-ng.c31
1 files changed, 20 insertions, 11 deletions
diff --git a/libindicator/indicator-ng.c b/libindicator/indicator-ng.c
index f2b957b..1e95785 100644
--- a/libindicator/indicator-ng.c
+++ b/libindicator/indicator-ng.c
@@ -236,6 +236,10 @@ static void
indicator_ng_update_entry (IndicatorNg *self)
{
GVariant *state;
+ const gchar *label = NULL;
+ const gchar *iconstr = NULL;
+ const gchar *accessible_desc = NULL;
+ gboolean visible = TRUE;
g_return_if_fail (self->menu != NULL);
g_return_if_fail (self->actions != NULL);
@@ -250,20 +254,25 @@ indicator_ng_update_entry (IndicatorNg *self)
state = g_action_group_get_action_state (self->actions, self->header_action);
if (state && g_variant_is_of_type (state, G_VARIANT_TYPE ("(sssb)")))
{
- const gchar *label;
- const gchar *iconstr;
- const gchar *accessible_desc;
- gboolean visible;
-
g_variant_get (state, "(&s&s&sb)", &label, &iconstr, &accessible_desc, &visible);
-
- indicator_ng_set_label (self, label);
- indicator_ng_set_icon_from_string (self, iconstr);
- indicator_ng_set_accessible_desc (self, accessible_desc);
- indicator_object_set_visible (INDICATOR_OBJECT (self), visible);
+ }
+ else if (state && g_variant_is_of_type (state, G_VARIANT_TYPE ("a{sv}")))
+ {
+ g_variant_lookup (state, "label", "&s", &label);
+ g_variant_lookup (state, "icon", "&s", &iconstr);
+ g_variant_lookup (state, "accessible-desc", "&s", &accessible_desc);
+ g_variant_lookup (state, "visible", "b", &visible);
}
else
- g_warning ("the action of the indicator menu item must have state with type (sssb)");
+ g_warning ("the action of the indicator menu item must have state with type (sssb) or a{sv}");
+
+ if (label)
+ indicator_ng_set_label (self, label);
+ if (iconstr)
+ indicator_ng_set_icon_from_string (self, iconstr);
+ if (accessible_desc)
+ indicator_ng_set_accessible_desc (self, accessible_desc);
+ indicator_object_set_visible (INDICATOR_OBJECT (self), visible);
if (state)
g_variant_unref (state);