/**
 * 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_hypertext_get_link:
 * @obj: a pointer to the #AtspiHypertext implementor on which to operate.
 * @link_index: a (zero-index) #gint indicating which hyperlink to query.
 *
 * Gets the #AtspiHyperlink object at a specified index.
 *
 * Returns: (nullable) (transfer full): the #AtspiHyperlink object
 *          specified by @link_index.
 **/
AtspiHyperlink *
atspi_hypertext_get_link (AtspiHypertext *obj, gint link_index, GError **error)
{
  dbus_int32_t d_link_index = link_index;
  DBusMessage *reply;
	
  g_return_val_if_fail (obj != NULL, NULL);

  reply = _atspi_dbus_call_partial (obj, atspi_interface_hypertext, "GetLink", error, "i", d_link_index);

  return _atspi_dbus_return_hyperlink_from_message (reply);
}
/**
 * atspi_hyperlink_get_object:
 * @obj: a pointer to the #AtspiHyperlink implementor on which to operate.
 * @i: a (zero-index) #gint indicating which hyperlink anchor to query.
 *
 * Gets the object associated with a particular hyperlink anchor, as an
 * #AtspiAccessible.
 *
 * Returns: (transfer full): an #AtspiAccessible that represents the object
 *        associated with the @ith anchor of the specified #AtspiHyperlink.
 **/
AtspiAccessible*
atspi_hyperlink_get_object (AtspiHyperlink *obj, gint i, GError **error)
{
  dbus_int32_t d_i = i;
  DBusMessage *reply;

  g_return_val_if_fail (obj != NULL, NULL);

  reply = _atspi_dbus_call_partial (obj, atspi_interface_hyperlink, "GetObject", error, "i", d_i);

  return _atspi_dbus_return_accessible_from_message (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;
  char *iter_sig;

  g_return_val_if_fail (obj != NULL, -1);

  reply = _atspi_dbus_call_partial (obj, "org.freedesktop.DBus.Properties",
                                    "Get", NULL, "ss",
                                    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);
  iter_sig = dbus_message_iter_get_signature (&iter_variant);
  /* TODO: Also report error here */
  if (strcmp (iter_sig, "(ii)") != 0)
  {
    dbus_free (iter_sig);
    return FALSE;
  }
  dbus_free (iter_sig);

  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;
}