Wayland Input Methods

Michael Hasselmann Openismus GmbH

Wayland Input Methods Input methods?

Wayland Input Methods Input method developers want a unified architecture!

(And UI toolkits don't want to bother too much …)

Wayland Input Methods No protocol evolution in XIM https://mail.gnome.org/archives/wm-spec- list/2007-August/msg00025.html

Wayland Input Methods One display server, many platforms

Shell Extensions Applications

Shells & Window Managers Toolkits

Gnome Plasma/ Quick ST/Mx Elementary Plasma Active Components

Mutter KWin Qt/QML GTK+ Evas/Edje SDL

Display Server

Xorg Weston

Kernel

Much better, more detailed: http://blog.mecheye.net/2012/06/the-linux-graphics-stack/ (Jasper „magcius“ St. Pierre)

Wayland Input Methods Wayland 1.0: No input methods

(but lots of crazy talk @ FOSDEM 2012)

Wayland Input Methods One protocol, three interfaces

Input methods

protocol/input_method.xml

interfaces: input_method_context, input_method, input_panel, input_panel_surface

requests: commit_string, preedit_string, preedit_styling, keysym …

events: surrounding_text, reset, content_type, invoke_action, commit, …

Wayland Input Methods One protocol, three interfaces

Weston Input methods

examples: protocol/input_method.xml clients/keyboard. clients/editor.c interfaces: clients/weston-simple-im.c input_method_context, input_method, input_panel, generated headers: input_panel_surface input-method-client- protocol.h requests: input-method-server- commit_string, protocol.h preedit_string, text-client-protocol.h preedit_styling, keysym … text-server-protocol.h events: surrounding_text, reset, content_type, invoke_action, commit, …

Wayland Input Methods One protocol, three interfaces

UI toolkits Weston Input methods

protocol/text.xml examples: protocol/input_method.xml clients/keyboard.c interfaces: clients/editor.c interfaces: text_model, clients/weston-simple-im.c input_method_context, text_model_factory input_method, input_panel, API (generated from XML): input_panel_surface requests: input-method-client- set_surrounding_text, protocol.h requests: activate, deactivate, input-method-server- commit_string, set_content_type, … protocol.h preedit_string, text-client-protocol.h preedit_styling, keysym, … events: text-server-protocol.h commit_string, events: preedit_string, surrounding_text, reset, preedit_styling, keysm, … content_type, invoke_action, commit, …

Wayland Input Methods Architecture Overview

Application (Qt)

Application (EFL)

Wayland & Wayland & Application (GTK+) Wayland text Wayland text Interface Interface (text_model) (text_model)

Weston Input Method

Wayland & Wayland input method Interfaces (input_method_context, input_panel_surface)

https://wiki.maliit.org/Wayland_Input_Method_System_Proposal Wayland Input Methods Weston Keyboard & EFL

Wayland Input Methods Maliit Keybord & EFL

Wayland Input Methods Sub-surfaces (in X11: transient hints)

Wayland Input Methods Sub-surfaces & input methods

Wayland Input Methods IPC with sync calls

application

compositor

input method

Wayland Input Methods IPC + sequence numbers application requests: input method requests: activate(n) set_surrounding_text(n) (idle) set_cursor_position(n) commit(n) preedit_string(n) reset(n+1) commit_string(n) reset(n+1) commit_string(n+1)

Wayland Input Methods Videos & more details @ blog.jpetersen.org

Wayland Input Methods ?

Wayland Input Methods