diff --git a/src/E.h b/src/E.h index bf32d732..dc88f2dc 100644 --- a/src/E.h +++ b/src/E.h @@ -1547,6 +1547,7 @@ void EobjReparent(EObj * eo, int desk, int x, int y); int EobjRaise(EObj * eo); int EobjLower(EObj * eo); void EobjChangeShape(EObj * eo); +void EobjsRepaint(void); #if USE_COMPOSITE Pixmap EobjGetPixmap(const EObj * eo); diff --git a/src/ecompmgr.c b/src/ecompmgr.c index df62e8e8..d530206e 100644 --- a/src/ecompmgr.c +++ b/src/ecompmgr.c @@ -1635,7 +1635,7 @@ ECompMgrRepaintObj(Picture pbuf, XserverRegion region, EObj * eo, int mode) } } -static void +void ECompMgrRepaint(void) { Display *dpy = disp; diff --git a/src/ecompmgr.h b/src/ecompmgr.h index 05739a08..aac23533 100644 --- a/src/ecompmgr.h +++ b/src/ecompmgr.h @@ -34,6 +34,7 @@ typedef struct int EVisualIsARGB(Visual * vis); void ECompMgrParseArgs(const char *args); +void ECompMgrRepaint(void); void ECompMgrWinNew(EObj * eo); void ECompMgrWinDel(EObj * eo, Bool gone, Bool do_fade); diff --git a/src/eobj.c b/src/eobj.c index 8b9c3899..bf4daea6 100644 --- a/src/eobj.c +++ b/src/eobj.c @@ -495,3 +495,12 @@ EobjsSlideBy(EObj ** peo, int num, int dx, int dy, int speed) Efree(xy); } + +void +EobjsRepaint(void) +{ +#if USE_COMPOSITE + ECompMgrRepaint(); + ESync(); +#endif +} diff --git a/src/events.c b/src/events.c index 561dd575..2d6c3c81 100644 --- a/src/events.c +++ b/src/events.c @@ -560,6 +560,7 @@ EventsProcess(XEvent ** evq_p, int *evq_n) return qsz; } +#if 0 /* FIXME - Remove? */ void CheckEvent(void) { @@ -602,6 +603,7 @@ CheckEvent(void) ModulesSignal(ESIGNAL_IDLE, NULL); } +#endif /* * This is the primary event loop. Everything that is going to happen in the diff --git a/src/iconify.c b/src/iconify.c index 23cb2618..f481bee0 100644 --- a/src/iconify.c +++ b/src/iconify.c @@ -717,7 +717,7 @@ IconboxesEwinDeIconify(EWin * ewin) ib = SelectIconboxForEwin(ewin); if (ib && ib->animate && !ewin->st.showingdesk) { - CheckEvent(); + EobjsRepaint(); IB_Animate(0, ewin, ib->ewin); } } @@ -3133,13 +3133,18 @@ static void IconboxObjSwinDel(Iconbox * ib, Window win) { int i; + SWin *swin; i = IconboxObjSwinFind(ib, win); if (i < 0) return; - if (IconboxObjectDel(ib, ib->objs[i].u.swin) == 0) + swin = ib->objs[i].u.swin; + + if (IconboxObjectDel(ib, swin) == 0) IconboxRedraw(ib); + + Efree(swin); } static void diff --git a/src/menus.c b/src/menus.c index e886dc44..133cbb36 100644 --- a/src/menus.c +++ b/src/menus.c @@ -1301,7 +1301,7 @@ MenuEventKeyPress(Menu * m, XEvent * ev) if (!mi->params) break; MenusHide(); - CheckEvent(); + EobjsRepaint(); SetContextEwin(Mode_menus.context_ewin); EFunc(mi->params); SetContextEwin(NULL); @@ -1376,7 +1376,7 @@ MenuItemEventMouseUp(MenuItem * mi, XEvent * ev __UNUSED__) if ((mi->params) /* && (!Mode_menus.just_shown) */ ) { MenusHide(); - CheckEvent(); + EobjsRepaint(); SetContextEwin(Mode_menus.context_ewin); EFunc(mi->params); SetContextEwin(NULL); diff --git a/src/misc.c b/src/misc.c index c69db8e8..33a2f2f7 100644 --- a/src/misc.c +++ b/src/misc.c @@ -173,8 +173,7 @@ ETimedLoopNext(void) etl_k = etl_k1 + tm * etl_fac; y = ETimeCurve(etl_k1, etl_k2, etl_k, 2, 1.0); - ESync(); - CheckEvent(); + EobjsRepaint(); return y; }