[gtk/matthiasc/for-master: 10/14] action muxer: Propagate registrations further up
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/matthiasc/for-master: 10/14] action muxer: Propagate registrations further up
- Date: Thu, 17 Jun 2021 13:00:30 +0000 (UTC)
commit d5054f9b9946096031f09f788e13cc35fe18bcda
Author: Matthias Clasen <mclasen redhat com>
Date: Thu Jun 17 08:37:42 2021 -0400
action muxer: Propagate registrations further up
We were pretty aggressive about not registering
observers further than necessary, stopping at the
first muxer that provides an action.
But even though action changes further up in the tree
won't be relevant in that case, we need to listen to
accel changes, since they may come from higher up
in the tree (e.g. when using
gtk_application_set_accels_for_action with an action
that is defined on a widget.
So, register all the way to the top, and stop propagating
action changes when we hit a muxer that provides the action.
gtk/gtkactionmuxer.c | 29 +++++++++++++++++++----------
1 file changed, 19 insertions(+), 10 deletions(-)
---
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);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]