gtk/modules/other/gail/tests/testoptionmenu.c
Michael Natterer c5edf5e513 Makefile.am add GTK_DISABLE_DEPRECATED to CFLAGS.
2008-12-09  Michael Natterer  <mitch@imendio.com>

	* Makefile.am
	* tests/Makefile.am: add GTK_DISABLE_DEPRECATED to CFLAGS.

	* gail.c
	* gailclist.c
	* gailclistcell.c
	* gailcombo.c
	* gaillist.c
	* gailmenu.c
	* gailoptionmenu.c
	* gailpixmap.c
	* gailprogressbar.c
	* gailtoplevel.c
	* gailwidget.c
	* gailwindow.c
	* tests/ferret.c
	* tests/testcombo.c
	* tests/testlib.h

	* tests/testoptionmenu.c: #undef it where we need to access
	deprecated cruft.


svn path=/trunk/; revision=21859
2008-12-09 14:51:16 +00:00

158 lines
4.0 KiB
C

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