#include <config.h>
#include <stdio.h>
+#include <bonobo/bonobo-exception.h>
+#include <atk/atktable.h>
#include <libspi/accessible.h>
#include <libspi/table.h>
-/* A pointer to our parent object class */
-static GObjectClass *parent_class;
-
-static void
-spi_table_finalize (GObject *obj)
-{
- SpiTable *table = SPI_TABLE (obj);
- g_object_unref (table->atko);
- table->atko = NULL;
- parent_class->finalize (obj);
-}
SpiTable *
spi_table_interface_new (AtkObject *obj)
{
SpiTable *new_table = g_object_new (SPI_TABLE_TYPE, NULL);
- new_table->atko = obj;
- g_object_ref (obj);
+
+ spi_base_construct (SPI_BASE (new_table), G_OBJECT(obj));
+
return new_table;
}
+static AtkTable *
+get_table_from_servant (PortableServer_Servant servant)
+{
+ SpiBase *object = SPI_BASE (bonobo_object_from_servant (servant));
+
+ g_return_val_if_fail (object, NULL);
+ g_return_val_if_fail (ATK_IS_OBJECT(object->gobj), NULL);
+ return ATK_TABLE (object->gobj);
+}
+
static Accessibility_Accessible
-impl__get_caption (PortableServer_Servant _servant,
- CORBA_Environment * ev)
+impl__get_caption (PortableServer_Servant servant,
+ CORBA_Environment *ev)
{
- SpiTable *table = SPI_TABLE (bonobo_object_from_servant (_servant));
AtkObject *atk_object;
- Accessibility_Accessible rv;
+ AtkTable *table = get_table_from_servant (servant);
- atk_object = atk_table_get_caption (ATK_TABLE(table-> atko));
- rv = bonobo_object_corba_objref (BONOBO_OBJECT(spi_accessible_new(atk_object)));
- return CORBA_Object_duplicate (rv, ev);
-}
+ g_return_val_if_fail (table != NULL, CORBA_OBJECT_NIL);
+
+ atk_object = atk_table_get_caption (table);
+ return spi_accessible_new_return (atk_object, FALSE, ev);
+}
static Accessibility_Accessible
-impl__get_summary (PortableServer_Servant _servant,
- CORBA_Environment * ev)
+impl__get_summary (PortableServer_Servant servant,
+ CORBA_Environment *ev)
{
- SpiTable *table = SPI_TABLE (bonobo_object_from_servant (_servant));
AtkObject *atk_object;
- Accessibility_Accessible rv;
+ AtkTable *table = get_table_from_servant (servant);
- atk_object = atk_table_get_summary (ATK_TABLE(table->atko));
- rv = bonobo_object_corba_objref (BONOBO_OBJECT(spi_accessible_new(atk_object)));
- return CORBA_Object_duplicate (rv, ev);
-}
+ g_return_val_if_fail (table != NULL, CORBA_OBJECT_NIL);
+ atk_object = atk_table_get_summary (table);
+
+ return spi_accessible_new_return (atk_object, FALSE, ev);
+}
static CORBA_long
-impl__get_nRows (PortableServer_Servant _servant,
- CORBA_Environment * ev)
+impl__get_nRows (PortableServer_Servant servant,
+ CORBA_Environment *ev)
{
- SpiTable *table = SPI_TABLE (bonobo_object_from_servant (_servant));
- return (CORBA_long)
- atk_table_get_n_rows (ATK_TABLE(table->atko) );
-}
+ AtkTable *table = get_table_from_servant (servant);
+
+ g_return_val_if_fail (table != NULL, 0);
+ return (CORBA_long) atk_table_get_n_rows (table);
+}
static CORBA_long
-impl__get_nColumns (PortableServer_Servant _servant,
- CORBA_Environment * ev)
+impl__get_nColumns (PortableServer_Servant servant,
+ CORBA_Environment *ev)
{
- SpiTable *table = SPI_TABLE (bonobo_object_from_servant (_servant));
- return (CORBA_long)
- atk_table_get_n_columns (ATK_TABLE(table->atko));
-}
+ AtkTable *table = get_table_from_servant (servant);
+ g_return_val_if_fail (table != NULL, 0);
+
+ return (CORBA_long) atk_table_get_n_columns (table);
+}
static Accessibility_Accessible
-impl_getAccessibleAt (PortableServer_Servant _servant,
- const CORBA_long row,
- const CORBA_long column,
- CORBA_Environment * ev)
+impl_getAccessibleAt (PortableServer_Servant servant,
+ const CORBA_long row,
+ const CORBA_long column,
+ CORBA_Environment *ev)
{
- SpiTable *table = SPI_TABLE (bonobo_object_from_servant (_servant));
AtkObject *atk_object;
- Accessibility_Accessible rv;
+ AtkTable *table = get_table_from_servant (servant);
- atk_object = atk_table_ref_at (ATK_TABLE(table->atko),
- (gint) row, (gint) column);
- rv = bonobo_object_corba_objref (BONOBO_OBJECT(spi_accessible_new(atk_object)));
- return CORBA_Object_duplicate (rv, ev);
-}
+ g_return_val_if_fail (table != NULL, CORBA_OBJECT_NIL);
+ atk_object = atk_table_ref_at (table,
+ (gint) row, (gint) column);
+
+ return spi_accessible_new_return (atk_object, TRUE, ev);
+}
static CORBA_long
-impl_getIndexAt (PortableServer_Servant _servant,
- const CORBA_long row, const CORBA_long column,
- CORBA_Environment * ev)
+impl_getIndexAt (PortableServer_Servant servant,
+ const CORBA_long row,
+ const CORBA_long column,
+ CORBA_Environment *ev)
{
- SpiTable *table = SPI_TABLE (bonobo_object_from_servant (_servant));
+ AtkTable *table = get_table_from_servant (servant);
+
+ g_return_val_if_fail (table != NULL, 0);
+
return (CORBA_long)
- atk_table_get_index_at (ATK_TABLE(table->atko),
- (gint) row, (gint) column);
+ atk_table_get_index_at (table, (gint) row, (gint) column);
}
-
static CORBA_long
-impl_getRowAtIndex (PortableServer_Servant _servant,
- const CORBA_long index,
- CORBA_Environment * ev)
+impl_getRowAtIndex (PortableServer_Servant servant,
+ const CORBA_long index,
+ CORBA_Environment *ev)
{
- SpiTable *table = SPI_TABLE (bonobo_object_from_servant (_servant));
+ AtkTable *table = get_table_from_servant (servant);
+
+ g_return_val_if_fail (table != NULL, 0);
+
return (CORBA_long)
- atk_table_get_row_at_index (ATK_TABLE(table->atko), (gint) index);
+ atk_table_get_row_at_index (table, (gint) index);
}
-
static CORBA_long
-impl_getColumnAtIndex (PortableServer_Servant _servant,
- const CORBA_long index,
- CORBA_Environment * ev)
+impl_getColumnAtIndex (PortableServer_Servant servant,
+ const CORBA_long index,
+ CORBA_Environment *ev)
{
- SpiTable *table = SPI_TABLE (bonobo_object_from_servant (_servant));
+ AtkTable *table = get_table_from_servant (servant);
+
+ g_return_val_if_fail (table != NULL, 0);
+
return (CORBA_long)
- atk_table_get_column_at_index (ATK_TABLE(table->atko), (gint) index);
+ atk_table_get_column_at_index (table, (gint) index);
}
-
static CORBA_string
impl_getRowDescription (PortableServer_Servant servant,
const CORBA_long row,
CORBA_Environment *ev)
{
const char *rv;
- SpiTable *table;
+ AtkTable *table = get_table_from_servant (servant);
- table = SPI_TABLE (bonobo_object_from_servant (servant));
+ g_return_val_if_fail (table != NULL, 0);
- rv = atk_table_get_row_description (ATK_TABLE (table->atko), row);
+ rv = atk_table_get_row_description (table, row);
if (rv)
- return CORBA_string_dup (rv);
+ {
+ return CORBA_string_dup (rv);
+ }
else
- return CORBA_string_dup ("");
+ {
+ return CORBA_string_dup ("");
+ }
}
-
static CORBA_string
impl_getColumnDescription (PortableServer_Servant servant,
const CORBA_long column,
CORBA_Environment *ev)
{
const char *rv;
- SpiTable *table;
+ AtkTable *table = get_table_from_servant (servant);
- table = SPI_TABLE (bonobo_object_from_servant (servant));
+ g_return_val_if_fail (table != NULL, CORBA_string_dup (""));
- rv = atk_table_get_row_description (ATK_TABLE (table->atko), column);
+ rv = atk_table_get_row_description (table, column);
if (rv)
- return CORBA_string_dup (rv);
+ {
+ return CORBA_string_dup (rv);
+ }
else
- return CORBA_string_dup ("");
+ {
+ return CORBA_string_dup ("");
+ }
}
-
static CORBA_long
-impl_getRowExtentAt (PortableServer_Servant _servant,
- const CORBA_long row,
- const CORBA_long column,
- CORBA_Environment * ev)
+impl_getRowExtentAt (PortableServer_Servant servant,
+ const CORBA_long row,
+ const CORBA_long column,
+ CORBA_Environment *ev)
{
- SpiTable *table = SPI_TABLE (bonobo_object_from_servant (_servant));
+ AtkTable *table = get_table_from_servant (servant);
+
+ g_return_val_if_fail (table != NULL, -1);
+
return (CORBA_long)
- atk_table_get_row_extent_at (ATK_TABLE(table->atko),
+ atk_table_get_row_extent_at (table,
(gint) row, (gint) column);
}
-
static CORBA_long
-impl_getColumnExtentAt (PortableServer_Servant _servant,
- const CORBA_long row,
- const CORBA_long column,
- CORBA_Environment * ev)
+impl_getColumnExtentAt (PortableServer_Servant servant,
+ const CORBA_long row,
+ const CORBA_long column,
+ CORBA_Environment *ev)
{
- SpiTable *table = SPI_TABLE (bonobo_object_from_servant (_servant));
+ AtkTable *table = get_table_from_servant (servant);
+
+ g_return_val_if_fail (table != NULL, -1);
+
return (CORBA_long)
- atk_table_get_column_extent_at (ATK_TABLE(table->atko),
- (gint) row, (gint) column);
+ atk_table_get_column_extent_at (table,
+ (gint) row, (gint) column);
}
-
static Accessibility_Table
-impl_getRowHeader (PortableServer_Servant _servant,
- const CORBA_long row,
- CORBA_Environment * ev)
+impl_getRowHeader (PortableServer_Servant servant,
+ const CORBA_long row,
+ CORBA_Environment *ev)
{
- SpiTable *table = SPI_TABLE (bonobo_object_from_servant (_servant));
AtkObject *header;
- Accessibility_Table rv;
+ AtkTable *table = get_table_from_servant (servant);
- header = atk_table_get_row_header (ATK_TABLE(table->atko), (gint) row);
- rv = bonobo_object_corba_objref (BONOBO_OBJECT(spi_accessible_new(header)));
- return CORBA_Object_duplicate (rv, ev);
-}
+ g_return_val_if_fail (table != NULL, CORBA_OBJECT_NIL);
+
+ header = atk_table_get_row_header (table, (gint) row);
+ return spi_accessible_new_return (header, FALSE, ev);
+}
-static Accessibility_Table
-impl_getColumnHeader (PortableServer_Servant _servant,
- const CORBA_long column,
- CORBA_Environment * ev)
+static Accessibility_Table
+impl_getColumnHeader (PortableServer_Servant servant,
+ const CORBA_long column,
+ CORBA_Environment *ev)
{
- SpiTable *table = SPI_TABLE (bonobo_object_from_servant (_servant));
AtkObject *header;
- Accessibility_Table rv;
+ AtkTable *table = get_table_from_servant (servant);
- header = atk_table_get_column_header (ATK_TABLE(table->atko), (gint) column);
- rv = bonobo_object_corba_objref (BONOBO_OBJECT(spi_accessible_new(header)));
- return CORBA_Object_duplicate (rv, ev);
-}
+ g_return_val_if_fail (table != NULL, CORBA_OBJECT_NIL);
+ header = atk_table_get_column_header (table, (gint) column);
+
+ return spi_accessible_new_return (header, FALSE, ev);
+}
static Accessibility_LongSeq *
-impl_getSelectedRows (PortableServer_Servant _servant,
- CORBA_Environment * ev)
+impl_getSelectedRows (PortableServer_Servant servant,
+ CORBA_Environment *ev)
{
- SpiTable *table = SPI_TABLE (bonobo_object_from_servant (_servant));
gint *selectedRows;
gint length;
Accessibility_LongSeq *retval;
+ AtkTable *table = get_table_from_servant (servant);
+
+ bonobo_return_val_if_fail (table != NULL, NULL, ev);
+
+ length = atk_table_get_selected_rows (table, &selectedRows);
- length = atk_table_get_selected_rows (ATK_TABLE(table->atko), &selectedRows);
+ bonobo_return_val_if_fail (length > 0, NULL, ev);
- g_return_val_if_fail (length, NULL);
retval = Accessibility_LongSeq__alloc ();
retval->_maximum = retval->_length = (CORBA_long) length;
retval->_buffer = Accessibility_LongSeq_allocbuf (length);
while (--length)
- retval->_buffer[length] = (CORBA_long) selectedRows[length];
+ {
+ retval->_buffer[length] = (CORBA_long) selectedRows[length];
+ }
+
g_free ((gpointer) selectedRows);
+
return retval;
}
-
static Accessibility_LongSeq *
-impl_getSelectedColumns (PortableServer_Servant _servant,
- CORBA_Environment * ev)
+impl_getSelectedColumns (PortableServer_Servant servant,
+ CORBA_Environment *ev)
{
- SpiTable *table = SPI_TABLE (bonobo_object_from_servant (_servant));
gint *selectedColumns;
gint length;
Accessibility_LongSeq *retval;
+ AtkTable *table = get_table_from_servant (servant);
- length = atk_table_get_selected_columns (ATK_TABLE(table->atko), &selectedColumns);
+ bonobo_return_val_if_fail (table != NULL, NULL, ev);
- g_return_val_if_fail (length, NULL);
+ length = atk_table_get_selected_columns (table, &selectedColumns);
+
+ bonobo_return_val_if_fail (length >= 0, NULL, ev);
retval = Accessibility_LongSeq__alloc ();
retval->_maximum = retval->_length = (CORBA_long) length;
retval->_buffer = Accessibility_LongSeq_allocbuf (length);
while (--length)
- retval->_buffer[length] = (CORBA_long) selectedColumns[length];
+ {
+ retval->_buffer[length] = (CORBA_long) selectedColumns[length];
+ }
+
g_free ((gpointer) selectedColumns);
+
return retval;
}
-
static CORBA_boolean
-impl_isRowSelected (PortableServer_Servant _servant,
- const CORBA_long row,
- CORBA_Environment * ev)
+impl_isRowSelected (PortableServer_Servant servant,
+ const CORBA_long row,
+ CORBA_Environment *ev)
{
- SpiTable *table = SPI_TABLE (bonobo_object_from_servant (_servant));
- return (CORBA_boolean)
- atk_table_is_row_selected (ATK_TABLE(table->atko), (gint) row);
-}
+ AtkTable *table = get_table_from_servant (servant);
+
+ g_return_val_if_fail (table != NULL, FALSE);
+ return (CORBA_boolean) atk_table_is_row_selected (table, (gint) row);
+}
static CORBA_boolean
-impl_isColumnSelected (PortableServer_Servant _servant,
- const CORBA_long column,
- CORBA_Environment * ev)
+impl_isColumnSelected (PortableServer_Servant servant,
+ const CORBA_long column,
+ CORBA_Environment *ev)
{
- SpiTable *table = SPI_TABLE (bonobo_object_from_servant (_servant));
- return (CORBA_boolean)
- atk_table_is_column_selected (ATK_TABLE(table->atko), (gint) column);
-}
+ AtkTable *table = get_table_from_servant (servant);
+ g_return_val_if_fail (table != NULL, FALSE);
+
+ return (CORBA_boolean) atk_table_is_column_selected (table, (gint) column);
+}
static CORBA_boolean
-impl_isSelected (PortableServer_Servant _servant,
- const CORBA_long row,
- const CORBA_long column,
- CORBA_Environment * ev)
+impl_isSelected (PortableServer_Servant servant,
+ const CORBA_long row,
+ const CORBA_long column,
+ CORBA_Environment *ev)
{
- SpiTable *table = SPI_TABLE (bonobo_object_from_servant (_servant));
- return (CORBA_boolean)
- atk_table_is_selected (ATK_TABLE(table->atko),
- (gint) row, (gint) column);
+ AtkTable *table = get_table_from_servant (servant);
+
+ g_return_val_if_fail (table != NULL, FALSE);
+
+ return (CORBA_boolean) atk_table_is_selected (table,
+ (gint) row, (gint) column);
}
+
static void
spi_table_class_init (SpiTableClass *klass)
{
- GObjectClass * object_class = (GObjectClass *) klass;
POA_Accessibility_Table__epv *epv = &klass->epv;
- parent_class = g_type_class_peek_parent (klass);
-
- object_class->finalize = spi_table_finalize;
-
/* Initialize epv table */
BONOBO_TYPE_FUNC_FULL (SpiTable,
Accessibility_Table,
- BONOBO_TYPE_OBJECT,
+ SPI_TYPE_BASE,
spi_table);