X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=otk%2Ftimer.cc;h=4f993616b1ac0a6df3af1b1ad69be8a73a6c5f44;hb=5adb8c82d19a4a7fbd740e24acf2260ed7ab519c;hp=2fbeaf858f276277dafcce49e0710281f7721690;hpb=53bed5e59a802f527a22d940d830543726403f1e;p=chaz%2Fopenbox diff --git a/otk/timer.cc b/otk/timer.cc index 2fbeaf85..4f993616 100644 --- a/otk/timer.cc +++ b/otk/timer.cc @@ -63,8 +63,9 @@ void Timer::dispatchTimers(bool wait) while (!_q.empty()) { curr = _q.top(); - /* since we overload the destructor to keep from removing from the middle of - the priority queue, set _del_me, we have to do our real delete in here. + /* since we overload the destructor to keep from removing from the middle + of the priority queue, set _del_me, we have to do our real delete in + here. */ if (curr->_del_me) { _q.pop(); @@ -86,6 +87,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) { @@ -93,9 +99,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); } }