diff options
| -rw-r--r-- | FL/Fl.H | 3 | ||||
| -rw-r--r-- | src/Fl.cxx | 8 | ||||
| -rw-r--r-- | src/Fl_Timeout.cxx | 11 | ||||
| -rw-r--r-- | src/Fl_Timeout.h | 1 |
4 files changed, 23 insertions, 0 deletions
@@ -50,6 +50,7 @@ #endif #include <string.h> // FIXME: Fl::is_scheme(): strcmp needs string.h +#include <vector> class Fl_Widget; class Fl_Window; @@ -242,6 +243,8 @@ FL_EXPORT extern void repeat_timeout(double t, Fl_Timeout_Handler cb, void *data FL_EXPORT extern int has_timeout(Fl_Timeout_Handler cb, void *data = 0); FL_EXPORT extern void remove_timeout(Fl_Timeout_Handler cb, void *data = 0); FL_EXPORT extern int remove_next_timeout(Fl_Timeout_Handler cb, void *data = 0, void **data_return = 0); +typedef struct { double t; Fl_Timeout_Handler cb; void *data; } TimeoutData; +FL_EXPORT extern std::vector<TimeoutData> timeout_list(); FL_EXPORT extern void add_check(Fl_Timeout_Handler, void* = 0); FL_EXPORT extern int has_check(Fl_Timeout_Handler, void* = 0); diff --git a/src/Fl.cxx b/src/Fl.cxx index 22ad0353a..c470f95e3 100644 --- a/src/Fl.cxx +++ b/src/Fl.cxx @@ -448,6 +448,14 @@ int Fl::remove_next_timeout(Fl_Timeout_Handler cb, void *data, void **data_retur return Fl_Timeout::remove_next_timeout(cb, data, data_return); } +/** + Return a list of all currently running timeouts. + \return a vector with all relevant timeout data +*/ +std::vector<Fl::TimeoutData> Fl::timeout_list() { + return Fl_Timeout::timeout_list(); +} + //////////////////////////////////////////////////////////////// // Checks are just stored in a list. They are called in the reverse diff --git a/src/Fl_Timeout.cxx b/src/Fl_Timeout.cxx index 9aa89b839..4ba8a0f63 100644 --- a/src/Fl_Timeout.cxx +++ b/src/Fl_Timeout.cxx @@ -344,6 +344,17 @@ int Fl_Timeout::remove_next_timeout(Fl_Timeout_Handler cb, void *data, void **da return ret; } +std::vector<Fl::TimeoutData> Fl_Timeout::timeout_list() { + std::vector<Fl::TimeoutData> v; + const Fl_Timeout *t = first_timeout; + while (t) { + v.push_back( { t->time, t->callback, t->data } ); + t = t->next; + } + return v; +} + + /** Remove the timeout from the active timer queue and push it onto the stack of currently running callbacks. diff --git a/src/Fl_Timeout.h b/src/Fl_Timeout.h index 9d9cc2337..279935a71 100644 --- a/src/Fl_Timeout.h +++ b/src/Fl_Timeout.h @@ -109,6 +109,7 @@ public: static void repeat_timeout(double time, Fl_Timeout_Handler cb, void *data); static void remove_timeout(Fl_Timeout_Handler cb, void *data); static int remove_next_timeout(Fl_Timeout_Handler cb, void *data = NULL, void **data_return = NULL); + static std::vector<Fl::TimeoutData> timeout_list(); // Elapse timeouts, i.e. calculate new delay time of all timers. // This does not call the timer callbacks. |
