You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
Optimize unsaved history checking
This commit is contained in:
@@ -354,6 +354,16 @@ void EditorNode::_update_title() {
|
||||
}
|
||||
}
|
||||
|
||||
void EditorNode::_update_unsaved_cache() {
|
||||
bool is_unsaved = EditorUndoRedoManager::get_singleton()->is_history_unsaved(EditorUndoRedoManager::GLOBAL_HISTORY) ||
|
||||
EditorUndoRedoManager::get_singleton()->is_history_unsaved(editor_data.get_current_edited_scene_history_id());
|
||||
|
||||
if (unsaved_cache != is_unsaved) {
|
||||
unsaved_cache = is_unsaved;
|
||||
_update_title();
|
||||
}
|
||||
}
|
||||
|
||||
void EditorNode::input(const Ref<InputEvent> &p_event) {
|
||||
// EditorNode::get_singleton()->set_process_input is set to true in ProgressDialog
|
||||
// only when the progress dialog is visible.
|
||||
@@ -692,13 +702,6 @@ void EditorNode::_notification(int p_what) {
|
||||
} break;
|
||||
|
||||
case NOTIFICATION_PROCESS: {
|
||||
bool global_unsaved = EditorUndoRedoManager::get_singleton()->is_history_unsaved(EditorUndoRedoManager::GLOBAL_HISTORY);
|
||||
bool scene_or_global_unsaved = global_unsaved || EditorUndoRedoManager::get_singleton()->is_history_unsaved(editor_data.get_current_edited_scene_history_id());
|
||||
if (unsaved_cache != scene_or_global_unsaved) {
|
||||
unsaved_cache = scene_or_global_unsaved;
|
||||
_update_title();
|
||||
}
|
||||
|
||||
if (editor_data.is_scene_changed(-1)) {
|
||||
scene_tabs->update_scene_tabs();
|
||||
}
|
||||
@@ -1975,6 +1978,7 @@ int EditorNode::_save_external_resources(bool p_also_save_external_data) {
|
||||
}
|
||||
|
||||
EditorUndoRedoManager::get_singleton()->set_history_as_saved(EditorUndoRedoManager::GLOBAL_HISTORY);
|
||||
_update_unsaved_cache();
|
||||
|
||||
return saved;
|
||||
}
|
||||
@@ -2094,6 +2098,7 @@ void EditorNode::_save_scene(String p_file, int idx) {
|
||||
}
|
||||
|
||||
scene->propagate_notification(NOTIFICATION_EDITOR_POST_SAVE);
|
||||
_update_unsaved_cache();
|
||||
}
|
||||
|
||||
void EditorNode::save_all_scenes() {
|
||||
@@ -3066,6 +3071,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) {
|
||||
}
|
||||
}
|
||||
}
|
||||
_update_unsaved_cache();
|
||||
} break;
|
||||
case SCENE_REDO: {
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
@@ -3092,6 +3098,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) {
|
||||
}
|
||||
}
|
||||
}
|
||||
_update_unsaved_cache();
|
||||
} break;
|
||||
|
||||
case SCENE_RELOAD_SAVED_SCENE: {
|
||||
@@ -4117,6 +4124,7 @@ void EditorNode::_set_current_scene_nocheck(int p_idx) {
|
||||
}
|
||||
|
||||
_update_undo_redo_allowed();
|
||||
_update_unsaved_cache();
|
||||
}
|
||||
|
||||
void EditorNode::setup_color_picker(ColorPicker *p_picker) {
|
||||
@@ -7280,7 +7288,9 @@ EditorNode::EditorNode() {
|
||||
add_child(epnp);
|
||||
|
||||
EditorUndoRedoManager::get_singleton()->connect("version_changed", callable_mp(this, &EditorNode::_update_undo_redo_allowed));
|
||||
EditorUndoRedoManager::get_singleton()->connect("version_changed", callable_mp(this, &EditorNode::_update_unsaved_cache));
|
||||
EditorUndoRedoManager::get_singleton()->connect("history_changed", callable_mp(this, &EditorNode::_update_undo_redo_allowed));
|
||||
EditorUndoRedoManager::get_singleton()->connect("history_changed", callable_mp(this, &EditorNode::_update_unsaved_cache));
|
||||
ProjectSettings::get_singleton()->connect("settings_changed", callable_mp(this, &EditorNode::_update_from_settings));
|
||||
GDExtensionManager::get_singleton()->connect("extensions_reloaded", callable_mp(this, &EditorNode::_gdextensions_reloaded));
|
||||
|
||||
|
||||
@@ -566,6 +566,7 @@ private:
|
||||
void _save_editor_states(const String &p_file, int p_idx = -1);
|
||||
void _load_editor_plugin_states_from_config(const Ref<ConfigFile> &p_config_file);
|
||||
void _update_title();
|
||||
void _update_unsaved_cache();
|
||||
void _version_control_menu_option(int p_idx);
|
||||
void _close_messages();
|
||||
void _show_messages();
|
||||
|
||||
Reference in New Issue
Block a user