Fix for bug #339021, missing implementations for Table::nSelectedRows
[platform/core/uifw/at-spi2-atk.git] / libspi / table.c
index 0efb135..2c834cb 100644 (file)
@@ -172,7 +172,7 @@ impl_getRowDescription (PortableServer_Servant servant,
   const char *rv;
   AtkTable   *table = get_table_from_servant (servant);
 
-  g_return_val_if_fail (table != NULL, 0);
+  g_return_val_if_fail (table != NULL, NULL);
   
   rv = atk_table_get_row_description (table, row);
 
@@ -197,7 +197,7 @@ impl_getColumnDescription (PortableServer_Servant servant,
 
   g_return_val_if_fail (table != NULL, CORBA_string_dup (""));
   
-  rv = atk_table_get_row_description (table, column);
+  rv = atk_table_get_column_description (table, column);
 
   if (rv)
     {
@@ -269,12 +269,42 @@ impl_getColumnHeader (PortableServer_Servant servant,
   return spi_accessible_new_return (header, FALSE, ev);
 }
 
+static CORBA_long
+impl__get_nSelectedRows (PortableServer_Servant servant,
+                        CORBA_Environment     *ev)
+{
+  gint *selectedRows = NULL;
+  gint retval = 0;
+  AtkTable *table = get_table_from_servant (servant);
+
+  bonobo_return_val_if_fail (table != NULL, 0, ev);
+
+  retval = atk_table_get_selected_rows (table, &selectedRows);
+  if (selectedRows) g_free (selectedRows);
+  return retval;
+}
+
+
+static CORBA_long
+impl__get_nSelectedColumns (PortableServer_Servant servant,
+                           CORBA_Environment     *ev)
+{
+  gint *selectedColumns = NULL;
+  gint retval = 0;
+  AtkTable *table = get_table_from_servant (servant);
+
+  bonobo_return_val_if_fail (table != NULL, 0, ev);
+
+  retval = atk_table_get_selected_columns (table, &selectedColumns);
+  if (selectedColumns) g_free (selectedColumns);
+  return retval;
+}
 
 static Accessibility_LongSeq *
 impl_getSelectedRows (PortableServer_Servant servant,
                      CORBA_Environment     *ev)
 {
-  gint *selectedRows;
+  gint *selectedRows = NULL;
   gint length;
   Accessibility_LongSeq *retval;
   AtkTable *table = get_table_from_servant (servant);
@@ -283,7 +313,7 @@ impl_getSelectedRows (PortableServer_Servant servant,
 
   length = atk_table_get_selected_rows (table, &selectedRows);
 
-  bonobo_return_val_if_fail (length > 0, NULL, ev);
+  bonobo_return_val_if_fail (length >= 0, NULL, ev);
 
   retval = Accessibility_LongSeq__alloc ();
   retval->_maximum = retval->_length = length;
@@ -294,7 +324,7 @@ impl_getSelectedRows (PortableServer_Servant servant,
       retval->_buffer[length] = selectedRows[length];
     }
 
-  g_free (selectedRows);
+  if (selectedRows) g_free (selectedRows);
 
   return retval;
 }
@@ -304,7 +334,7 @@ static Accessibility_LongSeq *
 impl_getSelectedColumns (PortableServer_Servant servant,
                         CORBA_Environment     *ev)
 {
-  gint *selectedColumns;
+  gint *selectedColumns = NULL;
   gint length;
   Accessibility_LongSeq *retval;
   AtkTable *table = get_table_from_servant (servant);
@@ -324,7 +354,7 @@ impl_getSelectedColumns (PortableServer_Servant servant,
       retval->_buffer[length] = (CORBA_long) selectedColumns[length];
     }
 
-  g_free (selectedColumns);
+  if (selectedColumns) g_free (selectedColumns);
 
   return retval;
 }
@@ -433,6 +463,8 @@ spi_table_class_init (SpiTableClass *klass)
   epv->_get_summary = impl__get_summary;
   epv->_get_nRows = impl__get_nRows;
   epv->_get_nColumns = impl__get_nColumns;
+  epv->_get_nSelectedRows = impl__get_nSelectedRows;
+  epv->_get_nSelectedColumns = impl__get_nSelectedColumns;
   epv->getAccessibleAt = impl_getAccessibleAt;
   epv->getIndexAt = impl_getIndexAt;
   epv->getRowAtIndex = impl_getRowAtIndex;
@@ -462,4 +494,4 @@ spi_table_init (SpiTable *table)
 BONOBO_TYPE_FUNC_FULL (SpiTable,
                       Accessibility_Table,
                       SPI_TYPE_BASE,
-                      spi_table);
+                      spi_table)