diff --git a/modules/other/gail/ChangeLog b/modules/other/gail/ChangeLog
index 921721003a..5292640f96 100644
--- a/modules/other/gail/ChangeLog
+++ b/modules/other/gail/ChangeLog
@@ -1,3 +1,10 @@
+2008-01-11 Li Yuan
+
+ * gailtreeview.c: (gail_tree_view_ref_child),
+ (idle_cursor_changed):
+ Bug #497218. Emit "active-descendant-changed" when focus first comes
+ into treeview. Add/remove ATK_STATE_FOCUSED when cursor changes.
+
2008-01-11 Li Yuan
* gailtreeview.c: (gail_tree_view_get_n_rows):
diff --git a/modules/other/gail/gailtreeview.c b/modules/other/gail/gailtreeview.c
index cee016cbaa..6b88454b38 100644
--- a/modules/other/gail/gailtreeview.c
+++ b/modules/other/gail/gailtreeview.c
@@ -987,6 +987,9 @@ gail_tree_view_ref_child (AtkObject *obj,
{
gailview->focus_cell = g_object_ref (cell);
gail_cell_add_state (cell, ATK_STATE_FOCUSED, FALSE);
+ g_signal_emit_by_name (gailview,
+ "active-descendant-changed",
+ cell);
}
}
g_list_free (renderer_list);
@@ -2625,12 +2628,16 @@ idle_cursor_changed (gpointer data)
if (gail_tree_view->focus_cell)
{
gail_cell_remove_state (GAIL_CELL (gail_tree_view->focus_cell), ATK_STATE_ACTIVE, FALSE);
+ gail_cell_remove_state (GAIL_CELL (gail_tree_view->focus_cell), ATK_STATE_FOCUSED, FALSE);
g_object_unref (gail_tree_view->focus_cell);
}
gail_tree_view->focus_cell = cell;
if (GTK_WIDGET_HAS_FOCUS (widget))
- gail_cell_add_state (GAIL_CELL (cell), ATK_STATE_ACTIVE, FALSE);
+ {
+ gail_cell_add_state (GAIL_CELL (cell), ATK_STATE_ACTIVE, FALSE);
+ gail_cell_add_state (GAIL_CELL (cell), ATK_STATE_FOCUSED, FALSE);
+ }
g_signal_emit_by_name (gail_tree_view,
"active-descendant-changed",
cell);