Fixes to makefiles so that LDFLAGS are not overwritten.
[platform/core/uifw/at-spi2-atk.git] / cspi / spi_text.c
index 3ee18aa..fac8de6 100644 (file)
@@ -1,40 +1,89 @@
+/*
+ * AT-SPI - Assistive Technology Service Provider Interface
+ * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
+ *
+ * Copyright 2001 Sun Microsystems 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.
+ */
+
 #include <cspi/spi-private.h>
 
+static Accessibility_TEXT_BOUNDARY_TYPE
+get_accessible_text_boundary_type (AccessibleTextBoundaryType type)
+{
+  switch (type)
+    {
+    case SPI_TEXT_BOUNDARY_CHAR:
+      return Accessibility_TEXT_BOUNDARY_CHAR;
+      break;
+    case SPI_TEXT_BOUNDARY_CURSOR_POS:
+      /* FixME */
+      return Accessibility_TEXT_BOUNDARY_CHAR;
+      break;
+    case SPI_TEXT_BOUNDARY_WORD_START:
+      return Accessibility_TEXT_BOUNDARY_WORD_START;
+      break;
+    case SPI_TEXT_BOUNDARY_WORD_END:
+      return Accessibility_TEXT_BOUNDARY_WORD_END;
+      break;
+    case SPI_TEXT_BOUNDARY_SENTENCE_START:
+      return Accessibility_TEXT_BOUNDARY_SENTENCE_START;
+      break;
+    case SPI_TEXT_BOUNDARY_SENTENCE_END:
+      return Accessibility_TEXT_BOUNDARY_SENTENCE_END;
+      break;
+    case SPI_TEXT_BOUNDARY_LINE_START:
+      return Accessibility_TEXT_BOUNDARY_LINE_START;
+      break;
+    case SPI_TEXT_BOUNDARY_LINE_END:
+      return Accessibility_TEXT_BOUNDARY_LINE_END;
+      break;
+    case SPI_TEXT_BOUNDARY_ATTRIBUTE_RANGE:
+      /* Fixme */
+      return Accessibility_TEXT_BOUNDARY_CHAR;
+      break;
+    }
+}
+
+
 /**
  * AccessibleText_ref:
  * @obj: a pointer to the #AccessibleText object on which to operate.
  *
  * Increment the reference count for an #AccessibleText object.
- *
- * Returns: (no return code implemented yet).
- *
  **/
-int
+void
 AccessibleText_ref (AccessibleText *obj)
 {
-  Accessibility_Text_ref (*obj, spi_ev ());
-  return 0;
+  cspi_object_ref (obj);
 }
 
-
-
 /**
  * AccessibleText_unref:
  * @obj: a pointer to the #Accessible object on which to operate.
  *
  * Decrement the reference count for an #AccessibleText object.
- *
- * Returns: (no return code implemented yet).
- *
  **/
-int
+void
 AccessibleText_unref (AccessibleText *obj)
 {
-  Accessibility_Text_unref (*obj, spi_ev ());
-  return 0;
+  cspi_object_unref (obj);
 }
 
-
 /**
  * AccessibleText_getCharacterCount:
  * @obj: a pointer to the #AccessibleText object to query.
@@ -43,24 +92,21 @@ AccessibleText_unref (AccessibleText *obj)
  *
  * Returns: a long integer indicating the total number of
  *              characters in the #AccessibleText object.
- *
  **/
 long
 AccessibleText_getCharacterCount (AccessibleText *obj)
 {
   long retval;
 
-  CORBA_exception_init (spi_ev ());
-  retval = (long)
-    Accessibility_Text__get_characterCount (*obj, spi_ev ());
+  cspi_return_val_if_fail (obj != NULL, -1);
+
+  retval = Accessibility_Text__get_characterCount (CSPI_OBJREF (obj), cspi_ev ());
 
-  spi_check_ev (spi_ev (), "SpiAccessibleText_getCharacterCount");
+  cspi_return_val_if_ev ("getCharacterCount", -1);
 
   return retval;
 }
 
-
-
 /**
  * AccessibleText_getText:
  * @obj: a pointer to the #AccessibleText object to query.
@@ -73,16 +119,25 @@ AccessibleText_getCharacterCount (AccessibleText *obj)
  *
  * Returns: a text string containing characters from @startOffset
  *          to @endOffset-1, inclusive, encoded as UTF-8.
- *
  **/
 char *
 AccessibleText_getText (AccessibleText *obj,
                         long int startOffset,
                         long int endOffset)
 {
-  return (char *)
-    Accessibility_Text_getText (*obj,
-                               (CORBA_long) startOffset, (CORBA_long) endOffset, spi_ev ());
+  char *retval;
+
+  cspi_return_val_if_fail (obj != NULL, NULL);
+
+  retval =
+    Accessibility_Text_getText (CSPI_OBJREF (obj),
+                               startOffset,
+                               endOffset,
+                               cspi_ev ());
+
+  cspi_return_val_if_ev ("getText", NULL);
+
+  return retval;
 }
 
 /**
@@ -92,15 +147,21 @@ AccessibleText_getText (AccessibleText *obj,
  * Get the current offset of the text caret in an #AccessibleText object.
  *
  * Returns: a long integer indicating the current position of the text caret.
- *
  **/
 long
 AccessibleText_getCaretOffset (AccessibleText *obj)
 {
-  return (long)
-    Accessibility_Text__get_caretOffset (*obj, spi_ev ());
-}
+  long retval;
+
+  cspi_return_val_if_fail (obj != NULL, -1);
+
+  retval =
+    Accessibility_Text__get_caretOffset (CSPI_OBJREF (obj), cspi_ev ());
+
+  cspi_return_val_if_ev ("getCaretOffset", -1);
 
+  return retval;
+}
 
 /**
  * AccessibleText_getAttributes:
@@ -116,7 +177,6 @@ AccessibleText_getCaretOffset (AccessibleText *obj)
  * Returns: a text string describing the attributes occurring within the
  *          attribute run containing @offset, encoded as UTF-8 and
  *          delimited by ':'
- *
  **/
 char *
 AccessibleText_getAttributes (AccessibleText *obj,
@@ -126,19 +186,33 @@ AccessibleText_getAttributes (AccessibleText *obj,
 {
   CORBA_long retStartOffset, retEndOffset;
   char *retval;        
-  retval = (char *)
-    Accessibility_Text_getAttributes (*obj,
-                                     (CORBA_long) offset,
+
+  if (obj == NULL)
+    {
+      *startOffset = *endOffset = -1;
+      return NULL;
+    }
+
+  retval = Accessibility_Text_getAttributes (CSPI_OBJREF (obj),
+                                     offset,
                                      &retStartOffset,
                                      &retEndOffset,
-                                     spi_ev ());
-  *startOffset = (long) retStartOffset;
-  *endOffset = (long) retEndOffset;
+                                     cspi_ev ());
+
+  if (!cspi_check_ev ("getAttributes"))
+    {
+      *startOffset = *endOffset = -1;
+      retval = NULL;
+    }
+  else
+    {
+      *startOffset = retStartOffset;
+      *endOffset   = retEndOffset;
+    }
+
   return retval;
 }
 
-
-
 /**
  * AccessibleText_setCaretOffset:
  * @obj: a pointer to the #AccessibleText object on which to operate.
@@ -147,15 +221,22 @@ AccessibleText_getAttributes (AccessibleText *obj,
  * Set the text caret position for an #AccessibleText object.
  *
  * Returns: #TRUE if successful, #FALSE otherwise.
- *
  **/
-boolean
+SPIBoolean
 AccessibleText_setCaretOffset (AccessibleText *obj,
                                long int newOffset)
 {
-  return (boolean)
-    Accessibility_Text_setCaretOffset (*obj,
-                                      (CORBA_long) newOffset, spi_ev ());
+  SPIBoolean retval;
+
+  cspi_return_val_if_fail (obj != NULL, FALSE);
+
+  retval =
+    Accessibility_Text_setCaretOffset (CSPI_OBJREF (obj),
+                                      newOffset, cspi_ev ());
+
+  cspi_return_val_if_ev ("setCaretOffset", FALSE);
+
+  return retval;
 }
 
 /**
@@ -178,7 +259,6 @@ AccessibleText_setCaretOffset (AccessibleText *obj,
  * Returns: a UTF-8 string representing the delimited text, both of whose
  *          delimiting boundaries are before the current offset, or
  *          an empty string if no such text exists.
- *
  **/
 char *
 AccessibleText_getTextBeforeOffset (AccessibleText *obj,
@@ -189,13 +269,28 @@ AccessibleText_getTextBeforeOffset (AccessibleText *obj,
 {
   char *retval;
   CORBA_long retStartOffset, retEndOffset;
-  retval = (char *)
-    Accessibility_Text_getTextBeforeOffset (*obj,
-                                          (CORBA_long) offset, (Accessibility_TEXT_BOUNDARY_TYPE) type,
+
+  if (obj == NULL)
+    {
+      *startOffset = *endOffset = -1;
+      return NULL;
+    }
+
+  retval = Accessibility_Text_getTextBeforeOffset (CSPI_OBJREF (obj),
+                                          offset,
+                       get_accessible_text_boundary_type (type),
                                           &retStartOffset, &retEndOffset,
-                                          spi_ev ());
-  *startOffset = (long) retStartOffset;
-  *endOffset = (long) retEndOffset;
+                                          cspi_ev ());
+  if (!cspi_check_ev ("getTextBeforeOffset"))
+    {
+      *startOffset = *endOffset = -1;
+      retval = NULL;
+    }
+  else
+    {
+      *startOffset = retStartOffset;
+      *endOffset = retEndOffset;
+    }
   return retval;
 }
 
@@ -219,7 +314,6 @@ AccessibleText_getTextBeforeOffset (AccessibleText *obj,
  * Returns: a UTF-8 string representing the delimited text, whose
  *          delimiting boundaries bracket the current offset, or
  *          an empty string if no such text exists.
- *
  **/
 char *
 AccessibleText_getTextAtOffset (AccessibleText *obj,
@@ -229,22 +323,34 @@ AccessibleText_getTextAtOffset (AccessibleText *obj,
 {
   CORBA_long corbaStartOffset;
   CORBA_long corbaEndOffset;
-  char *retval = "";
-  retval = Accessibility_Text_getTextAtOffset (*obj,
-                                              (CORBA_long) offset,
-                                              (Accessibility_TEXT_BOUNDARY_TYPE) type,
+  char      *retval;
+
+  if (obj == NULL)
+    {
+      *startOffset = *endOffset = -1;
+      return NULL;
+    }
+
+  retval = Accessibility_Text_getTextAtOffset (CSPI_OBJREF (obj),
+                                              offset,
+                         get_accessible_text_boundary_type (type),
                                               &corbaStartOffset,
                                               &corbaEndOffset,
-                                              spi_ev ());
-  *startOffset = (long) corbaStartOffset;
-  *endOffset = (long) corbaEndOffset;
-#ifdef SPI_DEBUG
-  fprintf (stderr, "text offsets %ld to %ld\n", *startOffset, *endOffset);
-#endif
+                                              cspi_ev ());
+
+  if (!cspi_check_ev ("getTextAtOffset"))
+    {
+      *startOffset = *endOffset = -1;
+      retval = NULL;
+    }
+  else
+    {
+      *startOffset = corbaStartOffset;
+      *endOffset   = corbaEndOffset;
+    }
   return retval;
 }
 
-
 /**
  * AccessibleText_getTextAfterOffset:
  * @obj: a pointer to the #AccessibleText object on which to operate.
@@ -265,7 +371,6 @@ AccessibleText_getTextAtOffset (AccessibleText *obj,
  * Returns: a UTF-8 string representing the delimited text, both of whose
  *          delimiting boundaries are after or inclusive of the current
  *          offset, or an empty string if no such text exists.
- *
  **/
 char *
 AccessibleText_getTextAfterOffset (AccessibleText *obj,
@@ -275,18 +380,32 @@ AccessibleText_getTextAfterOffset (AccessibleText *obj,
 {
   char *retval;
   CORBA_long retStartOffset, retEndOffset;
-  retval = (char *)
-    Accessibility_Text_getTextAfterOffset (*obj,
-                                          (CORBA_long) offset, (Accessibility_TEXT_BOUNDARY_TYPE) type,
+
+  if (obj == NULL)
+    {
+      *startOffset = *endOffset = -1;
+      return NULL;
+    }
+
+  retval = Accessibility_Text_getTextAfterOffset (CSPI_OBJREF (obj),
+                                          offset,
+                            get_accessible_text_boundary_type (type),
                                           &retStartOffset, &retEndOffset,
-                                          spi_ev ());
-  *startOffset = (long) retStartOffset;
-  *endOffset = (long) retEndOffset;
+                                          cspi_ev ());
+
+  if (!cspi_check_ev ("getTextAfterOffset"))
+    {
+      *startOffset = *endOffset = -1;
+      retval = NULL;
+    }
+  else
+    {
+      *startOffset = retStartOffset;
+      *endOffset   = retEndOffset;
+    }
   return retval;
 }
 
-
-
 /**
  * AccessibleText_getCharacterAtOffset:
  * @obj: a pointer to the #AccessibleText object on which to operate.
@@ -299,15 +418,23 @@ AccessibleText_getTextAfterOffset (AccessibleText *obj,
  *        UCS-4 unicode code point of the given character, or
  *        0xFFFFFFFF if the character in question cannot be represented
  *        in the UCS-4 encoding.
- *
  **/
 unsigned long
 AccessibleText_getCharacterAtOffset (AccessibleText *obj,
                                      long int offset)
 {
-  return (unsigned long)
-    Accessibility_Text_getCharacterAtOffset (*obj,
-                                            (CORBA_long) offset, spi_ev ());
+  long retval;
+
+  cspi_return_val_if_fail (obj != NULL, -1);
+
+  retval =
+    Accessibility_Text_getCharacterAtOffset (CSPI_OBJREF (obj),
+                                            offset,
+                                            cspi_ev ());
+
+  cspi_return_val_if_ev ("getCharacterAtOffset", -1);
+
+  return retval;
 }
 
 /**
@@ -328,7 +455,6 @@ AccessibleText_getCharacterAtOffset (AccessibleText *obj,
  *
  * Get the bounding box containing the glyph representing
  *        the character at a particular text offset.
- *
  **/
 void
 AccessibleText_getCharacterExtents (AccessibleText *obj,
@@ -340,20 +466,36 @@ AccessibleText_getCharacterExtents (AccessibleText *obj,
                                    AccessibleCoordType type)
 {
   CORBA_long retX, retY, retWidth, retHeight;
-  Accessibility_Text_getCharacterExtents (*obj,
-                                         (CORBA_long) offset,
+
+  if (obj == NULL)
+    {
+      *x = *y = -1;
+      *width = *height = -1;
+      return;
+    }
+
+  Accessibility_Text_getCharacterExtents (CSPI_OBJREF (obj),
+                                         offset,
                                          &retX,
                                          &retY,
                                          &retWidth,
                                          &retHeight,
-                                         (CORBA_short) type, spi_ev ());
-  *x = (long) retX;
-  *y = (long) retY;
-  *width = (long) retWidth;
-  *height = (long) retHeight;
+                                         type, cspi_ev ());
+
+  if (!cspi_check_ev ("getCharacterExtents"))
+    {
+      *x = *y = -1;
+      *width = *height = -1;
+    }
+  else
+    {
+      *x = retX;
+      *y = retY;
+      *width = retWidth;
+      *height = retHeight;
+    }
 }
 
-
 /**
  * AccessibleText_getOffsetAtPoint:
  * @obj: a pointer to the #AccessibleText object on which to operate.
@@ -374,11 +516,20 @@ AccessibleText_getOffsetAtPoint (AccessibleText *obj,
                                  long int y,
                                 AccessibleCoordType type)
 {
-  return (long)
-    Accessibility_Text_getOffsetAtPoint (*obj,
-                                        (CORBA_long) x, (CORBA_long) y, (CORBA_short) type, spi_ev ());
-}
+  long retval;
+
+  cspi_return_val_if_fail (obj != NULL, -1);
+
+  retval =
+    Accessibility_Text_getOffsetAtPoint (CSPI_OBJREF (obj),
+                                        x,
+                                        y,
+                                        type, cspi_ev ());
 
+  cspi_return_val_if_ev ("getOffsetAtPoint", -1);
+
+  return retval;
+}
 
 /**
  * AccessibleText_getNSelections:
@@ -390,16 +541,21 @@ AccessibleText_getOffsetAtPoint (AccessibleText *obj,
  * Returns: a long integer indicating the current
  *          number of non-contiguous text selections active
  *          within an #AccessibleText object.
- *
  **/
 long
 AccessibleText_getNSelections (AccessibleText *obj)
 {
-  return (long)
-    Accessibility_Text_getNSelections (*obj, spi_ev ());
-}
+  long retval;
 
+  cspi_return_val_if_fail (obj != NULL, -1);
 
+  retval =
+    Accessibility_Text_getNSelections (CSPI_OBJREF (obj), cspi_ev ());
+
+  cspi_return_val_if_ev ("getNSelections", -1);
+
+  return retval;
+}
 
 /**
  * AccessibleText_getSelection:
@@ -412,7 +568,6 @@ AccessibleText_getNSelections (AccessibleText *obj)
  *
  * Get the bounds of the @selectionNum-th active text selection for an
  *         #AccessibleText object.
- *
  **/
 void
 AccessibleText_getSelection (AccessibleText *obj,
@@ -421,15 +576,28 @@ AccessibleText_getSelection (AccessibleText *obj,
                             long int *endOffset)
 {
   CORBA_long retStartOffset, retEndOffset;
-  Accessibility_Text_getSelection (*obj,
-                                  (CORBA_long) selectionNum,
-                                  &retStartOffset, &retEndOffset, spi_ev ());
-  
-  *startOffset = (long) retStartOffset;
-  *endOffset = (long) retEndOffset;
-}
-
 
+  if (obj == NULL)
+    {
+      *endOffset = *startOffset = -1;
+      return;
+    }
+
+  Accessibility_Text_getSelection (CSPI_OBJREF (obj),
+                                  selectionNum,
+                                  &retStartOffset, &retEndOffset,
+                                  cspi_ev ());
+
+  if (!cspi_check_ev ("getSelection"))
+    {
+      *startOffset = *endOffset = -1;
+    }
+  else
+    {
+      *startOffset = retStartOffset;
+      *endOffset   = retEndOffset;
+    }
+}
 
 /**
  * AccessibleText_addSelection:
@@ -440,18 +608,24 @@ AccessibleText_getSelection (AccessibleText *obj,
  * Select some text (add a text selection) in an #AccessibleText object.
  *
  * Returns: #TRUE if successful, #FALSE otherwise.
- *
  **/
-boolean
+SPIBoolean
 AccessibleText_addSelection (AccessibleText *obj,
                             long int startOffset, long int endOffset)
 {
-  return (boolean)
-    Accessibility_Text_addSelection (*obj,
-                                    (CORBA_long) startOffset, (CORBA_long) endOffset,
-                                    spi_ev ());
-}
+  SPIBoolean retval;
+
+  cspi_return_val_if_fail (obj != NULL, FALSE);
 
+  retval =
+    Accessibility_Text_addSelection (
+      CSPI_OBJREF (obj), startOffset,
+      endOffset, cspi_ev ());
+
+  cspi_return_val_if_ev ("addSelection", FALSE);
+
+  return retval;
+}
 
 /**
  * AccessibleText_removeSelection:
@@ -462,15 +636,22 @@ AccessibleText_addSelection (AccessibleText *obj,
  * De-select a text selection.
  *
  * Returns: #TRUE if successful, #FALSE otherwise.
- *
  **/
-boolean
+SPIBoolean
 AccessibleText_removeSelection (AccessibleText *obj,
                                long int selectionNum)
 {
-  return (boolean)
-    Accessibility_Text_removeSelection (*obj,
-                                       (CORBA_long) selectionNum, spi_ev ());
+  SPIBoolean retval;
+
+  cspi_return_val_if_fail (obj != NULL, FALSE);
+
+  retval =
+    Accessibility_Text_removeSelection (
+      CSPI_OBJREF (obj), selectionNum, cspi_ev ());
+
+  cspi_return_val_if_ev ("removeSelection", FALSE);
+
+  return retval;
 }
 
 /**
@@ -484,19 +665,25 @@ AccessibleText_removeSelection (AccessibleText *obj,
  * Change the bounds of an existing #AccessibleText text selection.
  *
  * Returns: #TRUE if successful, #FALSE otherwise.
- *
  **/
-boolean
+SPIBoolean
 AccessibleText_setSelection (AccessibleText *obj,
                             long int selectionNum,
                             long int startOffset,
                             long int endOffset)
 {
-  return (boolean)
-    Accessibility_Text_setSelection (*obj,
-                                    (CORBA_long) selectionNum,
-                                    (CORBA_long) startOffset,
-                                    (CORBA_long) endOffset, spi_ev ());
+  SPIBoolean retval;
+
+  cspi_return_val_if_fail (obj != NULL, FALSE);
+
+  retval = Accessibility_Text_setSelection (CSPI_OBJREF (obj),
+                                  selectionNum,
+                                  startOffset,
+                                  endOffset, cspi_ev ());
+
+  cspi_return_val_if_ev ("setSelection", FALSE);
+
+  return retval;
 }