Re: XI_Enter/XI_Leave coming from a slave

2018-01-24 Thread David Bokan
On Mon, Jan 15, 2018 at 2:53 AM, Peter Hutterer <peter.hutte...@who-t.net>
wrote:

> On Tue, Jan 09, 2018 at 07:18:31PM -0500, David Bokan wrote:
> > Hello,
> >
> > Please bear with me as I'm utterly new to X - I'm trying to debug an
> issue
> > in Chromium when using xtest. I'm not sure if the bug is in Chromium, X,
> or
> > XTest or some combination of the three.
> >
> > There's two things that are puzzling me:
> >
> > 1) When I click mouse button 1 on a physical device, it seems that
> there's
> > some kind of grab going on: I get an XI_Enter event with NotifyGrab and
> an
> > XI_Leave with NotifyUngrab. This kind of makes sense except that I've
> > disabled the explicit device grab (XIGrabDevice) and we don't have any
> > passive grabs that I can see. So where is this grab coming from? If I
> press
> > down and move the pointer out of the window I continue to see motion
> events.
>
> it's part of the core protocol functionality, whenever a button event is
> delivered to a client it activates and implicit passive grab for that
> button. google/grep for "implicit passive grab", you should find a few
> things.
>

Thanks, that makes sense and I can reproduce the implicit grab but it still
doesn't explain the EnterNotify/XI_Enter (chromium is listening for both)
events I'm seeing after a button press. That is, the pointer is already
inside the window but on ButtonPress I get a EnterNotify+XI_Enter events. I
can't find that explained in any documentation and I can't replicate this
behavior in a stripped down repro. xtrace shows this on a button press:

000:>:0705: Event Generic(35) XInputExtension(131) ButtonPress(4)
deviceid=0x0d time=0x2c5c3858 detail=0x0001 root=0x012d
event=0x0561 child=0x056e sourceid=0x000d
000:>:0705: Event Generic(35) XInputExtension(131) ButtonPress(4)
deviceid=0x02 time=0x2c5c3858 detail=0x0001 root=0x012d
event=0x0561 child=0x056e sourceid=0x000d
000:>:0705: Event EnterNotify(7) detail=Inferior(0x02) mode=Grab(0x01)
flags=focus,same-screen time=0x2c5c3858 root=0x012d event=0x0561
child=None(0x) state=Button1
000:>:0705: Event Generic(35) XInputExtension(131) Enter(7) deviceid=0x02
time=0x2c5c3858 sourceid=0x02 mode=Grab(0x01) detail=Inferior(0x02)
root=0x012d event=0x0561 child=0x same_screen=true(0x01)
focus=true(0x01) masks=0x0002;

>
> > I tried to make a simple app to repro but couldn't. Using XIGrabButton
> > doesn't cause XI_Enter/Leave events if the click is with in the window.
> > So...where could this behavior be coming from? Figuring out how to
> > reproduce this would help me debug the issue below.
> >
> > 2) This is the real issue I'm debugging. Given the above XI_Enter/Leave
> > behavior on mouse buttons, It seems that using xtest causes us to get an
> > extra pair of XI_Enter and XI_Leave events on a mouse down with deviceid
> ==
> > 4 (xtest pointer) - in addition to the regular ones we get as described
> > above for the master pointer.
> >
> > I can kind of repro this in a test app by using XIGrabButton on
> deviceid=4.
> > This causes me to get the crossing events with deviceid=4 but I don't
> get a
> > second pair for the master pointer.
>
> I'd have to page all the details into my brain again, but IIRC grabbing a
> slave device detaches it from the master device for the duration of the
> grab. so for that time being, the event sequence is a bit different. It
> shouldn't be different for xtest devices, the grab code doesn't care about
> whether it's an xtest device or some other device.
>

This might be a red herring, Chromium always does the XIGrabDevice on the
master pointer. I've also removed the XIGrabDevice and the issue still
remains. The difference in behavior comes down to the XTest slave causing
an XI_Enter (without a matching EnterNotify) for the slave deviceid. Real
devices don't. Here's the xtrace comparing the two:

XTest:

000:>:0662: Event Generic(35) XInputExtension(131) ButtonPress(4)
deviceid=0x04 time=0x2c28195d detail=0x0001 root=0x012d
event=0x0561 child=0x056e sourceid=0x0004
___This is sent only for XTest___ 000:>:0662: Event Generic(35)
XInputExtension(131) Enter(7) deviceid=0x04 time=0x2c28195d sourceid=0x04
mode=Grab(0x01) detail=Inferior(0x02) root=0x012d event=0x0561
child=0x same_screen=true(0x01) focus=true(0x01) masks=0x0002;
000:>:0662: Event Generic(35) XInputExtension(131) ButtonPress(4)
deviceid=0x02 time=0x2c28195d detail=0x0001 root=0x012d
event=0x0561 child=0x056e sourceid=0x0004
000:>:0662: Event EnterNotify(7) detail=Inferior(0x02) mode=Grab(0x01)
flags=focus,same-screen time=0x2c28195d root=0x012d event=0x0561
child

XI_Enter/XI_Leave coming from a slave

2018-01-10 Thread David Bokan
Hello,

Please bear with me as I'm utterly new to X - I'm trying to debug an issue
in Chromium when using xtest. I'm not sure if the bug is in Chromium, X, or
XTest or some combination of the three.

There's two things that are puzzling me:

1) When I click mouse button 1 on a physical device, it seems that there's
some kind of grab going on: I get an XI_Enter event with NotifyGrab and an
XI_Leave with NotifyUngrab. This kind of makes sense except that I've
disabled the explicit device grab (XIGrabDevice) and we don't have any
passive grabs that I can see. So where is this grab coming from? If I press
down and move the pointer out of the window I continue to see motion events.

I tried to make a simple app to repro but couldn't. Using XIGrabButton
doesn't cause XI_Enter/Leave events if the click is with in the window.
So...where could this behavior be coming from? Figuring out how to
reproduce this would help me debug the issue below.

2) This is the real issue I'm debugging. Given the above XI_Enter/Leave
behavior on mouse buttons, It seems that using xtest causes us to get an
extra pair of XI_Enter and XI_Leave events on a mouse down with deviceid ==
4 (xtest pointer) - in addition to the regular ones we get as described
above for the master pointer.

I can kind of repro this in a test app by using XIGrabButton on deviceid=4.
This causes me to get the crossing events with deviceid=4 but I don't get a
second pair for the master pointer.

Any idea what might be happening or advice on how to dig deeper? Anything I
could try (e.g. is there a way to clear all passive grabs?)

Thanks!
David
___
xorg@lists.x.org: X.Org support
Archives: http://lists.freedesktop.org/archives/xorg
Info: https://lists.x.org/mailman/listinfo/xorg
Your subscription address: %(user_address)s