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

Packit Service fb6fa5
#undef GTK_DISABLE_DEPRECATED
Packit Service fb6fa5
Packit Service fb6fa5
#include <gtk/gtk.h>
Packit Service fb6fa5
Packit Service fb6fa5
#include "testlib.h"
Packit Service fb6fa5
Packit Service fb6fa5
/*
Packit Service fb6fa5
 * This module is used to test the accessible implementation for GtkOptionMenu
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * When the GtkOption menu in the FileSelectionDialog is tabbed to, the menu
Packit Service fb6fa5
 * is opened and the second item in the menu is selected which causes the 
Packit Service fb6fa5
 * menu to be closed and the item in the GtkOptionMenu to be updated.
Packit Service fb6fa5
 */
Packit Service fb6fa5
#define NUM_VALID_ROLES 1
Packit Service fb6fa5
Packit Service fb6fa5
static void _create_event_watcher (void);
Packit Service fb6fa5
static void _check_object (AtkObject *obj);
Packit Service fb6fa5
static gint _do_menu_item_action (gpointer data);
Packit Service fb6fa5
static gboolean doing_action = FALSE;
Packit Service fb6fa5
Packit Service fb6fa5
static void 
Packit Service fb6fa5
_check_object (AtkObject *obj)
Packit Service fb6fa5
{
Packit Service fb6fa5
  AtkRole role;
Packit Service fb6fa5
  static const char *name = NULL;
Packit Service fb6fa5
  static gboolean first_time = TRUE;
Packit Service fb6fa5
Packit Service fb6fa5
  role = atk_object_get_role (obj);
Packit Service fb6fa5
  if (role == ATK_ROLE_PUSH_BUTTON)
Packit Service fb6fa5
  /*
Packit Service fb6fa5
   * Find the specified optionmenu item
Packit Service fb6fa5
   */
Packit Service fb6fa5
    {
Packit Service fb6fa5
      AtkRole valid_roles[NUM_VALID_ROLES];
Packit Service fb6fa5
      AtkObject *atk_option_menu;
Packit Service fb6fa5
      GtkWidget *widget;
Packit Service fb6fa5
Packit Service fb6fa5
      if (name == NULL)
Packit Service fb6fa5
      {
Packit Service fb6fa5
        name = g_getenv ("TEST_ACCESSIBLE_NAME");
Packit Service fb6fa5
        if (name == NULL)
Packit Service fb6fa5
          name = "foo";
Packit Service fb6fa5
      }
Packit Service fb6fa5
      valid_roles[0] = ATK_ROLE_PUSH_BUTTON;
Packit Service fb6fa5
      atk_option_menu = find_object_by_accessible_name_and_role (obj, name,
Packit Service fb6fa5
                               valid_roles, NUM_VALID_ROLES);
Packit Service fb6fa5
Packit Service fb6fa5
      if (atk_option_menu == NULL)
Packit Service fb6fa5
        {
Packit Service fb6fa5
          g_print ("Object not found for %s\n", name);
Packit Service fb6fa5
          return;
Packit Service fb6fa5
        }
Packit Service fb6fa5
      else
Packit Service fb6fa5
        {
Packit Service fb6fa5
          g_print ("Object found for %s\n", name);
Packit Service fb6fa5
        }
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
      g_assert (GTK_IS_ACCESSIBLE (atk_option_menu));
Packit Service fb6fa5
      widget = GTK_ACCESSIBLE (atk_option_menu)->widget;
Packit Service fb6fa5
      g_assert (GTK_IS_OPTION_MENU (widget));
Packit Service fb6fa5
Packit Service fb6fa5
      if (first_time)
Packit Service fb6fa5
        first_time = FALSE;
Packit Service fb6fa5
      else
Packit Service fb6fa5
        return;
Packit Service fb6fa5
Packit Service fb6fa5
      /*
Packit Service fb6fa5
       * This action opens the GtkOptionMenu whose name is "foo" or whatever
Packit Service fb6fa5
       * was specified in the environment variable TEST_ACCESSIBLE_NAME
Packit Service fb6fa5
       */
Packit Service fb6fa5
      atk_action_do_action (ATK_ACTION (atk_option_menu), 0);
Packit Service fb6fa5
    }
Packit Service fb6fa5
  else if ((role == ATK_ROLE_MENU_ITEM) ||
Packit Service fb6fa5
           (role == ATK_ROLE_CHECK_MENU_ITEM) ||
Packit Service fb6fa5
           (role == ATK_ROLE_RADIO_MENU_ITEM) ||
Packit Service fb6fa5
           (role == ATK_ROLE_TEAR_OFF_MENU_ITEM))
Packit Service fb6fa5
    {
Packit Service fb6fa5
      AtkObject *parent, *child;
Packit Service fb6fa5
      AtkRole parent_role;
Packit Service fb6fa5
Packit Service fb6fa5
      /*
Packit Service fb6fa5
       * If we receive focus while waiting for the menu to be closed
Packit Service fb6fa5
       * we return immediately
Packit Service fb6fa5
       */
Packit Service fb6fa5
      if (doing_action)
Packit Service fb6fa5
        return;
Packit Service fb6fa5
Packit Service fb6fa5
      parent = atk_object_get_parent (obj);
Packit Service fb6fa5
      parent_role = atk_object_get_role (parent);
Packit Service fb6fa5
      g_assert (parent_role == ATK_ROLE_MENU);
Packit Service fb6fa5
    
Packit Service fb6fa5
      child = atk_object_ref_accessible_child (parent, 1);
Packit Service fb6fa5
      doing_action = TRUE;
Packit Service fb6fa5
      g_timeout_add (5000, _do_menu_item_action, child);
Packit Service fb6fa5
    }
Packit Service fb6fa5
  else
Packit Service fb6fa5
    {
Packit Service fb6fa5
      const char *accessible_name;
Packit Service fb6fa5
Packit Service fb6fa5
      accessible_name = atk_object_get_name (obj);
Packit Service fb6fa5
      if (accessible_name)
Packit Service fb6fa5
        {
Packit Service fb6fa5
          g_print ("Name: %s\n", accessible_name);
Packit Service fb6fa5
        } 
Packit Service fb6fa5
      else if (GTK_IS_ACCESSIBLE (obj))
Packit Service fb6fa5
        {
Packit Service fb6fa5
          GtkWidget *widget = GTK_ACCESSIBLE (obj)->widget;
Packit Service fb6fa5
          g_print ("Type: %s\n", g_type_name (G_OBJECT_TYPE (widget)));
Packit Service fb6fa5
        } 
Packit Service fb6fa5
      if (role == ATK_ROLE_TABLE)
Packit Service fb6fa5
        {
Packit Service fb6fa5
          gint n_cols, i;
Packit Service fb6fa5
Packit Service fb6fa5
          n_cols = atk_table_get_n_columns (ATK_TABLE (obj));
Packit Service fb6fa5
          g_print ("Number of Columns: %d\n", n_cols);
Packit Service fb6fa5
Packit Service fb6fa5
          for (i  = 0; i < n_cols; i++)
Packit Service fb6fa5
            {
Packit Service fb6fa5
              AtkObject *header;
Packit Service fb6fa5
Packit Service fb6fa5
              header = atk_table_get_column_header (ATK_TABLE (obj), i);
Packit Service fb6fa5
              g_print ("header: %s %s\n", 
Packit Service fb6fa5
                           g_type_name (G_OBJECT_TYPE (header)),
Packit Service fb6fa5
                           atk_object_get_name (header));
Packit Service fb6fa5
            }
Packit Service fb6fa5
        }
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static gint _do_menu_item_action (gpointer data)
Packit Service fb6fa5
{
Packit Service fb6fa5
  AtkObject *obj = ATK_OBJECT (data);
Packit Service fb6fa5
Packit Service fb6fa5
  atk_action_do_action (ATK_ACTION (obj), 0);
Packit Service fb6fa5
  doing_action = FALSE;
Packit Service fb6fa5
Packit Service fb6fa5
  g_object_unref (obj);
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_object);
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("testoptionmenu Module loaded\n");
Packit Service fb6fa5
Packit Service fb6fa5
  _create_event_watcher();
Packit Service fb6fa5
Packit Service fb6fa5
  return 0;
Packit Service fb6fa5
}