#include <atk/atk.h>
#include <droute/droute.h>
-#include "common/spi-dbus.h"
+#include "spi-dbus.h"
#include "object.h"
+#include "introspection.h"
static dbus_bool_t
impl_get_CharacterCount (DBusMessageIter * iter, void *user_data)
return droute_return_v_int32 (iter, atk_text_get_caret_offset (text));
}
+static gchar *
+validate_allocated_string (gchar *str)
+{
+ if (!str)
+ return g_strdup ("");
+ if (!g_utf8_validate (str, -1, NULL))
+ {
+ g_warning ("atk-bridge: received bad UTF-8 string from a get_text function");
+ g_free (str);
+ return g_strdup ("");
+ }
+ return str;
+}
+
static DBusMessage *
impl_GetText (DBusConnection * bus, DBusMessage * message, void *user_data)
{
return droute_invalid_arguments_error (message);
}
txt = atk_text_get_text (text, startOffset, endOffset);
- if (!txt)
- txt = g_strdup ("");
+ txt = validate_allocated_string (txt);
reply = dbus_message_new_method_return (message);
if (reply)
{
&intstart_offset, &intend_offset);
startOffset = intstart_offset;
endOffset = intend_offset;
- if (!txt)
- txt = g_strdup ("");
+ txt = validate_allocated_string (txt);
reply = dbus_message_new_method_return (message);
if (reply)
{
&intstart_offset, &intend_offset);
startOffset = intstart_offset;
endOffset = intend_offset;
- if (!txt)
- txt = g_strdup ("");
+ txt = validate_allocated_string (txt);
reply = dbus_message_new_method_return (message);
if (reply)
{
&intstart_offset, &intend_offset);
startOffset = intstart_offset;
endOffset = intend_offset;
- if (!txt)
- txt = g_strdup ("");
+ txt = validate_allocated_string (txt);
reply = dbus_message_new_method_return (message);
if (reply)
{
return reply;
}
-static char *
-_string_from_attribute_set (AtkAttributeSet * set)
-{
- gchar *attributes, *tmp, *tmp2;
- GSList *cur_attr;
- AtkAttribute *at;
-
- attributes = g_strdup ("");
- cur_attr = (GSList *) set;
- while (cur_attr)
- {
- at = (AtkAttribute *) cur_attr->data;
- tmp = g_strdup_printf ("%s%s:%s%s",
- ((GSList *) (set) == cur_attr) ? "" : " ",
- at->name, at->value,
- (cur_attr->next) ? ";" : "");
- tmp2 = g_strconcat (attributes, tmp, NULL);
- g_free (tmp);
- g_free (attributes);
- attributes = tmp2;
- cur_attr = cur_attr->next;
- }
- return attributes;
-}
-
static DBusMessage *
impl_GetAttributes (DBusConnection * bus, DBusMessage * message,
void *user_data)
if (reply)
{
dbus_message_iter_init_append (reply, &iter);
- spi_atk_append_attribute_set (&iter, set);
+ spi_object_append_attribute_set (&iter, set);
dbus_message_append_args (reply, DBUS_TYPE_INT32, &startOffset,
DBUS_TYPE_INT32, &endOffset,
DBUS_TYPE_INVALID);
if (reply)
{
dbus_message_iter_init_append (reply, &iter);
- spi_atk_append_attribute_set (&iter, set);
+ spi_object_append_attribute_set (&iter, set);
}
atk_attribute_set_free (set);
return reply;
gint intstart_offset = 0, intend_offset = 0;
DBusMessage *reply;
AtkAttributeSet *attributes = NULL;
- AtkAttribute *attr = NULL;
- DBusMessageIter iter, iterArray;
+ DBusMessageIter iter;
g_return_val_if_fail (ATK_IS_TEXT (user_data),
droute_not_yet_handled_error (message));
if (reply)
{
dbus_message_iter_init_append (reply, &iter);
- spi_atk_append_attribute_set (&iter, attributes);
+ spi_object_append_attribute_set (&iter, attributes);
}
if (attributes)
spi_initialize_text (DRoutePath * path)
{
droute_path_add_interface (path,
- SPI_DBUS_INTERFACE_TEXT, methods, properties);
+ ATSPI_DBUS_INTERFACE_TEXT, spi_org_a11y_atspi_Text, methods, properties);
};