From 50fa5f24d3e3838d2d141aadec7d37f0f53001b4 Mon Sep 17 00:00:00 2001 From: Enrico Forestieri Date: Fri, 14 Aug 2009 00:42:45 +0000 Subject: [PATCH] Move OS specific code to proper place. Also make sure that no other handler functions are called after processing shutdown events. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@31027 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/LyX.cpp | 19 ------------------- src/support/os_cygwin.cpp | 18 +++++++++++++++++- src/support/os_win32.cpp | 17 +++++++++++++++++ 3 files changed, 34 insertions(+), 20 deletions(-) diff --git a/src/LyX.cpp b/src/LyX.cpp index b7a409fedb..e2e5b0c925 100644 --- a/src/LyX.cpp +++ b/src/LyX.cpp @@ -71,9 +71,6 @@ #include #include #include -#if defined(_WIN32) || defined(__CYGWIN__) -#include -#endif using namespace std; using namespace lyx::support; @@ -653,18 +650,6 @@ static void error_handler(int err_sig) exit(0); } - -#if defined(_WIN32) || defined(__CYGWIN__) -BOOL terminate_handler(DWORD event) -{ - if (event == CTRL_CLOSE_EVENT - || event == CTRL_LOGOFF_EVENT - || event == CTRL_SHUTDOWN_EVENT) - raise(SIGTERM); - return FALSE; -} -#endif - } @@ -686,10 +671,6 @@ bool LyX::init() signal(SIGINT, error_handler); signal(SIGTERM, error_handler); // SIGPIPE can be safely ignored. -#if defined(_WIN32) || defined(__CYGWIN__) - // On Windows we have also to catch logging off or closing the console. - SetConsoleCtrlHandler((PHANDLER_ROUTINE)terminate_handler, TRUE); -#endif lyxrc.tempdir_path = package().temp_dir().absFilename(); lyxrc.document_path = package().document_dir().absFilename(); diff --git a/src/support/os_cygwin.cpp b/src/support/os_cygwin.cpp index 8ffaef55e4..e0343f63db 100644 --- a/src/support/os_cygwin.cpp +++ b/src/support/os_cygwin.cpp @@ -123,15 +123,31 @@ string convert_path_list(string const & p, PathStyle const & target) return subst(p, '\\', '/'); } + +BOOL terminate_handler(DWORD event) +{ + if (event == CTRL_CLOSE_EVENT + || event == CTRL_LOGOFF_EVENT + || event == CTRL_SHUTDOWN_EVENT) { + ::raise(SIGTERM); + // Relinquish our time slice. + sleep(0); + return TRUE; + } + return FALSE; +} + } // namespace anon void init(int, char *[]) { // Make sure that the TEMP variable is set // and sync the Windows environment. - setenv("TEMP", "/tmp", false); cygwin_internal(CW_SYNC_WINENV); + + // Catch shutdown events. + SetConsoleCtrlHandler((PHANDLER_ROUTINE)terminate_handler, TRUE); } diff --git a/src/support/os_win32.cpp b/src/support/os_win32.cpp index 018b5edd6e..b450bf1100 100644 --- a/src/support/os_win32.cpp +++ b/src/support/os_win32.cpp @@ -26,6 +26,7 @@ #include "support/lassert.h" +#include #include #include @@ -80,6 +81,19 @@ bool windows_style_tex_paths_ = true; string cygdrive = "/cygdrive"; +BOOL terminate_handler(DWORD event) +{ + if (event == CTRL_CLOSE_EVENT + || event == CTRL_LOGOFF_EVENT + || event == CTRL_SHUTDOWN_EVENT) { + ::raise(SIGTERM); + // Relinquish our time slice. + Sleep(0); + return TRUE; + } + return FALSE; +} + } // namespace anon void init(int /* argc */, char * argv[]) @@ -161,6 +175,9 @@ void init(int /* argc */, char * argv[]) if ((retVal == ERROR_SUCCESS) && (bufSize <= MAX_PATH)) cygdrive = rtrim(string(buf), "/"); } + + // Catch shutdown events. + SetConsoleCtrlHandler((PHANDLER_ROUTINE)terminate_handler, TRUE); } -- 2.39.2