diff options
author | Ville Syrjälä <ville.syrjala@nokia.com> | 2011-01-05 20:41:08 +0200 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2011-01-05 11:57:25 -0800 |
commit | b89e6dbdfbb50e3b5bc7fcb7eccc397c467c92f8 (patch) | |
tree | afe887db756dd2271f177f557c586f50067c7726 /composite | |
parent | 84154954db54696d4661eb8d0a6014cdbff3c91f (diff) |
composite: Add SourceValidate wrapper
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ä <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>
Diffstat (limited to 'composite')
-rw-r--r-- | composite/compinit.c | 22 | ||||
-rw-r--r-- | composite/compint.h | 1 |
2 files changed, 23 insertions, 0 deletions
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; |