From fca3ab55649c43ade5076687dbba31d2a08ea1d7 Mon Sep 17 00:00:00 2001
From: kobewi <kobewi4e@gmail.com>
Date: Wed, 9 Aug 2023 17:52:01 +0200
Subject: [PATCH] Deprecate project_settings_changed signal

---
 doc/class.xsd                            |  2 ++
 doc/classes/EditorPlugin.xml             |  3 ++-
 editor/editor_node.cpp                   | 23 +++++------------------
 editor/editor_node.h                     |  3 ---
 editor/editor_plugin.cpp                 |  9 +++++++--
 editor/editor_plugin.h                   |  2 ++
 editor/editor_properties.cpp             |  2 +-
 editor/import_defaults_editor.cpp        |  6 ------
 editor/import_defaults_editor.h          |  1 -
 editor/plugins/node_3d_editor_plugin.cpp |  4 ++--
 editor/plugins/text_shader_editor.cpp    |  2 +-
 editor/project_settings_editor.cpp       |  2 --
 12 files changed, 22 insertions(+), 37 deletions(-)

diff --git a/doc/class.xsd b/doc/class.xsd
index 22821ac7678..587f3f3c97a 100644
--- a/doc/class.xsd
+++ b/doc/class.xsd
@@ -149,6 +149,8 @@
 										<xs:element type="xs:string" name="description" />
 									</xs:sequence>
 									<xs:attribute type="xs:string" name="name" use="optional" />
+									<xs:attribute type="xs:boolean" name="is_deprecated" use="optional" />
+									<xs:attribute type="xs:boolean" name="is_experimental" use="optional" />
 								</xs:complexType>
 							</xs:element>
 						</xs:sequence>
diff --git a/doc/classes/EditorPlugin.xml b/doc/classes/EditorPlugin.xml
index 8d280b8276d..08f8cf70e9c 100644
--- a/doc/classes/EditorPlugin.xml
+++ b/doc/classes/EditorPlugin.xml
@@ -749,9 +749,10 @@
 				Emitted when user changes the workspace ([b]2D[/b], [b]3D[/b], [b]Script[/b], [b]AssetLib[/b]). Also works with custom screens defined by plugins.
 			</description>
 		</signal>
-		<signal name="project_settings_changed">
+		<signal name="project_settings_changed" is_deprecated="true">
 			<description>
 				Emitted when any project setting has changed.
+				[i]Deprecated.[/i] Use [signal ProjectSettings.settings_changed] instead.
 			</description>
 		</signal>
 		<signal name="resource_saved">
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index f207418f716..910cea33739 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -431,6 +431,8 @@ void EditorNode::shortcut_input(const Ref<InputEvent> &p_event) {
 }
 
 void EditorNode::_update_from_settings() {
+	_update_title();
+
 	int current_filter = GLOBAL_GET("rendering/textures/canvas_textures/default_texture_filter");
 	if (current_filter != scene_root->get_default_canvas_item_texture_filter()) {
 		Viewport::DefaultCanvasItemTextureFilter tf = (Viewport::DefaultCanvasItemTextureFilter)current_filter;
@@ -509,6 +511,8 @@ void EditorNode::_update_from_settings() {
 	tree->set_debug_collisions_color(GLOBAL_GET("debug/shapes/collision/shape_color"));
 	tree->set_debug_collision_contact_color(GLOBAL_GET("debug/shapes/collision/contact_color"));
 
+	ResourceImporterTexture::get_singleton()->update_imports();
+
 #ifdef DEBUG_ENABLED
 	NavigationServer3D::get_singleton()->set_debug_navigation_edge_connection_color(GLOBAL_GET("debug/shapes/navigation/edge_connection_color"));
 	NavigationServer3D::get_singleton()->set_debug_navigation_geometry_edge_color(GLOBAL_GET("debug/shapes/navigation/geometry_edge_color"));
@@ -584,18 +588,6 @@ void EditorNode::_notification(int p_what) {
 
 			ResourceImporterTexture::get_singleton()->update_imports();
 
-			if (settings_changed) {
-				_update_title();
-			}
-
-			if (settings_changed) {
-				_update_from_settings();
-				settings_changed = false;
-				emit_signal(SNAME("project_settings_changed"));
-			}
-
-			ResourceImporterTexture::get_singleton()->update_imports();
-
 			bottom_panel_updating = false;
 		} break;
 
@@ -1146,7 +1138,6 @@ void EditorNode::_reload_modified_scenes() {
 
 void EditorNode::_reload_project_settings() {
 	ProjectSettings::get_singleton()->setup(ProjectSettings::get_singleton()->get_resource_path(), String(), true);
-	settings_changed = true;
 }
 
 void EditorNode::_vp_resized() {
@@ -6724,7 +6715,6 @@ void EditorNode::_bind_methods() {
 	ADD_SIGNAL(MethodInfo("script_add_function_request", PropertyInfo(Variant::OBJECT, "obj"), PropertyInfo(Variant::STRING, "function"), PropertyInfo(Variant::PACKED_STRING_ARRAY, "args")));
 	ADD_SIGNAL(MethodInfo("resource_saved", PropertyInfo(Variant::OBJECT, "obj")));
 	ADD_SIGNAL(MethodInfo("scene_saved", PropertyInfo(Variant::STRING, "path")));
-	ADD_SIGNAL(MethodInfo("project_settings_changed"));
 	ADD_SIGNAL(MethodInfo("scene_changed"));
 	ADD_SIGNAL(MethodInfo("scene_closed", PropertyInfo(Variant::STRING, "path")));
 }
@@ -6810,10 +6800,6 @@ int EditorNode::execute_and_show_output(const String &p_title, const String &p_p
 	return eta.exitcode;
 }
 
-void EditorNode::notify_settings_changed() {
-	settings_changed = true;
-}
-
 EditorNode::EditorNode() {
 	EditorPropertyNameProcessor *epnp = memnew(EditorPropertyNameProcessor);
 	add_child(epnp);
@@ -6861,6 +6847,7 @@ EditorNode::EditorNode() {
 
 	EditorUndoRedoManager::get_singleton()->connect("version_changed", callable_mp(this, &EditorNode::_update_undo_redo_allowed));
 	EditorUndoRedoManager::get_singleton()->connect("history_changed", callable_mp(this, &EditorNode::_update_undo_redo_allowed));
+	ProjectSettings::get_singleton()->connect("settings_changed", callable_mp(this, &EditorNode::_update_from_settings));
 
 	TranslationServer::get_singleton()->set_enabled(false);
 	// Load settings.
diff --git a/editor/editor_node.h b/editor/editor_node.h
index 86b4847e5be..a4dfacf60c1 100644
--- a/editor/editor_node.h
+++ b/editor/editor_node.h
@@ -465,7 +465,6 @@ private:
 	bool immediate_dialog_confirmed = false;
 	bool opening_prev = false;
 	bool restoring_scenes = false;
-	bool settings_changed = true; // Make it update settings on first frame.
 	bool unsaved_cache = true;
 	bool waiting_for_first_scan = true;
 
@@ -926,8 +925,6 @@ public:
 	void try_autosave();
 	void restart_editor();
 
-	void notify_settings_changed();
-
 	void dim_editor(bool p_dimming);
 	bool is_editor_dimmed() const;
 
diff --git a/editor/editor_plugin.cpp b/editor/editor_plugin.cpp
index 2d4c07b2636..98e71203ff1 100644
--- a/editor/editor_plugin.cpp
+++ b/editor/editor_plugin.cpp
@@ -527,19 +527,24 @@ void EditorPlugin::remove_resource_conversion_plugin(const Ref<EditorResourceCon
 	EditorNode::get_singleton()->remove_resource_conversion_plugin(p_plugin);
 }
 
+#ifndef DISABLE_DEPRECATED
 void EditorPlugin::_editor_project_settings_changed() {
 	emit_signal(SNAME("project_settings_changed"));
 }
+#endif
+
 void EditorPlugin::_notification(int p_what) {
+#ifndef DISABLE_DEPRECATED
 	switch (p_what) {
 		case NOTIFICATION_ENTER_TREE: {
-			EditorNode::get_singleton()->connect("project_settings_changed", callable_mp(this, &EditorPlugin::_editor_project_settings_changed));
+			ProjectSettings::get_singleton()->connect("settings_changed", callable_mp(this, &EditorPlugin::_editor_project_settings_changed));
 		} break;
 
 		case NOTIFICATION_EXIT_TREE: {
-			EditorNode::get_singleton()->disconnect("project_settings_changed", callable_mp(this, &EditorPlugin::_editor_project_settings_changed));
+			ProjectSettings::get_singleton()->disconnect("settings_changed", callable_mp(this, &EditorPlugin::_editor_project_settings_changed));
 		} break;
 	}
+#endif
 }
 
 void EditorPlugin::_bind_methods() {
diff --git a/editor/editor_plugin.h b/editor/editor_plugin.h
index 7dcf62144d6..62ed432ecc6 100644
--- a/editor/editor_plugin.h
+++ b/editor/editor_plugin.h
@@ -63,7 +63,9 @@ class EditorPlugin : public Node {
 	String last_main_screen_name;
 	String plugin_version;
 
+#ifndef DISABLE_DEPRECATED
 	void _editor_project_settings_changed();
+#endif
 
 protected:
 	void _notification(int p_what);
diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp
index d6af7107a35..2af07861481 100644
--- a/editor/editor_properties.cpp
+++ b/editor/editor_properties.cpp
@@ -1287,7 +1287,7 @@ EditorPropertyLayers::EditorPropertyLayers() {
 	layers->set_hide_on_checkable_item_selection(false);
 	layers->connect("id_pressed", callable_mp(this, &EditorPropertyLayers::_menu_pressed));
 	layers->connect("popup_hide", callable_mp((BaseButton *)button, &BaseButton::set_pressed).bind(false));
-	EditorNode::get_singleton()->connect("project_settings_changed", callable_mp(this, &EditorPropertyLayers::_refresh_names));
+	ProjectSettings::get_singleton()->connect("settings_changed", callable_mp(this, &EditorPropertyLayers::_refresh_names));
 }
 
 ///////////////////// INT /////////////////////////
diff --git a/editor/import_defaults_editor.cpp b/editor/import_defaults_editor.cpp
index 98a9bfe9dce..532503bc589 100644
--- a/editor/import_defaults_editor.cpp
+++ b/editor/import_defaults_editor.cpp
@@ -109,8 +109,6 @@ void ImportDefaultsEditor::_save() {
 		} else {
 			ProjectSettings::get_singleton()->set("importer_defaults/" + settings->importer->get_importer_name(), Variant());
 		}
-
-		emit_signal(SNAME("project_settings_changed"));
 	}
 }
 
@@ -196,10 +194,6 @@ void ImportDefaultsEditor::clear() {
 	}
 }
 
-void ImportDefaultsEditor::_bind_methods() {
-	ADD_SIGNAL(MethodInfo("project_settings_changed"));
-}
-
 ImportDefaultsEditor::ImportDefaultsEditor() {
 	HBoxContainer *hb = memnew(HBoxContainer);
 	hb->add_child(memnew(Label(TTR("Importer:"))));
diff --git a/editor/import_defaults_editor.h b/editor/import_defaults_editor.h
index 763cdf8bf1b..ccc74f39a5c 100644
--- a/editor/import_defaults_editor.h
+++ b/editor/import_defaults_editor.h
@@ -57,7 +57,6 @@ class ImportDefaultsEditor : public VBoxContainer {
 
 protected:
 	void _notification(int p_what);
-	static void _bind_methods();
 
 public:
 	void clear();
diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp
index d05db7aa637..b2cd8feb01a 100644
--- a/editor/plugins/node_3d_editor_plugin.cpp
+++ b/editor/plugins/node_3d_editor_plugin.cpp
@@ -2687,7 +2687,7 @@ void Node3DEditorViewport::_project_settings_changed() {
 void Node3DEditorViewport::_notification(int p_what) {
 	switch (p_what) {
 		case NOTIFICATION_READY: {
-			EditorNode::get_singleton()->connect("project_settings_changed", callable_mp(this, &Node3DEditorViewport::_project_settings_changed));
+			ProjectSettings::get_singleton()->connect("settings_changed", callable_mp(this, &Node3DEditorViewport::_project_settings_changed));
 		} break;
 
 		case NOTIFICATION_VISIBILITY_CHANGED: {
@@ -7562,7 +7562,7 @@ void Node3DEditor::_notification(int p_what) {
 			sun_state->set_custom_minimum_size(sun_vb->get_combined_minimum_size());
 			environ_state->set_custom_minimum_size(environ_vb->get_combined_minimum_size());
 
-			EditorNode::get_singleton()->connect("project_settings_changed", callable_mp(this, &Node3DEditor::update_all_gizmos).bind(Variant()));
+			ProjectSettings::get_singleton()->connect("settings_changed", callable_mp(this, &Node3DEditor::update_all_gizmos).bind(Variant()));
 		} break;
 
 		case NOTIFICATION_ENTER_TREE: {
diff --git a/editor/plugins/text_shader_editor.cpp b/editor/plugins/text_shader_editor.cpp
index ed98c7f85c5..932a2559824 100644
--- a/editor/plugins/text_shader_editor.cpp
+++ b/editor/plugins/text_shader_editor.cpp
@@ -1076,7 +1076,7 @@ TextShaderEditor::TextShaderEditor() {
 	shader_editor->connect("show_warnings_panel", callable_mp(this, &TextShaderEditor::_show_warnings_panel));
 	shader_editor->connect("script_changed", callable_mp(this, &TextShaderEditor::apply_shaders));
 	EditorSettings::get_singleton()->connect("settings_changed", callable_mp(this, &TextShaderEditor::_editor_settings_changed));
-	ProjectSettingsEditor::get_singleton()->connect("confirmed", callable_mp(this, &TextShaderEditor::_project_settings_changed));
+	ProjectSettings::get_singleton()->connect("settings_changed", callable_mp(this, &TextShaderEditor::_project_settings_changed));
 
 	shader_editor->get_text_editor()->set_code_hint_draw_below(EDITOR_GET("text_editor/completion/put_callhint_tooltip_below_current_line"));
 
diff --git a/editor/project_settings_editor.cpp b/editor/project_settings_editor.cpp
index 17826c8310e..e33f9f921dc 100644
--- a/editor/project_settings_editor.cpp
+++ b/editor/project_settings_editor.cpp
@@ -70,7 +70,6 @@ void ProjectSettingsEditor::popup_project_settings(bool p_clear_filter) {
 }
 
 void ProjectSettingsEditor::queue_save() {
-	EditorNode::get_singleton()->notify_settings_changed();
 	timer->start();
 }
 
@@ -734,7 +733,6 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) {
 	import_defaults_editor = memnew(ImportDefaultsEditor);
 	import_defaults_editor->set_name(TTR("Import Defaults"));
 	tab_container->add_child(import_defaults_editor);
-	import_defaults_editor->connect("project_settings_changed", callable_mp(this, &ProjectSettingsEditor::queue_save));
 
 	MovieWriter::set_extensions_hint(); // ensure extensions are properly displayed.
 }