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

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 buttons
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * 1) It verifies that ATK_STATE_ARMED is set when a button is pressed
Packit Service fb6fa5
 * To check this click on the button whose name is specified in the
Packit Service fb6fa5
 * environment variable TEST_ACCESSIBLE_NAME or "button box" if the
Packit Service fb6fa5
 * environment variable is not set.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * 2) If the environment variable TEST_ACCESSIBLE_AUTO is set the program
Packit Service fb6fa5
 * will execute the action defined for a GailButton once.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * 3) Change an inconsistent toggle button to be consistent and vice versa.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Note that currently this code needs to be changed manually to test
Packit Service fb6fa5
 * different actions.
Packit Service fb6fa5
 */
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 void button_pressed_handler (GtkButton *button);
Packit Service fb6fa5
static void _print_states (AtkObject *obj);
Packit Service fb6fa5
static void _print_button_image_info(AtkObject *obj);
Packit Service fb6fa5
static gint _do_button_action (gpointer data);
Packit Service fb6fa5
static gint _toggle_inconsistent (gpointer data);
Packit Service fb6fa5
static gint _finish_button_action (gpointer data);
Packit Service fb6fa5
Packit Service fb6fa5
#define NUM_VALID_ROLES 4
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 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 button in the window
Packit Service fb6fa5
   */
Packit Service fb6fa5
  {
Packit Service fb6fa5
    AtkRole valid_roles[NUM_VALID_ROLES];
Packit Service fb6fa5
    const char *name;
Packit Service fb6fa5
    AtkObject *atk_button;
Packit Service fb6fa5
    GtkWidget *widget;
Packit Service fb6fa5
Packit Service fb6fa5
    valid_roles[0] = ATK_ROLE_PUSH_BUTTON;
Packit Service fb6fa5
    valid_roles[1] = ATK_ROLE_TOGGLE_BUTTON;
Packit Service fb6fa5
    valid_roles[2] = ATK_ROLE_CHECK_BOX;
Packit Service fb6fa5
    valid_roles[3] = ATK_ROLE_RADIO_BUTTON;
Packit Service fb6fa5
Packit Service fb6fa5
    name = g_getenv ("TEST_ACCESSIBLE_NAME");
Packit Service fb6fa5
    if (name == NULL)
Packit Service fb6fa5
      name = "button box";
Packit Service fb6fa5
    atk_button = 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_button == 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
    g_assert (GTK_IS_ACCESSIBLE (atk_button));
Packit Service fb6fa5
    widget = GTK_ACCESSIBLE (atk_button)->widget;
Packit Service fb6fa5
    g_assert (GTK_IS_BUTTON (widget));
Packit Service fb6fa5
    g_signal_connect (GTK_OBJECT (widget),
Packit Service fb6fa5
                      "pressed",
Packit Service fb6fa5
                      G_CALLBACK (button_pressed_handler),
Packit Service fb6fa5
                      NULL);
Packit Service fb6fa5
    if (GTK_IS_TOGGLE_BUTTON (widget))
Packit Service fb6fa5
    {
Packit Service fb6fa5
      _toggle_inconsistent (GTK_TOGGLE_BUTTON (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
    if (g_getenv ("TEST_ACCESSIBLE_AUTO"))
Packit Service fb6fa5
      {
Packit Service fb6fa5
        g_idle_add (_do_button_action, atk_button);
Packit Service fb6fa5
      }
Packit Service fb6fa5
  }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static gint _toggle_inconsistent (gpointer data)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkToggleButton *toggle_button = GTK_TOGGLE_BUTTON (data);
Packit Service fb6fa5
Packit Service fb6fa5
  if (gtk_toggle_button_get_inconsistent (toggle_button))
Packit Service fb6fa5
  {
Packit Service fb6fa5
    gtk_toggle_button_set_inconsistent (toggle_button, FALSE);
Packit Service fb6fa5
  }
Packit Service fb6fa5
  else
Packit Service fb6fa5
  {
Packit Service fb6fa5
    gtk_toggle_button_set_inconsistent (toggle_button, TRUE);
Packit Service fb6fa5
  }
Packit Service fb6fa5
  return FALSE;
Packit Service fb6fa5
} 
Packit Service fb6fa5
Packit Service fb6fa5
static gint _do_button_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), 2);
Packit Service fb6fa5
Packit Service fb6fa5
  g_timeout_add (5000, _finish_button_action, obj);
Packit Service fb6fa5
  return FALSE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static gint _finish_button_action (gpointer data)
Packit Service fb6fa5
{
Packit Service fb6fa5
#if 0
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
#endif
Packit Service fb6fa5
Packit Service fb6fa5
  return FALSE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
button_pressed_handler (GtkButton *button)
Packit Service fb6fa5
{
Packit Service fb6fa5
  AtkObject *obj;
Packit Service fb6fa5
Packit Service fb6fa5
  obj = gtk_widget_get_accessible (GTK_WIDGET (button));
Packit Service fb6fa5
  _print_states (obj);
Packit Service fb6fa5
  _print_button_image_info (obj);
Packit Service fb6fa5
Packit Service fb6fa5
  if (GTK_IS_TOGGLE_BUTTON (button))
Packit Service fb6fa5
    {
Packit Service fb6fa5
      g_idle_add (_toggle_inconsistent, GTK_TOGGLE_BUTTON (button));
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void 
Packit Service fb6fa5
_print_states (AtkObject *obj)
Packit Service fb6fa5
{
Packit Service fb6fa5
  AtkStateSet *state_set;
Packit Service fb6fa5
  gint i;
Packit Service fb6fa5
Packit Service fb6fa5
  state_set = atk_object_ref_state_set (obj);
Packit Service fb6fa5
Packit Service fb6fa5
  g_print ("*** Start states ***\n");
Packit Service fb6fa5
  for (i = 0; i < 64; i++)
Packit Service fb6fa5
  {
Packit Service fb6fa5
     AtkStateType one_state;
Packit Service fb6fa5
     const gchar *name;
Packit Service fb6fa5
Packit Service fb6fa5
     if (atk_state_set_contains_state (state_set, i))
Packit Service fb6fa5
     {
Packit Service fb6fa5
       one_state = i;
Packit Service fb6fa5
Packit Service fb6fa5
       name = atk_state_type_get_name (one_state);
Packit Service fb6fa5
Packit Service fb6fa5
       if (name)
Packit Service fb6fa5
         g_print("%s\n", name);
Packit Service fb6fa5
     }
Packit Service fb6fa5
  }
Packit Service fb6fa5
  g_object_unref (state_set);
Packit Service fb6fa5
  g_print ("*** End states ***\n");
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void 
Packit Service fb6fa5
_print_button_image_info(AtkObject *obj) {
Packit Service fb6fa5
Packit Service fb6fa5
  gint height, width;
Packit Service fb6fa5
  const gchar *desc;
Packit Service fb6fa5
Packit Service fb6fa5
  height = width = 0;
Packit Service fb6fa5
Packit Service fb6fa5
  if(!ATK_IS_IMAGE(obj)) 
Packit Service fb6fa5
	return;
Packit Service fb6fa5
Packit Service fb6fa5
  g_print("*** Start Button Image Info ***\n");
Packit Service fb6fa5
  desc = atk_image_get_image_description(ATK_IMAGE(obj));
Packit Service fb6fa5
  g_print ("atk_image_get_image_desc returns : %s\n", desc ? desc : "<NULL>");
Packit Service fb6fa5
  atk_image_get_image_size(ATK_IMAGE(obj), &height ,&width);
Packit Service fb6fa5
  g_print("atk_image_get_image_size returns: height %d width %d\n",height,width);
Packit Service fb6fa5
  if(atk_image_set_image_description(ATK_IMAGE(obj), "New image Description")){
Packit Service fb6fa5
	desc = atk_image_get_image_description(ATK_IMAGE(obj));
Packit Service fb6fa5
	g_print ("atk_image_get_image_desc now returns : %s\n",desc ?desc:"<NULL>");
Packit Service fb6fa5
  }
Packit Service fb6fa5
  g_print("*** End Button Image Info ***\n");
Packit Service fb6fa5
Packit Service fb6fa5
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("testbutton Module loaded\n");
Packit Service fb6fa5
Packit Service fb6fa5
  _create_event_watcher();
Packit Service fb6fa5
Packit Service fb6fa5
  return 0;
Packit Service fb6fa5
}