diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/Cursor.cpp b/Source/Core/InputCommon/ControllerEmu/ControlGroup/Cursor.cpp index 9c280ab135..043ef37356 100644 --- a/Source/Core/InputCommon/ControllerEmu/ControlGroup/Cursor.cpp +++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/Cursor.cpp @@ -140,8 +140,11 @@ Cursor::StateData Cursor::GetState(const bool adjusted) m_prev_result = result; - // If auto-hide time is up or hide button is held: - if (!m_auto_hide_timer || controls[4]->GetState()) + // If auto-hide time is up, the hide button is held, or the input gate is disabled, hide the + // cursor. We need to check the input gate explicitly as the hide button check always returns + // false if the input gate is disabled (e.g. the window is not focused with background input + // disabled) + if (!m_auto_hide_timer || !ControlReference::GetInputGate() || controls[4]->GetState()) { result.x = std::numeric_limits::quiet_NaN(); result.y = 0;