[Xquartz-dev] keyboard/mouse focus issues
Pelle Johansson
pelle at morth.org
Sat Oct 17 01:04:46 PDT 2009
Yeah, sorry I wasn't more clear. It's at the second backtrace below
that dev->deviceGrab.sync.other is written to which in turn causes
FreezeThaw to freeze the events (CheckGrabForSyncs calls
ComputeFreezes at the end). Where it's supposed to be cleared I don't
know.
I'll see if I have time to get a -O0 server compiled this weekend,
obviously otherMode can't really be 0 there it has to be an
optimization thing, and there's some inlined frames missing. But I'm
pretty full booked...
--
Pelle Johansson
17 okt 2009 kl. 01.42 skrev Jeremy Huddleston:
> Well, FWICT, the problem stems from the device being marked as
> "frozen" and never getting "thawed" ...
>
> look at FreezeThaw in dix/events.c
>
> you might want to break in that function when frozen=TRUE (break
> FreezeThaw if frozen != 0).
>
> It's a small static function and might be inlined by gcc
> optimizations, so I'd recommend building the server with "-O0 -
> ggdb3" (which is good measure whenever using gdb any ways).
>
>
>
> On Oct 16, 2009, at 15:22, Pelle Johansson wrote:
>
>> No problem, I want it fixed as much as anyone. FWIW I've tracked it
>> down (using watch points, of all things. nice to see them finally
>> working) to this backtrace:
>>
>> #0 0x00000001000dc731 in AddPassiveGrabToList ()
>> #1 0x00000001000d020c in ProcGrabButton (client=0x1007df330) at
>> events.c:5176
>> #2 0x00000001000cbaf4 in Dispatch ()
>> #3 0x00000001000ddc41 in dix_main ()
>> #4 0x0000000100013f52 in server_thread ()
>> #5 0x00007fff86aeaf66 in _pthread_start ()
>> #6 0x00007fff86aeae19 in thread_start ()
>>
>> The passive grab added there is never removed (until the window is
>> unmapped), and it's the one making events queue up when the X
>> server is switched to. The client calling Grab is always the same
>> for the lifetime of the server, the wm maybe?
>>
>> It is used here:
>> #0 0x00000001000d74b4 in CheckGrabForSyncs (thisDev=<value
>> temporarily unavailable, due to optimizations>, thisMode=<value
>> temporarily unavailable, due to optimizations>, otherMode=0) at
>> events.c:1474
>> #1 0x00000001000d4331 in CheckPassiveGrabsOnWindow (pWin=<value
>> temporarily unavailable, due to optimizations>, device=0x1007e0a70,
>> xE=0x114452bd0, count=1, store=0x11581cb90, scount=2) at events.c:
>> 3338
>> #2 0x00000001000d4711 in CheckDeviceGrabs (device=0x1007e0a70,
>> xE=0x11581cb90, checkFirst=0, count=2) at events.c:3445
>> #3 0x0000000100081b2c in ProcessOtherEvent (xE=0x11581cb90,
>> device=0x1007e0a70, count=2) at exevents.c:1059
>> #4 0x000000010009fed0 in ProcessPointerEvent ()
>> #5 0x00000001000fa0c4 in mieqProcessInputEvents () at mieq.c:476
>> #6 0x000000010000e965 in ProcessInputEvents ()
>> #7 0x00000001000cb70b in Dispatch ()
>> #8 0x00000001000ddc41 in dix_main ()
>> #9 0x0000000100013f52 in server_thread ()
>> #10 0x00007fff86aeaf66 in _pthread_start ()
>> #11 0x00007fff86aeae19 in thread_start ()
More information about the Xquartz-dev
mailing list