From 810d495a835bab3eba264c01bcd8cf7f90b083ab Mon Sep 17 00:00:00 2001 From: Caspian Rychlik-Prince Date: Sun, 7 Nov 2004 16:36:36 +0000 Subject: [PATCH] Fixes to focus / minimize handling. Now should cope with windows popping up behind. --- src/native/win32/org_lwjgl_opengl_Display.cpp | 45 +++++++++---------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/src/native/win32/org_lwjgl_opengl_Display.cpp b/src/native/win32/org_lwjgl_opengl_Display.cpp index 4f03b095..8dc9249a 100644 --- a/src/native/win32/org_lwjgl_opengl_Display.cpp +++ b/src/native/win32/org_lwjgl_opengl_Display.cpp @@ -283,15 +283,25 @@ void closeWindow(HWND hwnd, HDC hdc) */ static void appActivate(bool active) { + static bool inAppActivate = false; + + if (inAppActivate) { + return; + } + inAppActivate = true; if (active) { - if (isFullScreen) + if (isFullScreen) { restoreDisplayMode(); + ShowWindow(display_hwnd, SW_RESTORE); + } else { + ShowWindow(display_hwnd, SW_RESTORE); + } SetForegroundWindow(display_hwnd); - ShowWindow(display_hwnd, SW_RESTORE); } else if (isFullScreen) { ShowWindow(display_hwnd, SW_MINIMIZE); resetDisplayMode(NULL); } + inAppActivate = false; } /* @@ -302,6 +312,7 @@ LRESULT CALLBACK lwjglWindowProc(HWND hWnd, WPARAM wParam, LPARAM lParam) { + switch (msg) { // disable screen saver and monitor power down messages which wreak havoc case WM_SYSCOMMAND: @@ -310,13 +321,6 @@ LRESULT CALLBACK lwjglWindowProc(HWND hWnd, case SC_SCREENSAVE: case SC_MONITORPOWER: return 0L; - case SC_MINIMIZE: - isMinimized = true; - appActivate(false); - break; - case SC_RESTORE: - isMinimized = false; - appActivate(true); break; case SC_CLOSE: closerequested = true; @@ -369,20 +373,6 @@ LRESULT CALLBACK lwjglWindowProc(HWND hWnd, handleMouseButton(2, 0); return 0; } - case WM_ACTIVATE: - { - switch(LOWORD(wParam)) { - case WA_ACTIVE: - case WA_CLICKACTIVE: - isMinimized = false; - isFocused = true; - break; - case WA_INACTIVE: - isFocused = false; - break; - } - appActivate(isFocused); - } break; case WM_QUIT: { @@ -406,6 +396,15 @@ LRESULT CALLBACK lwjglWindowProc(HWND hWnd, }*/ } + // Update window state directly having processed window messages + bool oldIsMinimized = isMinimized; + bool oldIsFocused = isFocused; + isMinimized = IsIconic(display_hwnd); + isFocused = GetForegroundWindow() == display_hwnd; + if (oldIsMinimized != isMinimized || oldIsFocused != isFocused) { + appActivate(isFocused && !isMinimized); + } + // default action return DefWindowProc(hWnd, msg, wParam, lParam); }