diff --git a/Source/movie.cpp b/Source/movie.cpp index aad18a6aa..1c365cd27 100644 --- a/Source/movie.cpp +++ b/Source/movie.cpp @@ -11,10 +11,6 @@ void play_movie(char *pszMovie, BOOL user_can_close) WNDPROC saveProc; HANDLE video_stream; - if (!gbActive) { - return; - } - saveProc = SetWindowProc(MovieWndProc); movie_playing = TRUE; sound_disable_music(TRUE); @@ -25,7 +21,7 @@ void play_movie(char *pszMovie, BOOL user_can_close) if (video_stream) { MSG Msg; while (video_stream) { - if (!gbActive || user_can_close && !movie_playing) + if (user_can_close && !movie_playing) break; while (PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)) { if (Msg.message != WM_QUIT) { diff --git a/SourceX/DiabloUI/dialogs.cpp b/SourceX/DiabloUI/dialogs.cpp index 7cc5a76e7..b68b21d4d 100644 --- a/SourceX/DiabloUI/dialogs.cpp +++ b/SourceX/DiabloUI/dialogs.cpp @@ -292,7 +292,9 @@ void DialogLoop(UiItem *items, std::size_t num_items, UiItem *render_behind, std void UiOkDialog(const char *text, const char *caption, bool error, UiItem *render_behind, std::size_t render_behind_size) { - if (!gbActive) { + static bool inDialog = false; + + if (!gbActive || inDialog) { if (SDL_ShowCursor(SDL_ENABLE) <= -1) { SDL_Log(SDL_GetError()); } @@ -304,11 +306,11 @@ void UiOkDialog(const char *text, const char *caption, bool error, UiItem *rende return; } - gbActive = false; + inDialog = true; Init(text, caption, error); DialogLoop(dialogItems, dialogItemsSize, render_behind, render_behind_size); Deinit(); - gbActive = true; + inDialog = false; } void UiErrorOkDialog(const char *text, const char *caption, UiItem *render_behind, std::size_t render_behind_size) diff --git a/SourceX/miniwin/misc_msg.cpp b/SourceX/miniwin/misc_msg.cpp index 22e8392fa..a1c7831be 100644 --- a/SourceX/miniwin/misc_msg.cpp +++ b/SourceX/miniwin/misc_msg.cpp @@ -555,31 +555,26 @@ WINBOOL PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilter return false_avail("SDL_TEXTINPUT", e.text.windowID); case SDL_WINDOWEVENT: switch (e.window.event) { + case SDL_WINDOWEVENT_SHOWN: + gbActive = true; + lpMsg->message = DVL_WM_PAINT; + break; case SDL_WINDOWEVENT_HIDDEN: - // TODO stop rendering to minimize CPU usage (gbActive) + gbActive = false; break; - case SDL_WINDOWEVENT_MINIMIZED: - // TODO pause + case SDL_WINDOWEVENT_EXPOSED: + lpMsg->message = DVL_WM_PAINT; break; - case SDL_WINDOWEVENT_FOCUS_GAINED: - case SDL_WINDOWEVENT_TAKE_FOCUS: + case SDL_WINDOWEVENT_MOVED: case SDL_WINDOWEVENT_RESIZED: case SDL_WINDOWEVENT_SIZE_CHANGED: - case SDL_WINDOWEVENT_MOVED: - case SDL_WINDOWEVENT_RESTORED: + case SDL_WINDOWEVENT_MINIMIZED: case SDL_WINDOWEVENT_MAXIMIZED: + case SDL_WINDOWEVENT_RESTORED: case SDL_WINDOWEVENT_LEAVE: + case SDL_WINDOWEVENT_FOCUS_GAINED: case SDL_WINDOWEVENT_FOCUS_LOST: - break; - case SDL_WINDOWEVENT_CLOSE: - lpMsg->message = DVL_WM_QUERYENDSESSION; - break; - case SDL_WINDOWEVENT_SHOWN: - gbActive = true; - lpMsg->message = DVL_WM_PAINT; - break; - case SDL_WINDOWEVENT_EXPOSED: - lpMsg->message = DVL_WM_PAINT; + case SDL_WINDOWEVENT_TAKE_FOCUS: break; case SDL_WINDOWEVENT_ENTER: lpMsg->message = DVL_WM_MOUSEHOVER; @@ -592,6 +587,9 @@ WINBOOL PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilter mouseWarping = false; } break; + case SDL_WINDOWEVENT_CLOSE: + lpMsg->message = DVL_WM_QUERYENDSESSION; + break; default: return false_avail("SDL_WINDOWEVENT", e.window.event); }