From 0f36ba5408ab04586dc71ccb082fb28633df14bc Mon Sep 17 00:00:00 2001 From: bakkeby Date: Mon, 29 Aug 2022 21:37:03 +0200 Subject: [PATCH] restartsig: call XNextEvent only when there is data to be read ref. #295 --- dwm.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/dwm.c b/dwm.c index 8beafff..1756a6b 100644 --- a/dwm.c +++ b/dwm.c @@ -55,6 +55,10 @@ #include #endif // BAR_PANGO_PATCH +#if RESTARTSIG_PATCH +#include +#endif // RESTARTSIG_PATCH + #if XKB_PATCH #include #endif // XKB_PATCH @@ -819,7 +823,11 @@ static Atom clientatom[ClientLast]; #if ON_EMPTY_KEYS_PATCH static int isempty = 0; #endif // ON_EMPTY_KEYS_PATCH +#if RESTARTSIG_PATCH +static volatile sig_atomic_t running = 1; +#else static int running = 1; +#endif // RESTARTSIG_PATCH static Cur *cursor[CurLast]; static Clr **scheme; static Display *dpy; @@ -3186,6 +3194,30 @@ run(void) } } } +#elif RESTARTSIG_PATCH +void +run(void) +{ + XEvent ev; + XSync(dpy, False); + /* main event loop */ + while (running) { + struct pollfd pfd = { + .fd = ConnectionNumber(dpy), + .events = POLLIN, + }; + int pending = XPending(dpy) > 0 || poll(&pfd, 1, -1) > 0; + + if (!running) + break; + if (!pending) + continue; + + XNextEvent(dpy, &ev); + if (handler[ev.type]) + handler[ev.type](&ev); /* call handler */ + } +} #else void run(void) @@ -3208,7 +3240,7 @@ run(void) handler[ev.type](&ev); /* call handler */ } } -#endif // IPC_PATCH +#endif // IPC_PATCH | RESTARTSIG_PATCH void scan(void)