Changes to introspection generation to remove DOCTYPE and XML
[platform/core/uifw/at-spi2-atk.git] / login-helper / login-helper.c
1 /*
2  * AT-SPI - Assistive Technology Service Provider Interface
3  * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
4  *
5  * LoginHelper interface 
6  * Copyright 2004 Sun Microsystems Inc.,
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Library General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Library General Public License for more details.
17  *
18  * You should have received a copy of the GNU Library General Public
19  * License along with this library; if not, write to the
20  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21  * Boston, MA 02111-1307, USA.
22  */
23
24 /* login-helper.c: minimal implementation of Accessibility_LoginHelper.idl */
25 #include <config.h>
26 #include <libbonobo.h>
27 #include "login-helper.h"
28
29 /* Our parent Gtk object type */
30 #define PARENT_TYPE BONOBO_TYPE_OBJECT
31
32 /* A pointer to our parent object class */
33 static BonoboObjectClass *bonobo_object_parent_class;
34
35 static void
36 login_helper_finalize (GObject *object)
37 {
38   (G_OBJECT_CLASS (bonobo_object_parent_class))->finalize (object);
39 }
40
41 static gboolean
42 login_helper_set_safe (LoginHelper *helper, gboolean safe)
43 {
44   LoginHelperClass *klass = LOGIN_HELPER_GET_CLASS (helper);
45   
46   if (klass->set_safe)
47     return (* klass->set_safe)(helper, safe);
48   else
49     return FALSE;
50 }
51
52 static CORBA_boolean
53 impl_login_helper_set_safe (PortableServer_Servant servant,
54                             const CORBA_boolean safe,
55                             CORBA_Environment *ev)
56 {
57   LoginHelper *helper = LOGIN_HELPER (bonobo_object_from_servant (servant));
58
59   return login_helper_set_safe (helper, safe);
60 }
61
62 static LoginHelperDeviceReqFlags
63 login_helper_get_device_reqs (LoginHelper *helper)
64 {
65   LoginHelperClass *klass = LOGIN_HELPER_GET_CLASS (helper);
66   
67   if (klass->get_device_reqs)
68     return  (* klass->get_device_reqs)(helper);
69   else
70     return 0;
71 }
72
73 static Accessibility_LoginHelper_DeviceReqList*
74 impl_login_helper_get_device_reqs (PortableServer_Servant servant,
75                                    CORBA_Environment *ev)
76 {
77   LoginHelper *helper = LOGIN_HELPER (bonobo_object_from_servant (servant));
78   LoginHelperDeviceReqFlags flags = 0;
79   gint n_reqs = 0, i = 1, j = 1;
80   Accessibility_LoginHelper_DeviceReqList *list;
81
82   flags = login_helper_get_device_reqs (helper);
83
84   while (i <= LOGIN_HELPER_LAST_DEFINED) 
85   {
86       if (flags & i) n_reqs++;
87       i <<= 1;
88   }
89   
90   list = Accessibility_LoginHelper_DeviceReqList__alloc ();
91   list->_length = n_reqs; 
92   list->_buffer = Accessibility_LoginHelper_DeviceReqList_allocbuf (list->_length);
93
94   for (i = 0, j = 1; i < n_reqs; i++) 
95   {
96       Accessibility_LoginHelper_DeviceReq req;
97       while ((flags & j) == 0) {
98           j <<= 1;
99       }
100       switch (j)
101       {
102           case LOGIN_HELPER_GUI_EVENTS:
103               req = Accessibility_LoginHelper_GUI_EVENTS;
104               break;
105           case LOGIN_HELPER_CORE_KEYBOARD:
106               req = Accessibility_LoginHelper_CORE_KEYBOARD;
107               break;
108           case LOGIN_HELPER_CORE_POINTER:
109               req = Accessibility_LoginHelper_CORE_POINTER;
110               break;
111           case LOGIN_HELPER_EXT_INPUT:
112               req = Accessibility_LoginHelper_EXT_INPUT;
113               break;
114           case LOGIN_HELPER_POST_WINDOWS:
115               req = Accessibility_LoginHelper_POST_WINDOWS;
116               break;
117           case LOGIN_HELPER_AUDIO_OUT:
118               req = Accessibility_LoginHelper_AUDIO_OUT;
119               break;
120           case LOGIN_HELPER_AUDIO_IN:
121               req = Accessibility_LoginHelper_AUDIO_IN;
122               break;
123           case LOGIN_HELPER_NETWORK:
124               req = Accessibility_LoginHelper_NETWORK;
125               break;
126           case LOGIN_HELPER_LOCALHOST:
127               req = Accessibility_LoginHelper_LOCALHOST;
128               break;
129           case LOGIN_HELPER_SERIAL_OUT:
130               req = Accessibility_LoginHelper_SERIAL_OUT;
131               break;
132           case LOGIN_HELPER_SERIAL_IN:
133               req = Accessibility_LoginHelper_SERIAL_IN;
134               break;
135           default:
136               req = 0;
137               break;
138       }
139       list->_buffer[i] = req;
140       j <<= 1;
141   }  
142
143   return list;
144 }
145
146 static Window*
147 login_helper_get_raise_windows (LoginHelper *helper)
148 {
149   LoginHelperClass *klass = LOGIN_HELPER_GET_CLASS (helper);
150   
151   if (klass->get_raise_windows)
152     return (* klass->get_raise_windows)(helper);
153   else
154     return NULL;
155 }
156
157 static Accessibility_LoginHelper_WindowList*
158 impl_login_helper_get_raise_windows (PortableServer_Servant servant,
159                                      CORBA_Environment *ev)
160 {
161   LoginHelper *helper = LOGIN_HELPER (bonobo_object_from_servant (servant));
162   unsigned long *wids;
163   Accessibility_LoginHelper_WindowList *windows;
164
165   wids = login_helper_get_raise_windows (helper);
166
167   if (wids && *wids)
168     {
169       gint i, count = 0;
170       while (wids[count])
171         {
172           ++count;
173         }
174       windows = Accessibility_LoginHelper_WindowList__alloc ();
175       windows->_length = count;
176       windows->_buffer = Accessibility_LoginHelper_WindowList_allocbuf (windows->_length);
177       for (i = 0; i < count; ++i)
178         {
179           Accessibility_LoginHelper_WindowInfo winfo;
180           winfo.winID = wids[i];
181           windows->_buffer [i] = winfo;
182         }
183       g_free (wids);
184       return windows;
185     }
186   else
187     {
188       return NULL;
189     }
190 }
191
192 static void
193 login_helper_class_init (LoginHelperClass *klass)
194 {
195   GObjectClass * object_class = (GObjectClass *) klass;
196   POA_Accessibility_LoginHelper__epv *epv = &klass->epv;
197
198   bonobo_object_parent_class = g_type_class_peek_parent (klass);
199
200   object_class->finalize = login_helper_finalize;
201   
202   epv->getRaiseWindows = impl_login_helper_get_raise_windows;
203   epv->getDeviceReqs = impl_login_helper_get_device_reqs;
204   epv->setSafe = impl_login_helper_set_safe;
205 }
206
207 static void
208 login_helper_init (GObject *object)
209 {
210 }
211
212 BONOBO_TYPE_FUNC_FULL (LoginHelper,
213                        Accessibility_LoginHelper,
214                        PARENT_TYPE, login_helper)
215