summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@nokia.com>2011-05-06 18:19:34 +0300
committerKeith Packard <keithp@keithp.com>2011-08-03 20:46:36 -0700
commit9504caf1c3243e3ab2eb7126bc2bb876a8f89918 (patch)
tree9408c3724112841c951699ac9c9e862be02f2fb3
parentf1d75f3b742231c4c09f13d7a22ed920014cb5ef (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.c2
-rw-r--r--include/windowstr.h1
-rw-r--r--mi/miexpose.c4
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;