bfa8c2054b12a6a6d3c7cc5e5e53e8f41c027da6
[platform/core/uifw/at-spi2-atk.git] / test / login-helper-server-test.c
1 #include <libbonobo.h>
2 #include <login-helper/login-helper.h>
3 #include <gtk/gtkmain.h>
4 #include <gtk/gtkwindow.h>
5 #include <gdk/gdkx.h>
6 #include <X11/Xatom.h>
7
8 static void test_init_login_helper_vpointers (LoginHelper *helper, 
9                                               gpointer test_set_safe, 
10                                               gpointer test_get_device_reqs, 
11                                               gpointer test_get_raise_windows);
12
13 static gboolean test_set_safe (LoginHelper *helper, gboolean safe);
14
15 static LoginHelperDeviceReqFlags test_get_device_reqs (LoginHelper *helper);
16
17 static Window* test_get_raise_windows (LoginHelper *helper);
18
19 static void    test_post_window (void);
20
21 static void    test_set_wm_dock (void);
22
23 static GtkWidget *mainwin = NULL;
24
25 int
26 main (int argc, char **argv)
27 {
28         int          ret;
29         char        *obj_id;
30         BonoboObject *helper;
31         
32         if (!bonobo_init (&argc, argv))
33         {
34                 g_error ("Could not initialize oaf / Bonobo");
35         }
36         
37         obj_id = "OAFIID:GNOME_TEST:1.0";  /* just for testing, install manually */
38         
39         helper = BONOBO_OBJECT (g_object_new (LOGIN_HELPER_TYPE, NULL));
40         
41         ret = bonobo_activation_register_active_server (
42                 obj_id,
43                 bonobo_object_corba_objref (bonobo_object (helper)),
44                 NULL);
45         
46         if (ret != Bonobo_ACTIVATION_REG_SUCCESS)
47         {
48                 switch (ret) 
49                 {
50                 case Bonobo_ACTIVATION_REG_NOT_LISTED:
51                         fprintf (stderr, "OAFIID not listed\n");
52                         break;
53                 default:
54                         fprintf (stderr, "Registration Error: %d\n", ret);
55                         break;
56                 }
57         }
58         else
59         {
60                 CORBA_Environment ev;
61                 Bonobo_Unknown ret;
62                 CORBA_exception_init (&ev);
63                 
64                 ret = Bonobo_Unknown_queryInterface (
65                         BONOBO_OBJREF (helper),
66                         "IDL:Accessibility/LoginHelper:1.0", 
67                         &ev);
68                 
69                 if (BONOBO_EX (&ev))
70                 {
71                         fprintf (stderr, "queryInterface error: %s\n", 
72                                  bonobo_exception_get_text (&ev));
73                 }
74                 else
75                 {
76                         fprintf (stderr, "query returned %p: objref self = %p\n", 
77                                  ret, BONOBO_OBJREF (helper));
78                 }
79         }
80
81         /* this is a testing hack - we are changing the LoginHelperClass's vpointers here */
82         
83         test_init_login_helper_vpointers ((LoginHelper*)helper, test_set_safe, test_get_device_reqs, test_get_raise_windows);
84
85         gtk_init (&argc, &argv);
86
87         test_post_window ();
88
89         bonobo_main ();
90
91         return 0;
92 }
93
94 static void
95 test_init_login_helper_vpointers (LoginHelper *helper, 
96                                   gpointer set_safe_func, 
97                                   gpointer get_device_reqs_func, 
98                                   gpointer get_raise_windows_func)
99 {
100         LoginHelperClass *klass = LOGIN_HELPER_GET_CLASS (helper);
101         klass->set_safe = set_safe_func;
102         klass->get_device_reqs = get_device_reqs_func;
103         klass->get_raise_windows = get_raise_windows_func;
104 }
105
106 static gboolean
107 test_set_safe (LoginHelper *helper, gboolean safe)
108 {
109         return TRUE;
110 }
111
112 static LoginHelperDeviceReqFlags
113 test_get_device_reqs (LoginHelper *helper)
114 {
115         return LOGIN_HELPER_POST_WINDOWS;
116 }
117
118 static Window*
119 test_get_raise_windows (LoginHelper *helper)
120 {
121         Window *winlist = g_new0 (Window, 2);
122         winlist[0] = GDK_WINDOW_XWINDOW (mainwin->window);
123         winlist[1] = None;
124         return winlist;
125 }
126
127
128 void
129 test_set_wm_dock (void)
130 {
131   Atom atom_type[1], atom_window_type;
132
133   gtk_widget_hide (mainwin);
134
135   gdk_error_trap_push ();
136   atom_window_type = gdk_x11_get_xatom_by_name ("_NET_WM_WINDOW_TYPE");
137
138   atom_type[0] = gdk_x11_get_xatom_by_name ("_NET_WM_WINDOW_TYPE_DOCK");
139
140   XChangeProperty (GDK_WINDOW_XDISPLAY (mainwin->window), 
141                    GDK_WINDOW_XWINDOW (mainwin->window), 
142                    atom_window_type,
143                    XA_ATOM, 32, PropModeReplace,
144                    (guchar *) &atom_type, 1);
145   gdk_error_trap_pop ();
146
147   gtk_widget_show (mainwin);
148
149 }
150
151 static void
152 test_post_window (void)
153 {
154         mainwin = gtk_window_new (GTK_WINDOW_TOPLEVEL);
155
156         gtk_window_set_screen (GTK_WINDOW (mainwin), gdk_screen_get_default ());
157
158         /* gtk_window_set_keep_above (GTK_WINDOW (mainwin), true); optional */
159         /* test_set_wm_dock (); optional */
160
161         gtk_widget_show_all (mainwin);
162 }