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

Packit Service fb6fa5
#undef GTK_DISABLE_DEPRECATED
Packit Service fb6fa5
Packit Service fb6fa5
#include <gtk/gtk.h>
Packit Service fb6fa5
#include "testlib.h"
Packit Service fb6fa5
Packit Service fb6fa5
static void _test_selection (AtkObject *obj);
Packit Service fb6fa5
static void _check_combo_box (AtkObject *obj);
Packit Service fb6fa5
static void _check_children (AtkObject *obj);
Packit Service fb6fa5
static gint _open_combo_list (gpointer data);
Packit Service fb6fa5
static gint _close_combo_list (gpointer data);
Packit Service fb6fa5
Packit Service fb6fa5
#define NUM_VALID_ROLES 1
Packit Service fb6fa5
Packit Service fb6fa5
static void _check_children (AtkObject *obj)
Packit Service fb6fa5
{
Packit Service fb6fa5
  gint n_children, i, j;
Packit Service fb6fa5
  AtkObject *child;
Packit Service fb6fa5
  AtkObject *grand_child;
Packit Service fb6fa5
  AtkObject *parent;
Packit Service fb6fa5
Packit Service fb6fa5
  n_children = atk_object_get_n_accessible_children (obj);
Packit Service fb6fa5
Packit Service fb6fa5
  if (n_children > 1)
Packit Service fb6fa5
  {
Packit Service fb6fa5
    g_print ("*** Unexpected number of children for combo box: %d\n", 
Packit Service fb6fa5
             n_children);
Packit Service fb6fa5
    return;
Packit Service fb6fa5
  }
Packit Service fb6fa5
  if (n_children == 2)
Packit Service fb6fa5
  {
Packit Service fb6fa5
    child = atk_object_ref_accessible_child (obj, 1);
Packit Service fb6fa5
    g_return_if_fail (atk_object_get_role (child) == ATK_ROLE_TEXT);
Packit Service fb6fa5
    parent = atk_object_get_parent (child);
Packit Service fb6fa5
    j = atk_object_get_index_in_parent (child);
Packit Service fb6fa5
    if (j != 1)
Packit Service fb6fa5
     g_print ("*** inconsistency between parent and children %d %d ***\n",
Packit Service fb6fa5
              1, j);       
Packit Service fb6fa5
    g_object_unref (G_OBJECT (child));
Packit Service fb6fa5
  }
Packit Service fb6fa5
Packit Service fb6fa5
  child = atk_object_ref_accessible_child (obj, 0);
Packit Service fb6fa5
  g_return_if_fail (atk_object_get_role (child) == ATK_ROLE_LIST);
Packit Service fb6fa5
  parent = atk_object_get_parent (child);
Packit Service fb6fa5
  j = atk_object_get_index_in_parent (child);
Packit Service fb6fa5
  if (j != 0)
Packit Service fb6fa5
     g_print ("*** inconsistency between parent and children %d %d ***\n",
Packit Service fb6fa5
              0, j);       
Packit Service fb6fa5
Packit Service fb6fa5
  n_children = atk_object_get_n_accessible_children (child);
Packit Service fb6fa5
  for (i = 0; i < n_children; i++)
Packit Service fb6fa5
  {
Packit Service fb6fa5
    const gchar *name;
Packit Service fb6fa5
Packit Service fb6fa5
    grand_child = atk_object_ref_accessible_child (child, i);
Packit Service fb6fa5
    name = atk_object_get_name (grand_child);
Packit Service fb6fa5
    g_print ("Index: %d Name: %s\n", i, name ? name : "<NULL>");
Packit Service fb6fa5
    g_object_unref (G_OBJECT (grand_child));
Packit Service fb6fa5
  }
Packit Service fb6fa5
  g_object_unref (G_OBJECT (child));
Packit Service fb6fa5
}
Packit Service fb6fa5
  
Packit Service fb6fa5
static void _test_selection (AtkObject *obj)
Packit Service fb6fa5
{
Packit Service fb6fa5
  gint count;
Packit Service fb6fa5
  gint n_children;
Packit Service fb6fa5
  AtkObject *list;
Packit Service fb6fa5
Packit Service fb6fa5
  count = atk_selection_get_selection_count (ATK_SELECTION (obj));
Packit Service fb6fa5
  g_return_if_fail (count == 0);
Packit Service fb6fa5
Packit Service fb6fa5
  list = atk_object_ref_accessible_child (obj, 0);
Packit Service fb6fa5
  n_children = atk_object_get_n_accessible_children (list); 
Packit Service fb6fa5
  g_object_unref (G_OBJECT (list));
Packit Service fb6fa5
Packit Service fb6fa5
  atk_selection_add_selection (ATK_SELECTION (obj), n_children - 1);
Packit Service fb6fa5
  count = atk_selection_get_selection_count (ATK_SELECTION (obj));
Packit Service fb6fa5
  g_return_if_fail (count == 1);
Packit Service fb6fa5
  g_return_if_fail (atk_selection_is_child_selected (ATK_SELECTION (obj),
Packit Service fb6fa5
                     n_children - 1));	
Packit Service fb6fa5
  atk_selection_add_selection (ATK_SELECTION (obj), 0);
Packit Service fb6fa5
  count = atk_selection_get_selection_count (ATK_SELECTION (obj));
Packit Service fb6fa5
  g_return_if_fail (count == 1);
Packit Service fb6fa5
  g_return_if_fail (atk_selection_is_child_selected (ATK_SELECTION (obj), 0));
Packit Service fb6fa5
  atk_selection_clear_selection (ATK_SELECTION (obj));
Packit Service fb6fa5
  count = atk_selection_get_selection_count (ATK_SELECTION (obj));
Packit Service fb6fa5
  g_return_if_fail (count == 0);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void _check_combo_box (AtkObject *obj)
Packit Service fb6fa5
{
Packit Service fb6fa5
  static gboolean done = FALSE;
Packit Service fb6fa5
  static gboolean done_selection = FALSE;
Packit Service fb6fa5
  AtkRole role;
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
  {
Packit Service fb6fa5
    AtkRole roles[NUM_VALID_ROLES];
Packit Service fb6fa5
    AtkObject *combo_obj;
Packit Service fb6fa5
Packit Service fb6fa5
    if (done_selection)
Packit Service fb6fa5
      return;
Packit Service fb6fa5
Packit Service fb6fa5
    roles[0] = ATK_ROLE_COMBO_BOX;
Packit Service fb6fa5
Packit Service fb6fa5
    combo_obj = find_object_by_role (obj, roles, NUM_VALID_ROLES);
Packit Service fb6fa5
Packit Service fb6fa5
    if (combo_obj)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      if (!done_selection)
Packit Service fb6fa5
      {
Packit Service fb6fa5
        done_selection = TRUE;
Packit Service fb6fa5
      }
Packit Service fb6fa5
      if (g_getenv ("TEST_ACCESSIBLE_COMBO_NOEDIT") != NULL)
Packit Service fb6fa5
      {
Packit Service fb6fa5
        GtkEntry *entry;
Packit Service fb6fa5
Packit Service fb6fa5
        entry = GTK_ENTRY (GTK_COMBO (GTK_ACCESSIBLE (combo_obj)->widget)->entry);
Packit Service fb6fa5
        gtk_entry_set_editable (entry, FALSE);
Packit Service fb6fa5
      }
Packit Service fb6fa5
      _check_children (combo_obj);
Packit Service fb6fa5
      _test_selection (combo_obj);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
    return;
Packit Service fb6fa5
  }
Packit Service fb6fa5
  if (role != ATK_ROLE_COMBO_BOX)
Packit Service fb6fa5
    return;
Packit Service fb6fa5
Packit Service fb6fa5
  g_print ("*** Start ComboBox ***\n");
Packit Service fb6fa5
  _check_children (obj);
Packit Service fb6fa5
 
Packit Service fb6fa5
  if (!done)
Packit Service fb6fa5
  {
Packit Service fb6fa5
    gtk_idle_add (_open_combo_list, obj);
Packit Service fb6fa5
    done = TRUE;
Packit Service fb6fa5
  }
Packit Service fb6fa5
  else
Packit Service fb6fa5
      return;
Packit Service fb6fa5
  g_print ("*** End ComboBox ***\n");
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static gint _open_combo_list (gpointer data)
Packit Service fb6fa5
{
Packit Service fb6fa5
  AtkObject *obj = ATK_OBJECT (data);
Packit Service fb6fa5
Packit Service fb6fa5
  g_print ("_open_combo_list\n");
Packit Service fb6fa5
  atk_action_do_action (ATK_ACTION (obj), 0);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_timeout_add (5000, _close_combo_list, obj);
Packit Service fb6fa5
  return FALSE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static gint _close_combo_list (gpointer data)
Packit Service fb6fa5
{
Packit Service fb6fa5
  AtkObject *obj = ATK_OBJECT (data);
Packit Service fb6fa5
Packit Service fb6fa5
  gint count;
Packit Service fb6fa5
  gint n_children;
Packit Service fb6fa5
  AtkObject *list;
Packit Service fb6fa5
Packit Service fb6fa5
  count = atk_selection_get_selection_count (ATK_SELECTION (obj));
Packit Service fb6fa5
  g_return_val_if_fail (count == 0, FALSE);
Packit Service fb6fa5
Packit Service fb6fa5
  list = atk_object_ref_accessible_child (obj, 0);
Packit Service fb6fa5
  n_children = atk_object_get_n_accessible_children (list); 
Packit Service fb6fa5
  g_object_unref (G_OBJECT (list));
Packit Service fb6fa5
Packit Service fb6fa5
  atk_selection_add_selection (ATK_SELECTION (obj), n_children - 1);
Packit Service fb6fa5
Packit Service fb6fa5
  atk_action_do_action (ATK_ACTION (obj), 0);
Packit Service fb6fa5
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 (_check_combo_box);
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("testcombo Module loaded\n");
Packit Service fb6fa5
Packit Service fb6fa5
  _create_event_watcher();
Packit Service fb6fa5
Packit Service fb6fa5
  return 0;
Packit Service fb6fa5
}