From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54043) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xtv05-0005hs-3H for qemu-devel@nongnu.org; Thu, 27 Nov 2014 04:04:37 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Xtuzz-0002Ln-Vr for qemu-devel@nongnu.org; Thu, 27 Nov 2014 04:04:33 -0500 Received: from mx1.redhat.com ([209.132.183.28]:33299) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xtuzz-0002LO-OZ for qemu-devel@nongnu.org; Thu, 27 Nov 2014 04:04:27 -0500 From: Gerd Hoffmann Date: Thu, 27 Nov 2014 10:04:12 +0100 Message-Id: <1417079052-9372-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] [RfC PATCH] hid: handle full ptr queues in post_load List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Gonglei , Gerd Hoffmann , "Dr. David Alan Gilbert" Cc: Gonglei Cc: Dr. David Alan Gilbert Signed-off-by: Gerd Hoffmann --- hw/input/hid.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/hw/input/hid.c b/hw/input/hid.c index 8f6fbb3..6fb963f 100644 --- a/hw/input/hid.c +++ b/hw/input/hid.c @@ -519,6 +519,27 @@ static int hid_post_load(void *opaque, int version_id) HIDState *s = opaque; hid_set_next_idle(s); + + if (s->n == QUEUE_LENGTH && (s->kind == HID_TABLET || + s->kind == HID_MOUSE)) { + /* + * Handle ptr device migration from old qemu with full queue. + * + * Throw away everything but the last event, so we propagate + * at least the current button state to the guest. Also keep + * current position for the tablet, signal "no motion" for the + * mouse. + */ + HIDPointerEvent evt; + evt = s->ptr.queue[(s->head+s->n) & QUEUE_MASK]; + if (s->kind == HID_MOUSE) { + evt.xdx = 0; + evt.ydy = 0; + } + s->ptr.queue[0] = evt; + s->head = 0; + s->n = 1; + } return 0; } -- 1.8.3.1