Browse Source

Merge pull request #86710 from KoBeWi/do_not_the_shaders

Handle built-in shaders when closing scene
Rémi Verschelde 1 year ago
parent
commit
2158f88a88
2 changed files with 24 additions and 7 deletions
  1. 23 7
      editor/plugins/shader_editor_plugin.cpp
  2. 1 0
      editor/plugins/shader_editor_plugin.h

+ 23 - 7
editor/plugins/shader_editor_plugin.cpp

@@ -84,7 +84,8 @@ void ShaderEditorPlugin::_update_shader_list() {
 		Ref<Texture2D> icon = shader_list->get_editor_theme_icon(_class);
 
 		shader_list->add_item(text, icon);
-		shader_list->set_item_tooltip(shader_list->get_item_count() - 1, path);
+		shader_list->set_item_tooltip(-1, path);
+		edited_shader.name = text;
 	}
 
 	if (shader_tabs->get_tab_count()) {
@@ -292,11 +293,6 @@ void ShaderEditorPlugin::get_window_layout(Ref<ConfigFile> p_layout) {
 }
 
 String ShaderEditorPlugin::get_unsaved_status(const String &p_for_scene) const {
-	if (!p_for_scene.is_empty()) {
-		// TODO: handle built-in shaders.
-		return String();
-	}
-
 	// TODO: This should also include visual shaders and shader includes, but save_external_data() doesn't seem to save them...
 	PackedStringArray unsaved_shaders;
 	for (uint32_t i = 0; i < edited_shaders.size(); i++) {
@@ -305,10 +301,30 @@ String ShaderEditorPlugin::get_unsaved_status(const String &p_for_scene) const {
 				if (unsaved_shaders.is_empty()) {
 					unsaved_shaders.append(TTR("Save changes to the following shaders(s) before quitting?"));
 				}
-				unsaved_shaders.append(edited_shaders[i].shader_editor->get_name());
+				unsaved_shaders.append(edited_shaders[i].name.trim_suffix("(*)"));
 			}
 		}
 	}
+
+	if (!p_for_scene.is_empty()) {
+		PackedStringArray unsaved_built_in_shaders;
+
+		const String scene_file = p_for_scene.get_file();
+		for (const String &E : unsaved_shaders) {
+			if (!E.is_resource_file() && E.contains(scene_file)) {
+				if (unsaved_built_in_shaders.is_empty()) {
+					unsaved_built_in_shaders.append(TTR("There are unsaved changes in the following built-in shaders(s):"));
+				}
+				unsaved_built_in_shaders.append(E);
+			}
+		}
+
+		if (!unsaved_built_in_shaders.is_empty()) {
+			return String("\n").join(unsaved_built_in_shaders);
+		}
+		return String();
+	}
+
 	return String("\n").join(unsaved_shaders);
 }
 

+ 1 - 0
editor/plugins/shader_editor_plugin.h

@@ -55,6 +55,7 @@ class ShaderEditorPlugin : public EditorPlugin {
 		TextShaderEditor *shader_editor = nullptr;
 		VisualShaderEditor *visual_shader_editor = nullptr;
 		String path;
+		String name;
 	};
 
 	LocalVector<EditedShader> edited_shaders;