|
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 |
}
|