? Accessibility_Text.idl.new
? Patch.patch
? at-spi-1.6.4-1.patch
? at-spi-1.7.5.tar.gz
? at-spi-1.7.6.tar.gz
? at-spi-1.7.8.tar.gz
? at-spi-1.7.9.tar.gz
? at-spi-document-patches
? at-spi-document-patches.tar
? at-spi-registryleakfix.diff
? at-spi-server-fix.diff
? at-spi-stream-patch.diff
? cspi-spi-text.patch.new
? cspi-table.patch
? depcomp
? document-patch-revised.diff
? eog-trace.txt
? gtk-doc.make
? leak-fix-diffs.diff
? leak-fix-final.diff
? leak-fix-next.diff
? leak-fix.diff
? leakfix.diff
? libspi-table.patch
? libspi-text.c.patch
? libspi-text.c.patch.new
? linguas.patch
? mingw.patch
? patch.diff
? relation.diff
? roles.diff
? single-bonobo_unknown-loading.patch
? stream0ANCBT
? stream0RCIBT
? stream14CFBT
? stream1BCEBT
? stream1RNEBT
? stream2RFKBT
? stream3EBMBT
? stream3HQJBT
? stream3KJHBT
? stream3LE8AT
? stream3PYLBT
? stream533FBT
? stream53V6AT
? stream9MOQBT
? streamBKOFBT
? streamCKOJBT
? streamELPABT
? streamEY6IBT
? streamFCXIBT
? streamFFR5AT
? streamFHPGBT
? streamFLYOBT
? streamG9NCBT
? streamHP26AT
? streamHZ3NBT
? streamISXMBT
? streamJJAMBT
? streamKCYQBT
? streamKDW9AT
? streamKYWEBT
? streamLCV6AT
? streamLEJHBT
? streamLMZGBT
? streamNAXNBT
? streamNE14AT
? streamOCWFBT
? streamOPQABT
? streamPQ9KBT
? streamPY0LBT
? streamQ1RCBT
? streamQ4SHBT
? streamQL46AT
? streamRBK8AT
? streamRGXCBT
? streamRXHEBT
? streamRXUCBT
? streamT2BABT
? streamTWLLBT
? streamU378AT
? streamU7MMBT
? streamUK4IBT
? streamV108AT
? streamV5AKBT
? streamXQWLBT
? streamZ30IBT
? streamZG4FBT
? streamable.patch
? streamble.patch
? table-patch.diff
? text-enhancements.diff
? this-patch-breaks-stuff.diff
? atk-bridge/bridge-undefined
? docs/reference/cspi/at-spi-cspi.interfaces
? docs/reference/cspi/at-spi-cspi.prerequisites
? docs/reference/cspi/tmpl/at-spi-cspi-unused.sgml
? docs/reference/cspi/tmpl/spi_streamable_content.sgml
? docs/reference/idl/doxygen-output.txt
? docs/reference/idl/doxygen-warnings.txt
? docs/reference/idl/xml
? idl/stream-diff.patch
? libspi/libspi-undefined
? login-helper/Accessibility_LoginHelper-common.c
? login-helper/Accessibility_LoginHelper-imodule.c
? login-helper/Accessibility_LoginHelper-skels.c
? login-helper/Accessibility_LoginHelper-stubs.c
? login-helper/Accessibility_LoginHelper.h
? po/stamp-it
? test/event-listener-test
? test/keypad-test
? test/keysynth-test
? test/login-helper-client-test
? test/login-helper-server-test
? test/screen-review-test
? test/stress-test
? test/window-listener-test
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/at-spi/ChangeLog,v
retrieving revision 1.526
diff -u -r1.526 ChangeLog
--- ChangeLog	12 Jul 2006 14:13:02 -0000	1.526
+++ ChangeLog	12 Jul 2006 14:58:22 -0000
@@ -1,6 +1,26 @@
 2006-07-12  Bill Haneman <billh@gnome.org> modifications to patch from
 2006-07-12  Ariel Rios  <arios@us.ibm.com>
 
+	See RFE #326536.
+	
+	* idl/Accessibility_Table.idl:
+	(getRowColumnExtentsAtIndex): New method for getting
+	selection status and extents in one API call.
+
+	* libspi/table.c:
+	(impl_getRowColumnExtentsAtIndex): Implementation of
+	new method above.
+	(spi_table_class_init): Add above to epv.
+
+	* cspi/spi.h:
+	* cspi/spi_table.c:
+	(AccessibleTable_getRowColumnExtentsAtIndex): New
+	method, retrieves selection status and row/col extents
+	for a table cell in a single API call.
+
+2006-07-12  Bill Haneman <billh@gnome.org> modifications to patch from
+2006-07-12  Ariel Rios  <arios@us.ibm.com>
+
 	* cspi/bonobo/cspi-bonobo.c: Remove warning adding <cspi/spi-private.h>
 
 	* cspi/spi_text.c: 
Index: cspi/spi.h
===================================================================
RCS file: /cvs/gnome/at-spi/cspi/spi.h,v
retrieving revision 1.74
diff -u -r1.74 spi.h
--- cspi/spi.h	12 Jul 2006 14:13:03 -0000	1.74
+++ cspi/spi.h	12 Jul 2006 14:58:23 -0000
@@ -908,6 +908,12 @@
                                    long int row,
                                    long int column);
 
+SPIBoolean
+AccessibleTable_getRowColumnExtentsAtIndex (AccessibleTable *obj,
+					    long int index, long int *row, long int *col, 
+					    long int *row_extents, long int *col_extents, 
+					    long int *is_selected);
+
 Accessible *
 AccessibleTable_getRowHeader (AccessibleTable *obj,
 			      long int row);
Index: cspi/spi_table.c
===================================================================
RCS file: /cvs/gnome/at-spi/cspi/spi_table.c,v
retrieving revision 1.22
diff -u -r1.22 spi_table.c
--- cspi/spi_table.c	27 Mar 2006 18:05:31 -0000	1.22
+++ cspi/spi_table.c	12 Jul 2006 14:58:24 -0000
@@ -717,6 +717,47 @@
   return retval;
 }
 
+
+SPIBoolean
+AccessibleTable_getRowColumnExtentsAtIndex (AccessibleTable *obj,
+					    long int index, long int *row, long int *col, 
+					    long int *row_extents, long int *col_extents, 
+					    long int *is_selected){
+  SPIBoolean retval;
+  CORBA_long cRow,  cCol, cRow_extents, cCol_extents; 
+  CORBA_boolean cIs_selected;
+
+  cspi_return_val_if_fail (obj != NULL, FALSE);
+
+  retval = Accessibility_Table_getRowColumnExtentsAtIndex (CSPI_OBJREF (obj),
+							   index, &cRow, &cCol,
+							   &cRow_extents, &cCol_extents,
+							   &cIs_selected,
+							   cspi_ev ());
+
+  if (!cspi_check_ev ("getRowColumnExtentsAtIndex")){
+    
+    *row = 0;
+    *col = 0;
+    *row_extents = 0;
+    *col_extents = 0;
+    *is_selected = FALSE;
+    retval = FALSE;
+  }
+
+  else {
+    *row = cRow;
+    *col = cCol;
+    *row_extents = cRow_extents;;
+    *col_extents = cCol_extents;
+    *is_selected = cIs_selected;;
+  }
+  
+  return retval;
+
+}
+
+
 /**
  * AccessibleTable_isSelected:
  * @obj: a pointer to the #AccessibleTable implementor on which to operate.
Index: idl/Accessibility_Table.idl
===================================================================
RCS file: /cvs/gnome/at-spi/idl/Accessibility_Table.idl,v
retrieving revision 1.8
diff -u -r1.8 Accessibility_Table.idl
--- idl/Accessibility_Table.idl	16 Jan 2006 14:16:43 -0000	1.8
+++ idl/Accessibility_Table.idl	12 Jul 2006 14:58:24 -0000
@@ -291,7 +291,52 @@
     * \c False if not. 
     **/
    boolean removeColumnSelection (in long column);
-
+   /** 
+    * Given a child index, determine the row and column indices and 
+    * extents, and whether the cell is currently selected.  If
+    * the child at \c index is not a cell (for instance, if it is 
+    * a summary, caption, etc.), \c False is returned.
+    *
+    * @param index the index of the Table child whose row/column 
+    * extents are requested.
+    * @param row back-filled with the first table row associated with
+    * the cell with child index \c index.
+    * @param col back-filled with the first table column associated 
+    * with the cell with child index \c index.
+    * @param row_extents back-filled with the number of table rows 
+    * across which child \c i extends.
+    * @param col_extents back-filled with the number of table columns
+    * across which child \c i extends.
+    * @param is_selected a boolean which is back-filled with \c True
+    * if the child at index \c i corresponds to a selected table cell,
+    * \c False otherwise.
+    *
+    * Example:
+    * If the Table child at index '6' extends across columns 5 and 6 of
+    * row 2 of a Table instance, and is currently selected, then
+    * \code
+    * retval = table::getRowColumnExtentsAtIndex (6, row, col, 
+    *                                             row_extents,
+    *                                             col_extents,
+    *                                             is_selected);
+    * \endcode
+    * will return True, and after the call
+    * \c row, \c col, \c row_extents, \c col_extents,
+    * and \c is_selected will contain \c 2, \c 5, \c 1, \c 2, and 
+    * \c True, respectively.
+    *
+    * @returns \c True if the index is associated with a valid table
+    * cell, \c False if the index does not correspond to a cell.  If 
+    * \c False is returned, the values of the out parameters are 
+    * undefined.
+    * 
+    * @since AT-SPI 1.7.0
+    **/
+    boolean getRowColumnExtentsAtIndex (in long index, out long row, 
+					out long col, 
+					out long row_extents, 
+					out long col_extents, 
+					out boolean is_selected);
     /** \cond
      * unImplemented:
      *
@@ -304,7 +349,6 @@
     void unImplemented5 ();
     void unImplemented6 ();
     void unImplemented7 ();
-    void unImplemented8 ();
     /** \endcond */
   };
 };
Index: libspi/table.c
===================================================================
RCS file: /cvs/gnome/at-spi/libspi/table.c,v
retrieving revision 1.20
diff -u -r1.20 table.c
--- libspi/table.c	9 Jun 2006 15:46:23 -0000	1.20
+++ libspi/table.c	12 Jul 2006 14:58:25 -0000
@@ -438,6 +438,47 @@
 
 
 static CORBA_boolean
+impl_getRowColumnExtentsAtIndex (PortableServer_Servant servant,
+				 const CORBA_long index,
+				 CORBA_long *row,
+				 CORBA_long *column,
+				 CORBA_long *row_extents,
+				 CORBA_long *col_extents,
+				 CORBA_boolean *is_selected,
+				 CORBA_Environment *ev)
+{
+
+  AtkObject *cell;
+  AtkRole role;
+  AtkTable *table = get_table_from_servant (servant);
+  gint intColumn, intRow, intRow_extents, intCol_extents;
+  gboolean boolIs_selected;
+
+  g_return_val_if_fail (table != NULL, FALSE);
+
+  intColumn = atk_table_get_column_at_index (table, index);
+  intRow = atk_table_get_row_at_index (table, index);
+  intRow_extents = atk_table_get_row_extent_at (table, intRow, intColumn);
+  intCol_extents = atk_table_get_column_extent_at (table, intRow, intColumn);
+  boolIs_selected = atk_table_is_selected (table, intRow, intColumn);
+
+  *column = intColumn;
+  *row = intRow;
+  *row_extents = intRow_extents;
+  *col_extents = intCol_extents;
+  *is_selected = boolIs_selected;
+
+  cell = atk_table_ref_at (table, intRow, intColumn);
+  role = atk_object_get_role (cell);
+
+  if (role == ATK_ROLE_TABLE_CELL)
+    return TRUE;
+  
+  return FALSE;
+
+}
+
+static CORBA_boolean
 impl_isSelected (PortableServer_Servant servant,
 		 const CORBA_long       row,
 		 const CORBA_long       column,
@@ -484,6 +525,7 @@
   epv->removeRowSelection = impl_removeRowSelection;
   epv->removeColumnSelection = impl_removeColumnSelection;
   epv->isSelected = impl_isSelected;
+  epv->getRowColumnExtentsAtIndex = impl_getRowColumnExtentsAtIndex;
 }
 
 static void
