]> Pileus Git - ~andy/gtk/commitdiff
a11y: Update treeview focused status
authorBenjamin Otte <otte@redhat.com>
Sat, 11 Feb 2012 01:50:26 +0000 (02:50 +0100)
committerBenjamin Otte <otte@redhat.com>
Sat, 11 Feb 2012 01:50:26 +0000 (02:50 +0100)
... when the cursor row changes. Also emit active-descendant-changed.

gtk/a11y/gtktreeviewaccessible.c

index af497b2dcfb4ac1b2350e99fb6a7977cb3599845..d6a4fb266ffff03fbc0b1662bb307aff2b01a3b6 100644 (file)
@@ -2080,6 +2080,16 @@ _gtk_tree_view_accessible_toggle_visibility (GtkTreeView       *treeview,
                                                 id);
 }
 
+GtkTreeViewColumn *
+get_effective_focus_column (GtkTreeView       *treeview,
+                            GtkTreeViewColumn *column)
+{
+  if (column == NULL)
+    column = get_visible_column (treeview, 0);
+
+  return column;
+}
+
 void
 _gtk_tree_view_accessible_update_focus_column (GtkTreeView       *treeview,
                                                GtkTreeViewColumn *old_focus,
@@ -2105,7 +2115,24 @@ _gtk_tree_view_accessible_add_state (GtkTreeView          *treeview,
 
   if (state == GTK_CELL_RENDERER_FOCUSED)
     {
-      /* will add later */
+      GtkTreeViewColumn *focus_column;
+      
+      focus_column = get_effective_focus_column (treeview, _gtk_tree_view_get_focus_column (treeview));
+
+      if (focus_column)
+        {
+          /* XXX: force creation here */
+          GtkCellAccessible *cell = peek_cell (accessible,
+                                               tree, node,
+                                               focus_column);
+
+          if (cell != NULL)
+            {
+              _gtk_cell_accessible_state_changed (cell, 0, state);
+              g_signal_emit_by_name (accessible, "active-descendant-changed", cell);
+            }
+        }
+
       return;
     }
 
@@ -2143,7 +2170,20 @@ _gtk_tree_view_accessible_remove_state (GtkTreeView          *treeview,
 
   if (state == GTK_CELL_RENDERER_FOCUSED)
     {
-      /* will add later */
+      GtkTreeViewColumn *focus_column;
+      
+      focus_column = get_effective_focus_column (treeview, _gtk_tree_view_get_focus_column (treeview));
+
+      if (focus_column)
+        {
+          GtkCellAccessible *cell = peek_cell (accessible,
+                                               tree, node,
+                                               focus_column);
+
+          if (cell != NULL)
+            _gtk_cell_accessible_state_changed (cell, 0, state);
+        }
+
       return;
     }