From b89e6dbdfbb50e3b5bc7fcb7eccc397c467c92f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= Date: Wed, 5 Jan 2011 20:41:08 +0200 Subject: [PATCH] composite: Add SourceValidate wrapper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When SourceValidate is performed on a window with IncludeInferiors sub-window mode, 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ä Reviewed-by: Keith Packard Reviewed-by: Daniel Stone Signed-off-by: Keith Packard --- composite/compinit.c | 22 ++++++++++++++++++++++ composite/compint.h | 1 + 2 files changed, 23 insertions(+) diff --git a/composite/compinit.c b/composite/compinit.c index e1a765684..74689be1f 100644 --- a/composite/compinit.c +++ b/composite/compinit.c @@ -78,6 +78,7 @@ compCloseScreen (int index, ScreenPtr pScreen) pScreen->PositionWindow = cs->PositionWindow; pScreen->GetImage = cs->GetImage; + pScreen->SourceValidate = cs->SourceValidate; free(cs); dixSetPrivate(&pScreen->devPrivates, CompScreenPrivateKey, NULL); @@ -150,6 +151,24 @@ compGetImage (DrawablePtr pDrawable, pScreen->GetImage = compGetImage; } +static void compSourceValidate(DrawablePtr pDrawable, + int x, int y, + int width, int height, + unsigned int subWindowMode) +{ + ScreenPtr pScreen = pDrawable->pScreen; + CompScreenPtr cs = GetCompScreen (pScreen); + + pScreen->SourceValidate = cs->SourceValidate; + if (pDrawable->type == DRAWABLE_WINDOW && subWindowMode == IncludeInferiors) + compScreenUpdate (pScreen); + if (pScreen->SourceValidate) + (*pScreen->SourceValidate) (pDrawable, x, y, width, height, + subWindowMode); + cs->SourceValidate = pScreen->SourceValidate; + pScreen->SourceValidate = compSourceValidate; +} + /* * Add alternate visuals -- always expose an ARGB32 and RGB24 visual */ @@ -385,6 +404,9 @@ compScreenInit (ScreenPtr pScreen) cs->GetImage = pScreen->GetImage; pScreen->GetImage = compGetImage; + cs->SourceValidate = pScreen->SourceValidate; + pScreen->SourceValidate = compSourceValidate; + dixSetPrivate(&pScreen->devPrivates, CompScreenPrivateKey, cs); RegisterRealChildHeadProc(CompositeRealChildHead); diff --git a/composite/compint.h b/composite/compint.h index c188bf1c5..681f651e9 100644 --- a/composite/compint.h +++ b/composite/compint.h @@ -160,6 +160,7 @@ typedef struct _CompScreen { CompOverlayClientPtr pOverlayClients; GetImageProcPtr GetImage; + SourceValidateProcPtr SourceValidate; } CompScreenRec, *CompScreenPtr; extern DevPrivateKeyRec CompScreenPrivateKeyRec;