aboutsummaryrefslogtreecommitdiff
path: root/src/app-section.c
diff options
context:
space:
mode:
authorLars Uebernickel <lars.uebernickel@canonical.com>2012-06-27 17:56:32 +0200
committerLars Uebernickel <lars.uebernickel@canonical.com>2012-06-27 17:56:32 +0200
commit58bb62e4b6f88e2f6688afe2e94ac0d954eacadf (patch)
tree88f5a1c53df70c60e63c8d863aa59b95f091f65f /src/app-section.c
parent93db8c38f2252cb4d506d90721446c0ad524ca3b (diff)
downloadayatana-indicator-messages-58bb62e4b6f88e2f6688afe2e94ac0d954eacadf.tar.gz
ayatana-indicator-messages-58bb62e4b6f88e2f6688afe2e94ac0d954eacadf.tar.bz2
ayatana-indicator-messages-58bb62e4b6f88e2f6688afe2e94ac0d954eacadf.zip
Make "Clear" work again
Diffstat (limited to 'src/app-section.c')
-rw-r--r--src/app-section.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/app-section.c b/src/app-section.c
index 35a842f..e7a2e1d 100644
--- a/src/app-section.c
+++ b/src/app-section.c
@@ -89,6 +89,7 @@ static void action_state_changed (GActionGroup *group,
static void action_removed (GActionGroup *group,
const gchar *action_name,
gpointer user_data);
+static gboolean action_draws_attention (GVariant *state);
/* GObject Boilerplate */
G_DEFINE_TYPE (AppSection, app_section, G_TYPE_OBJECT);
@@ -376,6 +377,44 @@ app_section_get_draws_attention (AppSection *self)
return priv->draws_attention;
}
+void
+app_section_clear_draws_attention (AppSection *self)
+{
+ AppSectionPrivate * priv = self->priv;
+ gchar **action_names;
+ gchar **it;
+
+ if (priv->actions == NULL)
+ return;
+
+ action_names = g_action_group_list_actions (priv->actions);
+
+ for (it = action_names; *it; it++) {
+ GVariant *state;
+
+ state = g_action_group_get_action_state (priv->actions, *it);
+ if (!state)
+ continue;
+
+ /* clear draws-attention while preserving other state */
+ if (action_draws_attention (state)) {
+ guint32 count;
+ gint64 time;
+ const gchar *str;
+ GVariant *new_state;
+
+ g_variant_get (state, "(ux&sb)", &count, &time, &str, NULL);
+
+ new_state = g_variant_new ("(uxsb)", count, time, str, FALSE);
+ g_action_group_change_action_state (priv->actions, *it, new_state);
+ }
+
+ g_variant_unref (state);
+ }
+
+ g_strfreev (action_names);
+}
+
static void
application_vanished (GDBusConnection *bus,
const gchar *name,