hikari/include/hikari/keyboard.h

68 lines
1.6 KiB
C

#if !defined(HIKARI_KEYBOARD_H)
#define HIKARI_KEYBOARD_H
#include <wayland-server-core.h>
#include <wayland-util.h>
#include <xkbcommon/xkbcommon.h>
#include <wlr/types/wlr_input_device.h>
#include <wlr/types/wlr_keyboard.h>
#include <hikari/binding_group.h>
#include <hikari/keyboard_config.h>
struct hikari_keyboard {
struct wl_list server_keyboards;
struct wlr_input_device *device;
struct wl_listener modifiers;
struct wl_listener key;
struct wl_listener destroy;
struct xkb_keymap *keymap;
struct hikari_binding_group bindings[HIKARI_BINDING_GROUP_MASK];
};
void
hikari_keyboard_init(
struct hikari_keyboard *keyboard, struct wlr_input_device *device);
void
hikari_keyboard_fini(struct hikari_keyboard *keyboard);
void
hikari_keyboard_configure(struct hikari_keyboard *keyboard,
struct hikari_keyboard_config *keyboard_config);
void
hikari_keyboard_configure_bindings(
struct hikari_keyboard *keyboard, struct wl_list *bindings);
typedef void (*hikari_keysym_iterator)(
struct hikari_keyboard *keyboard, uint32_t keycode, xkb_keysym_t sym);
void
hikari_keyboard_for_keysym(struct hikari_keyboard *keyboard,
uint32_t keycode,
hikari_keysym_iterator iter);
static inline uint32_t
hikari_keyboard_get_codepoint(
struct hikari_keyboard *keyboard, uint32_t keycode)
{
return xkb_state_key_get_utf32(
keyboard->device->keyboard->xkb_state, keycode);
}
static inline bool
hikari_keyboard_check_modifier(
struct hikari_keyboard *keyboard, uint32_t modifier)
{
uint32_t modifiers = wlr_keyboard_get_modifiers(keyboard->device->keyboard);
return modifiers == modifier;
}
#endif