static DBusMessage * impl_insertText (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkEditableText *editable = (AtkEditableText *) user_data; dbus_int32_t position, length; char *text; dbus_bool_t rv; DBusError error; DBusMessage *reply; gint ip; g_return_val_if_fail (ATK_IS_EDITABLE_TEXT (user_data), droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &position, DBUS_TYPE_STRING, &text, DBUS_TYPE_INT32, &length, DBUS_TYPE_INVALID)) { return droute_invalid_arguments_error (message); } ip = position; atk_editable_text_insert_text (editable, text, length, &ip); rv = TRUE; // TODO decide if we really need this return value reply = dbus_message_new_method_return (message); if (reply) { dbus_message_append_args (reply, DBUS_TYPE_BOOLEAN, &rv, DBUS_TYPE_INVALID); } return reply; }
/* reason: discard text length parameter and handle in-out position it's probably too much trouble to add automatic in-out support, especially because it only affects primitive types - why couldn't they just return that by value? */ USER_OBJECT_ S_atk_editable_text_insert_text(USER_OBJECT_ s_object, USER_OBJECT_ s_string, USER_OBJECT_ s_position) { AtkEditableText* object = ATK_EDITABLE_TEXT(getPtrValue(s_object)); const gchar* string = (const gchar*)asCString(s_string); gint* position = (gint*)asCArray(s_position, gint, asCInteger); gint length = strlen(string); USER_OBJECT_ _result = NULL_USER_OBJECT; atk_editable_text_insert_text(object, string, length, position); _result = retByVal(_result, "position", asRInteger(*position), NULL); return(_result); }
static gboolean insert_text_press_cb (ClutterActor *actor, ClutterButtonEvent *event, gpointer data) { AtkObject *object = NULL; AtkEditableText *cally_editable_text = NULL; gint pos = 0; object = atk_gobject_accessible_for_object (G_OBJECT (text_editable_actor)); cally_editable_text = ATK_EDITABLE_TEXT (object); pos = 3; atk_editable_text_insert_text (cally_editable_text, "New", 0, &pos); return TRUE; }
/* * Test AtkText interface */ static void test_atk_text (ClutterActor *actor) { AtkObject *object = NULL; AtkEditableText *cally_editable_text = NULL; gint pos = 0; object = atk_gobject_accessible_for_object (G_OBJECT (actor)); cally_editable_text = ATK_EDITABLE_TEXT (object); if (cally_editable_text != NULL) { atk_editable_text_set_text_contents (cally_editable_text, "New text"); atk_editable_text_delete_text (cally_editable_text, 0, 3); pos = 3; atk_editable_text_insert_text (cally_editable_text, "New", 0, &pos); /* Not implemented in cally, just checking that we can call this functions */ atk_editable_text_copy_text (cally_editable_text, 0, -1); atk_editable_text_paste_text (cally_editable_text, 5); atk_editable_text_cut_text (cally_editable_text, 0, -1); } }
static void _do_test(AtkObject *obj) { gchar *text; int start_offset, end_offset; g_assert(ATK_IS_EDITABLE_TEXT(obj)); text = atk_text_get_text(ATK_TEXT(obj), 0, -1); if (!g_strcmp0(text, ENTRY_FIRST)) { g_free(text); text = g_strdup(ENTRY_TEXT); atk_editable_text_set_text_contents(ATK_EDITABLE_TEXT(obj), text); g_free(text); start_offset = 0; end_offset = -1; text = atk_text_get_text(ATK_TEXT(obj), start_offset, end_offset); g_assert_cmpstr(text, ==, ENTRY_TEXT); g_free(text); start_offset = 0; end_offset = 7; atk_editable_text_delete_text(ATK_EDITABLE_TEXT(obj), start_offset, end_offset); text = atk_text_get_text(ATK_TEXT(obj), 0, -1); g_assert_cmpstr(text, ==, " lololololo olololo"); g_free(text); atk_editable_text_insert_text(ATK_EDITABLE_TEXT(obj), "Trololo", 7, &start_offset); text = atk_text_get_text(ATK_TEXT(obj), 0, -1); g_assert(start_offset == 7); g_assert_cmpstr(text, ==, ENTRY_TEXT); g_free(text); start_offset = 8; end_offset = 18; atk_editable_text_copy_text(ATK_EDITABLE_TEXT(obj), start_offset, end_offset); atk_editable_text_set_text_contents(ATK_EDITABLE_TEXT(obj), "123"); atk_editable_text_paste_text(ATK_EDITABLE_TEXT(obj), 3); start_offset = 0; end_offset = -1; text = atk_text_get_text(ATK_TEXT(obj), start_offset, end_offset); g_assert_cmpstr(text, ==, "123lololololo"); g_free(text); start_offset = 0; end_offset = 3; atk_editable_text_cut_text(ATK_EDITABLE_TEXT(obj), start_offset, end_offset); text = atk_text_get_text(ATK_TEXT(obj), start_offset, end_offset); g_assert_cmpstr(text, ==, "lol"); g_free(text); start_offset = 0; end_offset = -1; atk_editable_text_paste_text(ATK_EDITABLE_TEXT(obj), 3); text = atk_text_get_text(ATK_TEXT(obj), start_offset, end_offset); g_assert_cmpstr(text, ==, "lol123olololo"); g_free(text); atk_editable_text_cut_text(ATK_EDITABLE_TEXT(obj), 3, 6); text = atk_text_get_text(ATK_TEXT(obj), 0, -1); g_assert_cmpstr(text, ==, "lololololo"); g_free(text); }