Cleanups, preparing to fix desktop stacking with composite enabled.
SVN revision: 12673
This commit is contained in:
parent
8cd9eb8f7a
commit
614ab4597b
21
src/E.h
21
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);
|
||||
|
|
158
src/desktops.c
158
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
|
||||
|
|
213
src/ecompmgr.c
213
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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue