[PATCH 2/4] composite: Support updating an arbitrary subtree

ville.syrjala at nokia.com ville.syrjala at nokia.com
Wed Dec 29 05:04:29 PST 2010


From: Ville Syrjälä <ville.syrjala at nokia.com>

Rename compScreenUpdate to compChildrenUpdate, and pass a window as
the parameter. This allows an arbitrary subtree to be updated, instead
of having to update all the windows. This will be used to make sure
all the children have been updated when the parent window contents need
to be accessed in IncludeInferios sub-window mode.

Signed-off-by: Ville Syrjälä <ville.syrjala at nokia.com>
---
 composite/compinit.c |   19 ++++++++++++-------
 1 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/composite/compinit.c b/composite/compinit.c
index 159f7c2..8c98a9d 100644
--- a/composite/compinit.c
+++ b/composite/compinit.c
@@ -131,15 +131,20 @@ compChangeWindowAttributes(WindowPtr pWin, unsigned long mask)
 }
 
 static void
-compScreenUpdate (ScreenPtr pScreen)
+compChildrenUpdate (WindowPtr pWin)
 {
-    CompScreenPtr   cs = GetCompScreen (pScreen);
+    ScreenPtr pScreen = pWin->drawable.pScreen;
+    CompScreenPtr cs = GetCompScreen (pScreen);
 
     compCheckTree (pScreen);
-    if (cs->damaged)
-    {
-	compWindowUpdate (pScreen->root);
-	cs->damaged = FALSE;
+    if (cs->damaged) {
+	WindowPtr pChild;
+
+	for (pChild = pWin->lastChild; pChild; pChild = pChild->prevSib)
+	    compWindowUpdate (pChild);
+
+	if (pWin == pScreen->root)
+	    cs->damaged = FALSE;
     }
 }
 
@@ -153,7 +158,7 @@ compBlockHandler (int	    i,
     CompScreenPtr   cs = GetCompScreen (pScreen);
 
     pScreen->BlockHandler = cs->BlockHandler;
-    compScreenUpdate (pScreen);
+    compChildrenUpdate (pScreen->root);
     (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
     cs->BlockHandler = pScreen->BlockHandler;
     pScreen->BlockHandler = compBlockHandler;
-- 
1.7.2.2



More information about the xorg-devel mailing list