78 lines
1.9 KiB
Diff
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);
|