X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=otk%2Ftimer.cc;h=0a0083146afee234012a7e30796f33d4bd60b393;hb=3dfe9f4ebeb7abd8446c52db0232b9f610a78846;hp=ceee8f2a2c57abc9488a8342c4ed3e0969e98bd8;hpb=64ac7d053748494b3a8d0be9f1d55f6f5b9f1a90;p=chaz%2Fopenbox diff --git a/otk/timer.cc b/otk/timer.cc index ceee8f2a..0a008314 100644 --- a/otk/timer.cc +++ b/otk/timer.cc @@ -1,8 +1,6 @@ // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- -#ifdef HAVE_CONFIG_H -# include "../config.h" -#endif // HAVE_CONFIG_H +#include "config.h" #include "timer.hh" #include "display.hh" @@ -10,12 +8,11 @@ extern "C" { #ifdef HAVE_SYS_SELECT_H # include -#else -# ifdef HAVE_UNISTD_H -# include -# include -# endif // HAVE_UNISTD_H #endif // HAVE_SYS_SELECT_H + +#ifdef HAVE_SYS_TIME_H +# include +#endif } namespace otk { @@ -87,6 +84,11 @@ void Timer::dispatchTimers(bool wait) curr->_action(curr->_data); timevalAdd(curr->_timeout, curr->_delay); _q.push(curr); + + /* if at least one timer fires, then don't wait on X events, as there may + already be some in the queue from the timer callbacks. + */ + wait = false; } if (wait) { @@ -94,9 +96,9 @@ void Timer::dispatchTimers(bool wait) fd = ConnectionNumber(**display); FD_ZERO(&selset); FD_SET(fd, &selset); - if (nearestTimeout(next)) + if (nearestTimeout(next)) { select(fd + 1, &selset, NULL, NULL, &next); - else + } else select(fd + 1, &selset, NULL, NULL, NULL); } }