From c709dfdf06f6b09b61c1f34ff5a32cbfa8acc523 Mon Sep 17 00:00:00 2001 From: Guilherme Felipe Date: Mon, 15 Apr 2019 14:41:44 -0300 Subject: [Input] Release keys/actions pressed if window loses focus Co-authored-by: bruvzg <7645683+bruvzg@users.noreply.github.com> Co-authored-by: Marcelo Fernandez --- platform/osx/os_osx.mm | 5 +++++ platform/windows/os_windows.cpp | 2 ++ platform/x11/os_x11.cpp | 2 ++ 3 files changed, 9 insertions(+) (limited to 'platform') diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm index 5a4c0593bc..945290ac73 100644 --- a/platform/osx/os_osx.mm +++ b/platform/osx/os_osx.mm @@ -337,6 +337,11 @@ static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeSt } - (void)windowDidMove:(NSNotification *)notification { + + if (OS_OSX::singleton->get_main_loop()) { + OS_OSX::singleton->input->release_pressed_events(); + } + /* [window->nsgl.context update]; diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index 193a3fa2c6..c3cadea855 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -346,6 +346,7 @@ LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) control_mem = false; shift_mem = false; } else { // WM_INACTIVE + input->release_pressed_events(); main_loop->notification(MainLoop::NOTIFICATION_WM_FOCUS_OUT); alt_mem = false; }; @@ -786,6 +787,7 @@ LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) } break; case WM_ENTERSIZEMOVE: { + input->release_pressed_events(); move_timer_id = SetTimer(hWnd, 1, USER_TIMER_MINIMUM, (TIMERPROC)NULL); } break; case WM_EXITSIZEMOVE: { diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp index f6161a9485..8d857de239 100644 --- a/platform/x11/os_x11.cpp +++ b/platform/x11/os_x11.cpp @@ -2076,7 +2076,9 @@ void OS_X11::process_xevents() { case FocusOut: window_has_focus = false; + input->release_pressed_events(); main_loop->notification(MainLoop::NOTIFICATION_WM_FOCUS_OUT); + if (mouse_mode_grab) { //dear X11, I try, I really try, but you never work, you do whathever you want. if (mouse_mode == MOUSE_MODE_CAPTURED) { -- cgit v1.2.3