input_method_v3

Protocol for creating input methods

This protocol allows applications to act as input methods for compositors.

An input method context is used to manage the state of the input method.

Text strings are UTF-8 encoded, their indices and lengths are in bytes.

This document adheres to the RFC 2119 when using words like "must", "should", "may", etc.

input method

An input method object allows for clients to compose text.

The objects connects the client to a text input in an application, and lets the client to serve as an input method for a seat.

The wp_input_method_v3 object can occupy two distinct states: active and inactive. In the active state, the object is associated to and communicates with a text input. In the inactive state, there is no associated text input, and the only communication is with the compositor. Initially, the input method is in the inactive state.

Requests issued in the inactive state must be accepted by the compositor. Because of the serial mechanism, and the state reset on activate event, they will not have any effect on the state of the next text input.

destroy()
destroy the input method

Destroys the wp_input_method_v3 object and any associated child objects, i.e. wp_input_popup_surface_v3

commit(serial: uint)
Argument
Type
Description
serialuint
apply state

Apply state changes from commit_string, set_preedit_string and delete_surrounding_text requests.

The state relating to these events is double-buffered, and each one modifies the pending state. This request replaces the current state with the pending state.

The connected text input is expected to proceed by evaluating the changes in the following order:

1. Replace existing preedit string with the cursor. 2. Delete requested surrounding text. 3. Insert commit string with the cursor at its end. 4. Calculate surrounding text to send. 5. Insert new preedit text in cursor position. 6. Place cursor inside preedit text.

The serial number reflects the last state of the wp_input_method_v3 object known to the client. The value of the serial argument must be equal to the number of done events already issued by that object. When the compositor receives a commit request with a serial different than the number of past done events, it must proceed as normal, except it should not change the current state of the wp_input_method_v3 object.

set_preedit_string(text: string, cursor_begin: int, cursor_end: int)
Argument
Type
Description
textstring
cursor_beginint
cursor_endint
pre-edit string

Send the pre-edit string text to the application text input.

Place a new composing text (pre-edit) at the current cursor position. Any previously set composing text must be removed. Any previously existing selected text must be removed. The cursor is moved to a new position within the preedit string.

The argument text is a buffer containing the preedit string. There is a maximum length of wayland messages, so text can not be longer than 4000 bytes.

The arguments cursor_begin and cursor_end are counted in bytes relative to the beginning of the submitted string buffer. Cursor should be hidden by the text input when both are equal to -1.

cursor_begin indicates the beginning of the cursor. cursor_end indicates the end of the cursor. It may be equal or different than cursor_begin.

Values set with this event are double-buffered. They must be applied on the next wp_input_method_v3.commit event.

The initial value of text is an empty string. The initial value of cursor_begin, and cursor_end are both 0.

set_string(text: string)
Argument
Type
Description
textstring
set string to be committed

Send the string text for insertion to the application.

Inserts a string at current cursor position (see commit event sequence). The string to commit could be either just a single character after a key press or the result of some composing.

The argument text is a buffer containing the string to insert. There is a maximum length of wayland messages, so text can not be longer than 4000 bytes.

Values set with this event are double-buffered. They must be applied and reset to initial on the next wp_text_input_v3.commit request.

The initial value of text is an empty string.

delete_surrounding_text(before_length: uint, after_length: uint)
Argument
Type
Description
before_lengthuint
after_lengthuint
delete text

Remove the surrounding text.

before_length and after_length are the number of bytes before and after the current cursor index (excluding the preedit text) to delete.

If any preedit text is present, it is replaced with the cursor for the purpose of this event. In effect before_length is counted from the beginning of preedit text, and after_length from its end (see commit event sequence).

Values set with this event are double-buffered. They must be applied and reset to initial on the next wp_input_method_v3.commit request.

The initial values of both before_length and after_length are 0.

Argument
Type
Description
serialuint
serial number of the key event
typeuint<wp_input_method_v3.key_forward_type>
set_action(action: uint<wp_text_input_v3.action>)
Argument
Type
Description
actionuint<wp_text_input_v3.action>
action performed
perform an action

Set the action to be performed on commit.

Values set with this event are double-buffered. They must be applied and reset to initial on the next wp_input_method_v3.commit request.

set_language(language: string)
Argument
Type
Description
languagestring
new language set by IME
notify of language selection

Notify the application of language used by the input method.

This event will be sent on creation if known and for all subsequent changes.

The language should be specified as an IETF BCP 47 tag. Setting an empty string will reset any known language back to the default unknown state.

set_preedit_commit_mode(mode: uint<wp_text_input_v3.commit_mode>)
Argument
Type
Description
modeuint<wp_text_input_v3.commit_mode>
pre-edit commit mode

Specify how the visible preedit should be handled when switching the focus widget or changing the cursor position, whether to commit the preedit text or clear the preedit text.

This is usually used together with the preedit_string event.

The commit behavior is the same for focus switch and cursor position change.

The parameter mode selects the desired behavior and its value is one from the commit mode enum.

pre-edit style

Sets styling information on composing text. Event sent without preedit string sets a default style for all future preedit text.

The parameters begin and end are counted in bytes relative to the beginning of the text buffer submitted through wp_text_input_v3.preedit_string.

Multiple events may be submitted if the preedit string has different sections. Compositors/input method must not send multiple wp_text_input_v3.preedit_underline events with overlapping extents.

Clients should pick colors appropriate for their color scheme, underline colors follows text color. For parts of the preedit string that are not covered by any wp_text_input_v3.preedit_hint event, or if no events were sent, the text will be considered unstyled.

Values set with this event are double-buffered. They must be applied and reset on the next wp_text_input_v3.done event.

get_input_method_popup(popup: object<xdg_popup>)
Argument
Type
Description
popupobject<xdg_popup>
tell the compositor to assign parents to this xdg_popup

This tells the compositor to assign parents to an xdg_popup. This popup should have been created via xdg_surface::get_popup with the parent set to NULL, and this request must be invoked before committing the popup's initial state.

See the documentation of xdg_popup for more details about what an xdg_popup is and how it is used.

activate(app_id: string)
Argument
Type
Description
app_idstring
input method has been requested

Notification that a text input focused on this seat requested the input method to be activated.

This event serves the purpose of providing the compositor with an active input method.

This event resets all state associated with previous enable, disable, surrounding_text, text_change_cause, and content_type events, as well as the state associated with set_preedit_string, commit_string, and delete_surrounding_text requests. In addition, it marks the wp_input_method_v3 object as active.

The surrounding_text, and content_type events must follow before the next done event if the text input supports the respective functionality.

State set with this event is double-buffered. It will get applied on the next wp_input_method_v3.done event, and stay valid until changed.

The app ID identifies the general class of applications to which the current input method context belongs. An input method framework can use this to manage individual state for different text input clients.

For D-Bus activatable applications, the app ID is used as the D-Bus service name.

The compositor shell will try to group application surfaces together by their app ID. As a best practice, it is suggested to select app ID's that match the basename of the application's .desktop file. For example, "org.freedesktop.FooViewer" where the .desktop file is "org.freedesktop.FooViewer.desktop".

See the desktop-entry specification [0] for more details on application identifiers and how they relate to well-known D-Bus names and .desktop files.

[0] http://standards.freedesktop.org/desktop-entry-spec/

deactivate()
deactivate event

Notification that no focused text input currently needs an active input method on this seat.

This event marks the wp_input_method_v3 object as inactive. The compositor must make all existing wp_input_popup_surface_v3 objects invisible until the next activate event.

State set with this event is double-buffered. It will get applied on the next wp_input_method_v3.done event, and stay valid until changed.

text_input_destroyed(app_id: string)
Argument
Type
Description
app_idstring
text input has been destroyed

Notification that a text input focused on this seat has been destroyed.

This event serves the purpose of providing the input method with information of when and which text input has been destroyed.

This event removed all state associated with a text input.

The app ID identifies the general class of applications to which the current input method context belongs. An input method framework can use this to manage individual state for different text input clients.

For D-Bus activatable applications, the app ID is used as the D-Bus service name.

The compositor shell will try to group application surfaces together by their app ID. As a best practice, it is suggested to select app ID's that match the basename of the application's .desktop file. For example, "org.freedesktop.FooViewer" where the .desktop file is "org.freedesktop.FooViewer.desktop".

See the desktop-entry specification [0] for more details on application identifiers and how they relate to well-known D-Bus names and .desktop files.

[0] http://standards.freedesktop.org/desktop-entry-spec/

surrounding_text(text: string, cursor: uint, anchor: uint)
Argument
Type
Description
textstring
cursoruint
anchoruint
surrounding text event

Updates the surrounding plain text around the cursor, excluding the preedit text.

If any preedit text is present, it is replaced with the cursor for the purpose of this event.

The argument text is a buffer containing the preedit string, and must include the cursor position, and the complete selection. It should contain additional characters before and after these. There is a maximum length of wayland messages, so text can not be longer than 4000 bytes.

cursor is the byte offset of the cursor within the text buffer.

anchor is the byte offset of the selection anchor within the text buffer. If there is no selected text, anchor must be the same as cursor.

If this event does not arrive before the first done event, the input method may assume that the text input does not support this functionality and ignore following surrounding_text events.

Values set with this event are double-buffered. They will get applied and set to initial values on the next wp_input_method_v3.done event.

The initial state for affected fields is empty, meaning that the text input does not support sending surrounding text. If the empty values get applied, subsequent attempts to change them may have no effect.

text_change_cause(cause: uint<wp_text_input_v3.change_cause>)
Argument
Type
Description
causeuint<wp_text_input_v3.change_cause>
indicates the cause of surrounding text change

Tells the input method why the text surrounding the cursor changed.

Whenever the client detects an external change in text, cursor, or anchor position, it must issue this request to the compositor. This request is intended to give the input method a chance to update the preedit text in an appropriate way, e.g. by removing it when the user starts typing with a keyboard.

cause describes the source of the change.

The value set with this event is double-buffered. It will get applied and set to its initial value on the next wp_input_method_v3.done event.

The initial value of cause is input_method.

content purpose and hint

Indicates the content type and hint for the current wp_input_method_v3 instance.

Values set with this event are double-buffered. They will get applied on the next wp_input_method_v3.done event.

The initial value for hint is none, and the initial value for purpose is normal.

done()
apply state

Atomically applies state changes recently sent to the client.

The done event establishes and updates the state of the client, and must be issued after any changes to apply them.

Text input state (content purpose, content hint, surrounding text, and change cause) is conceptually double-buffered within an input method context.

Events modify the pending state, as opposed to the current state in use by the input method. A done event atomically applies all pending state, replacing the current state. After done, the new pending state is as documented for each related request.

Events must be applied in the order of arrival.

Neither current nor pending state are modified unless noted otherwise.

keymap(format: uint<wl_keyboard.keymap_format>, fd: fd, size: uint)
Argument
Type
Description
formatuint<wl_keyboard.keymap_format>
keymap format
fdfd
keymap file descriptor
sizeuint
keymap size, in bytes
keyboard mapping

This event provides a file descriptor to the client which can be memory-mapped to provide a keyboard mapping description.

repeat_info(rate: int, delay: int)
Argument
Type
Description
rateint
the rate of repeating keys in characters per second
delayint
delay in milliseconds since key down until repeating starts
repeat rate and delay

Informs the client about the keyboard's repeat rate and delay.

This event is sent as soon as the wp_input_method_v3 object has been created, and is guaranteed to be received by the client before any key press event.

Negative values for either rate or delay are illegal. A rate of zero will disable any repeating (regardless of the value of delay).

This event can be sent later on as well with a new value if necessary, so clients should continue listening for the event past the creation of wp_input_method_v3.

key(serial: uint, time: uint, key: uint, state: uint<wl_keyboard.key_state>)
Argument
Type
Description
serialuint
serial number of the key event
timeuint
timestamp with millisecond granularity
keyuint
key that produced the event
stateuint<wl_keyboard.key_state>
physical state of the key
key event

A key was pressed or released, forwarded from text input client. The time argument is a timestamp with millisecond granularity, with an undefined base.

modifiers(serial: uint, mods_depressed: uint, mods_latched: uint, mods_locked: uint, group: uint)
Argument
Type
Description
serialuint
serial number of the modifiers event
mods_depresseduint
depressed modifiers
mods_latcheduint
latched modifiers
mods_lockeduint
locked modifiers
groupuint
keyboard layout
modifier and group state

Notifies input method that the modifier and/or group state has changed, and it should update its local state. Forwarded from text-input.

available_actions(available_actions: array)
Argument
Type
Description
available_actionsarray
available actions
notification of available actions

This event indicates which actions are supported by the text input.

Values set with this event are double-buffered. They will get applied on the next wp_input_method_v3.done event.

Initially, no actions are available.

cursor_rectangle(x: int, y: int, width: int, height: int)
Argument
Type
Description
xint
yint
widthint
heightint
set cursor position

Marks an area around the cursor as a x, y, width, height rectangle in surface local coordinates.

Allows the compositor to put a window with word suggestions near the cursor, without obstructing the text being input.

If the client is unaware of the position of edited text, it should not issue this request, to signify lack of support to the compositor.

Values set with this request are double-buffered. They will get applied on the next wp_text_input_v3.commit request, and stay valid until the next committed enable or disable request.

The initial values describing a cursor rectangle are empty. That means the text input does not support describing the cursor area. If the empty values get applied, subsequent attempts to change them may have no effect.

As of version 2, the values sent with this request are not used immediately after they are applied to the text-input state.

After the pending state is applied with the wp_text_input_v3.commit request, the following wl_surface.commit request on the surface with text-input focus will cause the values to become active.

If the surface with text-input focus changes before a wl_surface.commit request is sent, the values are discarded.

error { invalid_serial } 
Argument
Value
Description
invalid_serial1
invalid serial passed to pass_through
key_forward_type { non_repeating, repeating } 
Argument
Value
Description
non_repeating0
key does not repeat
repeating1
key is repeating
type of key forward

Indicates if the forwarded key is repeating or not


input method manager

The input method manager allows the client to become an input method on a chosen seat.

There can be several input methods running but only one method should be associated with one text input client.

To avoid key logging this is a priviledged protocol.

get_input_method(seat: object<wl_seat>, input_method: new_id<wp_input_method_v3>, app_id: string)
Argument
Type
Description
seatobject<wl_seat>
input_methodnew_id<wp_input_method_v3>
app_idstring
request an input method object

Request a new input wp_input_method_v3 object associated with a given seat.

destroy()
destroy the input method manager

Destroys the wp_input_method_manager_v3 object.

The wp_input_method_v3 objects originating from it remain valid.


Compositor Support

No compositor support found

Copyright © 2008-2011 Kristian Høgsberg Copyright © 2010-2011 Intel Corporation Copyright © 2012-2013 Collabora, Ltd. Copyright © 2012, 2013 Intel Corporation Copyright © 2015, 2016 Jan Arne Petersen Copyright © 2017, 2018 Red Hat, Inc. Copyright © 2018, 2021 Purism SPC Copyright © 2021, 2024 Simon Ser Copyright © 2024 Eivind Gamst

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

text_input_unstable_v3

Protocol for composing text

This protocol allows compositors to act as input methods and to send text to applications. A text input object is used to manage state of what are typically text entry fields in the application.

This document adheres to the RFC 2119 when using words like "must", "should", "may", etc.

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.

text input

The wp_text_input_v3 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 preedit_string and commit_string events.

Text is valid UTF-8 encoded, indices and lengths are in bytes. Indices must not point to middle bytes inside a code point: they must either point to the first byte of a code point or to the end of the buffer. Lengths must be measured between two valid indices.

Focus moving throughout surfaces will result in the emission of wp_text_input_v3.enter and wp_text_input_v3.leave events. The focused surface must commit wp_text_input_v3.enable and wp_text_input_v3.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.

destroy()
Destroy the wp_text_input

Destroy the wp_text_input object. Also disables all surfaces enabled through this wp_text_input object.

enable()
Request text input to be enabled

Requests text input on the surface previously obtained from the enter event.

This request must be issued every time the active text input changes to a new one, including within the current surface. Use wp_text_input_v3.disable when there is no longer any input focus on the current surface.

Clients must not enable more than one text input on the single seat and should disable the current text input before enabling the new one. At most one instance of text input may be in enabled state per instance, Requests to enable the another text input when some text input is active must be ignored by compositor.

This request resets all state associated with previous enable, disable, set_surrounding_text, set_text_change_cause, set_content_type, and set_cursor_rectangle requests, as well as the state associated with preedit_string, commit_string, and delete_surrounding_text events.

The set_surrounding_text, set_content_type and set_cursor_rectangle requests must follow if the text input supports the necessary functionality.

State set with this request is double-buffered. It will get applied on the next wp_text_input_v3.commit request, and stay valid until the next committed enable or disable request.

The changes must be applied by the compositor after issuing a wp_text_input_v3.commit request.

Some clients need to reset the input method state. To reset the input method state, the client needs to send the disable request, the enable request, and the commit request sequence. The compositing manager will reset the input method.

disable()
Disable text input on a surface

Explicitly disable text input on the current surface (typically when there is no focus on any text entry inside the surface).

State set with this request is double-buffered. It will get applied on the next wp_text_input_v3.commit request.

Some clients need to reset the input method state. To reset the input method state, the client needs to send the disable request, the enable request, and the commit request sequence. The compositing manager will reset the input method.

set_surrounding_text(text: string, cursor: int, anchor: int)
Argument
Type
Description
textstring
cursorint
anchorint
sets the surrounding text

Sets the surrounding plain text around the input, excluding the preedit text.

The client should notify the compositor of any changes in any of the values carried with this request, including changes caused by handling incoming text-input events as well as changes caused by other mechanisms like keyboard typing.

If the client is unaware of the text around the cursor, it should not issue this request, to signify lack of support to the compositor.

Text is UTF-8 encoded, and should include the cursor position, the complete selection and additional characters before and after them. There is a maximum length of wayland messages, so text can not be longer than 4000 bytes.

Cursor is the byte offset of the cursor within text buffer.

Anchor is the byte offset of the selection anchor within text buffer. If there is no selected text, anchor is the same as cursor.

If any preedit text is present, it is replaced with a cursor for the purpose of this event.

Values set with this request are double-buffered. They will get applied on the next wp_text_input_v3.commit request, and stay valid until the next committed enable or disable request.

The initial state for affected fields is empty, meaning that the text input does not support sending surrounding text. If the empty values get applied, subsequent attempts to change them may have no effect.

set_text_change_cause(cause: uint<wp_text_input_v3.change_cause>)
Argument
Type
Description
causeuint<wp_text_input_v3.change_cause>
indicates the cause of surrounding text change

Tells the compositor why the text surrounding the cursor changed.

Whenever the client detects an external change in text, cursor, or anchor posision, it must issue this request to the compositor. This request is intended to give the input method a chance to update the preedit text in an appropriate way, e.g. by removing it when the user starts typing with a keyboard.

cause describes the source of the change.

The value set with this request is double-buffered. It must be applied and reset to initial at the next wp_text_input_v3.commit request.

The initial value of cause is input_method.

set content purpose and hint

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.

Values set with this request are double-buffered. They will get applied on the next wp_text_input_v3.commit request. Subsequent attempts to update them may have no effect. The values remain valid until the next committed enable or disable request.

The initial value for hint is none, and the initial value for purpose is normal.

set_cursor_rectangle(x: int, y: int, width: int, height: int)
Argument
Type
Description
xint
yint
widthint
heightint
set cursor position

Marks an area around the cursor as a x, y, width, height rectangle in surface local coordinates.

Allows the compositor to put a window with word suggestions near the cursor, without obstructing the text being input.

If the client is unaware of the position of edited text, it should not issue this request, to signify lack of support to the compositor.

Values set with this request are double-buffered. They will get applied on the next wp_text_input_v3.commit request, and stay valid until the next committed enable or disable request.

The initial values describing a cursor rectangle are empty. That means the text input does not support describing the cursor area. If the empty values get applied, subsequent attempts to change them may have no effect.

As of version 2, the values sent with this request are not used immediately after they are applied to the text-input state.

After the pending state is applied with the wp_text_input_v3.commit request, the following wl_surface.commit request on the surface with text-input focus will cause the values to become active.

If the surface with text-input focus changes before a wl_surface.commit request is sent, the values are discarded.

commit()
commit state

Atomically applies state changes recently sent to the compositor.

The commit request establishes and updates the state of the client, and must be issued after any changes to apply them.

Text input state (enabled status, content purpose, content hint, surrounding text and change cause, cursor rectangle) is conceptually double-buffered within the context of a text input, i.e. between a committed enable request and the following committed enable or disable request.

Protocol requests modify the pending state, as opposed to the current state in use by the input method. A commit request atomically applies all pending state, replacing the current state. After commit, the new pending state is as documented for each related request.

Requests are applied in the order of arrival.

Neither current nor pending state are modified unless noted otherwise.

The compositor must count the number of commit requests coming from each wp_text_input_v3 object and use the count as the serial in done events.

process_keys(serial: uint)
Argument
Type
Description
serialuint

Instruct the compositor to re-process through the input method a series of recent wl_keyboard.key events, starting from the given serial until the wp_text_input_v3 is enabled. This request should only be honored in the commit that does the wp_text_input_v3.enable request enabling input method treatment.

This request is useful for cases where wl_keyboard.key events result in wp_text_input_v3.enable happening on the client. A typical case is type-to-search UIs where the first characters introduced will trigger both change focus to an input search and re-route the key event being handled to it. In those situations it is desirable to have the already sent key events be processed through the input method instead of being handled without input method involvement.

Compositors should keep a small buffer of the last key events, if the requested serial is too old or does not exist in the buffer, compositors are free to either ignore the request or reprocess the full buffer. Compositors must replay full key press/release sequences to the input method.

Clients using this request must ignore the local effects of wl_keyboard.key events after this request is issued, until the first wp_text_input_v3.done event is received. The compositor may choose to replay the wl_keyboard.key events after sending the done event.

State set with this request is double-buffered. It will get applied on the next wp_text_input_v3.commit request.

set_available_actions(available_actions: array)
Argument
Type
Description
available_actionsarray
available actions
set the available actions

Set the actions available for this text input.

Values set with this request are double-buffered. They will get applied on the next wp_text_input_v3.commit request.

If the available_actions array contains the none action, or contains the same action multiple times, the compositor must raise the invalid_action protocol error.

Initially, no actions are available.

done(serial: uint)
Argument
Type
Description
serialuint
apply changes

Instruct the application to apply changes to state requested by the preedit_string, commit_string, delete_surrounding_text and action events.

The state relating to these events is double-buffered, and each one modifies the pending state. This event replaces the current state with the pending state.

The application must proceed by evaluating the changes in the following order:

1. Replace existing preedit string with the cursor. 2. Delete requested surrounding text. 3. Insert commit string with the cursor at its end. 4. Calculate surrounding text to send. 5. Insert new preedit text in cursor position. 6. Place cursor inside preedit text. 7. Perform the requested action.

The serial number reflects the last state of the wp_text_input_v3 object known to the compositor. The value of the serial argument must be equal to the number of commit requests already issued on that object.

When the client receives a done event with a serial different than the number of past commit requests, it must proceed with evaluating and applying the changes as normal, except it should not change the current state of the wp_text_input_v3 object. All pending state requests (set_surrounding_text, set_content_type and set_cursor_rectangle) on the wp_text_input_v3 object should be sent and committed after receiving a wp_text_input_v3.done event with a matching serial.

preedit_string(text: string, cursor_begin: int, cursor_end: int)
Argument
Type
Description
textstringallow null
cursor_beginint
cursor_endint
pre-edit

Notify when a new composing text (pre-edit) should be set at the current cursor position. Any previously set composing text must be removed. Any previously existing selected text must be removed.

The argument text contains the pre-edit string buffer.

The parameters cursor_begin and cursor_end are counted in bytes relative to the beginning of the submitted text buffer. Cursor should be hidden when both are equal to -1.

They could be represented by the client as a line if both values are the same, or as a text highlight otherwise.

Values set with this event are double-buffered. They must be applied and reset to initial on the next wp_text_input_v3.done event.

The initial value of text is an empty string, and cursor_begin, cursor_end and cursor_hidden are all 0.

commit_string(text: string)
Argument
Type
Description
textstringallow null
text commit

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).

Values set with this event are double-buffered. They must be applied and reset to initial on the next wp_text_input_v3.done event.

The initial value of text is an empty string.

delete_surrounding_text(before_length: uint, after_length: uint)
Argument
Type
Description
before_lengthuint
length of text before current cursor position
after_lengthuint
length of text after current cursor position
delete surrounding text

Notify when the text around the current cursor position should be deleted.

Before_length and after_length are the number of bytes before and after the current cursor index (excluding the selection) to delete.

If a preedit text is present, in effect before_length is counted from the beginning of it, and after_length from its end (see done event sequence).

Values set with this event are double-buffered. They must be applied and reset to initial on the next wp_text_input_v3.done event.

The initial values of both before_length and after_length are 0.

enter(surface: object<wl_surface>)
Argument
Type
Description
surfaceobject<wl_surface>
enter event

Notification that this seat's text-input focus is on a certain surface.

If client has created multiple text input objects, compositor must send this event to all of them.

When the seat has the keyboard capability the text-input focus follows the keyboard focus. This event sets the current surface for the text-input object.

leave(surface: object<wl_surface>)
Argument
Type
Description
surfaceobject<wl_surface>
leave event

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 clears the current surface. It is sent before the enter notification for the new focus. After leave event, compositor must ignore requests from any text input instances until next enter event.

When the seat has the keyboard capability the text-input focus follows the keyboard focus.

action(action: uint<wp_text_input_v3.action>, serial: uint)
Argument
Type
Description
actionuint<wp_text_input_v3.action>
action performed
serialuint
serial number of the action event
action performed

An action was performed on this text input.

Values set with this event are double-buffered. They must be applied and reset to initial on the next wp_text_input_v3.done event.

The initial value of action is none.

language(language: string)
Argument
Type
Description
languagestring
new language set by IME
notify of language selection

Notify the application of language used by the input method.

This event will be sent on creation if known and for all subsequent changes.

The language should be specified as an IETF BCP 47 tag. Setting an empty string will reset any known language back to the default unknown state.

preedit_commit_mode(mode: uint<wp_text_input_v3.commit_mode>)
Argument
Type
Description
modeuint<wp_text_input_v3.commit_mode>
pre-edit commit mode

Specify how the visible preedit should be handled when switching the focus widget or changing the cursor position, whether to commit the preedit text or clear the preedit text.

This is usually used together with the preedit_string event.

The commit behavior is the same for focus switch and cursor position change.

The parameter mode selects the desired behavior and its value is one from the commit mode enum.

pre-edit style

Sets styling information on composing text. Event sent without preedit string sets a default style for all future preedit text.

The parameters begin and end are counted in bytes relative to the beginning of the text buffer submitted through wp_text_input_v3.preedit_string.

Multiple events may be submitted if the preedit string has different sections. Compositors/input method must not send multiple wp_text_input_v3.preedit_underline events with overlapping extents.

Clients should pick colors appropriate for their color scheme, underline colors follows text color. For parts of the preedit string that are not covered by any wp_text_input_v3.preedit_hint event, or if no events were sent, the text will be considered unstyled.

Values set with this event are double-buffered. They must be applied and reset on the next wp_text_input_v3.done event.

change_cause { input_method, other } 
Argument
Value
Description
input_method0
input method caused the change
other1
something else than the input method caused the change
text change reason

Reason for the change of surrounding text or cursor posision.

Argument
Value
Description
none0x0
no special behavior
completion0x1
suggest word completions
spellcheck0x2
suggest word corrections
auto_capitalization0x4
switch to uppercase letters at the start of a sentence
lowercase0x8
prefer lowercase letters
uppercase0x10
prefer uppercase letters
titlecase0x20
prefer casing for titles and headings (can be language dependent)
hidden_text0x40
characters should be hidden
sensitive_data0x80
typed text should not be stored
latin0x100
just Latin characters should be entered
multiline0x200
the text input is multiline
on_screen_input_providedsince 20x400
an on-screen way to fill in the input is already provided by the client
no_emojisince 20x800
prefer not offering emoji support
preedit_shownsince 20x1000
the text input will display preedit text in place
content hint

Content hint is a bitmask to allow to modify the behavior of the text input.

Argument
Value
Description
normal0
default input, allowing all characters
alpha1
allow only alphabetic characters
digits2
allow only digits
number3
input a number (including decimal separator and sign)
phone4
input a phone number
url5
input an URL
email6
input an email address
name7
input a name of a person
password8
input a password (combine with sensitive_data hint)
pin9
input is a numeric password (combine with sensitive_data hint)
date10
input a date
time11
input a time
datetime12
input a date and time
terminal13
input for a terminal
content purpose

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.

error { invalid_action } 
Argument
Value
Description
invalid_action0
an invalid or duplicate action was specified
action { none, submit, backspace, delete } 
Argument
Value
Description
none0
no action
submit1
submit
backspace2
delete one unit before the cursor
delete3
delete one unit after the cursor
action

A possible action to perform on a text input.

The backspace and delete actions should be handled in a similar manner to backpace and delete keys being pressed on a keyboard.

commit_mode { clear, commit } 
Argument
Value
Description
clear0
pre-edit text is cleared.
commit1
pre-edit text is committed.
focus commit mode

Pre-edit commit mode when the focus widget or the cursor position is changed.

preedit_style { none, background_color, text_color } 
Argument
Value
Description
none0
no specified style, use default
background_color1
use a distinct background color
text_color2
use a distinct text color
style of preedit

Style to apply to sections of the preedit string.

preedit_underline { single, double, none } 
Argument
Value
Description
single0
single underline
double1
double underline
none2
no underline
style of preedit underline

Underline style to apply to sections of the preedit string.

preedit_color_hint { info, warning, error } 
Argument
Value
Description
info0
informational color
warning1
warning color
error2
error color
Color hint for preedit

Color hints to identify sections of the preedit string. They should be in accordance with the current color scheme.


text input manager

A factory for text-input objects. This object is a global singleton.

destroy()
Destroy the wp_text_input_manager

Destroy the wp_text_input_manager object.

get_text_input(id: new_id<wp_text_input_v3>, seat: object<wl_seat>, app_id: string)
Argument
Type
Description
idnew_id<wp_text_input_v3>
seatobject<wl_seat>
app_idstring
create a new text input object

Creates a new text-input object for a given seat.


Compositor Support

No compositor support found

Copyright © 2012, 2013 Intel Corporation Copyright © 2015, 2016 Jan Arne Petersen Copyright © 2017, 2018 Red Hat, Inc. Copyright © 2018 Purism SPC

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.