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

Packit 98cdb6
#include <string.h>
Packit 98cdb6
#include <atk/atk.h>
Packit 98cdb6
#include <gtk/gtk.h>
Packit 98cdb6
Packit 98cdb6
static void _traverse_children (AtkObject *obj);
Packit 98cdb6
static void _add_handler (AtkObject *obj);
Packit 98cdb6
static void _check_values (AtkObject *obj);
Packit 98cdb6
static void _value_change_handler (AtkObject   *obj,
Packit 98cdb6
                                      AtkPropertyValues *values);
Packit 98cdb6
Packit 98cdb6
static guint id;
Packit 98cdb6
Packit 98cdb6
static void _value_change_handler (AtkObject   *obj,
Packit 98cdb6
                                   AtkPropertyValues   *values)
Packit 98cdb6
{
Packit 98cdb6
  const gchar *type_name = g_type_name (G_TYPE_FROM_INSTANCE (obj));
Packit 98cdb6
   GValue *value_back, val;
Packit 98cdb6
Packit 98cdb6
  value_back = &val;
Packit 98cdb6
    
Packit 98cdb6
  if (!ATK_IS_VALUE (obj)) { 
Packit 98cdb6
   	return;
Packit 98cdb6
  }
Packit 98cdb6
Packit 98cdb6
  if (strcmp (values->property_name, "accessible-value") == 0) {
Packit 98cdb6
	g_print ("_value_change_handler: Accessible Type: %s\n",
Packit 98cdb6
           type_name ? type_name : "NULL");
Packit 98cdb6
	if(G_VALUE_HOLDS_DOUBLE (&values->new_value))
Packit 98cdb6
    {
Packit 98cdb6
		g_print( "adjustment value changed : new value: %f\n", 
Packit 98cdb6
		g_value_get_double (&values->new_value));
Packit 98cdb6
 	}
Packit 98cdb6
Packit 98cdb6
	g_print("Now calling the AtkValue interface functions\n");
Packit 98cdb6
Packit 98cdb6
  	atk_value_get_current_value (ATK_VALUE(obj), value_back);
Packit 98cdb6
  	g_return_if_fail (G_VALUE_HOLDS_DOUBLE (value_back));
Packit 98cdb6
  	g_print ("atk_value_get_current_value returns %f\n",
Packit 98cdb6
			g_value_get_double (value_back)	);
Packit 98cdb6
Packit 98cdb6
  	atk_value_get_maximum_value (ATK_VALUE (obj), value_back);
Packit 98cdb6
  	g_return_if_fail (G_VALUE_HOLDS_DOUBLE (value_back));
Packit 98cdb6
  	g_print ("atk_value_get_maximum returns %f\n",
Packit 98cdb6
			g_value_get_double (value_back));
Packit 98cdb6
Packit 98cdb6
  	atk_value_get_minimum_value (ATK_VALUE (obj), value_back);
Packit 98cdb6
  	g_return_if_fail (G_VALUE_HOLDS_DOUBLE (value_back));
Packit 98cdb6
  	g_print ("atk_value_get_minimum returns %f\n", 
Packit 98cdb6
			g_value_get_double (value_back));
Packit 98cdb6
	
Packit 98cdb6
 
Packit 98cdb6
    }
Packit 98cdb6
  
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void _traverse_children (AtkObject *obj)
Packit 98cdb6
{
Packit 98cdb6
  gint n_children, i;
Packit 98cdb6
Packit 98cdb6
  n_children = atk_object_get_n_accessible_children (obj);
Packit 98cdb6
  for (i = 0; i < n_children; i++)
Packit 98cdb6
  {
Packit 98cdb6
    AtkObject *child;
Packit 98cdb6
Packit 98cdb6
    child = atk_object_ref_accessible_child (obj, i);
Packit 98cdb6
    _add_handler (child);
Packit 98cdb6
    _traverse_children (child);
Packit 98cdb6
    g_object_unref (G_OBJECT (child));
Packit 98cdb6
  }
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void _add_handler (AtkObject *obj)
Packit 98cdb6
{
Packit 98cdb6
  static GPtrArray *obj_array = NULL;
Packit 98cdb6
  gboolean found = FALSE;
Packit 98cdb6
  gint i;
Packit 98cdb6
Packit 98cdb6
  /*
Packit 98cdb6
   * We create a property handler for each object if one was not associated 
Packit 98cdb6
   * with it already.
Packit 98cdb6
   *
Packit 98cdb6
   * We add it to our array of objects which have property handlers; if an
Packit 98cdb6
   * object is destroyed it remains in the array.
Packit 98cdb6
   */
Packit 98cdb6
  if (obj_array == NULL)
Packit 98cdb6
    obj_array = g_ptr_array_new ();
Packit 98cdb6
 
Packit 98cdb6
  for (i = 0; i < obj_array->len; i++)
Packit 98cdb6
  {
Packit 98cdb6
    if (obj == g_ptr_array_index (obj_array, i))
Packit 98cdb6
    {
Packit 98cdb6
      found = TRUE;
Packit 98cdb6
      break;
Packit 98cdb6
    }
Packit 98cdb6
  }
Packit 98cdb6
  if (!found)
Packit 98cdb6
  {
Packit 98cdb6
    atk_object_connect_property_change_handler (obj,
Packit 98cdb6
                   (AtkPropertyChangeHandler*) _value_change_handler);
Packit 98cdb6
    g_ptr_array_add (obj_array, obj);
Packit 98cdb6
  }
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void _set_values (AtkObject *obj) {
Packit 98cdb6
Packit 98cdb6
  GValue *value_back, val;
Packit 98cdb6
  static gint count = 0;
Packit 98cdb6
  gdouble double_value;
Packit 98cdb6
Packit 98cdb6
  value_back = &val;
Packit 98cdb6
Packit 98cdb6
  if(ATK_IS_VALUE(obj)) {
Packit 98cdb6
	/* Spin button also inherits the text interfaces from GailEntry. 
Packit 98cdb6
	 * Check when spin button recieves focus.
Packit 98cdb6
     */
Packit 98cdb6
Packit 98cdb6
	if(ATK_IS_TEXT(obj) && ATK_IS_EDITABLE_TEXT(obj)) {
Packit 98cdb6
		if(count == 0) {	
Packit 98cdb6
			gint x;
Packit 98cdb6
			gchar* text;
Packit 98cdb6
			count++;
Packit 98cdb6
			x = atk_text_get_character_count (ATK_TEXT (obj));
Packit 98cdb6
  			text = atk_text_get_text (ATK_TEXT (obj), 0, x);
Packit 98cdb6
			g_print("Text : %s\n", text);
Packit 98cdb6
			text = "5.7";
Packit 98cdb6
			atk_editable_text_set_text_contents(ATK_EDITABLE_TEXT(obj),text);
Packit 98cdb6
			g_print("Set text to %s\n",text);
Packit 98cdb6
			atk_value_get_current_value(ATK_VALUE(obj), value_back);
Packit 98cdb6
			g_return_if_fail (G_VALUE_HOLDS_DOUBLE (value_back));
Packit 98cdb6
			g_print("atk_value_get_current_value returns %f\n", 
Packit 98cdb6
				g_value_get_double( value_back));
Packit 98cdb6
			} 
Packit 98cdb6
	} else {
Packit 98cdb6
		memset (value_back, 0, sizeof (GValue));
Packit 98cdb6
		g_value_init (value_back, G_TYPE_DOUBLE);
Packit 98cdb6
		g_value_set_double (value_back, 10.0);	
Packit 98cdb6
		if (atk_value_set_current_value (ATK_VALUE (obj), value_back))
Packit 98cdb6
		{
Packit 98cdb6
 			double_value = g_value_get_double (value_back);
Packit 98cdb6
  			g_print("atk_value_set_current_value returns %f\n", 
Packit 98cdb6
			double_value);
Packit 98cdb6
		}
Packit 98cdb6
	}
Packit 98cdb6
  }
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void _check_values (AtkObject *obj)
Packit 98cdb6
{
Packit 98cdb6
  static gint calls = 0;
Packit 98cdb6
  AtkRole role;
Packit 98cdb6
Packit 98cdb6
  g_print ("Start of _check_values\n");
Packit 98cdb6
Packit 98cdb6
  _set_values(obj);
Packit 98cdb6
Packit 98cdb6
  _add_handler (obj);
Packit 98cdb6
Packit 98cdb6
  if (++calls < 2)
Packit 98cdb6
  { 
Packit 98cdb6
    /*
Packit 98cdb6
     * Just do this on this on the first 2 objects visited
Packit 98cdb6
     */
Packit 98cdb6
    atk_object_set_name (obj, "test123");
Packit 98cdb6
    atk_object_set_description (obj, "test123");
Packit 98cdb6
  }
Packit 98cdb6
Packit 98cdb6
  role = atk_object_get_role (obj);
Packit 98cdb6
Packit 98cdb6
  if (role == ATK_ROLE_FRAME || role == ATK_ROLE_DIALOG)
Packit 98cdb6
  {
Packit 98cdb6
    /*
Packit 98cdb6
     * Add handlers to all children.
Packit 98cdb6
     */
Packit 98cdb6
    _traverse_children (obj);
Packit 98cdb6
  }
Packit 98cdb6
  g_print ("End of _check_values\n");
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
_create_event_watcher (void)
Packit 98cdb6
{
Packit 98cdb6
  id = atk_add_focus_tracker (_check_values);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
int
Packit 98cdb6
gtk_module_init(gint argc, char* argv[])
Packit 98cdb6
{
Packit 98cdb6
  g_print("testvalues Module loaded\n");
Packit 98cdb6
Packit 98cdb6
  _create_event_watcher();
Packit 98cdb6
Packit 98cdb6
  return 0;
Packit 98cdb6
}