xserver: Branch 'mpx' - 4 commits
Peter Hutterer
whot at kemper.freedesktop.org
Mon May 12 18:47:20 PDT 2008
Xi/extinit.c | 20 ++++++++++----------
dix/devices.c | 6 ++----
hw/xfree86/ramdac/xf86Cursor.c | 16 +---------------
include/scrnintstr.h | 5 -----
mi/mipointer.c | 22 +++++++---------------
mi/mipointer.h | 4 ----
mi/misprite.c | 19 -------------------
render/animcur.c | 2 +-
8 files changed, 21 insertions(+), 73 deletions(-)
New commits:
commit 59b8d29b3a91c65787dfadb5610342a62e85c48c
Author: Peter Hutterer <peter at cs.unisa.edu.au>
Date: Mon May 12 21:22:54 2008 +0930
Xi: Fix up ProcIVector, got out of sync with the protocol.
When the opcode squash happened in the protocol, the processing vector got out
of sync for a few requests. As a result, client and server would interpret
requests differently, leading to a couple of BadLength problems.
diff --git a/Xi/extinit.c b/Xi/extinit.c
index 1d68d1e..613472a 100644
--- a/Xi/extinit.c
+++ b/Xi/extinit.c
@@ -212,11 +212,11 @@ static int (*ProcIVector[])(ClientPtr) = {
ProcXWarpDevicePointer, /* 37 */
ProcXChangeDeviceCursor, /* 38 */
ProcXChangeDeviceHierarchy, /* 39 */
- ProcXiSelectEvent, /* 40 */
- ProcXChangeWindowAccess, /* 41 */
- ProcXQueryWindowAccess, /* 42 */
- ProcXSetClientPointer, /* 43 */
- ProcXGetClientPointer, /* 44 */
+ ProcXChangeWindowAccess, /* 40 */
+ ProcXQueryWindowAccess, /* 41 */
+ ProcXSetClientPointer, /* 42 */
+ ProcXGetClientPointer, /* 43 */
+ ProcXiSelectEvent, /* 44 */
ProcXExtendedGrabDevice /* 45 */
};
@@ -262,11 +262,11 @@ static int (*SProcIVector[])(ClientPtr) = {
SProcXWarpDevicePointer, /* 37 */
SProcXChangeDeviceCursor, /* 38 */
SProcXChangeDeviceHierarchy, /* 39 */
- SProcXiSelectEvent, /* 40 */
- SProcXChangeWindowAccess, /* 41 */
- SProcXQueryWindowAccess, /* 42 */
- SProcXSetClientPointer, /* 43 */
- SProcXGetClientPointer, /* 44 */
+ SProcXChangeWindowAccess, /* 40 */
+ SProcXQueryWindowAccess, /* 41 */
+ SProcXSetClientPointer, /* 42 */
+ SProcXGetClientPointer, /* 43 */
+ SProcXiSelectEvent, /* 44 */
SProcXExtendedGrabDevice /* 45 */
};
commit 1fc1a2897e9185838c29d9ffff07c39d2fdf174f
Author: Peter Hutterer <peter at cs.unisa.edu.au>
Date: Mon May 12 20:14:05 2008 +0930
Remove UndisplayCursor API.
We can achieve the same thing by simply displaying a NullCursor, there's no
need for a separate API.
diff --git a/dix/devices.c b/dix/devices.c
index 802bf79..82eece7 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -854,9 +854,7 @@ UndisplayDevices()
ScreenPtr screen = screenInfo.screens[0];
for (dev = inputInfo.devices; dev; dev = dev->next)
- {
- screen->UndisplayCursor(dev, screen);
- }
+ screen->DisplayCursor(dev, screen, NullCursor);
}
/**
@@ -887,7 +885,7 @@ RemoveDevice(DeviceIntPtr dev)
return BadImplementation;
initialized = dev->inited;
- screen->UndisplayCursor(dev, screen);
+ screen->DisplayCursor(dev, screen, NullCursor);
deviceid = dev->id;
DisableDevice(dev);
diff --git a/hw/xfree86/ramdac/xf86Cursor.c b/hw/xfree86/ramdac/xf86Cursor.c
index 010575b..4d64f62 100644
--- a/hw/xfree86/ramdac/xf86Cursor.c
+++ b/hw/xfree86/ramdac/xf86Cursor.c
@@ -38,8 +38,7 @@ static miPointerSpriteFuncRec xf86CursorSpriteFuncs = {
xf86CursorSetCursor,
xf86CursorMoveCursor,
xf86DeviceCursorInitialize,
- xf86DeviceCursorCleanup,
- xf86DeviceCursorUndisplay
+ xf86DeviceCursorCleanup
};
/* Screen functions */
@@ -504,16 +503,3 @@ xf86DeviceCursorCleanup(DeviceIntPtr pDev, ScreenPtr pScreen)
(*ScreenPriv->spriteFuncs->DeviceCursorCleanup)(pDev, pScreen);
}
-/**
- * Called on server shutdown to remove all cursors from the screen before
- * bringing the server down.
- */
-static void
-xf86DeviceCursorUndisplay(DeviceIntPtr pDev, ScreenPtr pScreen)
-{
- xf86CursorScreenPtr ScreenPriv = (xf86CursorScreenPtr)dixLookupPrivate(
- &pScreen->devPrivates, xf86CursorScreenKey);
-
- /* Undisplay SW cursor */
- (*ScreenPriv->spriteFuncs->UndisplayCursor)(pDev, pScreen);
-}
diff --git a/include/scrnintstr.h b/include/scrnintstr.h
index 8a1de4a..6cf9333 100644
--- a/include/scrnintstr.h
+++ b/include/scrnintstr.h
@@ -440,10 +440,6 @@ typedef void (* MarkUnrealizedWindowProcPtr)(
WindowPtr /*pWin*/,
Bool /*fromConfigure*/);
-typedef void (* UndisplayCursorProcPtr)(
- DeviceIntPtr /* pDev */,
- ScreenPtr /* pScreen */);
-
typedef Bool (* DeviceCursorInitializeProcPtr)(
DeviceIntPtr /* pDev */,
ScreenPtr /* pScreen */);
@@ -601,7 +597,6 @@ typedef struct _Screen {
MarkUnrealizedWindowProcPtr MarkUnrealizedWindow;
/* Device cursor procedures */
- UndisplayCursorProcPtr UndisplayCursor;
DeviceCursorInitializeProcPtr DeviceCursorInitialize;
DeviceCursorCleanupProcPtr DeviceCursorCleanup;
} ScreenRec;
diff --git a/mi/mipointer.c b/mi/mipointer.c
index 572af1b..8243947 100644
--- a/mi/mipointer.c
+++ b/mi/mipointer.c
@@ -60,7 +60,6 @@ static Bool miPointerUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
CursorPtr pCursor);
static Bool miPointerDisplayCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
CursorPtr pCursor);
-static void miPointerUndisplayCursor(DeviceIntPtr pDev, ScreenPtr pScreen);
static void miPointerConstrainCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
BoxPtr pBox);
static void miPointerPointerNonInterestBox(DeviceIntPtr pDev,
@@ -113,8 +112,6 @@ miPointerInitialize (pScreen, spriteFuncs, screenFuncs, waitForUpdate)
pScreen->ConstrainCursor = miPointerConstrainCursor;
pScreen->CursorLimits = miPointerCursorLimits;
pScreen->DisplayCursor = miPointerDisplayCursor;
- pScreen->UndisplayCursor = miPointerUndisplayCursor;
- pScreen->UndisplayCursor = miPointerUndisplayCursor;
pScreen->RealizeCursor = miPointerRealizeCursor;
pScreen->UnrealizeCursor = miPointerUnrealizeCursor;
pScreen->SetCursorPosition = miPointerSetCursorPosition;
@@ -213,16 +210,6 @@ miPointerDisplayCursor (pDev, pScreen, pCursor)
}
static void
-miPointerUndisplayCursor(pDev, pScreen)
- DeviceIntPtr pDev;
- ScreenPtr pScreen;
-{
- SetupScreen(pScreen);
- if (pDev->isMaster && pDev->spriteInfo->spriteOwner)
- (*pScreenPriv->spriteFuncs->UndisplayCursor)(pDev, pScreen);
-}
-
-static void
miPointerConstrainCursor (pDev, pScreen, pBox)
DeviceIntPtr pDev;
ScreenPtr pScreen;
diff --git a/mi/mipointer.h b/mi/mipointer.h
index ed518d1..5cbf527 100644
--- a/mi/mipointer.h
+++ b/mi/mipointer.h
@@ -62,10 +62,6 @@ typedef struct _miPointerSpriteFuncRec {
DeviceIntPtr /* pDev */,
ScreenPtr /* pScr */
);
- void (*UndisplayCursor)(
- DeviceIntPtr /* pDev */,
- ScreenPtr /* pScr */
- );
} miPointerSpriteFuncRec, *miPointerSpriteFuncPtr;
typedef struct _miPointerScreenFuncRec {
diff --git a/mi/misprite.c b/mi/misprite.c
index 9e4b685..1218023 100644
--- a/mi/misprite.c
+++ b/mi/misprite.c
@@ -125,7 +125,6 @@ static void miSpriteSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
CursorPtr pCursor, int x, int y);
static void miSpriteMoveCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
int x, int y);
-static void miSpriteUndisplayCursor(DeviceIntPtr pDev, ScreenPtr pScreen);
_X_EXPORT miPointerSpriteFuncRec miSpritePointerFuncs = {
miSpriteRealizeCursor,
@@ -134,7 +133,6 @@ _X_EXPORT miPointerSpriteFuncRec miSpritePointerFuncs = {
miSpriteMoveCursor,
miSpriteDeviceCursorInitialize,
miSpriteDeviceCursorCleanup,
- miSpriteUndisplayCursor
};
/*
@@ -911,23 +909,6 @@ miSpriteDeviceCursorCleanup(pDev, pScreen)
}
}
-static void
-miSpriteUndisplayCursor(pDev, pScreen)
- DeviceIntPtr pDev;
- ScreenPtr pScreen;
-{
- miCursorInfoPtr pCursorInfo;
-
- if (!pDev->isMaster && !pDev->u.master)
- {
- ErrorF("[mi] miSpriteUndisplayCursor called for floating device.\n");
- return;
- }
- pCursorInfo = MISPRITE(pDev);
- if (pCursorInfo && pCursorInfo->isUp)
- miSpriteRemoveCursor(pDev, pScreen);
-}
-
/*
* undraw/draw cursor
*/
commit 913989d643595030e67e7c0a758a16ae0da62ed9
Author: Peter Hutterer <peter at cs.unisa.edu.au>
Date: Mon May 12 20:05:43 2008 +0930
mi: don't try to display a cursor for devices w/o cursors.
diff --git a/mi/mipointer.c b/mi/mipointer.c
index 8f8086c..572af1b 100644
--- a/mi/mipointer.c
+++ b/mi/mipointer.c
@@ -199,6 +199,11 @@ miPointerDisplayCursor (pDev, pScreen, pCursor)
if (!pDev->isMaster && !pDev->u.master)
return FALSE;
+ /* return for keyboards */
+ if ((pDev->isMaster && !DevHasCursor(pDev)) ||
+ (!pDev->isMaster && pDev->u.master && !DevHasCursor(pDev->u.master)))
+ return;
+
pPointer = MIPOINTER(pDev);
pPointer->pCursor = pCursor;
@@ -449,7 +454,7 @@ miPointerUpdateSprite (DeviceIntPtr pDev)
else if (pPointer->pCursor != pPointer->pSpriteCursor)
{
pCursor = pPointer->pCursor;
- if (pCursor->bits->emptyMask && !pScreenPriv->showTransparent)
+ if (!pCursor || (pCursor->bits->emptyMask && !pScreenPriv->showTransparent))
pCursor = NullCursor;
(*pScreenPriv->spriteFuncs->SetCursor) (pDev, pScreen, pCursor, x, y);
@@ -461,7 +466,7 @@ miPointerUpdateSprite (DeviceIntPtr pDev)
{
pPointer->devx = x;
pPointer->devy = y;
- if(!pPointer->pCursor->bits->emptyMask)
+ if(pPointer->pCursor && !pPointer->pCursor->bits->emptyMask)
(*pScreenPriv->spriteFuncs->MoveCursor) (pDev, pScreen, x, y);
}
}
commit 248a1df63430717550adb0e79068d8f9fcfacb0b
Author: Peter Hutterer <peter at cs.unisa.edu.au>
Date: Mon May 12 20:05:21 2008 +0930
render: don't dereference cursor if cursor is NULL.
diff --git a/render/animcur.c b/render/animcur.c
index a87718d..362607f 100644
--- a/render/animcur.c
+++ b/render/animcur.c
@@ -93,7 +93,7 @@ static CursorBits animCursorBits = {
static int AnimCurGeneration;
static DevPrivateKey AnimCurScreenPrivateKey = &AnimCurScreenPrivateKey;
-#define IsAnimCur(c) ((c)->bits == &animCursorBits)
+#define IsAnimCur(c) ((c) && ((c)->bits == &animCursorBits))
#define GetAnimCur(c) ((AnimCurPtr) ((c) + 1))
#define GetAnimCurScreen(s) ((AnimCurScreenPtr)dixLookupPrivate(&(s)->devPrivates, AnimCurScreenPrivateKey))
#define GetAnimCurScreenIfSet(s) GetAnimCurScreen(s)
More information about the xorg-commit
mailing list