diff --git a/src/event/Input.cpp b/src/event/Input.cpp index 5b6b770..4bed454 100644 --- a/src/event/Input.cpp +++ b/src/event/Input.cpp @@ -51,6 +51,7 @@ int32_t Input::s_simulatedRightButtonClick; uint32_t Input::s_metaKeyState; int32_t Input::s_queueHead; int32_t Input::s_queueTail; +int32_t Input::s_windowFocused; #if defined(WHOA_SYSTEM_WIN) int32_t Input::s_savedMouseSpeed; diff --git a/src/event/Input.hpp b/src/event/Input.hpp index 2c8c04c..36f855f 100644 --- a/src/event/Input.hpp +++ b/src/event/Input.hpp @@ -21,6 +21,7 @@ namespace Input { extern uint32_t s_metaKeyState; extern int32_t s_queueHead; extern int32_t s_queueTail; + extern int32_t s_windowFocused; #if defined(WHOA_SYSTEM_WIN) extern int32_t s_savedMouseSpeed; diff --git a/src/event/win/Window.cpp b/src/event/win/Window.cpp index cd6a1cd..2174cd4 100644 --- a/src/event/win/Window.cpp +++ b/src/event/win/Window.cpp @@ -8,11 +8,27 @@ int32_t OsGuiProcessMessage(void* message) { } int32_t OsWindowProc(void* window, uint32_t message, uintptr_t wparam, intptr_t lparam) { + auto hwnd = static_cast(window); + // TODO switch (message) { // TODO handle remaining message types + case WM_ACTIVATE: { + auto isMinimized = IsIconic(hwnd); + auto isActive = wparam != WA_INACTIVE; + Input::s_windowFocused = isActive && !isMinimized; + + // TODO capture + + // TODO mouse speed + + OsQueuePut(OS_INPUT_FOCUS, Input::s_windowFocused != 0, 0, 0, 0); + + break; + } + case WM_CLOSE: { OsQueuePut(OS_INPUT_CLOSE, 0, 0, 0, 0); return 0;