diff options
author | Lars Uebernickel <lars.uebernickel@canonical.com> | 2012-09-19 08:32:25 +0200 |
---|---|---|
committer | Lars Uebernickel <lars.uebernickel@canonical.com> | 2012-09-19 08:32:25 +0200 |
commit | 86c156c749ed5aaa0fb0e477d44dd8bbd197f9cb (patch) | |
tree | 5e970dfec38421cca2c4b906d8b4ee5b8851e5c2 /src/ido-menu-item.c | |
parent | f8901fd80116c4c6ae51ada33c34f6a05de542db (diff) | |
parent | c03005628b210cc7b775088d4693a87ca13f99e4 (diff) | |
download | ayatana-indicator-messages-86c156c749ed5aaa0fb0e477d44dd8bbd197f9cb.tar.gz ayatana-indicator-messages-86c156c749ed5aaa0fb0e477d44dd8bbd197f9cb.tar.bz2 ayatana-indicator-messages-86c156c749ed5aaa0fb0e477d44dd8bbd197f9cb.zip |
Merge lp:~larsu/indicator-messages/fix-set-status
Diffstat (limited to 'src/ido-menu-item.c')
-rw-r--r-- | src/ido-menu-item.c | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/src/ido-menu-item.c b/src/ido-menu-item.c index 6b19d2a..32044ff 100644 --- a/src/ido-menu-item.c +++ b/src/ido-menu-item.c @@ -99,8 +99,37 @@ ido_menu_item_set_state (IdoMenuItem *self, if (priv->target) { ido_menu_item_set_has_indicator (self, TRUE); + ido_menu_item_set_active (self, FALSE); gtk_check_menu_item_set_draw_as_radio (GTK_CHECK_MENU_ITEM (self), TRUE); - ido_menu_item_set_active (self, g_variant_equal (priv->target, state)); + gtk_check_menu_item_set_inconsistent (GTK_CHECK_MENU_ITEM (self), FALSE); + + if (g_variant_is_of_type (state, G_VARIANT_TYPE_STRING)) + { + ido_menu_item_set_active (self, g_variant_equal (priv->target, state)); + } + else if (g_variant_is_of_type (state, G_VARIANT_TYPE ("as")) && + g_variant_is_of_type (priv->target, G_VARIANT_TYPE_STRING)) + { + const gchar *target_str; + const gchar **state_strs; + const gchar **it; + + target_str = g_variant_get_string (priv->target, NULL); + state_strs = g_variant_get_strv (state, NULL); + + it = state_strs; + while (*it != NULL && !g_str_equal (*it, target_str)) + it++; + + if (*it != NULL) + { + ido_menu_item_set_active (self, TRUE); + gtk_check_menu_item_set_inconsistent (GTK_CHECK_MENU_ITEM (self), + g_strv_length ((gchar **)state_strs) > 1); + } + + g_free (state_strs); + } } else if (g_variant_is_of_type (state, G_VARIANT_TYPE_BOOLEAN)) { @@ -258,7 +287,8 @@ ido_menu_item_activate (GtkMenuItem *item) if (!priv->in_set_active && priv->action && priv->action_group) g_action_group_activate_action (priv->action_group, priv->action, priv->target); - GTK_MENU_ITEM_CLASS (ido_menu_item_parent_class)->activate (item); + if (priv->in_set_active) + GTK_MENU_ITEM_CLASS (ido_menu_item_parent_class)->activate (item); } static void |