2 * AT-SPI - Assistive Technology Service Provider Interface
3 * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
5 * Copyright 2008 Novell, Inc.
6 * Copyright 2001, 2002 Sun Microsystems Inc.,
7 * Copyright 2001, 2002 Ximian, Inc.
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public
11 * License as published by the Free Software Foundation; either
12 * version 2 of the License, or (at your option) any later version.
14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Library General Public License for more details.
19 * You should have received a copy of the GNU Library General Public
20 * License along with this library; if not, write to the
21 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
22 * Boston, MA 02111-1307, USA.
26 #include <droute/droute.h>
31 #include "introspection.h"
34 impl_contains (DBusConnection * bus, DBusMessage * message, void *user_data)
36 AtkComponent *component = (AtkComponent *) user_data;
38 dbus_uint32_t coord_type;
43 g_return_val_if_fail (ATK_IS_COMPONENT (user_data),
44 droute_not_yet_handled_error (message));
46 dbus_error_init (&error);
47 if (!dbus_message_get_args
48 (message, &error, DBUS_TYPE_INT32, &x, DBUS_TYPE_INT32, &y,
49 DBUS_TYPE_UINT32, &coord_type, DBUS_TYPE_INVALID))
51 return droute_invalid_arguments_error (message);
54 atk_component_contains (component, x, y, (AtkCoordType) coord_type);
55 reply = dbus_message_new_method_return (message);
58 dbus_message_append_args (reply, DBUS_TYPE_BOOLEAN, &retval,
65 impl_GetAccessibleAtPoint (DBusConnection * bus, DBusMessage * message,
68 AtkComponent *component = (AtkComponent *) user_data;
70 dbus_uint32_t coord_type;
75 g_return_val_if_fail (ATK_IS_COMPONENT (user_data),
76 droute_not_yet_handled_error (message));
78 dbus_error_init (&error);
79 if (!dbus_message_get_args
80 (message, &error, DBUS_TYPE_INT32, &x, DBUS_TYPE_INT32, &y,
81 DBUS_TYPE_UINT32, &coord_type, DBUS_TYPE_INVALID))
83 return droute_invalid_arguments_error (message);
86 atk_component_ref_accessible_at_point (component, x, y,
87 (AtkCoordType) coord_type);
88 reply = spi_object_return_reference (message, child);
90 g_object_unref (child);
96 impl_GetExtents (DBusConnection * bus, DBusMessage * message, void *user_data)
98 AtkComponent *component = (AtkComponent *) user_data;
100 dbus_uint32_t coord_type;
101 gint ix, iy, iwidth, iheight;
103 g_return_val_if_fail (ATK_IS_COMPONENT (user_data),
104 droute_not_yet_handled_error (message));
106 dbus_error_init (&error);
107 if (!dbus_message_get_args
108 (message, &error, DBUS_TYPE_UINT32, &coord_type, DBUS_TYPE_INVALID))
110 return droute_invalid_arguments_error (message);
112 atk_component_get_extents (component, &ix, &iy, &iwidth, &iheight,
113 (AtkCoordType) coord_type);
114 return spi_dbus_return_rect (message, ix, iy, iwidth, iheight);
118 impl_GetPosition (DBusConnection * bus, DBusMessage * message,
121 AtkComponent *component = (AtkComponent *) user_data;
123 dbus_uint32_t coord_type;
128 g_return_val_if_fail (ATK_IS_COMPONENT (user_data),
129 droute_not_yet_handled_error (message));
131 dbus_error_init (&error);
132 if (!dbus_message_get_args
133 (message, &error, DBUS_TYPE_UINT32, &coord_type, DBUS_TYPE_INVALID))
135 return droute_invalid_arguments_error (message);
137 atk_component_get_position (component, &ix, &iy, (AtkCoordType) coord_type);
140 reply = dbus_message_new_method_return (message);
143 dbus_message_append_args (reply, DBUS_TYPE_INT32, &x, DBUS_TYPE_INT32,
144 &y, DBUS_TYPE_INVALID);
150 impl_GetSize (DBusConnection * bus, DBusMessage * message, void *user_data)
152 AtkComponent *component = (AtkComponent *) user_data;
153 gint iwidth = 0, iheight = 0;
154 dbus_int32_t width, height;
157 g_return_val_if_fail (ATK_IS_COMPONENT (user_data),
158 droute_not_yet_handled_error (message));
160 atk_component_get_size (component, &iwidth, &iheight);
163 reply = dbus_message_new_method_return (message);
166 dbus_message_append_args (reply, DBUS_TYPE_INT32, &width,
167 DBUS_TYPE_INT32, &height, DBUS_TYPE_INVALID);
173 impl_GetLayer (DBusConnection * bus, DBusMessage * message, void *user_data)
175 AtkComponent *component = (AtkComponent *) user_data;
180 g_return_val_if_fail (ATK_IS_COMPONENT (user_data),
181 droute_not_yet_handled_error (message));
183 atklayer = atk_component_get_layer (component);
187 case ATK_LAYER_BACKGROUND:
188 rv = ATSPI_LAYER_BACKGROUND;
190 case ATK_LAYER_CANVAS:
191 rv = ATSPI_LAYER_CANVAS;
193 case ATK_LAYER_WIDGET:
194 rv = ATSPI_LAYER_WIDGET;
197 rv = ATSPI_LAYER_MDI;
199 case ATK_LAYER_POPUP:
200 rv = ATSPI_LAYER_POPUP;
202 case ATK_LAYER_OVERLAY:
203 rv = ATSPI_LAYER_OVERLAY;
205 case ATK_LAYER_WINDOW:
206 rv = ATSPI_LAYER_WINDOW;
209 rv = ATSPI_LAYER_INVALID;
212 reply = dbus_message_new_method_return (message);
215 dbus_message_append_args (reply, DBUS_TYPE_UINT32, &rv,
222 impl_GetMDIZOrder (DBusConnection * bus, DBusMessage * message,
225 AtkComponent *component = (AtkComponent *) user_data;
229 g_return_val_if_fail (ATK_IS_COMPONENT (user_data),
230 droute_not_yet_handled_error (message));
232 rv = atk_component_get_mdi_zorder (component);
233 reply = dbus_message_new_method_return (message);
236 dbus_message_append_args (reply, DBUS_TYPE_INT16, &rv,
243 impl_GrabFocus (DBusConnection * bus, DBusMessage * message, void *user_data)
245 AtkComponent *component = (AtkComponent *) user_data;
249 g_return_val_if_fail (ATK_IS_COMPONENT (user_data),
250 droute_not_yet_handled_error (message));
252 rv = atk_component_grab_focus (component);
253 reply = dbus_message_new_method_return (message);
256 dbus_message_append_args (reply, DBUS_TYPE_BOOLEAN, &rv,
264 impl_registerFocusHandler (DBusConnection * bus, DBusMessage * message,
270 impl_deregisterFocusHandler (DBusConnection * bus, DBusMessage * message,
277 impl_GetAlpha (DBusConnection * bus, DBusMessage * message, void *user_data)
279 AtkComponent *component = (AtkComponent *) user_data;
283 g_return_val_if_fail (ATK_IS_COMPONENT (user_data),
284 droute_not_yet_handled_error (message));
286 rv = atk_component_get_alpha (component);
287 reply = dbus_message_new_method_return (message);
290 dbus_message_append_args (reply, DBUS_TYPE_DOUBLE, &rv,
297 impl_SetExtents (DBusConnection * bus, DBusMessage * message, void *user_data)
299 AtkComponent *component = (AtkComponent *) user_data;
300 DBusMessageIter iter, iter_struct;
301 dbus_uint32_t coord_type;
302 dbus_int32_t x, y, width, height;
306 g_return_val_if_fail (ATK_IS_COMPONENT (user_data),
307 droute_not_yet_handled_error (message));
309 if (strcmp (dbus_message_get_signature (message), "(iiii)u") != 0)
311 return droute_invalid_arguments_error (message);
314 dbus_message_iter_init (message, &iter);
315 dbus_message_iter_recurse (&iter, &iter_struct);
316 dbus_message_iter_get_basic (&iter_struct, &x);
317 dbus_message_iter_next (&iter_struct);
318 dbus_message_iter_get_basic (&iter_struct, &y);
319 dbus_message_iter_next (&iter_struct);
320 dbus_message_iter_get_basic (&iter_struct, &width);
321 dbus_message_iter_next (&iter_struct);
322 dbus_message_iter_get_basic (&iter_struct, &height);
323 dbus_message_iter_next (&iter_struct);
324 dbus_message_iter_next (&iter);
325 dbus_message_iter_get_basic (&iter, &coord_type);
327 ret = atk_component_set_extents (component, x, y, width, height, coord_type);
329 reply = dbus_message_new_method_return (message);
332 dbus_message_append_args (reply, DBUS_TYPE_BOOLEAN, &ret,
340 impl_SetPosition (DBusConnection * bus, DBusMessage * message, void *user_data)
342 AtkComponent *component = (AtkComponent *) user_data;
343 dbus_uint32_t coord_type;
348 g_return_val_if_fail (ATK_IS_COMPONENT (user_data),
349 droute_not_yet_handled_error (message));
351 if (!dbus_message_get_args
352 (message, NULL, DBUS_TYPE_INT32, &x, DBUS_TYPE_INT32, &y,
353 DBUS_TYPE_UINT32, &coord_type, DBUS_TYPE_INVALID))
355 return droute_invalid_arguments_error (message);
358 ret = atk_component_set_position (component, x, y, coord_type);
360 reply = dbus_message_new_method_return (message);
363 dbus_message_append_args (reply, DBUS_TYPE_BOOLEAN, &ret,
371 impl_SetSize (DBusConnection * bus, DBusMessage * message, void *user_data)
373 AtkComponent *component = (AtkComponent *) user_data;
374 dbus_int32_t width, height;
378 g_return_val_if_fail (ATK_IS_COMPONENT (user_data),
379 droute_not_yet_handled_error (message));
381 if (!dbus_message_get_args
382 (message, NULL, DBUS_TYPE_INT32, &width, DBUS_TYPE_INT32, &height,
385 return droute_invalid_arguments_error (message);
388 ret = atk_component_set_size (component, width, height);
390 reply = dbus_message_new_method_return (message);
393 dbus_message_append_args (reply, DBUS_TYPE_BOOLEAN, &ret,
400 static DRouteMethod methods[] = {
401 {impl_contains, "contains"},
402 {impl_GetAccessibleAtPoint, "GetAccessibleAtPoint"},
403 {impl_GetExtents, "GetExtents"},
404 {impl_GetPosition, "GetPosition"},
405 {impl_GetSize, "GetSize"},
406 {impl_GetLayer, "GetLayer"},
407 {impl_GetMDIZOrder, "GetMDIZOrder"},
408 {impl_GrabFocus, "GrabFocus"},
409 //{impl_registerFocusHandler, "registerFocusHandler"},
410 //{impl_deregisterFocusHandler, "deregisterFocusHandler"},
411 {impl_GetAlpha, "GetAlpha"},
412 {impl_SetExtents, "SetExtents"},
413 {impl_SetPosition, "SetPosition"},
414 {impl_SetSize, "SetSize"},
419 spi_initialize_component (DRoutePath * path)
421 droute_path_add_interface (path,
422 ATSPI_DBUS_INTERFACE_COMPONENT, spi_org_a11y_atspi_Component, methods, NULL);