#include <X11/Xlib.h>
+#define TOP 60
+#define BOTTOM 3600
+
#define TIMEOUT 5000 /* milliseconds */
/*---------- general utility stuff and declarations ----------*/
/*---------- display ----------*/
-#define TOP 60
-#define BOTTOM 3600
-
#define COLOURS \
C(dimgrey) \
C(blue) \
if (!r) fail("init set background");
lastbackground= pix_dimgrey;
- XSelectInput(disp,win, ExposureMask|VisibilityChangeMask);
+ XSelectInput(disp,win, ExposureMask|StructureNotifyMask);
XMapWindow(disp,win);
}
static void eventloop(void) {
XEvent ev;
- int *fds, nfds, npfds, *fdp, i, r;
- struct pollfd *pfds, *pfd;
+ struct pollfd pfd;
+ int r;
newgeometry();
+ refresh();
- npfds= 0;
- pfds= 0;
for (;;) {
- r= XInternalConnectionNumbers(disp, &fds, &nfds);
- if (!r) fail("XInternalConnectionNumbers");
+ pfd.fd= ConnectionNumber(disp);
+ pfd.events= POLLIN|POLLERR;
- if (npfds != nfds) {
- pfds= realloc(pfds, sizeof(*pfds) * nfds);
- if (!pfds) failr("realloc for pollfds",errno);
- npfds= nfds;
- }
- for (i=0, pfd=pfds, fdp=fds;
- i<nfds;
- i++, pfd++, fdp++) {
- pfd->fd= *fdp;
- pfd->events= POLLIN|POLLERR;
- }
- XFree(fds);
-
- r= poll(pfds,npfds,TIMEOUT);
- if (r==-1) failr("poll",errno);
-
- for (i=0, pfd=pfds;
- i<nfds;
- i++, pfd++) {
- if (pfd->revents)
- XProcessInternalConnection(disp,pfd->fd);
- }
+ r= poll(&pfd,1,TIMEOUT);
+ if (r==-1 && errno!=EINTR) failr("poll",errno);
while (XPending(disp)) {
XNextEvent(disp,&ev);
- if (ev.type == ConfigureNotify)
- newgeometry();
+ if (ev.type == ConfigureNotify) {
+ XConfigureEvent *ce= (void*)&ev;
+ width= ce->width;
+ height= ce->height;
+ }
}
refresh();
+ XFlush(disp);
}
}