diff options
-rw-r--r-- | clients/editor.c | 5 | ||||
-rw-r--r-- | clients/keyboard.c | 17 | ||||
-rw-r--r-- | protocol/text.xml | 24 | ||||
-rw-r--r-- | src/text-backend.c | 26 |
4 files changed, 44 insertions, 28 deletions
diff --git a/clients/editor.c b/clients/editor.c index 86d9a12f..b0b400eb 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 50ede542..c940c6fc 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 a196b552..6a99ebac 100644 --- a/protocol/text.xml +++ b/protocol/text.xml @@ -11,10 +11,15 @@ and compose text out of them. </description> <request name="set_surrounding_text"> + <description summary="sets the surrounding text"> + 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. + </description> <arg name="text" type="string"/> - </request> - <request name="set_cursor_index"> - <arg name="index" type="uint"/> + <arg name="cursor" type="uint"/> + <arg name="anchor" type="uint"/> </request> <request name="activate"> <description summary="request activation"> @@ -35,10 +40,6 @@ </description> <arg name="seat" type="object" interface="wl_seat"/> </request> - <request name="set_selected_text"> - <arg name="text" type="string"/> - <arg name="index" type="int"/> - </request> <request name="set_micro_focus"> <arg name="x" type="int"/> <arg name="y" type="int"/> @@ -104,11 +105,16 @@ <arg name="text" type="string"/> <arg name="index" type="uint"/> </request> - <event name="set_surrounding_text"> + <event name="surrounding_text"> <description summary="surrounding text event"> - 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. </description> <arg name="text" type="string"/> + <arg name="cursor" type="uint"/> + <arg name="anchor" type="uint"/> </event> </interface> diff --git a/src/text-backend.c b/src/text-backend.c index 7ae023ae..ed2e24c7 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 |