keyboard: Extract function 'keyboard_feed_code()'

qemu-kb-ext
Andri Yngvason 2020-11-29 18:58:21 +00:00
parent 22562183db
commit d978d94041
2 changed files with 19 additions and 11 deletions

View File

@ -42,3 +42,5 @@ struct keyboard {
int keyboard_init(struct keyboard* self, const char* layout, const char* variant); int keyboard_init(struct keyboard* self, const char* layout, const char* variant);
void keyboard_destroy(struct keyboard* self); void keyboard_destroy(struct keyboard* self);
void keyboard_feed(struct keyboard* self, xkb_keysym_t symbol, bool is_pressed); void keyboard_feed(struct keyboard* self, xkb_keysym_t symbol, bool is_pressed);
void keyboard_feed_code(struct keyboard* self, xkb_keycode_t code,
bool is_pressed);

View File

@ -346,25 +346,31 @@ void keyboard_feed(struct keyboard* self, xkb_keysym_t symbol, bool is_pressed)
entry = level_entry; entry = level_entry;
} }
bool was_pressed = intset_is_set(&self->key_state, entry->code);
if (was_pressed == is_pressed)
return;
if (is_pressed)
intset_set(&self->key_state, entry->code);
else
intset_clear(&self->key_state, entry->code);
#ifndef NDEBUG #ifndef NDEBUG
keyboard__dump_entry(self, entry); keyboard__dump_entry(self, entry);
#endif #endif
keyboard_feed_code(self, entry->code, is_pressed);
}
void keyboard_feed_code(struct keyboard* self, xkb_keycode_t code,
bool is_pressed)
{
bool was_pressed = intset_is_set(&self->key_state, code);
if (was_pressed == is_pressed)
return;
if (is_pressed)
intset_set(&self->key_state, code);
else
intset_clear(&self->key_state, code);
// TODO: This could cause some synchronisation problems with other // TODO: This could cause some synchronisation problems with other
// keyboards in the seat. // keyboards in the seat.
keyboard_apply_mods(self, entry->code, is_pressed); keyboard_apply_mods(self, code, is_pressed);
// TODO: Handle errors // TODO: Handle errors
zwp_virtual_keyboard_v1_key(self->virtual_keyboard, 0, entry->code - 8, zwp_virtual_keyboard_v1_key(self->virtual_keyboard, 0, code - 8,
is_pressed ? WL_KEYBOARD_KEY_STATE_PRESSED is_pressed ? WL_KEYBOARD_KEY_STATE_PRESSED
: WL_KEYBOARD_KEY_STATE_RELEASED); : WL_KEYBOARD_KEY_STATE_RELEASED);
} }