mingw ports fix to Makefile.am and configure.in, to
[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 <libbonobo.h>
26 #include "login-helper.h"
27
28 /* Our parent Gtk object type */
29 #define PARENT_TYPE BONOBO_TYPE_OBJECT
30
31 /* A pointer to our parent object class */
32 static BonoboObjectClass *bonobo_object_parent_class;
33
34 static void
35 login_helper_finalize (GObject *object)
36 {
37   (G_OBJECT_CLASS (bonobo_object_parent_class))->finalize (object);
38 }
39
40 gboolean
41 login_helper_set_safe (LoginHelper *helper, gboolean safe)
42 {
43   LoginHelperClass *klass = LOGIN_HELPER_GET_CLASS (helper);
44   
45   if (klass->set_safe)
46     return (* klass->set_safe)(helper, safe);
47   else
48     return FALSE;
49 }
50
51 static CORBA_boolean
52 impl_login_helper_set_safe (PortableServer_Servant servant,
53                             const CORBA_boolean safe,
54                             CORBA_Environment *ev)
55 {
56   LoginHelper *helper = LOGIN_HELPER (bonobo_object_from_servant (servant));
57
58   return login_helper_set_safe (helper, safe);
59 }
60
61 LoginHelperDeviceReqFlags
62 login_helper_get_device_reqs (LoginHelper *helper)
63 {
64   LoginHelperClass *klass = LOGIN_HELPER_GET_CLASS (helper);
65   
66   if (klass->get_device_reqs)
67     return  (* klass->get_device_reqs)(helper);
68   else
69     return 0;
70 }
71
72 static Accessibility_LoginHelper_DeviceReqList*
73 impl_login_helper_get_device_reqs (PortableServer_Servant servant,
74                                    CORBA_Environment *ev)
75 {
76   LoginHelper *helper = LOGIN_HELPER (bonobo_object_from_servant (servant));
77   LoginHelperDeviceReqFlags flags = 0;
78   gint n_reqs = 0, i = 1, j = 1;
79   Accessibility_LoginHelper_DeviceReqList *list;
80
81   flags = login_helper_get_device_reqs (helper);
82
83   while (i <= LOGIN_HELPER_LAST_DEFINED) 
84   {
85       if (flags & i) n_reqs++;
86       i <<= 1;
87   }
88   
89   list = Accessibility_LoginHelper_DeviceReqList__alloc ();
90   list->_length = n_reqs; 
91   list->_buffer = Accessibility_LoginHelper_DeviceReqList_allocbuf (list->_length);
92
93   for (i = 0, j = 1; i < n_reqs; i++) 
94   {
95       Accessibility_LoginHelper_DeviceReq req;
96       while ((flags & j) == 0) {
97           j <<= 1;
98       }
99       switch (j)
100       {
101           case LOGIN_HELPER_GUI_EVENTS:
102               req = Accessibility_LoginHelper_GUI_EVENTS;
103               break;
104           case LOGIN_HELPER_CORE_KEYBOARD:
105               req = Accessibility_LoginHelper_CORE_KEYBOARD;
106               break;
107           case LOGIN_HELPER_CORE_POINTER:
108               req = Accessibility_LoginHelper_CORE_POINTER;
109               break;
110           case LOGIN_HELPER_EXT_INPUT:
111               req = Accessibility_LoginHelper_EXT_INPUT;
112               break;
113           case LOGIN_HELPER_POST_WINDOWS:
114               req = Accessibility_LoginHelper_POST_WINDOWS;
115               break;
116           case LOGIN_HELPER_AUDIO_OUT:
117               req = Accessibility_LoginHelper_AUDIO_OUT;
118               break;
119           case LOGIN_HELPER_AUDIO_IN:
120               req = Accessibility_LoginHelper_AUDIO_IN;
121               break;
122           case LOGIN_HELPER_NETWORK:
123               req = Accessibility_LoginHelper_NETWORK;
124               break;
125           case LOGIN_HELPER_LOCALHOST:
126               req = Accessibility_LoginHelper_LOCALHOST;
127               break;
128           case LOGIN_HELPER_SERIAL_OUT:
129               req = Accessibility_LoginHelper_SERIAL_OUT;
130               break;
131           case LOGIN_HELPER_SERIAL_IN:
132               req = Accessibility_LoginHelper_SERIAL_IN;
133               break;
134           default:
135               req = 0;
136               break;
137       }
138       list->_buffer[i] = req;
139       j <<= 1;
140   }  
141
142   return list;
143 }
144
145 Window*
146 login_helper_get_raise_windows (LoginHelper *helper)
147 {
148   LoginHelperClass *klass = LOGIN_HELPER_GET_CLASS (helper);
149   
150   if (klass->get_raise_windows)
151     return (* klass->get_raise_windows)(helper);
152   else
153     return NULL;
154 }
155
156 static Accessibility_LoginHelper_WindowList*
157 impl_login_helper_get_raise_windows (PortableServer_Servant servant,
158                                      CORBA_Environment *ev)
159 {
160   LoginHelper *helper = LOGIN_HELPER (bonobo_object_from_servant (servant));
161   unsigned long *wids;
162   Accessibility_LoginHelper_WindowList *windows;
163
164   wids = login_helper_get_raise_windows (helper);
165
166   if (wids && *wids)
167     {
168       gint i, count = 0;
169       while (wids[count])
170         {
171           ++count;
172         }
173       windows = Accessibility_LoginHelper_WindowList__alloc ();
174       windows->_length = count;
175       windows->_buffer = Accessibility_LoginHelper_WindowList_allocbuf (windows->_length);
176       for (i = 0; i < count; ++i)
177         {
178           Accessibility_LoginHelper_WindowInfo winfo;
179           winfo.winID = wids[i];
180           windows->_buffer [i] = winfo;
181         }
182       g_free (wids);
183       return windows;
184     }
185   else
186     {
187       return NULL;
188     }
189 }
190
191 static void
192 login_helper_class_init (LoginHelperClass *klass)
193 {
194   GObjectClass * object_class = (GObjectClass *) klass;
195   POA_Accessibility_LoginHelper__epv *epv = &klass->epv;
196
197   bonobo_object_parent_class = g_type_class_peek_parent (klass);
198
199   object_class->finalize = login_helper_finalize;
200   
201   epv->getRaiseWindows = impl_login_helper_get_raise_windows;
202   epv->getDeviceReqs = impl_login_helper_get_device_reqs;
203   epv->setSafe = impl_login_helper_set_safe;
204 }
205
206 static void
207 login_helper_init (GObject *object)
208 {
209 }
210
211 BONOBO_TYPE_FUNC_FULL (LoginHelper,
212                        Accessibility_LoginHelper,
213                        PARENT_TYPE, login_helper)
214