gtk/modules/other/gail/tests/testtoplevel.c

128 lines
3.3 KiB
C
Raw Normal View History

#include <atk/atk.h>
#include <gtk/gtk.h>
#include "testlib.h"
static void _notify_toplevel_child_added (GObject *obj,
guint index, AtkObject *child, gpointer user_data);
static void _notify_toplevel_child_removed (GObject *obj,
guint index, AtkObject *child, gpointer user_data);
static gboolean _button_press_event_watcher (GSignalInvocationHint *ihint,
guint n_param_values, const GValue *param_values, gpointer data);
static guint id;
static gboolean g_register_listener = FALSE;
static guint g_signal_listener = 0;
static gint g_press_count = 0;
static void
_check_toplevel (AtkObject *obj)
{
AtkObject *root_obj;
const gchar *name_string, *version_string;
gint max_depth;
g_print ("Start of _check_toplevel\n");
root_obj = atk_get_root();
if (!already_accessed_atk_object(root_obj))
{
g_signal_connect_closure (root_obj, "children_changed::add",
g_cclosure_new (G_CALLBACK (_notify_toplevel_child_added),
NULL, NULL),
FALSE);
g_signal_connect_closure (root_obj, "children_changed::remove",
g_cclosure_new (G_CALLBACK (_notify_toplevel_child_removed),
NULL, NULL),
FALSE);
}
name_string = atk_get_toolkit_name();
version_string = atk_get_toolkit_version();
g_print ("Toolkit name <%s> version <%s>\n", name_string,
version_string);
if (g_getenv("TEST_ACCESSIBLE_DEPTH") != NULL)
max_depth = string_to_int(g_getenv("TEST_ACCESSIBLE_DEPTH"));
else
max_depth = 2;
display_children_to_depth(root_obj, max_depth, 0, 0);
g_print ("End of _check_toplevel\n");
if (!g_register_listener)
{
g_print("Adding global event listener on buttons\n");
g_register_listener = TRUE;
g_signal_listener = atk_add_global_event_listener(_button_press_event_watcher,
"Gtk:GtkButton:pressed");
}
}
static void
_create_event_watcher (void)
{
id = atk_add_focus_tracker (_check_toplevel);
}
int
gtk_module_init(gint argc, char* argv[])
{
g_print("testtoplevel Module loaded\n");
_create_event_watcher();
return 0;
}
static void _notify_toplevel_child_added (GObject *obj,
guint child_index, AtkObject *child, gpointer user_data)
{
g_print ("SIGNAL - Child added - index %d\n", child_index);
}
static void _notify_toplevel_child_removed (GObject *obj,
guint child_index, AtkObject *child, gpointer user_data)
{
g_print ("SIGNAL - Child removed - index %d\n", child_index);
}
static gboolean
_button_press_event_watcher (GSignalInvocationHint *ihint,
guint n_param_values,
const GValue *param_values,
gpointer data)
{
GObject *object;
gchar * button_name = (gchar *) data;
object = g_value_get_object (param_values + 0);
if (ATK_IS_IMPLEMENTOR(object))
{
AtkObject * atk_obj =
atk_implementor_ref_accessible(ATK_IMPLEMENTOR(object));
g_print("Button <%s> pressed %d times!\n", button_name,
(g_press_count + 1));
g_print("Displaying children of Button pressed!\n");
display_children(atk_obj, 0, 0);
if (g_press_count >= 5)
{
g_print("Removing global event listener on buttons\n");
atk_remove_global_event_listener(g_signal_listener);
g_signal_listener = 0;
g_press_count = 0;
g_register_listener = FALSE;
}
else
{
g_press_count++;
}
}
return TRUE;
}