Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        ecompmgr.c ecompmgr.h eobj.c 


Log Message:
Fix various composite manager bugs (hidden damage, shape during fadeout, fading 
while sliding).
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/ecompmgr.c,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -3 -r1.69 -r1.70
--- ecompmgr.c  4 Oct 2005 16:42:01 -0000       1.69
+++ ecompmgr.c  4 Oct 2005 22:08:10 -0000       1.70
@@ -175,6 +175,9 @@
    XserverRegion       rgn_screen;
 } Mode_compmgr;
 
+#define _ECM_SET_CLIP_CHANGED()  Mode_compmgr.reorder = 1
+#define _ECM_SET_STACK_CHANGED() Mode_compmgr.reorder = 1
+
 static Picture      rootPicture;
 static Picture      rootBuffer;
 
@@ -191,7 +194,11 @@
 static void         ECompMgrHandleRootEvent(XEvent * ev, void *prm);
 static void         ECompMgrHandleWindowEvent(XEvent * ev, void *prm);
 static void         doECompMgrWinFade(int val, void *data);
+static void         ECompMgrWinSetPicts(EObj * eo);
 static void         ECompMgrWinFadeOutEnd(EObj * eo);
+static int          ECompMgrDetermineOrder(EObj * const *lst, int num,
+                                          EObj ** first, EObj ** last,
+                                          Desk * dsk, XserverRegion clip);
 
 /*
  * Visuals
@@ -283,6 +290,18 @@
 }
 
 static void
+ERegionIntersect(XserverRegion dst, XserverRegion src)
+{
+   XFixesIntersectRegion(disp, dst, dst, src);
+}
+
+static void
+ERegionUnion(XserverRegion dst, XserverRegion src)
+{
+   XFixesUnionRegion(disp, dst, dst, src);
+}
+
+static void
 ERegionLimit(XserverRegion rgn)
 {
    XserverRegion       screen;
@@ -292,13 +311,7 @@
       Mode_compmgr.rgn_screen = screen =
         ERegionCreateRect(0, 0, VRoot.w, VRoot.h);
 
-   XFixesIntersectRegion(disp, rgn, rgn, screen);
-}
-
-static void
-ERegionUnion(XserverRegion dst, XserverRegion src)
-{
-   XFixesUnionRegion(disp, dst, dst, src);
+   ERegionIntersect(rgn, screen);
 }
 
 static void
@@ -338,6 +351,12 @@
    int                 i, nr;
    XRectangle         *pr;
 
+   if (rgn == None)
+     {
+       Eprintf(" - region: %s %#lx is None\n", txt, rgn);
+       return;
+     }
+
    pr = XFixesFetchRegion(disp, rgn, &nr);
    if (!pr || nr <= 0)
      {
@@ -577,6 +596,7 @@
 static void
 ECompMgrDamageMergeObject(EObj * eo, XserverRegion damage, int destroy)
 {
+   ECmWinInfo         *cw = eo->cmhook;
    Desk               *dsk = eo->desk;
 
    if (damage == None)
@@ -589,17 +609,34 @@
        return;
      }
 
-   if (dsk->num > 0)
+   if (Mode_compmgr.reorder)
+      ECompMgrDetermineOrder(NULL, 0, &Mode_compmgr.eo_first,
+                            &Mode_compmgr.eo_last, DeskGet(0), None);
+
+   if (cw->clip == None)
      {
-       if (EoGetX(dsk) != 0 || EoGetY(dsk) != 0)
-         {
-            if (!destroy)
-               damage = ERegionClone(damage);
-            ERegionTranslate(damage, EoGetX(dsk), EoGetY(dsk));
-         }
+       /* Clip may be None if window is not in paint list */
+       if (destroy)
+          ERegionDestroy(damage);
+       return;
      }
 
-   ECompMgrDamageMerge(damage, destroy);
+   if (!destroy)
+      damage = ERegionClone(damage);
+#if 0                          /* FIXME - Remove */
+   ERegionShow("ECompMgrDamageMergeObject damage A:", damage);
+   ERegionShow("ECompMgrDamageMergeObject clip:", cw->clip);
+#endif
+   if (eo->type != EOBJ_TYPE_DESK)
+      ERegionIntersect(damage, cw->clip);
+#if 0                          /* FIXME - Remove */
+   ERegionShow("ECompMgrDamageMergeObject damage B:", damage);
+#endif
+
+   if (dsk->num > 0 && (EoGetX(dsk) != 0 || EoGetY(dsk) != 0))
+      ERegionTranslate(damage, EoGetX(dsk), EoGetY(dsk));
+
+   ECompMgrDamageMerge(damage, 1);
 }
 
 static void
@@ -949,6 +986,17 @@
    if (EventDebug(EDBUG_TYPE_COMPMGR3))
       ERegionShow("extents", rgn);
 
+#if 0                          /* FIXME - Set picture clip region */
+   if (cw->shadow)
+     {
+       XserverRegion       clip;
+
+       clip = ERegionClone(cw->extents);
+       ERegionSubtractOffset(clip, 0, 0, cw->shape);
+       XFixesSetPictureClipRegion(disp, cw->shadow, 0, 0, clip);
+       ERegionDestroy(clip);
+     }
+#endif
    return rgn;
 }
 
@@ -1067,8 +1115,7 @@
 
    D1printf("ECompMgrWinSetOpacity: %#lx opacity=%#x\n", eo->win, cw->opacity);
 
-   if (eo->shown || cw->fadeout)       /* FIXME - ??? */
-      /* Extents may be unchanged, however, we must repaint */
+   if (eo->shown || cw->fadeout)
       ECompMgrDamageMergeObject(eo, cw->extents, 0);
 
    /* Invalidate stuff changed by opacity */
@@ -1082,6 +1129,10 @@
       mode = WINDOW_TRANS;
    else
       mode = WINDOW_SOLID;
+
+   if (mode != cw->mode)
+      _ECM_SET_CLIP_CHANGED();
+
    cw->mode = mode;
 }
 
@@ -1192,6 +1243,7 @@
 #endif
    cw->fadeout = 1;
    ECompMgrWinInvalidate(eo, INV_PICTURE);
+   ECompMgrWinSetPicts(eo);
    ECompMgrWinFade(eo, cw->opacity, 0x10000000);
 }
 
@@ -1206,6 +1258,7 @@
    cw->fadeout = 0;
    ECompMgrWinInvalidate(eo, INV_PIXMAP | INV_PICTURE);
    ECompMgrDamageMergeObject(eo, cw->extents, 0);
+   _ECM_SET_CLIP_CHANGED();
 }
 
 void
@@ -1216,7 +1269,7 @@
    if (!cw)
       return;
 
-   if (Conf_compmgr.fading.enable && eo->fade)
+   if (eo->shown && Conf_compmgr.fading.enable && eo->fade)
       ECompMgrWinFade(eo, cw->opacity, opacity);
    else
       ECompMgrWinSetOpacity(eo, opacity);
@@ -1239,6 +1292,8 @@
 
    if (cw->extents == None)
       cw->extents = win_extents(eo);
+
+   _ECM_SET_STACK_CHANGED();
    ECompMgrDamageMergeObject(eo, cw->extents, 0);
 
    if (Conf_compmgr.fading.enable && eo->fade)
@@ -1257,7 +1312,10 @@
    if (Conf_compmgr.fading.enable && eo->fade)
       ECompMgrWinFadeOut(eo);
    else
-      ECompMgrWinInvalidate(eo, INV_PIXMAP);
+     {
+       _ECM_SET_STACK_CHANGED();
+       ECompMgrWinInvalidate(eo, INV_PIXMAP);
+     }
 }
 
 static void
@@ -1277,7 +1335,7 @@
        return;
      }
 
-   if (cw->pixmap == None &&
+   if (cw->pixmap == None && eo->shown &&
        (Mode_compmgr.use_pixmap || Conf_compmgr.fading.enable))
      {
        cw->pixmap = XCompositeNameWindowPixmap(disp, eo->win);
@@ -1292,6 +1350,8 @@
 
        if ((cw->pixmap && Mode_compmgr.use_pixmap) || (cw->fadeout))
           draw = cw->pixmap;
+       if (draw == None)
+          return;
 
        pictfmt = XRenderFindVisualFormat(disp, cw->a.visual);
        pa.subwindow_mode = IncludeInferiors;
@@ -1299,6 +1359,15 @@
                                           pictfmt, CPSubwindowMode, &pa);
        D2printf("ECompMgrWinSetPicts %#lx: Pict=%#lx (drawable=%#lx)\n",
                 eo->win, cw->picture, draw);
+
+       if (draw == cw->pixmap)
+         {
+            XserverRegion       clip;
+
+            clip = ERegionCreateFromWindow(eo->win);
+            XFixesSetPictureClipRegion(disp, cw->picture, 0, 0, clip);
+            ERegionDestroy(clip);
+         }
      }
 }
 
@@ -1375,7 +1444,7 @@
 ECompMgrWinMoveResize(EObj * eo, int change_xy, int change_wh, int change_bw)
 {
    ECmWinInfo         *cw = eo->cmhook;
-   XserverRegion       damage = None;
+   XserverRegion       damage;
    int                 invalidate;
 
    D1printf("ECompMgrWinMoveResize %#lx xy=%d wh=%d bw=%d\n",
@@ -1400,24 +1469,28 @@
      }
 
    /* Invalidate old window region */
-   damage = ERegionCreate();
-   if (cw->extents != None)
-      ERegionCopy(damage, cw->extents);
+   damage = cw->extents;
+   cw->extents = None;
    if (EventDebug(EDBUG_TYPE_COMPMGR3))
       ERegionShow("old-extents:", damage);
 
+#if 0                          /* FIXME - We shouldn't have to update clip if 
transparent */
+   if (cw->mode == WINDOW_UNREDIR || cw->mode == WINDOW_SOLID)
+#endif
+      _ECM_SET_CLIP_CHANGED();
    ECompMgrWinInvalidate(eo, invalidate);
 
-   /* Find new window region */
-   cw->extents = win_extents(eo);
-
-#if 1
-   /* Hmmm. Why if not changed? - To get shadows painted. */
    /* Invalidate new window region */
-   ERegionUnion(damage, cw->extents);
-#endif
-
-   ECompMgrDamageMergeObject(eo, damage, 1);
+   cw->extents = win_extents(eo);
+   if (damage != None)
+     {
+       ERegionUnion(damage, cw->extents);
+       ECompMgrDamageMergeObject(eo, damage, 1);
+     }
+   else
+     {
+       ECompMgrDamageMergeObject(eo, cw->extents, 0);
+     }
 }
 
 static void
@@ -1459,7 +1532,6 @@
    if (EventDebug(EDBUG_TYPE_COMPMGR3))
       ERegionShow("old-extents:", cw->extents);
    ECompMgrDamageMergeObject(eo, cw->extents, change_xy);
-
    if (change_xy)
      {
        cw->extents = None;
@@ -1467,8 +1539,9 @@
 
        /* Find new window region */
        cw->extents = win_extents(eo);
-       ECompMgrDamageMergeObject(eo, cw->extents, 0);
      }
+   _ECM_SET_STACK_CHANGED();
+   ECompMgrDamageMergeObject(eo, cw->extents, 0);
 }
 
 static void
@@ -1476,7 +1549,7 @@
 {
    D1printf("ECompMgrWinCirculate %#lx %#lx\n", ev->xany.window, eo->win);
 
-   /* FIXME - Check if stacking was changed */
+   _ECM_SET_STACK_CHANGED();
 }
 
 void
@@ -1489,22 +1562,30 @@
    ECompMgrDamageMergeObject(eo, cw->extents, 1);
    cw->extents = None;
 
+   _ECM_SET_CLIP_CHANGED();
    ECompMgrWinInvalidate(eo, INV_SIZE);
 }
 
 void
-ECompMgrWinChangeStacking(EObj * eo)
+ECompMgrWinRaise(EObj * eo)
 {
    ECmWinInfo         *cw = eo->cmhook;
 
-   D1printf("ECompMgrWinChangeStacking %#lx\n", eo->win);
+   D1printf("ECompMgrWinRaise %#lx\n", eo->win);
 
-#if 0                          /* FIXME - Remove? */
-   if (Conf_compmgr.shadows.mode == ECM_SHADOWS_OFF)
-      return;
-#endif
+   _ECM_SET_STACK_CHANGED();
+   ECompMgrDamageMergeObject(eo, cw->extents, 0);
+}
+
+void
+ECompMgrWinLower(EObj * eo)
+{
+   ECmWinInfo         *cw = eo->cmhook;
+
+   D1printf("ECompMgrWinLower %#lx\n", eo->win);
 
    ECompMgrDamageMergeObject(eo, cw->extents, 0);
+   _ECM_SET_STACK_CHANGED();
 }
 
 void
@@ -1534,7 +1615,9 @@
           XCompositeUnredirectWindow(disp, eo->win, CompositeRedirectManual);
      }
 
-   ECompMgrDamageMergeObject(eo, cw->extents, 0);
+   ECompMgrDamageMergeObject(eo, cw->extents, 1);
+   cw->extents = None;
+   _ECM_SET_STACK_CHANGED();
    ECompMgrWinInvalidate(eo, INV_ALL);
 
    if (!eo->gone)
@@ -1598,17 +1681,72 @@
                                          0, 0, 0);
 }
 
+static void
+ECompMgrWinDumpInfo(const char *txt, EObj * eo, XserverRegion rgn, int force)
+{
+   ECmWinInfo         *cw = eo->cmhook;
+
+   Eprintf("%s %#lx: %d,%d %dx%d: %s\n", txt, eo->win, eo->x, eo->y,
+          eo->w, eo->h, eo->name);
+   if (!cw)
+     {
+       Eprintf("Not managed\n");
+       return;
+     }
+
+   if (force || EventDebug(EDBUG_TYPE_COMPMGR3))
+     {
+       Eprintf(" - pict=%#lx pmap=%#lx\n", cw->picture, cw->pixmap);
+
+       ERegionShow("win extents", cw->extents);
+       ERegionShow("win shape  ", cw->shape);
+       ERegionShow("win clip   ", cw->clip);
+       ERegionShow("region", rgn);
+     }
+}
+
+static void
+ECompMgrDestroyClip(void)
+{
+   EObj               *eo, *const *lst;
+   ECmWinInfo         *cw;
+   int                 i, num;
+
+   lst = EobjListStackGet(&num);
+   for (i = 0; i < num; i++)
+     {
+       eo = lst[i];
+       cw = eo->cmhook;
+       if (!cw)
+          continue;
+       if (cw->clip != None)
+          ERegionDestroy(cw->clip);
+       cw->clip = None;
+     }
+}
+
 static int
-ECompMgrRepaintDetermineOrder(EObj * const *lst, int num, EObj ** first,
-                             EObj ** last, Desk * dsk)
+ECompMgrDetermineOrder(EObj * const *lst, int num, EObj ** first,
+                      EObj ** last, Desk * dsk, XserverRegion clip)
 {
    EObj               *eo, *eo_prev, *eo_first;
    int                 i, stop;
    ECmWinInfo         *cw;
 
-   D4printf("ECompMgrRepaintDetermineOrder %d\n", dsk->num);
+   D1printf("ECompMgrDetermineOrder %d\n", dsk->num);
    if (!lst)
       lst = EobjListStackGet(&num);
+   if (clip == None)
+     {
+       ECompMgrDestroyClip();
+       clip = ERegionCreateRect(0, 0, VRoot.w, VRoot.h);
+     }
+   else
+     {
+       clip = ERegionClone(clip);
+       if (EoGetX(dsk) != 0 || EoGetY(dsk) != 0)
+          ERegionTranslate(clip, -EoGetX(dsk), -EoGetY(dsk));
+     }
 
    /* Determine overall paint order, top to bottom */
    stop = 0;
@@ -1626,8 +1764,18 @@
        if ((!eo->shown && !cw->fading) || eo->desk != dsk)
           continue;
 
-       D4printf(" - %#lx desk=%d shown=%d\n", eo->win, eo->desk->num,
-                eo->shown);
+       /* Region of shaped window in screen coordinates */
+       if (cw->shape == None)
+          cw->shape = win_shape(eo);
+
+       /* Region of window in screen coordinates, including shadows */
+       if (cw->extents == None)
+          cw->extents = win_extents(eo);
+
+       cw->clip = ERegionClone(clip);
+
+       D4printf(" - %#lx desk=%d shown=%d fading=%d fadeout=%d\n", eo->win,
+                eo->desk->num, eo->shown, cw->fading, cw->fadeout);
 
        if (eo->type == EOBJ_TYPE_DESK)
          {
@@ -1638,7 +1786,7 @@
             if (!d->viewable)
                continue;
 
-            stop = ECompMgrRepaintDetermineOrder(lst, num, &eo1, &eo2, d);
+            stop = ECompMgrDetermineOrder(lst, num, &eo1, &eo2, d, clip);
             if (eo1)
               {
                  ec1 = eo1->cmhook;
@@ -1664,7 +1812,7 @@
           continue;
 
        D4printf
-          ("ECompMgrRepaintDetermineOrder hook in %d - %#lx desk=%d 
shown=%d\n",
+          ("ECompMgrDetermineOrder hook in %d - %#lx desk=%d shown=%d\n",
            dsk->num, eo->win, eo->desk->num, eo->shown);
 
        if (!eo_first)
@@ -1674,7 +1822,22 @@
           ((ECmWinInfo *) (eo_prev->cmhook))->next = eo;
        eo_prev = eo;
 
-       /*  FIXME - We should break when the repaint region (cw->clip) becomes 
empty */
+       switch (cw->mode)
+         {
+         case WINDOW_UNREDIR:
+         case WINDOW_SOLID:
+            D4printf("-   clip %#lx %#lx %d,%d %dx%d: %s\n", eo->win, cw->clip,
+                     eo->x, eo->y, eo->w, eo->h, eo->name);
+            ERegionSubtractOffset(clip, 0, 0, cw->shape);
+            break;
+
+         default:
+            D4printf("- noclip %#lx %#lx %d,%d %dx%d: %s\n", eo->win, cw->clip,
+                     eo->x, eo->y, eo->w, eo->h, eo->name);
+            break;
+         }
+
+       /*  FIXME - We should break when the clip region becomes empty */
        if (eo->type == EOBJ_TYPE_DESK && eo->x == 0 && eo->y == 0)
           stop = 1;
        if (stop)
@@ -1686,12 +1849,15 @@
    *first = eo_first;
    *last = eo_prev;
 
+   ERegionDestroy(clip);
+   Mode_compmgr.reorder = 0;
    return stop;
 }
 
 static void
 ECompMgrRepaintObj(Picture pbuf, XserverRegion region, EObj * eo, int mode)
 {
+   static XserverRegion clip = None;
    Display            *dpy = disp;
    ECmWinInfo         *cw;
    Desk               *dsk = eo->desk;
@@ -1699,35 +1865,42 @@
 
    cw = eo->cmhook;
 
-   D2printf("ECompMgrRepaintObj mode=%d %#lx %s\n", mode, eo->win, eo->name);
-
+#if 1                          /* FIXME - Remove? */
    if (!cw->shape)
       cw->shape = win_shape(eo);
-   if (EventDebug(EDBUG_TYPE_COMPMGR3))
-      ERegionShow("shape", cw->shape);
-
    if (!cw->extents)
       cw->extents = win_extents(eo);
-   if (EventDebug(EDBUG_TYPE_COMPMGR3))
-      ERegionShow("extents", cw->extents);
+#endif
+
+   if (clip == None)
+      clip = ERegionCreate();
 
    x = EoGetX(dsk);
    y = EoGetY(dsk);
 
+   ERegionCopy(clip, cw->clip);
+   if (x != 0 || y != 0)
+      ERegionTranslate(clip, x, y);
+   ERegionIntersect(clip, region);
+
    if (mode == 0)
      {
-       /* Painting opaque windows top down, updating clip regions. */
-
-       cw->clip = ERegionClone(region);
+       /* Painting opaque windows top down. */
+#if 0
+       if (ERegionIsEmpty(clip))
+         {
+            D2printf(" - Quit - repaint region is empty\n");
+            return;
+         }
+#endif
 
        switch (cw->mode)
          {
          case WINDOW_UNREDIR:
          case WINDOW_SOLID:
-            D2printf(" * solid pict=%#lx d=%d l=%d\n",
-                     cw->picture, eo->desk->num, eo->ilayer);
-            ERegionLimit(region);
-            XFixesSetPictureClipRegion(dpy, pbuf, 0, 0, region);
+            if (EventDebug(EDBUG_TYPE_COMPMGR2))
+               ECompMgrWinDumpInfo("ECompMgrRepaintObj solid", eo, clip, 0);
+            XFixesSetPictureClipRegion(dpy, pbuf, 0, 0, clip);
             XRenderComposite(dpy, PictOpSrc, cw->picture, None, pbuf,
                              0, 0, 0, 0, x + cw->rcx, y + cw->rcy, cw->rcw,
                              cw->rch);
@@ -1743,10 +1916,9 @@
          {
          case WINDOW_TRANS:
          case WINDOW_ARGB:
-            D2printf(" * trans pict=%#lx d=%d l=%d\n",
-                     cw->picture, eo->desk->num, eo->ilayer);
-            ERegionLimit(cw->clip);
-            XFixesSetPictureClipRegion(dpy, pbuf, 0, 0, cw->clip);
+            if (EventDebug(EDBUG_TYPE_COMPMGR2))
+               ECompMgrWinDumpInfo("ECompMgrRepaintObj trans", eo, clip, 0);
+            XFixesSetPictureClipRegion(dpy, pbuf, 0, 0, clip);
             ECompMgrCheckAlphaMask(cw);
             XRenderComposite(dpy, PictOpOver, cw->picture, cw->alphaPict, pbuf,
                              0, 0, 0, 0, x + cw->rcx, y + cw->rcy, cw->rcw,
@@ -1755,18 +1927,21 @@
          }
 
 #if ENABLE_SHADOWS
+       if (!eo->shadow)
+          return;
+
        switch (Conf_compmgr.shadows.mode)
          {
          case ECM_SHADOWS_OFF:
             break;
+
          case ECM_SHADOWS_SHARP:
             if (cw->opacity != OPAQUE && !cw->shadowPict)
                cw->shadowPict = EPictureCreateSolid(True,
                                                     (double)cw->opacity /
                                                     OPAQUE * 0.3, 0, 0, 0);
-            ERegionSubtractOffset(cw->clip, x, y, cw->shape);
-            ERegionLimit(cw->clip);
-            XFixesSetPictureClipRegion(dpy, pbuf, 0, 0, cw->clip);
+            ERegionSubtractOffset(clip, x, y, cw->shape);
+            XFixesSetPictureClipRegion(dpy, pbuf, 0, 0, clip);
             XRenderComposite(dpy, PictOpOver,
                              cw->shadowPict ? cw->
                              shadowPict : transBlackPicture, cw->picture, pbuf,
@@ -1775,13 +1950,13 @@
                              y + cw->rcy + cw->shadow_dy,
                              cw->shadow_width, cw->shadow_height);
             break;
+
          case ECM_SHADOWS_BLURRED:
             if (cw->shadow == None)
                break;
 
-            ERegionSubtractOffset(cw->clip, x, y, cw->shape);
-            ERegionLimit(cw->clip);
-            XFixesSetPictureClipRegion(dpy, pbuf, 0, 0, cw->clip);
+            ERegionSubtractOffset(clip, x, y, cw->shape);
+            XFixesSetPictureClipRegion(dpy, pbuf, 0, 0, clip);
             XRenderComposite(dpy, PictOpOver, blackPicture, cw->shadow, pbuf,
                              0, 0, 0, 0,
                              x + cw->rcx + cw->shadow_dx,
@@ -1790,9 +1965,6 @@
             break;
          }
 #endif
-
-       ERegionDestroy(cw->clip);
-       cw->clip = None;
      }
 }
 
@@ -1825,13 +1997,8 @@
 
    /* Do paint order list linking */
    if (Mode_compmgr.reorder)
-     {
-       ECompMgrRepaintDetermineOrder(NULL, 0, &Mode_compmgr.eo_first,
-                                     &Mode_compmgr.eo_last, dsk);
-#if 0                          /* Not yet */
-       Mode_compmgr.reorder = 0;
-#endif
-     }
+      ECompMgrDetermineOrder(NULL, 0, &Mode_compmgr.eo_first,
+                            &Mode_compmgr.eo_last, dsk, None);
 
    /* Paint opaque windows top down, adjusting clip regions */
    for (eo = Mode_compmgr.eo_first; eo;
@@ -1851,7 +2018,7 @@
 
    /* Paint trans windows and shadows bottom up */
    for (eo = Mode_compmgr.eo_last; eo; eo = ((ECmWinInfo *) 
(eo->cmhook))->prev)
-      ECompMgrRepaintObj(pbuf, None, eo, 1);
+      ECompMgrRepaintObj(pbuf, allDamage, eo, 1);
 
    if (pbuf != rootPicture)
      {
@@ -2039,8 +2206,6 @@
        if (lst[i]->shown)
           ECompMgrWinMap(lst[i]);
      }
-
-   Mode_compmgr.reorder = 1;
 }
 
 static void
@@ -2394,6 +2559,17 @@
      {
        /* TBD */
      }
+   else if (!strncmp(cmd, "oi", 2))
+     {
+       Window              win;
+       EObj               *eo;
+
+       win = None;
+       sscanf(prm, "%lx", &win);
+       eo = EobjListStackFind(win);
+       if (eo)
+          ECompMgrWinDumpInfo("EObj", eo, None, 1);
+     }
 }
 
 IpcItem             CompMgrIpcArray[] = {
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/ecompmgr.h,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -3 -r1.19 -r1.20
--- ecompmgr.h  18 Sep 2005 06:35:37 -0000      1.19
+++ ecompmgr.h  4 Oct 2005 22:08:12 -0000       1.20
@@ -48,7 +48,8 @@
                                          int change_wh, int change_bw);
 void                ECompMgrWinReparent(EObj * eo, struct _desk *dsk,
                                        int change_xy);
-void                ECompMgrWinChangeStacking(EObj * eo);
+void                ECompMgrWinRaise(EObj * eo);
+void                ECompMgrWinLower(EObj * eo);
 void                ECompMgrWinChangeShape(EObj * eo);
 
 void                ECompMgrWinChangeOpacity(EObj * eo, unsigned int opacity);
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/eobj.c,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -3 -r1.52 -r1.53
--- eobj.c      30 Sep 2005 18:56:45 -0000      1.52
+++ eobj.c      4 Oct 2005 22:08:13 -0000       1.53
@@ -394,7 +394,7 @@
       return num;
 #if USE_COMPOSITE
    if (eo->shown && eo->cmhook)
-      ECompMgrWinChangeStacking(eo);
+      ECompMgrWinRaise(eo);
 #endif
    return num;
 }
@@ -409,7 +409,7 @@
       return num;
 #if USE_COMPOSITE
    if (eo->shown && eo->cmhook)
-      ECompMgrWinChangeStacking(eo);
+      ECompMgrWinLower(eo);
 #endif
    return num;
 }




-------------------------------------------------------
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to