[nautilus] general: Set labelled-by for view cells
- From: António Fernandes <antoniof src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus] general: Set labelled-by for view cells
- Date: Wed, 31 Aug 2022 15:42:51 +0000 (UTC)
commit ee38cbef43784412147547648298de1db667c39c
Author: Corey Berla <corey berla me>
Date: Wed Aug 31 15:42:49 2022 +0000
general: Set labelled-by for view cells
In gtk4, we need to set labelled-by to help a11y programs know what
it currently selected.
Unfortunately, the focus is on a GTK internal widget, so at the moment
this solution requires a hack: we mark the internal list item widget as
being labeled by our cell (which is, in turn, labeled by the filename label).
We are reporting this to GTK to work toward a better solution.
Fixes: https://gitlab.gnome.org/GNOME/nautilus/-/issues/2460
src/nautilus-grid-view.c | 4 ++++
src/nautilus-list-view.c | 16 ++++++++++++++++
src/resources/ui/nautilus-grid-cell.ui | 3 +++
src/resources/ui/nautilus-name-cell.ui | 3 +++
4 files changed, 26 insertions(+)
---
diff --git a/src/nautilus-grid-view.c b/src/nautilus-grid-view.c
index 74a80e1f5..cbeea42de 100644
--- a/src/nautilus-grid-view.c
+++ b/src/nautilus-grid-view.c
@@ -367,6 +367,10 @@ bind_cell (GtkSignalListItemFactory *factory,
gtk_widget_set_margin_bottom (parent, 3);
gtk_widget_set_margin_start (parent, 3);
gtk_widget_set_margin_end (parent, 3);
+
+ gtk_accessible_update_relation (GTK_ACCESSIBLE (parent),
+ GTK_ACCESSIBLE_RELATION_LABELLED_BY, cell, NULL,
+ -1);
}
}
diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c
index e2389eac3..4b7a5f2e1 100644
--- a/src/nautilus-list-view.c
+++ b/src/nautilus-list-view.c
@@ -945,11 +945,27 @@ bind_name_cell (GtkSignalListItemFactory *factory,
GtkListItem *listitem,
gpointer user_data)
{
+ GtkWidget *cell;
NautilusViewItem *item;
+ cell = gtk_list_item_get_child (listitem);
item = NAUTILUS_VIEW_ITEM (gtk_list_item_get_item (listitem));
nautilus_view_item_set_item_ui (item, gtk_list_item_get_child (listitem));
+
+ if (nautilus_view_cell_once (NAUTILUS_VIEW_CELL (cell)))
+ {
+ GtkWidget *row_widget;
+
+ /* At the time of ::setup emission, the item ui has got no parent yet,
+ * that's why we need to complete the widget setup process here, on the
+ * first time ::bind is emitted. */
+ row_widget = gtk_widget_get_parent (gtk_widget_get_parent (cell));
+
+ gtk_accessible_update_relation (GTK_ACCESSIBLE (row_widget),
+ GTK_ACCESSIBLE_RELATION_LABELLED_BY, cell, NULL,
+ -1);
+ }
}
static void
diff --git a/src/resources/ui/nautilus-grid-cell.ui b/src/resources/ui/nautilus-grid-cell.ui
index 2ca1f2755..cfc0ced89 100644
--- a/src/resources/ui/nautilus-grid-cell.ui
+++ b/src/resources/ui/nautilus-grid-cell.ui
@@ -3,6 +3,9 @@
<requires lib="gtk" version="4.0"/>
<template class="NautilusGridCell" parent="NautilusViewCell">
<property name="valign">start</property>
+ <accessibility>
+ <relation name="labelled-by">label</relation>
+ </accessibility>
<child>
<object class="AdwClamp">
<property name="maximum-size">0</property>
diff --git a/src/resources/ui/nautilus-name-cell.ui b/src/resources/ui/nautilus-name-cell.ui
index f2105fb55..246aa3ab2 100644
--- a/src/resources/ui/nautilus-name-cell.ui
+++ b/src/resources/ui/nautilus-name-cell.ui
@@ -2,6 +2,9 @@
<interface>
<requires lib="gtk" version="4.0"/>
<template class="NautilusNameCell" parent="NautilusViewCell">
+ <accessibility>
+ <relation name="labelled-by">label</relation>
+ </accessibility>
<child>
<object class="GtkBox">
<property name="spacing">6</property>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]