From: Ville Syrjälä <[email protected]> The composite extension spec says that window background painting should be inhibited when the subwindow redirection mode is set to manual.
This eliminates the ugly flashing effect when compiz unredirects a fullscreen window. Signed-off-by: Ville Syrjälä <[email protected]> --- composite/compalloc.c | 2 ++ include/windowstr.h | 1 + mi/miexpose.c | 4 ++++ 3 files changed, 7 insertions(+), 0 deletions(-) diff --git a/composite/compalloc.c b/composite/compalloc.c index 5c27631..60244d1 100644 --- a/composite/compalloc.c +++ b/composite/compalloc.c @@ -434,6 +434,7 @@ compRedirectSubwindows (ClientPtr pClient, WindowPtr pWin, int update) * critical output */ DamageExtSetCritical (pClient, TRUE); + pWin->inhibitBGPaint = TRUE; } return Success; } @@ -466,6 +467,7 @@ compFreeClientSubwindows (WindowPtr pWin, XID id) */ DamageExtSetCritical (pClient, FALSE); csw->update = CompositeRedirectAutomatic; + pWin->inhibitBGPaint = FALSE; if (pWin->mapped) (*pWin->drawable.pScreen->ClearToBackground)(pWin, 0, 0, 0, 0, TRUE); } diff --git a/include/windowstr.h b/include/windowstr.h index 4a7a0f4..222de31 100644 --- a/include/windowstr.h +++ b/include/windowstr.h @@ -169,6 +169,7 @@ typedef struct _Window { #endif #ifdef COMPOSITE unsigned damagedDescendants:1; /* some descendants are damaged */ + unsigned inhibitBGPaint:1; /* paint the background? */ #endif } WindowRec; diff --git a/mi/miexpose.c b/mi/miexpose.c index 94258b8..0f1ebe5 100644 --- a/mi/miexpose.c +++ b/mi/miexpose.c @@ -575,6 +575,10 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what) tile_x_off = pWin->drawable.x - draw_x_off; tile_y_off = pWin->drawable.y - draw_y_off; fill = pWin->background; +#ifdef COMPOSITE + if (pWin->inhibitBGPaint) + return; +#endif switch (pWin->backgroundState) { case None: return; -- 1.7.3.4 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
