From efd7a4af5e37299f17011a7f39cc66d8416a1bf9 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Wed, 6 Dec 2017 17:09:15 +0100 Subject: [PATCH] protocol: Add internal text input protocol The text input protocol has been made internal thus far, so mutter ships an internal copy. --- src/Makefile.am | 2 + src/wayland/protocol/gtk-text-input.xml | 302 ++++++++++++++++++++++++ 2 files changed, 304 insertions(+) create mode 100644 src/wayland/protocol/gtk-text-input.xml diff --git a/src/Makefile.am b/src/Makefile.am index 1e5e2b4f7..4b0d5a0bf 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -86,6 +86,8 @@ mutter_built_sources += \ xdg-output-unstable-v1-server-protocol.h \ xwayland-keyboard-grab-unstable-v1-protocol.c \ xwayland-keyboard-grab-unstable-v1-server-protocol.h \ + gtk-text-input-protocol.c \ + gtk-text-input-server-protocol.h \ $(NULL) endif diff --git a/src/wayland/protocol/gtk-text-input.xml b/src/wayland/protocol/gtk-text-input.xml new file mode 100644 index 000000000..a134a19f6 --- /dev/null +++ b/src/wayland/protocol/gtk-text-input.xml @@ -0,0 +1,302 @@ + + + + + Copyright © 2012, 2013 Intel Corporation + Copyright © 2015, 2016 Jan Arne Petersen + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of + the copyright holders not be used in advertising or publicity + pertaining to distribution of the software without specific, + written prior permission. The copyright holders make no + representations about the suitability of this software for any + purpose. It is provided "as is" without express or implied + warranty. + + THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF + THIS SOFTWARE. + + + + + The gtk_text_input interface represents text input and input methods + associated with a seat. It provides enter/leave events to follow the + text input focus for a seat. + + Requests are used to enable/disable the text-input object and set + state information like surrounding and selected text or the content type. + The information about the entered text is sent to the text-input object + via the pre-edit and commit_string events. Using this interface removes + the need for applications to directly process hardware key events and + compose text out of them. + + Text is valid UTF-8 encoded, indices and lengths are in bytes. Indices + have to always point to the first byte of an UTF-8 encoded code point. + Lengths are not allowed to contain just a part of an UTF-8 encoded code + point. + + Focus moving throughout surfaces will result in the emission of + gtk_text_input.enter and gtk_text_input.leave events. The focused + surface must perform gtk_text_input.enable and + gtk_text_input.disable requests as the keyboard focus moves across + editable and non-editable elements of the UI. Those two requests are not + expected to be paired with each other, the compositor must be able to + handle consecutive series of the same request. + + State is sent by the state requests (set_surrounding_text, + set_content_type and set_cursor_rectangle) and a commit request. + After an enter event or disable request all state information is + invalidated and needs to be resent by the client. + + This protocol defines requests and events necessary for regular clients + to communicate with an input method. The gtk_input_method protocol + defines the interfaces necessary to implement standalone input methods. + If a compositor implements both interfaces, it will be the arbiter of the + communication between both. + + Warning! The protocol described in this file is experimental and + backward incompatible changes may be made. Backward compatible changes + may be added together with the corresponding interface version bump. + Backward incompatible changes are done by bumping the version number in + the protocol and interface names and resetting the interface version. + Once the protocol is to be declared stable, the 'z' prefix and the + version number in the protocol and interface names are removed and the + interface version number is reset. + + + + + Destroy the wp_text_input object. Also disables all surfaces enabled + through this wp_text_input object + + + + + + Content hint is a bitmask to allow to modify the behavior of the text + input. + + + + + + + + + Requests text input on a surface. The serial provided must be the one + received on gtk_text_input.enter. + + + + + + + + Explicitly disable text input in a surface (typically when there is no + focus on any text entry inside the surface). + + + + + + Sets the plain surrounding text around the input position. Text is + UTF-8 encoded. Cursor is the byte offset within the surrounding text. + Anchor is the byte offset of the selection anchor within the + surrounding text. If there is no selected text, anchor is the same as + cursor. + + Make sure to always send some text before and after the cursor + except when the cursor is at the beginning or end of text. + + When there was a configure_surrounding_text event take the + before_cursor and after_cursor arguments into account for picking how + much surrounding text to send. + + There is a maximum length of wayland messages so text can not be + longer than 4000 bytes. + + + + + + + + + Content hint is a bitmask to allow to modify the behavior of the text + input. + + + + + + + + + + + + + + + + + The content purpose allows to specify the primary purpose of a text + input. + + This allows an input method to show special purpose input panels with + extra characters or to disallow some characters. + + + + + + + + + + + + + + + + + + + + Sets the content purpose and content hint. While the purpose is the + basic purpose of an input field, the hint flags allow to modify some + of the behavior. + + When no content type is explicitly set, a normal content purpose with + none hint should be assumed. + + + + + + + + Sets the cursor outline as a x, y, width, height rectangle in surface + local coordinates. + + Allows the compositor to put a window with word suggestions near the + cursor. + + + + + + + + + + Allows to atomically send state updates from client. The previous + set_surrounding_text, set_content_type and set_cursor_rectangle + become effective after this call. + + Serial should be set to the serial from the last wp_text_input.enter + event. + + To make sure to not receive outdated input method events after a + state update, wl_display_sync() should be called after making this + request. + + + + + + Notification that this seat's text-input focus is on a certain surface. + + When the seat has the keyboard capability the text-input focus follows + the keyboard focus. + + + + + + + + Notification that this seat's text-input focus is no longer on + a certain surface. The client should reset any preedit string previously + set. + + The leave notification is sent before the enter notification + for the new focus. + + When the seat has the keyboard capability the text-input focus follows + the keyboard focus. + + + + + + + + Notify when a new composing text (pre-edit) should be set around the + current cursor position. Any previously set composing text should + be removed. + + + + + + + + Notify when text should be inserted into the editor widget. The text to + commit could be either just a single character after a key press or the + result of some composing (pre-edit). + + The text argument could be also null if some text is removed (see + gtk_text_input.delete_surrounding_text). + + Any previously set composing text should be removed. + + + + + + + Notify when the text around the current cursor position should be + deleted. Before_length and after_length is the length (in bytes) of text + before and after the current cursor position (excluding the selection) + to delete. + + This event should be handled as part of a following commit_string or + preedit_string event. + + + + + + + + + A factory for text-input objects. This object is a global singleton. + + + + + Destroy the wp_text_input_manager object. + + + + + + Creates a new text-input object for a given seat. + + + + + +