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