xkbcommon 1.14.0-beta2
Reference library implementing the XKB specification for parsing keyboard descriptions and handling keyboard state
Loading...
Searching...
No Matches
Data Structures | Enumerations | Functions
Keyboard State
Collaboration diagram for Keyboard State:

Data Structures

struct  xkb_event_components
 
struct  xkb_event_pointer_motion
 
struct  xkb_event_pointer_button
 
struct  xkb_events_config
 
struct  xkb_machine_builder_config
 
struct  xkb_machine_builder_a11y_update
 
struct  xkb_machine_builder_mods_remap_update
 
struct  xkb_machine_builder_shortcut_override_update
 
struct  xkb_state_components_update
 
struct  xkb_layout_policy_update
 
struct  xkb_synthetic_update
 
struct  xkb_machine
 
struct  xkb_state
 
struct  xkb_event
 
struct  xkb_events
 
struct  xkb_machine_builder
 

Enumerations

enum  xkb_event_type {
  XKB_EVENT_TYPE_INVALID = 0 ,
  XKB_EVENT_TYPE_KEY ,
  XKB_EVENT_TYPE_STATE_COMPONENTS ,
  XKB_EVENT_TYPE_POINTER_MOTION ,
  XKB_EVENT_TYPE_POINTER_BUTTON ,
  XKB_EVENT_TYPE_TERMINATE_DISPLAY_SERVER ,
  XKB_EVENT_TYPE_SWITCH_VIRTUAL_CONSOLE
}
 
enum  xkb_key_direction {
  XKB_KEY_UP ,
  XKB_KEY_DOWN ,
  XKB_KEY_REPEATED
}
 
enum  xkb_state_component {
  XKB_STATE_NO_COMPONENT = 0 ,
  XKB_STATE_MODS_DEPRESSED = (1 << 0) ,
  XKB_STATE_MODS_LATCHED = (1 << 1) ,
  XKB_STATE_MODS_LOCKED = (1 << 2) ,
  XKB_STATE_MODS_EFFECTIVE = (1 << 3) ,
  XKB_STATE_LAYOUT_DEPRESSED = (1 << 4) ,
  XKB_STATE_LAYOUT_LATCHED = (1 << 5) ,
  XKB_STATE_LAYOUT_LOCKED = (1 << 6) ,
  XKB_STATE_LAYOUT_EFFECTIVE = (1 << 7) ,
  XKB_STATE_LEDS = (1 << 8) ,
  XKB_STATE_CONTROLS_EFFECTIVE = (1 << 12)
}
 
enum  xkb_keyboard_control_flags {
  XKB_KEYBOARD_CONTROL_NO_FLAGS = 0 ,
  XKB_KEYBOARD_CONTROL_A11Y_STICKY_KEYS = (1 << 0) ,
  XKB_KEYBOARD_CONTROL_MOUSE_KEYS = (1 << 1)
}
 
enum  xkb_pointer_motion_flags {
  XKB_POINTER_MOTION_NO_FLAGS = 0 ,
  XKB_POINTER_MOTION_REPEATS = (1 << 0) ,
  XKB_POINTER_MOTION_ABSOLUTE_X = (1 << 1) ,
  XKB_POINTER_MOTION_ABSOLUTE_Y = (1 << 2)
}
 
enum  xkb_pointer_button_state {
  XKB_POINTER_BUTTON_RELEASED ,
  XKB_POINTER_BUTTON_PRESSED
}
 
enum  xkb_events_flags { XKB_EVENTS_NO_FLAGS = 0 }
 
enum  xkb_machine_builder_flags { XKB_MACHINE_BUILDER_NO_FLAGS = 0 }
 
enum  xkb_machine_flags {
  XKB_MACHINE_NO_FLAGS = 0 ,
  XKB_MACHINE_SERVER_ACTIONS = (1 << 0)
}
 
enum  xkb_a11y_flags {
  XKB_A11Y_NO_FLAGS = 0 ,
  XKB_A11Y_STICKY_KEYS_NO_SIMULTANEOUS_KEYS = (1 << 0) ,
  XKB_A11Y_STICKY_KEYS_LATCH_TO_LOCK = (1 << 1) ,
  XKB_A11Y_LATCH_SIMULTANEOUS_KEYS = (1 << 2)
}
 
enum  xkb_layout_out_of_range_policy {
  XKB_LAYOUT_OUT_OF_RANGE_WRAP = 0 ,
  XKB_LAYOUT_OUT_OF_RANGE_CLAMP ,
  XKB_LAYOUT_OUT_OF_RANGE_REDIRECT
}
 
enum  xkb_state_mode {
  XKB_STATE_MODE_CLIENT = 0 ,
  XKB_STATE_MODE_SERVER_QUERY = 1 ,
  XKB_STATE_MODE_SERVER = 2
}
 
enum  xkb_state_match {
  XKB_STATE_MATCH_ANY = (1 << 0) ,
  XKB_STATE_MATCH_ALL = (1 << 1) ,
  XKB_STATE_MATCH_NON_EXCLUSIVE = (1 << 16)
}
 
enum  xkb_consumed_mode {
  XKB_CONSUMED_MODE_XKB ,
  XKB_CONSUMED_MODE_GTK
}
 

Functions

XKB_EXPORT enum xkb_event_type xkb_event::xkb_event_get_type (const struct xkb_event *event)
 
XKB_EXPORT enum xkb_error_code xkb_event::xkb_event_get_keycode (const struct xkb_event *event, xkb_keycode_t *keycode, enum xkb_key_direction *direction)
 
XKB_EXPORT enum xkb_error_code xkb_event::xkb_event_get_components (const struct xkb_event *event, struct xkb_event_components *components)
 
XKB_EXPORT enum xkb_error_code xkb_event::xkb_event_get_pointer_motion (const struct xkb_event *event, struct xkb_event_pointer_motion *motion)
 
XKB_EXPORT enum xkb_error_code xkb_event::xkb_event_get_pointer_button (const struct xkb_event *event, struct xkb_event_pointer_button *button)
 
XKB_EXPORT enum xkb_error_code xkb_event::xkb_event_get_virtual_console (const struct xkb_event *event, int8_t *index_or_offset, bool *is_offset)
 
XKB_EXPORT struct xkb_eventsxkb_events::xkb_events_new (struct xkb_context *context, const struct xkb_events_config *config, enum xkb_error_code *error)
 
XKB_EXPORT struct xkb_eventsxkb_events::xkb_events_ref (struct xkb_events *events)
 
XKB_EXPORT void xkb_events::xkb_events_unref (struct xkb_events *events)
 
XKB_EXPORT const struct xkb_eventxkb_events::xkb_events_next (struct xkb_events *events)
 
XKB_EXPORT struct xkb_machine_builderxkb_machine_builder::xkb_machine_builder_new (struct xkb_keymap *keymap, const struct xkb_machine_builder_config *config, enum xkb_error_code *error)
 
XKB_EXPORT struct xkb_machine_builderxkb_machine_builder::xkb_machine_builder_ref (struct xkb_machine_builder *builder)
 
XKB_EXPORT void xkb_machine_builder::xkb_machine_builder_unref (struct xkb_machine_builder *builder)
 
XKB_EXPORT struct xkb_keymapxkb_machine_builder::xkb_machine_builder_get_keymap (const struct xkb_machine_builder *builder)
 
XKB_EXPORT enum xkb_error_code xkb_machine_builder::xkb_machine_builder_update_a11y (struct xkb_machine_builder *builder, const struct xkb_machine_builder_a11y_update *update)
 
XKB_EXPORT enum xkb_error_code xkb_machine_builder::xkb_machine_builder_update_mods_remap (struct xkb_machine_builder *builder, const struct xkb_machine_builder_mods_remap_update *update)
 
XKB_EXPORT enum xkb_error_code xkb_machine_builder::xkb_machine_builder_update_shortcut_override (struct xkb_machine_builder *builder, const struct xkb_machine_builder_shortcut_override_update *update)
 
XKB_EXPORT struct xkb_machinexkb_machine::xkb_machine_new (const struct xkb_machine_builder *builder, enum xkb_error_code *error)
 
XKB_EXPORT struct xkb_machinexkb_machine::xkb_machine_ref (struct xkb_machine *machine)
 
XKB_EXPORT void xkb_machine::xkb_machine_unref (struct xkb_machine *machine)
 
XKB_EXPORT struct xkb_keymapxkb_machine::xkb_machine_get_keymap (const struct xkb_machine *machine)
 
XKB_EXPORT enum xkb_error_code xkb_machine::xkb_machine_process_key (struct xkb_machine *machine, xkb_keycode_t key, enum xkb_key_direction direction, struct xkb_events *events)
 
XKB_EXPORT enum xkb_error_code xkb_machine::xkb_machine_process_synthetic (struct xkb_machine *machine, const struct xkb_synthetic_update *update, struct xkb_events *events)
 
XKB_EXPORT struct xkb_statexkb_state::xkb_state_new_with_mode (struct xkb_keymap *keymap, enum xkb_state_mode mode, enum xkb_error_code *error)
 
XKB_EXPORT struct xkb_statexkb_state::xkb_state_new_from_machine (const struct xkb_machine *machine, enum xkb_error_code *error)
 
XKB_EXPORT struct xkb_statexkb_state::xkb_state_new (struct xkb_keymap *keymap)
 
XKB_EXPORT struct xkb_statexkb_state::xkb_state_ref (struct xkb_state *state)
 
XKB_EXPORT void xkb_state::xkb_state_unref (struct xkb_state *state)
 
XKB_EXPORT struct xkb_keymapxkb_state::xkb_state_get_keymap (struct xkb_state *state)
 
XKB_EXPORT enum xkb_state_component xkb_state::xkb_state_update_mask (struct xkb_state *state, xkb_mod_mask_t depressed_mods, xkb_mod_mask_t latched_mods, xkb_mod_mask_t locked_mods, xkb_layout_index_t depressed_layout, xkb_layout_index_t latched_layout, xkb_layout_index_t locked_layout)
 
XKB_EXPORT enum xkb_error_code xkb_state::xkb_state_update_event (struct xkb_state *state, const struct xkb_event *event, enum xkb_state_component *changed)
 
XKB_EXPORT enum xkb_state_component xkb_state::xkb_state_update_key (struct xkb_state *state, xkb_keycode_t key, enum xkb_key_direction direction)
 
XKB_EXPORT enum xkb_error_code xkb_state::xkb_state_update_synthetic (struct xkb_state *state, const struct xkb_synthetic_update *update, enum xkb_state_component *changed)
 
XKB_EXPORT enum xkb_state_component xkb_state::xkb_state_update_latched_locked (struct xkb_state *state, xkb_mod_mask_t affect_latched_mods, xkb_mod_mask_t latched_mods, bool affect_latched_layout, int32_t latched_layout, xkb_mod_mask_t affect_locked_mods, xkb_mod_mask_t locked_mods, bool affect_locked_layout, int32_t locked_layout)
 
XKB_EXPORT int xkb_state::xkb_state_key_get_syms (struct xkb_state *state, xkb_keycode_t key, const xkb_keysym_t **syms_out)
 
XKB_EXPORT int xkb_state::xkb_state_key_get_utf8 (struct xkb_state *state, xkb_keycode_t key, char *buffer, size_t size)
 
XKB_EXPORT uint32_t xkb_state::xkb_state_key_get_utf32 (struct xkb_state *state, xkb_keycode_t key)
 
XKB_EXPORT xkb_keysym_t xkb_state::xkb_state_key_get_one_sym (struct xkb_state *state, xkb_keycode_t key)
 
XKB_EXPORT xkb_layout_index_t xkb_state::xkb_state_key_get_layout (struct xkb_state *state, xkb_keycode_t key)
 
XKB_EXPORT xkb_level_index_t xkb_state::xkb_state_key_get_level (struct xkb_state *state, xkb_keycode_t key, xkb_layout_index_t layout)
 
XKB_EXPORT enum xkb_keyboard_control_flags xkb_state::xkb_state_serialize_controls (const struct xkb_state *state, enum xkb_state_component components)
 
XKB_EXPORT xkb_mod_mask_t xkb_state::xkb_state_serialize_mods (struct xkb_state *state, enum xkb_state_component components)
 
XKB_EXPORT xkb_layout_index_t xkb_state::xkb_state_serialize_layout (struct xkb_state *state, enum xkb_state_component components)
 
XKB_EXPORT int xkb_state::xkb_state_mod_name_is_active (struct xkb_state *state, const char *name, enum xkb_state_component type)
 
XKB_EXPORT int xkb_state::xkb_state_mod_names_are_active (struct xkb_state *state, enum xkb_state_component type, enum xkb_state_match match,...)
 
XKB_EXPORT int xkb_state::xkb_state_mod_index_is_active (struct xkb_state *state, xkb_mod_index_t idx, enum xkb_state_component type)
 
XKB_EXPORT int xkb_state::xkb_state_mod_indices_are_active (struct xkb_state *state, enum xkb_state_component type, enum xkb_state_match match,...)
 
XKB_EXPORT xkb_mod_mask_t xkb_state::xkb_state_key_get_consumed_mods2 (struct xkb_state *state, xkb_keycode_t key, enum xkb_consumed_mode mode)
 
XKB_EXPORT xkb_mod_mask_t xkb_state::xkb_state_key_get_consumed_mods (struct xkb_state *state, xkb_keycode_t key)
 
XKB_EXPORT int xkb_state::xkb_state_mod_index_is_consumed2 (struct xkb_state *state, xkb_keycode_t key, xkb_mod_index_t idx, enum xkb_consumed_mode mode)
 
XKB_EXPORT int xkb_state::xkb_state_mod_index_is_consumed (struct xkb_state *state, xkb_keycode_t key, xkb_mod_index_t idx)
 
XKB_EXPORT xkb_mod_mask_t xkb_state::xkb_state_mod_mask_remove_consumed (struct xkb_state *state, xkb_keycode_t key, xkb_mod_mask_t mask)
 
XKB_EXPORT int xkb_state::xkb_state_layout_name_is_active (struct xkb_state *state, const char *name, enum xkb_state_component type)
 
XKB_EXPORT int xkb_state::xkb_state_layout_index_is_active (struct xkb_state *state, xkb_layout_index_t idx, enum xkb_state_component type)
 
XKB_EXPORT int xkb_state::xkb_state_led_name_is_active (struct xkb_state *state, const char *name)
 
XKB_EXPORT int xkb_state::xkb_state_led_index_is_active (struct xkb_state *state, xkb_led_index_t idx)
 

Detailed Description

Creating, destroying and manipulating keyboard state objects.

Server State and Client State

There are two distinct actors in most window-system architectures:

Server

For example: a Wayland compositor, an X11 server or an evdev listener.

Servers maintain the XKB state for a device according to input events from the device, such as key presses and releases, and out-of-band events from the user, like UI layout switchers.

Client

For example: a Wayland client or an X11 client.

Clients do not listen to input from the device; instead, whenever the server state changes, the server serializes the state and notifies the clients that the state has changed; the clients then update the state from the serialization.

There are two corresponding APIs:

xkb_machine: the server API

This is the recommended API for server applications. It enables the full feature set that xkbcommon supports.

xkb_machine is a Mealy machine‌: it is a finite-state machine that takes a stream of raw key events – a pair (keycode, direction) – as input, and produces a stream of atomic XKB events as output.

The observable state of the machine is exposed via a companion xkb_state object:

Note that the xkb_machine API supports events other than state components changes, such as key press/release events, so that it enables handling most of the XKB key actions.

See the example for a Wayland server in the quick guide.

Since
1.14.0
xkb_state: the client API (and legacy server API)

This is the API for client applications and the legacy API for server applications.

Client applications
Create the state object with xkb_state::xkb_state_new_with_mode() using XKB_STATE_MODE_CLIENT, then update it via xkb_state::xkb_state_update_mask() from server serializations.
Server applications not using xkb_machine
Create the state object with xkb_state::xkb_state_new_with_mode() using XKB_STATE_MODE_SERVER, or with the legacy xkb_state::xkb_state_new() constructor, then update it via xkb_state::xkb_state_update_key() for key events and xkb_state::xkb_state_update_synthetic() for out-of-band inputs such as layout switchers.
Warning
Some entry points in the xkb_state API are only meant for servers and some are only meant for clients. Thus it is recommended to use xkb_state::xkb_state_new_with_mode() because it enforces correct usage at runtime and logs misuse as XKB_ERROR_UNEXPECTED_STATE_MODE. Using xkb_state::xkb_state_new() does not enforce this: mixing entry points may lead to incorrect state.
Note
Since version 1.14.0, server applications should use the xkb_machine API, which supports more features.

See the examples for clients in the quick guide.

Consumed Modifiers

Some functions, like xkb_state::xkb_state_key_get_syms(), look at the state of the modifiers in the keymap and derive from it the correct shift level to use for the key. For example, in a US layout, pressing the key labeled <A> while the Shift modifier is active, generates the keysym A. In this case, the Shift modifier is said to be consumed. However, the Num Lock modifier does not affect this translation at all, even if it is active, so it is not consumed by this translation.

It may be desirable for some application to not reuse consumed modifiers for further processing, e.g. for hotkeys or keyboard shortcuts. To understand why, consider some requirements from a standard shortcut mechanism, and how they are implemented:

  1. The shortcut’s modifiers must match exactly to the state. For example, it is possible to bind separate actions to <Alt><Tab> and to <Alt><Shift><Tab>. Further, if only <Alt><Tab> is bound to an action, pressing <Alt><Shift><Tab> should not trigger the shortcut. Effectively, this means that the modifiers are compared using the equality operator (==).
  2. Only relevant modifiers are considered for the matching. For example, Caps Lock and Num Lock should not generally affect the matching, e.g. when matching <Alt><Tab> against the state, it does not matter whether Num Lock is active or not. These relevant, or significant, modifiers usually include Alt, Control, Shift, Super and similar. Effectively, this means that non-significant modifiers are masked out, before doing the comparison as described above.
  3. The matching must be independent of the layout/keymap. For example, the <Plus> (+) symbol is found on the first level on some layouts, but requires holding Shift on others. If you simply bind the action to the <Plus> keysym, it would work for the unshifted kind, but not for the others, because the match against Shift would fail. If you bind the action to <Shift><Plus>, only the shifted kind would work. So what is needed is to recognize that Shift is used up in the translation of the keysym itself, and therefore should not be included in the matching. Effectively, this means that consumed modifiers (Shift in this example) are masked out as well, before doing the comparison.

In summary, this is approximately how the matching would be performed:

(keysym == shortcut_keysym) &&
((state_mods & ~consumed_mods & significant_mods) == shortcut_mods)

state_mods are the modifiers reported by xkb_state::xkb_state_mod_index_is_active() and similar functions. consumed_mods are the modifiers reported by xkb_state::xkb_state_mod_index_is_consumed() and similar functions. significant_mods are decided upon by the application/toolkit/user; it is up to them to decide whether these are configurable or hard-coded.

Enumeration Type Documentation

◆ xkb_event_type

Denotes the type of a state event.

See also
xkb_event::xkb_event_get_type()
Since
1.14.0
Enumerator
XKB_EVENT_TYPE_INVALID 

Invalid event.

This is not a real event type but an error indicator.

Since
1.14.0
XKB_EVENT_TYPE_KEY 

Key event

See also
xkb_event::xkb_event_get_keycode()
Since
1.14.0
XKB_EVENT_TYPE_STATE_COMPONENTS 

State components change event

See also
xkb_event::xkb_event_get_components()
Since
1.14.0
XKB_EVENT_TYPE_POINTER_MOTION 

Pointer motion event

See also
xkb_event::xkb_event_get_pointer_motion()
Since
1.14.0
XKB_EVENT_TYPE_POINTER_BUTTON 

Pointer button event

See also
xkb_event::xkb_event_get_pointer_button()
Since
1.14.0
XKB_EVENT_TYPE_TERMINATE_DISPLAY_SERVER 

**_Terminate_ display server** event

This event is only generated by a state machine if it was created with XKB_MACHINE_SERVER_ACTIONS set. See xkb_machine_builder_config::machine_flags for further details.

Since
1.14.0
XKB_EVENT_TYPE_SWITCH_VIRTUAL_CONSOLE 

Switch virtual console event

This event is only generated by a state machine if it was created with XKB_MACHINE_SERVER_ACTIONS set. See xkb_machine_builder_config::machine_flags for further details.

Since
1.14.0

◆ xkb_key_direction

Specifies the direction of the key (press / release) or a repetition.

Enumerator
XKB_KEY_UP 

The key was released.

XKB_KEY_DOWN 

The key was pressed.

XKB_KEY_REPEATED 

The key was repeated.

This should be used by the compositor only if it handles key repetition itself.

Since
1.14.0

◆ xkb_state_component

Component types for state objects, which belong to the following categories:

This enum is bitmaskable, e.g. (XKB_STATE_MODS_DEPRESSED | XKB_STATE_MODS_LATCHED) is valid to exclude locked modifiers.

In XKB, the DEPRESSED components are also known as base.

Remarks
Values 0x200..0x800 are reserved for future use.
Enumerator
XKB_STATE_NO_COMPONENT 

Represents the empty set of state components.

This is the identity value for state component bitmask operations. It corresponds also to the result of updates operation when the state components remain unchanged.

Since
1.14.0
XKB_STATE_MODS_DEPRESSED Depressed modifiers, i.e. a key is physically holding them.
XKB_STATE_MODS_LATCHED Latched modifiers, i.e. will be unset after the next non-modifier key press.
XKB_STATE_MODS_LOCKED Locked modifiers, i.e. will be unset after the key provoking the lock has been pressed again.
XKB_STATE_MODS_EFFECTIVE Effective modifiers, i.e. currently active and affect key processing (derived from the other state components).

Use this unless you explicitly care how the state came about.

XKB_STATE_LAYOUT_DEPRESSED Depressed layout, i.e. a key is physically holding it.
XKB_STATE_LAYOUT_LATCHED Latched layout, i.e. will be unset after the next non-modifier key press.
XKB_STATE_LAYOUT_LOCKED Locked layout, i.e. will be unset after the key provoking the lock has been pressed again.
XKB_STATE_LAYOUT_EFFECTIVE Effective layout, i.e. currently active and affects key processing (derived from the other state components).

Use this unless you explicitly care how the state came about.

XKB_STATE_LEDS 

LEDs (derived from the other state components).

XKB_STATE_CONTROLS_EFFECTIVE 

Effective keyboard controls.

Since
1.14.0

◆ xkb_keyboard_control_flags

Boolean global keyboard controls, which affect the way xkbcommon handles the keyboard as a whole.

This enumeration is bit-maskable.

Since
1.14.0
Enumerator
XKB_KEYBOARD_CONTROL_NO_FLAGS 

Do not apply any control.

Since
1.14.0
XKB_KEYBOARD_CONTROL_A11Y_STICKY_KEYS 

Sticky keys is an accessibility feature primarily aimed at helping people that find it difficult or impossible to press two keys at once.

The XKB_KEYBOARD_CONTROL_A11Y_STICKY_KEYS control makes it easier for them to type by changing the behavior of the modifier and group switch keys. When sticky keys are enabled, set modifiers/group switch are transformed into their corresponding latch version: e.g. the user can first press a modifier, release it, then press another key.

See also
XKB_A11Y_STICKY_KEYS_LATCH_TO_LOCK
Since
1.14.0
XKB_KEYBOARD_CONTROL_MOUSE_KEYS 

Enable mouse keys for controlling the mouse functions from the keyboard.

When mouse keys are enabled, all keys with pointer actions bound to them generate pointer events instead of normal key press and release events.

Since
1.14.0

◆ xkb_pointer_motion_flags

Pointer motion flags for xkb_event_pointer_motion.

Since
1.14.0
Enumerator
XKB_POINTER_MOTION_NO_FLAGS 

Do not apply any flags; the corresponding pointer motion‌:

  • has relative coordinates,
  • does not repeat.
Since
1.14.0
XKB_POINTER_MOTION_REPEATS 

The pointer motion repeats.

Since
1.14.0
XKB_POINTER_MOTION_ABSOLUTE_X 

The x coordinate is absolute.

Since
1.14.0
XKB_POINTER_MOTION_ABSOLUTE_Y 

The y coordinate is absolute.

Since
1.14.0

◆ xkb_pointer_button_state

Specifies the direction of a button (press/release).

See also
struct xkb_event_pointer_button
Since
1.14.0
Enumerator
XKB_POINTER_BUTTON_RELEASED 

The pointer button was released.

Since
1.14.0
XKB_POINTER_BUTTON_PRESSED 

The pointer button was pressed.

Since
1.14.0

◆ xkb_events_flags

Flags for xkb_events_config::flags.

See also
xkb_events::xkb_events_new().
Since
1.14.0
Enumerator
XKB_EVENTS_NO_FLAGS 

Do not apply any flags: the corresponding event collection will behave as a batch of events.

Since
1.14.0

◆ xkb_machine_builder_flags

Flags for xkb_machine_builder_config::flags.

See also
xkb_machine_builder::xkb_machine_builder_new()
Since
1.14.0
Enumerator
XKB_MACHINE_BUILDER_NO_FLAGS 

Do not apply any flags.

Since
1.14.0

◆ xkb_machine_flags

Flags for xkb_machine_builder_config::machine_flags.

See also
xkb_machine_builder::xkb_machine_builder_new()
Since
1.14.0
Enumerator
XKB_MACHINE_NO_FLAGS 

Do not apply any flags.

Since
1.14.0
XKB_MACHINE_SERVER_ACTIONS 

Enable server actions.

When this flag is enabled, all keys with server actions bound to them generate server events instead of usual key press and release events.

Since
1.14.0

◆ xkb_a11y_flags

Flags for xkb_machine_builder_a11y_update::flags.

These flags configure the accessibility (a11y) features.

Since
1.14.0
Enumerator
XKB_A11Y_NO_FLAGS 

Do not apply any flags.

Since
1.14.0
XKB_A11Y_STICKY_KEYS_NO_SIMULTANEOUS_KEYS 

If both XKB_A11Y_STICKY_KEYS_NO_SIMULTANEOUS_KEYS and XKB_KEYBOARD_CONTROL_A11Y_STICKY_KEYS are activated, they enable users to deactivate sticky keys whenever two keys or more are pressed simultaneously.

See also
XKB_KEYBOARD_CONTROL_A11Y_STICKY_KEYS
Since
1.14.0
XKB_A11Y_STICKY_KEYS_LATCH_TO_LOCK 

If both XKB_A11Y_STICKY_KEYS_LATCH_TO_LOCK and XKB_KEYBOARD_CONTROL_A11Y_STICKY_KEYS are activated, they enable users to lock modifier keys without requiring special locking keys.

The user can press a latch modifier twice in a row to lock it, and then unlock it by pressing it one more time.

See also
XKB_KEYBOARD_CONTROL_A11Y_STICKY_KEYS
Since
1.14.0
XKB_A11Y_LATCH_SIMULTANEOUS_KEYS 

Without this option, the latch keys are only triggers if keys are strictly sequentially tapped, e.g.:

  1. ISO_Level2_Latch
  2. ISO_Level2_Latch
  3. A
  4. A

If one wants multiple active latches, they must be tapped in sequence: e.g.:

  1. ISO_Level2_Latch
  2. ISO_Level2_Latch
  3. ISO_Level3_Latch
  4. ISO_Level3_Latch
  5. A
  6. A

This option relaxes the strict sequence requirement and enables operating keys that do not break latches simultaneously with a latch key, e.g.:

  1. ISO_Level2_Latch
  2. ISO_Level3_Latch
  3. ISO_Level2_Latch
  4. ISO_Level3_Latch
  5. A
  6. A

This is an extension to the X11 XKB protocol and is enabled by default when using XKB_KEYMAP_FORMAT_TEXT_V2.

Since
1.14.0

◆ xkb_layout_out_of_range_policy

Policies defining how to bring out-of-range layout indices into range.

See also
struct xkb_synthetic_update
xkb_machine::xkb_machine_process_synthetic()
Since
1.14.0
Enumerator
XKB_LAYOUT_OUT_OF_RANGE_WRAP 

Wrap into range using integer modulus (default).

Since
1.14.0
XKB_LAYOUT_OUT_OF_RANGE_CLAMP Clamp into range, i.e. invalid indices are corrected to the closest valid bound (0 or highest layout index).
Since
1.14.0
XKB_LAYOUT_OUT_OF_RANGE_REDIRECT 

Redirect to a specific layout index.

Since
1.14.0

◆ xkb_state_mode

Mode for creating a keyboard state object.

See also
xkb_state::xkb_state_new_with_mode()
Since
1.14.0
Enumerator
XKB_STATE_MODE_CLIENT 

State driven by serialized state updates via xkb_state::xkb_state_update_mask().

Use this mode for client applications.

This is the recommended mode for new client applications, as it creates xkb_state objects with much smaller memory footprint than with xkb_state::xkb_state_new().

@important xkb_state objects created with this mode cannot be used with the following API:

Since
1.14.0
XKB_STATE_MODE_SERVER_QUERY 

State driven by XKB events via xkb_state::xkb_state_update_event().

Use this mode for an observable state companion to an xkb_machine in server applications using the xkb_machine API.

This is the recommended mode for new server applications using the xkb_machine API, as it creates xkb_state objects with much smaller memory footprint than with xkb_state::xkb_state_new().

@important xkb_state objects created with this mode cannot be used with the following API:

Warning
Do not pass this value to xkb_state::xkb_state_new_with_mode() directly, unless the corresponding xkb_machine has not processed any input event yet: the result would not be initialized from the machine’s current state, and cannot be brought back into sync afterward if the machine already processed events. Use xkb_state::xkb_state_new_from_machine() instead.
See also
struct xkb_machine
xkb_state::xkb_state_new_from_machine()
Since
1.14.0
XKB_STATE_MODE_SERVER 

State driven directly by key events, via xkb_state::xkb_state_update_key() or by synthetic input events, via xkb_state::xkb_state_update_synthetic().

Use this mode for server applications that do not use the preferred full-featured xkb_machine API.

@important Contrary to xkb_state::xkb_state_new(), xkb_state objects created with this mode cannot be used with the following API:

Warning
Prefer xkb_machine for new server applications. This mode exists for compatibility with code predating the xkb_machine API and may be deprecated in a future release.
Since
1.14.0

◆ xkb_state_match

Match flags for xkb_state::xkb_state_mod_indices_are_active() and xkb_state::xkb_state_mod_names_are_active(), specifying the conditions for a successful match.

XKB_STATE_MATCH_NON_EXCLUSIVE is bitmaskable with the other modes.

Enumerator
XKB_STATE_MATCH_ANY 

Returns true if any of the modifiers are active.

XKB_STATE_MATCH_ALL 

Returns true if all of the modifiers are active.

XKB_STATE_MATCH_NON_EXCLUSIVE Makes matching non-exclusive, i.e. will not return false if a modifier not specified in the arguments is active.

◆ xkb_consumed_mode

Consumed modifiers mode.

There are several possible methods for deciding which modifiers are consumed and which are not, each applicable for different systems or situations. The mode selects the method to use.

Keep in mind that in all methods, the keymap may decide to preserve a modifier, meaning it is not reported as consumed even if it would have otherwise.

Enumerator
XKB_CONSUMED_MODE_XKB 

This is the mode defined in the XKB specification and used by libX11.

A modifier is consumed if and only if it may affect key translation.

For example, if Control+Alt+<Backspace> produces some assigned keysym, then when pressing just <Backspace>, Control and Alt are consumed, even though they are not active, since if they were active they would have affected key translation.

XKB_CONSUMED_MODE_GTK 

This is the mode used by the GTK+ toolkit.

The mode consists of the following two independent heuristics:

  • The currently active set of modifiers, excluding modifiers which do not affect the key (as described for XKB_CONSUMED_MODE_XKB), are considered consumed, if the keysyms produced when all of them are active are different from the keysyms produced when no modifiers are active.
  • A single modifier is considered consumed if the keysyms produced for the key when it is the only active modifier are different from the keysyms produced when no modifiers are active.

Function Documentation

◆ xkb_event_get_type()

XKB_EXPORT enum xkb_event_type xkb_event_get_type ( const struct xkb_event event)

Get the type of an event.

Parameters
[in]eventThe event to process.
Returns
The event’s type on success, otherwise XKB_EVENT_TYPE_INVALID.
Since
1.14.0

◆ xkb_event_get_keycode()

XKB_EXPORT enum xkb_error_code xkb_event_get_keycode ( const struct xkb_event event,
xkb_keycode_t keycode,
enum xkb_key_direction direction 
)

Get the keycode and direction associated to a state event of type XKB_EVENT_TYPE_KEY.

Parameters
[in]eventThe event object to process.
[out]keycodeA pointer to store the keycode of the key event.
[out]directionA pointer to store the direction of the key event.
Precondition
The event must be XKB_EVENT_TYPE_KEY. Otherwise keycode and direction are not updated.
Returns
XKB_SUCCESS on success, otherwise an error code‌:
See also
xkb_machine::xkb_machine_process_key()
Since
1.14.0

◆ xkb_event_get_components()

XKB_EXPORT enum xkb_error_code xkb_event_get_components ( const struct xkb_event event,
struct xkb_event_components components 
)

Serialization of the state components corresponding to a state event of type XKB_EVENT_TYPE_STATE_COMPONENTS.

Parameters
[in]eventThe event object to process.
[in,out]componentsA pointer to an event components object to update with the event.
Precondition
The event must be of type XKB_EVENT_TYPE_STATE_COMPONENTS. Otherwise components is not updated.
components must point to a zero-initialized struct with `components->size` set per Extensible structure ABI contract.
Invariant
The library writes only to fields of components that fall within `components->size`.
Returns
XKB_SUCCESS on success, otherwise an error code‌:
See also
XKB_EVENT_TYPE_STATE_COMPONENTS
struct xkb_event_components
Since
1.14.0

◆ xkb_event_get_pointer_motion()

XKB_EXPORT enum xkb_error_code xkb_event_get_pointer_motion ( const struct xkb_event event,
struct xkb_event_pointer_motion motion 
)

Get the pointer motion corresponding to a state event of type XKB_EVENT_TYPE_POINTER_MOTION.

Parameters
[in]eventThe event object to process.
[in,out]motionA pointer to a pointer motion object to update with the event.
Precondition
The event must have the type XKB_EVENT_TYPE_POINTER_MOTION. Otherwise motion is not updated.
motion must point to a zero-initialized struct with `motion->size` set per Extensible structure ABI contract.
Invariant
The library writes only to fields of motion that fall within `motion->size`.
Returns
XKB_SUCCESS on success, otherwise an error code‌:
See also
XKB_EVENT_TYPE_POINTER_MOTION
struct xkb_event_pointer_motion
Since
1.14.0

◆ xkb_event_get_pointer_button()

XKB_EXPORT enum xkb_error_code xkb_event_get_pointer_button ( const struct xkb_event event,
struct xkb_event_pointer_button button 
)

Get the pointer button corresponding to a state event of type XKB_EVENT_TYPE_POINTER_BUTTON.

Parameters
[in]eventThe event object to process.
[in,out]buttonA pointer to a pointer button object to update with the event.
Precondition
The event must have the type XKB_EVENT_TYPE_POINTER_BUTTON. Otherwise button is not updated.
button must point to a zero-initialized struct with `button->size` set per Extensible structure ABI contract.
Invariant
The library writes only to fields of button that fall within `button->size`.
Returns
XKB_SUCCESS on success, otherwise an error code‌:
See also
XKB_EVENT_TYPE_POINTER_BUTTON.
struct xkb_event_pointer_button
Since
1.14.0

◆ xkb_event_get_virtual_console()

XKB_EXPORT enum xkb_error_code xkb_event_get_virtual_console ( const struct xkb_event event,
int8_t *  index_or_offset,
bool *  is_offset 
)

Get the virtual console index or offset associated to a state event of type XKB_EVENT_TYPE_SWITCH_VIRTUAL_CONSOLE.

Parameters
[in]eventThe event object to process.
[out]index_or_offsetA pointer to store the absolute or relative virtual console target.
[out]is_offsetA pointer to store whether index_or_offset is an index (false) or an offset (true).
Precondition
The event must be XKB_EVENT_TYPE_SWITCH_VIRTUAL_CONSOLE. Otherwise index_or_offset and is_offset are not updated.
Returns
XKB_SUCCESS on success, otherwise an error code‌:
See also
xkb_machine::xkb_machine_process_key()
Since
1.14.0

◆ xkb_events_new()

XKB_EXPORT struct xkb_events * xkb_events_new ( struct xkb_context context,
const struct xkb_events_config config,
enum xkb_error_code error 
)

Create a new event collection object.

Parameters
[in]contextThe context in which to create the object.
[in]configConfiguration to control the collection behavior, or NULL for the defaults: an xkb_events_config struct with size set per Extensible structure ABI contract and all other fields zeroed.
[out]errorPointer to store the resulting error code, or NULL if not needed.
Precondition
config must point to a zero-initialized struct with `config->size` set per Extensible structure ABI contract.
Returns
A new event collection, or NULL on failure.
Postcondition
if error is not NULL, *error is set to XKB_SUCCESS on success or to an error code corresponding to the failure. Possible errors are:
See also
struct xkb_events_config
xkb_events_ref()
xkb_events_unref()
xkb_events_next()
xkb_machine::xkb_machine_process_key()
Since
1.14.0

◆ xkb_events_ref()

XKB_EXPORT struct xkb_events * xkb_events_ref ( struct xkb_events events)

Take a new reference on an event collection object.

Note
In case the collection is a batch of events, it is reset on each process_* function call, such as xkb_machine::xkb_machine_process_key() or xkb_machine::xkb_machine_process_synthetic(). A reference does not preserve the collection’s contents: if the machine processes another frame while a reference is held, the events visible through every reference are replaced by that frame’s events. Do not hold a reference past the next process_* call if you still need to read the current frame's events.
Parameters
[in]eventsThe collection to reference.
Returns
The passed-in collection.
See also
xkb_events_new()
xkb_events_unref()
Since
1.14.0

◆ xkb_events_unref()

XKB_EXPORT void xkb_events_unref ( struct xkb_events events)

Release a reference on an event collection object, and possibly free it.

Parameters
[in]eventsThe event collection object. If it is NULL, this function does nothing.
See also
xkb_events_new()
xkb_events_ref()
Since
1.14.0

◆ xkb_events_next()

XKB_EXPORT const struct xkb_event * xkb_events_next ( struct xkb_events events)

Get the next event from an event collection.

Parameters
[in]eventsThe event collection.
Returns
The next event, or NULL if there are no more events to read.
Since
1.14.0

◆ xkb_machine_builder_new()

XKB_EXPORT struct xkb_machine_builder * xkb_machine_builder_new ( struct xkb_keymap keymap,
const struct xkb_machine_builder_config config,
enum xkb_error_code error 
)

Create a new xkb_machine builder object.

xkb_machine objects can then be created from the builder using xkb_machine::xkb_machine_new().

Parameters
[in]keymapThe keymap which the state machine will use.
[in]configConfiguration to control the builder behavior, or NULL for the defaults: an xkb_machine_builder_config struct with size set per Extensible structure ABI contract and all other fields zeroed.
[out]errorPointer to store the resulting error code, or NULL if not needed.
Precondition
config must point to a zero-initialized struct with `config->size` set per Extensible structure ABI contract.
Returns
A new xkb_machine builder object, or NULL on failure.
Postcondition
if error is not NULL, *error is set to XKB_SUCCESS on success or to an error code corresponding to the failure. Possible errors are:
See also
struct xkb_machine_builder_config
xkb_machine_builder_ref()
xkb_machine_builder_unref()
xkb_machine::xkb_machine_new()
Since
1.14.0

◆ xkb_machine_builder_ref()

XKB_EXPORT struct xkb_machine_builder * xkb_machine_builder_ref ( struct xkb_machine_builder builder)

Take a new reference on an xkb_machine builder object.

Parameters
[in]builderThe builder to reference.
Returns
The passed-in builder.
Since
1.14.0

◆ xkb_machine_builder_unref()

XKB_EXPORT void xkb_machine_builder_unref ( struct xkb_machine_builder builder)

Release a reference on an xkb_machine builder object, and possibly free it.

Parameters
[in]builderThe xkb_machine builder. If it is NULL, this function does nothing.
See also
xkb_machine_builder_new()
xkb_machine_builder_ref()
Since
1.14.0

◆ xkb_machine_builder_get_keymap()

XKB_EXPORT struct xkb_keymap * xkb_machine_builder_get_keymap ( const struct xkb_machine_builder builder)

Get the keymap which a xkb_machine_builder object is using.

Parameters
[in]builderThe state machine builder object.
Returns
The keymap which was passed to xkb_machine_builder_new() when creating this xkb_machine_builder object.
Warning
This function does not take a new reference on the keymap; you must explicitly reference it yourself if you plan to use it beyond the lifetime of the xkb_machine_builder object.
Since
1.14.0

◆ xkb_machine_builder_update_a11y()

XKB_EXPORT enum xkb_error_code xkb_machine_builder_update_a11y ( struct xkb_machine_builder builder,
const struct xkb_machine_builder_a11y_update update 
)

Update the accessibility flags of an xkb_machine_builder object.

Parameters
[in,out]builderThe xkb_machine builder object to modify.
[in]updateAccessibility update object.
Precondition
update must point to a zero-initialized struct with `update->size` set per Extensible structure ABI contract.
Returns
XKB_SUCCESS on success, otherwise an error code. Possible errors are:
See also
struct xkb_machine_builder_a11y_update
Since
1.14.0

◆ xkb_machine_builder_update_mods_remap()

XKB_EXPORT enum xkb_error_code xkb_machine_builder_update_mods_remap ( struct xkb_machine_builder builder,
const struct xkb_machine_builder_mods_remap_update update 
)

Update the modifiers remapping of an xkb_machine_builder object.

Parameters
[in,out]builderThe xkb_machine builder object to modify.
[in]updateModifiers remapping update object.
Precondition
update must point to a zero-initialized struct with `update->size` set per Extensible structure ABI contract.
Returns
XKB_SUCCESS on success, otherwise an error code. Possible errors are:
See also
struct xkb_machine_builder_mods_remap_update
Since
1.14.0

◆ xkb_machine_builder_update_shortcut_override()

XKB_EXPORT enum xkb_error_code xkb_machine_builder_update_shortcut_override ( struct xkb_machine_builder builder,
const struct xkb_machine_builder_shortcut_override_update update 
)

Update layout substitution of the shortcut layout overrides.

Parameters
[in,out]builderThe xkb_machine builder object to modify.
[in]updateShortcut layout substitution update object.
Precondition
update must point to a zero-initialized struct with `update->size` set per Extensible structure ABI contract.
Returns
XKB_SUCCESS on success, otherwise an error code. Possible errors are:
See also
struct xkb_machine_builder_shortcut_override_update
Since
1.14.0

◆ xkb_machine_new()

XKB_EXPORT struct xkb_machine * xkb_machine_new ( const struct xkb_machine_builder builder,
enum xkb_error_code error 
)

Create a new keyboard state machine object.

This entry point is intended for server applications; client applications should not run a state machine locally: instead they should use the xkb_state API and process server state update using xkb_state::xkb_state_update_mask(). See Server State and Client State for further information.

Parameters
[in]builderThe builder object from which to create the state machine.
[out]errorPointer to store the resulting error code, or NULL if not needed.
Returns
A new keyboard state machine object, or NULL on failure.
Postcondition
if error is not NULL, *error is set to XKB_SUCCESS on success or to an error code corresponding to the failure. Possible errors are:
See also
xkb_machine_builder::xkb_machine_builder_new()
Since
1.14.0

◆ xkb_machine_ref()

XKB_EXPORT struct xkb_machine * xkb_machine_ref ( struct xkb_machine machine)

Take a new reference on a xkb_machine object.

Parameters
[in]machineThe state machine.
Returns
The passed in object.
Since
1.14.0

◆ xkb_machine_unref()

XKB_EXPORT void xkb_machine_unref ( struct xkb_machine machine)

Release a reference on a xkb_machine object, and possibly free it.

Parameters
[in]machineThe state machine. If it is NULL, this function does nothing.
Since
1.14.0

◆ xkb_machine_get_keymap()

XKB_EXPORT struct xkb_keymap * xkb_machine_get_keymap ( const struct xkb_machine machine)

Get the keymap which a xkb_machine object is using.

Parameters
[in]machineThe state machine.
Returns
The keymap which was used to create the xkb_machine object, i.e. the keymap passed to xkb_machine_builder::xkb_machine_builder_new() when creating the corresponding builder used in xkb_machine_new().
Warning
This function does not take a new reference on the keymap; you must explicitly reference it yourself if you plan to use it beyond the lifetime of the xkb_machine object.
Since
1.14.0

◆ xkb_machine_process_key()

XKB_EXPORT enum xkb_error_code xkb_machine_process_key ( struct xkb_machine machine,
xkb_keycode_t  key,
enum xkb_key_direction  direction,
struct xkb_events events 
)

Process a key event – a pair (keycode, direction) – through the XKB state machine, and collect the resulting keyboard events into an event batch.

The produced events form a single frame.

Use this function for in-band (device) inputs. Use xkb_machine_process_synthetic() instead to update the state machine in response to out-of-band (non-device) inputs, such as UI layout switchers or accessibility settings changes.

A series of calls to this function should be consistent; that is, a call with XKB_KEY_DOWN for a key should be matched by an XKB_KEY_UP; if a key is pressed twice, it should be released twice; etc. Otherwise (e.g. due to missed input events), situations like “stuck modifiers” may occur.

Parameters
[in,out]machineThe XKB state machine object.
[in]keyThe keycode of the key being operated.
[in]directionThe direction of the key operation.
[out]eventsThe event batch to collect events into. It will be reset before collecting.
Returns
XKB_SUCCESS on success, otherwise an error code.
See also
xkb_machine_process_synthetic()
Since
1.14.0

◆ xkb_machine_process_synthetic()

XKB_EXPORT enum xkb_error_code xkb_machine_process_synthetic ( struct xkb_machine machine,
const struct xkb_synthetic_update update,
struct xkb_events events 
)

Process a synthetic (out-of-band) atomic update through the XKB state machine, and collect the resulting keyboard events into an event batch.

Use this function to update the state machine in response to out-of-band (non-device) inputs, such as UI layout switchers or accessibility settings changes. Use xkb_machine_process_key() instead for in-band (device) inputs.

All changes specified in update are applied atomically as a single frame: the resulting events reflect the net state change at the end of the frame, not intermediate steps. In particular, a XKB_EVENT_TYPE_STATE_COMPONENTS event in the batch represents the cumulative state change for the entire frame — individual intermediate state transitions are not observable.

Only latched, locked and control components can be updated out-of-band; depressed components can only change through key presses via xkb_machine_process_key().

Layout out of range
If the effective layout, after taking into account the depressed, latched and locked layout, is out of range (negative or greater than the maximum layout index), it is brought into range according to the current out-of-range layout policy (see xkb_layout_out_of_range_policy).
Parameters
[in,out]machineThe XKB state machine object.
[in]updateThe update to apply.
[out]eventsThe event batch to collect events into. It will be reset before collecting.
Precondition
update must point to a zero-initialized struct with `update->size` set per Extensible structure ABI contract.
Returns
XKB_SUCCESS on success, otherwise an error code. Possible errors are:
See also
struct xkb_synthetic_update
struct xkb_state_components_update
struct xkb_layout_policy_update
xkb_machine_process_key()
Since
1.14.0

◆ xkb_state_new_with_mode()

XKB_EXPORT struct xkb_state * xkb_state_new_with_mode ( struct xkb_keymap keymap,
enum xkb_state_mode  mode,
enum xkb_error_code error 
)

Create a new keyboard state object with an explicit mode.

This entry point is intended for both server and client applications. It enables using the optimal implementation for the intended use.

Parameters
[in]keymapThe keymap which the state will use.
[in]modeThe state mode to use.
[out]errorPointer to store the resulting error code, or NULL if not needed.
Returns
A new keyboard state object, or NULL on failure.
Postcondition
if error is not NULL, *error is set to XKB_SUCCESS on success or to an error code corresponding to the failure. Possible errors are:
See also
enum xkb_state_mode
Since
1.14.0

◆ xkb_state_new_from_machine()

XKB_EXPORT struct xkb_state * xkb_state_new_from_machine ( const struct xkb_machine machine,
enum xkb_error_code error 
)

Create a new keyboard state object as an observer of an xkb_machine.

Constructor for server applications using the xkb_machine API:

Note
The created state must be kept in sync with the machine using xkb_state_update_event().
The returned state is independent of the machine’s lifetime.
Parameters
[in]machineThe state machine whose keymap the new state will use.
[out]errorPointer to store the resulting error code, or NULL if not needed.
Returns
A new keyboard state object, or NULL on failure.
Postcondition
if error is not NULL, *error is set to XKB_SUCCESS on success or to an error code corresponding to the failure. Possible errors are:
See also
xkb_state_new_with_mode()
XKB_STATE_MODE_SERVER_QUERY
struct xkb_machine
Since
1.14.0

◆ xkb_state_new()

XKB_EXPORT struct xkb_state * xkb_state_new ( struct xkb_keymap keymap)

Create a new keyboard state object.

Note
This is the legacy constructor, predating the xkb_machine API. It imposes no restrictions on which update functions may be called, making it easy to accidentally mix incompatible update paths. Prefer xkb_state::xkb_state_new_with_mode() for new code, which enforces correct API usage at runtime and optimal performance.
Parameters
[in]keymapThe keymap which the state will use.
Returns
A new keyboard state object, or NULL on failure.

◆ xkb_state_ref()

XKB_EXPORT struct xkb_state * xkb_state_ref ( struct xkb_state state)

Take a new reference on a keyboard state object.

Parameters
[in]stateThe state to reference.
Returns
The passed-in object.

◆ xkb_state_unref()

XKB_EXPORT void xkb_state_unref ( struct xkb_state state)

Release a reference on a keyboard state object, and possibly free it.

Parameters
[in]stateThe state. If it is NULL, this function does nothing.

◆ xkb_state_get_keymap()

XKB_EXPORT struct xkb_keymap * xkb_state_get_keymap ( struct xkb_state state)

Get the keymap which a keyboard state object is using.

Parameters
[in]stateThe keyboard state object.
Returns
The keymap which was passed to xkb_state_new() or xkb_state_new_with_mode() when creating this state object.
Warning
This function does not take a new reference on the keymap; you must explicitly reference it yourself if you plan to use it beyond the lifetime of the state.

◆ xkb_state_update_mask()

XKB_EXPORT enum xkb_state_component xkb_state_update_mask ( struct xkb_state state,
xkb_mod_mask_t  depressed_mods,
xkb_mod_mask_t  latched_mods,
xkb_mod_mask_t  locked_mods,
xkb_layout_index_t  depressed_layout,
xkb_layout_index_t  latched_layout,
xkb_layout_index_t  locked_layout 
)

Update a keyboard state from a set of explicit masks.

This entry point is intended for client applications; see Server State and Client State for details. Server applications should use either the recommended modern xkb_machine API with the corresponding xkb_state_update_event() or the legacy xkb_state_update_synthetic() API instead.

Parameters
[in,out]stateThe keyboard state object.
[in]depressed_modsModifiers to set as depressed.
[in]latched_modsModifiers to set as latched.
[in]locked_modsModifiers to set as locked.
[in]depressed_layoutLayout to set as depressed.
[in]latched_layoutLayout to set as latched.
[in]locked_layoutLayout to set as locked.
Precondition
All parameters must represent a consistent snapshot of the server keyboard state at a single point in time. In case the server provides only a single layout state (e.g. the effective layout in the Wayland protocol), it should be used for locked_layout, while depressed_layout and latched_layout are both set to 0.

@important If state was not created with XKB_STATE_MODE_CLIENT or xkb_state_new(), the call is rejected without updating the state, and the misuse is logged as XKB_ERROR_UNEXPECTED_STATE_MODE. The return value is 0 in this case, which is indistinguishable from a no-op update.

Returns
A mask of state components that have changed as a result of the update. If nothing in the state has changed, returns 0 (XKB_STATE_NO_COMPONENT).
See also
enum xkb_state_component
xkb_state_update_synthetic()
xkb_state_update_event()
Since
1.14.0: Reject call if the state mode is incorrect.

◆ xkb_state_update_event()

XKB_EXPORT enum xkb_error_code xkb_state_update_event ( struct xkb_state state,
const struct xkb_event event,
enum xkb_state_component changed 
)

Update the keyboard state components from an event.

This entry point is intended for server applications and should not be used by client applications; see Server State and Client State for details.

It enables server applications to use xkb_state as the observable state companion to an xkb_machine: feed each event produced by xkb_machine::xkb_machine_process_key() or xkb_machine::xkb_machine_process_synthetic() into this function to keep the observable state in sync.

Parameters
[in,out]stateThe keyboard state object.
[in]eventThe state event to update from.
[out]changedA pointer to the mask of state components that have changed as a result of the update, or NULL to ignore. If nothing in the state has changed, the mask is set to 0 (XKB_STATE_NO_COMPONENT).
Precondition
state must be created with xkb_state_new_from_machine() (i.e. with mode XKB_STATE_MODE_SERVER_QUERY) or xkb_state_new(), otherwise the call is rejected without updating the state and the misuse is logged as XKB_ERROR_UNEXPECTED_STATE_MODE.
Returns
Note
This function returns an error code rather than a state component delta (unlike other xkb_state_update_*() functions), in order to align with xkb_state_update_synthetic() API. The delta is optionally available via the changed parameter.
See also
xkb_state_new_from_machine()
Since
1.14.0

◆ xkb_state_update_key()

XKB_EXPORT enum xkb_state_component xkb_state_update_key ( struct xkb_state state,
xkb_keycode_t  key,
enum xkb_key_direction  direction 
)

Update the keyboard state to reflect a given key being pressed or released.

This entry point is intended for server applications and should not be used by client applications; see Server State and Client State for details.

A series of calls to this function should be consistent; that is, a call with XKB_KEY_DOWN for a key should be matched by an XKB_KEY_UP; if a key is pressed twice, it should be released twice; etc. Otherwise (e.g. due to missed input events), situations like “stuck modifiers” may occur.

This function is often used in conjunction with the function xkb_state_key_get_syms() (or xkb_state_key_get_one_sym()), for example, when handling a key event. In this case, you should prefer to get the keysyms before updating the key, such that the keysyms reported for the key event are not affected by the event itself. This is the conventional behavior.

Note
This is the legacy server entry point and only supports a restricted set of xkbcommon features. Since 1.14.0, prefer xkb_machine for new server applications to enable the full feature set.
Parameters
[in,out]stateThe keyboard state object.
[in]keyThe key being operated.
[in]directionThe direction of the key operation.

@important If state was not created with XKB_STATE_MODE_SERVER or xkb_state_new(), the call is rejected without updating the state, and the misuse is logged as XKB_ERROR_UNEXPECTED_STATE_MODE. The return value is 0 in this case, which is indistinguishable from a no-op update.

Returns
A mask of state components that have changed as a result of the update. If nothing in the state has changed, returns 0 (XKB_STATE_NO_COMPONENT).
See also
xkb_state_update_mask()
Since
1.14.0: Reject call if the state mode is incorrect.

◆ xkb_state_update_synthetic()

XKB_EXPORT enum xkb_error_code xkb_state_update_synthetic ( struct xkb_state state,
const struct xkb_synthetic_update update,
enum xkb_state_component changed 
)

Apply a synthetic (out-of-band) atomic update to the keyboard state.

This entry point is intended for server applications and should not be used by client applications; see Server State and Client State for details.

  • Use this function to update the keyboard state in response to out-of-band (non-device) inputs, such as UI layout switchers or accessibility settings changes.
  • Use xkb_state_update_key() instead for in-band (device) inputs.
  • Use xkb_state_update_event() instead when updating from an event produced by xkb_machine.

Only latched, locked and control components can be updated out-of-band; depressed components can only change through key presses via xkb_state_update_key().

Layout out of range
If the effective layout, after taking into account the depressed, latched and locked layout, is out of range (negative or greater than the maximum layout index), it is brought into range according to the current out-of-range layout policy (see xkb_layout_out_of_range_policy).
Note
This entry point serves the legacy server use case and only supports a restricted set of xkbcommon features. Since 1.14.0, prefer xkb_machine for new server applications to enable the full feature set.
Parameters
[in,out]stateThe keyboard state object.
[in]updateThe update to apply.
[out]changedA pointer to the mask of state components that have changed as a result of the update, or NULL to ignore. If nothing in the state has changed, the mask is set to 0 (XKB_STATE_NO_COMPONENT).

@important If state was not created with XKB_STATE_MODE_SERVER or xkb_state_new(), the call is rejected without updating the state, and the misuse is logged as XKB_ERROR_UNEXPECTED_STATE_MODE. The return value is 0 in this case, which is indistinguishable from a no-op update.

Precondition
update must point to a zero-initialized struct with `update->size` set per Extensible structure ABI contract.
Returns
Note
This function returns an error code rather than a state component delta (unlike other xkb_state_update_*() functions), in order to align with the xkb_machine::xkb_machine_process_synthetic() API. The delta is optionally available via the changed parameter.
See also
struct xkb_synthetic_update
xkb_state_update_key()
xkb_machine::xkb_machine_process_synthetic()
Since
1.14.0

◆ xkb_state_update_latched_locked()

XKB_EXPORT enum xkb_state_component xkb_state_update_latched_locked ( struct xkb_state state,
xkb_mod_mask_t  affect_latched_mods,
xkb_mod_mask_t  latched_mods,
bool  affect_latched_layout,
int32_t  latched_layout,
xkb_mod_mask_t  affect_locked_mods,
xkb_mod_mask_t  locked_mods,
bool  affect_locked_layout,
int32_t  locked_layout 
)

Update the keyboard state to change the latched and locked state of the modifiers and layout.

Deprecated:
Use xkb_state_update_synthetic() instead.

This entry point is intended for server applications and should not be used by client applications; see Server State and Client State for details.

Use this function to update the latched and locked state according to out-of-band (non-device) inputs, such as UI layout switchers.

Layout out of range
If the effective layout, after taking into account the depressed, latched and locked layout, is out of range (negative or greater than the maximum layout), it is brought into range. Currently, the layout is wrapped using integer modulus (with negative values wrapping from the end). The wrapping behavior can be configured using xkb_state_update_synthetic().
Parameters
[in,out]stateThe keyboard state object.
[in]affect_latched_modsSee latched_mods.
[in]latched_modsModifiers to set as latched or unlatched. Only modifiers in affect_latched_mods are considered.
[in]affect_latched_layoutSee latched_layout.
[in]latched_layoutLayout to latch. Only considered if affect_latched_layout is true. May be out of range (including negative) – see note above.
[in]affect_locked_modsSee locked_mods.
[in]locked_modsModifiers to set as locked or unlocked. Only modifiers in affect_locked_mods are considered.
[in]affect_locked_layoutSee locked_layout.
[in]locked_layoutLayout to lock. Only considered if affect_locked_layout is true. May be out of range (including negative) – see note above.

@important If state was not created with XKB_STATE_MODE_SERVER or xkb_state_new(), the call is rejected without updating the state, and the misuse is logged as XKB_ERROR_UNEXPECTED_STATE_MODE. The return value is 0 in this case, which is indistinguishable from a no-op update.

Returns
A mask of state components that have changed as a result of the update. If nothing in the state has changed, returns 0 (XKB_STATE_NO_COMPONENT).
See also
xkb_state_update_synthetic()
Since
1.14.0: Reject call if the state mode is incorrect.

◆ xkb_state_key_get_syms()

XKB_EXPORT int xkb_state_key_get_syms ( struct xkb_state state,
xkb_keycode_t  key,
const xkb_keysym_t **  syms_out 
)

Get the keysyms obtained from pressing a particular key in a given keyboard state.

Get the keysyms for a key according to the current active layout, modifiers and shift level for the key, as determined by a keyboard state.

Parameters
[in]stateThe keyboard state object.
[in]keyThe keycode of the key.
[out]syms_outAn immutable array of keysyms corresponding the key in the given keyboard state.

As an extension to XKB, this function can return more than one keysym. If you do not want to handle this case, you can use xkb_state_key_get_one_sym() for a simpler interface.

Returns
The number of keysyms in the syms_out array. If no keysyms are produced by the key in the given keyboard state, returns 0 and sets syms_out to NULL.

This function performs Capitalization Keysym Transformations.

Since
1.9.0: This function now performs Keysym Transformations.

◆ xkb_state_key_get_utf8()

XKB_EXPORT int xkb_state_key_get_utf8 ( struct xkb_state state,
xkb_keycode_t  key,
char *  buffer,
size_t  size 
)

Get the Unicode/UTF-8 string obtained from pressing a particular key in a given keyboard state.

Parameters
[in]stateThe keyboard state object.
[in]keyThe keycode of the key.
[out]bufferA buffer to write the string into.
[in]sizeCapacity of the buffer.
Warning
If the buffer passed is too small, the string is truncated (though still NULL-terminated).
Returns
The number of bytes required for the string, excluding the NULL byte. If there is nothing to write, returns 0.

You may check if truncation has occurred by comparing the return value with the size of buffer, similarly to the snprintf(3) function. You may safely pass NULL and 0 to buffer and size to find the required size (without the NULL-byte).

This function performs Capitalization and Control Keysym Transformations.

Since
0.4.1

◆ xkb_state_key_get_utf32()

XKB_EXPORT uint32_t xkb_state_key_get_utf32 ( struct xkb_state state,
xkb_keycode_t  key 
)

Get the Unicode/UTF-32 codepoint obtained from pressing a particular key in a given keyboard state.

Parameters
[in]stateThe keyboard state object.
[in]keyThe keycode of the key.
Returns
The UTF-32 representation for the key, if it consists of only a single codepoint. Otherwise, returns 0.

This function performs Capitalization and Control Keysym Transformations.

Since
0.4.1

◆ xkb_state_key_get_one_sym()

XKB_EXPORT xkb_keysym_t xkb_state_key_get_one_sym ( struct xkb_state state,
xkb_keycode_t  key 
)

Get the single keysym obtained from pressing a particular key in a given keyboard state.

This function is similar to xkb_state_key_get_syms(), but intended for users which cannot or do not want to handle the case where multiple keysyms are returned (in which case this function is preferred).

Parameters
[in]stateThe keyboard state object.
[in]keyThe keycode of the key.
Returns
The keysym. If the key does not have exactly one keysym, returns XKB_KEY_NoSymbol.

This function performs Capitalization Keysym Transformations.

See also
xkb_state_key_get_syms()

◆ xkb_state_key_get_layout()

XKB_EXPORT xkb_layout_index_t xkb_state_key_get_layout ( struct xkb_state state,
xkb_keycode_t  key 
)

Get the effective layout index for a key in a given keyboard state.

Parameters
[in]stateThe keyboard state object.
[in]keyThe keycode of the key.
Returns
The layout index for the key in the given keyboard state. If the given keycode is invalid, or if the key is not included in any layout at all, returns XKB_LAYOUT_INVALID.
Invariant
If the returned layout is valid, the following always holds:
xkb_state_key_get_layout(state, key) < xkb_keymap_num_layouts_for_key(keymap, key)
XKB_EXPORT xkb_layout_index_t xkb_state_key_get_layout(struct xkb_state *state, xkb_keycode_t key)
Get the effective layout index for a key in a given keyboard state.

◆ xkb_state_key_get_level()

XKB_EXPORT xkb_level_index_t xkb_state_key_get_level ( struct xkb_state state,
xkb_keycode_t  key,
xkb_layout_index_t  layout 
)

Get the effective shift level for a key in a given keyboard state and layout.

Parameters
[in]stateThe keyboard state.
[in]keyThe keycode of the key.
[in]layoutThe layout for which to get the shift level. This must be smaller than: xkb_keymap_num_layouts_for_key(keymap, key). Usually it would be: xkb_state_key_get_layout(state, key)
Returns
The shift level index. If the key or layout are invalid, returns XKB_LEVEL_INVALID.
Invariant
If the returned level is valid, the following always holds:
xkb_state_key_get_level(state, key, layout) < xkb_keymap_num_levels_for_key(keymap, key, layout)
XKB_EXPORT xkb_level_index_t xkb_state_key_get_level(struct xkb_state *state, xkb_keycode_t key, xkb_layout_index_t layout)
Get the effective shift level for a key in a given keyboard state and layout.

◆ xkb_state_serialize_controls()

XKB_EXPORT enum xkb_keyboard_control_flags xkb_state_serialize_controls ( const struct xkb_state state,
enum xkb_state_component  components 
)

Serialization of the boolean global keyboard controls, to be used on the server side of serialization.

This entry point is intended for server applications; see Server State and Client State for details.

Parameters
[in]stateThe keyboard state.
[in]componentsA mask of the keyboard control state components to serialize. State components other than XKB_STATE_CONTROLS_EFFECTIVE are ignored.
Returns
A xkb_keyboard_control_flags mask representing the enabled keyboard controls for the given components.
Since
1.14.0

◆ xkb_state_serialize_mods()

XKB_EXPORT xkb_mod_mask_t xkb_state_serialize_mods ( struct xkb_state state,
enum xkb_state_component  components 
)

The counterpart to xkb_state::xkb_state_update_mask() for modifiers, to be used on the server side of serialization.

This entry point is intended for server applications; see Server State and Client State for details. Client applications should use the xkb_state_mod_*_is_active API.

Warning
The serialization is lossy and will not survive round trips. It must only be used to feed client state objects created with either XKB_STATE_MODE_CLIENT or xkb_state_new(), and must not be used to update the server state.
Parameters
[in]stateThe keyboard state.
[in]componentsA mask of the modifier state components to serialize. State components other than XKB_STATE_MODS_* are ignored. If XKB_STATE_MODS_EFFECTIVE is included, all other state components are ignored.
Returns
A xkb_mod_mask_t representing the given components of the modifier state.

◆ xkb_state_serialize_layout()

XKB_EXPORT xkb_layout_index_t xkb_state_serialize_layout ( struct xkb_state state,
enum xkb_state_component  components 
)

The counterpart to xkb_state::xkb_state_update_mask() for layouts, to be used on the server side of serialization.

This entry point is intended for server applications; see Server State and Client State for details. Client applications should use the xkb_state_layout_*_is_active API.

Warning
The serialization is lossy and will not survive round trips. It must only be used to feed client state objects created with either XKB_STATE_MODE_CLIENT or xkb_state_new(), and must not be used to update the server state.
Parameters
[in]stateThe keyboard state.
[in]componentsA mask of the layout state components to serialize. State components other than XKB_STATE_LAYOUT_* are ignored. If XKB_STATE_LAYOUT_EFFECTIVE is included, all other state components are ignored.
Returns
A layout index representing the given components of the layout state.

◆ xkb_state_mod_name_is_active()

XKB_EXPORT int xkb_state_mod_name_is_active ( struct xkb_state state,
const char *  name,
enum xkb_state_component  type 
)

Test whether a modifier is active in a given keyboard state by name.

Warning
For virtual modifiers, this function may overmatch in case there are virtual modifiers with overlapping mappings to real modifiers.
Parameters
[in]stateThe keyboard state object.
[in]nameThe modifier name, as a NULL-terminated string.
[in]typeThe component of the state against which to match the given modifiers.
Returns
1 if the modifier is active, 0 if it is not. If the modifier name does not exist in the keymap, returns -1.
Since
0.1.0: Works only with real modifiers
1.8.0: Works also with virtual modifiers

◆ xkb_state_mod_names_are_active()

XKB_EXPORT int xkb_state_mod_names_are_active ( struct xkb_state state,
enum xkb_state_component  type,
enum xkb_state_match  match,
  ... 
)

Test whether a set of modifiers are active in a given keyboard state by name.

Warning
For virtual modifiers, this function may overmatch in case there are virtual modifiers with overlapping mappings to real modifiers.
Parameters
[in]stateThe keyboard state.
[in]typeThe component of the state against which to match the given modifiers.
[in]matchThe manner by which to match the state against the given modifiers.
[in]...The set of modifier names to test, terminated by a NULL argument (sentinel).
Returns
1 if the modifiers are active, 0 if they are not. If any of the modifier names do not exist in the keymap, returns -1. If match contains invalid flags, returns -2.
Since
0.1.0: Works only with real modifiers
1.8.0: Works also with virtual modifiers
1.14.0: Reject invalid match flags

◆ xkb_state_mod_index_is_active()

XKB_EXPORT int xkb_state_mod_index_is_active ( struct xkb_state state,
xkb_mod_index_t  idx,
enum xkb_state_component  type 
)

Test whether a modifier is active in a given keyboard state by index.

Warning
For virtual modifiers, this function may overmatch in case there are virtual modifiers with overlapping mappings to real modifiers.
Parameters
[in]stateThe keyboard state.
[in]idxThe index of the modifier to test.
[in]typeThe component of the state against which to match the given modifiers.
Returns
1 if the modifier is active, 0 if it is not. If the modifier index is invalid in the keymap, returns -1.
Since
0.1.0: Works only with real modifiers
1.8.0: Works also with virtual modifiers

◆ xkb_state_mod_indices_are_active()

XKB_EXPORT int xkb_state_mod_indices_are_active ( struct xkb_state state,
enum xkb_state_component  type,
enum xkb_state_match  match,
  ... 
)

Test whether a set of modifiers are active in a given keyboard state by index.

Warning
For virtual modifiers, this function may overmatch in case there are virtual modifiers with overlapping mappings to real modifiers.
Parameters
[in]stateThe keyboard state.
[in]typeThe component of the state against which to match the given modifiers.
[in]matchThe manner by which to match the state against the given modifiers.
[in]...The set of modifier indices to test, terminated by a XKB_MOD_INVALID argument (sentinel).
Returns
1 if the modifiers are active, 0 if they are not. If any of the modifier indices are invalid in the keymap, returns -1. If match contains invalid flags, returns -2.
Since
0.1.0: Works only with real modifiers
1.8.0: Works also with virtual modifiers
1.14.0: Reject invalid match flags

◆ xkb_state_key_get_consumed_mods2()

XKB_EXPORT xkb_mod_mask_t xkb_state_key_get_consumed_mods2 ( struct xkb_state state,
xkb_keycode_t  key,
enum xkb_consumed_mode  mode 
)

Get the mask of modifiers consumed by translating a given key.

Parameters
[in]stateThe keyboard state.
[in]keyThe keycode of the key.
[in]modeThe consumed modifiers mode to use; see enum description.
Returns
a mask of the consumed real modifiers modifiers.
Since
0.7.0

◆ xkb_state_key_get_consumed_mods()

XKB_EXPORT xkb_mod_mask_t xkb_state_key_get_consumed_mods ( struct xkb_state state,
xkb_keycode_t  key 
)

◆ xkb_state_mod_index_is_consumed2()

XKB_EXPORT int xkb_state_mod_index_is_consumed2 ( struct xkb_state state,
xkb_keycode_t  key,
xkb_mod_index_t  idx,
enum xkb_consumed_mode  mode 
)

Test whether a modifier is consumed by keyboard state translation for a key.

Warning
For virtual modifiers, this function may overmatch in case there are virtual modifiers with overlapping mappings to real modifiers.
Parameters
[in]stateThe keyboard state.
[in]keyThe keycode of the key.
[in]idxThe index of the modifier to check.
[in]modeThe consumed modifiers mode to use; see enum description.
Returns
1 if the modifier is consumed, 0 if it is not. If the modifier index is not valid in the keymap, returns -1.
See also
xkb_state_mod_mask_remove_consumed()
xkb_state_key_get_consumed_mods()
Since
0.7.0: Works only with real modifiers
1.8.0: Works also with virtual modifiers

◆ xkb_state_mod_index_is_consumed()

XKB_EXPORT int xkb_state_mod_index_is_consumed ( struct xkb_state state,
xkb_keycode_t  key,
xkb_mod_index_t  idx 
)

Same as xkb_state_mod_index_is_consumed2() with mode XKB_CONSUMED_MODE_XKB.

Warning
For virtual modifiers, this function may overmatch in case there are virtual modifiers with overlapping mappings to real modifiers.
Since
0.4.1: Works only with real modifiers
1.8.0: Works also with virtual modifiers

◆ xkb_state_mod_mask_remove_consumed()

XKB_EXPORT xkb_mod_mask_t xkb_state_mod_mask_remove_consumed ( struct xkb_state state,
xkb_keycode_t  key,
xkb_mod_mask_t  mask 
)

Remove consumed modifiers from a modifier mask for a key.

Deprecated:
Use xkb_state_key_get_consumed_mods2() instead.

Takes the given modifier mask, and removes all modifiers which are consumed for that particular key (as in xkb_state_mod_index_is_consumed()).

Returns
a mask of real modifiers modifiers.
See also
xkb_state_mod_index_is_consumed()
Since
0.5.0: Works only with real modifiers
1.8.0: Works also with virtual modifiers

◆ xkb_state_layout_name_is_active()

XKB_EXPORT int xkb_state_layout_name_is_active ( struct xkb_state state,
const char *  name,
enum xkb_state_component  type 
)

Test whether a layout is active in a given keyboard state by name.

Parameters
[in]stateThe keyboard state.
[in]nameThe layout name to test (NULL-terminated string).
[in]typeThe component of the state against which to match the given layout.
Returns
1 if the layout is active, 0 if it is not. If no layout with this name exists in the keymap, return -1.

If multiple layouts in the keymap have this name, the one with the lowest index is tested.

See also
xkb_layout_index_t

◆ xkb_state_layout_index_is_active()

XKB_EXPORT int xkb_state_layout_index_is_active ( struct xkb_state state,
xkb_layout_index_t  idx,
enum xkb_state_component  type 
)

Test whether a layout is active in a given keyboard state by index.

Parameters
[in]stateThe keyboard state.
[in]idxThe layout index to test.
[in]typeThe component of the state against which to match the given layout.
Returns
1 if the layout is active, 0 if it is not. If the layout index is not valid in the keymap, returns -1.
See also
xkb_layout_index_t

◆ xkb_state_led_name_is_active()

XKB_EXPORT int xkb_state_led_name_is_active ( struct xkb_state state,
const char *  name 
)

Test whether a LED is active in a given keyboard state by name.

Parameters
[in]stateThe keyboard state.
[in]nameThe LED name to test (NULL-terminated string).
Returns
1 if the LED is active, 0 if it not. If no LED with this name exists in the keymap, returns -1.
See also
xkb_led_index_t

◆ xkb_state_led_index_is_active()

XKB_EXPORT int xkb_state_led_index_is_active ( struct xkb_state state,
xkb_led_index_t  idx 
)

Test whether a LED is active in a given keyboard state by index.

Parameters
[in]stateThe keyboard state.
[in]idxThe LED index to test.
Returns
1 if the LED is active, 0 if it not. If the LED index is not valid in the keymap, returns -1.
See also
xkb_led_index_t