summaryrefslogtreecommitdiff
path: root/gtk/gtknotebook.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtknotebook.c')
-rw-r--r--gtk/gtknotebook.c48
1 files changed, 40 insertions, 8 deletions
diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c
index cdf873861f..81346060c1 100644
--- a/gtk/gtknotebook.c
+++ b/gtk/gtknotebook.c
@@ -144,6 +144,12 @@
* A tab node gets the .dnd style class while it is moved with drag-and-drop.
*
* The nodes are always arranged from left-to-right, regardless of text direction.
+ *
+ * # Accessibility
+ *
+ * GtkNotebook uses the #GTK_ACCESSIBLE_ROLE_TAB_LIST and
+ * #GTK_ACCESSIBLE_ROLE_TAB roles for its list of tabs and the
+ * #GTK_ACCESSIBLE_ROLE_TAB_PANEL for the pages.
*/
@@ -1404,13 +1410,14 @@ gtk_notebook_init (GtkNotebook *notebook)
gtk_widget_hide (notebook->header_widget);
gtk_widget_set_parent (notebook->header_widget, GTK_WIDGET (notebook));
- notebook->tabs_widget = gtk_gizmo_new ("tabs",
- gtk_notebook_measure_tabs,
- gtk_notebook_allocate_tabs,
- gtk_notebook_snapshot_tabs,
- NULL,
- (GtkGizmoFocusFunc)gtk_widget_focus_self,
- (GtkGizmoGrabFocusFunc)gtk_widget_grab_focus_self);
+ notebook->tabs_widget = gtk_gizmo_new_with_role ("tabs",
+ GTK_ACCESSIBLE_ROLE_TAB_LIST,
+ gtk_notebook_measure_tabs,
+ gtk_notebook_allocate_tabs,
+ gtk_notebook_snapshot_tabs,
+ NULL,
+ (GtkGizmoFocusFunc)gtk_widget_focus_self,
+ (GtkGizmoGrabFocusFunc)gtk_widget_grab_focus_self);
gtk_widget_set_hexpand (notebook->tabs_widget, TRUE);
gtk_box_append (GTK_BOX (notebook->header_widget), notebook->tabs_widget);
@@ -3915,6 +3922,7 @@ gtk_notebook_insert_notebook_page (GtkNotebook *notebook,
GList *list;
GtkWidget *sibling;
GtkEventController *controller;
+ GtkStackPage *stack_page;
nchildren = g_list_length (notebook->children);
if ((position < 0) || (position > nchildren))
@@ -3929,7 +3937,14 @@ gtk_notebook_insert_notebook_page (GtkNotebook *notebook,
else
sibling = notebook->arrow_widget[ARROW_RIGHT_AFTER];
- page->tab_widget = gtk_gizmo_new ("tab", measure_tab, allocate_tab, NULL, NULL, NULL, NULL);
+ page->tab_widget = gtk_gizmo_new_with_role ("tab",
+ GTK_ACCESSIBLE_ROLE_TAB,
+ measure_tab,
+ allocate_tab,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
g_object_set_data (G_OBJECT (page->tab_widget), "notebook", notebook);
gtk_widget_insert_before (page->tab_widget, notebook->tabs_widget, sibling);
controller = gtk_drop_controller_motion_new ();
@@ -3951,6 +3966,15 @@ gtk_notebook_insert_notebook_page (GtkNotebook *notebook,
g_object_set_data (G_OBJECT (page->tab_label), "notebook", notebook);
}
+ stack_page = gtk_stack_get_page (GTK_STACK (notebook->stack_widget), page->child);
+ gtk_accessible_update_relation (GTK_ACCESSIBLE (page->tab_widget),
+ GTK_ACCESSIBLE_RELATION_CONTROLS, g_list_append (NULL, stack_page),
+ -1);
+
+ gtk_accessible_update_state (GTK_ACCESSIBLE (page->tab_widget),
+ GTK_ACCESSIBLE_STATE_SELECTED, FALSE,
+ -1);
+
gtk_notebook_update_labels (notebook);
if (!notebook->first_tab)
@@ -5303,12 +5327,20 @@ gtk_notebook_real_switch_page (GtkNotebook *notebook,
if (focus)
child_has_focus = gtk_widget_is_ancestor (focus, notebook->cur_page->child);
gtk_widget_unset_state_flags (notebook->cur_page->tab_widget, GTK_STATE_FLAG_CHECKED);
+
+ gtk_accessible_update_state (GTK_ACCESSIBLE (notebook->cur_page->tab_widget),
+ GTK_ACCESSIBLE_STATE_SELECTED, FALSE,
+ -1);
}
notebook->cur_page = page;
gtk_widget_set_state_flags (page->tab_widget, GTK_STATE_FLAG_CHECKED, FALSE);
gtk_widget_set_visible (notebook->header_widget, notebook->show_tabs);
+ gtk_accessible_update_state (GTK_ACCESSIBLE (notebook->cur_page->tab_widget),
+ GTK_ACCESSIBLE_STATE_SELECTED, TRUE,
+ -1);
+
if (!notebook->focus_tab ||
notebook->focus_tab->data != (gpointer) notebook->cur_page)
notebook->focus_tab =