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

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