What's happening to DeviceMotionNotifies?

Peter Hutterer mailinglists at who-t.net
Tue Nov 28 22:56:14 PST 2006


after digging around more I found that XCB doesn't support XINPUT. So  
much for that.

Cheers,
   Peter

--
Multi-Pointer X Server
http://wearables.unisa.edu.au/mpx


On 29/11/2006, at 14:09 , Peter Hutterer wrote:

> Stumbled across a problem yesterday, took me a while to track it down.
> A very simple application to print DeviceMotionEvents doesn't work  
> any more with the current X server.
> Tried it with MPX first, then with the master branch and event  
> pulled a fresh copy from git today.
>
> When I put xmond in between, I can see the events flying past but  
> they do not actually arrive at the client. I don't yet know whether  
> that's an XCB, Xlib or X.org issue. MotionNotifies arrive,  
> DeviceMotionNotifies don't.
> Can anyone replicate this? What am I missing here?
>
> Simple test program, compile and run with $> foo <host:display>  
> <inputdevice> where <inputdevice> is an XI device.
>
>
> #include <stdio.h>
> #include <X11/X.h>
> #include <X11/Xlib.h>
> #include <assert.h>
> #include <X11/extensions/XInput.h>
>
> int main (int argc, char** argv)
> {
>     Display* display;
>     Window win;
>     XDevice* dev;
>     XEventClass class_1;
>     XSetWindowAttributes attr;
>     int screen;
>     int win_width, win_height;
>
>     int type_1;
>
>     display = XOpenDisplay(argv[1]);
>     screen = DefaultScreen(display);
>     assert(display != NULL);
>
>     win_width = 640;
>     win_height = 480;
>
>
>     dev = XOpenDevice(display, atoi(argv[2]));
>     assert(dev != NULL);
>     DeviceMotionNotify(dev, type_1, class_1);
>
>     attr.background_pixel = WhitePixel(display, screen);
>     attr.event_mask = ExposureMask | StructureNotifyMask;//|  
> PointerMotionMask;
>
>     win = XCreateWindow(display,
>             RootWindow(display, 0),
>             0, 0,
>             win_width,
>             win_height,
>             7,
>             DefaultDepth(display, 0),
>             InputOutput,
>             DefaultVisual(display, 0),
>             CWBackPixel | CWEventMask,
>             &attr);
>
>     XMapWindow(display, win);
>
>     XSelectExtensionEvent(display, win, &class_1, 1);
>     XSync(display, False);
>
>
>     while(1)
>     {
>         XEvent e;
>         XNextEvent(display, &e);
>         XDeviceMotionEvent* mev;
>
>         switch(e.type)
>         {
>             default:
>                 if (e.type == type_1)
>                 {
>                     printf("Motion notify\n");
>                     printf(" state %d\n", mev->state);
>                     printf(" devstate %d\n", mev->device_state);
>                 } else
>                 {
>                     printf("Unknown event type %d\n", e.type);
>                 }
>                 break;
>         }
>     }
>
>     XCloseDisplay(display);
>     return 0;
> }
>
>
>
>
> Cheers,
>   Peter
>
> --
> Multi-Pointer X Server
> http://wearables.unisa.edu.au/mpx
>
>
> _______________________________________________
> xorg mailing list
> xorg at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/xorg
>




More information about the xorg mailing list