summaryrefslogtreecommitdiff
path: root/gtk/a11y
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2012-02-11 03:00:04 +0100
committerBenjamin Otte <otte@redhat.com>2012-02-11 03:02:20 +0100
commit24db6d7a6f6e3b751055642edf719e9eecfb96f7 (patch)
treef8e513678099d5a967bda56a5b63dfcb3f7864cf /gtk/a11y
parent5fe947640ce55ef3e45f42ff00f5664551d2abca (diff)
downloadgtk+-24db6d7a6f6e3b751055642edf719e9eecfb96f7.tar.gz
a11y: Emit focus change events when focus cell changes
Diffstat (limited to 'gtk/a11y')
-rw-r--r--gtk/a11y/gtktreeviewaccessible.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/gtk/a11y/gtktreeviewaccessible.c b/gtk/a11y/gtktreeviewaccessible.c
index d6a4fb266f..3dfedfa27c 100644
--- a/gtk/a11y/gtktreeviewaccessible.c
+++ b/gtk/a11y/gtktreeviewaccessible.c
@@ -2095,6 +2095,43 @@ _gtk_tree_view_accessible_update_focus_column (GtkTreeView *treeview,
GtkTreeViewColumn *old_focus,
GtkTreeViewColumn *new_focus)
{
+ GtkTreeViewAccessible *accessible;
+ AtkObject *obj;
+ GtkRBTree *cursor_tree;
+ GtkRBNode *cursor_node;
+ GtkCellAccessible *cell;
+
+ old_focus = get_effective_focus_column (treeview, old_focus);
+ new_focus = get_effective_focus_column (treeview, new_focus);
+ if (old_focus == new_focus)
+ return;
+
+ obj = _gtk_widget_peek_accessible (GTK_WIDGET (treeview));
+ if (obj == NULL)
+ return;
+
+ accessible = GTK_TREE_VIEW_ACCESSIBLE (obj);
+
+ if (!_gtk_tree_view_get_cursor_node (treeview, &cursor_tree, &cursor_node))
+ return;
+
+ if (old_focus)
+ {
+ cell = peek_cell (accessible, cursor_tree, cursor_node, old_focus);
+ if (cell != NULL)
+ _gtk_cell_accessible_state_changed (cell, GTK_CELL_RENDERER_FOCUSED, 0);
+ }
+
+ if (new_focus)
+ {
+ /* XXX: force creation here */
+ cell = peek_cell (accessible, cursor_tree, cursor_node, new_focus);
+ if (cell != NULL)
+ {
+ _gtk_cell_accessible_state_changed (cell, 0, GTK_CELL_RENDERER_FOCUSED);
+ g_signal_emit_by_name (accessible, "active-descendant-changed", cell);
+ }
+ }
}
void