From 93634334589cb56a5128388d88c49dc0e09ce326 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pa=CC=84vels=20Nadtoc=CC=8Cajevs?= <7645683+bruvzg@users.noreply.github.com> Date: Sat, 8 Mar 2025 16:26:52 +0200 Subject: [PATCH] Save queued ProjectSettings changes immediately when settings dialog is closed. --- editor/project_settings_editor.cpp | 14 +++++++++++++- editor/project_settings_editor.h | 3 +++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/editor/project_settings_editor.cpp b/editor/project_settings_editor.cpp index 1528ea3ab80..a5295029f55 100644 --- a/editor/project_settings_editor.cpp +++ b/editor/project_settings_editor.cpp @@ -76,9 +76,17 @@ void ProjectSettingsEditor::popup_project_settings(bool p_clear_filter) { } void ProjectSettingsEditor::queue_save() { + settings_changed = true; timer->start(); } +void ProjectSettingsEditor::_save() { + settings_changed = false; + if (ps) { + ps->save(); + } +} + void ProjectSettingsEditor::set_plugins_page() { tab_container->set_current_tab(tab_container->get_tab_idx_from_control(plugin_settings)); } @@ -601,6 +609,10 @@ void ProjectSettingsEditor::_notification(int p_what) { case NOTIFICATION_VISIBILITY_CHANGED: { if (!is_visible()) { EditorSettings::get_singleton()->set_project_metadata("dialog_bounds", "project_settings", Rect2(get_position(), get_size())); + if (settings_changed) { + timer->stop(); + _save(); + } } } break; @@ -763,7 +775,7 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { timer = memnew(Timer); timer->set_wait_time(1.5); - timer->connect("timeout", callable_mp(ps, &ProjectSettings::save)); + timer->connect("timeout", callable_mp(this, &ProjectSettingsEditor::_save)); timer->set_one_shot(true); add_child(timer); diff --git a/editor/project_settings_editor.h b/editor/project_settings_editor.h index 51bb5c6aaa1..a6f846ca8ad 100644 --- a/editor/project_settings_editor.h +++ b/editor/project_settings_editor.h @@ -81,6 +81,8 @@ class ProjectSettingsEditor : public AcceptDialog { ImportDefaultsEditor *import_defaults_editor = nullptr; EditorData *data = nullptr; + bool settings_changed = false; + void _advanced_toggled(bool p_button_pressed); void _update_advanced(bool p_is_advanced); void _property_box_changed(const String &p_text); @@ -113,6 +115,7 @@ class ProjectSettingsEditor : public AcceptDialog { void _action_reordered(const String &p_action_name, const String &p_relative_to, bool p_before); void _update_action_map_editor(); void _update_theme(); + void _save(); protected: void _notification(int p_what);