summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Fl.cxx8
-rw-r--r--src/Fl_Timeout.cxx11
-rw-r--r--src/Fl_Timeout.h1
3 files changed, 20 insertions, 0 deletions
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.