diff options
Diffstat (limited to 'editor/plugins/shader_editor_plugin.cpp')
-rw-r--r-- | editor/plugins/shader_editor_plugin.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/editor/plugins/shader_editor_plugin.cpp b/editor/plugins/shader_editor_plugin.cpp index 9eebf958ff..019d62a4bf 100644 --- a/editor/plugins/shader_editor_plugin.cpp +++ b/editor/plugins/shader_editor_plugin.cpp @@ -64,6 +64,11 @@ void ShaderEditorPlugin::_update_shader_list() { } } + // When shader is deleted in filesystem dock, need this to correctly close shader editor. + if (!path.is_empty()) { + shader->set_meta("_edit_res_path", path); + } + bool unsaved = false; if (edited_shader.shader_editor) { unsaved = edited_shader.shader_editor->is_unsaved(); @@ -571,10 +576,20 @@ void ShaderEditorPlugin::_window_changed(bool p_visible) { make_floating->set_visible(!p_visible); } +void ShaderEditorPlugin::_file_removed(const String &p_removed_file) { + for (uint32_t i = 0; i < edited_shaders.size(); i++) { + const Ref<Shader> &shader = edited_shaders[i].shader; + if (shader->get_meta("_edit_res_path") == p_removed_file) { + _close_shader(i); + } + } +} + 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)); + FileSystemDock::get_singleton()->connect("file_removed", callable_mp(this, &ShaderEditorPlugin::_file_removed)); } break; } } |