From: Peter Hutterer <[EMAIL PROTECTED]> We need them for each window, every time a window is allocated. Storing them in a devPrivate is the wrong thing to do.
This also removes the unused ENTER_LEAVE_SEMAPHORE_ISSET macro. Signed-off-by: Peter Hutterer <[EMAIL PROTECTED]> --- dix/events.c | 8 ++------ dix/window.c | 6 ++---- include/input.h | 17 +++-------------- include/windowstr.h | 18 ++++++------------ 4 files changed, 13 insertions(+), 36 deletions(-) diff --git a/dix/events.c b/dix/events.c index 33936bd..ae38f24 100644 --- a/dix/events.c +++ b/dix/events.c @@ -6266,13 +6266,11 @@ ExtGrabDevice(ClientPtr client, int EnterLeaveSemaphoresIsset(WindowPtr win) { - FocusSemaphoresPtr sem; int set = 0; int i; - sem = (FocusSemaphoresPtr)dixLookupPrivate(&win->devPrivates, FocusPrivatesKey); for (i = 0; i < (MAXDEVICES + 7)/8; i++) - set += sem->enterleave[i]; + set += win->enterleave[i]; return set; } @@ -6283,13 +6281,11 @@ EnterLeaveSemaphoresIsset(WindowPtr win) int FocusSemaphoresIsset(WindowPtr win) { - FocusSemaphoresPtr sem; int set = 0; int i; - sem = (FocusSemaphoresPtr)dixLookupPrivate(&win->devPrivates, FocusPrivatesKey); for (i = 0; i < (MAXDEVICES + 7)/8; i++) - set += sem->focusinout[i]; + set += win->focusinout[i]; return set; } diff --git a/dix/window.c b/dix/window.c index 1a28d27..ff5ba4a 100644 --- a/dix/window.c +++ b/dix/window.c @@ -271,8 +271,6 @@ Bool enableBackingStore = FALSE; static void SetWindowToDefaults(WindowPtr pWin) { - FocusSemaphoresPtr sem; - pWin->prevSib = NullWindow; pWin->firstChild = NullWindow; pWin->lastChild = NullWindow; @@ -302,8 +300,8 @@ SetWindowToDefaults(WindowPtr pWin) pWin->redirectDraw = RedirectDrawNone; pWin->forcedBG = FALSE; - sem = xcalloc(1, sizeof(FocusSemaphoresRec)); - dixSetPrivate(&pWin->devPrivates, FocusPrivatesKey, sem); + memset(pWin->enterleave, 0, sizeof(pWin->enterleave)); + memset(pWin->focusinout, 0, sizeof(pWin->focusinout)); #ifdef ROOTLESS pWin->rootlessUnhittable = FALSE; diff --git a/include/input.h b/include/input.h index 0d348ec..a41affd 100644 --- a/include/input.h +++ b/include/input.h @@ -92,18 +92,10 @@ SOFTWARE. /* Used for enter/leave and focus in/out semaphores */ #define SEMAPHORE_FIELD_SET(win, dev, field) \ -{ \ - FocusSemaphoresPtr sem; \ - sem = (FocusSemaphoresPtr)dixLookupPrivate(&win->devPrivates, FocusPrivatesKey); \ - sem->field[dev->id/8] |= (1 << (dev->id % 8)); \ -} + (win)->field[(dev)->id/8] |= (1 << ((dev)->id % 8)); \ #define SEMAPHORE_FIELD_UNSET(win, dev, field) \ -{ \ - FocusSemaphoresPtr sem; \ - sem = (FocusSemaphoresPtr)dixLookupPrivate(&win->devPrivates, FocusPrivatesKey); \ - sem->field[dev->id/8] &= ~(1 << (dev->id % 8)); \ -} + (win)->field[(dev)->id/8] &= ~(1 << ((dev)->id % 8)); #define ENTER_LEAVE_SEMAPHORE_SET(win, dev) \ SEMAPHORE_FIELD_SET(win, dev, enterleave); @@ -111,9 +103,6 @@ SOFTWARE. #define ENTER_LEAVE_SEMAPHORE_UNSET(win, dev) \ SEMAPHORE_FIELD_UNSET(win, dev, enterleave); -#define ENTER_LEAVE_SEMAPHORE_ISSET(win, dev) \ - ((FocusSemaphoresPtr)dixLookupPrivate(&win->devPrivates, FocusPrivatesKey))->enterleave[dev->id/8] & (1 << (dev->id % 8)) - #define FOCUS_SEMAPHORE_SET(win, dev) \ SEMAPHORE_FIELD_SET(win, dev, focusinout); @@ -121,7 +110,7 @@ SOFTWARE. SEMAPHORE_FIELD_UNSET(win, dev, focusinout); #define FOCUS_SEMAPHORE_ISSET(win, dev) \ - ((FocusSemaphoresPtr)dixLookupPrivate(&win->devPrivates, FocusPrivatesKey))->focusinout[dev->id/8] & (1 << (dev->id % 8)) + (win)->focusinout[(dev)->id/8] & (1 << ((dev)->id % 8)) typedef unsigned long Leds; typedef struct _OtherClients *OtherClientsPtr; diff --git a/include/windowstr.h b/include/windowstr.h index 3beb01c..159ee36 100644 --- a/include/windowstr.h +++ b/include/windowstr.h @@ -188,6 +188,12 @@ typedef struct _Window { #ifdef ROOTLESS unsigned rootlessUnhittable:1; /* doesn't hit-test */ #endif + /* Used to maintain semantics of core protocol for Enter/LeaveNotifies and + * FocusIn/Out events for multiple pointers/keyboards. Each device ID + * corresponds to one bit. If set, the device is in the window/has focus. + */ + char enterleave[(MAXDEVICES + 7)/8]; + char focusinout[(MAXDEVICES + 7)/8]; } WindowRec; /* @@ -244,17 +250,5 @@ typedef struct _ScreenSaverStuff { extern int screenIsSaved; extern ScreenSaverStuffRec savedScreenInfo[MAXSCREENS]; -extern DevPrivateKey FocusPrivatesKey; - -/* Used to maintain semantics of core protocol for Enter/LeaveNotifies and - * FocusIn/Out events for multiple pointers/keyboards. - * - * Each device ID corresponds to one bit. If set, the device is in the - * window/has focus. - */ -typedef struct _FocusSemaphores { - char enterleave[(MAXDEVICES + 7)/8]; - char focusinout[(MAXDEVICES + 7)/8]; -} FocusSemaphoresRec, *FocusSemaphoresPtr; #endif /* WINDOWSTRUCT_H */ -- 1.6.0.3 _______________________________________________ xorg mailing list xorg@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/xorg