Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
      Tag: branch-exp
        ecompmgr.c ecompmgr.h ewin-ops.c 


Log Message:
Redirected window resize problem workaround.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/Attic/ecompmgr.c,v
retrieving revision 1.1.2.12
retrieving revision 1.1.2.13
diff -u -3 -r1.1.2.12 -r1.1.2.13
--- ecompmgr.c  22 Dec 2004 23:39:08 -0000      1.1.2.12
+++ ecompmgr.c  24 Dec 2004 00:59:54 -0000      1.1.2.13
@@ -158,6 +158,7 @@
 #if ENABLE_SHADOWS
    int                 shadow;
 #endif
+   char                resize_fix_enable;
 } Conf_compmgr;
 
 #define ECOMPMGR_MODE_OFF      0
@@ -274,19 +275,63 @@
 static              Picture
 EPictureCreateBuffer(Window win, int w, int h, int depth, Visual * vis)
 {
-   Display            *dpy = disp;
    Picture             pict;
    Pixmap              pmap;
    XRenderPictFormat  *pictfmt;
 
-   pmap = XCreatePixmap(dpy, win, w, h, depth);
-   pictfmt = XRenderFindVisualFormat(dpy, vis);
-   pict = XRenderCreatePicture(dpy, pmap, pictfmt, 0, 0);
-   XFreePixmap(dpy, pmap);
+   pmap = XCreatePixmap(disp, win, w, h, depth);
+   pictfmt = XRenderFindVisualFormat(disp, vis);
+   pict = XRenderCreatePicture(disp, pmap, pictfmt, 0, 0);
+   XFreePixmap(disp, pmap);
 
    return pict;
 }
 
+/* Hack to fix redirected window resize bug(?) */
+void
+ECompMgrMoveResizeFix(EObj * eo, int x, int y, int w, int h)
+{
+   Picture             pict;
+   int                 wo, ho;
+   ECmWinInfo         *c = eo->cmhook;
+
+   if (!c || !Conf_compmgr.resize_fix_enable)
+     {
+       EMoveResizeWindow(disp, eo->win, x, y, w, h);
+       return;
+     }
+
+   wo = ho = 0;
+   GetWinWH(eo->win, &wo, &ho);
+   if (wo <= 0 || ho <= 0 || (wo == w && ho == h))
+     {
+       EMoveResizeWindow(disp, eo->win, x, y, w, h);
+       return;
+     }
+
+   /* Resizing - grab old contents */
+   pict = EPictureCreateBuffer(eo->win, wo, ho, c->a.depth, c->a.visual);
+   XRenderComposite(disp, PictOpSrc, c->picture, None, pict,
+                   0, 0, 0, 0, 0, 0, wo, ho);
+
+   /* Resize (+move) */
+   EMoveResizeWindow(disp, eo->win, x, y, w, h);
+
+   /* Paste old contents back in */
+   if (w < wo)
+      w = wo;
+   if (h < ho)
+      h = ho;
+   XRenderComposite(disp, PictOpSrc, pict, None, c->picture,
+                   0, 0, 0, 0, 0, 0, w, h);
+   XRenderFreePicture(disp, pict);
+
+#if 0                          /* FIXME - the screen update seems to be 
delayed? */
+   if (c->extents != None)
+      ECompMgrDamageMerge(c->extents, 0);
+#endif
+}
+
 /*
  * Desktops (move to desktops.c?)
  */
@@ -2051,6 +2096,7 @@
 static const CfgItem CompMgrCfgItems[] = {
    CFG_ITEM_INT(Conf_compmgr, mode, 0),
    CFG_ITEM_INT(Conf_compmgr, shadow, 0),
+   CFG_ITEM_BOOL(Conf_compmgr, resize_fix_enable, 0),
 };
 #define N_CFG_ITEMS (sizeof(CompMgrCfgItems)/sizeof(CfgItem))
 
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/Attic/ecompmgr.h,v
retrieving revision 1.1.2.4
retrieving revision 1.1.2.5
diff -u -3 -r1.1.2.4 -r1.1.2.5
--- ecompmgr.h  14 Dec 2004 22:20:39 -0000      1.1.2.4
+++ ecompmgr.h  24 Dec 2004 00:59:55 -0000      1.1.2.5
@@ -10,4 +10,12 @@
 #define             ECompMgrWinChangeOpacity(eo, opacity)
 #endif
 
+#if USE_COMPOSITE
+void                ECompMgrMoveResizeFix(EObj * eo, int x, int y, int w,
+                                         int h);
+#define ExMoveResizeWindow ECompMgrMoveResizeFix
+#else
+#define ExMoveResizeWindow(eo, x, y, w, h) EMoveResizeWindow(disp, (eo)->win, 
x, y, w, h)
+#endif
+
 #endif /* _ECOMPMGR_H */
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/Attic/ewin-ops.c,v
retrieving revision 1.1.2.24
retrieving revision 1.1.2.25
diff -u -3 -r1.1.2.24 -r1.1.2.25
--- ewin-ops.c  22 Dec 2004 23:39:08 -0000      1.1.2.24
+++ ewin-ops.c  24 Dec 2004 00:59:55 -0000      1.1.2.25
@@ -253,8 +253,8 @@
 
    if (EventDebug(250))
       EDrawableDumpImage(ewin->o.win, "Win1");
-   EMoveResizeWindow(disp, EoGetWin(ewin), EoGetX(ewin), EoGetY(ewin),
-                    EoGetW(ewin), EoGetH(ewin));
+   ExMoveResizeWindow(&ewin->o, EoGetX(ewin), EoGetY(ewin),
+                     EoGetW(ewin), EoGetH(ewin));
    if (EventDebug(250))
       EDrawableDumpImage(ewin->o.win, "Win2");
 
@@ -543,8 +543,8 @@
        EwinBorderMinShadeSize(ewin, &b, &d);
        ewin->shaded = 2;
        EoSetW(ewin, b);
-       EMoveResizeWindow(disp, EoGetWin(ewin), EoGetX(ewin), EoGetY(ewin),
-                         EoGetW(ewin), EoGetH(ewin));
+       ExMoveResizeWindow(&ewin->o, EoGetX(ewin), EoGetY(ewin),
+                          EoGetW(ewin), EoGetH(ewin));
        EMoveResizeWindow(disp, ewin->win_container, -30, -30, 1, 1);
        EwinBorderCalcSizes(ewin);
        ecore_x_sync();
@@ -558,8 +558,8 @@
        EoSetW(ewin, b);
        if (!Mode.wm.startup)
           EoSetX(ewin, d);
-       EMoveResizeWindow(disp, EoGetWin(ewin), EoGetX(ewin), EoGetY(ewin),
-                         EoGetW(ewin), EoGetH(ewin));
+       ExMoveResizeWindow(&ewin->o, EoGetX(ewin), EoGetY(ewin),
+                          EoGetW(ewin), EoGetH(ewin));
        EMoveResizeWindow(disp, ewin->win_container, -30, -30, 1, 1);
        EwinBorderCalcSizes(ewin);
        ecore_x_sync();
@@ -571,8 +571,8 @@
        b = d;
        ewin->shaded = 2;
        EoSetH(ewin, b);
-       EMoveResizeWindow(disp, EoGetWin(ewin), EoGetX(ewin), EoGetY(ewin),
-                         EoGetW(ewin), EoGetH(ewin));
+       ExMoveResizeWindow(&ewin->o, EoGetX(ewin), EoGetY(ewin),
+                          EoGetW(ewin), EoGetH(ewin));
        EMoveResizeWindow(disp, ewin->win_container, -30, -30, 1, 1);
        EwinBorderCalcSizes(ewin);
        ecore_x_sync();
@@ -587,8 +587,8 @@
        EoSetH(ewin, b);
        if (!Mode.wm.startup)
           EoSetY(ewin, d);
-       EMoveResizeWindow(disp, EoGetWin(ewin), EoGetX(ewin), EoGetY(ewin),
-                         EoGetW(ewin), EoGetH(ewin));
+       ExMoveResizeWindow(&ewin->o, EoGetX(ewin), EoGetY(ewin),
+                          EoGetW(ewin), EoGetH(ewin));
        EMoveResizeWindow(disp, ewin->win_container, -30, -30, 1, 1);
        EwinBorderCalcSizes(ewin);
        ecore_x_sync();
@@ -738,8 +738,8 @@
                  EMoveResizeWindow(disp, ewin->win_container,
                                    ewin->border->border.left,
                                    ewin->border->border.top, ww, hh);
-                 EMoveResizeWindow(disp, EoGetWin(ewin), EoGetX(ewin),
-                                   EoGetY(ewin), EoGetW(ewin), EoGetH(ewin));
+                 ExMoveResizeWindow(&ewin->o, EoGetX(ewin), EoGetY(ewin),
+                                    EoGetW(ewin), EoGetH(ewin));
                  EwinBorderCalcSizes(ewin);
                  if (ewin->client.shaped)
                     EShapeCombineShape(disp, ewin->win_container,
@@ -754,8 +754,8 @@
        ewin->shaded = 2;
        EoSetW(ewin, b);
        EMoveResizeWindow(disp, ewin->win_container, -30, -30, 1, 1);
-       EMoveResizeWindow(disp, EoGetWin(ewin), EoGetX(ewin), EoGetY(ewin),
-                         EoGetW(ewin), EoGetH(ewin));
+       ExMoveResizeWindow(&ewin->o, EoGetX(ewin), EoGetY(ewin),
+                          EoGetW(ewin), EoGetH(ewin));
        EwinBorderCalcSizes(ewin);
        ecore_x_sync();
        break;
@@ -785,8 +785,8 @@
                  EMoveResizeWindow(disp, ewin->win_container,
                                    ewin->border->border.left,
                                    ewin->border->border.top, ww, hh);
-                 EMoveResizeWindow(disp, EoGetWin(ewin), EoGetX(ewin),
-                                   EoGetY(ewin), EoGetW(ewin), EoGetH(ewin));
+                 ExMoveResizeWindow(&ewin->o, EoGetX(ewin), EoGetY(ewin),
+                                    EoGetW(ewin), EoGetH(ewin));
                  EwinBorderCalcSizes(ewin);
                  if (ewin->client.shaped)
                     EShapeCombineShape(disp, ewin->win_container,
@@ -801,8 +801,8 @@
        EoSetW(ewin, b);
        EoSetX(ewin, d);
        EMoveResizeWindow(disp, ewin->win_container, -30, -30, 1, 1);
-       EMoveResizeWindow(disp, EoGetWin(ewin), EoGetX(ewin), EoGetY(ewin),
-                         EoGetW(ewin), EoGetH(ewin));
+       ExMoveResizeWindow(&ewin->o, EoGetX(ewin), EoGetY(ewin),
+                          EoGetW(ewin), EoGetH(ewin));
        EwinBorderCalcSizes(ewin);
        ecore_x_sync();
        break;
@@ -826,13 +826,11 @@
                  if (hh < 1)
                     hh = 1;
                  ww = ewin->client.w;
-#if 1                          /* FIXME - TBD */
                  EMoveResizeWindow(disp, ewin->win_container,
                                    ewin->border->border.left,
                                    ewin->border->border.top, ww, hh);
-#endif
-                 EMoveResizeWindow(disp, EoGetWin(ewin), EoGetX(ewin),
-                                   EoGetY(ewin), EoGetW(ewin), EoGetH(ewin));
+                 ExMoveResizeWindow(&ewin->o, EoGetX(ewin), EoGetY(ewin),
+                                    EoGetW(ewin), EoGetH(ewin));
                  EwinBorderCalcSizes(ewin);
                  if (ewin->client.shaped)
                     EShapeCombineShape(disp, ewin->win_container,
@@ -848,8 +846,8 @@
        ewin->shaded = 2;
        EoSetH(ewin, b);
        EMoveResizeWindow(disp, ewin->win_container, -30, -30, 1, 1);
-       EMoveResizeWindow(disp, EoGetWin(ewin), EoGetX(ewin), EoGetY(ewin),
-                         EoGetW(ewin), EoGetH(ewin));
+       ExMoveResizeWindow(&ewin->o, EoGetX(ewin), EoGetY(ewin),
+                          EoGetW(ewin), EoGetH(ewin));
        EwinBorderCalcSizes(ewin);
        ecore_x_sync();
        break;
@@ -880,8 +878,8 @@
                  EMoveResizeWindow(disp, ewin->win_container,
                                    ewin->border->border.left,
                                    ewin->border->border.top, ww, hh);
-                 EMoveResizeWindow(disp, EoGetWin(ewin), EoGetX(ewin),
-                                   EoGetY(ewin), EoGetW(ewin), EoGetH(ewin));
+                 ExMoveResizeWindow(&ewin->o, EoGetX(ewin), EoGetY(ewin),
+                                    EoGetW(ewin), EoGetH(ewin));
                  EwinBorderCalcSizes(ewin);
                  if (ewin->client.shaped)
                     EShapeCombineShape(disp, ewin->win_container,
@@ -895,8 +893,8 @@
        EoSetH(ewin, b);
        EoSetY(ewin, d);
        EMoveResizeWindow(disp, ewin->win_container, -30, -30, 1, 1);
-       EMoveResizeWindow(disp, EoGetWin(ewin), EoGetX(ewin), EoGetY(ewin),
-                         EoGetW(ewin), EoGetH(ewin));
+       ExMoveResizeWindow(&ewin->o, EoGetX(ewin), EoGetY(ewin),
+                          EoGetW(ewin), EoGetH(ewin));
        EwinBorderCalcSizes(ewin);
        ecore_x_sync();
        break;
@@ -975,8 +973,8 @@
                                    ewin->border->border.top,
                                    EoGetW(ewin) - ewin->border->border.left -
                                    ewin->border->border.right, ewin->client.h);
-                 EMoveResizeWindow(disp, EoGetWin(ewin), EoGetX(ewin),
-                                   EoGetY(ewin), EoGetW(ewin), EoGetH(ewin));
+                 ExMoveResizeWindow(&ewin->o, EoGetX(ewin), EoGetY(ewin),
+                                    EoGetW(ewin), EoGetH(ewin));
                  EwinBorderCalcSizes(ewin);
                  if (ewin->client.shaped)
                     EShapeCombineShape(disp, ewin->win_container,
@@ -1028,8 +1026,8 @@
                                    ewin->border->border.top,
                                    EoGetW(ewin) - ewin->border->border.left -
                                    ewin->border->border.right, ewin->client.h);
-                 EMoveResizeWindow(disp, EoGetWin(ewin), EoGetX(ewin),
-                                   EoGetY(ewin), EoGetW(ewin), EoGetH(ewin));
+                 ExMoveResizeWindow(&ewin->o, EoGetX(ewin), EoGetY(ewin),
+                                    EoGetW(ewin), EoGetH(ewin));
                  EwinBorderCalcSizes(ewin);
                  if (ewin->client.shaped)
                     EShapeCombineShape(disp, ewin->win_container,
@@ -1068,15 +1066,13 @@
               {
                  i = ((a * (1024 - k)) + (b * k)) >> 10;
                  EoSetH(ewin, i);
-#if 1                          /* FIXME - TBD */
                  EMoveResizeWindow(disp, ewin->win_container,
                                    ewin->border->border.left,
                                    ewin->border->border.top, ewin->client.w,
                                    EoGetH(ewin) - ewin->border->border.top -
                                    ewin->border->border.bottom);
-#endif
-                 EMoveResizeWindow(disp, EoGetWin(ewin), EoGetX(ewin),
-                                   EoGetY(ewin), EoGetW(ewin), EoGetH(ewin));
+                 ExMoveResizeWindow(&ewin->o, EoGetX(ewin), EoGetY(ewin),
+                                    EoGetW(ewin), EoGetH(ewin));
                  EwinBorderCalcSizes(ewin);
                  if (ewin->client.shaped)
                     EShapeCombineShape(disp, ewin->win_container,
@@ -1128,8 +1124,8 @@
                                    ewin->border->border.top, ewin->client.w,
                                    EoGetH(ewin) - ewin->border->border.top -
                                    ewin->border->border.bottom);
-                 EMoveResizeWindow(disp, EoGetWin(ewin), EoGetX(ewin),
-                                   EoGetY(ewin), EoGetW(ewin), EoGetH(ewin));
+                 ExMoveResizeWindow(&ewin->o, EoGetX(ewin), EoGetY(ewin),
+                                    EoGetW(ewin), EoGetH(ewin));
                  EwinBorderCalcSizes(ewin);
                  if (ewin->client.shaped)
                     EShapeCombineShape(disp, ewin->win_container,




-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now. 
http://productguide.itmanagersjournal.com/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to