2008-12-13 Mike Gorse <mgorse@novell.com>
[platform/core/uifw/at-spi2-atk.git] / atk-adaptor / text.c
index aa4f7a6..451a92b 100644 (file)
@@ -28,7 +28,7 @@
 static AtkText *
 get_text (DBusMessage * message)
 {
-  AtkObject *obj = spi_dbus_get_object (dbus_message_get_path (message));
+  AtkObject *obj = atk_dbus_get_object (dbus_message_get_path (message));
   if (!obj)
     return NULL;
   return ATK_TEXT (obj);
@@ -37,7 +37,7 @@ get_text (DBusMessage * message)
 static AtkText *
 get_text_from_path (const char *path, void *user_data)
 {
-  AtkObject *obj = spi_dbus_get_object (path);
+  AtkObject *obj = atk_dbus_get_object (path);
   if (!obj || !ATK_IS_TEXT(obj))
     return NULL;
   return ATK_TEXT (obj);
@@ -242,6 +242,33 @@ impl_getTextAfterOffset (DBusConnection * bus, DBusMessage * message,
 }
 
 static DBusMessage *
+impl_getCharacterAtOffset (DBusConnection * bus, DBusMessage * message,
+                        void *user_data)
+{
+  AtkText *text = get_text (message);
+  dbus_int32_t offset;
+  dbus_int32_t ch;
+  DBusError error;
+  DBusMessage *reply;
+
+  if (!text)
+    return spi_dbus_general_error (message);
+  dbus_error_init (&error);
+  if (!dbus_message_get_args
+      (message, &error, DBUS_TYPE_INT32, &offset, DBUS_TYPE_INVALID))
+    {
+      return SPI_DBUS_RETURN_ERROR (message, &error);
+    }
+  ch = atk_text_get_character_at_offset (text, offset);
+  reply = dbus_message_new_method_return (message);
+  if (reply)
+    {
+      dbus_message_append_args (reply, DBUS_TYPE_INT32, &ch, DBUS_TYPE_INVALID);
+    }
+  return reply;
+}
+
+static DBusMessage *
 impl_getAttributeValue (DBusConnection * bus, DBusMessage * message,
                        void *user_data)
 {
@@ -348,18 +375,19 @@ impl_getAttributes (DBusConnection * bus, DBusMessage * message,
 
   set = atk_text_get_run_attributes (text, offset,
                                     &intstart_offset, &intend_offset);
+
+  rv = _string_from_attribute_set (set);
+
   startOffset = intstart_offset;
   endOffset = intend_offset;
-  rv = _string_from_attribute_set (set);
   reply = dbus_message_new_method_return (message);
   if (reply)
     {
-      dbus_message_append_args (reply, DBUS_TYPE_INT32, &startOffset,
-                               DBUS_TYPE_INT32, &endOffset, DBUS_TYPE_STRING,
-                               &rv, DBUS_TYPE_INVALID);
+      dbus_message_append_args (reply, DBUS_TYPE_STRING, &rv, DBUS_TYPE_INT32, &startOffset,
+                               DBUS_TYPE_INT32, &endOffset, DBUS_TYPE_INVALID);
     }
-  g_free (rv);
   atk_attribute_set_free (set);
+  g_free(rv);
   return reply;
 }
 
@@ -396,7 +424,7 @@ impl_getCharacterExtents (DBusConnection * bus, DBusMessage * message,
 {
   AtkText *text = get_text (message);
   dbus_int32_t offset;
-  dbus_uint32_t coordType;
+  dbus_int16_t coordType;
   dbus_int32_t x, y, width, height;
   gint ix = 0, iy = 0, iw = 0, ih = 0;
   DBusError error;
@@ -406,7 +434,7 @@ impl_getCharacterExtents (DBusConnection * bus, DBusMessage * message,
     return spi_dbus_general_error (message);
   dbus_error_init (&error);
   if (!dbus_message_get_args
-      (message, &error, DBUS_TYPE_INT32, &offset, DBUS_TYPE_INT32, &coordType,
+      (message, &error, DBUS_TYPE_INT32, &offset, DBUS_TYPE_INT16, &coordType,
        DBUS_TYPE_INVALID))
     {
       return SPI_DBUS_RETURN_ERROR (message, &error);
@@ -433,7 +461,7 @@ impl_getOffsetAtPoint (DBusConnection * bus, DBusMessage * message,
 {
   AtkText *text = get_text (message);
   dbus_int32_t x, y;
-  dbus_uint32_t coordType;
+  dbus_int16_t coordType;
   dbus_int32_t rv;
   DBusError error;
   DBusMessage *reply;
@@ -443,7 +471,7 @@ impl_getOffsetAtPoint (DBusConnection * bus, DBusMessage * message,
   dbus_error_init (&error);
   if (!dbus_message_get_args
       (message, &error, DBUS_TYPE_INT32, &x, DBUS_TYPE_INT32, &y,
-       DBUS_TYPE_UINT32, &coordType, DBUS_TYPE_INVALID))
+       DBUS_TYPE_INT16, &coordType, DBUS_TYPE_INVALID))
     {
       return SPI_DBUS_RETURN_ERROR (message, &error);
     }
@@ -603,7 +631,7 @@ impl_getRangeExtents (DBusConnection * bus, DBusMessage * message,
 {
   AtkText *text = get_text (message);
   dbus_int32_t startOffset, endOffset;
-  dbus_uint32_t coordType;
+  dbus_int16_t coordType;
   AtkTextRectangle rect;
   dbus_int32_t x, y, width, height;
   DBusError error;
@@ -614,7 +642,7 @@ impl_getRangeExtents (DBusConnection * bus, DBusMessage * message,
   dbus_error_init (&error);
   if (!dbus_message_get_args
       (message, &error, DBUS_TYPE_INT32, &startOffset, DBUS_TYPE_INT32,
-       &endOffset, DBUS_TYPE_UINT32, &coordType, DBUS_TYPE_INVALID))
+       &endOffset, DBUS_TYPE_INT16, &coordType, DBUS_TYPE_INVALID))
     {
       return SPI_DBUS_RETURN_ERROR (message, &error);
     }
@@ -643,7 +671,7 @@ impl_getBoundedRanges (DBusConnection * bus, DBusMessage * message,
 {
   AtkText *text = get_text (message);
   dbus_int32_t x, y, width, height;
-  dbus_uint32_t coordType, xClipType, yClipType;
+  dbus_int16_t coordType, xClipType, yClipType;
   DBusError error;
   AtkTextRange **range_list = NULL;
   AtkTextRectangle rect;
@@ -808,7 +836,7 @@ impl_getDefaultAttributeSet (DBusConnection * bus, DBusMessage * message,
   if (attributes)
     n_attributes = g_slist_length (attributes);
 
-  retval = (char **) malloc (n_attributes * sizeof (char *));
+  retval = g_new (char *, n_attributes);
 
   for (i = 0; i < n_attributes; ++i)
     {
@@ -835,6 +863,7 @@ static DRouteMethod methods[] = {
   {impl_getTextBeforeOffset, "getTextBeforeOffset"},
   {impl_getTextAtOffset, "getTextAtOffset"},
   {impl_getTextAfterOffset, "getTextAfterOffset"},
+  {impl_getCharacterAtOffset, "getCharacterAtOffset"},
   {impl_getAttributeValue, "getAttributeValue"},
   {impl_getAttributes, "getAttributes"},
   {impl_getDefaultAttributes, "getDefaultAttributes"},
@@ -861,7 +890,7 @@ static DRouteProperty properties[] = {
 void
 spi_initialize_text (DRouteData * data)
 {
-  droute_add_interface (data, "org.freedesktop.atspi.Text", methods,
+  droute_add_interface (data, SPI_DBUS_INTERFACE_TEXT, methods,
                        properties,
                        (DRouteGetDatumFunction) get_text_from_path, NULL);
 };