diff --git a/src/ecompmgr.c b/src/ecompmgr.c index 1e816326..95f5a7d4 100644 --- a/src/ecompmgr.c +++ b/src/ecompmgr.c @@ -1569,6 +1569,15 @@ ECompMgrWinMoveResize(EObj * eo, int change_xy, int change_wh, int change_bw) } } +void +ECompMgrWinDamageArea(EObj * eo, int x __UNUSED__, int y __UNUSED__, + int w __UNUSED__, int h __UNUSED__) +{ + ECmWinInfo *cw = eo->cmhook; + + ECompMgrDamageMergeObject(eo, cw->shape, 0); +} + static void ECompMgrWinConfigure(EObj * eo, XEvent * ev) { diff --git a/src/ecompmgr.h b/src/ecompmgr.h index 59d55f16..14a5eb04 100644 --- a/src/ecompmgr.h +++ b/src/ecompmgr.h @@ -48,6 +48,8 @@ void ECompMgrWinMap(EObj * eo); void ECompMgrWinUnmap(EObj * eo); void ECompMgrWinMoveResize(EObj * eo, int change_xy, int change_wh, int change_bw); +void ECompMgrWinDamageArea(EObj * eo, int x, int y, int w, + int h); void ECompMgrWinReparent(EObj * eo, Desk * dsk, int change_xy); void ECompMgrWinRaise(EObj * eo); void ECompMgrWinLower(EObj * eo); diff --git a/src/eobj.c b/src/eobj.c index 7dffab9f..6bdf9356 100644 --- a/src/eobj.c +++ b/src/eobj.c @@ -409,6 +409,15 @@ EobjResize(EObj * eo, int w, int h) EobjMoveResize(eo, eo->x, eo->y, w, h); } +void +EobjDamage(EObj * eo) +{ +#if USE_COMPOSITE + if (eo->cmhook) + ECompMgrWinDamageArea(eo, 0, 0, eo->w, eo->h); +#endif +} + void EobjReparent(EObj * eo, EObj * dst, int x, int y) { diff --git a/src/eobj.h b/src/eobj.h index 0866d1e1..7f64c909 100644 --- a/src/eobj.h +++ b/src/eobj.h @@ -143,6 +143,7 @@ void EobjUnmap(EObj * eo); void EobjMove(EObj * eo, int x, int y); void EobjResize(EObj * eo, int w, int h); void EobjMoveResize(EObj * eo, int x, int y, int w, int h); +void EobjDamage(EObj * eo); void EobjReparent(EObj * eo, EObj * dst, int x, int y); int EobjRaise(EObj * eo); int EobjLower(EObj * eo); diff --git a/src/progress.c b/src/progress.c index ceb046ad..1a4f788a 100644 --- a/src/progress.c +++ b/src/progress.c @@ -67,6 +67,9 @@ ProgressbarCreate(const char *name, int w, int h) ProgressbarDestroy(p); return NULL; } + p->win->fade = 0; + p->n_win->fade = 0; + p->p_win->fade = 0; p->ic = ImageclassFind("PROGRESS_BAR", 1); if (p->ic) @@ -96,6 +99,8 @@ ProgressbarDestroy(Progressbar * p) { int i, j, dy; + ProgressbarHide(p); + dy = 2 * p->h; EobjWindowDestroy(p->win); EobjWindowDestroy(p->n_win); @@ -175,8 +180,10 @@ ProgressbarSet(Progressbar * p, int progress) pad->left, pad->top, p->h * 5 - (pad->left + pad->right), p->h - (pad->top + pad->bottom), p->h - (pad->top + pad->bottom), TextclassGetJustification(p->tnc)); + /* Hack - We may not be running in the event loop here */ + EobjDamage(p->n_win); - EFlush(); + EobjsRepaint(); } void @@ -201,7 +208,7 @@ ProgressbarShow(Progressbar * p) p->h - (pad->top + pad->bottom), p->h - (pad->top + pad->bottom), TextclassGetJustification(p->tnc)); - EFlush(); + EobjsRepaint(); } void