summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--editor/editor_node.cpp8
-rw-r--r--editor/editor_node.h1
-rw-r--r--main/main.cpp12
3 files changed, 19 insertions, 2 deletions
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index fd49920c6b..870c74b348 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -3340,13 +3340,17 @@ void EditorNode::_exit_editor(int p_exit_code) {
dim_editor(true);
// Unload addons before quitting to allow cleanup.
+ unload_editor_addons();
+
+ get_tree()->quit(p_exit_code);
+}
+
+void EditorNode::unload_editor_addons() {
for (const KeyValue<String, EditorPlugin *> &E : addon_name_to_plugin) {
print_verbose(vformat("Unloading addon: %s", E.key));
remove_editor_plugin(E.value, false);
memdelete(E.value);
}
-
- get_tree()->quit(p_exit_code);
}
void EditorNode::_discard_changes(const String &p_str) {
diff --git a/editor/editor_node.h b/editor/editor_node.h
index 7a26156ab8..a2ee61697f 100644
--- a/editor/editor_node.h
+++ b/editor/editor_node.h
@@ -908,6 +908,7 @@ public:
void save_before_run();
void try_autosave();
void restart_editor();
+ void unload_editor_addons();
void dim_editor(bool p_dimming);
bool is_editor_dimmed() const;
diff --git a/main/main.cpp b/main/main.cpp
index 060b3fe2f6..c43fc7078b 100644
--- a/main/main.cpp
+++ b/main/main.cpp
@@ -4176,7 +4176,13 @@ bool Main::iteration() {
movie_writer->add_frame();
}
+#ifdef TOOLS_ENABLED
+ bool quit_after_timeout = false;
+#endif
if ((quit_after > 0) && (Engine::get_singleton()->_process_frames >= quit_after)) {
+#ifdef TOOLS_ENABLED
+ quit_after_timeout = true;
+#endif
exit = true;
}
@@ -4209,6 +4215,12 @@ bool Main::iteration() {
}
#endif
+#ifdef TOOLS_ENABLED
+ if (exit && quit_after_timeout && EditorNode::get_singleton()) {
+ EditorNode::get_singleton()->unload_editor_addons();
+ }
+#endif
+
return exit;
}