diff options
author | Ville Syrjälä <ville.syrjala@nokia.com> | 2011-05-06 18:19:34 +0300 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2011-08-03 20:46:36 -0700 |
commit | 9504caf1c3243e3ab2eb7126bc2bb876a8f89918 (patch) | |
tree | 9408c3724112841c951699ac9c9e862be02f2fb3 | |
parent | f1d75f3b742231c4c09f13d7a22ed920014cb5ef (diff) |
composite: Inhibit window background paint with manual subwindow redirection
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ä <ville.syrjala@nokia.com>
Reviewed-by: Owen Taylor <otaylor@fishsoup.net>
Reviewed-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r-- | composite/compalloc.c | 2 | ||||
-rw-r--r-- | include/windowstr.h | 1 | ||||
-rw-r--r-- | mi/miexpose.c | 4 |
3 files changed, 7 insertions, 0 deletions
diff --git a/composite/compalloc.c b/composite/compalloc.c index 841b2dc11..f00bf4eb0 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 4a7a0f488..222de31dc 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 94258b864..0f1ebe59c 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; |