diff options
author | Michel Dänzer <michel.daenzer@amd.com> | 2017-02-07 17:38:23 +0900 |
---|---|---|
committer | Adam Jackson <ajax@redhat.com> | 2017-02-23 14:55:00 -0500 |
commit | 04c72d3c30623e360fd0bd37ed559915b93467f4 (patch) | |
tree | 2053c8189f237058ce67c20d328c357b3777718e | |
parent | 5c1dd4eba833ecf4ea789c8319b4e25ea1e1fab9 (diff) |
damage: Validate source pictures bound to windows before unwrapping
The lower layers also do this, but no damage may be reported there,
since we unwrap before calling down.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99220
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 38696ea56854e055c31bd2730adfc7c39aa115b0)
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | miext/damage/damage.c | 10 |
2 files changed, 11 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac index b0daff97f..770c3e626 100644 --- a/configure.ac +++ b/configure.ac @@ -1844,7 +1844,7 @@ if test "x$XNEST" = xyes; then if test "x$have_xnest" = xno; then AC_MSG_ERROR([Xnest build explicitly requested, but required modules not found.]) fi - XNEST_LIBS="$FB_LIB $FIXES_LIB $MI_LIB $XEXT_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $DRI3_LIB $PRESENT_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $MAIN_LIB $DIX_LIB $OS_LIB" + XNEST_LIBS="$FB_LIB $FIXES_LIB $MI_LIB $XEXT_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $DAMAGE_LIB $DRI3_LIB $PRESENT_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $RENDER_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $MAIN_LIB $DIX_LIB $OS_LIB" XNEST_SYS_LIBS="$XNESTMODULES_LIBS $GLX_SYS_LIBS" AC_SUBST([XNEST_LIBS]) AC_SUBST([XNEST_SYS_LIBS]) diff --git a/miext/damage/damage.c b/miext/damage/damage.c index d6a36142d..2fae03fc2 100644 --- a/miext/damage/damage.c +++ b/miext/damage/damage.c @@ -34,6 +34,7 @@ #include <X11/fonts/fontstruct.h> #include <X11/fonts/libxfont2.h> #include "mi.h" +#include "mipict.h" #include "regionstr.h" #include "globals.h" #include "gcstruct.h" @@ -499,6 +500,15 @@ damageComposite(CARD8 op, if (BOX_NOT_EMPTY(box)) damageDamageBox(pDst->pDrawable, &box, pDst->subWindowMode); } + /* + * Validating a source picture bound to a window may trigger other + * composite operations. Do it before unwrapping to make sure damage + * is reported correctly. + */ + if (pSrc->pDrawable && WindowDrawable(pSrc->pDrawable->type)) + miCompositeSourceValidate(pSrc); + if (pMask && pMask->pDrawable && WindowDrawable(pMask->pDrawable->type)) + miCompositeSourceValidate(pMask); unwrap(pScrPriv, ps, Composite); (*ps->Composite) (op, pSrc, |