Message ID | 4E1BFC24.3000508@web.de |
---|---|
State | New |
Headers | show |
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 <jan.kiszka@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.kiszka@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? To me it looks better, yes. Thanks, Andreas > ----------8<--------- > > From: Jan Kiszka <jan.kiszka@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.kiszka@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
On 13 July 2011 23:05, Andreas Färber <andreas.faerber@web.de> wrote: > 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 <jan.kiszka@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.kiszka@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? I pushed this version, thanks. Cheers
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; }