1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

Add EditorInterface::close_scene()

Co-authored-by: Tomasz Chabora <kobewi4e@gmail.com>
This commit is contained in:
KaiN
2025-04-17 19:37:55 +02:00
parent 2cde9292c3
commit 8cdb1768a4
5 changed files with 27 additions and 0 deletions

View File

@@ -19,6 +19,12 @@
<tutorials>
</tutorials>
<methods>
<method name="close_scene">
<return type="int" enum="Error" />
<description>
Closes the currently active scene, discarding any pending changes in the process. Returns [constant OK] on success or [constant ERR_DOES_NOT_EXIST] if there is no scene to close.
</description>
</method>
<method name="edit_node">
<return type="void" />
<param index="0" name="node" type="Node" />

View File

@@ -713,6 +713,10 @@ void EditorInterface::save_all_scenes() {
EditorNode::get_singleton()->save_all_scenes();
}
Error EditorInterface::close_scene() {
return EditorNode::get_singleton()->close_scene() ? OK : ERR_DOES_NOT_EXIST;
}
// Scene playback.
void EditorInterface::play_main_scene() {
@@ -845,6 +849,7 @@ void EditorInterface::_bind_methods() {
ClassDB::bind_method(D_METHOD("save_scene"), &EditorInterface::save_scene);
ClassDB::bind_method(D_METHOD("save_scene_as", "path", "with_preview"), &EditorInterface::save_scene_as, DEFVAL(true));
ClassDB::bind_method(D_METHOD("save_all_scenes"), &EditorInterface::save_all_scenes);
ClassDB::bind_method(D_METHOD("close_scene"), &EditorInterface::close_scene);
ClassDB::bind_method(D_METHOD("mark_scene_as_unsaved"), &EditorInterface::mark_scene_as_unsaved);

View File

@@ -177,6 +177,7 @@ public:
void save_scene_as(const String &p_scene, bool p_with_preview = true);
void mark_scene_as_unsaved();
void save_all_scenes();
Error close_scene();
// Scene playback.

View File

@@ -4974,6 +4974,19 @@ bool EditorNode::_find_scene_in_use(Node *p_node, const String &p_path) const {
return false;
}
bool EditorNode::close_scene() {
int tab_index = editor_data.get_edited_scene();
if (tab_index == 0 && get_edited_scene() == nullptr && editor_data.get_scene_path(tab_index).is_empty()) {
return false;
}
tab_closing_idx = tab_index;
current_menu_option = SCENE_CLOSE;
_discard_changes();
changing_scene = false;
return true;
}
bool EditorNode::is_scene_in_use(const String &p_path) {
Node *es = get_edited_scene();
if (es) {

View File

@@ -943,6 +943,8 @@ public:
}
}
bool close_scene();
bool is_scene_in_use(const String &p_path);
void save_editor_layout_delayed();