summaryrefslogtreecommitdiff
path: root/editor
diff options
context:
space:
mode:
authorkobewi <kobewi4e@gmail.com>2023-04-09 20:43:55 +0200
committerRĂ©mi Verschelde <rverschelde@gmail.com>2023-05-12 12:07:01 +0200
commit19b998396c5caefe3beda9cb81337c5c7159519c (patch)
treeefa4cff4355fb12e66a1d65b513ff3894ecf5b0f /editor
parenta5cb7a5eb5134957ccc9bff5b6a2f78aa54078d6 (diff)
Close built-in shaders when closing scene
(cherry picked from commit aaf02ec04a8ef053a359bc2f4cc3f1747448a4a3)
Diffstat (limited to 'editor')
-rw-r--r--editor/editor_data.cpp2
-rw-r--r--editor/editor_node.cpp1
-rw-r--r--editor/plugins/script_editor_plugin.cpp7
-rw-r--r--editor/plugins/script_editor_plugin.h3
-rw-r--r--editor/plugins/shader_editor_plugin.cpp28
-rw-r--r--editor/plugins/shader_editor_plugin.h4
6 files changed, 40 insertions, 5 deletions
diff --git a/editor/editor_data.cpp b/editor/editor_data.cpp
index 9bdd39f684..7eb539333b 100644
--- a/editor/editor_data.cpp
+++ b/editor/editor_data.cpp
@@ -595,7 +595,7 @@ void EditorData::remove_scene(int p_idx) {
}
if (!edited_scene[p_idx].path.is_empty()) {
- ScriptEditor::get_singleton()->close_builtin_scripts_from_scene(edited_scene[p_idx].path);
+ EditorNode::get_singleton()->emit_signal("scene_closed", edited_scene[p_idx].path);
}
undo_redo_manager->discard_history(edited_scene[p_idx].history_id);
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index 87ca642be5..54494b63df 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -6617,6 +6617,7 @@ void EditorNode::_bind_methods() {
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")));
}
static Node *_resource_get_edited_scene() {
diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp
index 46218869b3..ef86fd2a4c 100644
--- a/editor/plugins/script_editor_plugin.cpp
+++ b/editor/plugins/script_editor_plugin.cpp
@@ -1643,6 +1643,7 @@ void ScriptEditor::_notification(int p_what) {
get_tree()->connect("tree_changed", callable_mp(this, &ScriptEditor::_tree_changed));
InspectorDock::get_singleton()->connect("request_help", callable_mp(this, &ScriptEditor::_help_class_open));
EditorNode::get_singleton()->connect("request_help_search", callable_mp(this, &ScriptEditor::_help_search));
+ EditorNode::get_singleton()->connect("scene_closed", callable_mp(this, &ScriptEditor::_close_builtin_scripts_from_scene));
} break;
case NOTIFICATION_EXIT_TREE: {
@@ -1677,7 +1678,7 @@ bool ScriptEditor::can_take_away_focus() const {
}
}
-void ScriptEditor::close_builtin_scripts_from_scene(const String &p_scene) {
+void ScriptEditor::_close_builtin_scripts_from_scene(const String &p_scene) {
for (int i = 0; i < tab_container->get_tab_count(); i++) {
ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(tab_container->get_tab_control(i));
@@ -1687,7 +1688,7 @@ void ScriptEditor::close_builtin_scripts_from_scene(const String &p_scene) {
continue;
}
- if (scr->is_built_in() && scr->get_path().begins_with(p_scene)) { //is an internal script and belongs to scene being closed
+ if (scr->is_built_in() && scr->get_path().begins_with(p_scene)) { // Is an internal script and belongs to scene being closed.
_close_tab(i, false);
i--;
}
@@ -4089,6 +4090,8 @@ ScriptEditor::ScriptEditor() {
Ref<EditorJSONSyntaxHighlighter> json_syntax_highlighter;
json_syntax_highlighter.instantiate();
register_syntax_highlighter(json_syntax_highlighter);
+
+ EditorNode::get_singleton()->connect("scene_closed", callable_mp(this, &ScriptEditor::_close_builtin_scripts_from_scene));
}
ScriptEditor::~ScriptEditor() {
diff --git a/editor/plugins/script_editor_plugin.h b/editor/plugins/script_editor_plugin.h
index 7d2f5ad22a..10dfe0f199 100644
--- a/editor/plugins/script_editor_plugin.h
+++ b/editor/plugins/script_editor_plugin.h
@@ -482,6 +482,7 @@ class ScriptEditor : public PanelContainer {
void _on_find_in_files_modified_files(PackedStringArray paths);
static void _open_script_request(const String &p_path);
+ void _close_builtin_scripts_from_scene(const String &p_scene);
static ScriptEditor *script_editor;
@@ -523,8 +524,6 @@ public:
void notify_script_close(const Ref<Script> &p_script);
void notify_script_changed(const Ref<Script> &p_script);
- void close_builtin_scripts_from_scene(const String &p_scene);
-
void goto_help(const String &p_desc) { _help_class_goto(p_desc); }
void update_doc(const String &p_name);
void clear_docs_from_script(const Ref<Script> &p_script);
diff --git a/editor/plugins/shader_editor_plugin.cpp b/editor/plugins/shader_editor_plugin.cpp
index 7861c8d354..6bc0f1580d 100644
--- a/editor/plugins/shader_editor_plugin.cpp
+++ b/editor/plugins/shader_editor_plugin.cpp
@@ -236,6 +236,26 @@ void ShaderEditorPlugin::_close_shader(int p_index) {
EditorUndoRedoManager::get_singleton()->clear_history(); // To prevent undo on deleted graphs.
}
+void ShaderEditorPlugin::_close_builtin_shaders_from_scene(const String &p_scene) {
+ for (uint32_t i = 0; i < edited_shaders.size();) {
+ Ref<Shader> &shader = edited_shaders[i].shader;
+ if (shader.is_valid()) {
+ if (shader->is_built_in() && shader->get_path().begins_with(p_scene)) {
+ _close_shader(i);
+ continue;
+ }
+ }
+ Ref<ShaderInclude> &include = edited_shaders[i].shader_inc;
+ if (include.is_valid()) {
+ if (include->is_built_in() && include->get_path().begins_with(p_scene)) {
+ _close_shader(i);
+ continue;
+ }
+ }
+ i++;
+ }
+}
+
void ShaderEditorPlugin::_resource_saved(Object *obj) {
// May have been renamed on save.
for (EditedShader &edited_shader : edited_shaders) {
@@ -422,6 +442,14 @@ void ShaderEditorPlugin::drop_data_fw(const Point2 &p_point, const Variant &p_da
}
}
+void ShaderEditorPlugin::_notification(int p_what) {
+ switch (p_what) {
+ case NOTIFICATION_READY: {
+ EditorNode::get_singleton()->connect("scene_closed", callable_mp(this, &ShaderEditorPlugin::_close_builtin_shaders_from_scene));
+ } break;
+ }
+}
+
ShaderEditorPlugin::ShaderEditorPlugin() {
main_split = memnew(HSplitContainer);
diff --git a/editor/plugins/shader_editor_plugin.h b/editor/plugins/shader_editor_plugin.h
index 408d08ade0..299d5975d2 100644
--- a/editor/plugins/shader_editor_plugin.h
+++ b/editor/plugins/shader_editor_plugin.h
@@ -82,6 +82,7 @@ class ShaderEditorPlugin : public EditorPlugin {
void _menu_item_pressed(int p_index);
void _resource_saved(Object *obj);
void _close_shader(int p_index);
+ void _close_builtin_shaders_from_scene(const String &p_scene);
void _shader_created(Ref<Shader> p_shader);
void _shader_include_created(Ref<ShaderInclude> p_shader_inc);
@@ -92,6 +93,9 @@ class ShaderEditorPlugin : public EditorPlugin {
bool can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const;
void drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from);
+protected:
+ void _notification(int p_what);
+
public:
virtual String get_name() const override { return "Shader"; }
virtual void edit(Object *p_object) override;