[PATCH] dix: move cursor realize code to its own function
Tiago Vignatti
tiago.vignatti at nokia.com
Sat Dec 5 09:10:43 PST 2009
The semantic remains, only code was moved: reuse chunk of code to realize
cursor on both AllocARGBCursor and AllocGlyphCursor.
(sh*t, git-diff got cracked and is confusing!)
Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>
---
dix/cursor.c | 201 +++++++++++++++++++++++----------------------------------
1 files changed, 81 insertions(+), 120 deletions(-)
diff --git a/dix/cursor.c b/dix/cursor.c
index 6103b15..4b9a418 100644
--- a/dix/cursor.c
+++ b/dix/cursor.c
@@ -159,6 +159,62 @@ CheckForEmptyMask(CursorBitsPtr bits)
bits->emptyMask = TRUE;
}
+static int
+RealizeCursorAllScreens(CursorPtr pCurs)
+{
+ DeviceIntPtr pDev;
+ ScreenPtr pscr;
+ int nscr;
+
+ /*
+ * realize the cursor for every screen
+ * Do not change the refcnt, this will be changed when ChangeToCursor
+ * actually changes the sprite.
+ */
+ for (nscr = 0; nscr < screenInfo.numScreens; nscr++)
+ {
+ pscr = screenInfo.screens[nscr];
+ for (pDev = inputInfo.devices; pDev; pDev = pDev->next)
+ {
+ if (DevHasCursor(pDev))
+ {
+ if (!( *pscr->RealizeCursor)(pDev, pscr, pCurs))
+ {
+ /* Realize failed for device pDev on screen pscr.
+ * We have to assume that for all devices before, realize
+ * worked. We need to rollback all devices so far on the
+ * current screen and then all devices on previous
+ * screens.
+ */
+ DeviceIntPtr pDevIt = inputInfo.devices; /*dev iterator*/
+ while(pDevIt && pDevIt != pDev)
+ {
+ if (DevHasCursor(pDevIt))
+ ( *pscr->UnrealizeCursor)(pDevIt, pscr, pCurs);
+ pDevIt = pDevIt->next;
+ }
+ while (--nscr >= 0)
+ {
+ pscr = screenInfo.screens[nscr];
+ /* now unrealize all devices on previous screens */
+ pDevIt = inputInfo.devices;
+ while (pDevIt)
+ {
+ if (DevHasCursor(pDevIt))
+ ( *pscr->UnrealizeCursor)(pDevIt, pscr, pCurs);
+ pDevIt = pDevIt->next;
+ }
+ ( *pscr->UnrealizeCursor)(pDev, pscr, pCurs);
+ }
+ return FALSE;
+ }
+ }
+ }
+ }
+
+ return TRUE;
+}
+
/**
* does nothing about the resource table, just creates the data structure.
* does not copy the src and mask bits
@@ -176,9 +232,7 @@ AllocARGBCursor(unsigned char *psrcbits, unsigned char *pmaskbits,
{
CursorBitsPtr bits;
CursorPtr pCurs;
- int rc, nscr;
- ScreenPtr pscr;
- DeviceIntPtr pDev;
+ int rc;
*ppCurs = NULL;
pCurs = (CursorPtr)xcalloc(sizeof(CursorRec) + sizeof(CursorBits), 1);
@@ -222,63 +276,20 @@ AllocARGBCursor(unsigned char *psrcbits, unsigned char *pmaskbits,
/* security creation/labeling check */
rc = XaceHook(XACE_RESOURCE_ACCESS, client, cid, RT_CURSOR,
pCurs, RT_NONE, NULL, DixCreateAccess);
- if (rc != Success) {
- dixFreePrivates(pCurs->devPrivates);
- FreeCursorBits(bits);
- xfree(pCurs);
- return rc;
- }
-
- /*
- * realize the cursor for every screen
- * Do not change the refcnt, this will be changed when ChangeToCursor
- * actually changes the sprite.
- */
- for (nscr = 0; nscr < screenInfo.numScreens; nscr++)
- {
- pscr = screenInfo.screens[nscr];
- for (pDev = inputInfo.devices; pDev; pDev = pDev->next)
- {
- if (DevHasCursor(pDev))
- {
- if (!( *pscr->RealizeCursor)(pDev, pscr, pCurs))
- {
- /* Realize failed for device pDev on screen pscr.
- * We have to assume that for all devices before, realize
- * worked. We need to rollback all devices so far on the
- * current screen and then all devices on previous
- * screens.
- */
- DeviceIntPtr pDevIt = inputInfo.devices; /*dev iterator*/
- while(pDevIt && pDevIt != pDev)
- {
- if (DevHasCursor(pDevIt))
- ( *pscr->UnrealizeCursor)(pDevIt, pscr, pCurs);
- pDevIt = pDevIt->next;
- }
- while (--nscr >= 0)
- {
- pscr = screenInfo.screens[nscr];
- /* now unrealize all devices on previous screens */
- pDevIt = inputInfo.devices;
- while (pDevIt)
- {
- if (DevHasCursor(pDevIt))
- ( *pscr->UnrealizeCursor)(pDevIt, pscr, pCurs);
- pDevIt = pDevIt->next;
- }
- ( *pscr->UnrealizeCursor)(pDev, pscr, pCurs);
- }
- dixFreePrivates(pCurs->devPrivates);
- FreeCursorBits(bits);
- xfree(pCurs);
- return BadAlloc;
- }
- }
- }
+ if (rc != Success)
+ goto error;
+
+ if (RealizeCursorAllScreens(pCurs)) {
+ *ppCurs = pCurs;
+ return Success;
}
- *ppCurs = pCurs;
- return rc;
+
+error:
+ dixFreePrivates(pCurs->devPrivates);
+ FreeCursorBits(bits);
+ xfree(pCurs);
+
+ return BadAlloc;
}
int
@@ -294,10 +305,7 @@ AllocGlyphCursor(Font source, unsigned sourceChar, Font mask, unsigned maskChar,
int rc;
CursorBitsPtr bits;
CursorPtr pCurs;
- int nscr;
- ScreenPtr pscr;
GlyphSharePtr pShare;
- DeviceIntPtr pDev;
rc = dixLookupResourceByType((pointer *)&sourcefont, source, RT_FONT, client,
DixUseAccess);
@@ -444,67 +452,20 @@ AllocGlyphCursor(Font source, unsigned sourceChar, Font mask, unsigned maskChar,
/* security creation/labeling check */
rc = XaceHook(XACE_RESOURCE_ACCESS, client, cid, RT_CURSOR,
pCurs, RT_NONE, NULL, DixCreateAccess);
- if (rc != Success) {
- dixFreePrivates(pCurs->devPrivates);
- FreeCursorBits(bits);
- xfree(pCurs);
- return rc;
- }
-
- /*
- * realize the cursor for every screen
- */
- for (nscr = 0; nscr < screenInfo.numScreens; nscr++)
- {
- pscr = screenInfo.screens[nscr];
-
- for (pDev = inputInfo.devices; pDev; pDev = pDev->next)
- {
- if (DevHasCursor(pDev))
- {
- if (!( *pscr->RealizeCursor)(pDev, pscr, pCurs))
- {
- /* Realize failed for device pDev on screen pscr.
- * We have to assume that for all devices before, realize
- * worked. We need to rollback all devices so far on the
- * current screen and then all devices on previous
- * screens.
- */
- DeviceIntPtr pDevIt = inputInfo.devices; /*dev iterator*/
- while(pDevIt && pDevIt != pDev)
- {
- if (DevHasCursor(pDevIt))
- ( *pscr->UnrealizeCursor)(pDevIt, pscr, pCurs);
- pDevIt = pDevIt->next;
- }
+ if (rc != Success)
+ goto error;
- (*pscr->UnrealizeCursor)(inputInfo.pointer, pscr, pCurs);
+ if (RealizeCursorAllScreens(pCurs)) {
+ *ppCurs = pCurs;
+ return Success;
+ }
- while (--nscr >= 0)
- {
- pscr = screenInfo.screens[nscr];
- /* now unrealize all devices on previous screens */
- ( *pscr->UnrealizeCursor)(inputInfo.pointer, pscr, pCurs);
+error:
+ dixFreePrivates(pCurs->devPrivates);
+ FreeCursorBits(bits);
+ xfree(pCurs);
- pDevIt = inputInfo.devices;
- while (pDevIt)
- {
- if (DevHasCursor(pDevIt))
- ( *pscr->UnrealizeCursor)(pDevIt, pscr, pCurs);
- pDevIt = pDevIt->next;
- }
- ( *pscr->UnrealizeCursor)(pDev, pscr, pCurs);
- }
- dixFreePrivates(pCurs->devPrivates);
- FreeCursorBits(bits);
- xfree(pCurs);
- return BadAlloc;
- }
- }
- }
- }
- *ppCurs = pCurs;
- return Success;
+ return BadAlloc;
}
/** CreateRootCursor
--
1.6.0.4
More information about the xorg-devel
mailing list