diff --git a/CHANGES b/CHANGES index 813260a4b..c5f3e9895 100644 --- a/CHANGES +++ b/CHANGES @@ -9,6 +9,8 @@ CHANGES IN FLTK 1.1.10 function (STR #1945) - Fl_Group and Fl_Scroll now resize themselves before resizing their children (STR #2032) + - Fixed adding an idle handler during + a draw() call (STR #1950) CHANGES IN FLTK 1.1.9 diff --git a/src/Fl.cxx b/src/Fl.cxx index dde61972d..4e25c7b61 100644 --- a/src/Fl.cxx +++ b/src/Fl.cxx @@ -323,6 +323,8 @@ double Fl::wait(double time_to_wait) { if (idle) time_to_wait = 0.0; } flush(); + if (idle && !in_idle) // 'idle' may have been set within flush() + time_to_wait = 0.0; return fl_wait(time_to_wait); #else @@ -369,6 +371,8 @@ double Fl::wait(double time_to_wait) { } else { // do flush first so that user sees the display: flush(); + if (idle && !in_idle) // 'idle' may have been set within flush() + time_to_wait = 0.0; return fl_wait(time_to_wait); } #endif diff --git a/test/mandelbrot.cxx b/test/mandelbrot.cxx index 43ef78092..1c89aef94 100644 --- a/test/mandelbrot.cxx +++ b/test/mandelbrot.cxx @@ -33,12 +33,12 @@ Drawing_Window mbrot; Drawing_Window jbrot; -void idle() { - if (!mbrot.d->idle() && !(jbrot.d && jbrot.d->idle())) Fl::set_idle(0); +void idle(void*) { + if (!mbrot.d->idle() && !(jbrot.d && jbrot.d->idle())) Fl::remove_idle(idle); } void set_idle() { - Fl::set_idle(idle); + Fl::add_idle(idle); } static void window_callback(Fl_Widget*, void*) {exit(0);}