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

Packit Service fb6fa5
#include <string.h>
Packit Service fb6fa5
#include <atk/atk.h>
Packit Service fb6fa5
#include <gtk/gtk.h>
Packit Service fb6fa5
Packit Service fb6fa5
/*
Packit Service fb6fa5
 * This module tests the selection interface on menu items.
Packit Service fb6fa5
 * To use this module run the test program testgtk and use the menus 
Packit Service fb6fa5
 * option.
Packit Service fb6fa5
 */
Packit Service fb6fa5
static void _do_selection (AtkObject *obj);
Packit Service fb6fa5
static gint _finish_selection (gpointer data);
Packit Service fb6fa5
static AtkObject* _find_object (AtkObject* obj, AtkRole role);
Packit Service fb6fa5
static void _print_type (AtkObject *obj);
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 _print_type (AtkObject *obj)
Packit Service fb6fa5
{
Packit Service fb6fa5
  const gchar * typename = NULL;
Packit Service fb6fa5
  const gchar * name = NULL;
Packit Service fb6fa5
  AtkRole role;
Packit Service fb6fa5
Packit Service fb6fa5
  if (GTK_IS_ACCESSIBLE (obj))
Packit Service fb6fa5
  {
Packit Service fb6fa5
    GtkWidget* widget = NULL;
Packit Service fb6fa5
Packit Service fb6fa5
    widget = GTK_ACCESSIBLE (obj)->widget;
Packit Service fb6fa5
    typename = g_type_name (G_OBJECT_TYPE (widget));
Packit Service fb6fa5
    g_print ("Widget type name: %s\n", typename ? typename : "NULL");
Packit Service fb6fa5
  }
Packit Service fb6fa5
  typename = g_type_name (G_OBJECT_TYPE (obj));
Packit Service fb6fa5
  g_print ("Accessible type name: %s\n", typename ? typename : "NULL");
Packit Service fb6fa5
  name = atk_object_get_name (obj);
Packit Service fb6fa5
  g_print("Accessible Name: %s\n", (name) ? name : "NULL");
Packit Service fb6fa5
  role = atk_object_get_role(obj);
Packit Service fb6fa5
  g_print ("Accessible Role: %d\n", role);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void 
Packit Service fb6fa5
_do_selection (AtkObject *obj)
Packit Service fb6fa5
{
Packit Service fb6fa5
  gint i;
Packit Service fb6fa5
  AtkObject *selected;
Packit Service fb6fa5
  AtkRole role;
Packit Service fb6fa5
  AtkObject *selection_obj;
Packit Service fb6fa5
Packit Service fb6fa5
  role = atk_object_get_role (obj);
Packit Service fb6fa5
Packit Service fb6fa5
  if ((role == ATK_ROLE_FRAME) &&
Packit Service fb6fa5
      (strcmp (atk_object_get_name (obj), "menus") == 0))
Packit Service fb6fa5
  {
Packit Service fb6fa5
    selection_obj = _find_object (obj, ATK_ROLE_MENU_BAR);
Packit Service fb6fa5
    if (selection_obj)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      g_object_unref (selection_obj);
Packit Service fb6fa5
    }
Packit Service fb6fa5
  }
Packit Service fb6fa5
  else if (role == ATK_ROLE_COMBO_BOX)
Packit Service fb6fa5
  {
Packit Service fb6fa5
    selection_obj = obj;
Packit Service fb6fa5
  }
Packit Service fb6fa5
  else
Packit Service fb6fa5
    return;
Packit Service fb6fa5
Packit Service fb6fa5
  g_print ("*** Start do_selection ***\n");
Packit Service fb6fa5
Packit Service fb6fa5
  
Packit Service fb6fa5
  if (!selection_obj)
Packit Service fb6fa5
  {
Packit Service fb6fa5
    g_print ("no selection_obj\n");
Packit Service fb6fa5
    return;
Packit Service fb6fa5
  }
Packit Service fb6fa5
Packit Service fb6fa5
  i = atk_selection_get_selection_count (ATK_SELECTION (selection_obj));
Packit Service fb6fa5
  if (i != 0)
Packit Service fb6fa5
  {
Packit Service fb6fa5
    for (i = 0; i < atk_object_get_n_accessible_children (selection_obj); i++)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      if (atk_selection_is_child_selected (ATK_SELECTION (selection_obj), i))
Packit Service fb6fa5
      {
Packit Service fb6fa5
        g_print ("%d child selected\n", i);
Packit Service fb6fa5
      }
Packit Service fb6fa5
      else
Packit Service fb6fa5
      {
Packit Service fb6fa5
        g_print ("%d child not selected\n", i);
Packit Service fb6fa5
      }
Packit Service fb6fa5
    } 
Packit Service fb6fa5
  } 
Packit Service fb6fa5
  /*
Packit Service fb6fa5
   * Should not be able to select all items on a menu bar
Packit Service fb6fa5
   */
Packit Service fb6fa5
  atk_selection_select_all_selection (ATK_SELECTION (selection_obj));
Packit Service fb6fa5
  i = atk_selection_get_selection_count (ATK_SELECTION (selection_obj));
Packit Service fb6fa5
  if ( i != 0)
Packit Service fb6fa5
  {
Packit Service fb6fa5
    g_print ("Unexpected selection count: %d, expected 0\n", i);
Packit Service fb6fa5
    return;
Packit Service fb6fa5
  }
Packit Service fb6fa5
  /*
Packit Service fb6fa5
   * There should not be any items selected
Packit Service fb6fa5
   */
Packit Service fb6fa5
  selected = atk_selection_ref_selection (ATK_SELECTION (selection_obj), 0);
Packit Service fb6fa5
  if ( selected != NULL)
Packit Service fb6fa5
  {
Packit Service fb6fa5
    g_print ("Unexpected selection: %d, expected 0\n", i);
Packit Service fb6fa5
  }
Packit Service fb6fa5
  atk_selection_add_selection (ATK_SELECTION (selection_obj), 1);
Packit Service fb6fa5
  g_timeout_add (2000, _finish_selection, selection_obj);
Packit Service fb6fa5
  g_print ("*** End _do_selection ***\n");
Packit Service fb6fa5
} 
Packit Service fb6fa5
Packit Service fb6fa5
static gint _finish_selection (gpointer data)
Packit Service fb6fa5
{
Packit Service fb6fa5
  AtkObject *obj = ATK_OBJECT (data);
Packit Service fb6fa5
  AtkObject *selected;
Packit Service fb6fa5
  gint      i;
Packit Service fb6fa5
  gboolean is_selected;
Packit Service fb6fa5
Packit Service fb6fa5
  g_print ("*** Start Finish selection ***\n");
Packit Service fb6fa5
Packit Service fb6fa5
  /*
Packit Service fb6fa5
   * If being run for for menus, at this point menu item foo should be 
Packit Service fb6fa5
   * selected which means that its submenu should be visible.
Packit Service fb6fa5
   */
Packit Service fb6fa5
  i = atk_selection_get_selection_count (ATK_SELECTION (obj));
Packit Service fb6fa5
  if (i != 1)
Packit Service fb6fa5
  {
Packit Service fb6fa5
    g_print ("Unexpected selection count: %d, expected 1\n", i);
Packit Service fb6fa5
    return FALSE;
Packit Service fb6fa5
  }
Packit Service fb6fa5
  selected = atk_selection_ref_selection (ATK_SELECTION (obj), 0);
Packit Service fb6fa5
  g_return_val_if_fail (selected != NULL, FALSE);
Packit Service fb6fa5
  g_print ("*** Selected Item ***\n");
Packit Service fb6fa5
  _print_type (selected);
Packit Service fb6fa5
  g_object_unref (selected);
Packit Service fb6fa5
  is_selected = atk_selection_is_child_selected (ATK_SELECTION (obj), 1);
Packit Service fb6fa5
  g_return_val_if_fail (is_selected, FALSE);
Packit Service fb6fa5
  is_selected = atk_selection_is_child_selected (ATK_SELECTION (obj), 0);
Packit Service fb6fa5
  g_return_val_if_fail (!is_selected, FALSE);
Packit Service fb6fa5
  selected = atk_selection_ref_selection (ATK_SELECTION (obj), 1);
Packit Service fb6fa5
  g_return_val_if_fail (selected == NULL, FALSE);
Packit Service fb6fa5
  atk_selection_remove_selection (ATK_SELECTION (obj), 0);
Packit Service fb6fa5
  i = atk_selection_get_selection_count (ATK_SELECTION (obj));
Packit Service fb6fa5
  g_return_val_if_fail (i == 0, FALSE);
Packit Service fb6fa5
  selected = atk_selection_ref_selection (ATK_SELECTION (obj), 0);
Packit Service fb6fa5
  g_return_val_if_fail (selected == NULL, FALSE);
Packit Service fb6fa5
  g_print ("*** End Finish selection ***\n");
Packit Service fb6fa5
  return FALSE;
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 (_do_selection);
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("testselection Module loaded\n");
Packit Service fb6fa5
Packit Service fb6fa5
  _create_event_watcher();
Packit Service fb6fa5
Packit Service fb6fa5
  return 0;
Packit Service fb6fa5
}