// -*- 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"
extern "C" {
#ifdef HAVE_SYS_SELECT_H
# include <sys/select.h>
-#else
-# ifdef HAVE_UNISTD_H
-# include <sys/types.h>
-# include <unistd.h>
-# endif // HAVE_UNISTD_H
#endif // HAVE_SYS_SELECT_H
+
+#ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+#endif
}
namespace otk {
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) {
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);
}
}