From 58bb62e4b6f88e2f6688afe2e94ac0d954eacadf Mon Sep 17 00:00:00 2001 From: Lars Uebernickel Date: Wed, 27 Jun 2012 17:56:32 +0200 Subject: Make "Clear" work again --- src/app-section.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'src/app-section.c') 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, -- cgit v1.2.3