void x11_mkwin(XConf* x, int width, int height, int evmask);
void x11_mkdialog(XConf* x, int width, int height, int evmask);
-int x11_process_events(XConf* x, void (*redrawfn)(XConf*));
+void x11_process_events(XConf* x, void (*redrawfn)(XConf*));
void x11_event_loop(XConf* x, void (*redraw)(XConf* x));
int x11_getptr(XConf* x, int* ptrx, int* ptry);
uint32_t x11_getkey(XConf* x, XEvent* e);
}
}
-int x11_process_events(XConf* x, void (*redrawfn)(XConf*)) {
+void x11_process_events(XConf* x, void (*redrawfn)(XConf*)) {
int nqueued, nevents;
/* reap zombie background processes */
for (int status; waitpid(-1, &status, WNOHANG) > 0;);
if (nqueued) redrawfn(x);
XFlush(x->display);
} while ((nqueued = XEventsQueued(x->display, QueuedAfterFlush)) > 0);
- return 0;
}
void x11_event_loop(XConf* x, void (*redraw)(XConf* x)) {
static void xupdate(Job* job) {
/* redraw if we have changes or if we have input from a job */
- if (!x11_process_events(&X, xredraw) && !job)
- xredraw(&X);
+ x11_process_events(&X, xredraw);
+ if (!job) xredraw(&X);
}
void win_init(void) {
job_spawn(ConnectionNumber(X.display), xupdate, 0, 0);
XSync(X.display, False);
while (X.running) {
- if (job_poll(Timeout))
+ if (!job_poll(Timeout))
xupdate(NULL);
}
}