contrib/wmclock/wmclock-nopolling.diff
2009-01-11 21:13:11 +02:00

78 lines
1.9 KiB
Diff

--- wmclock.c.orig 2008-09-28 17:41:49.000000000 +0200
+++ wmclock.c 2008-09-28 20:33:59.000000000 +0200
@@ -20,6 +20,7 @@
* with the software or the use or other dealings in the software.
*/
+#include <sys/select.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/time.h>
@@ -141,7 +142,8 @@
Display *dpy;
Window rootWindow;
int screen;
-/* int xFd; */
+int xFd;
+fd_set xFdSet;
int displayDepth;
XSizeHints sizeHints;
XWMHints wmHints;
@@ -801,6 +803,7 @@
XTextProperty wmName;
XClassHint classHint;
Pixmap shapeMask;
+ struct timeval nextEvent;
/* Parse command line options */
progName = extractProgName(argv[0]);
@@ -849,7 +852,7 @@
screen = DefaultScreen(dpy);
rootWindow = RootWindow(dpy, screen);
displayDepth = DefaultDepth(dpy, screen);
- /* xFd = XConnectionNumber(dpy); */
+ xFd = XConnectionNumber(dpy);
/* Icon Daten nach XImage konvertieren */
GetXpms();
@@ -1049,14 +1052,32 @@
poll((struct poll *) 0, (size_t) 0, 50); /* 5/100 sec */
}
#else
- if (enableYearDisplay)
- {
- usleep(200000L); /* 1/5 sec */
- }
+ //We compute the date of next event, in order to avoid polling
+ if (enableBlinking)
+ {
+ gettimeofday(&nextEvent,NULL);
+ nextEvent.tv_sec = 0;
+ nextEvent.tv_usec = 1000000-nextEvent.tv_usec;
+ }
else
- {
- usleep(50000L); /* 5/100 sec */
- }
+ {
+ if (enableYearDisplay)
+ {
+ nextEvent.tv_sec = 86400-actualTime%86400;
+ nextEvent.tv_usec = 0;
+ }
+ else
+ {
+ nextEvent.tv_sec = 60-actualTime%60;
+ nextEvent.tv_usec = 0;
+ }
+ }
+ printf("xFd %d\n", xFd);
+ FD_ZERO(&xFdSet);
+ FD_SET(xFd,&xFdSet);
+ printf("debut select %d\n", nextEvent.tv_sec);
+ select(FD_SETSIZE,&xFdSet,NULL,NULL,&nextEvent);
+ printf("fin select\n");
#endif
}
return(0);