On 2011-07-04 20:15, andrzej zaborowski wrote: > On 26 June 2011 11:11, Jan Kiszka <jan.kis...@web.de> 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 <jan.kis...@siemens.com> >>>>>> --- >>>>>> 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 <jan.kis...@siemens.com> 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 <jan.kis...@siemens.com> --- 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