miext: shadow: use CloseScreen hook
Wrapping ScreenRec's function pointers is problematic for many reasons, so use the new screen close notify hook instead. Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
		
							parent
							
								
									ff3799a5a8
								
							
						
					
					
						commit
						03169ebe87
					
				| 
						 | 
				
			
			@ -23,8 +23,10 @@
 | 
			
		|||
#include <dix-config.h>
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <X11/X.h>
 | 
			
		||||
 | 
			
		||||
#include "dix/screen_hooks_priv.h"
 | 
			
		||||
 | 
			
		||||
#include    <X11/X.h>
 | 
			
		||||
#include    "scrnintstr.h"
 | 
			
		||||
#include    "windowstr.h"
 | 
			
		||||
#include    "dixfontstr.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -93,19 +95,17 @@ shadowGetImage(DrawablePtr pDrawable, int sx, int sy, int w, int h,
 | 
			
		|||
    wrap(pBuf, pScreen, GetImage);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Bool
 | 
			
		||||
shadowCloseScreen(ScreenPtr pScreen)
 | 
			
		||||
static void shadowCloseScreen(CallbackListPtr *pcbl, ScreenPtr pScreen, void *unused)
 | 
			
		||||
{
 | 
			
		||||
    shadowBuf(pScreen);
 | 
			
		||||
    dixScreenUnhookClose(pScreen, shadowCloseScreen);
 | 
			
		||||
 | 
			
		||||
    shadowBuf(pScreen);
 | 
			
		||||
    unwrap(pBuf, pScreen, GetImage);
 | 
			
		||||
    unwrap(pBuf, pScreen, CloseScreen);
 | 
			
		||||
    unwrap(pBuf, pScreen, BlockHandler);
 | 
			
		||||
    shadowRemove(pScreen, pBuf->pPixmap);
 | 
			
		||||
    DamageDestroy(pBuf->pDamage);
 | 
			
		||||
    dixDestroyPixmap(pBuf->pPixmap, 0);
 | 
			
		||||
    free(pBuf);
 | 
			
		||||
    return pScreen->CloseScreen(pScreen);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Bool
 | 
			
		||||
| 
						 | 
				
			
			@ -130,7 +130,8 @@ shadowSetup(ScreenPtr pScreen)
 | 
			
		|||
        return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    wrap(pBuf, pScreen, CloseScreen);
 | 
			
		||||
    dixScreenHookClose(pScreen, shadowCloseScreen);
 | 
			
		||||
 | 
			
		||||
    wrap(pBuf, pScreen, GetImage);
 | 
			
		||||
    wrap(pBuf, pScreen, BlockHandler);
 | 
			
		||||
    pBuf->update = 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,7 +53,6 @@ typedef struct _shadowBuf {
 | 
			
		|||
 | 
			
		||||
    /* screen wrappers */
 | 
			
		||||
    GetImageProcPtr GetImage;
 | 
			
		||||
    CloseScreenProcPtr CloseScreen;
 | 
			
		||||
    ScreenBlockHandlerProcPtr BlockHandler;
 | 
			
		||||
} shadowBufRec;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue