qemu-devel
[Top][All Lists]
Advanced

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

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


From: Jan Kiszka
Subject: [Qemu-devel] [PATCH v2] usb-hid: Fix 0/0 position for Windows in tablet mode
Date: Tue, 12 Jul 2011 09:47:48 +0200
User-agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); de; rv:1.8.1.12) Gecko/20080226 SUSE/2.0.0.12-1.1 Thunderbird/2.0.0.12 Mnenhy/0.7.5.666

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?

Jan

----------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]