summaryrefslogtreecommitdiff
path: root/desktop/wmclock/wmclock_nopolling.patch
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/wmclock/wmclock_nopolling.patch')
-rw-r--r--desktop/wmclock/wmclock_nopolling.patch77
1 files changed, 77 insertions, 0 deletions
diff --git a/desktop/wmclock/wmclock_nopolling.patch b/desktop/wmclock/wmclock_nopolling.patch
new file mode 100644
index 0000000000..a5a338f784
--- /dev/null
+++ b/desktop/wmclock/wmclock_nopolling.patch
@@ -0,0 +1,77 @@
+--- 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);