a11y: Cover the printer option widget case too
authorMatthias Clasen <mclasen@redhat.com>
Sun, 18 Jun 2023 19:15:54 +0000 (15:15 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 19 Jun 2023 15:17:47 +0000 (11:17 -0400)
This is another case of nested control, in this
case it goes two levels deep. Since we already
have this hack, lets use it for all the cases.
This avoids some more complicated workaround.

gtk/gtkatcontext.c

index 2d6908cd7a89d52ae2da96ea38b851125525ca15..5ced08a481fb008da03c359678085096501be48c 100644 (file)
@@ -46,6 +46,7 @@
 #include "gtkdropdown.h"
 #include "gtkcolordialogbutton.h"
 #include "gtkfontdialogbutton.h"
+#include "print/gtkprinteroptionwidgetprivate.h"
 
 #if defined(GDK_WINDOWING_X11) || defined(GDK_WINDOWING_WAYLAND)
 #include "a11y/gtkatspicontextprivate.h"
@@ -1200,7 +1201,17 @@ is_nested_button (GtkATContext *self)
   if ((GTK_IS_TOGGLE_BUTTON (widget) && GTK_IS_DROP_DOWN (parent)) ||
       (GTK_IS_TOGGLE_BUTTON (widget) && GTK_IS_MENU_BUTTON (parent)) ||
       (GTK_IS_BUTTON (widget) && GTK_IS_COLOR_DIALOG_BUTTON (parent)) ||
-      (GTK_IS_BUTTON (widget) && GTK_IS_FONT_DIALOG_BUTTON (parent)))
+      (GTK_IS_BUTTON (widget) && GTK_IS_FONT_DIALOG_BUTTON (parent))
+#ifdef G_OS_UNIX
+      || (GTK_IS_PRINTER_OPTION_WIDGET (parent) &&
+          (GTK_IS_CHECK_BUTTON (widget) ||
+           GTK_IS_DROP_DOWN (widget) ||
+           GTK_IS_ENTRY (widget) ||
+           GTK_IS_IMAGE (widget) ||
+           GTK_IS_LABEL (widget) ||
+           GTK_IS_BUTTON (widget)))
+#endif
+      )
     return TRUE;
 
   return FALSE;
@@ -1257,6 +1268,12 @@ gtk_at_context_get_name (GtkATContext *self)
     {
       parent = get_parent_context (self);
       self = parent;
+      if (is_nested_button (self))
+        {
+          parent = get_parent_context (parent);
+          g_object_unref (self);
+          self = parent;
+        }
     }
 
   GPtrArray *names = g_ptr_array_new ();