[PATCH xserver] composite: Inhibit window background paint with manual subwindow redirection
ville.syrjala at nokia.com
ville.syrjala at nokia.com
Fri May 6 08:19:34 PDT 2011
From: Ville Syrjälä <ville.syrjala at nokia.com>
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 at nokia.com>
---
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
More information about the xorg-devel
mailing list