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

Packit 98cdb6
#include <string.h>
Packit 98cdb6
#include <stdio.h>
Packit 98cdb6
#include <stdlib.h>
Packit 98cdb6
#include "testlib.h" 
Packit 98cdb6
Packit 98cdb6
static gint	_get_position_in_array		(gint		window,
Packit 98cdb6
						gchar		*the_test_name);
Packit 98cdb6
static gint	_get_position_in_parameters	(gint		window,
Packit 98cdb6
						gchar		*label,
Packit 98cdb6
						gint		position);
Packit 98cdb6
static void	_create_output_window		(OutputWindow	**outwin);
Packit 98cdb6
static gboolean	_create_select_tests_window	(AtkObject	*obj,
Packit 98cdb6
                                                TLruntest	runtest,
Packit 98cdb6
                                                OutputWindow	**outwin);
Packit 98cdb6
static void	_toggle_selectedcb		(GtkWidget	*widget,
Packit 98cdb6
						gpointer	test);
Packit 98cdb6
static void	_testselectioncb		(GtkWidget	*widget,
Packit 98cdb6
						gpointer	data);
Packit 98cdb6
static void	_destroy			(GtkWidget	*widget,
Packit 98cdb6
						gpointer	data);
Packit 98cdb6
Packit 98cdb6
/* General functions */
Packit 98cdb6
Packit 98cdb6
/**
Packit 98cdb6
 * find_object_by_role:
Packit 98cdb6
 * @obj: An #AtkObject
Packit 98cdb6
 * @roles: An array of roles to search for
Packit 98cdb6
 * @num_roles: The number of entries in @roles
Packit 98cdb6
 *
Packit 98cdb6
 * Find the #AtkObject which is a decendant of the specified @obj
Packit 98cdb6
 * which is of an #AtkRole type specified in the @roles array.
Packit 98cdb6
 *
Packit 98cdb6
 * Returns: the #AtkObject that meets the specified criteria or NULL
Packit 98cdb6
 * if no object is found. 
Packit 98cdb6
 **/
Packit 98cdb6
AtkObject*
Packit 98cdb6
find_object_by_role (AtkObject *obj,
Packit 98cdb6
                     AtkRole   *roles,
Packit 98cdb6
                     gint      num_roles)
Packit 98cdb6
{
Packit 98cdb6
  /*
Packit 98cdb6
   * Find the first object which is a descendant of the specified object
Packit 98cdb6
   * which matches the specified role.
Packit 98cdb6
   *
Packit 98cdb6
   * This function returns a reference to the AtkObject which should be
Packit 98cdb6
   * removed when finished with the object.
Packit 98cdb6
   */
Packit 98cdb6
  gint i, j;
Packit 98cdb6
  gint n_children;
Packit 98cdb6
  AtkObject *child;
Packit 98cdb6
Packit 98cdb6
  if (obj == NULL)
Packit 98cdb6
    return NULL;
Packit 98cdb6
Packit 98cdb6
  for (j=0; j < num_roles; j++)
Packit 98cdb6
    {
Packit 98cdb6
      if (atk_object_get_role (obj) == roles[j])
Packit 98cdb6
        return obj;
Packit 98cdb6
    }
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* found_obj;
Packit 98cdb6
Packit 98cdb6
      child = atk_object_ref_accessible_child (obj, i);
Packit 98cdb6
Packit 98cdb6
      if (child == NULL)
Packit 98cdb6
        continue;
Packit 98cdb6
Packit 98cdb6
      for (j=0; j < num_roles; j++)
Packit 98cdb6
        {
Packit 98cdb6
          if (atk_object_get_role (child) == roles[j])
Packit 98cdb6
            return child;
Packit 98cdb6
        }
Packit 98cdb6
Packit 98cdb6
      found_obj = find_object_by_role (child, roles, num_roles);
Packit 98cdb6
      g_object_unref (child);
Packit 98cdb6
      if (found_obj)
Packit 98cdb6
        return found_obj;
Packit 98cdb6
    }
Packit 98cdb6
  return NULL;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
/**
Packit 98cdb6
 * find_object_by_name_and_role:
Packit 98cdb6
 * @obj: An #AtkObject
Packit 98cdb6
 * @name: The GTK widget name
Packit 98cdb6
 * @roles: An array of roles to search for
Packit 98cdb6
 * @num_roles: The number of entries in @roles
Packit 98cdb6
 *
Packit 98cdb6
 * Find the #AtkObject which is a decendant of the specified @obj
Packit 98cdb6
 * which is of an #AtkRole type specified in the @roles array which
Packit 98cdb6
 * also has the GTK widget name specified in @name.
Packit 98cdb6
 *
Packit 98cdb6
 * Returns: the #AtkObject that meets the specified criteria or NULL
Packit 98cdb6
 * if no object is found. 
Packit 98cdb6
 **/
Packit 98cdb6
AtkObject*
Packit 98cdb6
find_object_by_name_and_role(AtkObject   *obj,
Packit 98cdb6
                             const gchar *name,
Packit 98cdb6
                             AtkRole	 *roles,
Packit 98cdb6
                             gint        num_roles)
Packit 98cdb6
{
Packit 98cdb6
  AtkObject *child;
Packit 98cdb6
  GtkWidget* widget;
Packit 98cdb6
  gint i, j;
Packit 98cdb6
  gint n_children;
Packit 98cdb6
Packit 98cdb6
  if (obj == NULL)
Packit 98cdb6
    return NULL;
Packit 98cdb6
Packit 98cdb6
  widget = GTK_ACCESSIBLE (obj)->widget;
Packit 98cdb6
  if (GTK_IS_WIDGET (widget))
Packit 98cdb6
    {
Packit 98cdb6
      if (strcmp (name, gtk_widget_get_name(GTK_WIDGET (widget))) == 0)
Packit 98cdb6
        {
Packit 98cdb6
          for (j=0; j < num_roles; j++)
Packit 98cdb6
            {
Packit 98cdb6
              if (atk_object_get_role (obj) == roles[j])
Packit 98cdb6
                return obj;
Packit 98cdb6
            }
Packit 98cdb6
        }
Packit 98cdb6
    }
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* found_obj;
Packit 98cdb6
 
Packit 98cdb6
      child = atk_object_ref_accessible_child (obj, i);
Packit 98cdb6
Packit 98cdb6
      if (child == NULL)
Packit 98cdb6
        continue;
Packit 98cdb6
Packit 98cdb6
      widget = GTK_ACCESSIBLE (child)->widget;
Packit 98cdb6
      if (GTK_IS_WIDGET (widget))
Packit 98cdb6
        {
Packit 98cdb6
          if (strcmp(name, gtk_widget_get_name(GTK_WIDGET (widget))) == 0)
Packit 98cdb6
            {
Packit 98cdb6
              for (j=0; j < num_roles; j++)
Packit 98cdb6
                {
Packit 98cdb6
                  if (atk_object_get_role (child) == roles[j])
Packit 98cdb6
                    return child;
Packit 98cdb6
                }
Packit 98cdb6
            }
Packit 98cdb6
        }
Packit 98cdb6
      found_obj = find_object_by_name_and_role (child, name, roles, num_roles);
Packit 98cdb6
      g_object_unref (child);
Packit 98cdb6
      if (found_obj)
Packit 98cdb6
        return found_obj;
Packit 98cdb6
    }
Packit 98cdb6
  return NULL;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
/**
Packit 98cdb6
 * find_object_by_accessible_name_and_role:
Packit 98cdb6
 * @obj: An #AtkObject
Packit 98cdb6
 * @name: The accessible name
Packit 98cdb6
 * @roles: An array of roles to search for
Packit 98cdb6
 * @num_roles: The number of entries in @roles
Packit 98cdb6
 *
Packit 98cdb6
 * Find the #AtkObject which is a decendant of the specified @obj
Packit 98cdb6
 * which has the specified @name and matches one of the 
Packit 98cdb6
 * specified @roles.
Packit 98cdb6
 * 
Packit 98cdb6
 * Returns: the #AtkObject that meets the specified criteria or NULL
Packit 98cdb6
 * if no object is found. 
Packit 98cdb6
 */
Packit 98cdb6
AtkObject*
Packit 98cdb6
find_object_by_accessible_name_and_role (AtkObject   *obj,
Packit 98cdb6
                                         const gchar *name,
Packit 98cdb6
                                         AtkRole     *roles,
Packit 98cdb6
	                                 gint        num_roles)
Packit 98cdb6
{
Packit 98cdb6
  AtkObject *child;
Packit 98cdb6
  gint i, j;
Packit 98cdb6
  gint n_children;
Packit 98cdb6
  const gchar *accessible_name;
Packit 98cdb6
Packit 98cdb6
  if (obj == NULL)
Packit 98cdb6
    return NULL;
Packit 98cdb6
Packit 98cdb6
  accessible_name = atk_object_get_name (obj);
Packit 98cdb6
  if (accessible_name && (strcmp(name, accessible_name) == 0))
Packit 98cdb6
    {
Packit 98cdb6
      for (j=0; j < num_roles; j++)
Packit 98cdb6
        {
Packit 98cdb6
          if (atk_object_get_role (obj) == roles[j])
Packit 98cdb6
            return obj;
Packit 98cdb6
        }
Packit 98cdb6
    }
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* found_obj;
Packit 98cdb6
Packit 98cdb6
      child = atk_object_ref_accessible_child (obj, i);
Packit 98cdb6
Packit 98cdb6
      if (child == NULL)
Packit 98cdb6
        continue;
Packit 98cdb6
Packit 98cdb6
      accessible_name = atk_object_get_name (child);
Packit 98cdb6
      if (accessible_name && (strcmp(name, accessible_name) == 0))
Packit 98cdb6
        {
Packit 98cdb6
          for (j=0; j < num_roles; j++)
Packit 98cdb6
            {
Packit 98cdb6
              if (atk_object_get_role (child) == roles[j])
Packit 98cdb6
                return child;
Packit 98cdb6
            }
Packit 98cdb6
        }
Packit 98cdb6
      found_obj = find_object_by_accessible_name_and_role (child, name, 
Packit 98cdb6
                                                           roles, num_roles);
Packit 98cdb6
      g_object_unref (child);
Packit 98cdb6
      if (found_obj)
Packit 98cdb6
        return found_obj;
Packit 98cdb6
    }
Packit 98cdb6
  return NULL;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
/**
Packit 98cdb6
 * find_object_by_name_and_role:
Packit 98cdb6
 * @obj: An #AtkObject
Packit 98cdb6
 * @type: The type 
Packit 98cdb6
 *
Packit 98cdb6
 * Find the #AtkObject which is a decendant of the specified @obj
Packit 98cdb6
 * which has the specified @type.
Packit 98cdb6
 * 
Packit 98cdb6
 * Returns: the #AtkObject that meets the specified criteria or NULL
Packit 98cdb6
 * if no object is found. 
Packit 98cdb6
 */
Packit 98cdb6
AtkObject*
Packit 98cdb6
find_object_by_type (AtkObject *obj, 
Packit 98cdb6
                     gchar     *type)
Packit 98cdb6
{
Packit 98cdb6
  /*
Packit 98cdb6
   * Find the first object which is a descendant of the specified object
Packit 98cdb6
   * which matches the specified type.
Packit 98cdb6
   *
Packit 98cdb6
   * This function returns a reference to the AtkObject which should be
Packit 98cdb6
   * removed when finished with the object.
Packit 98cdb6
   */
Packit 98cdb6
  gint i;
Packit 98cdb6
  gint n_children;
Packit 98cdb6
  AtkObject *child;
Packit 98cdb6
  const gchar * typename = NULL;
Packit 98cdb6
Packit 98cdb6
  if (obj == NULL)
Packit 98cdb6
    return NULL;
Packit 98cdb6
Packit 98cdb6
  typename = g_type_name (G_OBJECT_TYPE (obj));
Packit 98cdb6
  if (strcmp (typename, type) == 0)
Packit 98cdb6
     return obj;
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* found_obj;
Packit 98cdb6
Packit 98cdb6
      child = atk_object_ref_accessible_child (obj, i);
Packit 98cdb6
Packit 98cdb6
      if (child == NULL)
Packit 98cdb6
        continue;
Packit 98cdb6
Packit 98cdb6
      typename = g_type_name (G_OBJECT_TYPE (child));
Packit 98cdb6
Packit 98cdb6
      if (strcmp (typename, type) == 0)
Packit 98cdb6
        return child;
Packit 98cdb6
Packit 98cdb6
      found_obj = find_object_by_type (child, type);
Packit 98cdb6
      g_object_unref (child);
Packit 98cdb6
      if (found_obj)
Packit 98cdb6
        return found_obj;
Packit 98cdb6
    }
Packit 98cdb6
  return NULL;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
/**
Packit 98cdb6
 * already_accessed_atk_object
Packit 98cdb6
 * @obj: An #AtkObject
Packit 98cdb6
 *
Packit 98cdb6
 * Keeps a static GPtrArray of objects that have been passed into this
Packit 98cdb6
 * function. 
Packit 98cdb6
 *
Packit 98cdb6
 * Returns: TRUE if @obj has been passed into this function before
Packit 98cdb6
 * and FALSE otherwise.
Packit 98cdb6
 */
Packit 98cdb6
gboolean
Packit 98cdb6
already_accessed_atk_object (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
    g_ptr_array_add (obj_array, obj);
Packit 98cdb6
Packit 98cdb6
  return found;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
/**
Packit 98cdb6
 * display_children
Packit 98cdb6
 * @obj: An #AtkObject
Packit 98cdb6
 * @depth: Number of spaces to indent output.
Packit 98cdb6
 * @child_number: The child number of this object.
Packit 98cdb6
 *
Packit 98cdb6
 * Displays the hierarchy of widgets starting from @obj.
Packit 98cdb6
 **/
Packit 98cdb6
void
Packit 98cdb6
display_children (AtkObject *obj, 
Packit 98cdb6
                  gint      depth, 
Packit 98cdb6
                  gint      child_number)
Packit 98cdb6
{
Packit 98cdb6
  display_children_to_depth(obj, -1, depth, child_number);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
/**
Packit 98cdb6
 * display_children_to_depth
Packit 98cdb6
 * @obj: An #AtkObject
Packit 98cdb6
 * @to_depth: Display to this depth.
Packit 98cdb6
 * @depth: Number of spaces to indent output.
Packit 98cdb6
 * @child_number: The child number of this object.
Packit 98cdb6
 *
Packit 98cdb6
 * Displays the hierarchy of widgets starting from @obj only
Packit 98cdb6
 * to the specified depth.
Packit 98cdb6
 **/
Packit 98cdb6
void
Packit 98cdb6
display_children_to_depth (AtkObject *obj,
Packit 98cdb6
                           gint      to_depth,
Packit 98cdb6
                           gint      depth,
Packit 98cdb6
                           gint      child_number)
Packit 98cdb6
{
Packit 98cdb6
  AtkRole role;
Packit 98cdb6
  const gchar *rolename;
Packit 98cdb6
  const gchar *typename;
Packit 98cdb6
  gint n_children, parent_index, i;
Packit 98cdb6
Packit 98cdb6
  if (to_depth >= 0 && depth > to_depth)
Packit 98cdb6
     return;
Packit 98cdb6
Packit 98cdb6
  if (obj == NULL)
Packit 98cdb6
     return;
Packit 98cdb6
Packit 98cdb6
  for (i=0; i < depth; i++)
Packit 98cdb6
    g_print(" ");
Packit 98cdb6
Packit 98cdb6
  role = atk_object_get_role (obj);
Packit 98cdb6
  rolename = atk_role_get_name (role);
Packit 98cdb6
Packit 98cdb6
 /*
Packit 98cdb6
  * Note that child_number and parent_index should be the same
Packit 98cdb6
  * unless there is an error.
Packit 98cdb6
  */
Packit 98cdb6
  parent_index = atk_object_get_index_in_parent(obj);
Packit 98cdb6
  g_print("child <%d == %d> ", child_number, parent_index);
Packit 98cdb6
Packit 98cdb6
  n_children = atk_object_get_n_accessible_children (obj);
Packit 98cdb6
  g_print ("children <%d> ", n_children);
Packit 98cdb6
Packit 98cdb6
  if (rolename)
Packit 98cdb6
    g_print("role <%s>, ", rolename);
Packit 98cdb6
  else
Packit 98cdb6
    g_print("role <error>");
Packit 98cdb6
Packit 98cdb6
  if (GTK_IS_ACCESSIBLE(obj))
Packit 98cdb6
    {
Packit 98cdb6
      GtkWidget *widget;
Packit 98cdb6
Packit 98cdb6
      widget = GTK_ACCESSIBLE (obj)->widget;
Packit 98cdb6
      g_print("name <%s>, ", gtk_widget_get_name(GTK_WIDGET (widget)));
Packit 98cdb6
    }
Packit 98cdb6
  else
Packit 98cdb6
    g_print("name <NULL>, ");
Packit 98cdb6
Packit 98cdb6
  typename = g_type_name (G_OBJECT_TYPE (obj));
Packit 98cdb6
  g_print ("typename <%s>\n", typename);
Packit 98cdb6
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
      if (child != NULL)
Packit 98cdb6
        {
Packit 98cdb6
          display_children_to_depth (child, to_depth, depth + 1, i);
Packit 98cdb6
          g_object_unref (G_OBJECT (child));
Packit 98cdb6
        }
Packit 98cdb6
    }
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
/* Test GUI logic */
Packit 98cdb6
Packit 98cdb6
/* GUI Information for the Select Tests Window */
Packit 98cdb6
typedef struct
Packit 98cdb6
{
Packit 98cdb6
  GtkWidget     *selecttestsWindow;
Packit 98cdb6
  GtkWidget     *hbox;
Packit 98cdb6
  GtkWidget     *vbox;
Packit 98cdb6
  GtkWidget     *label;
Packit 98cdb6
  GtkWidget     *textInsert;
Packit 98cdb6
  GtkWidget     *button;
Packit 98cdb6
  gchar         *selecttestsTitle;
Packit 98cdb6
}MainDialog;
Packit 98cdb6
Packit 98cdb6
/* Functionality information about each added test */
Packit 98cdb6
typedef struct
Packit 98cdb6
{
Packit 98cdb6
  GtkWidget     *toggleButton;
Packit 98cdb6
  GtkWidget     *hbox;
Packit 98cdb6
  GtkWidget     *parameterLabel[MAX_PARAMS];
Packit 98cdb6
  GtkWidget     *parameterInput[MAX_PARAMS];
Packit 98cdb6
  gchar         *testName;
Packit 98cdb6
  gint          numParameters;
Packit 98cdb6
}TestList;
Packit 98cdb6
Packit 98cdb6
typedef struct
Packit 98cdb6
{
Packit 98cdb6
   TLruntest   runtest;
Packit 98cdb6
   AtkObject*  obj;
Packit 98cdb6
   gint	       win_num;
Packit 98cdb6
}TestCB;
Packit 98cdb6
Packit 98cdb6
static MainDialog      *md[MAX_WINDOWS];
Packit 98cdb6
static OutputWindow    *ow;
Packit 98cdb6
Packit 98cdb6
/* An array containing function information on all of the tests */
Packit 98cdb6
static TestList        listoftests[MAX_WINDOWS][MAX_TESTS];
Packit 98cdb6
Packit 98cdb6
/* A counter for the actual number of added tests */
Packit 98cdb6
gint                   counter;
Packit 98cdb6
Packit 98cdb6
/* A global for keeping track of the window numbers */
Packit 98cdb6
static gint 	       window_no = 0;
Packit 98cdb6
/* An array containing the names of the tests that are "on" */
Packit 98cdb6
static gchar           *onTests[MAX_WINDOWS][MAX_TESTS]; 
Packit 98cdb6
static gint            g_visibleDialog = 0;
Packit 98cdb6
static gint	       testcount[MAX_WINDOWS];
Packit 98cdb6
static TestCB          testcb[MAX_WINDOWS];
Packit 98cdb6
Packit 98cdb6
/**
Packit 98cdb6
 * create_windows:
Packit 98cdb6
 * @obj: An #AtkObject
Packit 98cdb6
 * @runtest: The callback function to run when the "Run Tests" button
Packit 98cdb6
 *   is clicked.
Packit 98cdb6
 * @outwin: The output window to use.  If NULL is passed in, then 
Packit 98cdb6
 *   create a new one.
Packit 98cdb6
 *
Packit 98cdb6
 * Creates the test window and the output window (if @outwin is NULL)
Packit 98cdb6
 * Runs _create_output_window() and _create_select_tests_window() 
Packit 98cdb6
 * and sets g_visibleDialog to 1
Packit 98cdb6
 *
Packit 98cdb6
 * Returns: The window number of the created window if successful, -1 otherwise.
Packit 98cdb6
 **/
Packit 98cdb6
gint
Packit 98cdb6
create_windows (AtkObject    *obj,
Packit 98cdb6
                TLruntest    runtest,
Packit 98cdb6
                OutputWindow **outwin)
Packit 98cdb6
{
Packit 98cdb6
  gboolean valid;  
Packit 98cdb6
  gint tmp;
Packit 98cdb6
Packit 98cdb6
  g_visibleDialog = 1;
Packit 98cdb6
  _create_output_window(outwin); 
Packit 98cdb6
  valid = _create_select_tests_window(obj, runtest, outwin);
Packit 98cdb6
  if (valid)
Packit 98cdb6
    {
Packit 98cdb6
      tmp = window_no;
Packit 98cdb6
      window_no++;
Packit 98cdb6
      return tmp;
Packit 98cdb6
    }
Packit 98cdb6
  else
Packit 98cdb6
    return -1;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
/** 
Packit 98cdb6
 * _create_output_window
Packit 98cdb6
 * @outwin: If outwin is passed in as NULL, a new output window is created
Packit 98cdb6
 *   otherwise, the outwin passed in is shared.
Packit 98cdb6
 *
Packit 98cdb6
 * Creates the Test Result Output Window .
Packit 98cdb6
 **/
Packit 98cdb6
static void
Packit 98cdb6
_create_output_window (OutputWindow **outwin)
Packit 98cdb6
{
Packit 98cdb6
  GtkWidget *view;
Packit 98cdb6
  GtkWidget *scrolled_window;
Packit 98cdb6
  OutputWindow *localow;
Packit 98cdb6
Packit 98cdb6
  if (*outwin == NULL)
Packit 98cdb6
    {
Packit 98cdb6
      localow = (OutputWindow *) malloc (sizeof(OutputWindow));
Packit 98cdb6
   
Packit 98cdb6
      localow->outputBuffer = gtk_text_buffer_new(NULL);
Packit 98cdb6
      view = gtk_text_view_new_with_buffer(GTK_TEXT_BUFFER(localow->outputBuffer));
Packit 98cdb6
      gtk_widget_set_size_request (view, 700, 500);
Packit 98cdb6
      gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(view), GTK_WRAP_WORD);
Packit 98cdb6
      gtk_text_view_set_editable(GTK_TEXT_VIEW(view), FALSE);	
Packit 98cdb6
Packit 98cdb6
      localow->outputWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
Packit 98cdb6
      gtk_window_set_title(GTK_WINDOW(localow->outputWindow), "Test Output");
Packit 98cdb6
      scrolled_window = gtk_scrolled_window_new(NULL, NULL);
Packit 98cdb6
Packit 98cdb6
      gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window),
Packit 98cdb6
                                     GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
Packit 98cdb6
      gtk_container_add(GTK_CONTAINER(localow->outputWindow), scrolled_window);
Packit 98cdb6
      gtk_container_add(GTK_CONTAINER(scrolled_window), view);
Packit 98cdb6
      gtk_text_buffer_get_iter_at_offset(localow->outputBuffer, &localow->outputIter, 0);
Packit 98cdb6
      gtk_widget_show(view);
Packit 98cdb6
      gtk_widget_show(scrolled_window);
Packit 98cdb6
      gtk_widget_show(localow->outputWindow);
Packit 98cdb6
Packit 98cdb6
      gtk_text_buffer_set_text(GTK_TEXT_BUFFER(localow->outputBuffer),
Packit 98cdb6
        "\n\nWelcome to the test GUI:\nTest results are printed here\n\n", 58);
Packit 98cdb6
      gtk_text_buffer_get_iter_at_offset(GTK_TEXT_BUFFER(localow->outputBuffer),
Packit 98cdb6
                                          &localow->outputIter, 0);
Packit 98cdb6
      *outwin = localow;
Packit 98cdb6
      ow = *outwin;
Packit 98cdb6
    }
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
/** 
Packit 98cdb6
 * _create_select_tests_window:
Packit 98cdb6
 * @obj: An #AtkObject
Packit 98cdb6
 * @runtest: The callback function that is run when the "Run Tests"
Packit 98cdb6
 *   button is clicked.
Packit 98cdb6
 * @outwin: The output window to use.
Packit 98cdb6
 *
Packit 98cdb6
 * Creates the Test Select Window 
Packit 98cdb6
 *
Packit 98cdb6
 * Returns: TRUE if successful, FALSE otherwise
Packit 98cdb6
 **/
Packit 98cdb6
static gboolean
Packit 98cdb6
_create_select_tests_window (AtkObject    *obj,
Packit 98cdb6
                             TLruntest    runtest,
Packit 98cdb6
                             OutputWindow **outwin)
Packit 98cdb6
{
Packit 98cdb6
  AtkText   *textwidget;
Packit 98cdb6
  GtkWidget *hbuttonbox;
Packit 98cdb6
  GtkWidget *scrolledWindow;
Packit 98cdb6
Packit 98cdb6
  if (window_no >= 0 && window_no < MAX_WINDOWS)
Packit 98cdb6
    {
Packit 98cdb6
      md[window_no] = (MainDialog *) malloc (sizeof(MainDialog));
Packit 98cdb6
     
Packit 98cdb6
      textwidget = ATK_TEXT (obj);
Packit 98cdb6
     
Packit 98cdb6
      /* Setup Window */
Packit 98cdb6
      md[window_no]->selecttestsTitle = "Test Setting";
Packit 98cdb6
      md[window_no]->selecttestsWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
Packit 98cdb6
      gtk_window_set_title (GTK_WINDOW( ow->outputWindow),
Packit 98cdb6
                            md[window_no]->selecttestsTitle);
Packit 98cdb6
      gtk_window_set_resizable (GTK_WINDOW(md[window_no]->selecttestsWindow),
Packit 98cdb6
                                FALSE);
Packit 98cdb6
      gtk_window_set_position (GTK_WINDOW(md[window_no]->selecttestsWindow),
Packit 98cdb6
                               GTK_WIN_POS_CENTER); 
Packit 98cdb6
      g_signal_connect (GTK_OBJECT(md[window_no]->selecttestsWindow), 
Packit 98cdb6
                        "destroy",
Packit 98cdb6
                        G_CALLBACK (_destroy),
Packit 98cdb6
                        &md[window_no]->selecttestsWindow);
Packit 98cdb6
     
Packit 98cdb6
      /* Setup Scrolling */
Packit 98cdb6
      scrolledWindow = gtk_scrolled_window_new(NULL, NULL);
Packit 98cdb6
      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow),
Packit 98cdb6
                                      GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); 
Packit 98cdb6
      gtk_widget_set_size_request (scrolledWindow, 500, 600);
Packit 98cdb6
      gtk_container_add (GTK_CONTAINER (md[window_no]->selecttestsWindow), 
Packit 98cdb6
                         scrolledWindow);
Packit 98cdb6
      
Packit 98cdb6
      /* Setup Layout */
Packit 98cdb6
      md[window_no]->vbox = gtk_vbox_new (TRUE, 0);
Packit 98cdb6
      md[window_no]->button = gtk_button_new_with_mnemonic ("_Run Tests");
Packit 98cdb6
      hbuttonbox = gtk_hbutton_box_new ();
Packit 98cdb6
      gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox),
Packit 98cdb6
                                 GTK_BUTTONBOX_SPREAD);
Packit 98cdb6
      gtk_box_pack_end (GTK_BOX (hbuttonbox),
Packit 98cdb6
                        GTK_WIDGET (md[window_no]->button), TRUE, TRUE, 0);
Packit 98cdb6
      gtk_box_pack_end (GTK_BOX (md[window_no]->vbox), hbuttonbox,
Packit 98cdb6
                        TRUE, TRUE, 0);
Packit 98cdb6
      gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolledWindow),
Packit 98cdb6
                                             md[window_no]->vbox);
Packit 98cdb6
Packit 98cdb6
      testcb[window_no].runtest = runtest;
Packit 98cdb6
      testcb[window_no].obj = obj;
Packit 98cdb6
      testcb[window_no].win_num = window_no; 
Packit 98cdb6
      g_signal_connect (GTK_OBJECT (md[window_no]->button), 
Packit 98cdb6
                        "clicked",
Packit 98cdb6
                        G_CALLBACK (_testselectioncb),
Packit 98cdb6
                        (gpointer)&testcb[window_no]);
Packit 98cdb6
     
Packit 98cdb6
      /* Show all */
Packit 98cdb6
      gtk_widget_grab_focus (md[window_no]->button);
Packit 98cdb6
      gtk_widget_show (md[window_no]->button);
Packit 98cdb6
      gtk_widget_show (hbuttonbox); 
Packit 98cdb6
      gtk_widget_show (scrolledWindow); 
Packit 98cdb6
      gtk_widget_show_all (GTK_WIDGET (md[window_no]->selecttestsWindow));
Packit 98cdb6
      return TRUE;
Packit 98cdb6
    }
Packit 98cdb6
  else
Packit 98cdb6
    return FALSE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
/** 
Packit 98cdb6
 * add_test
Packit 98cdb6
 * @window: The window number
Packit 98cdb6
 * @name: The test name
Packit 98cdb6
 * @num_params: The number of arguments the test uses.
Packit 98cdb6
 * @parameter_names: The names of each argument.
Packit 98cdb6
 * @default_names: The default values of each argument.
Packit 98cdb6
 *
Packit 98cdb6
 * Adds a Test with the passed-in details to the Tests Select Window.  
Packit 98cdb6
 *
Packit 98cdb6
 * Returns: FALSE if the num_params passed in is greater than
Packit 98cdb6
 * MAX_PARAMS, otherwise returns TRUE 
Packit 98cdb6
 *
Packit 98cdb6
 **/
Packit 98cdb6
gboolean
Packit 98cdb6
add_test (gint   window, 
Packit 98cdb6
          gchar  *name,
Packit 98cdb6
          gint   num_params,
Packit 98cdb6
          gchar* parameter_names[],
Packit 98cdb6
          gchar* default_names[])
Packit 98cdb6
{
Packit 98cdb6
  gint i;
Packit 98cdb6
Packit 98cdb6
  if (num_params > MAX_PARAMS)
Packit 98cdb6
    return FALSE;
Packit 98cdb6
  else
Packit 98cdb6
    {
Packit 98cdb6
      md[window]->hbox = gtk_hbox_new (FALSE, 0);
Packit 98cdb6
      gtk_box_set_spacing (GTK_BOX (md[window]->hbox), 10);
Packit 98cdb6
      gtk_container_set_border_width (GTK_CONTAINER (md[window]->hbox), 10);
Packit 98cdb6
      gtk_container_add (GTK_CONTAINER (md[window]->vbox), md[window]->hbox);
Packit 98cdb6
      listoftests[window][testcount[window]].toggleButton =
Packit 98cdb6
         gtk_toggle_button_new_with_label (name);
Packit 98cdb6
      gtk_box_pack_start (GTK_BOX (md[window]->hbox),
Packit 98cdb6
          listoftests[window][testcount[window]].toggleButton, FALSE, FALSE, 0);
Packit 98cdb6
      listoftests[window][testcount[window]].testName = name;
Packit 98cdb6
      listoftests[window][testcount[window]].numParameters = num_params;
Packit 98cdb6
      for (i=0; i
Packit 98cdb6
        {
Packit 98cdb6
     	  listoftests[window][testcount[window]].parameterLabel[i] =
Packit 98cdb6
            gtk_label_new (parameter_names[i]);
Packit 98cdb6
          gtk_box_pack_start (GTK_BOX (md[window]->hbox),
Packit 98cdb6
          listoftests[window][testcount[window]].parameterLabel[i], FALSE, FALSE, 0);
Packit 98cdb6
	  listoftests[window][testcount[window]].parameterInput[i] = gtk_entry_new();
Packit 98cdb6
          gtk_entry_set_text (GTK_ENTRY (listoftests[window][testcount[window]].parameterInput[i]),
Packit 98cdb6
            default_names[i]);
Packit 98cdb6
          gtk_widget_set_size_request (listoftests[window][testcount[window]].parameterInput[i], 50, 22);
Packit 98cdb6
	  gtk_box_pack_start (GTK_BOX (md[window]->hbox),
Packit 98cdb6
            listoftests[window][testcount[window]].parameterInput[i], FALSE, FALSE, 0);
Packit 98cdb6
          gtk_widget_set_sensitive (
Packit 98cdb6
            GTK_WIDGET (listoftests[window][testcount[window]].parameterLabel[i]), FALSE);
Packit 98cdb6
          gtk_widget_set_sensitive (
Packit 98cdb6
            GTK_WIDGET (listoftests[window][testcount[window]].parameterInput[i]), FALSE);
Packit 98cdb6
	  gtk_widget_show (listoftests[window][testcount[window]].parameterLabel[i]);
Packit 98cdb6
	  gtk_widget_show (listoftests[window][testcount[window]].parameterInput[i]);
Packit 98cdb6
        }
Packit 98cdb6
      g_signal_connect (GTK_OBJECT (listoftests[window][testcount[window]].toggleButton),
Packit 98cdb6
                        "toggled",
Packit 98cdb6
                        G_CALLBACK (_toggle_selectedcb),
Packit 98cdb6
                        (gpointer)&(listoftests[window][testcount[window]]));
Packit 98cdb6
      gtk_widget_show (listoftests[window][testcount[window]].toggleButton);
Packit 98cdb6
      gtk_widget_show (md[window]->hbox);
Packit 98cdb6
      gtk_widget_show (md[window]->vbox);
Packit 98cdb6
Packit 98cdb6
      testcount[window]++;
Packit 98cdb6
      counter++;
Packit 98cdb6
      return TRUE;
Packit 98cdb6
    }  
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
/** 
Packit 98cdb6
 * tests_set:
Packit 98cdb6
 * @window: The window number
Packit 98cdb6
 * @count: Passes back the number of tests on.
Packit 98cdb6
 *
Packit 98cdb6
 * Gets an array of strings corresponding to the tests that are "on".
Packit 98cdb6
 * A test is assumed on if the toggle button is on and if all its
Packit 98cdb6
 * parameters have values.
Packit 98cdb6
 *
Packit 98cdb6
 * Returns: an array of strings corresponding to the tests that
Packit 98cdb6
 * are "on".
Packit 98cdb6
 **/
Packit 98cdb6
gchar **tests_set(gint window, int *count)
Packit 98cdb6
{
Packit 98cdb6
  gint        i =0, j = 0, num;
Packit 98cdb6
  gboolean    nullparam;
Packit 98cdb6
  gchar*      input;
Packit 98cdb6
Packit 98cdb6
  *count = 0;
Packit 98cdb6
  for (i = 0; i < MAX_TESTS; i++)
Packit 98cdb6
      onTests[window][i] = NULL;
Packit 98cdb6
Packit 98cdb6
  for (i = 0; i < testcount[window]; i++)
Packit 98cdb6
    {
Packit 98cdb6
      nullparam = FALSE;
Packit 98cdb6
      if (GTK_TOGGLE_BUTTON(listoftests[window][i].toggleButton)->active)
Packit 98cdb6
        {
Packit 98cdb6
          num = listoftests[window][i].numParameters;
Packit 98cdb6
          for (j = 0; j < num; j++)
Packit 98cdb6
            {
Packit 98cdb6
              input = gtk_editable_get_chars (
Packit 98cdb6
                    GTK_EDITABLE (listoftests[window][i].parameterInput[j]), 0, -1);
Packit 98cdb6
Packit 98cdb6
              if (input != NULL && (! strcmp(input, "")))
Packit 98cdb6
                nullparam = TRUE;
Packit 98cdb6
            } 
Packit 98cdb6
          if (!nullparam)
Packit 98cdb6
            {
Packit 98cdb6
              onTests[window][*count] = listoftests[window][i].testName;
Packit 98cdb6
              *count = *count + 1; 
Packit 98cdb6
            }
Packit 98cdb6
        }
Packit 98cdb6
    } 
Packit 98cdb6
  return onTests[window];
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
/**
Packit 98cdb6
 * _get_position_in_array:
Packit 98cdb6
 * @window: The window number
Packit 98cdb6
 * @the_test_name: The name of the test
Packit 98cdb6
 *
Packit 98cdb6
 * Gets the index of the passed-in @the_test_name.
Packit 98cdb6
 *
Packit 98cdb6
 * Returns: the position in listoftests[] of @the_test_name
Packit 98cdb6
 **/
Packit 98cdb6
static gint
Packit 98cdb6
_get_position_in_array(gint  window,
Packit 98cdb6
                       gchar *the_test_name)
Packit 98cdb6
{
Packit 98cdb6
  gint        i;
Packit 98cdb6
  
Packit 98cdb6
  for (i = 0; i < testcount[window]; i++)
Packit 98cdb6
    {
Packit 98cdb6
      if (strcmp(listoftests[window][i].testName, the_test_name) == 0)
Packit 98cdb6
        return i;
Packit 98cdb6
    }
Packit 98cdb6
  return -1;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
/**
Packit 98cdb6
 * _get_position_in_parameters:
Packit 98cdb6
 * @window: The window number
Packit 98cdb6
 * @label: The label name
Packit 98cdb6
 * @position: The parameter position
Packit 98cdb6
 *
Packit 98cdb6
 * Gets the index of the passed-in parameter @label.
Packit 98cdb6
 *
Packit 98cdb6
 * Returns: the position in parameterLabel[] (a member of
Packit 98cdb6
 * listoftests[]) of @label 
Packit 98cdb6
 **/
Packit 98cdb6
static gint
Packit 98cdb6
_get_position_in_parameters(gint  window,
Packit 98cdb6
                            gchar *label,
Packit 98cdb6
                            gint  position)
Packit 98cdb6
{
Packit 98cdb6
  gint                    i;
Packit 98cdb6
  const gchar    *label_string;
Packit 98cdb6
  
Packit 98cdb6
  for (i = 0; i < MAX_PARAMS; i++)
Packit 98cdb6
    {
Packit 98cdb6
      label_string = gtk_label_get_text( 
Packit 98cdb6
               GTK_LABEL (listoftests[window][position].parameterLabel[i]));
Packit 98cdb6
Packit 98cdb6
      if (strcmp(label_string, label) == 0)
Packit 98cdb6
        return i;
Packit 98cdb6
    }
Packit 98cdb6
  return -1;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
/** 
Packit 98cdb6
 * set_output_buffer:
Packit 98cdb6
 * @output: The string to add to the output buffer
Packit 98cdb6
 * 
Packit 98cdb6
 * Tidies up the output Window 
Packit 98cdb6
 **/
Packit 98cdb6
void
Packit 98cdb6
set_output_buffer(gchar *output)
Packit 98cdb6
{
Packit 98cdb6
  gtk_text_buffer_insert (GTK_TEXT_BUFFER (ow->outputBuffer),
Packit 98cdb6
                          &ow->outputIter, output, strlen(output));
Packit 98cdb6
  gtk_text_buffer_get_iter_at_offset (GTK_TEXT_BUFFER (ow->outputBuffer),
Packit 98cdb6
                                      &ow->outputIter, 0);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
/**
Packit 98cdb6
 * isVisibleDialog:
Packit 98cdb6
 *
Packit 98cdb6
 * Informs user if a visible test window running.
Packit 98cdb6
 *
Packit 98cdb6
 * Returns: TRUE if g_visibleDialog is set to 1, otherwise FALSE
Packit 98cdb6
 **/
Packit 98cdb6
gboolean
Packit 98cdb6
isVisibleDialog(void)
Packit 98cdb6
{
Packit 98cdb6
 if (g_visibleDialog >= 1)
Packit 98cdb6
   return TRUE;
Packit 98cdb6
 else
Packit 98cdb6
   return FALSE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
/**
Packit 98cdb6
 * get_arg_of_func:
Packit 98cdb6
 * @window: The window number
Packit 98cdb6
 * @function_name: The name of the function
Packit 98cdb6
 * @arg_label: The label of the argument.
Packit 98cdb6
 *
Packit 98cdb6
 * Gets the user input associated with the @function_name and @arg_label.
Packit 98cdb6
 *
Packit 98cdb6
 * Returns: the user input associated with the @function_name and @arg_label.
Packit 98cdb6
 **/
Packit 98cdb6
gchar*
Packit 98cdb6
get_arg_of_func (gint  window,
Packit 98cdb6
                 gchar *function_name,
Packit 98cdb6
                 gchar *arg_label)
Packit 98cdb6
{
Packit 98cdb6
  const gchar       *argString;
Packit 98cdb6
  gchar                      *retString;
Packit 98cdb6
  gint                       position, paramPosition;
Packit 98cdb6
Packit 98cdb6
  position =  _get_position_in_array(window, function_name);
Packit 98cdb6
Packit 98cdb6
  if (position == -1)
Packit 98cdb6
    {
Packit 98cdb6
      g_print("No such function\n");
Packit 98cdb6
      return NULL;
Packit 98cdb6
    }
Packit 98cdb6
Packit 98cdb6
  paramPosition = _get_position_in_parameters(window, arg_label, position);
Packit 98cdb6
Packit 98cdb6
  if (paramPosition == -1)
Packit 98cdb6
    {
Packit 98cdb6
      g_print("No such parameter Label\n");
Packit 98cdb6
      return NULL;
Packit 98cdb6
    }
Packit 98cdb6
Packit 98cdb6
  if (position != -1 && paramPosition != -1)
Packit 98cdb6
    {
Packit 98cdb6
      argString = gtk_editable_get_chars (
Packit 98cdb6
        GTK_EDITABLE (listoftests[window][position].parameterInput[paramPosition]),
Packit 98cdb6
      0, -1);
Packit 98cdb6
      retString = g_strdup(argString);
Packit 98cdb6
    }
Packit 98cdb6
  else
Packit 98cdb6
    retString = NULL;
Packit 98cdb6
Packit 98cdb6
  return retString;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
/**
Packit 98cdb6
 * string_to_int:
Packit 98cdb6
 * @the_string: The string to convert
Packit 98cdb6
 *
Packit 98cdb6
 * Converts the passed-in string to an integer 
Packit 98cdb6
 *
Packit 98cdb6
 * Returns: An integer corresponding to @the_string.
Packit 98cdb6
 **/
Packit 98cdb6
int
Packit 98cdb6
string_to_int (const char *the_string)
Packit 98cdb6
{
Packit 98cdb6
  char *end_ptr;
Packit 98cdb6
  double ret_val;
Packit 98cdb6
  int int_ret_val; 
Packit 98cdb6
Packit 98cdb6
  while (1)
Packit 98cdb6
    {
Packit 98cdb6
      ret_val = strtod( the_string, &end_ptr);
Packit 98cdb6
      if (*end_ptr == '\0')
Packit 98cdb6
        break;
Packit 98cdb6
      else
Packit 98cdb6
        printf("\nError: input must be a number\n");
Packit 98cdb6
    }
Packit 98cdb6
   
Packit 98cdb6
  int_ret_val = (int) ret_val;
Packit 98cdb6
  return (int_ret_val);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
/** 
Packit 98cdb6
 * _toggle_selectedcb:
Packit 98cdb6
 * @widget: The ToggleButton widget
Packit 98cdb6
 * @test: user data containing the TestList structure.
Packit 98cdb6
 *
Packit 98cdb6
 * Toggle Button Callback, activating the text entry fields 
Packit 98cdb6
 **/
Packit 98cdb6
static void
Packit 98cdb6
_toggle_selectedcb (GtkWidget *widget,
Packit 98cdb6
                    gpointer  test)
Packit 98cdb6
{
Packit 98cdb6
  int i;
Packit 98cdb6
  TestList *testlist = (TestList *) test;
Packit 98cdb6
  gboolean toggled;
Packit 98cdb6
  gboolean sensitive;
Packit 98cdb6
  toggled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
Packit 98cdb6
  if (toggled)
Packit 98cdb6
    sensitive = TRUE;
Packit 98cdb6
  else
Packit 98cdb6
    sensitive = FALSE;
Packit 98cdb6
Packit 98cdb6
  for (i=0; i < testlist->numParameters; i++)
Packit 98cdb6
    {
Packit 98cdb6
      gtk_widget_set_sensitive (GTK_WIDGET (testlist->parameterLabel[i]),
Packit 98cdb6
                                sensitive);
Packit 98cdb6
      gtk_widget_set_sensitive (GTK_WIDGET (testlist->parameterInput[i]),
Packit 98cdb6
                                sensitive);
Packit 98cdb6
    }
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
/* 
Packit 98cdb6
 * _testselectioncb:
Packit 98cdb6
 * widget: The Button widget
Packit 98cdb6
 * data: The user data containing a TestCB structure
Packit 98cdb6
 *
Packit 98cdb6
 * Callback for when the "Run Tests" button is pressed 
Packit 98cdb6
 **/
Packit 98cdb6
static void
Packit 98cdb6
_testselectioncb (GtkWidget *widget,
Packit 98cdb6
                  gpointer data)
Packit 98cdb6
{
Packit 98cdb6
  TestCB* local_testcb = (TestCB *)data;
Packit 98cdb6
  local_testcb->runtest(local_testcb->obj, local_testcb->win_num);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
/**
Packit 98cdb6
 * _destroy:
Packit 98cdb6
 * @widget: The GUI widget
Packit 98cdb6
 * @data: User data, not used.
Packit 98cdb6
 *
Packit 98cdb6
 * Destroy Callback.
Packit 98cdb6
 **/
Packit 98cdb6
static void
Packit 98cdb6
_destroy (GtkWidget *widget,
Packit 98cdb6
          gpointer  data)
Packit 98cdb6
{
Packit 98cdb6
  gtk_main_quit();
Packit 98cdb6
}
Packit 98cdb6