From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44627) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XXOYw-0005Xa-JZ for qemu-devel@nongnu.org; Fri, 26 Sep 2014 01:59:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XXOYq-0005QA-Dv for qemu-devel@nongnu.org; Fri, 26 Sep 2014 01:59:26 -0400 Received: from mx1.redhat.com ([209.132.183.28]:10022) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XXOYq-0005Pz-6x for qemu-devel@nongnu.org; Fri, 26 Sep 2014 01:59:20 -0400 Date: Fri, 26 Sep 2014 13:59:09 +0800 From: Amos Kong Message-ID: <20140926055909.GB9752@air> References: <1401867851-30064-1-git-send-email-kraxel@redhat.com> <1401867851-30064-3-git-send-email-kraxel@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1401867851-30064-3-git-send-email-kraxel@redhat.com> Subject: Re: [Qemu-devel] [PULL 2/7] input: use kbd delays for send_key monitor command List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gerd Hoffmann Cc: qemu-devel@nongnu.org, Anthony Liguori , Luiz Capitulino On Wed, Jun 04, 2014 at 09:44:06AM +0200, Gerd Hoffmann wrote: > Signed-off-by: Gerd Hoffmann > --- > ui/input-legacy.c | 45 ++++++--------------------------------------- > 1 file changed, 6 insertions(+), 39 deletions(-) > > diff --git a/ui/input-legacy.c b/ui/input-legacy.c > index 2a53860..3025f50 100644 > --- a/ui/input-legacy.c > +++ b/ui/input-legacy.c > @@ -74,27 +74,6 @@ int index_from_key(const char *key) > return i; > } > > -static KeyValue **keyvalues; > -static int keyvalues_size; > -static QEMUTimer *key_timer; > - > -static void free_keyvalues(void) > -{ > - g_free(keyvalues); > - keyvalues = NULL; > - keyvalues_size = 0; > -} > - > -static void release_keys(void *opaque) > -{ > - while (keyvalues_size > 0) { > - qemu_input_event_send_key(NULL, keyvalues[--keyvalues_size], > - false); > - } > - > - free_keyvalues(); > -} > - > static KeyValue *copy_key_value(KeyValue *src) > { > KeyValue *dst = g_new(KeyValue, 1); > @@ -107,30 +86,18 @@ void qmp_send_key(KeyValueList *keys, bool has_hold_time, int64_t hold_time, > { > KeyValueList *p; > > - if (!key_timer) { > - key_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, release_keys, NULL); > - } > - > - if (keyvalues != NULL) { > - timer_del(key_timer); > - release_keys(NULL); > - } > - > if (!has_hold_time) { > - hold_time = 100; > + hold_time = 0; /* use default */ > } > > for (p = keys; p != NULL; p = p->next) { > qemu_input_event_send_key(NULL, copy_key_value(p->value), true); > - > - keyvalues = g_realloc(keyvalues, sizeof(KeyValue *) * > - (keyvalues_size + 1)); > - keyvalues[keyvalues_size++] = copy_key_value(p->value); > + qemu_input_event_send_key_delay(hold_time); > + } > + for (p = keys; p != NULL; p = p->next) { Hi Gerd, This patch caused a regression, it changed the releasing order When we send a serial keys together, the right order should be: press key1 press key2 press key3 release key3 release key2 release key1 We can check the events by shokey command in Linux. This regression will caused "sendkey Alt-Ctrl-Delete" doesn't work on some guests. Thanks, Amos > + qemu_input_event_send_key(NULL, copy_key_value(p->value), false); > + qemu_input_event_send_key_delay(hold_time); > } > - > - /* delayed key up events */ > - timer_mod(key_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + > - muldiv64(get_ticks_per_sec(), hold_time, 1000)); > } > > static void legacy_kbd_event(DeviceState *dev, QemuConsole *src, > -- > 1.8.3.1 > -- Amos.