From 0a124ac7e1b7c6210cd03ecf5d24bee2493bcc16 Mon Sep 17 00:00:00 2001 From: Albrecht Schlosser Date: Mon, 9 Dec 2019 17:53:58 +0100 Subject: Fix Fl::add_timeout() in draw() under Linux (STR 3188) Timeouts queued during Fl_Widget::draw() - called by Fl::flush() - would not be serviced unless other events were processed. For Details see STR 3188. --- src/drivers/X11/Fl_X11_Screen_Driver.cxx | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/drivers') diff --git a/src/drivers/X11/Fl_X11_Screen_Driver.cxx b/src/drivers/X11/Fl_X11_Screen_Driver.cxx index 0e1864291..75467b71b 100644 --- a/src/drivers/X11/Fl_X11_Screen_Driver.cxx +++ b/src/drivers/X11/Fl_X11_Screen_Driver.cxx @@ -480,6 +480,10 @@ double Fl_X11_Screen_Driver::wait(double time_to_wait) Fl::flush(); if (Fl::idle && !in_idle) // 'idle' may have been set within flush() time_to_wait = 0.0; + else if (first_timeout && first_timeout->time < time_to_wait) { + // another timeout may have been queued within flush(), see STR #3188 + time_to_wait = first_timeout->time >= 0.0 ? first_timeout->time : 0.0; + } return this->poll_or_select_with_delay(time_to_wait); } } -- cgit v1.2.3