|
|
|
@ -27,12 +27,14 @@ static void keyboard_handle_enter(void *data, struct wl_keyboard *wl_keyboard,
|
|
|
|
|
uint32_t serial, struct wl_surface *surface, struct wl_array *keys) {
|
|
|
|
|
struct wlr_keyboard *keyboard = data;
|
|
|
|
|
|
|
|
|
|
int64_t time_msec = get_current_time_msec();
|
|
|
|
|
|
|
|
|
|
uint32_t *keycode_ptr;
|
|
|
|
|
wl_array_for_each(keycode_ptr, keys) {
|
|
|
|
|
struct wlr_keyboard_key_event event = {
|
|
|
|
|
.keycode = *keycode_ptr,
|
|
|
|
|
.state = WL_KEYBOARD_KEY_STATE_PRESSED,
|
|
|
|
|
.time_msec = get_current_time_msec(),
|
|
|
|
|
.time_msec = time_msec,
|
|
|
|
|
.update_state = false,
|
|
|
|
|
};
|
|
|
|
|
wlr_keyboard_notify_key(keyboard, &event);
|
|
|
|
@ -43,18 +45,12 @@ static void keyboard_handle_leave(void *data, struct wl_keyboard *wl_keyboard,
|
|
|
|
|
uint32_t serial, struct wl_surface *surface) {
|
|
|
|
|
struct wlr_keyboard *keyboard = data;
|
|
|
|
|
|
|
|
|
|
size_t num_keycodes = keyboard->num_keycodes;
|
|
|
|
|
uint32_t pressed[num_keycodes + 1];
|
|
|
|
|
memcpy(pressed, keyboard->keycodes,
|
|
|
|
|
num_keycodes * sizeof(uint32_t));
|
|
|
|
|
|
|
|
|
|
for (size_t i = 0; i < num_keycodes; ++i) {
|
|
|
|
|
uint32_t keycode = pressed[i];
|
|
|
|
|
|
|
|
|
|
int64_t time_msec = get_current_time_msec();
|
|
|
|
|
while (keyboard->num_keycodes > 0) {
|
|
|
|
|
struct wlr_keyboard_key_event event = {
|
|
|
|
|
.keycode = keycode,
|
|
|
|
|
.keycode = keyboard->keycodes[keyboard->num_keycodes - 1],
|
|
|
|
|
.state = WL_KEYBOARD_KEY_STATE_RELEASED,
|
|
|
|
|
.time_msec = get_current_time_msec(),
|
|
|
|
|
.time_msec = time_msec,
|
|
|
|
|
.update_state = false,
|
|
|
|
|
};
|
|
|
|
|
wlr_keyboard_notify_key(keyboard, &event);
|
|
|
|
|