From 0fbbdb37c87b5824729f65c7fbac05223024fd27 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Wed, 22 Oct 2014 13:19:18 -0400 Subject: [PATCH] composite: Wrap GetSpans GetSpans should flush composition from children to parent, just like GetImage and SourceValidate. Fortunately no one is likely to have noticed, since to hit this you're already deep into failure town. Signed-off-by: Adam Jackson Reviewed-by: Keith Packard Signed-off-by: Keith Packard --- composite/compinit.c | 19 +++++++++++++++++++ composite/compint.h | 1 + 2 files changed, 20 insertions(+) diff --git a/composite/compinit.c b/composite/compinit.c index 111c16e5db..10433a1f75 100644 --- a/composite/compinit.c +++ b/composite/compinit.c @@ -78,6 +78,7 @@ compCloseScreen(ScreenPtr pScreen) pScreen->PositionWindow = cs->PositionWindow; pScreen->GetImage = cs->GetImage; + pScreen->GetSpans = cs->GetSpans; pScreen->SourceValidate = cs->SourceValidate; free(cs); @@ -150,6 +151,21 @@ compGetImage(DrawablePtr pDrawable, pScreen->GetImage = compGetImage; } +static void +compGetSpans(DrawablePtr pDrawable, int wMax, DDXPointPtr ppt, int *pwidth, + int nspans, char *pdstStart) +{ + ScreenPtr pScreen = pDrawable->pScreen; + CompScreenPtr cs = GetCompScreen(pScreen); + + pScreen->GetSpans = cs->GetSpans; + if (pDrawable->type == DRAWABLE_WINDOW) + compPaintChildrenToWindow((WindowPtr) pDrawable); + (*pScreen->GetSpans) (pDrawable, wMax, ppt, pwidth, nspans, pdstStart); + cs->GetSpans = pScreen->GetSpans; + pScreen->GetSpans = compGetSpans; +} + static void compSourceValidate(DrawablePtr pDrawable, int x, int y, @@ -432,6 +448,9 @@ compScreenInit(ScreenPtr pScreen) cs->GetImage = pScreen->GetImage; pScreen->GetImage = compGetImage; + cs->GetSpans = pScreen->GetSpans; + pScreen->GetSpans = compGetSpans; + cs->SourceValidate = pScreen->SourceValidate; pScreen->SourceValidate = compSourceValidate; diff --git a/composite/compint.h b/composite/compint.h index 56b76c5403..f06b846cb1 100644 --- a/composite/compint.h +++ b/composite/compint.h @@ -168,6 +168,7 @@ typedef struct _CompScreen { CompOverlayClientPtr pOverlayClients; GetImageProcPtr GetImage; + GetSpansProcPtr GetSpans; SourceValidateProcPtr SourceValidate; } CompScreenRec, *CompScreenPtr;