diff options
| author | John Sullivan <jsullivan@csumb.edu> | 2022-01-09 21:02:46 -0800 |
|---|---|---|
| committer | John Sullivan <jsullivan@csumb.edu> | 2022-01-09 21:02:46 -0800 |
| commit | 6958fd6ae1b1e29274907093d7fcfa54e7d4db14 (patch) | |
| tree | 0405a2657dc5210643cdfdaccd2bca2d3bb5d86c /keyboard.c | |
| parent | e5c78bb9ab1b78c09edd7b1f0c1cfb1ff585c3a5 (diff) | |
| download | suggpicker-6958fd6ae1b1e29274907093d7fcfa54e7d4db14.tar.gz | |
keyboard.c: fix update/draw logic in kbd_unpress_key
thanks @0x4261756D @earboxer for pointing out this issue
Diffstat (limited to 'keyboard.c')
| -rw-r--r-- | keyboard.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/keyboard.c b/keyboard.c index 3bcdaaa..36cff78 100644 --- a/keyboard.c +++ b/keyboard.c @@ -166,26 +166,34 @@ kbd_get_key(struct kbd *kb, uint32_t x, uint32_t y) { void kbd_unpress_key(struct kbd *kb, uint32_t time) { + bool unlatch_shift = false; + if (kb->last_press) { - kbd_draw_key(kb, kb->last_press, Unpress); - if (kb->last_press->type == Copy) { + 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) { zwp_virtual_keyboard_v1_key(kb->vkbd, time, 127, // COMP key WL_KEYBOARD_KEY_STATE_RELEASED); } else { zwp_virtual_keyboard_v1_key(kb->vkbd, time, kb->last_press->code, WL_KEYBOARD_KEY_STATE_RELEASED); } - kb->last_press = NULL; if (kb->compose >= 2) { kb->compose = 0; kbd_switch_layout(kb, kb->prevlayout); - if ((kb->mods & Shift) == Shift) - kb->mods ^= Shift; - } else if ((kb->mods & Shift) == Shift) { - kb->mods ^= Shift; + } else if (unlatch_shift) { kbd_draw_layout(kb); - } + } else { + kbd_draw_key(kb, kb->last_press, Unpress); + } + + kb->last_press = NULL; } } |
