[PATCH 8/8] xfixes: use struct list for pointer barriers.

Peter Hutterer peter.hutterer at who-t.net
Mon Feb 21 19:51:24 PST 2011


Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 xfixes/cursor.c |   20 +++++++++-----------
 1 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/xfixes/cursor.c b/xfixes/cursor.c
index 3cafc24..1be6e18 100644
--- a/xfixes/cursor.c
+++ b/xfixes/cursor.c
@@ -116,7 +116,7 @@ typedef struct PointerBarrierClient *PointerBarrierClientPtr;
 struct PointerBarrierClient {
     ScreenPtr screen;
     struct PointerBarrier barrier;
-    PointerBarrierClientPtr next;
+    struct list entry;
 };
 
 /*
@@ -128,7 +128,7 @@ typedef struct _CursorScreen {
     CloseScreenProcPtr		CloseScreen;
     ConstrainCursorHarderProcPtr ConstrainCursorHarder;
     CursorHideCountPtr          pCursorHideCounts;
-    PointerBarrierClientPtr	barriers;
+    struct list                 barriers;
 } CursorScreenRec, *CursorScreenPtr;
 
 #define GetCursorScreen(s) ((CursorScreenPtr)dixLookupPrivate(&(s)->devPrivates, CursorScreenPrivateKey))
@@ -1175,7 +1175,7 @@ barrier_find_nearest(CursorScreenPtr cs, int dir,
     struct PointerBarrier *nearest = NULL;
     double min_distance = INT_MAX; /* can't get higher than that in X anyway */
 
-    for (c = cs->barriers; c; c = c->next) {
+    list_for_each_entry(c, &cs->barriers, entry) {
 	struct PointerBarrier *b = &c->barrier;
 	double distance;
 
@@ -1229,7 +1229,7 @@ CursorConstrainCursorHarder(DeviceIntPtr dev, ScreenPtr screen, int mode, int *x
 {
     CursorScreenPtr cs = GetCursorScreen(screen);
 
-    if (cs->barriers && !IsFloating(dev) && mode == Relative) {
+    if (!list_is_empty(&cs->barriers) && !IsFloating(dev) && mode == Relative) {
 	int ox, oy;
 	int dir;
 	struct PointerBarrier *nearest = NULL;
@@ -1286,8 +1286,7 @@ CreatePointerBarrierClient(ScreenPtr screen, ClientPtr client,
 	ret->barrier.y1 = stuff->y1;
 	ret->barrier.y2 = stuff->y2;
 	ret->barrier.directions = stuff->directions & 0x0f;
-	ret->next = cs->barriers;
-	cs->barriers = ret;
+	list_add(&ret->entry, &cs->barriers);
     }
 
     return ret;
@@ -1363,11 +1362,9 @@ CursorFreeBarrier(void *data, XID id)
     cs = GetCursorScreen(screen);
 
     /* find and unlink from the screen private */
-    if (cs->barriers == barrier)
-	cs->barriers = cs->barriers->next;
-    else for (b = cs->barriers; b; b = b->next) {
-	if (b->next == barrier) {
-	    b->next = b->next->next;
+    list_for_each_entry(b, &cs->barriers, entry) {
+	if (b == barrier) {
+	    list_del(&b->entry);
 	    break;
 	}
     }
@@ -1428,6 +1425,7 @@ XFixesCursorInit (void)
 	cs = (CursorScreenPtr) calloc(1, sizeof (CursorScreenRec));
 	if (!cs)
 	    return FALSE;
+	list_init(&cs->barriers);
 	Wrap (cs, pScreen, CloseScreen, CursorCloseScreen);
 	Wrap (cs, pScreen, DisplayCursor, CursorDisplayCursor);
 	Wrap (cs, pScreen, ConstrainCursorHarder, CursorConstrainCursorHarder);
-- 
1.7.4



More information about the xorg-devel mailing list