Wayland Input Methods

Michael Hasselmann

Wayland Input Methods Wayland? wayland.freedesktop.org

Wayland Input Methods Input methods?

Wayland Input Methods Input methods? (first time presenting in front of target audience!)

Wayland Input Methods Input methods → text input

traditional use-cases mobile & embedded from desktop use-cases (mouse + hwkb) (touch display)

Wayland Input Methods Input methods → text input

maliit.org

Wayland Input Methods MeeGo Harmattan N9 ships Development starts

Feb. 2010 Feb. 2011 June Oct. Feb. 2012

Code made available on gitorious Maliit 0.80

Dedicated infrastructure

Wayland Input Methods Maliit 0.90 Maliit added to (unstable) OpenEmbedded's meta layer Jolla demos Canonical contributes Plasma Active SailfishOS, 250+ patches to chooses Maliit uses Maliit Maliit Keyboard

Mar. 2012 May 2012 Aug. 2012 Nov. 2012 Mar. 2013

Apr. 2012 Jul. 2012 Oct. 2012 Feb. 2013 Apr. 2013 OLPC chooses Wayland input Canonical uses Maliit Maliit methods work starts, for its MWC demos based on Maliit API Maliit 0.99 “Road to 1.0”: (unstable) Maliit to target Qt5/QtQuick2

Wayland Input Methods GNOME joins the Wayland party! (Still) focused on desktop → good environment to test completeness

live.gnome.org/Wayland/Gaps

Wayland Input Methods Wayland 1.0: No input methods

(planned for inclusion in Wayland 1.2)

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 protocol/input_method.xml

examples: interfaces: clients/keyboard.c input_method_context, clients/editor.c input_method, input_panel, clients/weston-simple-im.c input_panel_surface

API (generated from XML): requests: input-method-client- commit_string, protocol.h preedit_string, input-method-server- preedit_styling, keysym … protocol.h text-client-protocol.h events: text-server-protocol.h surrounding_text, reset, content_type, invoke_action, commit, …

Wayland Input Methods One protocol, three interfaces

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

Wayland Input Methods Architecture Overview

Application ()

Application (EFL)

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

Weston

Wayland & Wayland input method Interfaces (input_method_context, input_panel_surface) wiki.maliit.org/Wayland_Input_Method_System_Proposal

Wayland Input Methods Weston Keyboard & EFL

Wayland Input Methods Maliit Keybord & EFL

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 (unmerged) code @ github.com/openismus

Wayland Input Methods ?

Wayland Input Methods