Enlightenment CVS committal Author : kwo Project : e16 Module : e
Dir : e16/e/src Modified Files: desktops.c ecompmgr.c eobj.c eobj.h Log Message: Clean up CM background handling. =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/desktops.c,v retrieving revision 1.207 retrieving revision 1.208 diff -u -3 -r1.207 -r1.208 --- desktops.c 1 Dec 2005 23:28:13 -0000 1.207 +++ desktops.c 4 Dec 2005 09:38:27 -0000 1.208 @@ -452,7 +452,7 @@ desks.current = dsk; - eo = EobjWindowCreate(EOBJ_TYPE_MISC, 0, 0, VRoot.w, VRoot.h, + eo = EobjWindowCreate(EOBJ_TYPE_MISC_NR, 0, 0, VRoot.w, VRoot.h, 0, "Root-bg"); eo->floating = 0; eo->fade = eo->shadow = 0; @@ -529,7 +529,11 @@ if (dsk->viewable) { - if (!ECompMgrDeskConfigure(dsk)) + if (ECompMgrDeskConfigure(dsk)) + { + ESetWindowBackgroundPixmap(win, None); + } + else { if (dsk->bg.pmap != None) ESetWindowBackgroundPixmap(win, dsk->bg.pmap); @@ -545,10 +549,7 @@ if (!Conf.hints.set_xroot_info_on_root_window) HintsSetRootInfo(EoGetWin(dsk), None, 0); - if (!ECompMgrDeskConfigure(dsk)) - { - ESetWindowBackgroundPixmap(win, None); - } + ESetWindowBackgroundPixmap(win, None); } } @@ -674,9 +675,11 @@ for (i = 0; i < Conf.desks.num; i++) { dsk = _DeskGet(i); + if (!dsk) + continue; if (bg && dsk->bg.bg != bg) continue; - if (!bg) + if (!bg && dsk->viewable) /* CM start/stop hack */ dsk->bg.isset = 0; DeskBackgroundUpdate(dsk); } =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/ecompmgr.c,v retrieving revision 1.84 retrieving revision 1.85 diff -u -3 -r1.84 -r1.85 --- ecompmgr.c 1 Dec 2005 23:28:13 -0000 1.84 +++ ecompmgr.c 4 Dec 2005 09:38:28 -0000 1.85 @@ -194,6 +194,7 @@ static void ECompMgrHandleRootEvent(XEvent * ev, void *prm); static void ECompMgrHandleWindowEvent(XEvent * ev, void *prm); static void doECompMgrWinFade(int val, void *data); +static void ECompMgrWinInvalidate(EObj * eo, int what); static void ECompMgrWinSetPicts(EObj * eo); static void ECompMgrWinFadeOutEnd(EObj * eo); static int ECompMgrDetermineOrder(EObj * const *lst, int num, @@ -482,50 +483,50 @@ int ECompMgrDeskConfigure(Desk * dsk) { - /* FIXME - To be implemented */ - dsk = NULL; - - return 0; -} - -static Picture -DeskBackgroundPictureGet(Desk * dsk) -{ - ECmWinInfo *cw = dsk->o.cmhook; + EObj *eo; + ECmWinInfo *cw; Picture pict; - Pixmap pmap; - Bool fill; XRenderPictFormat *pictfmt; XRenderPictureAttributes pa; + int fill = 0; + Pixmap pmap; + unsigned long pixel; + if (!Mode_compmgr.active) + return 0; + + eo = (dsk->num) ? EoObj(dsk) : dsk->bg.o; + if (!eo) + return 1; + cw = eo->cmhook; + +#if 0 if (!cw) { - ECompMgrWinNew(&dsk->o); - cw = dsk->o.cmhook; + ECompMgrWinNew(eo); + cw = eo->cmhook; if (!cw) - return None; + return 0; } +#endif - fill = False; - pmap = BackgroundGetPixmap(DeskBackgroundGet(dsk)); - if (pmap == None) + if (!dsk->viewable) + { + ECompMgrWinInvalidate(eo, INV_PICTURE); + return 1; + } + + if (dsk->bg.pmap == None) { - if (cw->pixmap && cw->picture) - return cw->picture; pmap = XCreatePixmap(disp, VRoot.win, 1, 1, VRoot.depth); - fill = True; + fill = 1; } - else if (pmap == cw->pixmap) + else { - if (cw->picture != None) - return cw->picture; + pmap = dsk->bg.pmap; } - D1printf - ("DeskBackgroundPictureGet: Desk %d: using pixmap %#lx (%#lx %#lx)\n", - dsk->num, pmap, cw->pixmap, cw->picture); - if (cw->picture) - XRenderFreePicture(disp, cw->picture); + ECompMgrWinInvalidate(eo, INV_PICTURE); pa.repeat = True; pictfmt = XRenderFindVisualFormat(disp, VRoot.vis); @@ -533,44 +534,27 @@ if (fill) { - /* FIXME - use desk bg color */ XRenderColor c; + /* FIXME - use desk bg color */ + pixel = 0; + c.red = c.green = c.blue = 0x8080; c.alpha = 0xffff; XRenderFillRectangle(disp, PictOpSrc, pict, &c, 0, 0, 1, 1); XFreePixmap(disp, pmap); } -#if 0 /* FIXME - Not in window mode? */ /* New background, all must be repainted */ ECompMgrDamageAll(); -#endif - cw->pixmap = pmap; cw->picture = pict; - return pict; -} - -static void -DeskBackgroundPictureFree(Desk * dsk) -{ - ECmWinInfo *cw = dsk->o.cmhook; - Picture pict; - - if (!cw) - return; - - pict = cw->picture; - if (pict == None) - return; - - D1printf("DeskBackgroundPictureFree: Desk %d: pict=%#lx\n", dsk->num, pict); - - XRenderFreePicture(disp, pict); + D1printf + ("ECompMgrDeskConfigure: Desk %d: using pixmap %#lx picture=%#lx\n", + dsk->num, pmap, cw->picture); - cw->picture = None; + return 1; } /* @@ -1332,18 +1316,6 @@ { ECmWinInfo *cw = eo->cmhook; - if (eo->type == EOBJ_TYPE_DESK) - { -#if 0 /* FIXME - Get this right */ - if (cw->picture == None) -#endif - { - cw->picture = DeskBackgroundPictureGet((Desk *) eo); - cw->damaged = 1; /* FIXME - ??? */ - } - return; - } - if (cw->pixmap == None && eo->shown && (Mode_compmgr.use_pixmap || (eo->fade && Conf_compmgr.fading.enable))) { @@ -1409,9 +1381,6 @@ cw->a.visual = attr.visual; cw->a.border_width = attr.border_width; - if (eo->type == EOBJ_TYPE_DESK) - eo->noredir = 1; - if (!eo->noredir) { if (Conf_compmgr.mode == ECM_MODE_WINDOW) @@ -1616,12 +1585,6 @@ EventCallbackUnregister(eo->win, 0, ECompMgrHandleWindowEvent, eo); - if (eo->type == EOBJ_TYPE_DESK) - { - DeskBackgroundPictureFree((Desk *) eo); - cw->pixmap = None; - } - if (!eo->noredir) { if (!eo->gone && Conf_compmgr.mode == ECM_MODE_WINDOW) @@ -1984,7 +1947,7 @@ Display *dpy = disp; XserverRegion region; EObj *eo; - Picture pict, pbuf; + Picture pbuf; Desk *dsk = DeskGet(0); if (!Mode_compmgr.active || allDamage == None) @@ -2019,12 +1982,16 @@ if (EventDebug(EDBUG_TYPE_COMPMGR2)) ERegionShow("after opaque", region); +#if 0 /* FIXME - NoBg? */ + Picture pict; + /* Repaint background, clipped by damage region and opaque windows */ - pict = DeskBackgroundPictureGet(dsk); + pict = ((ECmWinInfo *) (dsk->o.cmhook))->picture; D1printf("ECompMgrRepaint desk picture=%#lx\n", pict); XFixesSetPictureClipRegion(dpy, pbuf, 0, 0, region); XRenderComposite(dpy, PictOpSrc, pict, None, pbuf, 0, 0, 0, 0, 0, 0, VRoot.w, VRoot.h); +#endif /* Paint trans windows and shadows bottom up */ for (eo = Mode_compmgr.eo_last; eo; eo = ((ECmWinInfo *) (eo->cmhook))->prev) @@ -2109,18 +2076,6 @@ } #endif -static void -ECompMgrDeskChanged(Desk * dsk) -{ - if (!dsk || !dsk->o.cmhook) - return; - - D1printf("ECompMgrDeskChanged: desk=%d\n", dsk->num); - - DeskBackgroundPictureFree(dsk); - ECompMgrDamageAll(); -} - #if ENABLE_SHADOWS static void ECompMgrShadowsInit(int mode, int cleanup) @@ -2215,6 +2170,9 @@ if (lst[i]->shown) ECompMgrWinMap(lst[i]); } + + DesksBackgroundRefresh(NULL); + _ECM_SET_CLIP_CHANGED(); } static void @@ -2235,8 +2193,6 @@ XRenderFreePicture(disp, rootBuffer); rootBuffer = None; - DeskBackgroundPictureFree(DeskGet(0)); - ECompMgrShadowsInit(ECM_SHADOWS_OFF, 0); lst1 = EobjListStackGet(&num); @@ -2270,8 +2226,7 @@ EventCallbackUnregister(VRoot.win, 0, ECompMgrHandleRootEvent, NULL); - if (Conf_compmgr.shadows.mode != ECM_SHADOWS_OFF) - DesksClear(); + DesksBackgroundRefresh(NULL); } void @@ -2512,7 +2467,7 @@ } static void -ECompMgrSighan(int sig, void *prm) +ECompMgrSighan(int sig, void *prm __UNUSED__) { if (sig != ESIGNAL_INIT && Conf_compmgr.mode == ECM_MODE_OFF) return; @@ -2525,10 +2480,6 @@ ECompMgrStart(); break; - case ESIGNAL_BACKGROUND_CHANGE: - ECompMgrDeskChanged((Desk *) prm); - break; - case ESIGNAL_IDLE: /* Do we get here on auto? */ if (!allDamage /* || Conf_compmgr.mode == ECM_MODE_AUTO */ ) =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/eobj.c,v retrieving revision 1.59 retrieving revision 1.60 diff -u -3 -r1.59 -r1.60 --- eobj.c 12 Nov 2005 15:11:07 -0000 1.59 +++ eobj.c 4 Dec 2005 09:38:28 -0000 1.60 @@ -156,6 +156,12 @@ #if USE_COMPOSITE eo->fade = 1; eo->shadow = 1; + switch (type) + { + case EOBJ_TYPE_MISC_NR: + eo->noredir = 1; + break; + } ECompMgrWinNew(eo); #endif if (eo->win != VRoot.win) =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/eobj.h,v retrieving revision 1.19 retrieving revision 1.20 diff -u -3 -r1.19 -r1.20 --- eobj.h 1 Dec 2005 23:45:27 -0000 1.19 +++ eobj.h 4 Dec 2005 09:38:28 -0000 1.20 @@ -57,8 +57,9 @@ #define EOBJ_TYPE_BUTTON 1 #define EOBJ_TYPE_DESK 2 #define EOBJ_TYPE_MISC 3 -#define EOBJ_TYPE_EVENT 4 -#define EOBJ_TYPE_EXT 5 +#define EOBJ_TYPE_MISC_NR 4 /* Unredirected */ +#define EOBJ_TYPE_EVENT 5 +#define EOBJ_TYPE_EXT 6 #define EobjGetWin(eo) ((eo)->win) #define EobjGetDesk(eo) ((eo)->desk) ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs