Enlightenment CVS committal Author : kwo Project : e16 Module : e
Dir : e16/e/src Modified Files: E.h backgrounds.c backgrounds.h desktops.c desktops.h ecompmgr.c ecompmgr.h hints.c pager.c x.c Log Message: Rework background handling: - Only use root background overlay when composite is enabled - Improve handling of external backgrounds ("No Background") - Fix external background handling when composite is enabled =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/E.h,v retrieving revision 1.534 retrieving revision 1.535 diff -u -3 -r1.534 -r1.535 --- E.h 19 Feb 2006 22:23:50 -0000 1.534 +++ E.h 27 Feb 2006 19:14:25 -0000 1.535 @@ -482,10 +482,6 @@ } grabs; struct { - Pixmap old_root_pmap; - } hints; - struct - { const char *lang; char utf8_int; /* Use UTF-8 internally */ char utf8_loc; /* Locale is UTF-8 */ @@ -510,6 +506,11 @@ } place; struct { + Pixmap ext_pmap; + char ext_pmap_valid; + } root; + struct + { char *path; } theme; struct =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/backgrounds.c,v retrieving revision 1.60 retrieving revision 1.61 diff -u -3 -r1.60 -r1.61 --- backgrounds.c 20 Feb 2006 18:56:36 -0000 1.60 +++ backgrounds.c 27 Feb 2006 19:14:25 -0000 1.61 @@ -56,11 +56,12 @@ #endif char external; char keepim; - unsigned int ref_count; /* bg */ - unsigned int use_count; /* pmap */ + unsigned int ref_count; + unsigned int seq_no; }; static Ecore_List *bg_list = NULL; +static unsigned int bg_seq_no = 0; char * BackgroundGetUniqueString(const Background * bg) @@ -153,39 +154,15 @@ void BackgroundPixmapSet(Background * bg, Pixmap pmap) { - if (bg->pmap != pmap) - { - if (bg->use_count || bg->pmap != None) - Eprintf("*** BackgroundPixmapSet %s: pmap mismatch %#lx/%#lx\n", - bg->name, bg->pmap, pmap); - bg->pmap = pmap; - } - bg->use_count++; -} - -void -BackgroundPixmapUnset(Background * bg, Pixmap pmap) -{ - if (bg->pmap != pmap || !bg->use_count) - { - Eprintf("*** BackgroundPixmapUnset %s: pmap mismatch %#lx/%#lx\n", - bg->name, bg->pmap, pmap); - } - if (bg->use_count) - bg->use_count--; + if (bg->pmap != None && bg->pmap != pmap) + Eprintf("*** BackgroundPixmapSet %s: pmap was set %#lx/%#lx\n", + bg->name, bg->pmap, pmap); + bg->pmap = pmap; } static void BackgroundPixmapFree(Background * bg) { - if (!bg) - return; - - if (bg->use_count) - { - Eprintf("*** BackgroundPixmapFree %s: still referenced(%d)\n", - bg->name, bg->use_count); - } if (bg->pmap) { imlib_free_pixmap_and_mask(bg->pmap); @@ -343,6 +320,8 @@ bg->top.xperc = txperc; bg->top.yperc = typerc; + bg->seq_no = ++bg_seq_no; + return bg; } @@ -373,14 +352,10 @@ static void BackgroundInvalidate(Background * bg, int refresh) { - int used; - - used = bg->ref_count; - if (used) - DesksBackgroundFree(bg, 1); BackgroundPixmapFree(bg); - if (used && refresh) - DesksBackgroundRefresh(bg); + bg->seq_no = ++bg_seq_no; + if (bg->ref_count && refresh) + DesksBackgroundRefresh(bg, DESK_BG_REFRESH); } static int @@ -601,11 +576,12 @@ * invalid one from a previous session. */ pmap = ECreatePixmap(win, w, h, depth); - if (win == VRoot.win && pmap == Mode.hints.old_root_pmap) + if (win == VRoot.win && pmap == Mode.root.ext_pmap) { EFreePixmap(pmap); pmap = ECreatePixmap(win, w, h, depth); - Mode.hints.old_root_pmap = None; + Mode.root.ext_pmap = None; + Mode.root.ext_pmap_valid = 0; } return pmap; } @@ -1017,12 +993,6 @@ bg->last_viewed = time(NULL); } -static time_t -BackgroundGetTimestamp(const Background * bg) -{ - return bg->last_viewed; -} - const char * BackgroundGetName(const Background * bg) { @@ -1053,6 +1023,12 @@ return (bg) ? bg->pmap : None; } +unsigned int +BackgroundGetSeqNo(const Background * bg) +{ + return bg->seq_no; +} + int BackgroundIsNone(const Background * bg) { @@ -1484,28 +1460,20 @@ static void BackgroundsAccounting(void) { - unsigned int j; - Desk *dsk; Background *bg; time_t now; - for (j = 0; j < DesksGetNumber(); j++) - { - dsk = DeskGet(j); - if ((DeskBackgroundGet(dsk)) && (DeskIsViewable(dsk))) - BackgroundTouch(DeskBackgroundGet(dsk)); - } + DesksBackgroundRefresh(NULL, DESK_BG_TIMEOUT); now = time(NULL); ECORE_LIST_FOR_EACH(bg_list, bg) { /* Skip if no pixmap or not timed out */ - if ((bg->pmap == None) || - ((now - BackgroundGetTimestamp(bg)) <= Conf.backgrounds.timeout)) + if (bg->pmap == None || + ((now - bg->last_viewed) <= Conf.backgrounds.timeout)) continue; - if (bg->ref_count) - DesksBackgroundFree(bg, 0); + DesksBackgroundRefresh(NULL, DESK_BG_FREE); BackgroundPixmapFree(bg); } } =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/backgrounds.h,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- backgrounds.h 18 Feb 2006 08:30:03 -0000 1.7 +++ backgrounds.h 27 Feb 2006 19:14:25 -0000 1.8 @@ -32,7 +32,6 @@ Background *BackgroundGetRandom(void); char *BackgroundGetUniqueString(const Background * bg); void BackgroundPixmapSet(Background * bg, Pixmap pmap); -void BackgroundPixmapUnset(Background * bg, Pixmap pmap); void BackgroundDestroyByName(const char *name); void BackgroundRealize(Background * bg, Drawable draw, unsigned int rw, unsigned int rh, @@ -49,6 +48,7 @@ const char *BackgroundGetName(const Background * bg); int BackgroundGetColor(const Background * bg); Pixmap BackgroundGetPixmap(const Background * bg); +unsigned int BackgroundGetSeqNo(const Background * bg); int BackgroundIsNone(const Background * bg); Background *BrackgroundCreateFromImage(const char *bgid, const char *file, char *thumb, =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/desktops.c,v retrieving revision 1.225 retrieving revision 1.226 diff -u -3 -r1.225 -r1.226 --- desktops.c 20 Feb 2006 21:53:39 -0000 1.225 +++ desktops.c 27 Feb 2006 19:14:25 -0000 1.226 @@ -410,6 +410,7 @@ EventCallbackRegister(EoGetWin(dsk), 0, DeskHandleEvents, dsk); EoSetFade(dsk, 0); EoSetShadow(dsk, 0); + dsk->bg.o = EoObj(dsk); if (desk == 0) { desks.current = dsk; @@ -420,14 +421,14 @@ eo->floating = 0; eo->fade = eo->shadow = 0; EobjSetLayer(eo, 0); - EobjMap(eo, 0); - dsk->bg.o = eo; EventCallbackRegister(EobjGetWin(eo), 0, DeskHandleEvents, dsk); + dsk->bg.o_bg = eo; + if (Mode.root.ext_pmap_valid) + dsk->bg.pmap_set = Mode.root.ext_pmap; #endif } else { - dsk->bg.o = EoObj(dsk); EoSetFloating(dsk, 1); EoSetLayer(dsk, 0); #if 0 /* TBD */ @@ -446,7 +447,7 @@ eo->fade = eo->shadow = 0; EobjReparent(eo, EoObj(dsk), 0, 0); EobjSetLayer(eo, 0); - dsk->bg.o = eo; + dsk->bg.o_bg = eo; EventCallbackRegister(EobjGetWin(eo), 0, DeskHandleEvents, dsk); #endif @@ -463,11 +464,11 @@ { ModulesSignal(ESIGNAL_DESK_REMOVED, dsk); - if (dsk->bg.o != EoObj(dsk)) + if (dsk->bg.o_bg) { - EventCallbackUnregister(EobjGetWin(dsk->bg.o), 0, DeskHandleEvents, + EventCallbackUnregister(EobjGetWin(dsk->bg.o_bg), 0, DeskHandleEvents, dsk); - EobjWindowDestroy(dsk->bg.o); + EobjWindowDestroy(dsk->bg.o_bg); } EventCallbackUnregister(EoGetWin(dsk), 0, DeskHandleEvents, dsk); @@ -475,11 +476,7 @@ DeskControlsDestroy(dsk, 2); if (dsk->bg.bg) - { - if (dsk->bg.pmap != None) - BackgroundPixmapUnset(dsk->bg.bg, dsk->bg.pmap); - BackgroundDecRefcount(dsk->bg.bg); - } + BackgroundDecRefcount(dsk->bg.bg); EoFini(dsk); @@ -492,8 +489,6 @@ { if (!dsk) return VRoot.win; - if (!dsk->bg.bg || !dsk->bg.o) - return EoGetWin(dsk); return EobjGetWin(dsk->bg.o); } @@ -516,28 +511,33 @@ DeskBackgroundConfigure(Desk * dsk) { Window win; + Pixmap pmap = dsk->bg.pmap; + unsigned long pixel = dsk->bg.pixel; if (EventDebug(EDBUG_TYPE_DESKS)) - Eprintf("DeskBackgroundConfigure %d %#lx v=%d - %#lx %#lx %#lx\n", - dsk->num, EoGetWin(dsk), dsk->viewable, - EobjGetWin(dsk->bg.o), dsk->bg.pmap, dsk->bg.pixel); + Eprintf + ("DeskBackgroundConfigure %d v=%d %#lx/%#lx: ext=%d pmap=%#lx/%#lx pixel=%#lx/%#lx\n", + dsk->num, dsk->viewable, EoGetWin(dsk), EobjGetWin(dsk->bg.o), + BackgroundIsNone(dsk->bg.bg), pmap, dsk->bg.pmap_set, pixel, + dsk->bg.pixel); - if (dsk->bg.o != EoObj(dsk)) + if (dsk->bg.o_bg) { - if (dsk->bg.bg) + if (ECompMgrIsActive()) { - EobjMap(dsk->bg.o, 0); + dsk->bg.o = dsk->bg.o_bg; + EobjMap(dsk->bg.o_bg, 0); } else { - EobjUnmap(dsk->bg.o); - return; + dsk->bg.o = EoObj(dsk); + EobjUnmap(dsk->bg.o_bg); } } win = EobjGetWin(dsk->bg.o); - if (dsk->viewable) + if (dsk->viewable || !dsk->bg.bg) { #if !USE_BG_WIN_ON_ALL_DESKS if (ECompMgrDeskConfigure(dsk)) @@ -547,27 +547,26 @@ else #endif { - if (dsk->bg.pmap != None) + if (pmap != None) { - ESetWindowBackgroundPixmap(win, dsk->bg.pmap); + ESetWindowBackgroundPixmap(win, pmap); if (dsk->num == 0 && win != VRoot.win) - ESetWindowBackgroundPixmap(VRoot.win, dsk->bg.pmap); + ESetWindowBackgroundPixmap(VRoot.win, pmap); } else { - ESetWindowBackground(win, dsk->bg.pixel); + ESetWindowBackground(win, pixel); if (dsk->num == 0 && win != VRoot.win) - ESetWindowBackground(VRoot.win, dsk->bg.pixel); + ESetWindowBackground(VRoot.win, pixel); } EClearWindow(win); } - if (Conf.hints.set_xroot_info_on_root_window) - HintsSetRootInfo(VRoot.win, dsk->bg.pmap, dsk->bg.pixel); - else - HintsSetRootInfo(EoGetWin(dsk), dsk->bg.pmap, dsk->bg.pixel); + HintsSetRootInfo(EoGetWin(dsk), pmap, pixel); + if (Conf.hints.set_xroot_info_on_root_window && win != VRoot.win) + HintsSetRootInfo(VRoot.win, pmap, pixel); } - else + else if (dsk->bg.bg) { if (!Conf.hints.set_xroot_info_on_root_window) HintsSetRootInfo(EoGetWin(dsk), None, 0); @@ -579,74 +578,87 @@ } static void -DeskBackgroundFree(Desk * dsk, int force) +DeskBackgroundRefresh(Desk * dsk, int why) { - if (!dsk->bg.isset) - return; - - dsk->bg.isset = 0; + Background *bg = dsk->bg.bg; + Pixmap pmap = dsk->bg.pmap; + unsigned long pixel = dsk->bg.pixel; + int changed = 0; + int reconfigure = 0; if (EventDebug(EDBUG_TYPE_DESKS)) - Eprintf("DeskBackgroundFree %d v=%d force=%d\n", dsk->num, - dsk->viewable, force); + Eprintf("DeskBackgroundRefresh %d v=%d why=%d pmap=%#lx pixel=%#lx\n", + dsk->num, dsk->viewable, why, pmap, pixel); - if (!dsk->viewable || force) + switch (why) { - if (dsk->bg.pmap != None) - { - BackgroundPixmapUnset(dsk->bg.bg, dsk->bg.pmap); - dsk->bg.pmap = None; - } - } - - if (!dsk->viewable) - DeskBackgroundConfigure(dsk); -} + case DESK_BG_REFRESH: + if (bg && dsk->viewable) + BackgroundTouch(bg); + break; -static void -DeskBackgroundRefresh(Desk * dsk) -{ - Background *bg; - Pixmap pmap; - unsigned long pixel; + case DESK_BG_RECONFIGURE_ALL: + reconfigure = 1; + break; - if (!dsk->viewable) - return; + case DESK_BG_TIMEOUT: + if (bg && dsk->viewable) + BackgroundTouch(bg); + return; - if (EventDebug(EDBUG_TYPE_DESKS)) - Eprintf("DeskBackgroundRefresh %d v=%d - %dx%d\n", dsk->num, - dsk->viewable, EoGetW(dsk), EoGetH(dsk)); + case DESK_BG_FREE: + if (!bg || dsk->viewable) + return; + break; + } - bg = dsk->bg.bg; if (bg) { - pmap = BackgroundGetPixmap(bg); - pixel = 0; + if (dsk->viewable) + { + if (BackgroundGetSeqNo(bg) == dsk->bg.seq_no) + goto done; - if (dsk->bg.isset && dsk->bg.pmap == pmap) - return; + pmap = BackgroundGetPixmap(bg); + pixel = 0; - if (pmap == None) - BackgroundRealize(bg, EoGetWin(dsk), EoGetW(dsk), EoGetH(dsk), 1, - &pmap, &pixel); + if (pmap == None) + BackgroundRealize(bg, EoGetWin(dsk), EoGetW(dsk), EoGetH(dsk), + 1, &pmap, &pixel); + if (pmap != None) + BackgroundPixmapSet(bg, pmap); - if (pmap != None && pmap != dsk->bg.pmap) - BackgroundPixmapSet(dsk->bg.bg, pmap); + dsk->bg.seq_no = BackgroundGetSeqNo(bg); + changed = 1; + } + else + { + if (dsk->bg.pmap == None) + return; + + pmap = None; + pixel = 0; + dsk->bg.seq_no = 0; + } + } + else + { + pmap = (Mode.root.ext_pmap_valid) ? Mode.root.ext_pmap : None; + pixel = 0; + changed = pmap != dsk->bg.pmap_set; + } - dsk->bg.pmap = pmap; + done: + dsk->bg.pmap = pmap; + if (reconfigure || pmap != dsk->bg.pmap_set || pixel != dsk->bg.pixel) + { dsk->bg.pixel = pixel; + DeskBackgroundConfigure(dsk); + dsk->bg.pmap_set = pmap; } - dsk->bg.isset = 1; - DeskBackgroundConfigure(dsk); -} -static void -DeskBackgroundUpdate(Desk * dsk) -{ - if (dsk->viewable) - DeskBackgroundRefresh(dsk); - else - DeskBackgroundFree(dsk, 0); + if (changed) + ModulesSignal(ESIGNAL_BACKGROUND_CHANGE, dsk); } void @@ -660,7 +672,6 @@ if (dsk->bg.bg != bg) { - DeskBackgroundFree(dsk, 1); if (dsk->bg.bg) BackgroundDecRefcount(dsk->bg.bg); if (bg) @@ -669,29 +680,11 @@ dsk->bg.bg = bg; - if (dsk->viewable) - DeskBackgroundRefresh(dsk); - - ModulesSignal(ESIGNAL_BACKGROUND_CHANGE, dsk); -} - -void -DesksBackgroundFree(Background * bg, int force) -{ - Desk *dsk; - unsigned int i; - - for (i = 0; i < Conf.desks.num; i++) - { - dsk = _DeskGet(i); - if (dsk->bg.bg != bg) - continue; - DeskBackgroundFree(dsk, force); - } + DeskBackgroundRefresh(dsk, DESK_BG_REFRESH); } void -DesksBackgroundRefresh(Background * bg) +DesksBackgroundRefresh(Background * bg, int why) { Desk *dsk; unsigned int i; @@ -699,13 +692,11 @@ for (i = 0; i < Conf.desks.num; i++) { dsk = _DeskGet(i); - if (!dsk) + if (!dsk) /* May happen during init */ continue; - if (bg && dsk->bg.bg != bg) + if (dsk->bg.bg != bg && why == DESK_BG_REFRESH) continue; - if (!bg && dsk->viewable) /* CM start/stop hack */ - dsk->bg.isset = 0; - DeskBackgroundUpdate(dsk); + DeskBackgroundRefresh(dsk, why); } } @@ -726,9 +717,9 @@ x = (dsk->viewable) ? EoGetX(dsk) : VRoot.w; EoMoveResize(dsk, x, 0, w, h); } - if (dsk->bg.o && dsk->bg.o != EoObj(dsk)) - EobjMoveResize(dsk->bg.o, 0, 0, w, h); - DeskBackgroundUpdate(dsk); + if (dsk->bg.o_bg) + EobjMoveResize(dsk->bg.o_bg, 0, 0, w, h); + DeskBackgroundRefresh(dsk, DESK_BG_REFRESH); DeskControlsDestroy(dsk, 1); DeskControlsCreate(dsk); DeskControlsShow(dsk, 1); @@ -777,12 +768,6 @@ dsk->current_area_y = ay; } -int -DeskIsViewable(const Desk * dsk) -{ - return dsk->viewable; -} - void DeskSetDirtyStack(Desk * dsk, EObj * eo) { @@ -1110,7 +1095,8 @@ if (!dd->viewable && v) { dd->viewable = 1; - DeskBackgroundRefresh(_DeskGet(desks.order[i])); + DeskBackgroundRefresh(_DeskGet(desks.order[i]), + DESK_BG_REFRESH); } else if (dd->viewable && !v) { @@ -1162,7 +1148,7 @@ EGrabServer(); dsk->viewable = 1; - DeskBackgroundRefresh(dsk); + DeskBackgroundRefresh(dsk, DESK_BG_REFRESH); MoveToDeskTop(dsk); desks.previous = desks.current = dsk; @@ -1303,7 +1289,7 @@ dsk = _DeskGet(desk); dsk->viewable = 1; - DeskBackgroundRefresh(dsk); + DeskBackgroundRefresh(dsk, DESK_BG_REFRESH); } static void @@ -1377,7 +1363,7 @@ dsk = _DeskGet(desk); dsk->viewable = 1; - DeskBackgroundRefresh(dsk); + DeskBackgroundRefresh(dsk, DESK_BG_REFRESH); MoveToDeskTop(desk); if (desk == 0) @@ -1958,6 +1944,39 @@ } static void +DeskPropertyChange(Desk * dsk, XEvent * ev) +{ + Pixmap pmap; + + if (ev->xproperty.atom == E_XROOTPMAP_ID) + { + /* Possible race here? */ + pmap = HintsGetRootPixmap(ev->xany.window); + if (EventDebug(EDBUG_TYPE_DESKS)) + Eprintf("DeskPropertyChange win=%#lx _XROOTPMAP_ID=%#lx\n", + ev->xany.window, pmap); + if (ev->xany.window != VRoot.win) + return; + dsk->bg.pmap_set = pmap; + if (pmap == dsk->bg.pmap) + return; + if (pmap == Mode.root.ext_pmap) + return; + Mode.root.ext_pmap = pmap; + Mode.root.ext_pmap_valid = EDrawableCheck(pmap, 0); + DesksBackgroundRefresh(NULL, DESK_BG_REFRESH); + } + else if (ev->xproperty.atom == E_XROOTCOLOR_PIXEL) + { + if (EventDebug(EDBUG_TYPE_DESKS)) + Eprintf("DeskPropertyChange win=%#lx _XROOTCOLOR_PIXEL\n", + ev->xany.window); + if (ev->xany.window != VRoot.win) + return; + } +} + +static void DeskHandleEvents(XEvent * ev, void *prm) { Desk *dsk = (Desk *) prm; @@ -1988,6 +2007,11 @@ DeskRootResize(0, ev->xconfigure.width, ev->xconfigure.height); break; + case PropertyNotify: + if (ev->xany.window == VRoot.win) + DeskPropertyChange(dsk, ev); + break; + #if USE_XRANDR case EX_EVENT_SCREEN_CHANGE_NOTIFY: { =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/desktops.h,v retrieving revision 1.22 retrieving revision 1.23 diff -u -3 -r1.22 -r1.23 --- desktops.h 14 Jan 2006 14:30:51 -0000 1.22 +++ desktops.h 27 Feb 2006 19:14:25 -0000 1.23 @@ -24,9 +24,14 @@ #ifndef _DESKTOPS_H_ #define _DESKTOPS_H_ +#include "eobj.h" + #define USE_BG_WIN_ON_ALL_DESKS 0 -#include "eobj.h" +#define DESK_BG_REFRESH 1 +#define DESK_BG_FREE 2 +#define DESK_BG_TIMEOUT 3 +#define DESK_BG_RECONFIGURE_ALL 4 typedef struct _desk Desk; @@ -47,9 +52,11 @@ { struct _background *bg; EObj *o; + EObj *o_bg; Pixmap pmap; + Pixmap pmap_set; unsigned long pixel; - char isset; + unsigned int seq_no; } bg; struct { @@ -64,7 +71,6 @@ Desk *DeskGetRelative(Desk * dsk, int inc); void DeskGetArea(const Desk * dsk, int *ax, int *ay); void DeskSetArea(Desk * dsk, int ax, int ay); -int DeskIsViewable(const Desk * dsk); void DeskSetDirtyStack(Desk * dsk, EObj * eo); void DeskGoto(Desk * dsk); void DeskGotoNum(unsigned int desk); @@ -76,8 +82,7 @@ struct _background *DeskBackgroundGet(const Desk * dsk); void DeskBackgroundSet(Desk * dsk, struct _background *bg); -void DesksBackgroundFree(struct _background *bg, int force); -void DesksBackgroundRefresh(struct _background *bg); +void DesksBackgroundRefresh(struct _background *bg, int what); void DeskCurrentGetArea(int *ax, int *ay); void DeskCurrentGotoArea(int ax, int ay); =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/ecompmgr.c,v retrieving revision 1.97 retrieving revision 1.98 diff -u -3 -r1.97 -r1.98 --- ecompmgr.c 12 Feb 2006 17:01:32 -0000 1.97 +++ ecompmgr.c 27 Feb 2006 19:14:25 -0000 1.98 @@ -498,13 +498,11 @@ eo = dsk->bg.o; if (!eo) return 1; - cw = eo->cmhook; - if (!dsk->viewable) - { - ECompMgrWinInvalidate(eo, INV_PICTURE); - return 1; - } + ECompMgrWinInvalidate(eo, INV_PICTURE); + + if (!dsk->viewable && dsk->bg.bg) + return 1; if (dsk->bg.pmap == None) { @@ -523,8 +521,6 @@ pmap = dsk->bg.pmap; } - ECompMgrWinInvalidate(eo, INV_PICTURE); - pa.repeat = True; pictfmt = XRenderFindVisualFormat(disp, VRoot.vis); pict = XRenderCreatePicture(disp, pmap, pictfmt, CPRepeat, &pa); @@ -535,6 +531,7 @@ /* New background, all must be repainted */ ECompMgrDamageAll(); + cw = eo->cmhook; cw->picture = pict; D1printf @@ -2173,6 +2170,12 @@ #define ECompMgrShadowsInit(mode, cleanup) #endif +int +ECompMgrIsActive(void) +{ + return Mode_compmgr.active; +} + static void ECompMgrStart(void) { @@ -2226,7 +2229,7 @@ } #if !USE_BG_WIN_ON_ALL_DESKS - DesksBackgroundRefresh(NULL); + DesksBackgroundRefresh(NULL, DESK_BG_RECONFIGURE_ALL); #endif _ECM_SET_CLIP_CHANGED(); EUngrabServer(); @@ -2287,7 +2290,7 @@ EventCallbackUnregister(VRoot.win, 0, ECompMgrHandleRootEvent, NULL); #if !USE_BG_WIN_ON_ALL_DESKS - DesksBackgroundRefresh(NULL); + DesksBackgroundRefresh(NULL, DESK_BG_RECONFIGURE_ALL); #endif EUngrabServer(); ESync(); =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/ecompmgr.h,v retrieving revision 1.25 retrieving revision 1.26 diff -u -3 -r1.25 -r1.26 --- ecompmgr.h 7 Jan 2006 07:20:58 -0000 1.25 +++ ecompmgr.h 27 Feb 2006 19:14:25 -0000 1.26 @@ -39,6 +39,7 @@ int EVisualIsARGB(Visual * vis); +int ECompMgrIsActive(void); int ECompMgrDeskConfigure(struct _desk *dsk); void ECompMgrWinNew(EObj * eo); =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/hints.c,v retrieving revision 1.61 retrieving revision 1.62 diff -u -3 -r1.61 -r1.62 --- hints.c 20 Feb 2006 21:53:39 -0000 1.61 +++ hints.c 27 Feb 2006 19:14:25 -0000 1.62 @@ -76,7 +76,8 @@ HintsSetWindowClass(VRoot.win, "Virtual-Root", "Enlightenment"); } - Mode.hints.old_root_pmap = HintsGetRootPixmap(VRoot.win); + Mode.root.ext_pmap = HintsGetRootPixmap(VRoot.win); + Mode.root.ext_pmap_valid = EDrawableCheck(Mode.root.ext_pmap, 0); } void @@ -426,6 +427,12 @@ ecore_x_window_prop_card32_set(VRoot.win, ENL_INTERNAL_DESK_DATA, c, 1); Efree(c); + + if (Mode.root.ext_pmap_valid) + { + HintsSetRootInfo(VRoot.win, Mode.root.ext_pmap, 0); + ESetWindowBackgroundPixmap(VRoot.win, Mode.root.ext_pmap); + } } void =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/pager.c,v retrieving revision 1.196 retrieving revision 1.197 diff -u -3 -r1.196 -r1.197 --- pager.c 19 Feb 2006 22:25:27 -0000 1.196 +++ pager.c 27 Feb 2006 19:14:25 -0000 1.197 @@ -536,7 +536,7 @@ pmap = p->bgpmap = ECreatePixmap(p->win, p->dw, p->dh, VRoot.depth); bg = DeskBackgroundGet(p->dsk); - if (bg) + if (Conf_pagers.snap && bg) { #if USE_PAGER_BACKGROUND_CACHE char s[4096]; @@ -572,6 +572,13 @@ return; } + if (Conf_pagers.snap && p->dsk->bg.pmap) + { + ScaleRect(p->dsk->bg.pmap, pmap, NULL, 0, 0, VRoot.w, VRoot.h, 0, + 0, p->dw, p->dh, Conf_pagers.hiq); + return; + } + ic = ImageclassFind("PAGER_BACKGROUND", 0); if (ic) { =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/x.c,v retrieving revision 1.118 retrieving revision 1.119 diff -u -3 -r1.118 -r1.119 --- x.c 18 Feb 2006 09:50:17 -0000 1.118 +++ x.c 27 Feb 2006 19:14:25 -0000 1.119 @@ -892,6 +892,9 @@ { int ok; + if (draw == None) + return 0; + if (grab) EGrabServer(); ------------------------------------------------------- This SF.Net email is sponsored by xPML, a groundbreaking scripting language that extends applications into web and mobile media. Attend the live webcast and join the prime developer group breaking into this new coding territory! http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs