summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlbrecht Schlosser <albrechts.fltk@online.de>2019-12-09 17:53:58 +0100
committerAlbrecht Schlosser <albrechts.fltk@online.de>2019-12-09 17:53:58 +0100
commit0a124ac7e1b7c6210cd03ecf5d24bee2493bcc16 (patch)
tree25b7f398a2ce66ec2ecbcf39145a46cc755439e8 /src
parent61a86d194160d8c896d1f47cb8a8216625333fed (diff)
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.
Diffstat (limited to 'src')
-rw-r--r--src/drivers/X11/Fl_X11_Screen_Driver.cxx4
1 files changed, 4 insertions, 0 deletions
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);
}
}