From eb987c72c8b9205830c1bd91ac3175a4feb7c393 Mon Sep 17 00:00:00 2001 From: Andreas Butti Date: Sat, 5 Jan 2019 18:26:07 +0100 Subject: [PATCH] Mark emergency restored document as changed #701 --- src/control/XournalMain.cpp | 4 ++++ src/undo/EmergencySaveRestore.cpp | 36 +++++++++++++++++++++++++++++++ src/undo/EmergencySaveRestore.h | 32 +++++++++++++++++++++++++++ src/util/XournalTypeList.h | 2 +- 4 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 src/undo/EmergencySaveRestore.cpp create mode 100644 src/undo/EmergencySaveRestore.h diff --git a/src/control/XournalMain.cpp b/src/control/XournalMain.cpp index 0d8369b1..32c0c8f8 100644 --- a/src/control/XournalMain.cpp +++ b/src/control/XournalMain.cpp @@ -8,6 +8,7 @@ #include "gui/XournalView.h" #include "pdf/base/XojPdfExport.h" #include "pdf/base/XojPdfExportFactory.h" +#include "undo/EmergencySaveRestore.h" #include "xojfile/LoadHandler.h" #include @@ -187,6 +188,9 @@ void XournalMain::checkForEmergencySave(Control* control) { if (control->openFile(filename, -1, true)) { control->getDocument()->setFilename(""); + + // Make sure the document is changed, there is a question to ask for save + control->getUndoRedoHandler()->addUndoAction(new EmergencySaveRestore()); control->updateWindowTitle(); g_unlink(filename.c_str()); } diff --git a/src/undo/EmergencySaveRestore.cpp b/src/undo/EmergencySaveRestore.cpp new file mode 100644 index 00000000..a147bf8d --- /dev/null +++ b/src/undo/EmergencySaveRestore.cpp @@ -0,0 +1,36 @@ +#include "EmergencySaveRestore.h" + +#include + +EmergencySaveRestore::EmergencySaveRestore() : UndoAction("EmergencySaveRestore") +{ + XOJ_INIT_TYPE(EmergencySaveRestore); +} + +EmergencySaveRestore::~EmergencySaveRestore() +{ + XOJ_CHECK_TYPE(EmergencySaveRestore); + XOJ_RELEASE_TYPE(EmergencySaveRestore); +} + +bool EmergencySaveRestore::redo(Control* control) +{ + XOJ_CHECK_TYPE(EmergencySaveRestore); + + // Does nothing, only used to mark the document as changed + return true; +} + +bool EmergencySaveRestore::undo(Control* control) +{ + XOJ_CHECK_TYPE(EmergencySaveRestore); + + // Does nothing, only used to mark the document as changed + return true; +} + +string EmergencySaveRestore::getText() +{ + XOJ_CHECK_TYPE(EmergencySaveRestore); + return _("Emergency saved document"); +} diff --git a/src/undo/EmergencySaveRestore.h b/src/undo/EmergencySaveRestore.h new file mode 100644 index 00000000..0399226a --- /dev/null +++ b/src/undo/EmergencySaveRestore.h @@ -0,0 +1,32 @@ +/* + * Xournal++ + * + * Element used to mark the document as changed, so it is changed after restore. + * Without this, it's unchanged and does not ask for save + * + * @author Xournal++ Team + * https://github.com/xournalpp/xournalpp + * + * @license GNU GPLv2 or later + */ + +#pragma once + +#include "UndoAction.h" +#include + +class EmergencySaveRestore : public UndoAction +{ +public: + EmergencySaveRestore(); + virtual ~EmergencySaveRestore(); + +public: + virtual bool undo(Control* control); + virtual bool redo(Control* control); + + virtual string getText(); + +private: + XOJ_TYPE_ATTRIB; +}; diff --git a/src/util/XournalTypeList.h b/src/util/XournalTypeList.h index cca6b91f..920a10bb 100644 --- a/src/util/XournalTypeList.h +++ b/src/util/XournalTypeList.h @@ -262,7 +262,7 @@ XOJ_DECLARE_TYPE(Path, 251); XOJ_DECLARE_TYPE(FillUndoAction, 252); XOJ_DECLARE_TYPE(FillUndoActionEntry, 253); XOJ_DECLARE_TYPE(MoveLayerUndoAction, 254); - +XOJ_DECLARE_TYPE(EmergencySaveRestore, 255);