]> git.lyx.org Git - features.git/commitdiff
Fix the dataloss problem when shutting down Windows (part of bug #5525).
authorEnrico Forestieri <forenr@lyx.org>
Thu, 13 Aug 2009 13:55:26 +0000 (13:55 +0000)
committerEnrico Forestieri <forenr@lyx.org>
Thu, 13 Aug 2009 13:55:26 +0000 (13:55 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@31006 a592a061-630c-0410-9148-cb99ea01b6c8

src/LyX.cpp

index e2e5b0c925a9ab378eafcebc947449a845c0a93a..b7a409fedb4bad911fde2e801ffcddb488906c12 100644 (file)
@@ -71,6 +71,9 @@
 #include <stdlib.h>
 #include <string>
 #include <vector>
+#if defined(_WIN32) || defined(__CYGWIN__)
+#include <windows.h>
+#endif
 
 using namespace std;
 using namespace lyx::support;
@@ -650,6 +653,18 @@ 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
+
 }
 
 
@@ -671,6 +686,10 @@ 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();