[PATCH 06/22] mi: Fix wrapping for sprite screen

Peter Hutterer peter.hutterer at who-t.net
Wed Dec 29 15:05:30 PST 2010


On Wed, Dec 29, 2010 at 09:27:18PM +0200, Pauli wrote:
> From: Pauli Nieminen <ext-pauli.nieminen at nokia.com>
> 
> SCREEN_EPILOGUE should read the current function pointer from screen
> after calling wrapped function in case the pointer changes.
> 
> Passing pPriv to macros instead of asking dix each time makes sense when
> both macros need same pointer.
> 
> Signed-off-by: Pauli Nieminen <ext-pauli.nieminen at nokia.com>
> ---
>  mi/misprite.c |   47 +++++++++++++++++++++++++----------------------
>  1 files changed, 25 insertions(+), 22 deletions(-)
> 
> diff --git a/mi/misprite.c b/mi/misprite.c
> index c42760c..6f2a0eb 100644
> --- a/mi/misprite.c
> +++ b/mi/misprite.c
> @@ -217,11 +217,10 @@ static Bool         miSpriteDeviceCursorInitialize(DeviceIntPtr pDev,
>  static void         miSpriteDeviceCursorCleanup(DeviceIntPtr pDev,
>                                                  ScreenPtr pScreen);
>  
> -#define SCREEN_PROLOGUE(pScreen, field) ((pScreen)->field = \
> -   ((miSpriteScreenPtr)dixLookupPrivate(&(pScreen)->devPrivates, \
> -					miSpriteScreenKey))->field)
> -#define SCREEN_EPILOGUE(pScreen, field)\
> -    ((pScreen)->field = miSprite##field)
> +#define SCREEN_PROLOGUE(pPriv, pScreen, field) ((pScreen)->field = \
> +   (pPriv)->field)
> +#define SCREEN_EPILOGUE(pPriv, pScreen, field)\
> +    ((pPriv)->field = (pScreen)->field, (pScreen)->field = miSprite##field)
>  
>  /*
>   * pointer-sprite method table
> @@ -398,11 +397,12 @@ miSpriteGetImage (DrawablePtr pDrawable, int sx, int sy, int w, int h,
>                    unsigned int format, unsigned long planemask,
>                    char *pdstLine)
>  {
> -    ScreenPtr	    pScreen = pDrawable->pScreen;
> -    DeviceIntPtr    pDev;
> -    miCursorInfoPtr pCursorInfo;
> +    ScreenPtr	        pScreen = pDrawable->pScreen;

please fix up the indentation here.

Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

Cheers,
  Peter
> +    DeviceIntPtr        pDev;
> +    miCursorInfoPtr     pCursorInfo;
> +    miSpriteScreenPtr   pPriv = GetSpriteScreen(pScreen);
>  
> -    SCREEN_PROLOGUE (pScreen, GetImage);
> +    SCREEN_PROLOGUE (pPriv, pScreen, GetImage);
>  
>      if (pDrawable->type == DRAWABLE_WINDOW)
>      {
> @@ -425,7 +425,7 @@ miSpriteGetImage (DrawablePtr pDrawable, int sx, int sy, int w, int h,
>      (*pScreen->GetImage) (pDrawable, sx, sy, w, h,
>  			  format, planemask, pdstLine);
>  
> -    SCREEN_EPILOGUE (pScreen, GetImage);
> +    SCREEN_EPILOGUE (pPriv, pScreen, GetImage);
>  }
>  
>  static void
> @@ -435,8 +435,9 @@ miSpriteGetSpans (DrawablePtr pDrawable, int wMax, DDXPointPtr ppt,
>      ScreenPtr		    pScreen = pDrawable->pScreen;
>      DeviceIntPtr            pDev;
>      miCursorInfoPtr         pCursorInfo;
> +    miSpriteScreenPtr       pPriv = GetSpriteScreen(pScreen);
>  
> -    SCREEN_PROLOGUE (pScreen, GetSpans);
> +    SCREEN_PROLOGUE (pPriv, pScreen, GetSpans);
>  
>      if (pDrawable->type == DRAWABLE_WINDOW)
>      {
> @@ -476,7 +477,7 @@ miSpriteGetSpans (DrawablePtr pDrawable, int wMax, DDXPointPtr ppt,
>  
>      (*pScreen->GetSpans) (pDrawable, wMax, ppt, pwidth, nspans, pdstStart);
>  
> -    SCREEN_EPILOGUE (pScreen, GetSpans);
> +    SCREEN_EPILOGUE (pPriv, pScreen, GetSpans);
>  }
>  
>  static void
> @@ -486,8 +487,9 @@ miSpriteSourceValidate (DrawablePtr pDrawable, int x, int y, int width,
>      ScreenPtr		    pScreen = pDrawable->pScreen;
>      DeviceIntPtr            pDev;
>      miCursorInfoPtr         pCursorInfo;
> +    miSpriteScreenPtr       pPriv = GetSpriteScreen(pScreen);
>  
> -    SCREEN_PROLOGUE (pScreen, SourceValidate);
> +    SCREEN_PROLOGUE (pPriv, pScreen, SourceValidate);
>  
>      if (pDrawable->type == DRAWABLE_WINDOW)
>      {
> @@ -510,7 +512,7 @@ miSpriteSourceValidate (DrawablePtr pDrawable, int x, int y, int width,
>      if (pScreen->SourceValidate)
>  	(*pScreen->SourceValidate) (pDrawable, x, y, width, height);
>  
> -    SCREEN_EPILOGUE (pScreen, SourceValidate);
> +    SCREEN_EPILOGUE (pPriv, pScreen, SourceValidate);
>  }
>  
>  static void
> @@ -519,8 +521,9 @@ miSpriteCopyWindow (WindowPtr pWindow, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
>      ScreenPtr	pScreen = pWindow->drawable.pScreen;
>      DeviceIntPtr            pDev;
>      miCursorInfoPtr         pCursorInfo;
> +    miSpriteScreenPtr       pPriv = GetSpriteScreen(pScreen);
>  
> -    SCREEN_PROLOGUE (pScreen, CopyWindow);
> +    SCREEN_PROLOGUE (pPriv, pScreen, CopyWindow);
>  
>      for(pDev = inputInfo.devices; pDev; pDev = pDev->next)
>      {
> @@ -540,7 +543,7 @@ miSpriteCopyWindow (WindowPtr pWindow, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
>      }
>  
>      (*pScreen->CopyWindow) (pWindow, ptOldOrg, prgnSrc);
> -    SCREEN_EPILOGUE (pScreen, CopyWindow);
> +    SCREEN_EPILOGUE (pPriv, pScreen, CopyWindow);
>  }
>  
>  static void
> @@ -552,11 +555,11 @@ miSpriteBlockHandler (int i, pointer blockData, pointer pTimeout,
>      DeviceIntPtr            pDev;
>      miCursorInfoPtr         pCursorInfo;
>  
> -    SCREEN_PROLOGUE(pScreen, BlockHandler);
> +    SCREEN_PROLOGUE(pPriv, pScreen, BlockHandler);
>  
>      (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
>  
> -    SCREEN_EPILOGUE(pScreen, BlockHandler);
> +    SCREEN_EPILOGUE(pPriv, pScreen, BlockHandler);
>  
>      for(pDev = inputInfo.devices; pDev; pDev = pDev->next)
>      {
> @@ -594,11 +597,11 @@ miSpriteInstallColormap (ColormapPtr pMap)
>      ScreenPtr		pScreen = pMap->pScreen;
>      miSpriteScreenPtr   pPriv = GetSpriteScreen(pScreen);
>  
> -    SCREEN_PROLOGUE(pScreen, InstallColormap);
> +    SCREEN_PROLOGUE(pPriv, pScreen, InstallColormap);
>  
>      (*pScreen->InstallColormap) (pMap);
>  
> -    SCREEN_EPILOGUE(pScreen, InstallColormap);
> +    SCREEN_EPILOGUE(pPriv, pScreen, InstallColormap);
>  
>      /* InstallColormap can be called before devices are initialized. */
>      pPriv->pInstalledMap = pMap;
> @@ -631,11 +634,11 @@ miSpriteStoreColors (ColormapPtr pMap, int ndef, xColorItem *pdef)
>      DeviceIntPtr        pDev;
>      miCursorInfoPtr     pCursorInfo;
>  
> -    SCREEN_PROLOGUE(pScreen, StoreColors);
> +    SCREEN_PROLOGUE(pPriv, pScreen, StoreColors);
>  
>      (*pScreen->StoreColors) (pMap, ndef, pdef);
>  
> -    SCREEN_EPILOGUE(pScreen, StoreColors);
> +    SCREEN_EPILOGUE(pPriv, pScreen, StoreColors);
>  
>      if (pPriv->pColormap == pMap)
>      {
> -- 
> 1.7.0.4



More information about the xorg-devel mailing list