Sophie

Sophie

distrib > Mandriva > 2009.0 > i586 > by-pkgid > d18d88a137ccea2f0522e89790d33970 > files > 5

compiz-0.7.8-2mdv2009.0.src.rpm

From 50f47e4edf583fc35e3db77209d6d91dc3a5a761 Mon Sep 17 00:00:00 2001
From: Erkin Bahceci <erkinbah@gmail.com>
Date: Wed, 24 Sep 2008 18:49:44 -0500
Subject: [PATCH] [PATCH] Don't damage window region on minimize/shade ending.

Slightly improves performance by not damaging the full window region
at the end of minimize and shade animations.
---
 plugins/minimize.c |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/plugins/minimize.c b/plugins/minimize.c
index 1f8a614..a517fb0 100644
--- a/plugins/minimize.c
+++ b/plugins/minimize.c
@@ -76,6 +76,8 @@ typedef struct _MinWindow {
     Region region;
 
     int unmapCnt;
+
+    Bool ignoreDamage;
 } MinWindow;
 
 #define GET_MIN_DISPLAY(d)					 \
@@ -330,11 +332,13 @@ minPreparePaintScreen (CompScreen *s,
 		    {
 			mw->state = mw->newState;
 
+			mw->ignoreDamage = TRUE;
 			while (mw->unmapCnt)
 			{
 			    unmapWindow (w);
 			    mw->unmapCnt--;
 			}
+			mw->ignoreDamage = FALSE;
 		    }
 		}
 		else if (mw->region && w->damaged)
@@ -353,11 +357,13 @@ minPreparePaintScreen (CompScreen *s,
 			    {
 				mw->shade = 0;
 
+				mw->ignoreDamage = TRUE;
 				while (mw->unmapCnt)
 				{
 				    unmapWindow (w);
 				    mw->unmapCnt--;
 				}
+				mw->ignoreDamage = FALSE;
 			    }
 			}
 		    }
@@ -555,11 +561,13 @@ minHandleEvent (CompDisplay *d,
 	    if (mw->region)
 		w->height = 0;
 
+	    mw->ignoreDamage = TRUE;
 	    while (mw->unmapCnt)
 	    {
 		unmapWindow (w);
 		mw->unmapCnt--;
 	    }
+	    mw->ignoreDamage = FALSE;
 	}
 	break;
     case UnmapNotify:
@@ -670,6 +678,9 @@ minDamageWindowRect (CompWindow *w,
     MIN_SCREEN (w->screen);
     MIN_WINDOW (w);
 
+    if (mw->ignoreDamage)
+	return TRUE;
+
     if (initial)
     {
 	if (mw->state == IconicState)
@@ -890,6 +901,8 @@ minInitWindow (CompPlugin *p,
 
     mw->unmapCnt = 0;
 
+    mw->ignoreDamage = FALSE;
+
     if (w->state & CompWindowStateHiddenMask)
     {
 	if (w->shaded)
@@ -923,8 +936,10 @@ minFiniWindow (CompPlugin *p,
 {
     MIN_WINDOW (w);
 
+    mw->ignoreDamage = TRUE;
     while (mw->unmapCnt--)
 	unmapWindow (w);
+    mw->ignoreDamage = FALSE;
 
     if (mw->region)
 	XDestroyRegion (mw->region);
-- 
1.6.0.2