+ r= XInternalConnectionNumbers(disp, &fds, &nfds);
+ if (!r) fail("XInternalConnectionNumbers");
+
+ 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);
+ }
+
+ while (XPending(disp)) {
+ XNextEvent(disp,&ev);
+ if (ev.type == ConfigureNotify)
+ newgeometry();
+ }
+
+ refresh();