diff --git a/gtk/gtkactionmuxer.c b/gtk/gtkactionmuxer.c index 9eac44b72e..d894d2b0bd 100644 --- a/gtk/gtkactionmuxer.c +++ b/gtk/gtkactionmuxer.c @@ -966,21 +966,14 @@ gtk_action_muxer_register_observer (GtkActionObservable *observable, if (action_muxer_query_action (muxer, name, &enabled, ¶meter_type, - NULL, NULL, &state, FALSE)) + NULL, NULL, &state, TRUE)) { gtk_action_muxer_action_added (muxer, name, parameter_type, enabled, state); g_clear_pointer (&state, g_variant_unref); } - else if (muxer->parent) - { - if (action_muxer_query_action (muxer->parent, name, - &enabled, ¶meter_type, - NULL, NULL, &state, FALSE)) - { - gtk_action_muxer_action_added (muxer, name, parameter_type, enabled, state); - g_clear_pointer (&state, g_variant_unref); - } + if (muxer->parent) + { gtk_action_observable_register_observer (GTK_ACTION_OBSERVABLE (muxer->parent), name, GTK_ACTION_OBSERVER (muxer)); @@ -1142,6 +1135,10 @@ gtk_action_muxer_observer_action_added (GtkActionObserver *observer, gboolean enabled, GVariant *state) { + if (action_muxer_query_action (GTK_ACTION_MUXER (observer), action_name, + NULL, NULL, NULL, NULL, NULL, FALSE)) + return; + gtk_action_muxer_action_added (GTK_ACTION_MUXER (observer), action_name, parameter_type, @@ -1154,6 +1151,10 @@ gtk_action_muxer_observer_action_removed (GtkActionObserver *observer, GtkActionObservable *observable, const char *action_name) { + if (action_muxer_query_action (GTK_ACTION_MUXER (observer), action_name, + NULL, NULL, NULL, NULL, NULL, FALSE)) + return; + gtk_action_muxer_action_removed (GTK_ACTION_MUXER (observer), action_name); } @@ -1163,6 +1164,10 @@ gtk_action_muxer_observer_action_enabled_changed (GtkActionObserver *observer, const char *action_name, gboolean enabled) { + if (action_muxer_query_action (GTK_ACTION_MUXER (observer), action_name, + NULL, NULL, NULL, NULL, NULL, FALSE)) + return; + gtk_action_muxer_action_enabled_changed (GTK_ACTION_MUXER (observer), action_name, enabled); } @@ -1172,6 +1177,10 @@ gtk_action_muxer_observer_action_state_changed (GtkActionObserver *observer, const char *action_name, GVariant *state) { + if (action_muxer_query_action (GTK_ACTION_MUXER (observer), action_name, + NULL, NULL, NULL, NULL, NULL, FALSE)) + return; + gtk_action_muxer_action_state_changed (GTK_ACTION_MUXER (observer), action_name, state); }