diff options
author | Matthias Clasen <mclasen@redhat.com> | 2020-07-27 18:25:37 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-07-27 21:18:10 -0400 |
commit | 29cf11fb6e049185720f0717ff596146c3e9e9af (patch) | |
tree | bf8d72f7be67b4549c10c592ee3ed6c6ddaa6a15 /gtk | |
parent | 6ca245306b287d4ccb675677a2779bfcbce54c5c (diff) | |
download | gtk+-29cf11fb6e049185720f0717ff596146c3e9e9af.tar.gz |
a11y: Set an accessible role for GtkWindow
Use the window accessible role for GtkWindow, and
set the modal accessible property.
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtkenums.h | 2 | ||||
-rw-r--r-- | gtk/gtkwindow.c | 22 |
2 files changed, 16 insertions, 8 deletions
diff --git a/gtk/gtkenums.h b/gtk/gtkenums.h index 83fb4c645e..436d2ac39d 100644 --- a/gtk/gtkenums.h +++ b/gtk/gtkenums.h @@ -1245,7 +1245,7 @@ typedef enum { * @GTK_ACCESSIBLE_ROLE_TREE_ITEM: Unused * @GTK_ACCESSIBLE_ROLE_WIDGET: An interactive component of a graphical user * interface. This is the role that GTK uses by default for widgets. - * @GTK_ACCESSIBLE_ROLE_WINDOW: Unused + * @GTK_ACCESSIBLE_ROLE_WINDOW: An application window. * * The accessible role for a #GtkAccessible implementation. * diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index a0fdd39229..067032a07f 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -155,6 +155,10 @@ * * GtkWindow adds the .titlebar and .default-decoration style classes to the * widget that is added as a titlebar child. + * + * # Accessibility + * + * GtkWindow uses the #GTK_ACCESSIBLE_ROLE_WINDOW role. */ #define MENU_BAR_ACCEL GDK_KEY_F10 @@ -1114,6 +1118,8 @@ gtk_window_class_init (GtkWindowClass *klass) add_tab_bindings (widget_class, GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD); gtk_widget_class_set_css_name (widget_class, I_("window")); + + gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_WINDOW); } /** @@ -2208,19 +2214,17 @@ gtk_window_real_activate_default (GtkWindow *window) * gtk_window_set_modal: * @window: a #GtkWindow * @modal: whether the window is modal - * + * * Sets a window modal or non-modal. Modal windows prevent interaction * with other windows in the same application. To keep modal dialogs * on top of main application windows, use * gtk_window_set_transient_for() to make the dialog transient for the * parent; most [window managers][gtk-X11-arch] * will then disallow lowering the dialog below the parent. - * - * **/ void gtk_window_set_modal (GtkWindow *window, - gboolean modal) + gboolean modal) { GtkWindowPrivate *priv = gtk_window_get_instance_private (window); GtkWidget *widget; @@ -2233,20 +2237,24 @@ gtk_window_set_modal (GtkWindow *window, priv->modal = modal; widget = GTK_WIDGET (window); - + if (_gtk_widget_get_realized (widget)) gdk_toplevel_set_modal (GDK_TOPLEVEL (priv->surface), modal); if (gtk_widget_get_visible (widget)) { if (priv->modal) - gtk_grab_add (widget); + gtk_grab_add (widget); else - gtk_grab_remove (widget); + gtk_grab_remove (widget); } update_window_actions (window); + gtk_accessible_update_property (GTK_ACCESSIBLE (window), + GTK_ACCESSIBLE_PROPERTY_MODAL, modal, + -1); + g_object_notify_by_pspec (G_OBJECT (window), window_props[PROP_MODAL]); } |