a11y: Set ATSPI_STATE_SHOWING for all widgets, not only for windows
authorLukáš Tyrychtr <ltyrycht@redhat.com>
Tue, 28 Mar 2023 13:07:03 +0000 (15:07 +0200)
committerLukáš Tyrychtr <ltyrycht@redhat.com>
Thu, 30 Mar 2023 08:07:36 +0000 (10:07 +0200)
According to the at-spi2 docs, for a widget to be considered visible,
it needs both the showing and visible states. Many applications rely on that,
for example the flat review functionality of Orca.

this fixes #5194

gtk/a11y/gtkatspicontext.c

index 625f1789022b144963278d8db36f06e74beee422..d5e974a6ee0e5adf1d6066e9cb3da59c8dc99af7 100644 (file)
@@ -142,10 +142,10 @@ collect_states (GtkAtSpiContext    *self,
   accessible = gtk_at_context_get_accessible (ctx);
 
   set_atspi_state (&states, ATSPI_STATE_VISIBLE);
+  set_atspi_state (&states, ATSPI_STATE_SHOWING);
 
   if (ctx->accessible_role == GTK_ACCESSIBLE_ROLE_WINDOW)
     {
-      set_atspi_state (&states, ATSPI_STATE_SHOWING);
       if (gtk_accessible_get_platform_state (accessible, GTK_ACCESSIBLE_PLATFORM_STATE_ACTIVE))
         set_atspi_state (&states, ATSPI_STATE_ACTIVE);
     }
@@ -928,6 +928,7 @@ gtk_at_spi_context_state_change (GtkATContext                *ctx,
         {
           gtk_at_spi_root_child_changed (self->root, change, accessible);
           emit_state_changed (self, "showing", gtk_boolean_accessible_value_get (value));
+          emit_state_changed (self, "visible", gtk_boolean_accessible_value_get (value));
         }
       else
         {