From: Ville Syrjälä <[email protected]> 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ä <[email protected]> Reviewed-by: Keith Packard <[email protected]> Reviewed-by: Daniel Stone <[email protected]> --- v3: No changes composite/compinit.c | 24 ++++++++++++++++++++++++ composite/compint.h | 1 + 2 files changed, 25 insertions(+), 0 deletions(-) diff --git a/composite/compinit.c b/composite/compinit.c index 159f7c2..b869a97 100644 --- a/composite/compinit.c +++ b/composite/compinit.c @@ -78,6 +78,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); @@ -159,6 +161,25 @@ compBlockHandler (int i, pScreen->BlockHandler = compBlockHandler; } +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 */ @@ -393,6 +414,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); diff --git a/composite/compint.h b/composite/compint.h index 9ba5dd0..bf4b3cc 100644 --- a/composite/compint.h +++ b/composite/compint.h @@ -160,6 +160,7 @@ typedef struct _CompScreen { Window overlayWid; CompOverlayClientPtr pOverlayClients; + GetImageProcPtr GetImage; } CompScreenRec, *CompScreenPtr; extern DevPrivateKeyRec CompScreenPrivateKeyRec; -- 1.7.2.2 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
