From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Gerd Hoffmann <kraxel@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [RFC PATCH v2 5/7] kbd-state: use state tracker for vnc
Date: Fri, 21 Dec 2018 11:18:01 +0000 [thread overview]
Message-ID: <20181221111801.GI7439@redhat.com> (raw)
In-Reply-To: <20181219120904.17643-6-kraxel@redhat.com>
On Wed, Dec 19, 2018 at 01:09:02PM +0100, Gerd Hoffmann wrote:
> Use the new keyboard state tracked for vnc. Allows to drop the
> vnc-specific modifier state tracking code.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> ui/vnc.h | 5 ++-
> ui/vnc.c | 120 ++++++++++++++++++---------------------------------------------
> 2 files changed, 35 insertions(+), 90 deletions(-)
>
> diff --git a/ui/vnc.h b/ui/vnc.h
> index a86e0610e8..56111908ce 100644
> --- a/ui/vnc.h
> +++ b/ui/vnc.h
> @@ -44,6 +44,7 @@
> #include "keymaps.h"
> #include "vnc-palette.h"
> #include "vnc-enc-zrle.h"
> +#include "ui/kbd-state.h"
>
> // #define _VNC_DEBUG 1
>
> @@ -155,7 +156,7 @@ struct VncDisplay
> int lock_key_sync;
> QEMUPutLEDEntry *led;
> int ledstate;
> - int key_delay_ms;
> + KbdState *kbd;
> QemuMutex mutex;
>
> QEMUCursor *cursor;
> @@ -326,8 +327,6 @@ struct VncState
>
> VncReadEvent *read_handler;
> size_t read_handler_expect;
> - /* input */
> - uint8_t modifiers_state[256];
>
> bool abort;
> QemuMutex output_mutex;
> diff --git a/ui/vnc.c b/ui/vnc.c
> index 0c1b477425..b56431ce3b 100644
> --- a/ui/vnc.c
> +++ b/ui/vnc.c
> @@ -1797,32 +1780,20 @@ static void kbd_leds(void *opaque, int ledstate)
>
> static void do_key_event(VncState *vs, int down, int keycode, int sym)
> {
> + QKeyCode qcode = qemu_input_key_number_to_qcode(keycode);
> +
> /* QEMU console switch */
> - switch(keycode) {
> - case 0x2a: /* Left Shift */
> - case 0x36: /* Right Shift */
> - case 0x1d: /* Left CTRL */
> - case 0x9d: /* Right CTRL */
> - case 0x38: /* Left ALT */
> - case 0xb8: /* Right ALT */
> - if (down)
> - vs->modifiers_state[keycode] = 1;
> - else
> - vs->modifiers_state[keycode] = 0;
> - break;
This code updated modifier state as the first thing in do_key_event
[snip]
> @@ -1859,30 +1828,25 @@ static void do_key_event(VncState *vs, int down, int keycode, int sym)
> toggles capslock away from the VNC window.
> */
> int uppercase = !!(sym >= 'A' && sym <= 'Z');
> - int shift = !!(vs->modifiers_state[0x2a] | vs->modifiers_state[0x36]);
> - int capslock = !!(vs->modifiers_state[0x3a]);
> + bool shift = kbd_state_modifier_get(vs->vd->kbd, KBD_MOD_SHIFT);
> + bool capslock = kbd_state_modifier_get(vs->vd->kbd, KBD_MOD_CAPSLOCK);
This uses the modifier state
In old code it would use the newly updated modifier state
In new code it now uses the old modifier state.
> if (capslock) {
> if (uppercase == shift) {
> trace_vnc_key_sync_capslock(false);
> - vs->modifiers_state[0x3a] = 0;
> - press_key(vs, 0xffe5);
> + press_key(vs, Q_KEY_CODE_CAPS_LOCK);
> }
> } else {
> if (uppercase != shift) {
> trace_vnc_key_sync_capslock(true);
> - vs->modifiers_state[0x3a] = 1;
> - press_key(vs, 0xffe5);
> + press_key(vs, Q_KEY_CODE_CAPS_LOCK);
> }
> }
> }
>
> - if (qemu_console_is_graphic(NULL)) {
> - qemu_input_event_send_key_number(vs->vd->dcl.con, keycode, down);
> - qemu_input_event_send_key_delay(vs->vd->key_delay_ms);
> - } else {
> - bool numlock = vs->modifiers_state[0x45];
> - bool control = (vs->modifiers_state[0x1d] ||
> - vs->modifiers_state[0x9d]);
> + kbd_state_key_event(vs->vd->kbd, qcode, down);
This updates modifier state in the new code, after the code above that
uses modifier state.
Is this ordering change intentional ?
> + if (!qemu_console_is_graphic(NULL)) {
> + bool numlock = kbd_state_modifier_get(vs->vd->kbd, KBD_MOD_NUMLOCK);
> + bool control = kbd_state_modifier_get(vs->vd->kbd, KBD_MOD_CTRL);
> /* QEMU console emulation */
> if (down) {
> switch (keycode) {
> @@ -1983,27 +1947,6 @@ static void do_key_event(VncState *vs, int down, int keycode, int sym)
> }
> }
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
next prev parent reply other threads:[~2018-12-21 11:18 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-19 12:08 [Qemu-devel] [RFC PATCH v2 0/7] ui: add generic keyboard state tracker, fix keymap Gerd Hoffmann
2018-12-19 12:08 ` [Qemu-devel] [RFC PATCH v2 1/7] kbd-state: add keyboard state tracker Gerd Hoffmann
2018-12-21 10:56 ` Daniel P. Berrangé
2019-01-22 16:52 ` Eric Blake
2019-01-23 6:20 ` Gerd Hoffmann
2018-12-19 12:08 ` [Qemu-devel] [RFC PATCH v2 2/7] kbd-state: use state tracker for sdl2 Gerd Hoffmann
2018-12-21 11:04 ` Daniel P. Berrangé
2019-01-22 16:58 ` Eric Blake
2018-12-19 12:09 ` [Qemu-devel] [RFC PATCH v2 3/7] sdl2: use only QKeyCode in sdl2_process_key() Gerd Hoffmann
2018-12-21 11:06 ` Daniel P. Berrangé
2018-12-19 12:09 ` [Qemu-devel] [RFC PATCH v2 4/7] kbd-state: use state tracker for gtk Gerd Hoffmann
2018-12-21 11:10 ` Daniel P. Berrangé
2018-12-19 12:09 ` [Qemu-devel] [RFC PATCH v2 5/7] kbd-state: use state tracker for vnc Gerd Hoffmann
2018-12-21 11:18 ` Daniel P. Berrangé [this message]
2019-01-22 9:00 ` Gerd Hoffmann
2019-01-22 9:41 ` Daniel P. Berrangé
2018-12-19 12:09 ` [Qemu-devel] [RFC PATCH v2 6/7] keymap: pass full keyboard state to keysym2scancode Gerd Hoffmann
2018-12-21 11:18 ` Daniel P. Berrangé
2018-12-19 12:09 ` [Qemu-devel] [RFC PATCH v2 7/7] keymap: fix keyup mappings Gerd Hoffmann
2018-12-21 11:19 ` Daniel P. Berrangé
2018-12-25 6:46 ` [Qemu-devel] [RFC PATCH v2 0/7] ui: add generic keyboard state tracker, fix keymap no-reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181221111801.GI7439@redhat.com \
--to=berrange@redhat.com \
--cc=kraxel@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).