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 <abrmich@amazon.com>

* Delete environment variable

Signed-off-by: abrmich <abrmich@amazon.com>
This commit is contained in:
michabr
2021-08-09 11:24:25 -07:00
committed by GitHub
parent 6bf6ae9485
commit bb88f1f9df
2 changed files with 39 additions and 11 deletions
@@ -8,6 +8,7 @@
#include <../Common/WinAPI/AzFramework/Input/Devices/Keyboard/InputDeviceKeyboard_WinAPI.h>
#include <AzFramework/Input/Buses/Notifications/RawInputNotificationBus_Platform.h>
#include <AzCore/Module/Environment.h>
////////////////////////////////////////////////////////////////////////////////////////////////////
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<int> s_instanceCount;
public:
////////////////////////////////////////////////////////////////////////////////////////////
@@ -106,7 +107,7 @@ namespace AzFramework
}
////////////////////////////////////////////////////////////////////////////////////////////////
int InputDeviceKeyboardWindows::s_instanceCount = 0;
AZ::EnvironmentVariable<int> 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<int>("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);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////
@@ -7,6 +7,7 @@
*/
#include <AzCore/PlatformIncl.h>
#include <AzCore/Module/Environment.h>
#include <AzFramework/Input/Devices/Mouse/InputDeviceMouse.h>
#include <AzFramework/Input/Buses/Notifications/RawInputNotificationBus_Platform.h>
#include <AzFramework/Input/Buses/Requests/InputSystemCursorRequestBus.h>
@@ -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<int> s_instanceCount;
public:
////////////////////////////////////////////////////////////////////////////////////////////
@@ -125,7 +126,7 @@ namespace AzFramework
}
////////////////////////////////////////////////////////////////////////////////////////////////
int InputDeviceMouseWindows::s_instanceCount = 0;
AZ::EnvironmentVariable<int> 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<int>("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);
}
}