Hi, Peter,

following your suggestion, I have verified `xinput --test-xi2` works correctly and reports all the XI_Leave events. After another half an hour I have finally found the problem: the eventmask.mask was too small, so XI_Leave (which corresponds to 1 << 8) was skipped, while XI_Enter (1 << 7) was handled fine.

Thanks,

Artem

On 3/2/2010 7:26 AM, Peter Hutterer wrote:
On Sat, Feb 27, 2010 at 04:00:08PM +0300, Artem Ananiev wrote:
Hello,

with a simple test - see the code snippet below - I successfully
receive XI_Enter notifications for my window, but XI_Leave are
missed. Are there any problems with the test, or something else is
wrong?

----

   display = XOpenDisplay(NULL);

   root = RootWindow(display, 0);
   window = XCreateSimpleWindow(display, root,
                                100, 100, 320, 240,
                                BlackPixel(display, 0),
                                WhitePixel(display, 0));

   eventmask.deviceid = XIAllMasterDevices;
   eventmask.mask_len = sizeof(mask);
   eventmask.mask = mask;

   XISetMask(mask, XI_Enter);
   XISetMask(mask, XI_Leave);
   XISelectEvents(display, window,&eventmask, 1);

   XMapWindow(display, window);
   XSync(display, True);

   while (1) {
     XNextEvent(display,&xev);
     if ((xev.xcookie.type == GenericEvent)&&
         (xev.xcookie.extension == xinput_opcode)&&
         XGetEventData(display,&xev.xcookie)) {
       switch (xev.xcookie.evtype) {
         case XI_Enter:
           fprintf(stderr, "XI_Enter\n");
           break;
         case XI_Leave:
           fprintf(stderr, "XI_Leave\n");
           break;
       }
       XFreeEventData(display,&xev.xcookie);
     }
   }

----

The problem is reproducible both with a single master device and
with multiple ones. If I modify the test to listen for regular
EnterNotify and LeaveNotify, these are received correctly (but
XI_Leave is still missed).

weird. I copy/pasted your code (no changes, just added the missing
declarations and one missing param to XCreateSimpleWindow) I'm getting
events just as required.

do you see enter/leave events with "xinput --test-xi2"?
is the value of xinput_opcode off by any chance? try to hardcode it, you can
get the value from "xdpyinfo -ext XInputExtension | grep opcode"

Cheers,
   Peter
_______________________________________________
xorg-devel mailing list
[email protected]
http://lists.x.org/mailman/listinfo/xorg-devel
_______________________________________________
xorg-devel mailing list
[email protected]
http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to