dix: Rework Enter/Leave semaphore system.

Instead of a simple counter, use bits to keep track of which device is where
etc. When device enters a window (or sets focus), the bit matching the device
is set, when it leaves again, it is unset. If there are 0 bits set, then
Leave/Enter/Focus events may be sent to the client.

Same theory as before, but this should get around the insanity with
Grab/Ungrab special cases. Those cases are basically untested though.
This commit is contained in:
Peter Hutterer
2008-04-10 19:22:59 +09:30
parent a88386ee27
commit 04dff74ffd
5 changed files with 114 additions and 62 deletions

View File

@@ -366,6 +366,7 @@ CreateRootWindow(ScreenPtr pScreen)
WindowPtr pWin;
BoxRec box;
PixmapFormatRec *format;
FocusSemaphoresPtr sem;
pWin = (WindowPtr)xalloc(sizeof(WindowRec));
if (!pWin)
@@ -484,6 +485,7 @@ CreateRootWindow(ScreenPtr pScreen)
if (disableSaveUnders)
pScreen->saveUnderSupport = NotUseful;
return TRUE;
}