diff --git a/src/E.h b/src/E.h index 2816870d..3738bc84 100644 --- a/src/E.h +++ b/src/E.h @@ -563,8 +563,9 @@ struct _eobj #define EOBJ_TYPE_EWIN 0 #define EOBJ_TYPE_BUTTON 1 -#define EOBJ_TYPE_OVERR 2 -#define EOBJ_TYPE_OTHER 3 +#define EOBJ_TYPE_DESK 2 +#define EOBJ_TYPE_OVERR 3 +#define EOBJ_TYPE_OTHER 4 #define EoGetWin(eo) ((eo)->o.win) #define EoGetType(eo) ((eo)->o.type) @@ -1447,20 +1448,12 @@ int DesksGetTotal(void); int DesksGetCurrent(void); void DesksSetCurrent(int desk); -void DesktopsInit(void); -void ChangeNumberOfDesktops(int quantity); +void InitDesktopControls(void); void ShowDesktopControls(void); -void ShowDesktopTabs(void); -void HideDesktopTabs(void); -void ShowDesktopButtons(void); -void MoveToDeskTop(int num); -void MoveToDeskBottom(int num); void SlideWindowTo(Window win, int fx, int fy, int tx, int ty, int speed); -void RefreshCurrentDesktop(void); void RefreshDesktop(int num); void DesktopsRefresh(void); -void InitDesktopControls(void); void DesktopSetBg(int desk, Background * bg, int refresh); int DesktopAt(int x, int y); void GotoDesktop(int num); @@ -1471,11 +1464,9 @@ void HideDesktop(int num); void ShowDesktop(int num); void StackDesktops(void); void StackDesktop(int num); -void UncoverDesktop(int num); void DesktopAddEwinToBottom(EWin * ewin); void DesktopAddEwinToTop(EWin * ewin); void GotoDesktopByEwin(EWin * ewin); -void FloatEwinAboveDesktops(EWin * ewin); void DesktopsEventsConfigure(int mode); void DeskDragStart(int desk); void DeskDragMotion(void); @@ -1597,9 +1588,9 @@ void EdgeWindowsHide(void); void EobjInit(EObj * eo, int type, int x, int y, int w, int h); #if USE_COMPOSITE -EObj *EobjCreate(Window win); +EObj *EobjCreate(Window win, int type); void EobjDestroy(EObj * eo); -EObj *EobjRegister(Window win); +EObj *EobjRegister(Window win, int type); void EobjUnregister(Window win); Pixmap EobjGetPixmap(const EObj * eo); void EobjChangeOpacity(EObj * eo, unsigned int opacity); diff --git a/src/desktops.c b/src/desktops.c index c8501379..9f70921c 100644 --- a/src/desktops.c +++ b/src/desktops.c @@ -174,25 +174,23 @@ DesktopInit(unsigned int dsk) { d->win = ECreateWindow(VRoot.win, -VRoot.w, -VRoot.h, VRoot.w, VRoot.h, 0); -#if 0 /* FIXME - TBD */ - XSelectInput(disp, d->win, EDESK_EVENT_MASK); +#if 0 /* USE_COMPOSITE */ + EobjRegister(d->win, EOBJ_TYPE_DESK); #endif } EventCallbackRegister(d->win, 0, DesktopHandleEvents, d); } -void +static void DesktopsInit(void) { int i; for (i = 0; i < ENLIGHTENMENT_CONF_NUM_DESKTOPS; i++) - { - DesktopInit(i); - } + DesktopInit(i); } -void +static void ChangeNumberOfDesktops(int quantity) { int pnum, i, num; @@ -247,7 +245,8 @@ ShowDesktopControls(void) } } -void +#if 0 /* Unused */ +static void ShowDesktopTabs(void) { Button **blst; @@ -263,7 +262,7 @@ ShowDesktopTabs(void) } } -void +static void HideDesktopTabs(void) { Button **blst; @@ -278,8 +277,9 @@ HideDesktopTabs(void) StackDesktops(); } } +#endif -void +static void ShowDesktopButtons(void) { Button **blst; @@ -297,12 +297,11 @@ ShowDesktopButtons(void) } } -void +static void MoveToDeskTop(int num) { int i, j; - EDBUG(6, "MoveToDeskTop"); j = -1; i = 0; while ((j < 0) && (i < ENLIGHTENMENT_CONF_NUM_DESKTOPS)) @@ -312,22 +311,20 @@ MoveToDeskTop(int num) i++; } if (j < 0) - EDBUG_RETURN_; + return; if (j > 0) { for (i = j - 1; i >= 0; i--) desks.order[i + 1] = desks.order[i]; desks.order[0] = num; } - EDBUG_RETURN_; } -void +static void MoveToDeskBottom(int num) { int i, j; - EDBUG(6, "MoveToDeskBottom"); j = -1; i = 0; while ((j < 0) && (i < ENLIGHTENMENT_CONF_NUM_DESKTOPS)) @@ -337,14 +334,13 @@ MoveToDeskBottom(int num) i++; } if (j < 0) - EDBUG_RETURN_; + return; if (j < ENLIGHTENMENT_CONF_NUM_DESKTOPS - 1) { for (i = j; i < ENLIGHTENMENT_CONF_NUM_DESKTOPS - 1; i++) desks.order[i] = desks.order[i + 1]; desks.order[ENLIGHTENMENT_CONF_NUM_DESKTOPS - 1] = num; } - EDBUG_RETURN_; } void @@ -352,8 +348,6 @@ SlideWindowTo(Window win, int fx, int fy, int tx, int ty, int speed) { int k, x, y; - EDBUG(5, "SlideWindowTo"); - ecore_x_grab(); ETimedLoopInit(0, 1024, speed); @@ -369,16 +363,6 @@ SlideWindowTo(Window win, int fx, int fy, int tx, int ty, int speed) EMoveWindow(disp, win, tx, ty); ecore_x_ungrab(); - - EDBUG_RETURN_; -} - -void -RefreshCurrentDesktop(void) -{ - EDBUG(5, "RefreshCurrentDesktop"); - RefreshDesktop(DesksGetCurrent()); - EDBUG_RETURN_; } void @@ -386,24 +370,20 @@ RefreshDesktop(int desk) { Background *bg; - EDBUG(4, "RefreshDesktop"); - desk = desk % ENLIGHTENMENT_CONF_NUM_DESKTOPS; if (!desks.desk[desk].viewable) - EDBUG_RETURN_; + return; if (EventDebug(EDBUG_TYPE_DESKS)) Eprintf("RefreshDesktop %d\n", desk); bg = desks.desk[desk].bg; if (!bg) - EDBUG_RETURN_; + return; BackgroundApply(bg, desks.desk[desk].win, 1); HintsSetRootInfo(desks.desk[desk].win, BackgroundGetPixmap(bg), BackgroundGetColor(bg)); - - EDBUG_RETURN_; } void @@ -430,8 +410,6 @@ InitDesktopControls(void) char s[512]; const char *t; - EDBUG(6, "InitDesktopControls"); - for (i = 0; i < ENLIGHTENMENT_CONF_NUM_DESKTOPS; i++) { Esnprintf(s, sizeof(s), "DRAGBAR_DESKTOP_%i", i); @@ -659,16 +637,13 @@ InitDesktopControls(void) else desks.desk[i].tag = NULL; } - EDBUG_RETURN_; } void DesktopSetBg(int desk, Background * bg, int refresh) { - EDBUG(5, "DesktopSetBg"); - if (desk < 0 || desk >= ENLIGHTENMENT_CONF_NUM_DESKTOPS) - EDBUG_RETURN_; + return; if (refresh) BackgroundPixmapFree(desks.desk[desk].bg); @@ -690,8 +665,6 @@ DesktopSetBg(int desk, Background * bg, int refresh) RefreshDesktop(desk); ModulesSignal(ESIGNAL_BACKGROUND_CHANGE, (void *)desk); - - EDBUG_RETURN_; } int @@ -699,18 +672,15 @@ DesktopAt(int x, int y) { int i; - EDBUG(3, "DesktopAt"); - for (i = 0; i < ENLIGHTENMENT_CONF_NUM_DESKTOPS; i++) { if ((x >= desks.desk[desks.order[i]].x) && (x < (desks.desk[desks.order[i]].x + VRoot.w)) && (y >= desks.desk[desks.order[i]].y) && (y < (desks.desk[desks.order[i]].y + VRoot.h))) - EDBUG_RETURN(desks.order[i]); + return desks.order[i]; } - - EDBUG_RETURN(0); + return 0; } static void @@ -758,8 +728,6 @@ GotoDesktop(int desk) static int pdesk = -1; int x, y; - EDBUG(2, "GotoDesktop"); - if (Conf.desks.wraparound) { if (desk >= Conf.desks.num) @@ -768,7 +736,7 @@ GotoDesktop(int desk) desk = Conf.desks.num - 1; } if (desk < 0 || desk >= Conf.desks.num || desk == pdesk) - EDBUG_RETURN_; + return; if (EventDebug(EDBUG_TYPE_DESKS)) Eprintf("GotoDesktop %d\n", desk); @@ -850,8 +818,6 @@ GotoDesktop(int desk) HandleDrawQueue(); pdesk = DesksGetCurrent(); - - EDBUG_RETURN_; } void @@ -861,15 +827,12 @@ MoveDesktop(int desk, int x, int y) EWin *const *lst; int n, v, dx, dy; - EDBUG(3, "MoveDesktop"); - if (desk < 0) - EDBUG_RETURN_; - if (desk >= Conf.desks.num) - EDBUG_RETURN_; - if (desk == 0) - EDBUG_RETURN_; + if (desk <= 0 || desk >= Conf.desks.num) + return; + dx = x - desks.desk[desk].x; dy = y - desks.desk[desk].y; + if ((x == 0) && (y == 0)) { n = -1; @@ -949,8 +912,18 @@ MoveDesktop(int desk, int x, int y) for (i = 0; i < n; i++) if (EoGetDesk(lst[i]) == desk) ICCCM_Configure(lst[i]); +} - EDBUG_RETURN_; +static void +UncoverDesktop(int desk) +{ + if (desk < 0 || desk >= Conf.desks.num) + return; + + desks.desk[desk].viewable = 1; + RefreshDesktop(desk); + if (desk != 0) + EMapWindow(disp, desks.desk[desk].win); } void @@ -958,10 +931,11 @@ RaiseDesktop(int desk) { int i; - EDBUG(3, "RaiseDesktop"); + if (desk < 0 || desk >= Conf.desks.num) + return; - if ((desk < 0) || (desk >= Conf.desks.num)) - EDBUG_RETURN_; + if (EventDebug(EDBUG_TYPE_DESKS)) + Eprintf("RaiseDesktop %d\n", desk); FocusNewDeskBegin(); desks.desk[desk].viewable = 1; @@ -988,17 +962,13 @@ RaiseDesktop(int desk) HintsSetCurrentDesktop(); EMapWindow(disp, desks.desk[desk].win); ecore_x_sync(); - - EDBUG_RETURN_; } void LowerDesktop(int desk) { - EDBUG(3, "LowerDesktop"); - if ((desk <= 0) || (desk >= Conf.desks.num)) - EDBUG_RETURN_; + return; FocusNewDeskBegin(); MoveToDeskBottom(desk); @@ -1016,26 +986,18 @@ LowerDesktop(int desk) HandleDrawQueue(); HintsSetCurrentDesktop(); ecore_x_sync(); - - EDBUG_RETURN_; } void HideDesktop(int desk) { - EDBUG(3, "HideDesktop"); - - if ((desk < 0) || (desk >= Conf.desks.num)) - EDBUG_RETURN_; - if (desk == 0) - EDBUG_RETURN_; + if (desk <= 0 || desk >= Conf.desks.num) + return; if (desks.desk[desk].viewable) BackgroundTouch(desks.desk[desk].bg); desks.desk[desk].viewable = 0; EMoveWindow(disp, desks.desk[desk].win, VRoot.w, 0); - - EDBUG_RETURN_; } void @@ -1043,12 +1005,8 @@ ShowDesktop(int desk) { int i; - EDBUG(3, "ShowDesktop"); - - if (desk < 0) - EDBUG_RETURN_; - if (desk >= Conf.desks.num) - EDBUG_RETURN_; + if (desk < 0 || desk >= Conf.desks.num) + return; desks.desk[desk].viewable = 1; RefreshDesktop(desk); @@ -1064,18 +1022,12 @@ ShowDesktop(int desk) StackDesktops(); EMapWindow(disp, desks.desk[desk].win); } - - EDBUG_RETURN_; } void StackDesktops(void) { - EDBUG(2, "StackDesktops"); - StackDesktop(0); - - EDBUG_RETURN_; } #define _APPEND_TO_WIN_LIST(win) \ @@ -1094,7 +1046,6 @@ StackDesktop(int desk) int i, num, tot; EObj *const *lst, *eo; - EDBUG(2, "StackDesktop"); tot = 0; wl = NULL; @@ -1154,7 +1105,11 @@ StackDesktop(int desk) for (i = 0; i < num; i++) { eo = lst[i]; +#if 0 /* USE_COMPOSITE */ + if (eo->floating || eo->type == EOBJ_TYPE_DESK) +#else if (eo->floating) +#endif continue; _APPEND_TO_WIN_LIST(eo->win); @@ -1180,23 +1135,6 @@ StackDesktop(int desk) if (wl) Efree(wl); - - EDBUG_RETURN_; -} - -void -UncoverDesktop(int desk) -{ - EDBUG(3, "UncoverDesktop"); - if (desk < 0) - EDBUG_RETURN_; - if (desk >= Conf.desks.num) - EDBUG_RETURN_; - desks.desk[desk].viewable = 1; - RefreshDesktop(desk); - if (desk != 0) - EMapWindow(disp, desks.desk[desk].win); - EDBUG_RETURN_; } void diff --git a/src/ecompmgr.c b/src/ecompmgr.c index b6a58cd8..2acc62d0 100644 --- a/src/ecompmgr.c +++ b/src/ecompmgr.c @@ -1489,6 +1489,109 @@ ECompMgrCheckAlphaMask(ECmWinInfo * w) 0, 0, 0); } +static void +ECompMgrRepaintObj(Picture pbuf, EObj * eo) +{ + Display *dpy = disp; + ECmWinInfo *w; + + /* Atm we first hook up when mapped */ + /* Maybe do it at init/create? */ + if (!eo->cmhook) + return; + w = eo->cmhook; + + if (!w->visible) + return; +#if CAN_DO_USABLE + if (!w->usable) + return; +#endif + if (!w->damaged) + return; + if (!w->picture) + return; + +#if 0 + ECompMgrWinSetPicts(eo); +#endif + + D2printf("ECompMgrRepaintObj %#lx %d %#lx\n", eo->win, w->mode, w->picture); + + /* Region of shaped window in screen coordinates */ + if (!w->borderSize) + w->borderSize = border_size(eo); + if (EventDebug(EDBUG_TYPE_COMPMGR3)) + ERegionShow("Window borderSize", w->borderSize); + + /* Region of window in screen coordinates */ + if (!w->extents) + w->extents = win_extents(dpy, eo); + if (EventDebug(EDBUG_TYPE_COMPMGR3)) + ERegionShow("Window extents", w->extents); + +#if 0 + if (!w->borderClip) + { + w->borderClip = XFixesCreateRegion(dpy, 0, 0); + XFixesCopyRegion(dpy, w->borderClip, region); + } + XFixesSetPictureClipRegion(dpy, pbuf, 0, 0, w->borderClip); +#endif + +#if ENABLE_SHADOWS + switch (Conf_compmgr.shadow) + { + case ECM_SHADOWS_OFF: + break; + case ECM_SHADOWS_SHARP: + if (w->opacity != OPAQUE && !w->shadowPict) + w->shadowPict = EPictureCreateSolid(True, + (double)w->opacity / + OPAQUE * 0.3, 0, 0, 0); + XRenderComposite(dpy, PictOpOver, + w->shadowPict ? w->shadowPict : transBlackPicture, + w->picture, pbuf, 0, 0, 0, 0, + w->a.x + w->shadow_dx, w->a.y + w->shadow_dy, + w->shadow_width, w->shadow_height); + break; + case ECM_SHADOWS_BLURRED: + if (w->shadow) + { + XRenderComposite(dpy, PictOpOver, blackPicture, w->shadow, + pbuf, 0, 0, 0, 0, + w->a.x + w->shadow_dx, w->a.y + w->shadow_dy, + w->shadow_width, w->shadow_height); + } + break; + } +#endif + + switch (w->mode) + { + default: + case WINDOW_SOLID: +#if 0 + XFixesSetPictureClipRegion(dpy, pbuf, 0, 0, region); + XFixesSubtractRegion(dpy, region, region, w->borderSize); +#endif + XRenderComposite(dpy, PictOpSrc, w->picture, None, pbuf, + 0, 0, 0, 0, w->rcx, w->rcy, w->rcw, w->rch); + case WINDOW_TRANS: + ECompMgrCheckAlphaMask(w); + XRenderComposite(dpy, PictOpOver, w->picture, w->alphaPict, pbuf, + 0, 0, 0, 0, w->rcx, w->rcy, w->rcw, w->rch); + break; + case WINDOW_ARGB: + ECompMgrCheckAlphaMask(w); + XRenderComposite(dpy, PictOpOver, w->picture, w->alphaPict, pbuf, + 0, 0, 0, 0, w->rcx, w->rcy, w->rcw, w->rch); + break; + } + XFixesDestroyRegion(dpy, w->borderClip); + w->borderClip = None; +} + static void ECompMgrRepaint(void) { @@ -1496,7 +1599,6 @@ ECompMgrRepaint(void) XserverRegion region = allDamage; EObj *const *lst, *eo; int i, num; - ECmWinInfo *w; Picture pict, pbuf; D2printf("ECompMgrRepaint rootBuffer=%#lx rootPicture=%#lx\n", @@ -1517,109 +1619,17 @@ ECompMgrRepaint(void) XRenderComposite(dpy, PictOpSrc, pict, None, pbuf, 0, 0, 0, 0, 0, 0, VRoot.w, VRoot.h); +#if 1 lst = EobjListStackGetForDesk(&num, 0 /*desk */ ); +#else + lst = EobjListStackGet(&num); +#endif + /* Normal objects */ for (i = num - 1; i >= 0; i--) { eo = lst[i]; - if (!eo->cmhook) - { - /* Atm we first hook up when mapped */ - /* Maybe do it at init/create? */ - continue; - } - w = eo->cmhook; - - if (!w->visible) - continue; -#if CAN_DO_USABLE - if (!w->usable) - continue; -#endif - if (!w->damaged) - continue; - if (!w->picture) - continue; - -#if 0 - ECompMgrWinSetPicts(eo); -#endif - - D2printf("ECompMgrRepaint paint %#lx %d %#lx\n", eo->win, w->mode, - w->picture); - - /* Region of shaped window in screen coordinates */ - if (!w->borderSize) - w->borderSize = border_size(eo); - if (EventDebug(EDBUG_TYPE_COMPMGR3)) - ERegionShow("Window borderSize", w->borderSize); - - /* Region of window in screen coordinates */ - if (!w->extents) - w->extents = win_extents(dpy, eo); - if (EventDebug(EDBUG_TYPE_COMPMGR3)) - ERegionShow("Window extents", w->extents); - -#if 0 - if (!w->borderClip) - { - w->borderClip = XFixesCreateRegion(dpy, 0, 0); - XFixesCopyRegion(dpy, w->borderClip, region); - } - XFixesSetPictureClipRegion(dpy, pbuf, 0, 0, w->borderClip); -#endif - -#if ENABLE_SHADOWS - switch (Conf_compmgr.shadow) - { - case ECM_SHADOWS_OFF: - break; - case ECM_SHADOWS_SHARP: - if (w->opacity != OPAQUE && !w->shadowPict) - w->shadowPict = EPictureCreateSolid(True, - (double)w->opacity / - OPAQUE * 0.3, 0, 0, 0); - XRenderComposite(dpy, PictOpOver, - w->shadowPict ? w->shadowPict : transBlackPicture, - w->picture, pbuf, 0, 0, 0, 0, - w->a.x + w->shadow_dx, w->a.y + w->shadow_dy, - w->shadow_width, w->shadow_height); - break; - case ECM_SHADOWS_BLURRED: - if (w->shadow) - { - XRenderComposite(dpy, PictOpOver, blackPicture, w->shadow, - pbuf, 0, 0, 0, 0, - w->a.x + w->shadow_dx, w->a.y + w->shadow_dy, - w->shadow_width, w->shadow_height); - } - break; - } -#endif - - switch (w->mode) - { - default: - case WINDOW_SOLID: -#if 0 - XFixesSetPictureClipRegion(dpy, pbuf, 0, 0, region); - XFixesSubtractRegion(dpy, region, region, w->borderSize); -#endif - XRenderComposite(dpy, PictOpSrc, w->picture, None, pbuf, - 0, 0, 0, 0, w->rcx, w->rcy, w->rcw, w->rch); - case WINDOW_TRANS: - ECompMgrCheckAlphaMask(w); - XRenderComposite(dpy, PictOpOver, w->picture, w->alphaPict, pbuf, - 0, 0, 0, 0, w->rcx, w->rcy, w->rcw, w->rch); - break; - case WINDOW_ARGB: - ECompMgrCheckAlphaMask(w); - XRenderComposite(dpy, PictOpOver, w->picture, w->alphaPict, pbuf, - 0, 0, 0, 0, w->rcx, w->rcy, w->rcw, w->rch); - break; - } - XFixesDestroyRegion(dpy, w->borderClip); - w->borderClip = None; + ECompMgrRepaintObj(pbuf, eo); } if (pbuf != rootPicture) @@ -1837,6 +1847,9 @@ ECompMgrConfigGet(cfg_composite * cfg) void ECompMgrConfigSet(const cfg_composite * cfg) { + if (Conf_compmgr.mode == ECM_MODE_OFF) + return; + if (cfg->enable != Conf_compmgr.enable) { Conf_compmgr.enable = cfg->enable; @@ -1951,7 +1964,7 @@ ECompMgrHandleRootEvent(XEvent * ev, void *prm) case MapNotify: eo = EobjListStackFind(ev->xmap.window); if (!eo) - eo = EobjRegister(ev->xmap.window); + eo = EobjRegister(ev->xmap.window, EOBJ_TYPE_OVERR); if (eo) ECompMgrWinMap(eo, ev->xmap.serial, True); break; diff --git a/src/eobj.c b/src/eobj.c index e1443d52..b405c202 100644 --- a/src/eobj.c +++ b/src/eobj.c @@ -146,7 +146,7 @@ EobjInit(EObj * eo, int type, int x, int y, int w, int h) #if USE_COMPOSITE EObj * -EobjCreate(Window win) +EobjCreate(Window win, int type) { EObj *eo; XWindowAttributes attr; @@ -160,7 +160,7 @@ EobjCreate(Window win) eo->win = win; - EobjInit(eo, EOBJ_TYPE_OVERR, attr.x, attr.y, attr.width, attr.height); + EobjInit(eo, type, attr.x, attr.y, attr.width, attr.height); return eo; } @@ -173,7 +173,7 @@ EobjDestroy(EObj * eo) } EObj * -EobjRegister(Window win) +EobjRegister(Window win, int type) { EObj *eo; @@ -181,7 +181,7 @@ EobjRegister(Window win) if (eo) return eo; - eo = EobjCreate(win); + eo = EobjCreate(win, type); if (!eo) return eo; diff --git a/src/tooltips.c b/src/tooltips.c index ada69792..e0df0560 100644 --- a/src/tooltips.c +++ b/src/tooltips.c @@ -85,7 +85,7 @@ TooltipCreate(const char *name, ImageClass * ic0, ImageClass * ic1, tt->win = ECreateWindow(VRoot.win, -10, -100, 1, 1, 1); tt->iwin = ECreateWindow(tt->win, -10, -100, 1, 1, 1); #if USE_COMPOSITE - eo = EobjRegister(tt->win); + eo = EobjRegister(tt->win, EOBJ_TYPE_OVERR); eo->opacity = OpacityExt(Conf_tooltips.opacity); #endif @@ -101,7 +101,7 @@ TooltipCreate(const char *name, ImageClass * ic0, ImageClass * ic1, win = ECreateWindow(VRoot.win, -10, -100, wh, wh, 1); tt->s_iclass[i]->ref_count++; #if USE_COMPOSITE - eo = EobjRegister(win); + eo = EobjRegister(win, EOBJ_TYPE_OVERR); eo->opacity = OpacityExt(Conf_tooltips.opacity); #endif }