composite: Add GetImage wrapper
When GetImage is performed on a window, force an immediate update of all the automatically redirected windows, so that the current window contents will be up to date. Signed-off-by: Ville Syrjälä <ville.syrjala@nokia.com> Reviewed-by: Keith Packard <keithp@keithp.com> Reviewed-by: Daniel Stone <daniel@fooishbar.org> Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
a5dc3531e1
commit
84154954db
|
@ -47,7 +47,7 @@
|
|||
|
||||
#include "compint.h"
|
||||
|
||||
static void
|
||||
void
|
||||
compScreenUpdate (ScreenPtr pScreen)
|
||||
{
|
||||
compCheckTree (pScreen);
|
||||
|
|
|
@ -77,6 +77,8 @@ compCloseScreen (int index, ScreenPtr pScreen)
|
|||
pScreen->CopyWindow = cs->CopyWindow;
|
||||
pScreen->PositionWindow = cs->PositionWindow;
|
||||
|
||||
pScreen->GetImage = cs->GetImage;
|
||||
|
||||
free(cs);
|
||||
dixSetPrivate(&pScreen->devPrivates, CompScreenPrivateKey, NULL);
|
||||
ret = (*pScreen->CloseScreen) (index, pScreen);
|
||||
|
@ -129,6 +131,25 @@ compChangeWindowAttributes(WindowPtr pWin, unsigned long mask)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
compGetImage (DrawablePtr pDrawable,
|
||||
int sx, int sy,
|
||||
int w, int h,
|
||||
unsigned int format,
|
||||
unsigned long planemask,
|
||||
char *pdstLine)
|
||||
{
|
||||
ScreenPtr pScreen = pDrawable->pScreen;
|
||||
CompScreenPtr cs = GetCompScreen (pScreen);
|
||||
|
||||
pScreen->GetImage = cs->GetImage;
|
||||
if (pDrawable->type == DRAWABLE_WINDOW)
|
||||
compScreenUpdate (pScreen);
|
||||
(*pScreen->GetImage) (pDrawable, sx, sy, w, h, format, planemask, pdstLine);
|
||||
cs->GetImage = pScreen->GetImage;
|
||||
pScreen->GetImage = compGetImage;
|
||||
}
|
||||
|
||||
/*
|
||||
* Add alternate visuals -- always expose an ARGB32 and RGB24 visual
|
||||
*/
|
||||
|
@ -361,6 +382,9 @@ compScreenInit (ScreenPtr pScreen)
|
|||
cs->CloseScreen = pScreen->CloseScreen;
|
||||
pScreen->CloseScreen = compCloseScreen;
|
||||
|
||||
cs->GetImage = pScreen->GetImage;
|
||||
pScreen->GetImage = compGetImage;
|
||||
|
||||
dixSetPrivate(&pScreen->devPrivates, CompScreenPrivateKey, cs);
|
||||
|
||||
RegisterRealChildHeadProc(CompositeRealChildHead);
|
||||
|
|
|
@ -159,6 +159,7 @@ typedef struct _CompScreen {
|
|||
Window overlayWid;
|
||||
CompOverlayClientPtr pOverlayClients;
|
||||
|
||||
GetImageProcPtr GetImage;
|
||||
} CompScreenRec, *CompScreenPtr;
|
||||
|
||||
extern DevPrivateKeyRec CompScreenPrivateKeyRec;
|
||||
|
@ -315,6 +316,9 @@ compCopyWindow (WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc);
|
|||
void
|
||||
compWindowUpdate (WindowPtr pWin);
|
||||
|
||||
void
|
||||
compScreenUpdate (ScreenPtr pScreen);
|
||||
|
||||
WindowPtr
|
||||
CompositeRealChildHead (WindowPtr pWin);
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user