Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        ecompmgr.c 


Log Message:
This might fix some X-server crashes.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/ecompmgr.c,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -3 -r1.46 -r1.47
--- ecompmgr.c  24 Jul 2005 15:26:35 -0000      1.46
+++ ecompmgr.c  24 Jul 2005 20:00:27 -0000      1.47
@@ -149,6 +149,7 @@
    char                use_pixmap;
    EObj               *eo_first;
    EObj               *eo_last;
+   XserverRegion       rgn_screen;
 } Mode_compmgr;
 
 static Picture      rootPicture;
@@ -210,6 +211,18 @@
 }
 
 static void
+ERegionLimit(XserverRegion rgn)
+{
+   XserverRegion       screen;
+
+   screen = Mode_compmgr.rgn_screen;
+   if (screen == None)
+      Mode_compmgr.rgn_screen = screen = ERegionCreate(0, 0, VRoot.w, VRoot.h);
+
+   XFixesIntersectRegion(disp, rgn, rgn, screen);
+}
+
+static void
 ERegionShow(const char *txt, XserverRegion rgn)
 {
    int                 i, nr;
@@ -1539,6 +1552,7 @@
          case WINDOW_SOLID:
             D2printf(" * solid pict=%#lx d=%d l=%d\n",
                      cw->picture, eo->desk, eo->ilayer);
+            ERegionLimit(region);
             XFixesSetPictureClipRegion(dpy, pbuf, 0, 0, region);
             XRenderComposite(dpy, PictOpSrc, cw->picture, None, pbuf,
                              0, 0, 0, 0, x + cw->rcx, y + cw->rcy, cw->rcw,
@@ -1557,6 +1571,7 @@
          case WINDOW_ARGB:
             D2printf(" * trans pict=%#lx d=%d l=%d\n",
                      cw->picture, eo->desk, eo->ilayer);
+            ERegionLimit(cw->clip);
             XFixesSetPictureClipRegion(dpy, pbuf, 0, 0, cw->clip);
             ECompMgrCheckAlphaMask(cw);
             XRenderComposite(dpy, PictOpOver, cw->picture, cw->alphaPict, pbuf,
@@ -1576,6 +1591,7 @@
                                                     (double)cw->opacity /
                                                     OPAQUE * 0.3, 0, 0, 0);
             ERegionSubtractOffset(cw->clip, x, y, cw->borderSize);
+            ERegionLimit(cw->clip);
             XFixesSetPictureClipRegion(dpy, pbuf, 0, 0, cw->clip);
             XRenderComposite(dpy, PictOpOver,
                              cw->shadowPict ? cw->
@@ -1590,6 +1606,7 @@
                break;
 
             ERegionSubtractOffset(cw->clip, x, y, cw->borderSize);
+            ERegionLimit(cw->clip);
             XFixesSetPictureClipRegion(dpy, pbuf, 0, 0, cw->clip);
             XRenderComposite(dpy, PictOpOver, blackPicture, cw->shadow, pbuf,
                              0, 0, 0, 0,
@@ -1648,6 +1665,7 @@
    /* Repaint background, clipped by damage region and opaque windows */
    pict = DeskBackgroundPictureGet(d);
    D1printf("ECompMgrRepaint desk picture=%#lx\n", pict);
+   ERegionLimit(region);
    XFixesSetPictureClipRegion(dpy, pbuf, 0, 0, region);
    XRenderComposite(dpy, PictOpSrc, pict, None, pbuf,
                    0, 0, 0, 0, 0, 0, VRoot.w, VRoot.h);
@@ -1658,6 +1676,7 @@
 
    if (pbuf != rootPicture)
      {
+       ERegionLimit(allDamage);
        XFixesSetPictureClipRegion(dpy, pbuf, 0, 0, allDamage);
        XRenderComposite(dpy, PictOpSrc, pbuf, None, rootPicture,
                         0, 0, 0, 0, 0, 0, VRoot.w, VRoot.h);
@@ -1676,15 +1695,15 @@
    D1printf("ECompMgrRootConfigure root\n");
    if (ev->xconfigure.window == VRoot.win)
      {
-       if (rootBuffer)
+       if (rootBuffer != None)
          {
             XRenderFreePicture(dpy, rootBuffer);
             rootBuffer = None;
          }
-#if 0                          /* Should be handled elsewhere */
-       VRoot.w = ev->xconfigure.width;
-       VRoot.h = ev->xconfigure.height;
-#endif
+
+       if (Mode_compmgr.rgn_screen != None)
+          XFixesDestroyRegion(disp, Mode_compmgr.rgn_screen);
+       Mode_compmgr.rgn_screen = None;
      }
    return;
 }
@@ -1889,10 +1908,14 @@
        Efree(lst);
      }
 
-   if (allDamage)
+   if (allDamage != None)
       XFixesDestroyRegion(disp, allDamage);
    allDamage = None;
 
+   if (Mode_compmgr.rgn_screen != None)
+      XFixesDestroyRegion(disp, Mode_compmgr.rgn_screen);
+   Mode_compmgr.rgn_screen = None;
+
    if (Conf_compmgr.mode == ECM_MODE_ROOT)
       XCompositeUnredirectSubwindows(disp, VRoot.win, CompositeRedirectManual);
 




-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to