static void ide_run_manager_notify_busy (IdeRunManager *self) { g_assert (IDE_IS_RUN_MANAGER (self)); g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_BUSY]); g_action_group_action_enabled_changed (G_ACTION_GROUP (self), "run", self->busy == FALSE); g_action_group_action_enabled_changed (G_ACTION_GROUP (self), "run-with-handler", self->busy == FALSE); g_action_group_action_enabled_changed (G_ACTION_GROUP (self), "stop", self->busy == TRUE); }
static void g_dbus_action_group_changed (GDBusConnection *connection, const gchar *sender, const gchar *object_path, const gchar *interface_name, const gchar *signal_name, GVariant *parameters, gpointer user_data) { GDBusActionGroup *group = user_data; GActionGroup *g_group = user_data; /* make sure that we've been fully initialised */ if (group->actions == NULL) return; if (g_str_equal (signal_name, "Changed") && g_variant_is_of_type (parameters, G_VARIANT_TYPE ("(asa{sb}a{sv}a{s(bgav)})"))) { /* Removes */ { GVariantIter *iter; const gchar *name; g_variant_get_child (parameters, 0, "as", &iter); while (g_variant_iter_next (iter, "&s", &name)) { if (g_hash_table_lookup (group->actions, name)) { g_hash_table_remove (group->actions, name); g_action_group_action_removed (g_group, name); } } g_variant_iter_free (iter); } /* Enable changes */ { GVariantIter *iter; const gchar *name; gboolean enabled; g_variant_get_child (parameters, 1, "a{sb}", &iter); while (g_variant_iter_next (iter, "{&sb}", &name, &enabled)) { ActionInfo *info; info = g_hash_table_lookup (group->actions, name); if (info && info->enabled != enabled) { info->enabled = enabled; g_action_group_action_enabled_changed (g_group, name, enabled); } } g_variant_iter_free (iter); } /* State changes */ { GVariantIter *iter; const gchar *name; GVariant *state; g_variant_get_child (parameters, 2, "a{sv}", &iter); while (g_variant_iter_next (iter, "{&sv}", &name, &state)) { ActionInfo *info; info = g_hash_table_lookup (group->actions, name); if (info && info->state && !g_variant_equal (state, info->state) && g_variant_is_of_type (state, g_variant_get_type (info->state))) { g_variant_unref (info->state); info->state = g_variant_ref (state); g_action_group_action_state_changed (g_group, name, state); } g_variant_unref (state); } g_variant_iter_free (iter); } /* Additions */ { GVariantIter *iter; ActionInfo *info; g_variant_get_child (parameters, 3, "a{s(bgav)}", &iter); while ((info = action_info_new_from_iter (iter))) { if (!g_hash_table_lookup (group->actions, info->name)) { g_hash_table_insert (group->actions, info->name, info); if (group->strict) g_action_group_action_added (g_group, info->name); } else action_info_free (info); } g_variant_iter_free (iter); } } }