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)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 21 Apr 2023 06:48:04 +0000 (08:48 +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 e9339a7387d0e63f284cda8d344115857544e995..aa5e7a4a983eab0a71052cded461182de0dba5c7 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);
     }
@@ -918,6 +918,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
         {