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

Packit Service fb6fa5
#include <string.h>
Packit Service fb6fa5
#include <gtk/gtk.h>
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 menu items
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * 1) When a menu item is clicked in testgtk, the action for the
Packit Service fb6fa5
 * item is performed.
Packit Service fb6fa5
 * 2) The name of the keybinding for the 'activate" action for a menu item
Packit Service fb6fa5
 * is output, if it exists.
Packit Service fb6fa5
 * 3) Execute the action for a menu item programatically
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
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_FRAME)
Packit Service fb6fa5
  /*
Packit Service fb6fa5
   * Find the specified menu item
Packit Service fb6fa5
   */
Packit Service fb6fa5
  {
Packit Service fb6fa5
    AtkRole valid_roles[NUM_VALID_ROLES];
Packit Service fb6fa5
    AtkObject *atk_menu_item;
Packit Service fb6fa5
    GtkWidget *widget;
Packit Service fb6fa5
Packit Service fb6fa5
    if (name == NULL)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      valid_roles[0] = ATK_ROLE_MENU_ITEM;
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
    atk_menu_item = 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_menu_item == 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
Packit Service fb6fa5
    g_assert (GTK_IS_ACCESSIBLE (atk_menu_item));
Packit Service fb6fa5
    widget = GTK_ACCESSIBLE (atk_menu_item)->widget;
Packit Service fb6fa5
    g_assert (GTK_IS_MENU_ITEM (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 menu 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_menu_item), 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
    const char *keybinding;
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
      g_print ("Name: %s\n", accessible_name);
Packit Service fb6fa5
    g_print ("Action: %s\n", atk_action_get_name (ATK_ACTION (obj), 0));
Packit Service fb6fa5
    keybinding = atk_action_get_keybinding (ATK_ACTION (obj), 0);
Packit Service fb6fa5
    if (keybinding)
Packit Service fb6fa5
      g_print ("KeyBinding: %s\n", keybinding);
Packit Service fb6fa5
    /*
Packit Service fb6fa5
     * Do the action associated with the menu item once, otherwise
Packit Service fb6fa5
     * we get into a loop
Packit Service fb6fa5
     */
Packit Service fb6fa5
    if (strcmp (name, accessible_name) == 0)
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
      if (g_getenv ("TEST_ACCESSIBLE_AUTO"))
Packit Service fb6fa5
        {
Packit Service fb6fa5
          g_idle_add (_do_menu_item_action, obj);
Packit Service fb6fa5
        }
Packit Service fb6fa5
    }
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
      g_print ("Name: %s\n", accessible_name);
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
  }
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
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("testmenuitem Module loaded\n");
Packit Service fb6fa5
Packit Service fb6fa5
  _create_event_watcher();
Packit Service fb6fa5
Packit Service fb6fa5
  return 0;
Packit Service fb6fa5
}