(!1714) damage: use PixmapDestroy hook
Wrapping ScreenRec's function pointers is problematic for many reasons, so use the new pixmap destroy notify hook instead. Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
		
							parent
							
								
									2f7c911730
								
							
						
					
					
						commit
						987f37270b
					
				|  | @ -1484,14 +1484,8 @@ damageInsertDamage(DamagePtr * pPrev, DamagePtr pDamage) | |||
|     *pPrev = pDamage; | ||||
| } | ||||
| 
 | ||||
| static Bool | ||||
| damageDestroyPixmap(PixmapPtr pPixmap) | ||||
| static void damagePixmapDestroy(ScreenPtr pScreen, PixmapPtr pPixmap, void *arg) | ||||
| { | ||||
|     ScreenPtr pScreen = pPixmap->drawable.pScreen; | ||||
| 
 | ||||
|     damageScrPriv(pScreen); | ||||
| 
 | ||||
|     if (pPixmap->refcnt == 1) { | ||||
|     DamagePtr *pPrev = getPixmapDamageRef(pPixmap); | ||||
|     DamagePtr pDamage; | ||||
| 
 | ||||
|  | @ -1500,12 +1494,6 @@ damageDestroyPixmap(PixmapPtr pPixmap) | |||
|         if (!pDamage->isWindow) | ||||
|             DamageDestroy(pDamage); | ||||
|     } | ||||
|     } | ||||
|     unwrap(pScrPriv, pScreen, DestroyPixmap); | ||||
|     if (pScreen->DestroyPixmap) | ||||
|         pScreen->DestroyPixmap(pPixmap); | ||||
|     wrap(pScrPriv, pScreen, DestroyPixmap, damageDestroyPixmap); | ||||
|     return TRUE; | ||||
| } | ||||
| 
 | ||||
| static void | ||||
|  | @ -1592,8 +1580,8 @@ damageCloseScreen(ScreenPtr pScreen) | |||
|     damageScrPriv(pScreen); | ||||
| 
 | ||||
|     dixScreenUnhookWindowDestroy(pScreen, damageWindowDestroy, NULL); | ||||
|     dixScreenUnhookPixmapDestroy(pScreen, damagePixmapDestroy, NULL); | ||||
| 
 | ||||
|     unwrap(pScrPriv, pScreen, DestroyPixmap); | ||||
|     unwrap(pScrPriv, pScreen, CreateGC); | ||||
|     unwrap(pScrPriv, pScreen, CopyWindow); | ||||
|     unwrap(pScrPriv, pScreen, CloseScreen); | ||||
|  | @ -1686,8 +1674,8 @@ DamageSetup(ScreenPtr pScreen) | |||
|     pScrPriv->pScreenDamage = 0; | ||||
| 
 | ||||
|     dixScreenHookWindowDestroy(pScreen, damageWindowDestroy, NULL); | ||||
|     dixScreenHookPixmapDestroy(pScreen, damagePixmapDestroy, NULL); | ||||
| 
 | ||||
|     wrap(pScrPriv, pScreen, DestroyPixmap, damageDestroyPixmap); | ||||
|     wrap(pScrPriv, pScreen, CreateGC, damageCreateGC); | ||||
|     wrap(pScrPriv, pScreen, SetWindowPixmap, damageSetWindowPixmap); | ||||
|     wrap(pScrPriv, pScreen, CopyWindow, damageCopyWindow); | ||||
|  |  | |||
|  | @ -63,7 +63,6 @@ typedef struct _damageScrPriv { | |||
|     CopyWindowProcPtr CopyWindow; | ||||
|     CloseScreenProcPtr CloseScreen; | ||||
|     CreateGCProcPtr CreateGC; | ||||
|     DestroyPixmapProcPtr DestroyPixmap; | ||||
|     SetWindowPixmapProcPtr SetWindowPixmap; | ||||
|     CompositeProcPtr Composite; | ||||
|     GlyphsProcPtr Glyphs; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue