summaryrefslogtreecommitdiff
path: root/src/Fl_Window.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/Fl_Window.cxx')
-rw-r--r--src/Fl_Window.cxx38
1 files changed, 26 insertions, 12 deletions
diff --git a/src/Fl_Window.cxx b/src/Fl_Window.cxx
index 9119b7620..b4d3c621f 100644
--- a/src/Fl_Window.cxx
+++ b/src/Fl_Window.cxx
@@ -402,28 +402,42 @@ void Fl_Window::free_icons() {
}
/**
- Waits for the window to be fully displayed after calling show().
+ Waits for the window to be displayed after calling show().
Fl_Window::show() is not guaranteed to show and draw the window on
all platforms immediately. Instead this is done in the background;
- particularly on X11 this will take a few messages (client server
- roundtrips) to display the window.
-
- Usually this small delay doesn't matter, but in some cases you may
- want to have the window instantiated and displayed synchronously.
+ particularly on X11 it will take a few messages (client server
+ roundtrips) to display the window. Usually this small delay doesn't
+ matter, but in some cases you may want to have the window instantiated
+ and displayed synchronously.
Currently (as of FLTK 1.3.3) this method only has an effect on X11.
On Windows and Mac OS X show() is always synchronous. If you want to
write portable code and need this synchronous show() feature, add
- win->wait_for_expose() on all platforms, FLTK will just do the
+ win->wait_for_expose() on all platforms, and FLTK will just do the
right thing.
This method can be used for displaying splash screens before
calling Fl::run() or for having exact control over which window
- has focus after calling show().
+ has the focus after calling show().
If the window is not shown(), this method does nothing.
+ \note Depending on the platform and window manager wait_for_expose()
+ may not guarantee that the window is fully drawn when it is called.
+ Under X11 it may only make sure that the window is \b mapped, i.e.
+ the internal (OS dependent) window object was created (and maybe
+ shown on the desktop as an empty frame or something like that).
+ You may need to call Fl::flush() after wait_for_expose() to make
+ sure the window and all its widgets are drawn and thus visible.
+
+ \note FLTK does the best it can do to make sure that all widgets
+ get drawn if you call wait_for_expose() and Fl::flush(). However,
+ dependent on the window manager it can not be guaranteed that this
+ does always happen synchronously. The only guaranteed behavior that
+ all widgets are eventually drawn is if the FLTK event loop is run
+ continuously, for instance with Fl::run().
+
\see virtual void Fl_Window::show()
Example code for displaying a window before calling Fl::run()
@@ -433,13 +447,13 @@ void Fl_Window::free_icons() {
// do more window initialization here ...
- win->show(); // show window
- win->wait_for_expose(); // wait, until displayed
- Fl::flush(); // make sure everything gets drawn
+ win->show(); // show window
+ win->wait_for_expose(); // wait, until displayed
+ Fl::flush(); // make sure everything gets drawn
// do more initialization work that needs some time here ...
- Fl::run(); // start FLTK event loop
+ Fl::run(); // start FLTK event loop
\endcode
Note that the window will not be responsive until the event loop