diff options
Diffstat (limited to 'desktop/wmclock/wmclock_nopolling.patch')
-rw-r--r-- | desktop/wmclock/wmclock_nopolling.patch | 77 |
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); |