From 28db040026cf14293dd55b20e5bea5e80c558dfb Mon Sep 17 00:00:00 2001 From: Konstantin Dmitriev Date: Dec 13 2019 04:35:50 +0000 Subject: New approach, step 1: Allow to close file without removing temporary files --- diff --git a/synfig-core/src/synfig/filesystemtemporary.cpp b/synfig-core/src/synfig/filesystemtemporary.cpp index 05ab87c..9c17c68 100644 --- a/synfig-core/src/synfig/filesystemtemporary.cpp +++ b/synfig-core/src/synfig/filesystemtemporary.cpp @@ -67,7 +67,7 @@ FileSystemTemporary::FileSystemTemporary(const String &tag, const String &tempor FileSystemTemporary::~FileSystemTemporary() { - discard_changes(); + } String diff --git a/synfig-studio/src/gui/instance.cpp b/synfig-studio/src/gui/instance.cpp index 7cfdabb..ac244a4 100644 --- a/synfig-studio/src/gui/instance.cpp +++ b/synfig-studio/src/gui/instance.cpp @@ -563,7 +563,7 @@ Instance::update_all_titles() } void -Instance::close() +Instance::close(bool remove_temporary_files) { // This will increase the reference count so we don't get DELETED // until we are ready @@ -622,6 +622,11 @@ Instance::close() { studio::App::instance_list.front()->canvas_view_list().front()->present(); } + + if (remove_temporary_files) { + FileSystemTemporary::Handle temporary_filesystem = FileSystemTemporary::Handle::cast_dynamic(get_canvas()->get_file_system()); + temporary_filesystem->discard_changes(); + } } void diff --git a/synfig-studio/src/gui/instance.h b/synfig-studio/src/gui/instance.h index 25b6e86..7ba79a7 100644 --- a/synfig-studio/src/gui/instance.h +++ b/synfig-studio/src/gui/instance.h @@ -204,7 +204,7 @@ public: void dialog_cvs_revert(); //! Closes the instance of this composition - void close(); + void close(bool remove_temporary_files = true); void revert(); diff --git a/synfig-studio/src/synfigapp/instance.cpp b/synfig-studio/src/synfigapp/instance.cpp index ff50dc4..58d4c40 100644 --- a/synfig-studio/src/synfigapp/instance.cpp +++ b/synfig-studio/src/synfigapp/instance.cpp @@ -638,6 +638,7 @@ Instance::save_as(const synfig::String &file_name) new_temporary_filesystem->set_meta("as", new_canvas_filename); new_temporary_filesystem->set_meta("truncate", "0"); new_canvas_filesystem = new_temporary_filesystem; + previous_temporary_filesystem->discard_changes(); } new_canvas_identifier = new_canvas_filesystem->get_identifier(CanvasFileNaming::project_file(new_canvas_filename));