| 6194 | } |
| 6195 | |
| 6196 | void EditorNode::_scene_tab_closed(int p_tab) { |
| 6197 | current_menu_option = SCENE_TAB_CLOSE; |
| 6198 | tab_closing_idx = p_tab; |
| 6199 | Node *scene = editor_data.get_edited_scene_root(p_tab); |
| 6200 | if (!scene) { |
| 6201 | _discard_changes(); |
| 6202 | return; |
| 6203 | } |
| 6204 | |
| 6205 | String scene_filename = scene->get_scene_file_path(); |
| 6206 | String unsaved_message; |
| 6207 | |
| 6208 | if (EditorUndoRedoManager::get_singleton()->is_history_unsaved(editor_data.get_scene_history_id(p_tab))) { |
| 6209 | if (scene_filename.is_empty()) { |
| 6210 | unsaved_message = TTR("This scene was never saved."); |
| 6211 | } else { |
| 6212 | unsaved_message = _get_unsaved_scene_dialog_text(scene_filename, started_timestamp); |
| 6213 | } |
| 6214 | } else { |
| 6215 | // Check if any plugin has unsaved changes in that scene. |
| 6216 | for (int i = 0; i < editor_data.get_editor_plugin_count(); i++) { |
| 6217 | unsaved_message = editor_data.get_editor_plugin(i)->get_unsaved_status(scene_filename); |
| 6218 | if (!unsaved_message.is_empty()) { |
| 6219 | break; |
| 6220 | } |
| 6221 | } |
| 6222 | } |
| 6223 | |
| 6224 | if (!unsaved_message.is_empty()) { |
| 6225 | if (scene_tabs->get_current_tab() != p_tab) { |
| 6226 | _set_current_scene(p_tab); |
| 6227 | } |
| 6228 | |
| 6229 | save_confirmation->set_ok_button_text(TTR("Save & Close")); |
| 6230 | save_confirmation->set_text(unsaved_message + "\n\n" + TTR("Save before closing?")); |
| 6231 | save_confirmation->reset_size(); |
| 6232 | save_confirmation->popup_centered(); |
| 6233 | } else { |
| 6234 | _discard_changes(); |
| 6235 | } |
| 6236 | |
| 6237 | save_editor_layout_delayed(); |
| 6238 | scene_tabs->update_scene_tabs(); |
| 6239 | } |
| 6240 | |
| 6241 | void EditorNode::_cancel_close_scene_tab() { |
| 6242 | if (_is_closing_editor()) { |
nothing calls this directly
no test coverage detected