diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2019-01-22 10:28:14 +0100 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2019-02-05 10:45:44 +0100 |
commit | 19c1b9fd3dd5955893c0d3c187a4180313e9a0f1 (patch) | |
tree | 39b304518869487cd9ca826b5c38c9b5fbdb6cff /ui/vnc.c | |
parent | 4ed26e19d90bf5a4ea5662118ae5a2af46e61d36 (diff) | |
download | qemu-19c1b9fd3dd5955893c0d3c187a4180313e9a0f1.zip qemu-19c1b9fd3dd5955893c0d3c187a4180313e9a0f1.tar.gz qemu-19c1b9fd3dd5955893c0d3c187a4180313e9a0f1.tar.bz2 |
keymap: fix keyup mappings
It is possible that the modifier state on keyup is different from the
modifier state on keydown. In that case the keycode lookup can end up
with different keys in case multiple keysym -> keycode mappings exist,
because it picks the mapping depending on modifier state.
To fix that change the lookup logic for keyup events. Instead of
looking at the modifier state check the key state and prefer a keycodes
where the key is in "down" state right now.
Fixes: abb4f2c965 keymap: consider modifier state when picking a mapping
Buglink: https://bugs.launchpad.net/bugs/1738283
Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1658676
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Message-id: 20190122092814.14919-9-kraxel@redhat.com
Diffstat (limited to 'ui/vnc.c')
-rw-r--r-- | ui/vnc.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -1981,7 +1981,7 @@ static void key_event(VncState *vs, int down, uint32_t sym) } keycode = keysym2scancode(vs->vd->kbd_layout, lsym & 0xFFFF, - vs->vd->kbd) & SCANCODE_KEYMASK; + vs->vd->kbd, down) & SCANCODE_KEYMASK; trace_vnc_key_event_map(down, sym, keycode, code2name(keycode)); do_key_event(vs, down, keycode, sym); } |