|
Packit Service |
fb6fa5 |
#include <string.h>
|
|
Packit Service |
fb6fa5 |
#include <glib-object.h>
|
|
Packit Service |
fb6fa5 |
#include <atk/atk.h>
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
/*
|
|
Packit Service |
fb6fa5 |
* To use this test module, run the test program testgtk and click on
|
|
Packit Service |
fb6fa5 |
* statusbar
|
|
Packit Service |
fb6fa5 |
*/
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
static void _check_statusbar (AtkObject *obj);
|
|
Packit Service |
fb6fa5 |
static AtkObject* _find_object (AtkObject* obj, AtkRole role);
|
|
Packit Service |
fb6fa5 |
static void _notify_handler (GObject *obj, GParamSpec *pspec);
|
|
Packit Service |
fb6fa5 |
static void _property_change_handler (AtkObject *obj,
|
|
Packit Service |
fb6fa5 |
AtkPropertyValues *values);
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
static AtkObject*
|
|
Packit Service |
fb6fa5 |
_find_object (AtkObject *obj,
|
|
Packit Service |
fb6fa5 |
AtkRole role)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
/*
|
|
Packit Service |
fb6fa5 |
* Find the first object which is a descendant of the specified object
|
|
Packit Service |
fb6fa5 |
* which matches the specified role.
|
|
Packit Service |
fb6fa5 |
*
|
|
Packit Service |
fb6fa5 |
* This function returns a reference to the AtkObject which should be
|
|
Packit Service |
fb6fa5 |
* removed when finished with the object.
|
|
Packit Service |
fb6fa5 |
*/
|
|
Packit Service |
fb6fa5 |
gint i;
|
|
Packit Service |
fb6fa5 |
gint n_children;
|
|
Packit Service |
fb6fa5 |
AtkObject *child;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
n_children = atk_object_get_n_accessible_children (obj);
|
|
Packit Service |
fb6fa5 |
for (i = 0; i < n_children; i++)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
AtkObject* found_obj;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
child = atk_object_ref_accessible_child (obj, i);
|
|
Packit Service |
fb6fa5 |
if (atk_object_get_role (child) == role)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
return child;
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
found_obj = _find_object (child, role);
|
|
Packit Service |
fb6fa5 |
g_object_unref (child);
|
|
Packit Service |
fb6fa5 |
if (found_obj)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
return found_obj;
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
return NULL;
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
static void _property_change_handler (AtkObject *obj,
|
|
Packit Service |
fb6fa5 |
AtkPropertyValues *values)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
const gchar *type_name = g_type_name (G_TYPE_FROM_INSTANCE (obj));
|
|
Packit Service |
fb6fa5 |
const gchar *name = atk_object_get_name (obj);
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
g_print ("_property_change_handler: Accessible Type: %s\n",
|
|
Packit Service |
fb6fa5 |
type_name ? type_name : "NULL");
|
|
Packit Service |
fb6fa5 |
g_print ("_property_change_handler: Accessible name: %s\n",
|
|
Packit Service |
fb6fa5 |
name ? name : "NULL");
|
|
Packit Service |
fb6fa5 |
g_print ("_property_change_handler: PropertyName: %s\n",
|
|
Packit Service |
fb6fa5 |
values->property_name ? values->property_name: "NULL");
|
|
Packit Service |
fb6fa5 |
if (G_VALUE_HOLDS_STRING (&values->new_value))
|
|
Packit Service |
fb6fa5 |
g_print ("_property_change_handler: PropertyValue: %s\n",
|
|
Packit Service |
fb6fa5 |
g_value_get_string (&values->new_value));
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
static void _check_statusbar (AtkObject *obj)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
AtkRole role;
|
|
Packit Service |
fb6fa5 |
AtkObject *statusbar, *label;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
role = atk_object_get_role (obj);
|
|
Packit Service |
fb6fa5 |
if (role != ATK_ROLE_FRAME)
|
|
Packit Service |
fb6fa5 |
return;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
statusbar = _find_object (obj, ATK_ROLE_STATUSBAR);
|
|
Packit Service |
fb6fa5 |
if (!statusbar)
|
|
Packit Service |
fb6fa5 |
return;
|
|
Packit Service |
fb6fa5 |
g_print ("_check_statusbar\n");
|
|
Packit Service |
fb6fa5 |
label = atk_object_ref_accessible_child (statusbar, 0);
|
|
Packit Service |
fb6fa5 |
g_return_if_fail (label == NULL);
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
/*
|
|
Packit Service |
fb6fa5 |
* We get notified of changes to the label
|
|
Packit Service |
fb6fa5 |
*/
|
|
Packit Service |
fb6fa5 |
g_signal_connect_closure_by_id (statusbar,
|
|
Packit Service |
fb6fa5 |
g_signal_lookup ("notify",
|
|
Packit Service |
fb6fa5 |
G_OBJECT_TYPE (statusbar)),
|
|
Packit Service |
fb6fa5 |
0,
|
|
Packit Service |
fb6fa5 |
g_cclosure_new (G_CALLBACK (_notify_handler),
|
|
Packit Service |
fb6fa5 |
NULL, NULL),
|
|
Packit Service |
fb6fa5 |
FALSE);
|
|
Packit Service |
fb6fa5 |
atk_object_connect_property_change_handler (statusbar,
|
|
Packit Service |
fb6fa5 |
(AtkPropertyChangeHandler*) _property_change_handler);
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
static void
|
|
Packit Service |
fb6fa5 |
_notify_handler (GObject *obj, GParamSpec *pspec)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
AtkObject *atk_obj = ATK_OBJECT (obj);
|
|
Packit Service |
fb6fa5 |
const gchar *name;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
g_print ("_notify_handler: property: %s\n", pspec->name);
|
|
Packit Service |
fb6fa5 |
if (strcmp (pspec->name, "accessible-name") == 0)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
name = atk_object_get_name (atk_obj);
|
|
Packit Service |
fb6fa5 |
g_print ("_notify_handler: value: |%s|\n", name ? name : "<NULL>");
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
static void
|
|
Packit Service |
fb6fa5 |
_create_event_watcher (void)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
atk_add_focus_tracker (_check_statusbar);
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
int
|
|
Packit Service |
fb6fa5 |
gtk_module_init(gint argc, char* argv[])
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
g_print("teststatusbar Module loaded\n");
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
_create_event_watcher();
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
return 0;
|
|
Packit Service |
fb6fa5 |
}
|