[gtk/a11y/atspi] listbox: Update accessible state for rows
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/a11y/atspi] listbox: Update accessible state for rows
- Date: Tue, 13 Oct 2020 21:26:56 +0000 (UTC)
commit 3cc9ac406def4b7b38bb9700a818e10c135099bc
Author: Matthias Clasen <mclasen redhat com>
Date: Tue Oct 13 12:07:19 2020 -0400
listbox: Update accessible state for rows
Set the SELECTED state to reflect whether the row
is selected, unselected, or unselectable. This is
enough to make selection changes appear in Accerciser.
While we are at it, also set the multi-selectable
property for the listbox itself.
gtk/gtklistbox.c | 34 +++++++++++++++++++++++++++++++++-
1 file changed, 33 insertions(+), 1 deletion(-)
---
diff --git a/gtk/gtklistbox.c b/gtk/gtklistbox.c
index c0028d83fd..ac1a28426e 100644
--- a/gtk/gtklistbox.c
+++ b/gtk/gtklistbox.c
@@ -19,6 +19,7 @@
#include "gtklistbox.h"
+#include "gtkaccessible.h"
#include "gtkactionhelperprivate.h"
#include "gtkadjustmentprivate.h"
#include "gtkbinlayout.h"
@@ -1119,6 +1120,10 @@ gtk_list_box_set_selection_mode (GtkListBox *box,
gtk_list_box_update_row_styles (box);
+ gtk_accessible_update_property (GTK_ACCESSIBLE (box),
+ GTK_ACCESSIBLE_PROPERTY_MULTI_SELECTABLE, mode == GTK_SELECTION_MULTIPLE,
+ -1);
+
g_object_notify_by_pspec (G_OBJECT (box), properties[PROP_SELECTION_MODE]);
if (dirty)
@@ -1558,6 +1563,10 @@ gtk_list_box_row_set_selected (GtkListBoxRow *row,
gtk_widget_unset_state_flags (GTK_WIDGET (row),
GTK_STATE_FLAG_SELECTED);
+ gtk_accessible_update_state (GTK_ACCESSIBLE (row),
+ GTK_ACCESSIBLE_STATE_SELECTED, selected,
+ -1);
+
return TRUE;
}
@@ -3019,6 +3028,19 @@ gtk_list_box_row_hide (GtkWidget *widget)
gtk_list_box_row_visibility_changed (box, row);
}
+static void
+gtk_list_box_row_root (GtkWidget *widget)
+{
+ GtkListBoxRow *row = GTK_LIST_BOX_ROW (widget);
+
+ GTK_WIDGET_CLASS (gtk_list_box_row_parent_class)->root (widget);
+
+ if (ROW_PRIV (row)->selectable)
+ gtk_accessible_update_state (GTK_ACCESSIBLE (row),
+ GTK_ACCESSIBLE_STATE_SELECTED, ROW_PRIV (row)->selected,
+ -1);
+}
+
/**
* gtk_list_box_row_changed:
* @row: a #GtkListBoxRow
@@ -3228,10 +3250,19 @@ gtk_list_box_row_set_selectable (GtkListBoxRow *row,
{
if (!selectable)
gtk_list_box_row_set_selected (row, FALSE);
-
+
ROW_PRIV (row)->selectable = selectable;
+ if (selectable)
+ gtk_accessible_update_state (GTK_ACCESSIBLE (row),
+ GTK_ACCESSIBLE_STATE_SELECTED, FALSE,
+ -1);
+ else
+ gtk_accessible_reset_state (GTK_ACCESSIBLE (row),
+ GTK_ACCESSIBLE_STATE_SELECTED);
+
gtk_list_box_update_row_style (gtk_list_box_row_get_box (row), row);
+
g_object_notify_by_pspec (G_OBJECT (row), row_properties[ROW_PROP_SELECTABLE]);
}
}
@@ -3413,6 +3444,7 @@ gtk_list_box_row_class_init (GtkListBoxRowClass *klass)
object_class->finalize = gtk_list_box_row_finalize;
object_class->dispose = gtk_list_box_row_dispose;
+ widget_class->root = gtk_list_box_row_root;
widget_class->show = gtk_list_box_row_show;
widget_class->hide = gtk_list_box_row_hide;
widget_class->focus = gtk_list_box_row_focus;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]