diff options
author | Ville Syrjälä <ville.syrjala@nokia.com> | 2011-01-05 20:41:07 +0200 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2011-01-05 11:57:04 -0800 |
commit | 84154954db54696d4661eb8d0a6014cdbff3c91f (patch) | |
tree | 17d57230419475fc0f007b082f8ee9ed447f6fac /composite/compinit.c | |
parent | a5dc3531e14589ac473cea482944d2d67517aabd (diff) |
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>
Diffstat (limited to 'composite/compinit.c')
-rw-r--r-- | composite/compinit.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/composite/compinit.c b/composite/compinit.c index 276ed75f8..e1a765684 100644 --- a/composite/compinit.c +++ b/composite/compinit.c @@ -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); |