From becf3397c904d16795a455f811c119e347539bfc Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Wed, 6 Mar 2019 21:12:12 +0100 Subject: [PATCH] Implement WM_QUERYENDSESSION to allow qutting during video playback --- SourceS/miniwin.h | 1 + SourceX/miniwin.cpp | 6 +++++- SourceX/miniwin_msg_sdl.cpp | 7 ++++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/SourceS/miniwin.h b/SourceS/miniwin.h index a3c58b090..470986566 100644 --- a/SourceS/miniwin.h +++ b/SourceS/miniwin.h @@ -795,6 +795,7 @@ HFILE WINAPI OpenFile(LPCSTR lpFileName, LPOFSTRUCT lpReOpenBuff, UINT uStyle); #define WM_DESTROY 0x0002 #define WM_PAINT 0x000F #define WM_CLOSE 0x0010 +#define WM_QUERYENDSESSION 0x0011 #define WM_ERASEBKGND 0x0014 #define WM_ACTIVATEAPP 0x001C #define WM_QUERYNEWPALETTE 0x030F diff --git a/SourceX/miniwin.cpp b/SourceX/miniwin.cpp index 6883344af..e21d7236f 100644 --- a/SourceX/miniwin.cpp +++ b/SourceX/miniwin.cpp @@ -664,12 +664,16 @@ LSTATUS RegCloseKeyA(HKEY hKey) void PostQuitMessage(int nExitCode) { - DUMMY(); // Possibly use SDL_PumpEvents + DUMMY(); + PostMessageA(NULL, WM_QUERYENDSESSION, 0, 0); } LRESULT DefWindowProcA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { DUMMY_ONCE(); + if (Msg == WM_QUERYENDSESSION) + exit(0); + return NULL; } diff --git a/SourceX/miniwin_msg_sdl.cpp b/SourceX/miniwin_msg_sdl.cpp index ff8a82fdc..9a2369d2f 100644 --- a/SourceX/miniwin_msg_sdl.cpp +++ b/SourceX/miniwin_msg_sdl.cpp @@ -177,7 +177,12 @@ WINBOOL WINAPI PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMs } break; case SDL_TEXTINPUT: case SDL_WINDOWEVENT: - return false_avail(); + if (e.window.event == SDL_WINDOWEVENT_CLOSE) { + lpMsg->message = WM_QUERYENDSESSION; + } else { + return false_avail(); + } + break; default: DUMMY_PRINT("unknown SDL message 0x%X", e.type); return false_avail();