From bb88f1f9df98592129460f322cab9b661803606c Mon Sep 17 00:00:00 2001 From: michabr <82236305+michabr@users.noreply.github.com> Date: Mon, 9 Aug 2021 11:24:25 -0700 Subject: [PATCH] Fix input not working in Ctrl-G mode after UI Editor is opened (#2948) * Fix input not working in Ctrl-G mode after UI Editor is opened Signed-off-by: abrmich * Delete environment variable Signed-off-by: abrmich --- .../Keyboard/InputDeviceKeyboard_Windows.cpp | 22 ++++++++++++--- .../Mouse/InputDeviceMouse_Windows.cpp | 28 ++++++++++++++----- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/Code/Framework/AzFramework/Platform/Windows/AzFramework/Input/Devices/Keyboard/InputDeviceKeyboard_Windows.cpp b/Code/Framework/AzFramework/Platform/Windows/AzFramework/Input/Devices/Keyboard/InputDeviceKeyboard_Windows.cpp index e92bbbc6e3..78364fbd0d 100644 --- a/Code/Framework/AzFramework/Platform/Windows/AzFramework/Input/Devices/Keyboard/InputDeviceKeyboard_Windows.cpp +++ b/Code/Framework/AzFramework/Platform/Windows/AzFramework/Input/Devices/Keyboard/InputDeviceKeyboard_Windows.cpp @@ -8,6 +8,7 @@ #include <../Common/WinAPI/AzFramework/Input/Devices/Keyboard/InputDeviceKeyboard_WinAPI.h> #include +#include //////////////////////////////////////////////////////////////////////////////////////////////////// namespace @@ -29,7 +30,7 @@ namespace AzFramework { //////////////////////////////////////////////////////////////////////////////////////////// //! Count of the number instances of this class that have been created - static int s_instanceCount; + static AZ::EnvironmentVariable s_instanceCount; public: //////////////////////////////////////////////////////////////////////////////////////////// @@ -106,7 +107,7 @@ namespace AzFramework } //////////////////////////////////////////////////////////////////////////////////////////////// - int InputDeviceKeyboardWindows::s_instanceCount = 0; + AZ::EnvironmentVariable InputDeviceKeyboardWindows::s_instanceCount = nullptr; //////////////////////////////////////////////////////////////////////////////////////////////// InputDeviceKeyboardWindows::InputDeviceKeyboardWindows(InputDeviceKeyboard& inputDevice) @@ -116,8 +117,10 @@ namespace AzFramework , m_hasFocus(false) , m_hasTextEntryStarted(false) { - if (s_instanceCount++ == 0) + if (!s_instanceCount) { + s_instanceCount = AZ::Environment::CreateVariable("InputDeviceKeyboardInstanceCount", 1); + // Register for raw keyboard input RAWINPUTDEVICE rawInputDevice; rawInputDevice.usUsagePage = RAW_INPUT_KEYBOARD_USAGE_PAGE; @@ -128,6 +131,10 @@ namespace AzFramework AZ_Assert(result, "Failed to register raw input device: keyboard"); AZ_UNUSED(result); } + else + { + s_instanceCount.Set(s_instanceCount.Get() + 1); + } RawInputNotificationBusWindows::Handler::BusConnect(); } @@ -137,7 +144,8 @@ namespace AzFramework { RawInputNotificationBusWindows::Handler::BusDisconnect(); - if (--s_instanceCount == 0) + int instanceCount = s_instanceCount.Get(); + if (--instanceCount == 0) { // Deregister from raw keyboard input RAWINPUTDEVICE rawInputDevice; @@ -148,7 +156,13 @@ namespace AzFramework const BOOL result = RegisterRawInputDevices(&rawInputDevice, 1, sizeof(rawInputDevice)); AZ_Assert(result, "Failed to deregister raw input device: keyboard"); AZ_UNUSED(result); + + s_instanceCount.Reset(); } + else + { + s_instanceCount.Set(instanceCount); + } } //////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/Code/Framework/AzFramework/Platform/Windows/AzFramework/Input/Devices/Mouse/InputDeviceMouse_Windows.cpp b/Code/Framework/AzFramework/Platform/Windows/AzFramework/Input/Devices/Mouse/InputDeviceMouse_Windows.cpp index 9452696cd2..464f49d620 100644 --- a/Code/Framework/AzFramework/Platform/Windows/AzFramework/Input/Devices/Mouse/InputDeviceMouse_Windows.cpp +++ b/Code/Framework/AzFramework/Platform/Windows/AzFramework/Input/Devices/Mouse/InputDeviceMouse_Windows.cpp @@ -7,6 +7,7 @@ */ #include +#include #include #include #include @@ -43,7 +44,7 @@ namespace AzFramework { //////////////////////////////////////////////////////////////////////////////////////////// //! Count of the number instances of this class that have been created - static int s_instanceCount; + static AZ::EnvironmentVariable s_instanceCount; public: //////////////////////////////////////////////////////////////////////////////////////////// @@ -125,7 +126,7 @@ namespace AzFramework } //////////////////////////////////////////////////////////////////////////////////////////////// - int InputDeviceMouseWindows::s_instanceCount = 0; + AZ::EnvironmentVariable InputDeviceMouseWindows::s_instanceCount = nullptr; //////////////////////////////////////////////////////////////////////////////////////////////// InputDeviceMouseWindows::InputDeviceMouseWindows(InputDeviceMouse& inputDevice) @@ -137,18 +138,24 @@ namespace AzFramework { memset(&m_lastClientRect, 0, sizeof(m_lastClientRect)); - if (s_instanceCount++ == 0) + if (!s_instanceCount) { + s_instanceCount = AZ::Environment::CreateVariable("InputDeviceMouseInstanceCount", 1); + // Register for raw mouse input RAWINPUTDEVICE rawInputDevice; rawInputDevice.usUsagePage = RAW_INPUT_MOUSE_USAGE_PAGE; - rawInputDevice.usUsage = RAW_INPUT_MOUSE_USAGE; - rawInputDevice.dwFlags = 0; - rawInputDevice.hwndTarget = 0; + rawInputDevice.usUsage = RAW_INPUT_MOUSE_USAGE; + rawInputDevice.dwFlags = 0; + rawInputDevice.hwndTarget = 0; const BOOL result = RegisterRawInputDevices(&rawInputDevice, 1, sizeof(rawInputDevice)); AZ_Assert(result, "Failed to register raw input device: mouse"); AZ_UNUSED(result); } + else + { + s_instanceCount.Set(s_instanceCount.Get() + 1); + } RawInputNotificationBusWindows::Handler::BusConnect(); } @@ -161,7 +168,8 @@ namespace AzFramework // Cleanup system cursor visibility and constraint SetSystemCursorState(SystemCursorState::Unknown); - if (--s_instanceCount == 0) + int instanceCount = s_instanceCount.Get(); + if (--instanceCount == 0) { // Deregister from raw mouse input RAWINPUTDEVICE rawInputDevice; @@ -172,6 +180,12 @@ namespace AzFramework const BOOL result = RegisterRawInputDevices(&rawInputDevice, 1, sizeof(rawInputDevice)); AZ_Assert(result, "Failed to deregister raw input device: mouse"); AZ_UNUSED(result); + + s_instanceCount.Reset(); + } + else + { + s_instanceCount.Set(instanceCount); } }