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

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