XQuartz tablet mouse events are at the wrong location and other Xinput headaches

Jeremy Huddleston jeremyhu at apple.com
Wed Mar 21 00:23:52 PDT 2012

On Mar 20, 2012, at 8:07 PM, Peter Hutterer <peter.hutterer at who-t.net> wrote:

> On Sat, Mar 17, 2012 at 12:49:53AM -0700, Jeremy Huddleston wrote:
>> Here are some examples.  The first is just valuator_mask_get_double(..., #) for the valuators of the event we enqueue with QueuePointerEvents(pDev, ev_type, ev_button, POINTER_ABSOLUTE, &valuators).  The second is from the corresponding event sent to 'xinput test pointer'.
>> Valuators: {32777.666667,0.000000,0.000000,22526.687460,0.000000}
>> motion a[0]=16398 a[1]=0 a[2]=0 a[3]=22526 a[4]=0
>> Valuators: {32777.666667,65510.186667,0.000000,-23552.718772,-12288.375011}
>> motion a[0]=16398 a[1]=65510 a[2]=0 a[3]=-23552 a[4]=-12288
>> Valuators: {65526.266667,21.333333,0.000000,39935.218726,3070.093692}
>> motion a[0]=65521 a[1]=21 a[2]=0 a[3]=39935 a[4]=3070 
>> Valuators: {65526.266667,65471.360000,0.000000,61439.874996,-21504.656270}
>> motion a[0]=65521 a[1]=65471 a[2]=0 a[3]=61439 a[4]=-21504
> I just tried this with a uinput test device that submits exactly the same
> values and has the same button/axes as the darwinTablet (had to set
> BTN_STYLUS to avoid evdev treating it as touchpad but that does not
> affect any coordinate handling in the server).
> The coordinates are identical, so I'm a bit confused where the scaling comes
> from. I noticed that the debug output displays pointer_x, pointer_y, but not
> the valuators[] values you actually submit to the dix. 

The copy/pasted text above actually *are* the valuators sent to the dix.  The debug printing does include pointer_x and pointer_y, but I omitted those in the information above.  From darwinEvents.c[1], you can see the Valuators above match what we're sending to QueuePointerEvents:

    DEBUG_LOG("Pointer (%lf, %lf), Valuators: {%lf,%lf,%lf,%lf,%lf}\n", pointer_x, pointer_y,
              valuator_mask_get_double(pmask, 0), valuator_mask_get_double(pmask, 1),
              valuator_mask_get_double(pmask, 2), valuator_mask_get_double(pmask, 3),
              valuator_mask_get_double(pmask, 4));

1: http://cgit.freedesktop.org/~jeremyhu/xserver/tree/hw/xquartz/darwinEvents.c?h=server-1.13-apple&id=5adf599c893e68a3057a6c4af507e4275dc6fca5

> I'd prefer to see those too, to rule out that there's some scaling issue
> before QueuePointerEvents.

Yeah, that was essentially what I did =/

> Do you have anything that sets the coordinate transformation matrix?

We should have it set to unity by our call to AddInputDevice().  I'll check that explicitly when I get back home later this week and have access to a tablet again.

> Do you have more than one ScreenRec?


More information about the xorg-devel mailing list