diff options
author | Li Yuan <li.yuan@sun.com> | 2008-01-11 09:58:34 +0000 |
---|---|---|
committer | Li Yuan <liyuan@src.gnome.org> | 2008-01-11 09:58:34 +0000 |
commit | 7fc21d35d757f5f1c974b8c82bcdd1bb5eb72e07 (patch) | |
tree | c956a9449c75e47134b7088852c9c5bf9e63e0a8 | |
parent | fe9254565adebd12d9ceb322c9488c995f6fc747 (diff) | |
download | gtk+-7fc21d35d757f5f1c974b8c82bcdd1bb5eb72e07.tar.gz |
Bug #508255. Remove ATK_STATE_FOCUSED state when focus jumps out. Emit
2008-01-11 Li Yuan <li.yuan@sun.com>
* gailtreeview.c: (gail_tree_view_real_initialize), (focus_in),
(focus_out):
Bug #508255. Remove ATK_STATE_FOCUSED state when focus jumps out.
Emit "active-descendant-changed" and add ATK_STATE_FOCUSED state when
focus comes in again.
svn path=/trunk/; revision=19351
-rw-r--r-- | modules/other/gail/ChangeLog | 8 | ||||
-rw-r--r-- | modules/other/gail/gailtreeview.c | 55 |
2 files changed, 63 insertions, 0 deletions
diff --git a/modules/other/gail/ChangeLog b/modules/other/gail/ChangeLog index 5292640f96..2cdbf7c4fe 100644 --- a/modules/other/gail/ChangeLog +++ b/modules/other/gail/ChangeLog @@ -1,5 +1,13 @@ 2008-01-11 Li Yuan <li.yuan@sun.com> + * gailtreeview.c: (gail_tree_view_real_initialize), (focus_in), + (focus_out): + Bug #508255. Remove ATK_STATE_FOCUSED state when focus jumps out. + Emit "active-descendant-changed" and add ATK_STATE_FOCUSED state when + focus comes in again. + +2008-01-11 Li Yuan <li.yuan@sun.com> + * gailtreeview.c: (gail_tree_view_ref_child), (idle_cursor_changed): Bug #497218. Emit "active-descendant-changed" when focus first comes diff --git a/modules/other/gail/gailtreeview.c b/modules/other/gail/gailtreeview.c index 6b88454b38..a380dbf65d 100644 --- a/modules/other/gail/gailtreeview.c +++ b/modules/other/gail/gailtreeview.c @@ -194,6 +194,8 @@ static void gail_tree_view_changed_gtk (GtkTreeSelection static void columns_changed (GtkTreeView *tree_view); static void cursor_changed (GtkTreeView *tree_view); static gint idle_cursor_changed (gpointer data); +static void focus_in (GtkWidget *widget); +static void focus_out (GtkWidget *widget); static void model_row_changed (GtkTreeModel *tree_model, GtkTreePath *path, @@ -469,6 +471,10 @@ gail_tree_view_real_initialize (AtkObject *obj, (GCallback) columns_changed, NULL, NULL, 0); g_signal_connect_data (tree_view, "cursor-changed", (GCallback) cursor_changed, NULL, NULL, 0); + g_signal_connect_data (GTK_WIDGET (tree_view), "focus-in-event", + (GCallback) focus_in, NULL, NULL, 0); + g_signal_connect_data (GTK_WIDGET (tree_view), "focus-out-event", + (GCallback) focus_out, NULL, NULL, 0); view->tree_model = tree_model; if (tree_model) @@ -2650,6 +2656,55 @@ idle_cursor_changed (gpointer data) } static void +focus_in (GtkWidget *widget) +{ + GtkTreeView *tree_view; + GailTreeView *gail_tree_view; + AtkStateSet *state_set; + AtkObject *cell; + + tree_view = GTK_TREE_VIEW (widget); + gail_tree_view = GAIL_TREE_VIEW (gtk_widget_get_accessible (widget)); + + if (gail_tree_view->focus_cell == NULL) + { + cell = gail_tree_view_ref_focus_cell (tree_view); + if (cell) + { + state_set = atk_object_ref_state_set (cell); + if (state_set) + { + if (!atk_state_set_contains_state (state_set, ATK_STATE_FOCUSED)) + { + gail_cell_add_state (GAIL_CELL (cell), ATK_STATE_ACTIVE, FALSE); + gail_tree_view->focus_cell = cell; + gail_cell_add_state (GAIL_CELL (cell), ATK_STATE_FOCUSED, FALSE); + g_signal_emit_by_name (gail_tree_view, + "active-descendant-changed", + cell); + } + g_object_unref (state_set); + } + } + } +} + +static void +focus_out (GtkWidget *widget) +{ + GailTreeView *gail_tree_view; + + gail_tree_view = GAIL_TREE_VIEW (gtk_widget_get_accessible (widget)); + 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 = NULL; + } +} + +static void model_row_changed (GtkTreeModel *tree_model, GtkTreePath *path, GtkTreeIter *iter, |