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

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