7 static void _traverse_children (AtkObject *obj);
8 static void _add_handler (AtkObject *obj);
9 static void _check_properties (AtkObject *obj);
10 static void _property_change_handler (AtkObject *obj,
11 AtkPropertyValues *values);
12 static void _state_changed (AtkObject *obj,
15 static void _selection_changed (AtkObject *obj);
16 static void _visible_data_changed (AtkObject *obj);
17 static void _model_changed (AtkObject *obj);
18 static void _create_event_watcher (void);
23 _state_changed (AtkObject *obj,
27 g_print ("_state_changed: %s: state %s %s\n",
28 g_type_name (G_OBJECT_TYPE (obj)),
29 set ? "is" : "was", name);
33 _selection_changed (AtkObject *obj)
37 if (ATK_IS_TEXT (obj))
39 else if (ATK_IS_SELECTION (obj))
40 type = "child selection";
43 g_assert_not_reached();
47 g_print ("In selection_changed signal handler for %s, object type: %s\n",
48 type, g_type_name (G_OBJECT_TYPE (obj)));
52 _visible_data_changed (AtkObject *obj)
54 g_print ("In visible_data_changed signal handler, object type: %s\n",
55 g_type_name (G_OBJECT_TYPE (obj)));
59 _model_changed (AtkObject *obj)
61 g_print ("In model_changed signal handler, object type: %s\n",
62 g_type_name (G_OBJECT_TYPE (obj)));
66 _property_change_handler (AtkObject *obj,
67 AtkPropertyValues *values)
69 G_CONST_RETURN gchar *type_name = g_type_name (G_TYPE_FROM_INSTANCE (obj));
70 G_CONST_RETURN gchar *name = atk_object_get_name (obj);
72 g_print ("_property_change_handler: Accessible Type: %s\n",
73 type_name ? type_name : "NULL");
74 g_print ("_property_change_handler: Accessible name: %s\n",
75 name ? name : "NULL");
76 g_print ("_property_change_handler: PropertyName: %s\n",
77 values->property_name ? values->property_name: "NULL");
78 if (G_VALUE_HOLDS_STRING (&values->new_value))
79 g_print ("_property_change_handler: PropertyValue: %s\n",
80 g_value_get_string (&values->new_value));
81 else if (strcmp (values->property_name, "accessible-child") == 0)
83 if (G_IS_VALUE (&values->old_value))
85 g_print ("Child is removed: %s\n",
86 g_type_name (G_TYPE_FROM_INSTANCE (g_value_get_pointer (&values->old_value))));
88 if (G_IS_VALUE (&values->new_value))
90 g_print ("Child is added: %s\n",
91 g_type_name (G_TYPE_FROM_INSTANCE (g_value_get_pointer (&values->new_value))));
94 else if (strcmp (values->property_name, "accessible-parent") == 0)
96 if (G_IS_VALUE (&values->old_value))
98 g_print ("Parent is removed: %s\n",
99 g_type_name (G_TYPE_FROM_INSTANCE (g_value_get_pointer (&values->old_value))));
101 if (G_IS_VALUE (&values->new_value))
103 g_print ("Parent is added: %s\n",
104 g_type_name (G_TYPE_FROM_INSTANCE (g_value_get_pointer (&values->new_value))));
107 else if (strcmp (values->property_name, "accessible-value") == 0)
109 if (G_VALUE_HOLDS_DOUBLE (&values->new_value))
111 g_print ("Value now is (double) %f\n",
112 g_value_get_double (&values->new_value));
118 _traverse_children (AtkObject *obj)
123 role = atk_object_get_role (obj);
125 if ((role == ATK_ROLE_TABLE) ||
126 (role == ATK_ROLE_TREE_TABLE))
129 n_children = atk_object_get_n_accessible_children (obj);
130 for (i = 0; i < n_children; i++)
134 child = atk_object_ref_accessible_child (obj, i);
135 _add_handler (child);
136 _traverse_children (child);
137 g_object_unref (G_OBJECT (child));
142 _add_handler (AtkObject *obj)
144 static GPtrArray *obj_array = NULL;
145 gboolean found = FALSE;
149 * We create a property handler for each object if one was not associated
152 * We add it to our array of objects which have property handlers; if an
153 * object is destroyed it remains in the array.
155 if (obj_array == NULL)
156 obj_array = g_ptr_array_new ();
158 for (i = 0; i < obj_array->len; i++)
160 if (obj == g_ptr_array_index (obj_array, i))
168 atk_object_connect_property_change_handler (obj,
169 (AtkPropertyChangeHandler*) _property_change_handler);
170 g_signal_connect (obj, "state-change",
171 (GCallback) _state_changed, NULL);
172 if (ATK_IS_SELECTION (obj))
173 g_signal_connect (obj, "selection_changed",
174 (GCallback) _selection_changed, NULL);
175 g_signal_connect (obj, "visible_data_changed",
176 (GCallback) _visible_data_changed, NULL);
177 if (ATK_IS_TABLE (obj))
178 g_signal_connect (obj, "model_changed",
179 (GCallback) _model_changed, NULL);
180 g_ptr_array_add (obj_array, obj);
185 _check_properties (AtkObject *obj)
189 g_print ("Start of _check_properties: %s\n",
190 g_type_name (G_OBJECT_TYPE (obj)));
194 role = atk_object_get_role (obj);
195 if (role == ATK_ROLE_FRAME ||
196 role == ATK_ROLE_DIALOG)
199 * Add handlers to all children.
201 _traverse_children (obj);
203 g_print ("End of _check_properties\n");
207 _create_event_watcher (void)
209 id = atk_add_focus_tracker (_check_properties);
213 gtk_module_init(gint argc, char* argv[])
215 g_print("testprops Module loaded\n");
217 _create_event_watcher();