--- 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 #include #include #include @@ -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);