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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user