mirror of
https://github.com/jjsullivan5196/wvkbd.git
synced 2025-03-14 03:12:47 +01:00
keyboard.c: fix update/draw logic in kbd_unpress_key
thanks @0x4261756D @earboxer for pointing out this issue
This commit is contained in:
parent
bddf05e0fc
commit
aa65896fbf
20
keyboard.c
20
keyboard.c
@ -166,8 +166,16 @@ kbd_get_key(struct kbd *kb, uint32_t x, uint32_t y) {
|
|||||||
|
|
||||||
void
|
void
|
||||||
kbd_unpress_key(struct kbd *kb, uint32_t time) {
|
kbd_unpress_key(struct kbd *kb, uint32_t time) {
|
||||||
|
bool unlatch_shift = false;
|
||||||
|
|
||||||
if (kb->last_press) {
|
if (kb->last_press) {
|
||||||
kbd_draw_key(kb, kb->last_press, Unpress);
|
unlatch_shift = (kb->mods & Shift) == Shift;
|
||||||
|
|
||||||
|
if (unlatch_shift) {
|
||||||
|
kb->mods ^= Shift;
|
||||||
|
zwp_virtual_keyboard_v1_modifiers(kb->vkbd, kb->mods, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
if (kb->last_press->type == Copy) {
|
if (kb->last_press->type == Copy) {
|
||||||
zwp_virtual_keyboard_v1_key(kb->vkbd, time, 127, // COMP key
|
zwp_virtual_keyboard_v1_key(kb->vkbd, time, 127, // COMP key
|
||||||
WL_KEYBOARD_KEY_STATE_RELEASED);
|
WL_KEYBOARD_KEY_STATE_RELEASED);
|
||||||
@ -175,17 +183,17 @@ kbd_unpress_key(struct kbd *kb, uint32_t time) {
|
|||||||
zwp_virtual_keyboard_v1_key(kb->vkbd, time, kb->last_press->code,
|
zwp_virtual_keyboard_v1_key(kb->vkbd, time, kb->last_press->code,
|
||||||
WL_KEYBOARD_KEY_STATE_RELEASED);
|
WL_KEYBOARD_KEY_STATE_RELEASED);
|
||||||
}
|
}
|
||||||
kb->last_press = NULL;
|
|
||||||
|
|
||||||
if (kb->compose >= 2) {
|
if (kb->compose >= 2) {
|
||||||
kb->compose = 0;
|
kb->compose = 0;
|
||||||
kbd_switch_layout(kb, kb->prevlayout);
|
kbd_switch_layout(kb, kb->prevlayout);
|
||||||
if ((kb->mods & Shift) == Shift)
|
} else if (unlatch_shift) {
|
||||||
kb->mods ^= Shift;
|
|
||||||
} else if ((kb->mods & Shift) == Shift) {
|
|
||||||
kb->mods ^= Shift;
|
|
||||||
kbd_draw_layout(kb);
|
kbd_draw_layout(kb);
|
||||||
|
} else {
|
||||||
|
kbd_draw_key(kb, kb->last_press, Unpress);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kb->last_press = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user