chiark / gitweb /
works - needs name etc.
authorianmdlvl <ianmdlvl>
Sun, 12 Dec 2004 01:19:01 +0000 (01:19 +0000)
committerianmdlvl <ianmdlvl>
Sun, 12 Dec 2004 01:19:01 +0000 (01:19 +0000)
cprogs/xacpi-simple.c

index 37a2e31..50b7965 100644 (file)
@@ -30,6 +30,9 @@
 
 #include <X11/Xlib.h>
 
+#define TOP      60
+#define BOTTOM 3600
+
 #define TIMEOUT 5000 /* milliseconds */
 
 /*---------- general utility stuff and declarations ----------*/
@@ -292,9 +295,6 @@ static void initacquire(void) {
 
 /*---------- display ----------*/
 
-#define TOP      60
-#define BOTTOM 3600
-
 #define COLOURS                                        \
   C(dimgrey)                                   \
   C(blue)                                      \
@@ -447,7 +447,7 @@ static void initgraphics(void) {
   if (!r) fail("init set background");
   lastbackground= pix_dimgrey;
 
-  XSelectInput(disp,win, ExposureMask|VisibilityChangeMask);
+  XSelectInput(disp,win, ExposureMask|StructureNotifyMask);
   XMapWindow(disp,win);
 }
  
@@ -465,47 +465,30 @@ static void newgeometry(void) {
 
 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);
   }
 }