From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46215) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XXTA2-00017o-Q9 for qemu-devel@nongnu.org; Fri, 26 Sep 2014 06:54:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XXT9w-0004FF-L8 for qemu-devel@nongnu.org; Fri, 26 Sep 2014 06:54:02 -0400 Received: from mx1.redhat.com ([209.132.183.28]:10540) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XXT9w-0004Ep-Cv for qemu-devel@nongnu.org; Fri, 26 Sep 2014 06:53:56 -0400 Date: Fri, 26 Sep 2014 18:13:33 +0800 From: Amos Kong Message-ID: <20140926101333.GA21622@air.nay.redhat.com> References: <1411718930-26580-1-git-send-email-kraxel@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1411718930-26580-1-git-send-email-kraxel@redhat.com> Subject: Re: [Qemu-devel] [PATCH] input: fix send-key monitor command release event ordering List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gerd Hoffmann Cc: qemu-devel@nongnu.org, Anthony Liguori On Fri, Sep 26, 2014 at 10:08:50AM +0200, Gerd Hoffmann wrote: > commit 2e377f1730d06deafb3e3ef6cf88792de4a6f4df changed the ordering > of the release events as side effect. Some guests are not happy with > that and don't recognise ctrl-alt-del any more. This patch restores > the old last-pressed first-released behavior. > > Cc: Amos Kong > Signed-off-by: Gerd Hoffmann Acked-by: Amos Kong Tested-by: Amos Kong I will rebase my second patch [1] on your patch. [1] [Qemu-devel] [PATCH] ui/input: fix event emitting of repeated combined keys > --- > ui/input-legacy.c | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > > diff --git a/ui/input-legacy.c b/ui/input-legacy.c > index 3025f50..a698a34 100644 > --- a/ui/input-legacy.c > +++ b/ui/input-legacy.c > @@ -85,6 +85,8 @@ void qmp_send_key(KeyValueList *keys, bool has_hold_time, int64_t hold_time, > Error **errp) > { > KeyValueList *p; > + KeyValue **up = NULL; > + int count = 0; > > if (!has_hold_time) { > hold_time = 0; /* use default */ > @@ -93,11 +95,16 @@ void qmp_send_key(KeyValueList *keys, bool has_hold_time, int64_t hold_time, > for (p = keys; p != NULL; p = p->next) { > qemu_input_event_send_key(NULL, copy_key_value(p->value), true); > qemu_input_event_send_key_delay(hold_time); > + up = g_realloc(up, sizeof(*up) * (count+1)); > + up[count] = copy_key_value(p->value); > + count++; > } > - for (p = keys; p != NULL; p = p->next) { > - qemu_input_event_send_key(NULL, copy_key_value(p->value), false); > + while (count) { > + count--; > + qemu_input_event_send_key(NULL, up[count], false); > qemu_input_event_send_key_delay(hold_time); > } > + g_free(up); > } > > static void legacy_kbd_event(DeviceState *dev, QemuConsole *src, > -- > 1.8.3.1 > -- Amos.