summaryrefslogtreecommitdiff
path: root/modules/other
diff options
context:
space:
mode:
authorLi Yuan <li.yuan@sun.com>2008-01-11 09:58:34 +0000
committerLi Yuan <liyuan@src.gnome.org>2008-01-11 09:58:34 +0000
commit7fc21d35d757f5f1c974b8c82bcdd1bb5eb72e07 (patch)
treec956a9449c75e47134b7088852c9c5bf9e63e0a8 /modules/other
parentfe9254565adebd12d9ceb322c9488c995f6fc747 (diff)
downloadgtk+-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
Diffstat (limited to 'modules/other')
-rw-r--r--modules/other/gail/ChangeLog8
-rw-r--r--modules/other/gail/gailtreeview.c55
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,