Make shadow on/off change effectve immediately.

SVN revision: 28281
This commit is contained in:
Kim Woelders 2007-02-07 01:51:18 +00:00
parent 928e8aeaf6
commit 3648a92524
5 changed files with 45 additions and 5 deletions

View File

@ -1275,6 +1275,9 @@ ECompMgrWinFade(EObj * eo, unsigned int op_from, unsigned int op_to)
{
ECmWinInfo *cw = eo->cmhook;
if (op_from == op_to && op_from == eo->opacity)
return;
if (!cw->anim_fade)
cw->anim_fade = AnimatorAdd(doECompMgrWinFade, eo);
cw->opacity_to = op_to;
@ -1558,6 +1561,33 @@ ECompMgrWinDamageArea(EObj * eo, int x __UNUSED__, int y __UNUSED__,
ECompMgrDamageMergeObject(eo, cw->shape, 0);
}
void
ECompMgrWinChangeShadow(EObj * eo, int shadow)
{
ECmWinInfo *cw = eo->cmhook;
if (!cw || !eo->shown)
goto done;
if (!shadow && eo->shadow)
{
/* Disable shadow */
ECompMgrDamageMergeObject(eo, cw->extents, 1);
cw->extents = None;
ECompMgrWinInvalidate(eo, INV_SHADOW);
}
else if (shadow && !eo->shadow)
{
/* Enable shadow */
ECompMgrWinInvalidate(eo, INV_SHADOW);
eo->shadow = shadow;
cw->extents = win_extents(eo);
ECompMgrDamageMergeObject(eo, cw->extents, 0);
}
done:
eo->shadow = shadow;
}
static void
ECompMgrWinConfigure(EObj * eo, XEvent * ev)
{

View File

@ -52,6 +52,7 @@ void ECompMgrWinReparent(EObj * eo, Desk * dsk, int change_xy);
void ECompMgrWinRaiseLower(EObj * eo, int delta);
void ECompMgrWinChangeShape(EObj * eo);
void ECompMgrWinChangeOpacity(EObj * eo, unsigned int opacity);
void ECompMgrWinChangeShadow(EObj * eo, int shadow);
Pixmap ECompMgrWinGetPixmap(const EObj * eo);
void ECompMgrConfigGet(cfg_composite * cfg);

View File

@ -557,6 +557,14 @@ EobjChangeOpacity(EObj * eo, unsigned int opacity)
#endif
}
#if USE_COMPOSITE
void
EobjChangeShadow(EObj * eo, int shadow)
{
ECompMgrWinChangeShadow(eo, shadow);
}
#endif
void
EobjSlideTo(EObj * eo, int fx, int fy, int tx, int ty, int speed)
{

View File

@ -44,13 +44,13 @@ struct _eobj
char sticky;
char floating;
unsigned external:1;
unsigned argb:1;
unsigned inputonly:1;
unsigned shown:1;
unsigned gone:1;
unsigned noredir:1; /* Do not redirect */
unsigned shadow:1; /* Enable shadows */
unsigned fade:1;
unsigned argb:1;
unsigned fade:1; /* Enable fading */
#if USE_COMPOSITE
unsigned int opacity;
ECmWinInfo *cmhook;
@ -114,16 +114,16 @@ struct _eobj
#define EoChangeOpacity(eo, _o) EobjChangeOpacity(EoObj(eo), _o)
#define EoSetFade(eo, _x) EoObj(eo)->fade = (_x)
#define EoSetNoRedirect(eo, _x) EoObj(eo)->noredir = (_x)
#define EoSetOpacity(eo, _o) EoObj(eo)->opacity = (_o)
#define EoSetShadow(eo, _x) EoObj(eo)->shadow = (_x)
#if USE_COMPOSITE
#define EoSetOpacity(eo, _o) EoObj(eo)->opacity = (_o)
#define EoGetOpacity(eo) (EoObj(eo)->opacity)
#define EoGetFade(eo) (EoObj(eo)->fade)
#define EoChangeShadow(eo, _x) EobjChangeShadow(EoObj(eo), _x)
#define EoGetShadow(eo) (EoObj(eo)->shadow)
#define EoGetNoRedirect(eo) (EoObj(eo)->noredir)
#define EoGetSerial(eo) (EoObj(eo)->serial)
#else
#define EoSetOpacity(eo, _o)
#define EoGetSerial(eo) 0
#endif
@ -166,6 +166,7 @@ void EobjShapeUpdate(EObj * eo, int propagate);
void EobjsRepaint(void);
Pixmap EobjGetPixmap(const EObj * eo);
void EobjChangeOpacity(EObj * eo, unsigned int opacity);
void EobjChangeShadow(EObj * eo, int shadow);
void EobjSetLayer(EObj * eo, int layer);
void EobjSetFloating(EObj * eo, int floating);
int EobjIsShaped(const EObj * eo);

View File

@ -923,7 +923,7 @@ IpcWinop(const WinOp * wop, EWin * ewin, const char *prm)
case EWIN_OP_SHADOW:
on = EoGetShadow(ewin);
if (SetEwinBoolean(wop->name, &on, param1, 1))
EoSetShadow(ewin, on);
EoChangeShadow(ewin, on);
break;
case EWIN_OP_NO_REDIRECT: