[PATCH] dix: don't store enter/leave and focus semaphores in a devPrivate.
Peter Hutterer
peter.hutterer at who-t.net
Wed Nov 12 21:11:45 PST 2008
From: Peter Hutterer <peter.hutterer at redhat.com>
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 <peter.hutterer at redhat.com>
---
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
More information about the xorg
mailing list