Add method to list running timeouts (#1306).

\see Fl::timeout_list();
This commit is contained in:
Matthias Melcher 2025-11-28 00:55:48 +01:00
parent 6568f60ab8
commit ee43155a4b
4 changed files with 23 additions and 0 deletions

View File

@ -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);

View File

@ -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

View File

@ -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.

View File

@ -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.