|
Packit |
98cdb6 |
#include <string.h>
|
|
Packit |
98cdb6 |
#include <gtk/gtk.h>
|
|
Packit |
98cdb6 |
#include "testlib.h"
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
/*
|
|
Packit |
98cdb6 |
* This module is used to test the accessible implementation for menu items
|
|
Packit |
98cdb6 |
*
|
|
Packit |
98cdb6 |
* 1) When a menu item is clicked in testgtk, the action for the
|
|
Packit |
98cdb6 |
* item is performed.
|
|
Packit |
98cdb6 |
* 2) The name of the keybinding for the 'activate" action for a menu item
|
|
Packit |
98cdb6 |
* is output, if it exists.
|
|
Packit |
98cdb6 |
* 3) Execute the action for a menu item programatically
|
|
Packit |
98cdb6 |
*/
|
|
Packit |
98cdb6 |
#define NUM_VALID_ROLES 1
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void _create_event_watcher (void);
|
|
Packit |
98cdb6 |
static void _check_object (AtkObject *obj);
|
|
Packit |
98cdb6 |
static gint _do_menu_item_action (gpointer data);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
_check_object (AtkObject *obj)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
AtkRole role;
|
|
Packit |
98cdb6 |
static const char *name = NULL;
|
|
Packit |
98cdb6 |
static gboolean first_time = TRUE;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
role = atk_object_get_role (obj);
|
|
Packit |
98cdb6 |
if (role == ATK_ROLE_FRAME)
|
|
Packit |
98cdb6 |
/*
|
|
Packit |
98cdb6 |
* Find the specified menu item
|
|
Packit |
98cdb6 |
*/
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
AtkRole valid_roles[NUM_VALID_ROLES];
|
|
Packit |
98cdb6 |
AtkObject *atk_menu_item;
|
|
Packit |
98cdb6 |
GtkWidget *widget;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
if (name == NULL)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
valid_roles[0] = ATK_ROLE_MENU_ITEM;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
name = g_getenv ("TEST_ACCESSIBLE_NAME");
|
|
Packit |
98cdb6 |
if (name == NULL)
|
|
Packit |
98cdb6 |
name = "foo";
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
atk_menu_item = find_object_by_accessible_name_and_role (obj, name,
|
|
Packit |
98cdb6 |
valid_roles, NUM_VALID_ROLES);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
if (atk_menu_item == NULL)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
g_print ("Object not found for %s\n", name);
|
|
Packit |
98cdb6 |
return;
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
g_assert (GTK_IS_ACCESSIBLE (atk_menu_item));
|
|
Packit |
98cdb6 |
widget = GTK_ACCESSIBLE (atk_menu_item)->widget;
|
|
Packit |
98cdb6 |
g_assert (GTK_IS_MENU_ITEM (widget));
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
if (first_time)
|
|
Packit |
98cdb6 |
first_time = FALSE;
|
|
Packit |
98cdb6 |
else
|
|
Packit |
98cdb6 |
return;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
/*
|
|
Packit |
98cdb6 |
* This action opens the menu whose name is "foo" or whatever
|
|
Packit |
98cdb6 |
* was specified in the environment variable TEST_ACCESSIBLE_NAME
|
|
Packit |
98cdb6 |
*/
|
|
Packit |
98cdb6 |
atk_action_do_action (ATK_ACTION (atk_menu_item), 0);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
else if ((role == ATK_ROLE_MENU_ITEM) ||
|
|
Packit |
98cdb6 |
(role == ATK_ROLE_CHECK_MENU_ITEM) ||
|
|
Packit |
98cdb6 |
(role == ATK_ROLE_RADIO_MENU_ITEM) ||
|
|
Packit |
98cdb6 |
(role == ATK_ROLE_TEAR_OFF_MENU_ITEM))
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
const char *keybinding;
|
|
Packit |
98cdb6 |
const char *accessible_name;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
accessible_name = atk_object_get_name (obj);
|
|
Packit |
98cdb6 |
if (accessible_name)
|
|
Packit |
98cdb6 |
g_print ("Name: %s\n", accessible_name);
|
|
Packit |
98cdb6 |
g_print ("Action: %s\n", atk_action_get_name (ATK_ACTION (obj), 0));
|
|
Packit |
98cdb6 |
keybinding = atk_action_get_keybinding (ATK_ACTION (obj), 0);
|
|
Packit |
98cdb6 |
if (keybinding)
|
|
Packit |
98cdb6 |
g_print ("KeyBinding: %s\n", keybinding);
|
|
Packit |
98cdb6 |
/*
|
|
Packit |
98cdb6 |
* Do the action associated with the menu item once, otherwise
|
|
Packit |
98cdb6 |
* we get into a loop
|
|
Packit |
98cdb6 |
*/
|
|
Packit |
98cdb6 |
if (strcmp (name, accessible_name) == 0)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
if (first_time)
|
|
Packit |
98cdb6 |
first_time = FALSE;
|
|
Packit |
98cdb6 |
else
|
|
Packit |
98cdb6 |
return;
|
|
Packit |
98cdb6 |
if (g_getenv ("TEST_ACCESSIBLE_AUTO"))
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
g_idle_add (_do_menu_item_action, obj);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
else
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
const char *accessible_name;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
accessible_name = atk_object_get_name (obj);
|
|
Packit |
98cdb6 |
if (accessible_name)
|
|
Packit |
98cdb6 |
g_print ("Name: %s\n", accessible_name);
|
|
Packit |
98cdb6 |
else if (GTK_IS_ACCESSIBLE (obj))
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GtkWidget *widget = GTK_ACCESSIBLE (obj)->widget;
|
|
Packit |
98cdb6 |
g_print ("Type: %s\n", g_type_name (G_OBJECT_TYPE (widget)));
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static gint _do_menu_item_action (gpointer data)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
AtkObject *obj = ATK_OBJECT (data);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
atk_action_do_action (ATK_ACTION (obj), 0);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
return FALSE;
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
_create_event_watcher (void)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
atk_add_focus_tracker (_check_object);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
int
|
|
Packit |
98cdb6 |
gtk_module_init(gint argc, char* argv[])
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
g_print("testmenuitem Module loaded\n");
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
_create_event_watcher();
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
return 0;
|
|
Packit |
98cdb6 |
}
|