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