Catch WM_QUIT and convert it to SIGTERM. This gives Windows

applications a convenient way to request termination, rather
than forcing it. And it does so in a way that mimics UNIX's
way, allowing code reuse.


git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@10030 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Pierre Ossman 2013-12-13 10:26:03 +00:00
parent 7bffc7bd3b
commit f7e88141c3
2 changed files with 13 additions and 0 deletions

View File

@ -479,6 +479,15 @@ In FLTK, all strings, including filenames, are UTF-8 encoded. The utility functi
fl_fopen() and fl_open() allow to open files potentially having non-ASCII names in a
cross-platform fashion, whereas the standard fopen()/open() functions fail to do so.
\subsection osissues_wm_quit Responding to WM_QUIT
FLTK will intercept WM_QUIT messages that are directed towards the
thread that runs the main loop. These are converted to SIGTERM signals
via \c raise(). This allows you to deal with outside termination
requests with the same code on both Windows and UNIX systems.
Other processes can send this message via \c PostThreadMessage() in
order to request, rather than force your application to terminate.
\subsection osissues_win32_messages Handling Other WIN32 Messages
By default a single WNDCLASSEX called "FLTK" is

View File

@ -36,6 +36,7 @@
#include <stdlib.h>
#include <sys/types.h>
#include <time.h>
#include <signal.h>
#ifdef __CYGWIN__
# include <sys/time.h>
# include <unistd.h>
@ -403,6 +404,9 @@ int fl_wait(double time_to_wait) {
have_message = PeekMessageW(&fl_msg, NULL, 0, 0, PM_REMOVE);
if (have_message > 0) {
while (have_message != 0 && have_message != -1) {
// Let applications treat WM_QUIT identical to SIGTERM on *nix
if (fl_msg.message == WM_QUIT)
raise(SIGTERM);
if (fl_msg.message == fl_wake_msg) {
// Used for awaking wait() from another thread
thread_message_ = (void*)fl_msg.wParam;