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/indicator-messages.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/indicator-messages.c')
-rw-r--r-- | src/indicator-messages.c | 39 |
1 files changed, 33 insertions, 6 deletions
diff --git a/src/indicator-messages.c b/src/indicator-messages.c index 2647a76..db4f634 100644 --- a/src/indicator-messages.c +++ b/src/indicator-messages.c @@ -87,6 +87,9 @@ static void menu_items_changed (GMenuModel *menu, gint removed, gint added, gpointer user_data); +static void messages_action_added (GActionGroup *action_group, + gchar *action_name, + gpointer user_data); static void messages_state_changed (GActionGroup *action_group, gchar *action_name, GVariant *value, @@ -174,6 +177,7 @@ static void service_connection_changed (IndicatorServiceManager *sm, GError *error = NULL; if (self->actions != NULL) { + g_signal_handlers_disconnect_by_func (self->actions, messages_action_added, self); g_signal_handlers_disconnect_by_func (self->actions, messages_state_changed, self); g_clear_object (&self->actions); } @@ -199,6 +203,8 @@ static void service_connection_changed (IndicatorServiceManager *sm, gtk_widget_insert_action_group (self->gtkmenu, get_name_hint (INDICATOR_OBJECT (self)), self->actions); + g_signal_connect (self->actions, "action-added::messages", + G_CALLBACK (messages_action_added), self); g_signal_connect (self->actions, "action-state-changed::messages", G_CALLBACK (messages_state_changed), self); @@ -331,6 +337,32 @@ menu_items_changed (GMenuModel *menu, } static void +indicator_messages_update_icon (IndicatorMessages *self, + GVariant *state) +{ + g_return_if_fail (g_variant_is_of_type (state, G_VARIANT_TYPE_STRING)); + + gtk_image_set_from_icon_name (GTK_IMAGE (self->image), + g_variant_get_string (state, NULL), + GTK_ICON_SIZE_MENU); + +} + +static void +messages_action_added (GActionGroup *action_group, + gchar *action_name, + gpointer user_data) +{ + IndicatorMessages *self = user_data; + GVariant *state; + + state = g_action_group_get_action_state (action_group, "messages"); + indicator_messages_update_icon (self, state); + + g_variant_unref (state); +} + +static void messages_state_changed (GActionGroup *action_group, gchar *action_name, GVariant *value, @@ -338,10 +370,5 @@ messages_state_changed (GActionGroup *action_group, { IndicatorMessages *self = user_data; - g_return_if_fail (g_variant_is_of_type (value, G_VARIANT_TYPE_BOOLEAN)); - - if (g_variant_get_boolean (value)) - gtk_image_set_from_icon_name (GTK_IMAGE (self->image), "indicator-messages-new", GTK_ICON_SIZE_MENU); - else - gtk_image_set_from_icon_name (GTK_IMAGE (self->image), "indicator-messages", GTK_ICON_SIZE_MENU); + indicator_messages_update_icon (self, value); } |