4 static void _test_selection (AtkObject *obj);
5 static void _check_combo_box (AtkObject *obj);
6 static void _check_children (AtkObject *obj);
7 static gint _open_combo_list (gpointer data);
8 static gint _close_combo_list (gpointer data);
10 #define NUM_VALID_ROLES 1
12 static void _check_children (AtkObject *obj)
14 gint n_children, i, j;
16 AtkObject *grand_child;
19 n_children = atk_object_get_n_accessible_children (obj);
23 g_print ("*** Unexpected number of children for combo box: %d\n",
29 child = atk_object_ref_accessible_child (obj, 1);
30 g_return_if_fail (atk_object_get_role (child) == ATK_ROLE_TEXT);
31 parent = atk_object_get_parent (child);
32 j = atk_object_get_index_in_parent (child);
34 g_print ("*** inconsistency between parent and children %d %d ***\n",
36 g_object_unref (G_OBJECT (child));
39 child = atk_object_ref_accessible_child (obj, 0);
40 g_return_if_fail (atk_object_get_role (child) == ATK_ROLE_LIST);
41 parent = atk_object_get_parent (child);
42 j = atk_object_get_index_in_parent (child);
44 g_print ("*** inconsistency between parent and children %d %d ***\n",
47 n_children = atk_object_get_n_accessible_children (child);
48 for (i = 0; i < n_children; i++)
50 G_CONST_RETURN gchar *name;
52 grand_child = atk_object_ref_accessible_child (child, i);
53 name = atk_object_get_name (grand_child);
54 g_print ("Index: %d Name: %s\n", i, name ? name : "<NULL>");
55 g_object_unref (G_OBJECT (grand_child));
57 g_object_unref (G_OBJECT (child));
60 static void _test_selection (AtkObject *obj)
66 count = atk_selection_get_selection_count (ATK_SELECTION (obj));
67 g_return_if_fail (count == 0);
69 list = atk_object_ref_accessible_child (obj, 0);
70 n_children = atk_object_get_n_accessible_children (list);
71 g_object_unref (G_OBJECT (list));
73 atk_selection_add_selection (ATK_SELECTION (obj), n_children - 1);
74 count = atk_selection_get_selection_count (ATK_SELECTION (obj));
75 g_return_if_fail (count == 1);
76 g_return_if_fail (atk_selection_is_child_selected (ATK_SELECTION (obj),
78 atk_selection_add_selection (ATK_SELECTION (obj), 0);
79 count = atk_selection_get_selection_count (ATK_SELECTION (obj));
80 g_return_if_fail (count == 1);
81 g_return_if_fail (atk_selection_is_child_selected (ATK_SELECTION (obj), 0));
82 atk_selection_clear_selection (ATK_SELECTION (obj));
83 count = atk_selection_get_selection_count (ATK_SELECTION (obj));
84 g_return_if_fail (count == 0);
87 static void _check_combo_box (AtkObject *obj)
89 static gboolean done = FALSE;
90 static gboolean done_selection = FALSE;
93 role = atk_object_get_role (obj);
95 if (role == ATK_ROLE_FRAME)
97 AtkRole roles[NUM_VALID_ROLES];
103 roles[0] = ATK_ROLE_COMBO_BOX;
105 combo_obj = find_object_by_role (obj, roles, NUM_VALID_ROLES);
111 done_selection = TRUE;
113 if (g_getenv ("TEST_ACCESSIBLE_COMBO_NOEDIT") != NULL)
118 combo = gtk_accessible_get_widget (GTK_ACCESSIBLE (combo_obj));
119 entry = GTK_ENTRY (gtk_bin_get_child (GTK_BIN (combo)));
120 gtk_editable_set_editable (GTK_EDITABLE (entry), FALSE);
122 _check_children (combo_obj);
123 _test_selection (combo_obj);
128 if (role != ATK_ROLE_COMBO_BOX)
131 g_print ("*** Start ComboBox ***\n");
132 _check_children (obj);
136 g_idle_add ((GSourceFunc)_open_combo_list, obj);
141 g_print ("*** End ComboBox ***\n");
144 static gint _open_combo_list (gpointer data)
146 AtkObject *obj = ATK_OBJECT (data);
148 g_print ("_open_combo_list\n");
149 atk_action_do_action (ATK_ACTION (obj), 0);
151 g_timeout_add (5000, _close_combo_list, obj);
155 static gint _close_combo_list (gpointer data)
157 AtkObject *obj = ATK_OBJECT (data);
163 count = atk_selection_get_selection_count (ATK_SELECTION (obj));
164 g_return_val_if_fail (count == 0, FALSE);
166 list = atk_object_ref_accessible_child (obj, 0);
167 n_children = atk_object_get_n_accessible_children (list);
168 g_object_unref (G_OBJECT (list));
170 atk_selection_add_selection (ATK_SELECTION (obj), n_children - 1);
172 atk_action_do_action (ATK_ACTION (obj), 0);
178 _create_event_watcher (void)
180 atk_add_focus_tracker (_check_combo_box);
184 gtk_module_init(gint argc, char* argv[])
186 g_print("testcombo Module loaded\n");
188 _create_event_watcher();