440 lines
15 KiB
C
440 lines
15 KiB
C
/*
|
|
* Copyright © 2012, 2013 Intel Corporation
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
#ifndef INPUT_METHOD_CLIENT_PROTOCOL_H
|
|
#define INPUT_METHOD_CLIENT_PROTOCOL_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
#include "wayland-client.h"
|
|
|
|
struct wl_client;
|
|
struct wl_resource;
|
|
|
|
struct wl_input_method;
|
|
struct wl_input_method_context;
|
|
struct wl_input_panel;
|
|
struct wl_input_panel_surface;
|
|
struct wl_keyboard;
|
|
struct wl_output;
|
|
struct wl_surface;
|
|
|
|
extern const struct wl_interface wl_input_method_context_interface;
|
|
extern const struct wl_interface wl_input_method_interface;
|
|
extern const struct wl_interface wl_input_panel_interface;
|
|
extern const struct wl_interface wl_input_panel_surface_interface;
|
|
|
|
/**
|
|
* wl_input_method_context - input method context
|
|
* @surrounding_text: surrounding text event
|
|
* @reset: (none)
|
|
* @content_type: (none)
|
|
* @invoke_action: (none)
|
|
* @commit_state: (none)
|
|
* @preferred_language: (none)
|
|
*
|
|
* Corresponds to a text model on input method side. An input method
|
|
* context is created on text mode activation on the input method side. It
|
|
* allows to receive information about the text model from the application
|
|
* via events. Input method contexts do not keep state after deactivation
|
|
* and should be destroyed after deactivation is handled.
|
|
*
|
|
* Text is generally UTF-8 encoded, indices and lengths are in bytes.
|
|
*
|
|
* Serials are used to synchronize the state between the text input and an
|
|
* input method. New serials are sent by the text input in the commit_state
|
|
* request and are used by the input method to indicate the known text
|
|
* input state in events like preedit_string, commit_string, and keysym.
|
|
* The text input can then ignore events from the input method which are
|
|
* based on an outdated state (for example after a reset).
|
|
*/
|
|
struct wl_input_method_context_listener {
|
|
/**
|
|
* surrounding_text - surrounding text event
|
|
* @text: (none)
|
|
* @cursor: (none)
|
|
* @anchor: (none)
|
|
*
|
|
* The plain surrounding text around the input position. Cursor
|
|
* is the position in bytes within the surrounding text relative to
|
|
* the beginning of the text. Anchor is the position in bytes of
|
|
* the selection anchor within the surrounding text relative to the
|
|
* beginning of the text. If there is no selected text anchor is
|
|
* the same as cursor.
|
|
*/
|
|
void (*surrounding_text)(void *data,
|
|
struct wl_input_method_context *wl_input_method_context,
|
|
const char *text,
|
|
uint32_t cursor,
|
|
uint32_t anchor);
|
|
/**
|
|
* reset - (none)
|
|
*/
|
|
void (*reset)(void *data,
|
|
struct wl_input_method_context *wl_input_method_context);
|
|
/**
|
|
* content_type - (none)
|
|
* @hint: (none)
|
|
* @purpose: (none)
|
|
*/
|
|
void (*content_type)(void *data,
|
|
struct wl_input_method_context *wl_input_method_context,
|
|
uint32_t hint,
|
|
uint32_t purpose);
|
|
/**
|
|
* invoke_action - (none)
|
|
* @button: (none)
|
|
* @index: (none)
|
|
*/
|
|
void (*invoke_action)(void *data,
|
|
struct wl_input_method_context *wl_input_method_context,
|
|
uint32_t button,
|
|
uint32_t index);
|
|
/**
|
|
* commit_state - (none)
|
|
* @serial: serial of text input state
|
|
*/
|
|
void (*commit_state)(void *data,
|
|
struct wl_input_method_context *wl_input_method_context,
|
|
uint32_t serial);
|
|
/**
|
|
* preferred_language - (none)
|
|
* @language: (none)
|
|
*/
|
|
void (*preferred_language)(void *data,
|
|
struct wl_input_method_context *wl_input_method_context,
|
|
const char *language);
|
|
};
|
|
|
|
static inline int
|
|
wl_input_method_context_add_listener(struct wl_input_method_context *wl_input_method_context,
|
|
const struct wl_input_method_context_listener *listener, void *data)
|
|
{
|
|
return wl_proxy_add_listener((struct wl_proxy *) wl_input_method_context,
|
|
(void (**)(void)) listener, data);
|
|
}
|
|
|
|
#define WL_INPUT_METHOD_CONTEXT_DESTROY 0
|
|
#define WL_INPUT_METHOD_CONTEXT_COMMIT_STRING 1
|
|
#define WL_INPUT_METHOD_CONTEXT_PREEDIT_STRING 2
|
|
#define WL_INPUT_METHOD_CONTEXT_PREEDIT_STYLING 3
|
|
#define WL_INPUT_METHOD_CONTEXT_PREEDIT_CURSOR 4
|
|
#define WL_INPUT_METHOD_CONTEXT_DELETE_SURROUNDING_TEXT 5
|
|
#define WL_INPUT_METHOD_CONTEXT_CURSOR_POSITION 6
|
|
#define WL_INPUT_METHOD_CONTEXT_MODIFIERS_MAP 7
|
|
#define WL_INPUT_METHOD_CONTEXT_KEYSYM 8
|
|
#define WL_INPUT_METHOD_CONTEXT_GRAB_KEYBOARD 9
|
|
#define WL_INPUT_METHOD_CONTEXT_KEY 10
|
|
#define WL_INPUT_METHOD_CONTEXT_MODIFIERS 11
|
|
#define WL_INPUT_METHOD_CONTEXT_LANGUAGE 12
|
|
#define WL_INPUT_METHOD_CONTEXT_TEXT_DIRECTION 13
|
|
|
|
static inline void
|
|
wl_input_method_context_set_user_data(struct wl_input_method_context *wl_input_method_context, void *user_data)
|
|
{
|
|
wl_proxy_set_user_data((struct wl_proxy *) wl_input_method_context, user_data);
|
|
}
|
|
|
|
static inline void *
|
|
wl_input_method_context_get_user_data(struct wl_input_method_context *wl_input_method_context)
|
|
{
|
|
return wl_proxy_get_user_data((struct wl_proxy *) wl_input_method_context);
|
|
}
|
|
|
|
static inline void
|
|
wl_input_method_context_destroy(struct wl_input_method_context *wl_input_method_context)
|
|
{
|
|
wl_proxy_marshal((struct wl_proxy *) wl_input_method_context,
|
|
WL_INPUT_METHOD_CONTEXT_DESTROY);
|
|
|
|
wl_proxy_destroy((struct wl_proxy *) wl_input_method_context);
|
|
}
|
|
|
|
static inline void
|
|
wl_input_method_context_commit_string(struct wl_input_method_context *wl_input_method_context, uint32_t serial, const char *text)
|
|
{
|
|
wl_proxy_marshal((struct wl_proxy *) wl_input_method_context,
|
|
WL_INPUT_METHOD_CONTEXT_COMMIT_STRING, serial, text);
|
|
}
|
|
|
|
static inline void
|
|
wl_input_method_context_preedit_string(struct wl_input_method_context *wl_input_method_context, uint32_t serial, const char *text, const char *commit)
|
|
{
|
|
wl_proxy_marshal((struct wl_proxy *) wl_input_method_context,
|
|
WL_INPUT_METHOD_CONTEXT_PREEDIT_STRING, serial, text, commit);
|
|
}
|
|
|
|
static inline void
|
|
wl_input_method_context_preedit_styling(struct wl_input_method_context *wl_input_method_context, uint32_t index, uint32_t length, uint32_t style)
|
|
{
|
|
wl_proxy_marshal((struct wl_proxy *) wl_input_method_context,
|
|
WL_INPUT_METHOD_CONTEXT_PREEDIT_STYLING, index, length, style);
|
|
}
|
|
|
|
static inline void
|
|
wl_input_method_context_preedit_cursor(struct wl_input_method_context *wl_input_method_context, int32_t index)
|
|
{
|
|
wl_proxy_marshal((struct wl_proxy *) wl_input_method_context,
|
|
WL_INPUT_METHOD_CONTEXT_PREEDIT_CURSOR, index);
|
|
}
|
|
|
|
static inline void
|
|
wl_input_method_context_delete_surrounding_text(struct wl_input_method_context *wl_input_method_context, int32_t index, uint32_t length)
|
|
{
|
|
wl_proxy_marshal((struct wl_proxy *) wl_input_method_context,
|
|
WL_INPUT_METHOD_CONTEXT_DELETE_SURROUNDING_TEXT, index, length);
|
|
}
|
|
|
|
static inline void
|
|
wl_input_method_context_cursor_position(struct wl_input_method_context *wl_input_method_context, int32_t index, int32_t anchor)
|
|
{
|
|
wl_proxy_marshal((struct wl_proxy *) wl_input_method_context,
|
|
WL_INPUT_METHOD_CONTEXT_CURSOR_POSITION, index, anchor);
|
|
}
|
|
|
|
static inline void
|
|
wl_input_method_context_modifiers_map(struct wl_input_method_context *wl_input_method_context, struct wl_array *map)
|
|
{
|
|
wl_proxy_marshal((struct wl_proxy *) wl_input_method_context,
|
|
WL_INPUT_METHOD_CONTEXT_MODIFIERS_MAP, map);
|
|
}
|
|
|
|
static inline void
|
|
wl_input_method_context_keysym(struct wl_input_method_context *wl_input_method_context, uint32_t serial, uint32_t time, uint32_t sym, uint32_t state, uint32_t modifiers)
|
|
{
|
|
wl_proxy_marshal((struct wl_proxy *) wl_input_method_context,
|
|
WL_INPUT_METHOD_CONTEXT_KEYSYM, serial, time, sym, state, modifiers);
|
|
}
|
|
|
|
static inline struct wl_keyboard *
|
|
wl_input_method_context_grab_keyboard(struct wl_input_method_context *wl_input_method_context)
|
|
{
|
|
struct wl_proxy *keyboard;
|
|
|
|
keyboard = wl_proxy_marshal_constructor((struct wl_proxy *) wl_input_method_context,
|
|
WL_INPUT_METHOD_CONTEXT_GRAB_KEYBOARD, &wl_keyboard_interface, NULL);
|
|
|
|
return (struct wl_keyboard *) keyboard;
|
|
}
|
|
|
|
static inline void
|
|
wl_input_method_context_key(struct wl_input_method_context *wl_input_method_context, uint32_t serial, uint32_t time, uint32_t key, uint32_t state)
|
|
{
|
|
wl_proxy_marshal((struct wl_proxy *) wl_input_method_context,
|
|
WL_INPUT_METHOD_CONTEXT_KEY, serial, time, key, state);
|
|
}
|
|
|
|
static inline void
|
|
wl_input_method_context_modifiers(struct wl_input_method_context *wl_input_method_context, uint32_t serial, uint32_t mods_depressed, uint32_t mods_latched, uint32_t mods_locked, uint32_t group)
|
|
{
|
|
wl_proxy_marshal((struct wl_proxy *) wl_input_method_context,
|
|
WL_INPUT_METHOD_CONTEXT_MODIFIERS, serial, mods_depressed, mods_latched, mods_locked, group);
|
|
}
|
|
|
|
static inline void
|
|
wl_input_method_context_language(struct wl_input_method_context *wl_input_method_context, uint32_t serial, const char *language)
|
|
{
|
|
wl_proxy_marshal((struct wl_proxy *) wl_input_method_context,
|
|
WL_INPUT_METHOD_CONTEXT_LANGUAGE, serial, language);
|
|
}
|
|
|
|
static inline void
|
|
wl_input_method_context_text_direction(struct wl_input_method_context *wl_input_method_context, uint32_t serial, uint32_t direction)
|
|
{
|
|
wl_proxy_marshal((struct wl_proxy *) wl_input_method_context,
|
|
WL_INPUT_METHOD_CONTEXT_TEXT_DIRECTION, serial, direction);
|
|
}
|
|
|
|
/**
|
|
* wl_input_method - input method
|
|
* @activate: activate event
|
|
* @deactivate: activate event
|
|
*
|
|
* An input method object is responsible to compose text in response to
|
|
* input from hardware or virtual keyboards. There is one input method
|
|
* object per seat. On activate there is a new input method context object
|
|
* created which allows the input method to communicate with the text
|
|
* model.
|
|
*/
|
|
struct wl_input_method_listener {
|
|
/**
|
|
* activate - activate event
|
|
* @id: (none)
|
|
*
|
|
* A text model was activated. Creates an input method context
|
|
* object which allows communication with the text model.
|
|
*/
|
|
void (*activate)(void *data,
|
|
struct wl_input_method *wl_input_method,
|
|
struct wl_input_method_context *id);
|
|
/**
|
|
* deactivate - activate event
|
|
* @context: (none)
|
|
*
|
|
* The text model corresponding to the context argument was
|
|
* deactivated. The input method context should be destroyed after
|
|
* deactivation is handled.
|
|
*/
|
|
void (*deactivate)(void *data,
|
|
struct wl_input_method *wl_input_method,
|
|
struct wl_input_method_context *context);
|
|
};
|
|
|
|
static inline int
|
|
wl_input_method_add_listener(struct wl_input_method *wl_input_method,
|
|
const struct wl_input_method_listener *listener, void *data)
|
|
{
|
|
return wl_proxy_add_listener((struct wl_proxy *) wl_input_method,
|
|
(void (**)(void)) listener, data);
|
|
}
|
|
|
|
static inline void
|
|
wl_input_method_set_user_data(struct wl_input_method *wl_input_method, void *user_data)
|
|
{
|
|
wl_proxy_set_user_data((struct wl_proxy *) wl_input_method, user_data);
|
|
}
|
|
|
|
static inline void *
|
|
wl_input_method_get_user_data(struct wl_input_method *wl_input_method)
|
|
{
|
|
return wl_proxy_get_user_data((struct wl_proxy *) wl_input_method);
|
|
}
|
|
|
|
static inline void
|
|
wl_input_method_destroy(struct wl_input_method *wl_input_method)
|
|
{
|
|
wl_proxy_destroy((struct wl_proxy *) wl_input_method);
|
|
}
|
|
|
|
#define WL_INPUT_PANEL_GET_INPUT_PANEL_SURFACE 0
|
|
|
|
static inline void
|
|
wl_input_panel_set_user_data(struct wl_input_panel *wl_input_panel, void *user_data)
|
|
{
|
|
wl_proxy_set_user_data((struct wl_proxy *) wl_input_panel, user_data);
|
|
}
|
|
|
|
static inline void *
|
|
wl_input_panel_get_user_data(struct wl_input_panel *wl_input_panel)
|
|
{
|
|
return wl_proxy_get_user_data((struct wl_proxy *) wl_input_panel);
|
|
}
|
|
|
|
static inline void
|
|
wl_input_panel_destroy(struct wl_input_panel *wl_input_panel)
|
|
{
|
|
wl_proxy_destroy((struct wl_proxy *) wl_input_panel);
|
|
}
|
|
|
|
static inline struct wl_input_panel_surface *
|
|
wl_input_panel_get_input_panel_surface(struct wl_input_panel *wl_input_panel, struct wl_surface *surface)
|
|
{
|
|
struct wl_proxy *id;
|
|
|
|
id = wl_proxy_marshal_constructor((struct wl_proxy *) wl_input_panel,
|
|
WL_INPUT_PANEL_GET_INPUT_PANEL_SURFACE, &wl_input_panel_surface_interface, NULL, surface);
|
|
|
|
return (struct wl_input_panel_surface *) id;
|
|
}
|
|
|
|
#ifndef WL_INPUT_PANEL_SURFACE_POSITION_ENUM
|
|
#define WL_INPUT_PANEL_SURFACE_POSITION_ENUM
|
|
enum wl_input_panel_surface_position {
|
|
WL_INPUT_PANEL_SURFACE_POSITION_CENTER_BOTTOM = 0,
|
|
};
|
|
#endif /* WL_INPUT_PANEL_SURFACE_POSITION_ENUM */
|
|
|
|
struct wl_input_panel_surface_listener {
|
|
/**
|
|
* cursor_rectangle - cursor rectangle
|
|
* @x: (none)
|
|
* @y: (none)
|
|
* @width: (none)
|
|
* @height: (none)
|
|
*
|
|
* Notify when the cursor rectangle relative to the input panel
|
|
* surface change.
|
|
*/
|
|
void (*cursor_rectangle)(void *data,
|
|
struct wl_input_panel_surface *wl_input_panel_surface,
|
|
int32_t x,
|
|
int32_t y,
|
|
int32_t width,
|
|
int32_t height);
|
|
};
|
|
|
|
static inline int
|
|
wl_input_panel_surface_add_listener(struct wl_input_panel_surface *wl_input_panel_surface,
|
|
const struct wl_input_panel_surface_listener *listener, void *data)
|
|
{
|
|
return wl_proxy_add_listener((struct wl_proxy *) wl_input_panel_surface,
|
|
(void (**)(void)) listener, data);
|
|
}
|
|
|
|
#define WL_INPUT_PANEL_SURFACE_SET_TOPLEVEL 0
|
|
#define WL_INPUT_PANEL_SURFACE_SET_OVERLAY_PANEL 1
|
|
|
|
static inline void
|
|
wl_input_panel_surface_set_user_data(struct wl_input_panel_surface *wl_input_panel_surface, void *user_data)
|
|
{
|
|
wl_proxy_set_user_data((struct wl_proxy *) wl_input_panel_surface, user_data);
|
|
}
|
|
|
|
static inline void *
|
|
wl_input_panel_surface_get_user_data(struct wl_input_panel_surface *wl_input_panel_surface)
|
|
{
|
|
return wl_proxy_get_user_data((struct wl_proxy *) wl_input_panel_surface);
|
|
}
|
|
|
|
static inline void
|
|
wl_input_panel_surface_destroy(struct wl_input_panel_surface *wl_input_panel_surface)
|
|
{
|
|
wl_proxy_destroy((struct wl_proxy *) wl_input_panel_surface);
|
|
}
|
|
|
|
static inline void
|
|
wl_input_panel_surface_set_toplevel(struct wl_input_panel_surface *wl_input_panel_surface, struct wl_output *output, uint32_t position)
|
|
{
|
|
wl_proxy_marshal((struct wl_proxy *) wl_input_panel_surface,
|
|
WL_INPUT_PANEL_SURFACE_SET_TOPLEVEL, output, position);
|
|
}
|
|
|
|
static inline void
|
|
wl_input_panel_surface_set_overlay_panel(struct wl_input_panel_surface *wl_input_panel_surface)
|
|
{
|
|
wl_proxy_marshal((struct wl_proxy *) wl_input_panel_surface,
|
|
WL_INPUT_PANEL_SURFACE_SET_OVERLAY_PANEL);
|
|
}
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|