From c0a8bd653d20bff0593a8ae04e239294bd394e88 Mon Sep 17 00:00:00 2001 From: Matthias Melcher Date: Sun, 19 Oct 2008 20:15:48 +0000 Subject: [PATCH] Fixed adding an idle handler during a draw() call (STR #1950) git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@6474 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- CHANGES | 2 ++ src/Fl.cxx | 4 ++++ test/mandelbrot.cxx | 6 +++--- 3 files changed, 9 insertions(+), 3 deletions(-) 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);}