atspi: Properly filter out parent actions

We only want to show relevant, local actions for
widgets, but _gtk_widget_get_action_muxer() will
return the muxer of a parent widget (all the way
up to the toplevel), if the widget does not have
any actions of its own. To detect this situation,
compare what _gtk_widget_get_action_muxer() returns
for the parent widget, and act accordingly.
This commit is contained in:
Matthias Clasen
2020-10-15 21:29:37 -04:00
parent 3eae91255d
commit ab61b7b9ae

View File

@@ -678,12 +678,18 @@ widget_handle_method (GDBusConnection *connection,
GtkAtSpiContext *self = user_data;
GtkAccessible *accessible = gtk_at_context_get_accessible (GTK_AT_CONTEXT (self));
GtkWidget *widget = GTK_WIDGET (accessible);
GtkWidget *parent = gtk_widget_get_parent (widget);
GtkActionMuxer *muxer = _gtk_widget_get_action_muxer (widget, FALSE);
GtkActionMuxer *parent_muxer = parent ? _gtk_widget_get_action_muxer (parent, FALSE) : NULL;
if (muxer == NULL)
return;
char **actions = gtk_action_muxer_list_actions (muxer, TRUE);
char **actions = NULL;
if (muxer != parent_muxer)
actions = gtk_action_muxer_list_actions (muxer, TRUE);
int n_actions = actions != NULL ? g_strv_length (actions) : 0;
/* XXX: We need more fields in the action API */
@@ -771,13 +777,19 @@ widget_handle_get_property (GDBusConnection *connection,
GtkAtSpiContext *self = user_data;
GtkAccessible *accessible = gtk_at_context_get_accessible (GTK_AT_CONTEXT (self));
GtkWidget *widget = GTK_WIDGET (accessible);
GtkWidget *parent = gtk_widget_get_parent (widget);
GtkActionMuxer *muxer = _gtk_widget_get_action_muxer (widget, FALSE);
GtkActionMuxer *parent_muxer = parent ? _gtk_widget_get_action_muxer (parent, FALSE) : NULL;
GVariant *res = NULL;
if (muxer == NULL)
return res;
char **actions = gtk_action_muxer_list_actions (muxer, TRUE);
char **actions = NULL;
if (muxer != parent_muxer)
actions = gtk_action_muxer_list_actions (muxer, TRUE);
int n_actions = actions != NULL ? g_strv_length (actions) : 0;
if (g_strcmp0 (property_name, "NActions") == 0)