]> Pileus Git - ~andy/gtk/blob - modules/other/gail/tests/testtext.c
gail: No need to include modules/other in CFLAGS anymore
[~andy/gtk] / modules / other / gail / tests / testtext.c
1 #include <atk/atk.h>
2 #include "testtextlib.h"
3
4 #define NUM_VALID_ROLES 6  
5
6 static void _create_event_watcher (void);
7 static void _check_text (AtkObject *obj);
8 void runtest(AtkObject *, gint);
9
10 static guint id1 = 0;
11 static guint win_count = 0;
12
13 static void _check_text (AtkObject *in_obj)
14 {
15   AtkObject *obj = NULL;
16   AtkRole role;
17   gchar* title;
18   AtkRole valid_roles[NUM_VALID_ROLES];
19
20   if (g_getenv("TEST_ACCESSIBLE_DELAY") != NULL)
21   {
22     int max_cnt = string_to_int(g_getenv("TEST_ACCESSIBLE_DELAY"));
23     win_count++;
24     if (win_count <= max_cnt)
25       return;
26   }
27
28   /* Set Up */
29
30   valid_roles[0] = ATK_ROLE_TEXT;
31   valid_roles[1] = ATK_ROLE_LABEL;
32   valid_roles[2] = ATK_ROLE_ACCEL_LABEL;
33   valid_roles[3] = ATK_ROLE_PASSWORD_TEXT;
34   valid_roles[4] = ATK_ROLE_TABLE_CELL;
35   valid_roles[5] = ATK_ROLE_PANEL;
36   
37   /* The following if/else grabs the windows name, or sets title to NULL if none. */
38   if (in_obj->name)
39   {
40      title = in_obj->name;
41   }
42   else
43   {
44     GtkWidget *toplevel;
45     GtkWidget* widget;
46
47     widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (in_obj));
48     if (widget == NULL)
49       title = NULL;
50
51     toplevel = gtk_widget_get_toplevel (widget);
52     if (GTK_IS_WINDOW (toplevel))
53       title = (gchar *) gtk_window_get_title (GTK_WINDOW (toplevel));
54     else
55       title = NULL;
56   }
57   /* If no window name, do nothing */
58   if (title == NULL) 
59     return;
60   /* 
61    * If testtext test program, find obj just by role since only one child 
62    * with no name
63    */
64   else if (g_ascii_strncasecmp(title, "testtext", 7) == 0) 
65   {
66     obj = find_object_by_role(in_obj, valid_roles, NUM_VALID_ROLES);
67   }
68   /*
69    * Otherwise, get obj by name and role so you can specify exactly which 
70    * obj to run tests on 
71    */
72   else 
73   {
74     const gchar *test_accessible_name = g_getenv ("TEST_ACCESSIBLE_NAME");
75
76     if (test_accessible_name != NULL)
77     {
78       obj = find_object_by_accessible_name_and_role(in_obj,
79         test_accessible_name, valid_roles, NUM_VALID_ROLES);
80     }
81     if (obj != NULL)
82     {
83       if (atk_object_get_role (obj) == ATK_ROLE_PANEL)
84       {
85         /* Get the child and check whether it is a label */
86
87         obj = atk_object_ref_accessible_child (obj, 0);
88         g_assert (atk_object_get_role (obj) == ATK_ROLE_LABEL);
89         g_object_unref (obj);
90       }
91        g_print("Found valid name and role in child!\n");
92     }
93     else
94     {
95        obj = find_object_by_role(in_obj, valid_roles, NUM_VALID_ROLES - 1);
96        if (obj != NULL)
97           g_print("Found valid role in child\n");
98     }   
99   } 
100   if (obj == NULL)
101   {
102      g_print("Object not found\n");
103      return;
104   }
105   role = atk_object_get_role(obj);
106
107   g_print("_check_text - Found role type %s!\n\n", atk_role_get_name (role));
108
109   add_handlers(obj);
110
111   if (!(isVisibleDialog()))
112     setup_gui(obj, runtest);
113   atk_remove_focus_tracker (id1);
114 }
115
116 static void
117 _create_event_watcher (void)
118 {
119   id1 = atk_add_focus_tracker (_check_text);
120 }
121
122 int
123 gtk_module_init(gint argc, char* argv[])
124 {
125   g_print("testtext Module loaded.\n");
126   _create_event_watcher();
127
128   return 0;
129 }
130
131