qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2] usb-hid: Fix 0/0 position for Windows in tab


From: Andreas Färber
Subject: Re: [Qemu-devel] [PATCH v2] usb-hid: Fix 0/0 position for Windows in tablet mode
Date: Wed, 13 Jul 2011 23:05:49 +0200

Am 12.07.2011 um 09:47 schrieb Jan Kiszka:

On 2011-07-04 20:15, andrzej zaborowski wrote:
On 26 June 2011 11:11, Jan Kiszka <address@hidden> wrote:
On 2011-06-25 15:10, Andreas Färber wrote:
Am 25.06.2011 um 14:55 schrieb Jan Kiszka:

On 2011-06-25 14:37, Andreas Färber wrote:
Am 24.06.2011 um 16:27 schrieb Jan Kiszka:

For unknown reasons, Windows drivers (tested with XP and Win7) ignore usb-tablet events that move the pointer to 0/0. So always set bit 0 of
the coordinates.

Signed-off-by: Jan Kiszka <address@hidden>
---
hw/usb-hid.c |    6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/hw/usb-hid.c b/hw/usb-hid.c
index d711b5c..2b9a451 100644
--- a/hw/usb-hid.c
+++ b/hw/usb-hid.c
@@ -457,8 +457,10 @@ static void
usb_pointer_event_combine(USBPointerEvent *e, int xyrel,
      e->xdx += x1;
      e->ydy += y1;
  } else {
-        e->xdx = x1;
-        e->ydy = y1;
+ /* Windows drivers do not like the 0/0 position and ignore
such
+         * events. */
+        e->xdx = x1 | 1;
+        e->ydy = y1 | 1;

Doesn't this change mean we can't access any other even pixel either?

Only on 32767x32767 screens (that's the resolution of the tablet).

Well, if it's just a fix for 0/0 I would've expected something like:

e->xdx = x1 ? x1 : 1;
e->ydy = y1 ? y1 : 1;

Works as well, my version is a little bit simpler. But I don't mind,
will post whatever is preferred to fix this.

Would it be enough to just do this for x or y, not both?

Yes, looks like. Is this one better?

To me it looks better, yes.

Thanks,
Andreas

----------8<---------

From: Jan Kiszka <address@hidden>

For unknown reasons, Windows drivers (tested with XP and Win7) ignore
usb-tablet events that move the pointer to 0/0. So always report 0/0 as
1/0.

Signed-off-by: Jan Kiszka <address@hidden>
---
hw/usb-hid.c |    5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/hw/usb-hid.c b/hw/usb-hid.c
index d711b5c..faf91c4 100644
--- a/hw/usb-hid.c
+++ b/hw/usb-hid.c
@@ -459,6 +459,11 @@ static void usb_pointer_event_combine(USBPointerEvent *e, int xyrel,
    } else {
        e->xdx = x1;
        e->ydy = y1;
+ /* Windows drivers do not like the 0/0 position and ignore such
+         * events. */
+        if (!(x1 | y1)) {
+            x1 = 1;
+        }
    }
    e->dz += z1;
}
--
1.7.3.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]