2 #include <glib-object.h>
6 * To use this test module, run the test program testgtk and click on
10 static void _check_statusbar (AtkObject *obj);
11 static AtkObject* _find_object (AtkObject* obj, AtkRole role);
12 static void _notify_handler (GObject *obj, GParamSpec *pspec);
13 static void _property_change_handler (AtkObject *obj,
14 AtkPropertyValues *values);
17 _find_object (AtkObject *obj,
21 * Find the first object which is a descendant of the specified object
22 * which matches the specified role.
24 * This function returns a reference to the AtkObject which should be
25 * removed when finished with the object.
31 n_children = atk_object_get_n_accessible_children (obj);
32 for (i = 0; i < n_children; i++)
36 child = atk_object_ref_accessible_child (obj, i);
37 if (atk_object_get_role (child) == role)
41 found_obj = _find_object (child, role);
42 g_object_unref (child);
51 static void _property_change_handler (AtkObject *obj,
52 AtkPropertyValues *values)
54 G_CONST_RETURN gchar *type_name = g_type_name (G_TYPE_FROM_INSTANCE (obj));
55 G_CONST_RETURN gchar *name = atk_object_get_name (obj);
57 g_print ("_property_change_handler: Accessible Type: %s\n",
58 type_name ? type_name : "NULL");
59 g_print ("_property_change_handler: Accessible name: %s\n",
60 name ? name : "NULL");
61 g_print ("_property_change_handler: PropertyName: %s\n",
62 values->property_name ? values->property_name: "NULL");
63 if (G_VALUE_HOLDS_STRING (&values->new_value))
64 g_print ("_property_change_handler: PropertyValue: %s\n",
65 g_value_get_string (&values->new_value));
68 static void _check_statusbar (AtkObject *obj)
71 AtkObject *statusbar, *label;
73 role = atk_object_get_role (obj);
74 if (role != ATK_ROLE_FRAME)
77 statusbar = _find_object (obj, ATK_ROLE_STATUSBAR);
80 g_print ("_check_statusbar\n");
81 label = atk_object_ref_accessible_child (statusbar, 0);
82 g_return_if_fail (label == NULL);
85 * We get notified of changes to the label
87 g_signal_connect_closure_by_id (statusbar,
88 g_signal_lookup ("notify",
89 G_OBJECT_TYPE (statusbar)),
91 g_cclosure_new (G_CALLBACK (_notify_handler),
94 atk_object_connect_property_change_handler (statusbar,
95 (AtkPropertyChangeHandler*) _property_change_handler);
100 _notify_handler (GObject *obj, GParamSpec *pspec)
102 AtkObject *atk_obj = ATK_OBJECT (obj);
103 G_CONST_RETURN gchar *name;
105 g_print ("_notify_handler: property: %s\n", pspec->name);
106 if (strcmp (pspec->name, "accessible-name") == 0)
108 name = atk_object_get_name (atk_obj);
109 g_print ("_notify_handler: value: |%s|\n", name ? name : "<NULL>");
114 _create_event_watcher (void)
116 atk_add_focus_tracker (_check_statusbar);
120 gtk_module_init(gint argc, char* argv[])
122 g_print("teststatusbar Module loaded\n");
124 _create_event_watcher();