diff options
author | Eike Rathke <erack@redhat.com> | 2017-04-10 23:24:00 +0200 |
---|---|---|
committer | Jan Holesovsky <kendy@collabora.com> | 2017-05-15 21:59:06 +0200 |
commit | 26337c1307a1cdee72b2d457cd0d210227662e29 (patch) | |
tree | ca86c164b7e0b4c570726a64fb4e31f111d5343e /sc | |
parent | 21049854751bcc2b1f42947181eed3ee2a39404b (diff) |
introduce ScCaptionPtr InUndo
Change-Id: Iccc2671b61f524244107233b77b56aaa45f5c72a
Diffstat (limited to 'sc')
-rw-r--r-- | sc/inc/postit.hxx | 11 | ||||
-rw-r--r-- | sc/source/core/data/postit.cxx | 13 |
2 files changed, 20 insertions, 4 deletions
diff --git a/sc/inc/postit.hxx b/sc/inc/postit.hxx index b5a99206aab8..1d81db68b32e 100644 --- a/sc/inc/postit.hxx +++ b/sc/inc/postit.hxx @@ -85,6 +85,9 @@ public: */ bool forget(); + /** Flag that this instance is in Undo, so drawing layer owns it. */ + void setInUndo(); + oslInterlockedCount getRefs() const; private: @@ -101,6 +104,14 @@ private: Head* mpHead; ///< points to the "master" entry mutable ScCaptionPtr* mpNext; ///< next in list SdrCaptionObj* mpCaption; ///< the caption object, managed by head master + bool mbInUndo; ///< whether this caption object is held in Undo + /* TODO: can that be moved to Head? + * It's unclear when to reset, so + * each instance has its own flag. + * The last reference count + * decrement automatically has the + * then current state available. + * */ void newHead(); //< Allocate a new Head and init. void incRef() const; diff --git a/sc/source/core/data/postit.cxx b/sc/source/core/data/postit.cxx index 60225e639f74..8f0f00200d76 100644 --- a/sc/source/core/data/postit.cxx +++ b/sc/source/core/data/postit.cxx @@ -445,12 +445,12 @@ ScNoteCaptionCreator::ScNoteCaptionCreator( ScDocument& rDoc, const ScAddress& r ScCaptionPtr::ScCaptionPtr() : - mpHead(nullptr), mpNext(nullptr), mpCaption(nullptr) + mpHead(nullptr), mpNext(nullptr), mpCaption(nullptr), mbInUndo(false) { } ScCaptionPtr::ScCaptionPtr( SdrCaptionObj* p ) : - mpHead(nullptr), mpNext(nullptr), mpCaption(p) + mpHead(nullptr), mpNext(nullptr), mpCaption(p), mbInUndo(false) { if (p) { @@ -459,7 +459,7 @@ ScCaptionPtr::ScCaptionPtr( SdrCaptionObj* p ) : } ScCaptionPtr::ScCaptionPtr( const ScCaptionPtr& r ) : - mpHead(r.mpHead), mpCaption(r.mpCaption) + mpHead(r.mpHead), mpCaption(r.mpCaption), mbInUndo(false) { if (r.mpCaption) { @@ -477,7 +477,7 @@ ScCaptionPtr::ScCaptionPtr( const ScCaptionPtr& r ) : } ScCaptionPtr::ScCaptionPtr( ScCaptionPtr&& r ) : - mpHead(r.mpHead), mpNext(r.mpNext), mpCaption(r.mpCaption) + mpHead(r.mpHead), mpNext(r.mpNext), mpCaption(r.mpCaption), mbInUndo(false) { r.replaceInList( this ); r.mpCaption = nullptr; @@ -534,6 +534,11 @@ ScCaptionPtr& ScCaptionPtr::operator=( const ScCaptionPtr& r ) return *this; } +void ScCaptionPtr::setInUndo() +{ + mbInUndo = true; +} + ScCaptionPtr::Head::Head( ScCaptionPtr* p ) : mpFirst(p), mnRefs(1) { |