Enlightenment CVS committal Author : kwo Project : e16 Module : e
Dir : e16/e/src Modified Files: ecompmgr.c Log Message: Avoid some screen updates due to invisible object damage. =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/ecompmgr.c,v retrieving revision 1.48 retrieving revision 1.49 diff -u -3 -r1.48 -r1.49 --- ecompmgr.c 31 Jul 2005 18:26:42 -0000 1.48 +++ ecompmgr.c 6 Aug 2005 10:31:35 -0000 1.49 @@ -441,27 +441,9 @@ */ static void -ECompMgrDamageMerge(int desk, XserverRegion damage, int destroy) +ECompMgrDamageMerge(XserverRegion damage, int destroy) { - if (desk) - { - Desk *d = DeskGet(desk); - - if (EoGetX(d) != 0 || EoGetY(d) != 0) - { - if (!destroy) - { - XserverRegion region; - - region = XFixesCreateRegion(disp, 0, 0); - XFixesCopyRegion(disp, region, damage); - damage = region; - } - XFixesTranslateRegion(disp, damage, EoGetX(d), EoGetY(d)); - } - } - - if (allDamage) + if (allDamage != None) { if (EventDebug(EDBUG_TYPE_COMPMGR3)) ERegionShow("ECompMgrDamageMerge add:", damage); @@ -485,9 +467,40 @@ } static void +ECompMgrDamageMergeObject(EObj * eo, XserverRegion damage, int destroy) +{ + Desk *d = DeskGet(eo->desk); + + if (d && !d->viewable && eo->ilayer < 512) + { + if (destroy) + XFixesDestroyRegion(disp, damage); + return; + } + + if (eo->desk > 0) + { + if (EoGetX(d) != 0 || EoGetY(d) != 0) + { + if (!destroy) + { + XserverRegion region; + + region = XFixesCreateRegion(disp, 0, 0); + XFixesCopyRegion(disp, region, damage); + damage = region; + } + XFixesTranslateRegion(disp, damage, EoGetX(d), EoGetY(d)); + } + } + + ECompMgrDamageMerge(damage, destroy); +} + +static void ECompMgrDamageAll(void) { - ECompMgrDamageMerge(0, ERegionCreate(0, 0, VRoot.w, VRoot.h), 1); + ECompMgrDamageMerge(ERegionCreate(0, 0, VRoot.w, VRoot.h), 1); } #if ENABLE_SHADOWS @@ -920,7 +933,7 @@ if ((what & (INV_GEOM | INV_SHADOW)) && cw->extents != None) { #if 0 /* FIXME - Not necessary? */ - ECompMgrDamageMerge(cw->extents, 1); + ECompMgrDamageMergeObject(eo, cw->extents, 1); #else XFixesDestroyRegion(dpy, cw->extents); #endif @@ -945,7 +958,7 @@ if (eo->shown) /* FIXME - ??? */ /* Extents may be unchanged, however, we must repaint */ if (cw->extents != None) - ECompMgrDamageMerge(eo->desk, cw->extents, 0); + ECompMgrDamageMergeObject(eo, cw->extents, 0); /* Invalidate stuff changed by opacity */ ECompMgrWinInvalidate(eo, INV_OPACITY); @@ -983,7 +996,7 @@ #endif if (cw->extents == None) cw->extents = win_extents(disp, eo); - ECompMgrDamageMerge(eo->desk, cw->extents, 0); + ECompMgrDamageMergeObject(eo, cw->extents, 0); ECompMgrWinSetPicts(eo); } @@ -998,7 +1011,7 @@ cw->visible = 0; if (cw->extents != None) - ECompMgrDamageMerge(eo->desk, cw->extents, 0); + ECompMgrDamageMergeObject(eo, cw->extents, 0); #if 0 /* FIXME - Invalidate stuff? */ ECompMgrWinInvalidate(eo, INV_SIZE); @@ -1168,7 +1181,7 @@ #endif if (damage != None) - ECompMgrDamageMerge(eo->desk, damage, 1); + ECompMgrDamageMergeObject(eo, damage, 1); } static void @@ -1208,7 +1221,7 @@ /* Invalidate old window region */ if (EventDebug(EDBUG_TYPE_COMPMGR3)) ERegionShow("old-extents:", cw->extents); - ECompMgrDamageMerge(eo->desk, cw->extents, change_xy); + ECompMgrDamageMergeObject(eo, cw->extents, change_xy); if (change_xy) { @@ -1217,7 +1230,7 @@ /* Find new window region */ cw->extents = win_extents(disp, eo); - ECompMgrDamageMerge(desk, cw->extents, 0); + ECompMgrDamageMergeObject(eo, cw->extents, 0); } } @@ -1236,7 +1249,7 @@ if (cw->extents != None) { - ECompMgrDamageMerge(eo->desk, cw->extents, 1); + ECompMgrDamageMergeObject(eo, cw->extents, 1); cw->extents = None; } @@ -1252,7 +1265,7 @@ return; if (cw->extents != None) - ECompMgrDamageMerge(eo->desk, cw->extents, 0); + ECompMgrDamageMergeObject(eo, cw->extents, 0); } void @@ -1379,7 +1392,7 @@ } #endif } - ECompMgrDamageMerge(eo->desk, parts, 1); + ECompMgrDamageMergeObject(eo, parts, 1); } /* Ensure that the blend mask is up to date */ @@ -1749,7 +1762,7 @@ region = XFixesCreateRegion(dpy, expose_rects, n_expose); - ECompMgrDamageMerge(0, region, 1); + ECompMgrDamageMerge(region, 1); n_expose = 0; } } ------------------------------------------------------- SF.Net email is Sponsored by the Better Software Conference & EXPO September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs