2
* AT-SPI - Assistive Technology Service Provider Interface
3
* (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
5
* Copyright 2001, 2002 Sun Microsystems Inc.,
6
* Copyright 2001, 2002 Ximian, Inc.
7
* Copyright 2013 SUSE LLC.
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.
25
#include <stdlib.h> /* for malloc */
26
#include "atspi-private.h"
29
get_object_array_and_unref (DBusMessage *reply)
31
DBusMessageIter iter, iter_array;
37
if (strcmp (dbus_message_get_signature (reply), "(so)") != 0)
39
dbus_message_unref (reply);
43
array = g_ptr_array_new ();
45
dbus_message_iter_init (reply, &iter);
46
dbus_message_iter_recurse (&iter, &iter_array);
47
while (dbus_message_iter_get_arg_type (&iter_array) != DBUS_TYPE_INVALID)
49
AtspiAccessible *accessible = _atspi_dbus_return_accessible_from_iter (&iter_array);
50
g_ptr_array_add (array, accessible);
52
dbus_message_unref (reply);
57
* atspi_table_cell_get_column_span:
58
* @obj: a GObject instance that implements AtspiTableCellIface
60
* Returns the number of columns occupied by this cell accessible.
62
* Returns: a gint representing the number of columns occupied by this cell,
63
* or 0 if the cell does not implement this method.
66
atspi_table_cell_get_column_span (AtspiTableCell *obj, GError **error)
68
dbus_int32_t retval = -1;
70
g_return_val_if_fail (obj != NULL, -1);
72
_atspi_dbus_get_property (obj, atspi_interface_table_cell, "ColumnSpan",
79
* atspi_table_cell_get_column_header_cells:
80
* @obj: a GObject instance that implements AtspiTableCellIface
82
* Returns the column headers as an array of cell accessibles.
84
* Returns: (element-type AtspiAccessible) (transfer full): a GPtrArray of
85
* AtspiAccessibles representing the column header cells.
88
atspi_table_cell_get_column_header_cells (AtspiTableCell *obj, GError **error)
92
g_return_val_if_fail (obj != NULL, NULL);
94
reply = _atspi_dbus_call_partial (obj, atspi_interface_table_cell, "GetColumnHeaderCells", error, "");
96
return get_object_array_and_unref (reply);
100
* atspi_table_cell_get_column_index:
101
* @obj: a GObject instance that implements AtspiTableCellIface
103
* Translates this cell accessible into the corresponding column index.
105
* Returns: the column index for this cell, or -1 if unimplemented.
108
atspi_table_cell_get_column_index (AtspiTableCell *obj, GError **error)
110
dbus_int32_t retval = -1;
112
g_return_val_if_fail (obj != NULL, -1);
114
_atspi_dbus_get_property (obj, atspi_interface_table_cell, "ColumnIndex",
115
error, "i", &retval);
121
* atspi_table_cell_get_row_span:
122
* @obj: a GObject instance that implements AtspiTableCellIface
124
* Returns the number of rows occupied by this cell accessible.
126
* Returns: a gint representing the number of rows occupied by this cell,
127
* or 0 if the cell does not implement this method.
130
atspi_table_cell_get_row_span (AtspiTableCell *obj, GError **error)
132
dbus_int32_t retval = -1;
134
g_return_val_if_fail (obj != NULL, -1);
136
_atspi_dbus_get_property (obj, atspi_interface_table_cell, "RowSpan",
137
error, "i", &retval);
143
* atspi_table_cell_get_row_header_cells:
144
* @obj: a GObject instance that implements AtspiTableCellIface
146
* Returns the row headers as an array of cell accessibles.
148
* Returns: (element-type AtspiAccessible) (transfer full): a GPtrArray of
149
* AtspiAccessibles representing the row header cells.
152
atspi_table_cell_get_row_header_cells (AtspiTableCell *obj, GError **error)
156
g_return_val_if_fail (obj != NULL, NULL);
158
reply = _atspi_dbus_call_partial (obj, atspi_interface_table_cell, "GetRowHeaderCells", error, "");
160
return get_object_array_and_unref (reply);
164
* atspi_table_cell_get_position:
165
* @obj: a GObject instance that implements AtspiTableCellIface
166
* @row: (out): the row of the given cell.
167
* @column: (out): the column of the given cell.
169
* Retrieves the tabular position of this cell.
171
* Returns: TRUE if successful, FALSE otherwise.
174
atspi_table_cell_get_position (AtspiTableCell *obj,
180
DBusMessageIter iter, iter_struct, iter_variant;
181
dbus_int32_t d_row = -1, d_column = -1;
184
g_return_val_if_fail (obj != NULL, -1);
186
reply = _atspi_dbus_call_partial (obj, "org.freedesktop.DBus.Properties",
188
atspi_interface_table_cell, "Position");
190
dbus_message_iter_init (reply, &iter);
192
/* TODO: Return error here */
193
if (dbus_message_iter_get_arg_type (&iter) != 'v')
196
dbus_message_iter_recurse (&iter, &iter_variant);
197
iter_sig = dbus_message_iter_get_signature (&iter_variant);
198
/* TODO: Also report error here */
199
if (strcmp (iter_sig, "(ii)") != 0)
201
dbus_free (iter_sig);
204
dbus_free (iter_sig);
206
dbus_message_iter_recurse (&iter_variant, &iter_struct);
207
dbus_message_iter_get_basic (&iter_struct, &d_row);
210
dbus_message_iter_next (&iter_struct);
211
dbus_message_iter_get_basic (&iter_struct, &d_column);
214
dbus_message_unref (reply);
219
* atspi_table_cell_get_row_column_span:
220
* @obj: a GObject instance that implements AtspiTableCellIface
221
* @row: (out): the row index of the given cell.
222
* @column: (out): the column index of the given cell.
223
* @row_span: (out): the number of rows occupied by this cell.
224
* @column_span: (out): the number of columns occupied by this cell.
226
* Gets the row and column indexes and extents of this cell accessible.
229
atspi_table_cell_get_row_column_span (AtspiTableCell *obj,
236
dbus_int32_t d_row = 0, d_column = 0, d_row_span = 0, d_column_span = 0;
247
g_return_if_fail (obj != NULL);
249
_atspi_dbus_call (obj, atspi_interface_table_cell, "GetRowColumnSpan",
250
error, "=>iiii", &d_row, &d_column,
251
&d_row_span, &d_column_span);
258
*row_span = d_row_span;
260
*column_span = d_column_span;
264
* atspi_table_cell_get_table:
265
* @obj: a GObject instance that implements AtspiTableCellIface
267
* Returns a reference to the accessible of the containing table.
269
* Returns: (transfer full): the AtspiAccessible for the containing table.
272
atspi_table_cell_get_table (AtspiTableCell *obj, GError **error)
274
AtspiAccessible *retval = NULL;
276
g_return_val_if_fail (obj != NULL, NULL);
278
_atspi_dbus_get_property (obj, atspi_interface_table_cell, "Table",
279
error, "(so)", &retval);
285
atspi_table_cell_base_init (AtspiTableCell *klass)
290
atspi_table_cell_get_type (void)
292
static GType type = 0;
295
static const GTypeInfo tinfo =
297
sizeof (AtspiTableCell),
298
(GBaseInitFunc) atspi_table_cell_base_init,
299
(GBaseFinalizeFunc) NULL,
302
type = g_type_register_static (G_TYPE_INTERFACE, "AtspiTableCell", &tinfo, 0);