From cb08f4d844e9b85744c54a4d6e9179f44a27e3fc Mon Sep 17 00:00:00 2001 From: Jan Arne Petersen Date: Sun, 9 Sep 2012 23:08:40 +0200 Subject: [PATCH] text: Fix set_surrounding_text request Add cursor and anchor positions as arguments to the set_surrounding_text request. The cursor and anchor positions are relative to the surrounded text, so it does not make sense to have that separate. Remove the separate set_cursor_index and set_selected_text requests. Also update the corresponding event in input-method-context and add support for it in the weston example keyboard. Signed-off-by: Jan Arne Petersen --- clients/editor.c | 5 +++++ clients/keyboard.c | 17 +++++++++++++++++ protocol/text.xml | 24 +++++++++++++++--------- src/text-backend.c | 26 +++++++------------------- 4 files changed, 44 insertions(+), 28 deletions(-) diff --git a/clients/editor.c b/clients/editor.c index 86d9a12..b0b400e 100644 --- a/clients/editor.c +++ b/clients/editor.c @@ -433,6 +433,11 @@ text_entry_update_layout(struct text_entry *entry) free(text); widget_schedule_redraw(entry->widget); + + text_model_set_surrounding_text(entry->model, + entry->text, + entry->cursor, + entry->anchor); } static void diff --git a/clients/keyboard.c b/clients/keyboard.c index 50ede54..c940c6f 100644 --- a/clients/keyboard.c +++ b/clients/keyboard.c @@ -137,6 +137,20 @@ button_handler(struct widget *widget, } static void +input_method_context_surrounding_text(void *data, + struct input_method_context *context, + const char *text, + uint32_t cursor, + uint32_t anchor) +{ + fprintf(stderr, "Surrounding text updated: %s\n", text); +} + +static const struct input_method_context_listener input_method_context_listener = { + input_method_context_surrounding_text, +}; + +static void input_method_activate(void *data, struct input_method *input_method, struct input_method_context *context) @@ -147,6 +161,9 @@ input_method_activate(void *data, input_method_context_destroy(keyboard->context); keyboard->context = context; + input_method_context_add_listener(context, + &input_method_context_listener, + keyboard); } static void diff --git a/protocol/text.xml b/protocol/text.xml index a196b55..6a99eba 100644 --- a/protocol/text.xml +++ b/protocol/text.xml @@ -11,10 +11,15 @@ and compose text out of them. + + Sets the plain surrounding text around the input position. Cursor is the + position within the surrounding text. Anchor is the position of the + selection anchor within the surrounding text. If there is no selected + text anchor is the same as cursor. + - - - + + @@ -35,10 +40,6 @@ - - - - @@ -104,11 +105,16 @@ - + - The surrounding text from the model. + The plain surrounding text around the input position. Cursor is the + position within the surrounding text. Anchor is the position of the + selection anchor within the surrounding text. If there is no selected + text anchor is the same as cursor. + + diff --git a/src/text-backend.c b/src/text-backend.c index 7ae023a..ed2e24c 100644 --- a/src/text-backend.c +++ b/src/text-backend.c @@ -109,7 +109,9 @@ destroy_text_model(struct wl_resource *resource) static void text_model_set_surrounding_text(struct wl_client *client, struct wl_resource *resource, - const char *text) + const char *text, + uint32_t cursor, + uint32_t anchor) { struct text_model *text_model = resource->data; struct input_method *input_method, *next; @@ -117,18 +119,14 @@ text_model_set_surrounding_text(struct wl_client *client, wl_list_for_each_safe(input_method, next, &text_model->input_methods, link) { if (!input_method->context) continue; - input_method_context_send_set_surrounding_text(&input_method->context->resource, text); + input_method_context_send_surrounding_text(&input_method->context->resource, + text, + cursor, + anchor); } } static void -text_model_set_cursor_index(struct wl_client *client, - struct wl_resource *resource, - uint32_t index) -{ -} - -static void text_model_activate(struct wl_client *client, struct wl_resource *resource, struct wl_resource *seat, @@ -174,14 +172,6 @@ text_model_deactivate(struct wl_client *client, } static void -text_model_set_selected_text(struct wl_client *client, - struct wl_resource *resource, - const char *text, - int32_t index) -{ -} - -static void text_model_set_micro_focus(struct wl_client *client, struct wl_resource *resource, int32_t x, @@ -205,10 +195,8 @@ text_model_set_content_type(struct wl_client *client, static const struct text_model_interface text_model_implementation = { text_model_set_surrounding_text, - text_model_set_cursor_index, text_model_activate, text_model_deactivate, - text_model_set_selected_text, text_model_set_micro_focus, text_model_set_preedit, text_model_set_content_type -- 2.7.4