[at-spi2-core] Add AtspitableCell, tracking the new atk interface



commit e6e8611f117791e42a4eb971fd75840cb654a365
Author: Mike Gorse <mgorse suse com>
Date:   Tue Feb 18 12:06:49 2014 -0600

    Add AtspitableCell, tracking the new atk interface

 atspi/Makefile.am          |    2 +
 atspi/atspi-accessible.c   |   41 ++++++
 atspi/atspi-accessible.h   |    2 +
 atspi/atspi-constants.h    |    1 +
 atspi/atspi-misc-private.h |    1 +
 atspi/atspi-misc.c         |    2 +
 atspi/atspi-table-cell.c   |  300 ++++++++++++++++++++++++++++++++++++++++++++
 atspi/atspi-table-cell.h   |   74 +++++++++++
 atspi/atspi-types.h        |    1 +
 atspi/atspi.h              |    1 +
 xml/Accessibility.xml      |    1 +
 xml/TableCell.xml          |   22 ++++
 12 files changed, 448 insertions(+), 0 deletions(-)
---
diff --git a/atspi/Makefile.am b/atspi/Makefile.am
index bc35166..2ec819b 100644
--- a/atspi/Makefile.am
+++ b/atspi/Makefile.am
@@ -46,6 +46,7 @@ atspi-gmain.h \
        atspi-selection.h \
        atspi-stateset.h \
        atspi-table.h \
+       atspi-table-cell.h \
        atspi-text.h \
        atspi-types.h \
        atspi-value.h
@@ -100,6 +101,7 @@ libatspi_la_SOURCES =               \
        atspi-stateset.c \
        atspi-stateset.h \
        atspi-table.c \
+       atspi-table-cell.c \
        atspi-table.h \
        atspi-text.c \
        atspi-text.h \
diff --git a/atspi/atspi-accessible.c b/atspi/atspi-accessible.c
index bc0ad4d..4ce89e3 100644
--- a/atspi/atspi-accessible.c
+++ b/atspi/atspi-accessible.c
@@ -75,6 +75,11 @@ atspi_table_interface_init (AtspiTable *table)
 }
 
 static void
+atspi_table_cell_interface_init (AtspiTableCell *cell)
+{
+}
+
+static void
 atspi_text_interface_init (AtspiText *text)
 {
 }
@@ -95,6 +100,7 @@ G_DEFINE_TYPE_WITH_CODE (AtspiAccessible, atspi_accessible, ATSPI_TYPE_OBJECT,
                          G_IMPLEMENT_INTERFACE (ATSPI_TYPE_IMAGE, atspi_image_interface_init)
                          G_IMPLEMENT_INTERFACE (ATSPI_TYPE_SELECTION, atspi_selection_interface_init)
                          G_IMPLEMENT_INTERFACE (ATSPI_TYPE_TABLE, atspi_table_interface_init)
+                         G_IMPLEMENT_INTERFACE (ATSPI_TYPE_TABLE_CELL, atspi_table_cell_interface_init)
                          G_IMPLEMENT_INTERFACE (ATSPI_TYPE_TEXT, atspi_text_interface_init)
                          G_IMPLEMENT_INTERFACE (ATSPI_TYPE_VALUE, atspi_value_interface_init))
 
@@ -1020,6 +1026,23 @@ atspi_accessible_is_table (AtspiAccessible *obj)
 }
 
 /**
+ * atspi_accessible_is_table_cell:
+ * @obj: a pointer to the #AtspiAccessible instance to query.
+ *
+ * Query whether the specified #AtspiAccessible implements the
+ * #AtspiTableCell interface.
+ *
+ * Returns: #TRUE if @obj implements the #AtspiTable interface,
+ *          #FALSE otherwise.
+**/
+gboolean
+atspi_accessible_is_table_cell (AtspiAccessible *obj)
+{
+  return _atspi_accessible_is_a (obj,
+                             atspi_interface_table_cell);
+}
+
+/**
  * atspi_accessible_is_streamable_content:
  * @obj: a pointer to the #AtspiAccessible instance to query.
  *
@@ -1425,6 +1448,22 @@ atspi_accessible_get_table_iface (AtspiAccessible *obj)
 }
 
 /**
+ * atspi_accessible_get_table_cell:
+ * @obj: a pointer to the #AtspiAccessible instance to query.
+ *
+ * Gets the #AtspiTableCell interface for an #AtspiAccessible.
+ *
+ * Returns: (transfer full): a pointer to an #AtspiTableCell interface instance,
+ *          or NULL if @obj does not implement #AtspiTable.
+ **/
+AtspiTableCell *
+atspi_accessible_get_table_cell (AtspiAccessible *obj)
+{
+  return (_atspi_accessible_is_a (obj, atspi_interface_table_cell) ?
+          g_object_ref (ATSPI_TABLE_CELL (obj)) : NULL);  
+}
+
+/**
  * atspi_accessible_get_text:
  * @obj: a pointer to the #AtspiAccessible instance to query.
  *
@@ -1541,6 +1580,8 @@ atspi_accessible_get_interfaces (AtspiAccessible *obj)
     append_const_val (ret, "Selection");
   if (atspi_accessible_is_table (obj))
     append_const_val (ret, "Table");
+  if (atspi_accessible_is_table_cell (obj))
+    append_const_val (ret, "TableCell");
   if (atspi_accessible_is_text (obj))
     append_const_val (ret, "Text");
   if (atspi_accessible_is_value (obj))
diff --git a/atspi/atspi-accessible.h b/atspi/atspi-accessible.h
index 32439ec..2c3f8cc 100644
--- a/atspi/atspi-accessible.h
+++ b/atspi/atspi-accessible.h
@@ -128,6 +128,8 @@ AtspiSelection * atspi_accessible_get_selection (AtspiAccessible *obj);
 
 AtspiTable * atspi_accessible_get_table (AtspiAccessible *obj);
 
+AtspiTableCell * atspi_accessible_get_table_cell (AtspiAccessible *obj);
+
 AtspiText * atspi_accessible_get_text (AtspiAccessible *obj);
 
 AtspiValue * atspi_accessible_get_value (AtspiAccessible *obj);
diff --git a/atspi/atspi-constants.h b/atspi/atspi-constants.h
index 4a84428..3675bcc 100644
--- a/atspi/atspi-constants.h
+++ b/atspi/atspi-constants.h
@@ -1322,6 +1322,7 @@ typedef enum
 #define ATSPI_DBUS_INTERFACE_IMAGE "org.a11y.atspi.Image"
 #define ATSPI_DBUS_INTERFACE_SELECTION "org.a11y.atspi.Selection"
 #define ATSPI_DBUS_INTERFACE_TABLE "org.a11y.atspi.Table"
+#define ATSPI_DBUS_INTERFACE_TABLE_CELL "org.a11y.atspi.TableCell"
 #define ATSPI_DBUS_INTERFACE_TEXT "org.a11y.atspi.Text"
 #define ATSPI_DBUS_INTERFACE_VALUE "org.a11y.atspi.Value"
 #define ATSPI_DBUS_INTERFACE_SOCKET "org.a11y.atspi.Socket"
diff --git a/atspi/atspi-misc-private.h b/atspi/atspi-misc-private.h
index 4e2df7b..cd472b0 100644
--- a/atspi/atspi-misc-private.h
+++ b/atspi/atspi-misc-private.h
@@ -65,6 +65,7 @@ extern const char *atspi_interface_image;
 extern const char *atspi_interface_registry;
 extern const char *atspi_interface_selection;
 extern const char *atspi_interface_table;
+extern const char *atspi_interface_table_cell;
 extern const char *atspi_interface_text;
 extern const char *atspi_interface_cache;
 extern const char *atspi_interface_value;
diff --git a/atspi/atspi-misc.c b/atspi/atspi-misc.c
index 48dd063..c52fe9f 100644
--- a/atspi/atspi-misc.c
+++ b/atspi/atspi-misc.c
@@ -68,6 +68,7 @@ const char *atspi_interface_image = ATSPI_DBUS_INTERFACE_IMAGE;
 const char *atspi_interface_registry = ATSPI_DBUS_INTERFACE_REGISTRY;
 const char *atspi_interface_selection = ATSPI_DBUS_INTERFACE_SELECTION;
 const char *atspi_interface_table = ATSPI_DBUS_INTERFACE_TABLE;
+const char *atspi_interface_table_cell = ATSPI_DBUS_INTERFACE_TABLE_CELL;
 const char *atspi_interface_text = ATSPI_DBUS_INTERFACE_TEXT;
 const char *atspi_interface_cache = ATSPI_DBUS_INTERFACE_CACHE;
 const char *atspi_interface_value = ATSPI_DBUS_INTERFACE_VALUE;
@@ -87,6 +88,7 @@ static const char *interfaces[] =
   "org.a11y.atspi.LoginHelper",
   ATSPI_DBUS_INTERFACE_SELECTION,
   ATSPI_DBUS_INTERFACE_TABLE,
+  ATSPI_DBUS_INTERFACE_TABLE_CELL,
   ATSPI_DBUS_INTERFACE_TEXT,
   ATSPI_DBUS_INTERFACE_VALUE,
   NULL
diff --git a/atspi/atspi-table-cell.c b/atspi/atspi-table-cell.c
new file mode 100644
index 0000000..44ff4d0
--- /dev/null
+++ b/atspi/atspi-table-cell.c
@@ -0,0 +1,300 @@
+/*
+ * AT-SPI - Assistive Technology Service Provider Interface
+ * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
+ *
+ * Copyright 2001, 2002 Sun Microsystems Inc.,
+ * Copyright 2001, 2002 Ximian, Inc.
+ * Copyright 2013 SUSE LLC.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <stdlib.h> /* for malloc */
+#include "atspi-private.h"
+
+static GPtrArray *
+get_object_array_and_unref (DBusMessage *reply)
+{
+  DBusMessageIter iter, iter_array;
+  GPtrArray *array;
+
+  if (!reply)
+    return NULL;
+
+  if (strcmp (dbus_message_get_signature (reply), "(so)") != 0)
+  {
+    dbus_message_unref (reply);
+    return NULL;
+  }
+
+  array = g_ptr_array_new ();
+
+  dbus_message_iter_init (reply, &iter);
+  dbus_message_iter_recurse (&iter, &iter_array);
+  while (dbus_message_iter_get_arg_type (&iter_array) != DBUS_TYPE_INVALID)
+  {
+    AtspiAccessible *accessible = _atspi_dbus_return_accessible_from_iter (&iter_array);
+    g_ptr_array_add (array, accessible);
+  }
+  dbus_message_unref (reply);
+  return array;
+}
+
+/**
+ * atspi_table_cell_get_column_span:
+ * @obj: a GObject instance that implements AtspiTableCellIface
+ *
+ * Returns the number of columns occupied by this cell accessible.
+ *
+ * Returns: a gint representing the number of columns occupied by this cell,
+ * or 0 if the cell does not implement this method.
+ */
+gint
+atspi_table_cell_get_column_span (AtspiTableCell *obj, GError *error)
+{
+  dbus_int32_t retval = -1;
+
+  g_return_val_if_fail (obj != NULL, -1);
+
+  _atspi_dbus_get_property (obj, atspi_interface_table_cell, "ColumnSpan",
+                            error, "i", &retval);
+         
+  return retval;
+}
+
+/**
+ * atspi_table_cell_get_column_header_cells:
+ * @obj: a GObject instance that implements AtspiTableCellIface
+ *
+ * Returns the column headers as an array of cell accessibles.
+ *
+ * Returns: (element-type AtspiAccessible) (transfer full): a GPtrArray of
+ * AtspiAccessibles representing the column header cells.
+  */
+GPtrArray *
+atspi_table_cell_get_column_header_cells (AtspiTableCell *obj, GError **error)
+{
+  DBusMessage *reply;
+
+  g_return_val_if_fail (obj != NULL, NULL);
+
+  reply = _atspi_dbus_call_partial (obj, atspi_interface_table_cell, "GetColumnHeaderCells", error, "");
+         
+  return get_object_array_and_unref (reply);
+}
+
+/**
+ * atspi_table_cell_get_column_index:
+ * @obj: a GObject instance that implements AtspiTableCellIface
+ *
+ * Translates this cell accessible into the corresponding column index.
+ *
+ * Returns: the column index for this cell, or -1 if unimplemented.
+ */
+gint
+atspi_table_cell_get_column_index (AtspiTableCell *obj, GError **error)
+{
+  dbus_int32_t retval = -1;
+
+  g_return_val_if_fail (obj != NULL, -1);
+
+  _atspi_dbus_get_property (obj, atspi_interface_table_cell, "ColumnIndex",
+                            error, "i", &retval);
+         
+  return retval;
+}
+
+/**
+ * atspi_table_cell_get_row_span:
+ * @obj: a GObject instance that implements AtspiTableCellIface
+ *
+ * Returns the number of rows occupied by this cell accessible.
+ *
+ * Returns: a gint representing the number of rows occupied by this cell,
+ * or 0 if the cell does not implement this method.
+ */
+gint
+atspi_table_cell_get_row_span (AtspiTableCell *obj, GError **error)
+{
+  dbus_int32_t retval = -1;
+
+  g_return_val_if_fail (obj != NULL, -1);
+
+  _atspi_dbus_get_property (obj, atspi_interface_table_cell, "RowSpan",
+                            error, "i", &retval);
+         
+  return retval;
+}
+
+/**
+ * atspi_table_cell_get_row_header_cells:
+ * @obj: a GObject instance that implements AtspiTableCellIface
+ *
+ * Returns the row headers as an array of cell accessibles.
+ *
+ * Returns: (element-type AtspiAccessible) (transfer full): a GPtrArray of
+ * AtspiAccessibles representing the row header cells.
+ *  */
+GPtrArray *
+atspi_table_cell_get_row_header_cells (AtspiTableCell *obj, GError **error)
+{
+  DBusMessage *reply;
+
+  g_return_val_if_fail (obj != NULL, NULL);
+
+  reply = _atspi_dbus_call_partial (obj, atspi_interface_table_cell, "GetRowHeaderCells", error, "");
+         
+  return get_object_array_and_unref (reply);
+}
+
+/**
+ * atspi_table_cell_get_position:
+ * @obj: a GObject instance that implements AtspiTableCellIface
+ * @row: (out): the row of the given cell.
+ * @column: (out): the column of the given cell.
+ *
+ * Retrieves the tabular position of this cell.
+ *
+ * Returns: TRUE if successful, FALSE otherwise.
+ */
+gint
+atspi_table_cell_get_position (AtspiTableCell *obj,
+                               gint *row,
+                               gint *column,
+                               GError *error)
+{
+  DBusMessage *reply;
+  DBusMessageIter iter, iter_struct, iter_variant;
+  dbus_int32_t d_row = -1, d_column = -1;
+
+  g_return_val_if_fail (obj != NULL, -1);
+
+  reply = _atspi_dbus_call_partial (obj, "org.freedesktop.DBuss.Properties",
+                                    "Get", atspi_interface_table_cell,
+                                    "Position");
+         
+  dbus_message_iter_init (reply, &iter);
+
+  /* TODO: Return error here */
+  if (dbus_message_iter_get_arg_type (&iter) != 'v')
+    return FALSE;
+
+  dbus_message_iter_recurse (&iter, &iter_variant);
+  /* TODO: Also report error here */
+  if (strcmp (dbus_message_iter_get_signature (&iter_variant), "(ii)") != 0)
+    return FALSE;
+
+  dbus_message_iter_recurse (&iter_variant, &iter_struct);
+  dbus_message_iter_get_basic (&iter_struct, &d_row);
+  if (row)
+    *row = d_row;
+  dbus_message_iter_next (&iter_struct);
+  dbus_message_iter_get_basic (&iter_struct, &d_column);
+  if (column)
+    *column = d_column;
+  dbus_message_unref (reply);
+  return TRUE;
+}
+
+/**
+ * atspi_table_cell_get_row_column_span:
+ * @obj: a GObject instance that implements AtspiTableCellIface
+ * @row: (out): the row index of the given cell.
+ * @column: (out): the column index of the given cell.
+ * @row_span: (out): the number of rows occupied by this cell.
+ * @column_span: (out): the number of columns occupied by this cell.
+ *
+ * Gets the row and column indexes and extents of this cell accessible.
+ */
+void
+atspi_table_cell_get_row_column_span (AtspiTableCell *obj,
+                                       gint *row,
+                                       gint *column,
+                                       gint *row_span,
+                                       gint *column_span,
+                                       GError **error)
+{
+  dbus_int32_t d_row = 0,  d_column = 0, d_row_span = 0, d_column_span = 0;
+
+  if (row)
+    *row = -1;
+  if (column)
+    *column = -1;
+  if (row_span)
+    *row_span = -1;
+  if (column_span)
+    *column_span = -1;
+
+  g_return_if_fail (obj != NULL);
+
+  _atspi_dbus_call (obj, atspi_interface_table_cell, "GetRowColumnSpan",
+                    error, "=>iiii", &d_row, &d_column,
+                    &d_row_span, &d_column_span);
+
+  if (row)
+    *row = d_row;
+  if (column)
+    *column = d_column;
+  if (row_span)
+    *row_span = d_row_span;
+  if (column_span)
+    *column_span = d_column_span;
+}
+
+/**
+ * atspi_table_cell_get_table:
+ * @obj: a GObject instance that implements AtspiTableCellIface
+ *
+ * Returns a reference to the accessible of the containing table.
+ *
+ * Returns: (transfer full): the AtspiAccessible for the containing table.
+ */
+AtspiAccessible *
+atspi_table_cell_get_table (AtspiTableCell *obj, GError **error)
+{
+  AtspiAccessible *retval = NULL;
+
+  g_return_val_if_fail (obj != NULL, NULL);
+
+  _atspi_dbus_get_property (obj, atspi_interface_table_cell, "Table",
+                            error, "(so)", &retval);
+         
+  return retval;
+}
+
+static void
+atspi_table_cell_base_init (AtspiTableCell *klass)
+{
+}
+
+GType
+atspi_table_cell_get_type (void)
+{
+  static GType type = 0;
+
+  if (!type) {
+    static const GTypeInfo tinfo =
+    {
+      sizeof (AtspiTableCell),
+      (GBaseInitFunc) atspi_table_cell_base_init,
+      (GBaseFinalizeFunc) NULL,
+    };
+
+    type = g_type_register_static (G_TYPE_INTERFACE, "AtspiTableCell", &tinfo, 0);
+
+  }
+  return type;
+}
diff --git a/atspi/atspi-table-cell.h b/atspi/atspi-table-cell.h
new file mode 100644
index 0000000..27d234d
--- /dev/null
+++ b/atspi/atspi-table-cell.h
@@ -0,0 +1,74 @@
+/*
+ * AT-SPI - Assistive Technology Service Provider Interface
+ * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
+ *
+ * Copyright 2002 Ximian, Inc.
+ *           2002 Sun Microsystems Inc.
+ * Copyright 2010, 2011 Novell, Inc.
+ *           
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _ATSPI_TABLE_CELL_H_
+#define _ATSPI_TABLE_CELL_H_
+
+#include "glib-object.h"
+
+#include "atspi-constants.h"
+
+#include "atspi-types.h"
+
+G_BEGIN_DECLS
+
+#define ATSPI_TYPE_TABLE_CELL                    (atspi_table_cell_get_type ())
+#define ATSPI_IS_TABLE_CELL(obj)                 G_TYPE_CHECK_INSTANCE_TYPE ((obj), ATSPI_TYPE_TABLE_CELL)
+#define ATSPI_TABLE_CELL(obj)                    G_TYPE_CHECK_INSTANCE_CAST ((obj), ATSPI_TYPE_TABLE_CELL, 
AtspiTableCell)
+#define ATSPI_TABLE_CELL_GET_IFACE(obj)          (G_TYPE_INSTANCE_GET_INTERFACE ((obj), 
ATSPI_TYPE_TABLE_CELL, AtspiTableCell))
+
+GType atspi_table_cell_get_type ();
+
+struct _AtspiTableCell
+{
+  GTypeInterface parent;
+};
+
+gint atspi_table_cell_get_column_span (AtspiTableCell *obj, GError *error);
+
+GPtrArray *atspi_table_cell_get_column_header_cells (AtspiTableCell *obj,
+                                                     GError **error);
+
+gint atspi_table_cell_get_column_index (AtspiTableCell *obj, GError **error);
+
+gint atspi_table_cell_get_row_span (AtspiTableCell *obj, GError **error);
+
+GPtrArray *atspi_table_cell_get_row_header_cells (AtspiTableCell *obj,
+                                                  GError **error);
+
+gint atspi_table_cell_get_row_index (AtspiTableCell *obj, GError **error);
+
+void atspi_table_cell_get_row_column_span (AtspiTableCell *obj,
+                                              gint *row,
+                                              gint *column,
+                                              gint *row_span,
+                                              gint *column_span,
+                                              GError **error);
+
+AtspiAccessible *atspi_table_cell_get_table (AtspiTableCell *obj,
+                                             GError **error);
+G_END_DECLS
+
+#endif /* _ATSPI_TABLE_CELL_H_ */
diff --git a/atspi/atspi-types.h b/atspi/atspi-types.h
index f2d7c0d..e458a8e 100644
--- a/atspi/atspi-types.h
+++ b/atspi/atspi-types.h
@@ -40,6 +40,7 @@ typedef struct _AtspiHypertext AtspiHypertext;
 typedef struct _AtspiImage AtspiImage;
 typedef struct _AtspiSelection AtspiSelection;
 typedef struct _AtspiTable AtspiTable;
+typedef struct _AtspiTableCell AtspiTableCell;
 typedef struct _AtspiText AtspiText;
 typedef struct _AtspiValue AtspiValue;
 
diff --git a/atspi/atspi.h b/atspi/atspi.h
index 7f66d2a..dc92de0 100644
--- a/atspi/atspi.h
+++ b/atspi/atspi.h
@@ -46,6 +46,7 @@
 #include "atspi-selection.h"
 #include "atspi-stateset.h"
 #include "atspi-table.h"
+#include "atspi-table-cell.h"
 #include "atspi-text.h"
 #include "atspi-value.h"
 
diff --git a/xml/Accessibility.xml b/xml/Accessibility.xml
index a7ae110..a454aeb 100644
--- a/xml/Accessibility.xml
+++ b/xml/Accessibility.xml
@@ -11,6 +11,7 @@
   <xi:include href="Image.xml" parse="xml"/>
   <xi:include href="Selection.xml" parse="xml"/>
   <xi:include href="Table.xml" parse="xml"/>
+  <xi:include href="TableCell.xml" parse="xml"/>
   <xi:include href="Text.xml" parse="xml"/>
   <xi:include href="EditableText.xml" parse="xml"/>
   <xi:include href="Cache.xml" parse="xml"/>
diff --git a/xml/TableCell.xml b/xml/TableCell.xml
new file mode 100644
index 0000000..c60a074
--- /dev/null
+++ b/xml/TableCell.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/node">
+<interface name="org.a11y.atspi.TableCell">
+
+  <property access="read" name="ColumnSpan" type="i" />
+
+  <property access="read" name="Position" type="(ii)" />
+
+  <property access="read" name="RowSpan" type="i" />
+
+  <property access="read" name="Table" type="(so)" />
+
+  <method name="GetRowColumnSpan">
+    <arg direction="out" type="b" />
+    <arg direction="out" name="row" type="i" />
+    <arg direction="out" name="col" type="i" />
+    <arg direction="out" name="row_extents" type="i" />
+    <arg direction="out" name="col_extents" type="i" />
+  </method>
+
+</interface>
+</node>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]