2 * AT-SPI - Assistive Technology Service Provider Interface
3 * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
5 * Copyright 2013 SUSE LLC.
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>
30 #include "introspection.h"
33 impl_get_ColumnSpan (DBusMessageIter * iter, void *user_data)
35 AtkTableCell *cell = (AtkTableCell *) user_data;
36 g_return_val_if_fail (ATK_IS_TABLE_CELL (user_data), FALSE);
37 return droute_return_v_int32 (iter, atk_table_cell_get_column_span (cell));
41 message_from_object_array (DBusMessage *message, GPtrArray *array)
44 DBusMessageIter iter, iter_array;
48 reply = dbus_message_new_method_return (message);
52 dbus_message_iter_init_append (reply, &iter);
54 if (!dbus_message_iter_open_container
55 (&iter, DBUS_TYPE_ARRAY, "(so)", &iter_array))
56 return reply; /* TODO: handle out of memory */
57 len = (array? array->len: 0);
58 for (i = 0; i < len; i++)
60 spi_object_append_reference (&iter_array, g_ptr_array_index (array, i));
62 dbus_message_iter_close_container (&iter, &iter_array);
63 g_ptr_array_unref (array);
68 impl_GetColumnHeaderCells (DBusConnection * bus, DBusMessage * message,
71 AtkTableCell *cell = user_data;
74 g_return_val_if_fail (ATK_IS_TABLE_CELL (user_data),
75 droute_not_yet_handled_error (message));
77 array = atk_table_cell_get_column_header_cells (cell);
78 return message_from_object_array (message, array);
82 impl_get_RowSpan (DBusMessageIter * iter, void *user_data)
84 AtkTableCell *cell = (AtkTableCell *) user_data;
85 g_return_val_if_fail (ATK_IS_TABLE_CELL (user_data), FALSE);
86 return droute_return_v_int32 (iter, atk_table_cell_get_row_span (cell));
90 impl_GetRowHeaderCells (DBusConnection * bus, DBusMessage * message,
93 AtkTableCell *cell = user_data;
96 g_return_val_if_fail (ATK_IS_TABLE_CELL (user_data),
97 droute_not_yet_handled_error (message));
99 array = atk_table_cell_get_row_header_cells (cell);
100 return message_from_object_array (message, array);
104 impl_get_Position (DBusMessageIter * iter, void *user_data)
106 AtkTableCell *cell = (AtkTableCell *) user_data;
107 gint row = -1, column = -1;
108 dbus_int32_t d_row, d_column;
109 DBusMessageIter iter_struct, iter_variant;
111 g_return_val_if_fail (ATK_IS_TABLE_CELL (user_data), FALSE);
112 if (!atk_table_cell_get_position (cell, &row, &column))
117 dbus_message_iter_open_container (iter, DBUS_TYPE_STRUCT, "(ii)", &iter_variant);
118 dbus_message_iter_open_container (&iter_struct, DBUS_TYPE_STRUCT, NULL, &iter_struct);
119 dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_INT32, &row);
120 dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_INT32, &column);
121 dbus_message_iter_close_container (&iter_variant, &iter_struct);
122 dbus_message_iter_close_container (iter, &iter_variant);
127 impl_get_Table (DBusMessageIter * iter, void *user_data)
129 AtkTableCell *cell = (AtkTableCell *) user_data;
132 g_return_val_if_fail (ATK_IS_TABLE_CELL (user_data), FALSE);
134 table = atk_table_cell_get_table (cell);
137 spi_object_append_reference (iter, table);
142 impl_GetRowColumnSpan (DBusConnection * bus, DBusMessage * message,
145 AtkTableCell *cell = (AtkTableCell *) user_data;
146 gint row, column, row_span, column_span;
147 dbus_int32_t d_row, d_column, d_row_span, d_column_span;
150 g_return_val_if_fail (ATK_IS_TABLE (user_data),
151 droute_not_yet_handled_error (message));
152 atk_table_cell_get_row_column_span (cell, &row, &column, &row_span,
156 d_row_span = row_span;
157 d_column_span = column_span;
158 reply = dbus_message_new_method_return (message);
161 dbus_message_append_args (reply, DBUS_TYPE_INT32, &d_row, DBUS_TYPE_INT32,
162 &d_column, DBUS_TYPE_INT32, &d_row_span,
163 DBUS_TYPE_INT32, &d_column_span,
169 static DRouteMethod methods[] = {
170 {impl_GetRowHeaderCells, "GetRowHeaderCells"},
171 {impl_GetColumnHeaderCells, "GetColumnHeaderCells"},
172 {impl_GetRowColumnSpan, "GetRowColumnSpan"},
176 static DRouteProperty properties[] = {
177 {impl_get_ColumnSpan, NULL, "ColumnSpan"},
178 {impl_get_Position, NULL, "Position"},
179 {impl_get_RowSpan, NULL, "RowSpan"},
180 {impl_get_Table, NULL, "Table"},
185 spi_initialize_table_cell (DRoutePath * path)
187 droute_path_add_interface (path,
188 ATSPI_DBUS_INTERFACE_TABLE_CELL,
189 spi_org_a11y_atspi_TableCell,
190 methods, properties);