Skip to content

Commit 7adcd85

Browse files
Fixed input events not saved properly when modifying the default actions (regression)
1 parent dbf03f6 commit 7adcd85

File tree

1 file changed

+21
-5
lines changed

1 file changed

+21
-5
lines changed

editor/project_settings_editor.cpp

+21-5
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ void ProjectSettingsEditor::_device_input_add() {
228228
int idx = edit_idx;
229229
Dictionary old_val = ProjectSettings::get_singleton()->get(name);
230230
Dictionary action = old_val.duplicate();
231-
Array events = action["events"];
231+
Array events = action["events"].duplicate();
232232

233233
switch (add_type) {
234234

@@ -349,18 +349,34 @@ void ProjectSettingsEditor::_press_a_key_confirm() {
349349

350350
Dictionary old_val = ProjectSettings::get_singleton()->get(name);
351351
Dictionary action = old_val.duplicate();
352-
Array events = action["events"];
352+
Array old_events = action["events"];
353353

354-
for (int i = 0; i < events.size(); i++) {
354+
for (int i = 0; i < old_events.size(); i++) {
355355

356-
Ref<InputEventKey> aie = events[i];
356+
Ref<InputEventKey> aie = old_events[i];
357357
if (aie.is_null())
358358
continue;
359359
if (aie->get_scancode_with_modifiers() == ie->get_scancode_with_modifiers()) {
360360
return;
361361
}
362362
}
363363

364+
Dictionary init_val = ProjectSettings::get_singleton()->property_get_revert(name);
365+
Array init_events = init_val["events"];
366+
367+
// Re-use input from default values if possible
368+
for (int i = 0; i < init_events.size(); i++) {
369+
370+
Ref<InputEventKey> aie = init_events[i];
371+
if (aie.is_null())
372+
continue;
373+
if (aie->get_scancode_with_modifiers() == ie->get_scancode_with_modifiers()) {
374+
ie = aie;
375+
break;
376+
}
377+
}
378+
379+
Array events = old_events.duplicate();
364380
if (idx < 0 || idx >= events.size()) {
365381
events.push_back(ie);
366382
} else {
@@ -613,7 +629,7 @@ void ProjectSettingsEditor::_action_button_pressed(Object *p_obj, int p_column,
613629
Dictionary action = old_val.duplicate();
614630
int idx = ti->get_metadata(0);
615631

616-
Array events = action["events"];
632+
Array events = action["events"].duplicate();
617633
ERR_FAIL_INDEX(idx, events.size());
618634
events.remove(idx);
619635
action["events"] = events;

0 commit comments

Comments
 (0)