From 0726377044883fb1f7b64ff4cf322e84381dccfd Mon Sep 17 00:00:00 2001 From: Andreas Butti Date: Sun, 23 Dec 2018 14:26:44 +0100 Subject: [PATCH] Switched to ref handling for undo / red pages --- src/undo/GroupUndoAction.cpp | 13 +++++++++---- src/undo/GroupUndoAction.h | 5 +---- src/undo/MoveUndoAction.cpp | 4 ++-- src/undo/MoveUndoAction.h | 2 +- src/undo/SwapUndoAction.cpp | 4 ++-- src/undo/SwapUndoAction.h | 2 +- src/undo/UndoAction.cpp | 4 ++-- src/undo/UndoAction.h | 2 +- src/undo/UndoRedoHandler.cpp | 9 +++++++-- src/undo/UndoRedoHandler.h | 2 +- 10 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/undo/GroupUndoAction.cpp b/src/undo/GroupUndoAction.cpp index fa69b9f0..c52abef6 100644 --- a/src/undo/GroupUndoAction.cpp +++ b/src/undo/GroupUndoAction.cpp @@ -26,18 +26,23 @@ void GroupUndoAction::addAction(UndoAction* action) actions.push_back(action); } -vector GroupUndoAction::getPages() +vector GroupUndoAction::getPages() { XOJ_CHECK_TYPE(GroupUndoAction); - vector pages; + vector pages; for (UndoAction* a : actions) { - for (XojPage* addPage : a->getPages()) + for (PageRef addPage : a->getPages()) { + if (!addPage.isValid()) + { + continue; + } + bool pageAlreadyInTheList = false; - for (XojPage* p : pages) + for (PageRef p : pages) { if (addPage == p) { diff --git a/src/undo/GroupUndoAction.h b/src/undo/GroupUndoAction.h index ea1c2ff0..606de335 100644 --- a/src/undo/GroupUndoAction.h +++ b/src/undo/GroupUndoAction.h @@ -14,9 +14,6 @@ #include "UndoAction.h" #include -#include -using std::vector; - class GroupUndoAction : public UndoAction { public: @@ -29,7 +26,7 @@ public: /** * Get the affected pages */ - virtual vector getPages(); + virtual vector getPages(); virtual bool undo(Control* control); virtual bool redo(Control* control); diff --git a/src/undo/MoveUndoAction.cpp b/src/undo/MoveUndoAction.cpp index 133f3e60..86770edd 100644 --- a/src/undo/MoveUndoAction.cpp +++ b/src/undo/MoveUndoAction.cpp @@ -117,11 +117,11 @@ void MoveUndoAction::repaint() } } -vector MoveUndoAction::getPages() +vector MoveUndoAction::getPages() { XOJ_CHECK_TYPE(MoveUndoAction); - vector pages; + vector pages; pages.push_back(this->page); pages.push_back(this->targetPage); return pages; diff --git a/src/undo/MoveUndoAction.h b/src/undo/MoveUndoAction.h index 3f470a36..48c82b97 100644 --- a/src/undo/MoveUndoAction.h +++ b/src/undo/MoveUndoAction.h @@ -27,7 +27,7 @@ public: public: virtual bool undo(Control* control); virtual bool redo(Control* control); - vector getPages(); + vector getPages(); virtual string getText(); private: diff --git a/src/undo/SwapUndoAction.cpp b/src/undo/SwapUndoAction.cpp index bbb4aa03..62d39f10 100644 --- a/src/undo/SwapUndoAction.cpp +++ b/src/undo/SwapUndoAction.cpp @@ -71,11 +71,11 @@ void SwapUndoAction::swap(Control* control) doc->lock(); } -vector SwapUndoAction::getPages() +vector SwapUndoAction::getPages() { XOJ_CHECK_TYPE(SwapUndoAction); - vector pages; + vector pages; pages.push_back(this->swappedPage); pages.push_back(this->otherPage); return pages; diff --git a/src/undo/SwapUndoAction.h b/src/undo/SwapUndoAction.h index 3373b703..58f74219 100644 --- a/src/undo/SwapUndoAction.h +++ b/src/undo/SwapUndoAction.h @@ -26,7 +26,7 @@ public: public: virtual bool undo(Control* control); virtual bool redo(Control* control); - vector getPages(); + vector getPages(); virtual string getText(); private: diff --git a/src/undo/UndoAction.cpp b/src/undo/UndoAction.cpp index 6b41c451..6b07c359 100644 --- a/src/undo/UndoAction.cpp +++ b/src/undo/UndoAction.cpp @@ -14,11 +14,11 @@ UndoAction::~UndoAction() XOJ_RELEASE_TYPE(UndoAction); } -vector UndoAction::getPages() +vector UndoAction::getPages() { XOJ_CHECK_TYPE(UndoAction); - vector pages; + vector pages; pages.push_back(this->page); return pages; } diff --git a/src/undo/UndoAction.h b/src/undo/UndoAction.h index 0c71e5a8..3dfa35dc 100644 --- a/src/undo/UndoAction.h +++ b/src/undo/UndoAction.h @@ -36,7 +36,7 @@ public: /** * Get the affected pages */ - virtual vector getPages(); + virtual vector getPages(); const char* getClassName() const; diff --git a/src/undo/UndoRedoHandler.cpp b/src/undo/UndoRedoHandler.cpp index 2022088e..2cceddea 100644 --- a/src/undo/UndoRedoHandler.cpp +++ b/src/undo/UndoRedoHandler.cpp @@ -295,7 +295,7 @@ string UndoRedoHandler::redoDescription() return _("Redo"); } -void UndoRedoHandler::fireUpdateUndoRedoButtons(vector pages) +void UndoRedoHandler::fireUpdateUndoRedoButtons(vector pages) { XOJ_CHECK_TYPE(UndoRedoHandler); @@ -304,8 +304,13 @@ void UndoRedoHandler::fireUpdateUndoRedoButtons(vector pages) ((UndoRedoListener*) l->data)->undoRedoChanged(); } - for (XojPage* page : pages) + for (PageRef page : pages) { + if (!page.isValid()) + { + continue; + } + for (GList* l = this->listener; l != NULL; l = l->next) { ((UndoRedoListener*) l->data)->undoRedoPageChanged(page); diff --git a/src/undo/UndoRedoHandler.h b/src/undo/UndoRedoHandler.h index 949c21a6..045de989 100644 --- a/src/undo/UndoRedoHandler.h +++ b/src/undo/UndoRedoHandler.h @@ -46,7 +46,7 @@ public: void clearContents(); - void fireUpdateUndoRedoButtons(vector pages); + void fireUpdateUndoRedoButtons(vector pages); void addUndoRedoListener(UndoRedoListener* listener); bool isChanged();