1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

Allow all gamepad devices for built-in ui_* input actions

This allows all controllers to navigate the UI, which enhances
compatibility with PC handhelds when external controllers are connected.

Previously, only the first device was allowed to use `ui_*` actions
out of the box, which means that on a PC handheld, external controllers
couldn't navigate the UI (since the first ID is always the built-in controller).
This commit is contained in:
Hugo Locurcio
2025-09-23 17:12:56 +02:00
parent 3d91a48298
commit 0dcf28104d
3 changed files with 9 additions and 7 deletions

View File

@@ -1188,11 +1188,12 @@ String InputEventJoypadMotion::to_string() {
return vformat("InputEventJoypadMotion: axis=%d, axis_value=%.2f", axis, axis_value); return vformat("InputEventJoypadMotion: axis=%d, axis_value=%.2f", axis, axis_value);
} }
Ref<InputEventJoypadMotion> InputEventJoypadMotion::create_reference(JoyAxis p_axis, float p_value) { Ref<InputEventJoypadMotion> InputEventJoypadMotion::create_reference(JoyAxis p_axis, float p_value, int p_device) {
Ref<InputEventJoypadMotion> ie; Ref<InputEventJoypadMotion> ie;
ie.instantiate(); ie.instantiate();
ie->set_axis(p_axis); ie->set_axis(p_axis);
ie->set_axis_value(p_value); ie->set_axis_value(p_value);
ie->set_device(p_device);
return ie; return ie;
} }
@@ -1307,10 +1308,11 @@ String InputEventJoypadButton::to_string() {
return vformat("InputEventJoypadButton: button_index=%d, pressed=%s, pressure=%.2f", button_index, p, pressure); return vformat("InputEventJoypadButton: button_index=%d, pressed=%s, pressure=%.2f", button_index, p, pressure);
} }
Ref<InputEventJoypadButton> InputEventJoypadButton::create_reference(JoyButton p_btn_index) { Ref<InputEventJoypadButton> InputEventJoypadButton::create_reference(JoyButton p_btn_index, int p_device) {
Ref<InputEventJoypadButton> ie; Ref<InputEventJoypadButton> ie;
ie.instantiate(); ie.instantiate();
ie->set_button_index(p_btn_index); ie->set_button_index(p_btn_index);
ie->set_device(p_device);
return ie; return ie;
} }

View File

@@ -339,7 +339,8 @@ public:
virtual String as_text() const override; virtual String as_text() const override;
virtual String to_string() override; virtual String to_string() override;
static Ref<InputEventJoypadMotion> create_reference(JoyAxis p_axis, float p_value); // The default device ID is `InputMap::ALL_DEVICES`.
static Ref<InputEventJoypadMotion> create_reference(JoyAxis p_axis, float p_value, int p_device = -1);
InputEventType get_type() const final override { return InputEventType::JOY_MOTION; } InputEventType get_type() const final override { return InputEventType::JOY_MOTION; }
@@ -371,7 +372,8 @@ public:
virtual String as_text() const override; virtual String as_text() const override;
virtual String to_string() override; virtual String to_string() override;
static Ref<InputEventJoypadButton> create_reference(JoyButton p_btn_index); // The default device ID is `InputMap::ALL_DEVICES`.
static Ref<InputEventJoypadButton> create_reference(JoyButton p_btn_index, int p_device = -1);
InputEventType get_type() const final override { return InputEventType::JOY_BUTTON; } InputEventType get_type() const final override { return InputEventType::JOY_BUTTON; }

View File

@@ -527,10 +527,8 @@ void InputEventConfigurationDialog::_input_list_item_selected() {
} break; } break;
case INPUT_JOY_BUTTON: { case INPUT_JOY_BUTTON: {
JoyButton idx = (JoyButton)(int)selected->get_meta("__index"); JoyButton idx = (JoyButton)(int)selected->get_meta("__index");
Ref<InputEventJoypadButton> jb = InputEventJoypadButton::create_reference(idx);
// Maintain selected device // Maintain selected device
jb->set_device(_get_current_device()); Ref<InputEventJoypadButton> jb = InputEventJoypadButton::create_reference(idx, _get_current_device());
_set_event(jb, jb, false); _set_event(jb, jb, false);
} break; } break;