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