* cspi/cspi-lowlevel.h cspi/spi-impl.h cspi/spi-listener.h
[platform/core/uifw/at-spi2-atk.git] / cspi / spi_component.c
1 /*
2  * AT-SPI - Assistive Technology Service Provider Interface
3  * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
4  *
5  * Copyright 2001 Sun Microsystems Inc.
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public
18  * License along with this library; if not, write to the
19  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20  * Boston, MA 02111-1307, USA.
21  */
22
23 /*
24  *
25  * AccessibleComponent function implementations
26  *
27  */
28
29 #include <cspi/spi-private.h>
30
31 /**
32  * AccessibleComponent_ref:
33  * @obj: a pointer to an object implementing #AccessibleComponent on which to operate.
34  *
35  * Increment the reference count for an #AccessibleComponent.
36  **/
37 void
38 AccessibleComponent_ref (AccessibleComponent *obj)
39 {
40   cspi_object_ref (obj);
41 }
42
43 /**
44  * AccessibleComponent_unref:
45  * @obj: a pointer to the object implementing #AccessibleComponent on which to operate.
46  *
47  * Decrement the reference count for an #AccessibleComponent.
48  **/
49 void
50 AccessibleComponent_unref (AccessibleComponent *obj)
51 {
52   cspi_object_unref (obj);
53 }
54
55 /**
56  * AccessibleComponent_contains:
57  * @obj: a pointer to the #AccessibleComponent to query.
58  * @x: a #long specifying the x coordinate in question.
59  * @y: a #long specifying the y coordinate in question.
60  * @ctype: the desired coordinate system of the point (@x, @y)
61  *         (e.g. CSPI_COORD_TYPE_WINDOW, CSPI_COORD_TYPE_SCREEN).
62  *
63  * Query whether a given #AccessibleComponent contains a particular point.
64  *
65  * Returns: a #TRUE if the specified component contains the point (@x, @y),
66  *          otherwise #FALSE.
67  **/
68 SPIBoolean
69 AccessibleComponent_contains (AccessibleComponent *obj,
70                               long int x,
71                               long int y,
72                               AccessibleCoordType ctype)
73 {
74   SPIBoolean retval;
75
76   cspi_return_val_if_fail (obj != NULL, FALSE);
77
78   retval = Accessibility_Component_contains (CSPI_OBJREF (obj),
79                                              (CORBA_long) x,
80                                              (CORBA_long) y,
81                                              ctype,
82                                              cspi_ev ());
83   cspi_return_val_if_ev ("contains", FALSE);
84
85   return retval;
86 }
87
88 /**
89  * AccessibleComponent_getAccessibleAtPoint:
90  * @obj: a pointer to the #AccessibleComponent to query.
91  * @x: a #long specifying the x coordinate of the point in question.
92  * @y: a #long specifying the y coordinate of the point in question.
93  * @ctype: the coordinate system of the point (@x, @y)
94  *         (e.g. CSPI_COORD_TYPE_WINDOW, CSPI_COORD_TYPE_SCREEN).
95  *
96  * Get the accessible child at a given coordinate within an #AccessibleComponent.
97  *
98  * Returns: a pointer to an #Accessible child of the specified component which
99  *          contains the point (@x, @y), or NULL of no child contains the point.
100  **/
101 Accessible *
102 AccessibleComponent_getAccessibleAtPoint (AccessibleComponent *obj,
103                                           long int x,
104                                           long int y,
105                                           AccessibleCoordType ctype)
106 {
107   Accessibility_Accessible child;
108
109   cspi_return_val_if_fail (obj != NULL, NULL);
110
111   child = Accessibility_Component_getAccessibleAtPoint (CSPI_OBJREF (obj),
112                                                         (CORBA_long) x,
113                                                         (CORBA_long) y,
114                                                         ctype,
115                                                         cspi_ev ());
116   return cspi_object_add (child);
117 }
118
119 /**
120  * AccessibleComponent_getExtents:
121  * @obj: a pointer to the #AccessibleComponent to query.
122  * @x: a pointer to a #long into which the minimum x coordinate will be returned.
123  * @y: a pointer to a #long into which the minimum y coordinate will be returned.
124  * @width: a pointer to a #long into which the x extents (width) will be returned.
125  * @height: a pointer to a #long into which the y extents (height) will be returned.
126  * @ctype: the desired coordinate system into which to return the results,
127  *         (e.g. CSPI_COORD_TYPE_WINDOW, CSPI_COORD_TYPE_SCREEN).
128  *
129  * Get the bounding box of the specified #AccessibleComponent.
130  *
131  **/
132 void
133 AccessibleComponent_getExtents (AccessibleComponent *obj,
134                                 long int *x,
135                                 long int *y,
136                                 long int *width,
137                                 long int *height,
138                                 AccessibleCoordType ctype)
139 {
140   Accessibility_BoundingBox bbox;
141
142   cspi_return_if_fail (obj != NULL);
143
144   bbox = Accessibility_Component_getExtents (CSPI_OBJREF (obj),
145                                              ctype,
146                                              cspi_ev ());
147   if (!cspi_check_ev ("AccessibleComponent_getExtents"))
148     {
149       *x = *y = *width = *height = 0;    
150     }
151   else
152     {
153       *x = bbox.x;
154       *y = bbox.y;
155       *width = bbox.width;
156       *height = bbox.height;
157     }
158 }
159
160 /**
161  * AccessibleComponent_getPosition:
162  * @obj: a pointer to the #AccessibleComponent to query.
163  * @x: a pointer to a #long into which the minimum x coordinate will be returned.
164  * @y: a pointer to a #long into which the minimum y coordinate will be returned.
165  * @ctype: the desired coordinate system into which to return the results,
166  *         (e.g. CSPI_COORD_TYPE_WINDOW, CSPI_COORD_TYPE_SCREEN).
167  *
168  * Get the minimum x and y coordinates of the specified #AccessibleComponent.
169  *
170  **/
171 void
172 AccessibleComponent_getPosition (AccessibleComponent *obj,
173                                  long int *x,
174                                  long int *y,
175                                  AccessibleCoordType ctype)
176 {
177   CORBA_long cx, cy;
178
179   cspi_return_if_fail (obj != NULL);
180
181   Accessibility_Component_getPosition (CSPI_OBJREF (obj),
182                                        &cx, &cy, ctype, cspi_ev ());
183
184   if (!cspi_check_ev ("getPosition"))
185     {
186       *x = *y = 0;
187     }
188   else
189     {
190       *x = cx;
191       *y = cy;
192     }
193 }
194
195 /**
196  * AccessibleComponent_getSize:
197  * @obj: a pointer to the #AccessibleComponent to query.
198  * @width: a pointer to a #long into which the x extents (width) will be returned.
199  * @height: a pointer to a #long into which the y extents (height) will be returned.
200  *
201  * Get the size of the specified #AccessibleComponent.
202  *
203  **/
204 void
205 AccessibleComponent_getSize (AccessibleComponent *obj,
206                              long int *width,
207                              long int *height)
208 {
209   cspi_return_if_fail (obj != NULL);
210
211   Accessibility_Component_getSize (CSPI_OBJREF (obj),
212                                    (CORBA_long *) width,
213                                    (CORBA_long *) height,
214                                    cspi_ev ());
215 }
216
217 /**
218  * AccessibleComponent_getLayer:
219  * @obj: a pointer to the #AccessibleComponent to query.
220  *
221  * Query which layer the component is painted into, to help determine its 
222  *      visibility in terms of stacking order.
223  *
224  * Returns: the #AccessibleComponentLayer into which this component is painted.
225  **/
226 AccessibleComponentLayer
227 AccessibleComponent_getLayer (AccessibleComponent *obj)
228 {
229   AccessibleComponentLayer     retval;
230   Accessibility_ComponentLayer zlayer;
231
232   cspi_return_val_if_fail (obj != NULL, FALSE);
233
234   zlayer = Accessibility_Component_getLayer (CSPI_OBJREF (obj),
235                                              cspi_ev ());
236
237   cspi_return_val_if_ev ("getLayer", SPI_LAYER_INVALID);
238
239   switch (zlayer)
240     {
241     case Accessibility_LAYER_BACKGROUND:
242       retval = SPI_LAYER_BACKGROUND;
243       break;
244     case Accessibility_LAYER_CANVAS:      
245       retval = SPI_LAYER_CANVAS;
246       break;
247     case Accessibility_LAYER_WIDGET:      
248       retval = SPI_LAYER_WIDGET;
249       break;
250     case Accessibility_LAYER_MDI:         
251       retval = SPI_LAYER_MDI;
252       break;
253     case Accessibility_LAYER_POPUP:       
254       retval = SPI_LAYER_POPUP;
255       break;
256     case Accessibility_LAYER_OVERLAY:     
257       retval = SPI_LAYER_OVERLAY;
258       break;
259     default:
260       retval = SPI_LAYER_INVALID;
261       break;
262     }
263
264   return retval;
265 }
266
267 /**
268  * AccessibleComponent_getMDIZOrder:
269  * @obj: a pointer to the #AccessibleComponent to query.
270  *
271  * Query the z stacking order of a component which is in the MDI layer.
272  *       (Bigger z-order numbers mean nearer the top)
273  *
274  * Returns: a short integer indicating the stacking order of the component 
275  *       in the MDI layer, or -1 if the component is not in the MDI layer.
276  **/
277 short
278 AccessibleComponent_getMDIZOrder (AccessibleComponent *obj)
279 {
280   short retval;
281
282   cspi_return_val_if_fail (obj != NULL, FALSE);
283
284   retval = Accessibility_Component_getMDIZOrder (CSPI_OBJREF (obj),
285                                                  cspi_ev ());
286
287   cspi_return_val_if_ev ("getMDIZOrder", FALSE);
288
289   return retval;
290 }
291
292 /**
293  * AccessibleComponent_grabFocus:
294  * @obj: a pointer to the #AccessibleComponent on which to operate.
295  *
296  * Attempt to set the keyboard input focus to the specified
297  *         #AccessibleComponent.
298  *
299  * Returns: #TRUE if successful, #FALSE otherwise.
300  *
301  **/
302 SPIBoolean
303 AccessibleComponent_grabFocus (AccessibleComponent *obj)
304 {
305   short retval;
306
307   cspi_return_val_if_fail (obj != NULL, FALSE);
308
309   retval = Accessibility_Component_grabFocus (CSPI_OBJREF (obj),
310                                               cspi_ev ());
311
312   cspi_return_val_if_ev ("grabFocus", FALSE);
313
314   return retval;
315 }
316