Fixes to makefiles so that LDFLAGS are not overwritten.
[platform/core/uifw/at-spi2-atk.git] / cspi / spi_text.c
index 558b38f..fac8de6 100644 (file)
@@ -1,5 +1,65 @@
+/*
+ * 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.
@@ -40,8 +100,7 @@ AccessibleText_getCharacterCount (AccessibleText *obj)
 
   cspi_return_val_if_fail (obj != NULL, -1);
 
-  retval = (long)
-    Accessibility_Text__get_characterCount (CSPI_OBJREF (obj), cspi_ev ());
+  retval = Accessibility_Text__get_characterCount (CSPI_OBJREF (obj), cspi_ev ());
 
   cspi_return_val_if_ev ("getCharacterCount", -1);
 
@@ -72,8 +131,8 @@ AccessibleText_getText (AccessibleText *obj,
 
   retval =
     Accessibility_Text_getText (CSPI_OBJREF (obj),
-                               (CORBA_long) startOffset,
-                               (CORBA_long) endOffset,
+                               startOffset,
+                               endOffset,
                                cspi_ev ());
 
   cspi_return_val_if_ev ("getText", NULL);
@@ -130,20 +189,20 @@ AccessibleText_getAttributes (AccessibleText *obj,
 
   if (obj == NULL)
     {
-      *startOffset = *endOffset = 0;
+      *startOffset = *endOffset = -1;
       return NULL;
     }
 
-  retval = (char *)
-    Accessibility_Text_getAttributes (CSPI_OBJREF (obj),
-                                     (CORBA_long) offset,
+  retval = Accessibility_Text_getAttributes (CSPI_OBJREF (obj),
+                                     offset,
                                      &retStartOffset,
                                      &retEndOffset,
                                      cspi_ev ());
 
   if (!cspi_check_ev ("getAttributes"))
     {
-      *startOffset = *endOffset = 0;
+      *startOffset = *endOffset = -1;
+      retval = NULL;
     }
   else
     {
@@ -173,7 +232,7 @@ AccessibleText_setCaretOffset (AccessibleText *obj,
 
   retval =
     Accessibility_Text_setCaretOffset (CSPI_OBJREF (obj),
-                                      (CORBA_long) newOffset, cspi_ev ());
+                                      newOffset, cspi_ev ());
 
   cspi_return_val_if_ev ("setCaretOffset", FALSE);
 
@@ -210,13 +269,28 @@ AccessibleText_getTextBeforeOffset (AccessibleText *obj,
 {
   char *retval;
   CORBA_long retStartOffset, retEndOffset;
-  retval = (char *)
-    Accessibility_Text_getTextBeforeOffset (CSPI_OBJREF (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,
                                           cspi_ev ());
-  *startOffset = (long) retStartOffset;
-  *endOffset = (long) retEndOffset;
+  if (!cspi_check_ev ("getTextBeforeOffset"))
+    {
+      *startOffset = *endOffset = -1;
+      retval = NULL;
+    }
+  else
+    {
+      *startOffset = retStartOffset;
+      *endOffset = retEndOffset;
+    }
   return retval;
 }
 
@@ -253,20 +327,20 @@ AccessibleText_getTextAtOffset (AccessibleText *obj,
 
   if (obj == NULL)
     {
-      *startOffset = *endOffset = 0;
+      *startOffset = *endOffset = -1;
       return NULL;
     }
 
   retval = Accessibility_Text_getTextAtOffset (CSPI_OBJREF (obj),
-                                              (CORBA_long) offset,
-                                              (Accessibility_TEXT_BOUNDARY_TYPE) type,
+                                              offset,
+                         get_accessible_text_boundary_type (type),
                                               &corbaStartOffset,
                                               &corbaEndOffset,
                                               cspi_ev ());
 
   if (!cspi_check_ev ("getTextAtOffset"))
     {
-      *startOffset = *endOffset = 0;
+      *startOffset = *endOffset = -1;
       retval = NULL;
     }
   else
@@ -274,9 +348,6 @@ AccessibleText_getTextAtOffset (AccessibleText *obj,
       *startOffset = corbaStartOffset;
       *endOffset   = corbaEndOffset;
     }
-#ifdef CSPI_DEBUG
-  fprintf (stderr, "text offsets %ld to %ld\n", *startOffset, *endOffset);
-#endif
   return retval;
 }
 
@@ -312,26 +383,26 @@ AccessibleText_getTextAfterOffset (AccessibleText *obj,
 
   if (obj == NULL)
     {
-      *startOffset = *endOffset = 0;
+      *startOffset = *endOffset = -1;
       return NULL;
     }
 
-  retval = (char *)
-    Accessibility_Text_getTextAfterOffset (CSPI_OBJREF (obj),
-                                          (CORBA_long) offset, (Accessibility_TEXT_BOUNDARY_TYPE) type,
+  retval = Accessibility_Text_getTextAfterOffset (CSPI_OBJREF (obj),
+                                          offset,
+                            get_accessible_text_boundary_type (type),
                                           &retStartOffset, &retEndOffset,
                                           cspi_ev ());
 
   if (!cspi_check_ev ("getTextAfterOffset"))
     {
-      *startOffset = *endOffset = 0;
+      *startOffset = *endOffset = -1;
+      retval = NULL;
     }
   else
     {
       *startOffset = retStartOffset;
       *endOffset   = retEndOffset;
     }
-
   return retval;
 }
 
@@ -358,7 +429,7 @@ AccessibleText_getCharacterAtOffset (AccessibleText *obj,
 
   retval =
     Accessibility_Text_getCharacterAtOffset (CSPI_OBJREF (obj),
-                                            (CORBA_long) offset,
+                                            offset,
                                             cspi_ev ());
 
   cspi_return_val_if_ev ("getCharacterAtOffset", -1);
@@ -398,23 +469,23 @@ AccessibleText_getCharacterExtents (AccessibleText *obj,
 
   if (obj == NULL)
     {
-      *x = *y = 0;
-      *width = *height = 0;
+      *x = *y = -1;
+      *width = *height = -1;
       return;
     }
 
   Accessibility_Text_getCharacterExtents (CSPI_OBJREF (obj),
-                                         (CORBA_long) offset,
+                                         offset,
                                          &retX,
                                          &retY,
                                          &retWidth,
                                          &retHeight,
-                                         (CORBA_short) type, cspi_ev ());
+                                         type, cspi_ev ());
 
   if (!cspi_check_ev ("getCharacterExtents"))
     {
-      *x = *y = 0;
-      *width = *height = 0;
+      *x = *y = -1;
+      *width = *height = -1;
     }
   else
     {
@@ -451,9 +522,9 @@ AccessibleText_getOffsetAtPoint (AccessibleText *obj,
 
   retval =
     Accessibility_Text_getOffsetAtPoint (CSPI_OBJREF (obj),
-                                        (CORBA_long) x,
-                                        (CORBA_long) y,
-                                        (CORBA_short) type, cspi_ev ());
+                                        x,
+                                        y,
+                                        type, cspi_ev ());
 
   cspi_return_val_if_ev ("getOffsetAtPoint", -1);
 
@@ -513,13 +584,13 @@ AccessibleText_getSelection (AccessibleText *obj,
     }
 
   Accessibility_Text_getSelection (CSPI_OBJREF (obj),
-                                  (CORBA_long) selectionNum,
+                                  selectionNum,
                                   &retStartOffset, &retEndOffset,
                                   cspi_ev ());
 
   if (!cspi_check_ev ("getSelection"))
     {
-      *startOffset = *endOffset = 0;
+      *startOffset = *endOffset = -1;
     }
   else
     {
@@ -548,8 +619,8 @@ AccessibleText_addSelection (AccessibleText *obj,
 
   retval =
     Accessibility_Text_addSelection (
-      CSPI_OBJREF (obj), (CORBA_long) startOffset,
-      (CORBA_long) endOffset, cspi_ev ());
+      CSPI_OBJREF (obj), startOffset,
+      endOffset, cspi_ev ());
 
   cspi_return_val_if_ev ("addSelection", FALSE);
 
@@ -576,7 +647,7 @@ AccessibleText_removeSelection (AccessibleText *obj,
 
   retval =
     Accessibility_Text_removeSelection (
-      CSPI_OBJREF (obj), (CORBA_long) selectionNum, cspi_ev ());
+      CSPI_OBJREF (obj), selectionNum, cspi_ev ());
 
   cspi_return_val_if_ev ("removeSelection", FALSE);
 
@@ -601,16 +672,18 @@ AccessibleText_setSelection (AccessibleText *obj,
                             long int startOffset,
                             long int endOffset)
 {
+  SPIBoolean retval;
+
   cspi_return_val_if_fail (obj != NULL, FALSE);
 
-  Accessibility_Text_setSelection (CSPI_OBJREF (obj),
-                                  (CORBA_long) selectionNum,
-                                  (CORBA_long) startOffset,
-                                  (CORBA_long) endOffset, cspi_ev ());
+  retval = Accessibility_Text_setSelection (CSPI_OBJREF (obj),
+                                  selectionNum,
+                                  startOffset,
+                                  endOffset, cspi_ev ());
 
   cspi_return_val_if_ev ("setSelection", FALSE);
 
-  return TRUE;
+  return retval;
 }