introduce ScCaptionPtr InUndo

Change-Id: Iccc2671b61f524244107233b77b56aaa45f5c72a
diff --git a/sc/inc/postit.hxx b/sc/inc/postit.hxx
index 993de2a..a630aef 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 524328e..67efdf2 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)
{