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

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
}