From fd0733f6e77a4d0ed07f3d198449e1d34dba12cb Mon Sep 17 00:00:00 2001 From: Clownacy Date: Mon, 13 Apr 2020 15:32:34 +0100 Subject: [PATCH] Fix GLFW3 not handling exit event while not focussed --- src/Backends/GLFW3/Misc.cpp | 10 ++++------ src/Backends/Misc.h | 4 +--- src/Backends/SDL2/Misc.cpp | 6 ++---- src/Main.cpp | 8 ++++++-- 4 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/Backends/GLFW3/Misc.cpp b/src/Backends/GLFW3/Misc.cpp index 66ee37c5..8f625f21 100644 --- a/src/Backends/GLFW3/Misc.cpp +++ b/src/Backends/GLFW3/Misc.cpp @@ -25,8 +25,6 @@ keyboard_state[BACKEND_KEY] = action == GLFW_PRESS; \ break; -BOOL bActive = TRUE; - static BOOL keyboard_state[BACKEND_KEYBOARD_TOTAL]; static GLFWcursor* cursor; @@ -272,7 +270,7 @@ void PlaybackBackend_EnableDragAndDrop(void) glfwSetDropCallback(window, DragAndDropCallback); } -BOOL Backend_SystemTask(void) +BOOL Backend_SystemTask(BOOL active) { if (glfwWindowShouldClose(window)) { @@ -280,9 +278,9 @@ BOOL Backend_SystemTask(void) return FALSE; } - glfwPollEvents(); - - while (!bActive) + if (active) + glfwPollEvents(); + else glfwWaitEvents(); return TRUE; diff --git a/src/Backends/Misc.h b/src/Backends/Misc.h index 502c81fb..1089c684 100644 --- a/src/Backends/Misc.h +++ b/src/Backends/Misc.h @@ -84,8 +84,6 @@ enum BACKEND_KEYBOARD_TOTAL }; -extern BOOL bActive; - BOOL Backend_Init(void); void Backend_Deinit(void); void Backend_PostWindowCreation(void); @@ -94,7 +92,7 @@ void Backend_HideMouse(void); void Backend_SetWindowIcon(const unsigned char *rgb_pixels, unsigned int width, unsigned int height); void Backend_SetCursor(const unsigned char *rgb_pixels, unsigned int width, unsigned int height); void PlaybackBackend_EnableDragAndDrop(void); -BOOL Backend_SystemTask(void); +BOOL Backend_SystemTask(BOOL active); void Backend_GetKeyboardState(BOOL *keyboard_state); void Backend_ShowMessageBox(const char *title, const char *message); ATTRIBUTE_FORMAT_PRINTF(1, 2) void Backend_PrintError(const char *format, ...); diff --git a/src/Backends/SDL2/Misc.cpp b/src/Backends/SDL2/Misc.cpp index 16e78623..09bca8d6 100644 --- a/src/Backends/SDL2/Misc.cpp +++ b/src/Backends/SDL2/Misc.cpp @@ -23,8 +23,6 @@ keyboard_state[BACKEND_KEY] = event.key.type == SDL_KEYDOWN; \ break; -BOOL bActive = TRUE; - static BOOL keyboard_state[BACKEND_KEYBOARD_TOTAL]; static unsigned char *cursor_surface_pixels; @@ -157,9 +155,9 @@ void PlaybackBackend_EnableDragAndDrop(void) SDL_EventState(SDL_DROPFILE, SDL_ENABLE); } -BOOL Backend_SystemTask(void) +BOOL Backend_SystemTask(BOOL active) { - while (SDL_PollEvent(NULL) || !bActive) + if (SDL_PollEvent(NULL) || !active) { SDL_Event event; diff --git a/src/Main.cpp b/src/Main.cpp index b4f70a11..81cd4267 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -33,6 +33,7 @@ BOOL gbUseJoystick = FALSE; int gJoystickButtonTable[8]; +static BOOL bActive = TRUE; static BOOL bFps = FALSE; static int windowWidth; @@ -388,8 +389,11 @@ BOOL SystemTask(void) { static BOOL previous_keyboard_state[BACKEND_KEYBOARD_TOTAL]; - if (!Backend_SystemTask()) - return FALSE; + do + { + if (!Backend_SystemTask(bActive)) + return FALSE; + } while(!bActive); BOOL keyboard_state[BACKEND_KEYBOARD_TOTAL]; Backend_GetKeyboardState(keyboard_state);