|
Packit Service |
fb6fa5 |
#include <string.h>
|
|
Packit Service |
fb6fa5 |
#include <atk/atk.h>
|
|
Packit Service |
fb6fa5 |
#include <gtk/gtk.h>
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
/*
|
|
Packit Service |
fb6fa5 |
* This module tests the selection interface on menu items.
|
|
Packit Service |
fb6fa5 |
* To use this module run the test program testgtk and use the menus
|
|
Packit Service |
fb6fa5 |
* option.
|
|
Packit Service |
fb6fa5 |
*/
|
|
Packit Service |
fb6fa5 |
static void _do_selection (AtkObject *obj);
|
|
Packit Service |
fb6fa5 |
static gint _finish_selection (gpointer data);
|
|
Packit Service |
fb6fa5 |
static AtkObject* _find_object (AtkObject* obj, AtkRole role);
|
|
Packit Service |
fb6fa5 |
static void _print_type (AtkObject *obj);
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
static AtkObject*
|
|
Packit Service |
fb6fa5 |
_find_object (AtkObject *obj,
|
|
Packit Service |
fb6fa5 |
AtkRole role)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
/*
|
|
Packit Service |
fb6fa5 |
* Find the first object which is a descendant of the specified object
|
|
Packit Service |
fb6fa5 |
* which matches the specified role.
|
|
Packit Service |
fb6fa5 |
*
|
|
Packit Service |
fb6fa5 |
* This function returns a reference to the AtkObject which should be
|
|
Packit Service |
fb6fa5 |
* removed when finished with the object.
|
|
Packit Service |
fb6fa5 |
*/
|
|
Packit Service |
fb6fa5 |
gint i;
|
|
Packit Service |
fb6fa5 |
gint n_children;
|
|
Packit Service |
fb6fa5 |
AtkObject *child;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
n_children = atk_object_get_n_accessible_children (obj);
|
|
Packit Service |
fb6fa5 |
for (i = 0; i < n_children; i++)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
AtkObject* found_obj;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
child = atk_object_ref_accessible_child (obj, i);
|
|
Packit Service |
fb6fa5 |
if (atk_object_get_role (child) == role)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
return child;
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
found_obj = _find_object (child, role);
|
|
Packit Service |
fb6fa5 |
g_object_unref (child);
|
|
Packit Service |
fb6fa5 |
if (found_obj)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
return found_obj;
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
return NULL;
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
static void _print_type (AtkObject *obj)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
const gchar * typename = NULL;
|
|
Packit Service |
fb6fa5 |
const gchar * name = NULL;
|
|
Packit Service |
fb6fa5 |
AtkRole role;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
if (GTK_IS_ACCESSIBLE (obj))
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
GtkWidget* widget = NULL;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
widget = GTK_ACCESSIBLE (obj)->widget;
|
|
Packit Service |
fb6fa5 |
typename = g_type_name (G_OBJECT_TYPE (widget));
|
|
Packit Service |
fb6fa5 |
g_print ("Widget type name: %s\n", typename ? typename : "NULL");
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
typename = g_type_name (G_OBJECT_TYPE (obj));
|
|
Packit Service |
fb6fa5 |
g_print ("Accessible type name: %s\n", typename ? typename : "NULL");
|
|
Packit Service |
fb6fa5 |
name = atk_object_get_name (obj);
|
|
Packit Service |
fb6fa5 |
g_print("Accessible Name: %s\n", (name) ? name : "NULL");
|
|
Packit Service |
fb6fa5 |
role = atk_object_get_role(obj);
|
|
Packit Service |
fb6fa5 |
g_print ("Accessible Role: %d\n", role);
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
static void
|
|
Packit Service |
fb6fa5 |
_do_selection (AtkObject *obj)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
gint i;
|
|
Packit Service |
fb6fa5 |
AtkObject *selected;
|
|
Packit Service |
fb6fa5 |
AtkRole role;
|
|
Packit Service |
fb6fa5 |
AtkObject *selection_obj;
|
|
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 |
(strcmp (atk_object_get_name (obj), "menus") == 0))
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
selection_obj = _find_object (obj, ATK_ROLE_MENU_BAR);
|
|
Packit Service |
fb6fa5 |
if (selection_obj)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
g_object_unref (selection_obj);
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
else if (role == ATK_ROLE_COMBO_BOX)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
selection_obj = obj;
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
else
|
|
Packit Service |
fb6fa5 |
return;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
g_print ("*** Start do_selection ***\n");
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
if (!selection_obj)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
g_print ("no selection_obj\n");
|
|
Packit Service |
fb6fa5 |
return;
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
i = atk_selection_get_selection_count (ATK_SELECTION (selection_obj));
|
|
Packit Service |
fb6fa5 |
if (i != 0)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
for (i = 0; i < atk_object_get_n_accessible_children (selection_obj); i++)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
if (atk_selection_is_child_selected (ATK_SELECTION (selection_obj), i))
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
g_print ("%d child selected\n", i);
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
else
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
g_print ("%d child not selected\n", i);
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
/*
|
|
Packit Service |
fb6fa5 |
* Should not be able to select all items on a menu bar
|
|
Packit Service |
fb6fa5 |
*/
|
|
Packit Service |
fb6fa5 |
atk_selection_select_all_selection (ATK_SELECTION (selection_obj));
|
|
Packit Service |
fb6fa5 |
i = atk_selection_get_selection_count (ATK_SELECTION (selection_obj));
|
|
Packit Service |
fb6fa5 |
if ( i != 0)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
g_print ("Unexpected selection count: %d, expected 0\n", i);
|
|
Packit Service |
fb6fa5 |
return;
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
/*
|
|
Packit Service |
fb6fa5 |
* There should not be any items selected
|
|
Packit Service |
fb6fa5 |
*/
|
|
Packit Service |
fb6fa5 |
selected = atk_selection_ref_selection (ATK_SELECTION (selection_obj), 0);
|
|
Packit Service |
fb6fa5 |
if ( selected != NULL)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
g_print ("Unexpected selection: %d, expected 0\n", i);
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
atk_selection_add_selection (ATK_SELECTION (selection_obj), 1);
|
|
Packit Service |
fb6fa5 |
g_timeout_add (2000, _finish_selection, selection_obj);
|
|
Packit Service |
fb6fa5 |
g_print ("*** End _do_selection ***\n");
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
static gint _finish_selection (gpointer data)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
AtkObject *obj = ATK_OBJECT (data);
|
|
Packit Service |
fb6fa5 |
AtkObject *selected;
|
|
Packit Service |
fb6fa5 |
gint i;
|
|
Packit Service |
fb6fa5 |
gboolean is_selected;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
g_print ("*** Start Finish selection ***\n");
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
/*
|
|
Packit Service |
fb6fa5 |
* If being run for for menus, at this point menu item foo should be
|
|
Packit Service |
fb6fa5 |
* selected which means that its submenu should be visible.
|
|
Packit Service |
fb6fa5 |
*/
|
|
Packit Service |
fb6fa5 |
i = atk_selection_get_selection_count (ATK_SELECTION (obj));
|
|
Packit Service |
fb6fa5 |
if (i != 1)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
g_print ("Unexpected selection count: %d, expected 1\n", i);
|
|
Packit Service |
fb6fa5 |
return FALSE;
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
selected = atk_selection_ref_selection (ATK_SELECTION (obj), 0);
|
|
Packit Service |
fb6fa5 |
g_return_val_if_fail (selected != NULL, FALSE);
|
|
Packit Service |
fb6fa5 |
g_print ("*** Selected Item ***\n");
|
|
Packit Service |
fb6fa5 |
_print_type (selected);
|
|
Packit Service |
fb6fa5 |
g_object_unref (selected);
|
|
Packit Service |
fb6fa5 |
is_selected = atk_selection_is_child_selected (ATK_SELECTION (obj), 1);
|
|
Packit Service |
fb6fa5 |
g_return_val_if_fail (is_selected, FALSE);
|
|
Packit Service |
fb6fa5 |
is_selected = atk_selection_is_child_selected (ATK_SELECTION (obj), 0);
|
|
Packit Service |
fb6fa5 |
g_return_val_if_fail (!is_selected, FALSE);
|
|
Packit Service |
fb6fa5 |
selected = atk_selection_ref_selection (ATK_SELECTION (obj), 1);
|
|
Packit Service |
fb6fa5 |
g_return_val_if_fail (selected == NULL, FALSE);
|
|
Packit Service |
fb6fa5 |
atk_selection_remove_selection (ATK_SELECTION (obj), 0);
|
|
Packit Service |
fb6fa5 |
i = atk_selection_get_selection_count (ATK_SELECTION (obj));
|
|
Packit Service |
fb6fa5 |
g_return_val_if_fail (i == 0, FALSE);
|
|
Packit Service |
fb6fa5 |
selected = atk_selection_ref_selection (ATK_SELECTION (obj), 0);
|
|
Packit Service |
fb6fa5 |
g_return_val_if_fail (selected == NULL, FALSE);
|
|
Packit Service |
fb6fa5 |
g_print ("*** End Finish selection ***\n");
|
|
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 (_do_selection);
|
|
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("testselection Module loaded\n");
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
_create_event_watcher();
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
return 0;
|
|
Packit Service |
fb6fa5 |
}
|