diff --git a/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.cpp b/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.cpp
index 8d62453f50..5fabe9e039 100644
--- a/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.cpp
+++ b/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.cpp
@@ -33,6 +33,7 @@ ControllerGlobalSettingsWidget::ControllerGlobalSettingsWidget(QWidget* parent,
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.enableSDLSource, "InputSources", "SDL", true);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.enableSDLEnhancedMode, "InputSources", "SDLControllerEnhancedMode", false);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.enableXInputSource, "InputSources", "XInput", false);
+ SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.enableMouseMapping, "UI", "EnableMouseMapping", false);
ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.multitapPort1, "Pad", "MultitapPort1", false);
ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.multitapPort2, "Pad", "MultitapPort2", false);
ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.pointerXInvert, "Pad", "PointerXInvert", false);
diff --git a/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.ui b/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.ui
index a9479ceaf6..0ac675b828 100644
--- a/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.ui
+++ b/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.ui
@@ -6,8 +6,8 @@
0
0
- 900
- 675
+ 902
+ 677
@@ -91,8 +91,27 @@
Mouse/Pointer Source
- -
-
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 20
+ 0
+
+
+
+ 10
+
+
+
+ -
+
0
@@ -116,16 +135,6 @@
- -
-
-
- Using raw input improves precision when you bind controller sticks to the mouse pointer. Also enables multiple mice to be used.
-
-
- true
-
-
-
-
@@ -133,41 +142,8 @@
- -
-
-
-
- 0
- 0
-
-
-
-
- 20
- 0
-
-
-
- 10
-
-
-
- -
-
-
- Invert
-
-
-
- -
-
-
- Vertical Sensitivity:
-
-
-
- -
-
+
-
+
0
@@ -210,6 +186,30 @@
+ -
+
+
+ Invert
+
+
+
+ -
+
+
+ Using raw input improves precision when you bind controller sticks to the mouse pointer. Also enables multiple mice to be used.
+
+
+ true
+
+
+
+ -
+
+
+ Vertical Sensitivity:
+
+
+
-
@@ -217,6 +217,13 @@
+ -
+
+
+ Enable Mouse Mapping
+
+
+
diff --git a/pcsx2-qt/Settings/InputBindingDialog.cpp b/pcsx2-qt/Settings/InputBindingDialog.cpp
index 3f27132e02..b01f0b7f76 100644
--- a/pcsx2-qt/Settings/InputBindingDialog.cpp
+++ b/pcsx2-qt/Settings/InputBindingDialog.cpp
@@ -19,6 +19,7 @@
#include "QtHost.h"
#include "QtUtils.h"
#include "Settings/InputBindingDialog.h"
+#include "Settings/InputBindingWidget.h"
#include
#include
#include
@@ -76,7 +77,7 @@ bool InputBindingDialog::eventFilter(QObject* watched, QEvent* event)
m_new_bindings.push_back(InputManager::MakePointerButtonKey(0, button_index));
return true;
}
- else if (event_type == QEvent::MouseMove)
+ else if (event_type == QEvent::MouseMove && m_mouse_mapping_enabled)
{
// if we've moved more than a decent distance from the center of the widget, bind it.
// this is so we don't accidentally bind to the mouse if you bump it while reaching for your pad.
@@ -125,6 +126,7 @@ void InputBindingDialog::onInputListenTimerTimeout()
void InputBindingDialog::startListeningForInput(u32 timeout_in_seconds)
{
m_new_bindings.clear();
+ m_mouse_mapping_enabled = InputBindingWidget::isMouseMappingEnabled();
m_input_listen_start_position = QCursor::pos();
m_input_listen_timer = new QTimer(this);
m_input_listen_timer->setSingleShot(false);
diff --git a/pcsx2-qt/Settings/InputBindingDialog.h b/pcsx2-qt/Settings/InputBindingDialog.h
index 48a35cea29..510e0f12d2 100644
--- a/pcsx2-qt/Settings/InputBindingDialog.h
+++ b/pcsx2-qt/Settings/InputBindingDialog.h
@@ -69,4 +69,5 @@ protected:
QTimer* m_input_listen_timer = nullptr;
u32 m_input_listen_remaining_seconds = 0;
QPoint m_input_listen_start_position{};
+ bool m_mouse_mapping_enabled = false;
};
diff --git a/pcsx2-qt/Settings/InputBindingWidget.cpp b/pcsx2-qt/Settings/InputBindingWidget.cpp
index 86f358424e..4e38fc9756 100644
--- a/pcsx2-qt/Settings/InputBindingWidget.cpp
+++ b/pcsx2-qt/Settings/InputBindingWidget.cpp
@@ -56,6 +56,11 @@ InputBindingWidget::~InputBindingWidget()
Q_ASSERT(!isListeningForInput());
}
+bool InputBindingWidget::isMouseMappingEnabled()
+{
+ return Host::GetBaseBoolSettingValue("UI", "EnableMouseMapping", false);
+}
+
void InputBindingWidget::initialize(SettingsInterface* sif, std::string section_name, std::string key_name)
{
m_sif = sif;
@@ -126,7 +131,7 @@ bool InputBindingWidget::eventFilter(QObject* watched, QEvent* event)
m_new_bindings.push_back(InputManager::MakePointerButtonKey(0, button_index));
return true;
}
- else if (event_type == QEvent::MouseMove)
+ else if (event_type == QEvent::MouseMove && m_mouse_mapping_enabled)
{
// if we've moved more than a decent distance from the center of the widget, bind it.
// this is so we don't accidentally bind to the mouse if you bump it while reaching for your pad.
@@ -266,6 +271,7 @@ void InputBindingWidget::onInputListenTimerTimeout()
void InputBindingWidget::startListeningForInput(u32 timeout_in_seconds)
{
m_new_bindings.clear();
+ m_mouse_mapping_enabled = isMouseMappingEnabled();
m_input_listen_start_position = QCursor::pos();
m_input_listen_timer = new QTimer(this);
m_input_listen_timer->setSingleShot(false);
diff --git a/pcsx2-qt/Settings/InputBindingWidget.h b/pcsx2-qt/Settings/InputBindingWidget.h
index 2c970e2401..c8e744b730 100644
--- a/pcsx2-qt/Settings/InputBindingWidget.h
+++ b/pcsx2-qt/Settings/InputBindingWidget.h
@@ -33,6 +33,8 @@ public:
InputBindingWidget(QWidget* parent, SettingsInterface* sif, std::string section_name, std::string key_name);
~InputBindingWidget();
+ static bool isMouseMappingEnabled();
+
void initialize(SettingsInterface* sif, std::string section_name, std::string key_name);
public Q_SLOTS:
@@ -74,6 +76,7 @@ protected:
QTimer* m_input_listen_timer = nullptr;
u32 m_input_listen_remaining_seconds = 0;
QPoint m_input_listen_start_position{};
+ bool m_mouse_mapping_enabled = false;
};
class InputVibrationBindingWidget : public QPushButton