2017-09-23 10:26:01 +02:00
|
|
|
#ifndef WLR_TYPES_WLR_KEYBOARD_H
|
|
|
|
#define WLR_TYPES_WLR_KEYBOARD_H
|
|
|
|
|
2017-10-09 03:55:59 +02:00
|
|
|
#include <stdbool.h>
|
2018-02-12 21:29:23 +01:00
|
|
|
#include <stdint.h>
|
|
|
|
#include <wayland-server.h>
|
2017-09-24 20:12:56 +02:00
|
|
|
#include <wayland-server.h>
|
|
|
|
#include <xkbcommon/xkbcommon.h>
|
2017-06-20 00:41:02 +02:00
|
|
|
|
2017-10-02 20:21:47 +02:00
|
|
|
#define WLR_LED_COUNT 3
|
|
|
|
|
2017-10-02 19:23:30 +02:00
|
|
|
enum wlr_keyboard_led {
|
2017-06-20 00:41:02 +02:00
|
|
|
WLR_LED_NUM_LOCK = 1,
|
|
|
|
WLR_LED_CAPS_LOCK = 2,
|
|
|
|
WLR_LED_SCROLL_LOCK = 4,
|
|
|
|
};
|
|
|
|
|
2017-10-02 20:21:47 +02:00
|
|
|
#define WLR_MODIFIER_COUNT 8
|
|
|
|
|
2017-10-02 19:23:30 +02:00
|
|
|
enum wlr_keyboard_modifier {
|
|
|
|
WLR_MODIFIER_SHIFT = 1,
|
|
|
|
WLR_MODIFIER_CAPS = 2,
|
|
|
|
WLR_MODIFIER_CTRL = 4,
|
|
|
|
WLR_MODIFIER_ALT = 8,
|
|
|
|
WLR_MODIFIER_MOD2 = 16,
|
|
|
|
WLR_MODIFIER_MOD3 = 32,
|
|
|
|
WLR_MODIFIER_LOGO = 64,
|
|
|
|
WLR_MODIFIER_MOD5 = 128,
|
|
|
|
};
|
|
|
|
|
2017-11-05 17:09:00 +01:00
|
|
|
#define WLR_KEYBOARD_KEYS_CAP 32
|
|
|
|
|
2017-06-20 00:41:02 +02:00
|
|
|
struct wlr_keyboard_impl;
|
|
|
|
|
2018-01-05 13:00:50 +01:00
|
|
|
struct wlr_keyboard_modifiers {
|
|
|
|
xkb_mod_mask_t depressed;
|
|
|
|
xkb_mod_mask_t latched;
|
|
|
|
xkb_mod_mask_t locked;
|
|
|
|
xkb_mod_mask_t group;
|
|
|
|
};
|
|
|
|
|
2017-06-20 00:41:02 +02:00
|
|
|
struct wlr_keyboard {
|
|
|
|
struct wlr_keyboard_impl *impl;
|
2017-09-24 20:12:56 +02:00
|
|
|
// TODO: Should this store key repeat info too?
|
|
|
|
|
|
|
|
int keymap_fd;
|
|
|
|
size_t keymap_size;
|
|
|
|
struct xkb_keymap *keymap;
|
|
|
|
struct xkb_state *xkb_state;
|
2017-10-02 20:21:47 +02:00
|
|
|
xkb_led_index_t led_indexes[WLR_LED_COUNT];
|
|
|
|
xkb_mod_index_t mod_indexes[WLR_MODIFIER_COUNT];
|
2017-10-02 19:23:30 +02:00
|
|
|
|
2017-11-05 17:09:00 +01:00
|
|
|
uint32_t keycodes[WLR_KEYBOARD_KEYS_CAP];
|
2017-12-28 00:58:43 +01:00
|
|
|
size_t num_keycodes;
|
2018-01-17 14:31:15 +01:00
|
|
|
struct wlr_keyboard_modifiers modifiers;
|
2017-06-20 00:41:02 +02:00
|
|
|
|
2017-12-08 17:03:05 +01:00
|
|
|
struct {
|
|
|
|
int32_t rate;
|
|
|
|
int32_t delay;
|
|
|
|
} repeat_info;
|
|
|
|
|
2017-06-20 00:41:02 +02:00
|
|
|
struct {
|
|
|
|
struct wl_signal key;
|
2017-10-03 14:03:26 +02:00
|
|
|
struct wl_signal modifiers;
|
2017-09-24 20:12:56 +02:00
|
|
|
struct wl_signal keymap;
|
2017-12-08 17:03:05 +01:00
|
|
|
struct wl_signal repeat_info;
|
2017-06-20 00:41:02 +02:00
|
|
|
} events;
|
2017-08-11 20:23:53 +02:00
|
|
|
|
|
|
|
void *data;
|
2017-06-20 00:41:02 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
enum wlr_key_state {
|
|
|
|
WLR_KEY_RELEASED,
|
|
|
|
WLR_KEY_PRESSED,
|
|
|
|
};
|
|
|
|
|
2017-06-21 20:07:09 +02:00
|
|
|
struct wlr_event_keyboard_key {
|
2017-10-30 11:40:06 +01:00
|
|
|
uint32_t time_msec;
|
2017-06-20 00:41:02 +02:00
|
|
|
uint32_t keycode;
|
2017-10-06 11:03:34 +02:00
|
|
|
bool update_state;
|
2017-06-20 00:41:02 +02:00
|
|
|
enum wlr_key_state state;
|
|
|
|
};
|
|
|
|
|
2017-09-24 20:12:56 +02:00
|
|
|
void wlr_keyboard_set_keymap(struct wlr_keyboard *kb,
|
2017-10-02 19:23:30 +02:00
|
|
|
struct xkb_keymap *keymap);
|
2017-12-08 17:06:31 +01:00
|
|
|
/**
|
|
|
|
* Sets the keyboard repeat info. `rate` is in key repeats/second and delay is
|
|
|
|
* in milliseconds.
|
|
|
|
*/
|
2017-12-08 17:03:05 +01:00
|
|
|
void wlr_keyboard_set_repeat_info(struct wlr_keyboard *kb, int32_t rate,
|
|
|
|
int32_t delay);
|
2017-10-02 20:21:47 +02:00
|
|
|
void wlr_keyboard_led_update(struct wlr_keyboard *keyboard, uint32_t leds);
|
|
|
|
uint32_t wlr_keyboard_get_modifiers(struct wlr_keyboard *keyboard);
|
2017-09-24 20:12:56 +02:00
|
|
|
|
2017-06-20 00:41:02 +02:00
|
|
|
#endif
|