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 #endif
#include <string.h> // FIXME: Fl::is_scheme(): strcmp needs string.h #include <string.h> // FIXME: Fl::is_scheme(): strcmp needs string.h
#include <vector>
class Fl_Widget; class Fl_Widget;
class Fl_Window; 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 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 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); 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 void add_check(Fl_Timeout_Handler, void* = 0);
FL_EXPORT extern int has_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 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 // 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; 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 Remove the timeout from the active timer queue and push it onto
the stack of currently running callbacks. 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 repeat_timeout(double time, Fl_Timeout_Handler cb, void *data);
static void remove_timeout(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 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. // Elapse timeouts, i.e. calculate new delay time of all timers.
// This does not call the timer callbacks. // This does not call the timer callbacks.