[Libreoffice-commits] core.git: sw/inc sw/qa sw/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Tue Jan 15 07:43:25 UTC 2019


 sw/inc/PostItMgr.hxx                 |    4 +--
 sw/qa/extras/uiwriter/uiwriter.cxx   |    2 -
 sw/source/uibase/docvw/PostItMgr.cxx |   45 +++++++++++++++++------------------
 3 files changed, 25 insertions(+), 26 deletions(-)

New commits:
commit 339e866d09717b4919dafaad96ebf772d30ec9cb
Author:     Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Mon Jan 14 09:17:36 2019 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Tue Jan 15 08:43:02 2019 +0100

    use unique_ptr in SwPostItMgr
    
    Change-Id: Icc946b986f62d986e979e6a3f3ba0d2c28cb9adf
    Reviewed-on: https://gerrit.libreoffice.org/66312
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/sw/inc/PostItMgr.hxx b/sw/inc/PostItMgr.hxx
index 9650996c50f3..b6f8242864f0 100644
--- a/sw/inc/PostItMgr.hxx
+++ b/sw/inc/PostItMgr.hxx
@@ -130,7 +130,7 @@ class SwPostItMgr: public SfxListener
         SwView*                         mpView;
         SwWrtShell*                     mpWrtShell;
         VclPtr<SwEditWin>               mpEditWin;
-        std::vector<SwSidebarItem*>     mvPostItFields;
+        std::vector<std::unique_ptr<SwSidebarItem>>     mvPostItFields;
         std::vector<std::unique_ptr<SwPostItPageItem>>  mPages;
         ImplSVEvent *                   mnEventId;
         bool                            mbWaitingForCalcRects;
@@ -178,7 +178,7 @@ class SwPostItMgr: public SfxListener
         SwPostItMgr(SwView* aDoc);
         virtual ~SwPostItMgr() override;
 
-        typedef std::vector< SwSidebarItem* >::const_iterator const_iterator;
+        typedef std::vector< std::unique_ptr<SwSidebarItem> >::const_iterator const_iterator;
         const_iterator begin()  const { return mvPostItFields.begin(); }
         const_iterator end()    const { return mvPostItFields.end();  }
 
diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx
index bc05aeaa0445..5e9d9c639f75 100644
--- a/sw/qa/extras/uiwriter/uiwriter.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter.cxx
@@ -4153,7 +4153,7 @@ void SwUiWriterTest::testTdf89720()
     SwDoc* pDoc = createDoc("tdf89720.odt");
     SwView* pView = pDoc->GetDocShell()->GetView();
     SwPostItMgr* pPostItMgr = pView->GetPostItMgr();
-    for (SwSidebarItem* pItem : *pPostItMgr)
+    for (std::unique_ptr<SwSidebarItem> const & pItem : *pPostItMgr)
     {
         if (pItem->pPostIt->IsFollow())
             // This was non-0: reply comments had a text range overlay,
diff --git a/sw/source/uibase/docvw/PostItMgr.cxx b/sw/source/uibase/docvw/PostItMgr.cxx
index 657d2d3b7c1d..73dba00005a4 100644
--- a/sw/source/uibase/docvw/PostItMgr.cxx
+++ b/sw/source/uibase/docvw/PostItMgr.cxx
@@ -105,7 +105,7 @@ namespace {
 
     enum class CommentNotificationType { Add, Remove, Modify };
 
-    bool comp_pos(const SwSidebarItem* a, const SwSidebarItem* b)
+    bool comp_pos(const std::unique_ptr<SwSidebarItem>& a, const std::unique_ptr<SwSidebarItem>& b)
     {
         // sort by anchor position
         SwPosition aPosAnchorA = a->GetAnchorPosition();
@@ -243,21 +243,21 @@ void SwPostItMgr::CheckForRemovedPostIts()
 {
     IDocumentRedlineAccess const& rIDRA(mpWrtShell->getIDocumentRedlineAccess());
     bool bRemoved = false;
-    auto currentIt = mvPostItFields.begin();
-    while(currentIt != mvPostItFields.end())
+    auto it = mvPostItFields.begin();
+    while(it != mvPostItFields.end())
     {
-        auto it = currentIt++;
         if (!(*it)->UseElement(*mpWrtShell->GetLayout(), rIDRA))
         {
             EndListening(const_cast<SfxBroadcaster&>(*(*it)->GetBroadCaster()));
-            SwSidebarItem* p = *it;
-            currentIt = mvPostItFields.erase(std::remove(mvPostItFields.begin(), mvPostItFields.end(), *it), mvPostItFields.end());
+            std::unique_ptr<SwSidebarItem> p = std::move(*it);
+            it = mvPostItFields.erase(it);
             if (GetActiveSidebarWin() == p->pPostIt)
                 SetActiveSidebarWin(nullptr);
             p->pPostIt.disposeAndClear();
-            delete p;
             bRemoved = true;
         }
+        else
+            ++it;
     }
 
     if ( bRemoved )
@@ -278,21 +278,21 @@ void SwPostItMgr::CheckForRemovedPostIts()
 
 SwSidebarItem* SwPostItMgr::InsertItem(SfxBroadcaster* pItem, bool bCheckExistence, bool bFocus)
 {
-    SwSidebarItem* pAnnotationItem = nullptr;
     if (bCheckExistence)
     {
         for (auto const& postItField : mvPostItFields)
         {
             if ( postItField->GetBroadCaster() == pItem )
-                return pAnnotationItem;
+                return nullptr;
         }
     }
     mbLayout = bFocus;
 
+    SwSidebarItem* pAnnotationItem = nullptr;
     if (dynamic_cast< const SwFormatField *>( pItem ) !=  nullptr)
     {
-        pAnnotationItem = new SwAnnotationItem(static_cast<SwFormatField&>(*pItem), bFocus);
-        mvPostItFields.push_back(pAnnotationItem);
+        mvPostItFields.push_back(std::make_unique<SwAnnotationItem>(static_cast<SwFormatField&>(*pItem), bFocus));
+        pAnnotationItem = mvPostItFields.back().get();
     }
     OSL_ENSURE(dynamic_cast< const SwFormatField *>( pItem ) !=  nullptr,"Mgr::InsertItem: seems like new stuff was added");
     StartListening(*pItem);
@@ -303,10 +303,10 @@ void SwPostItMgr::RemoveItem( SfxBroadcaster* pBroadcast )
 {
     EndListening(*pBroadcast);
     auto i = std::find_if(mvPostItFields.begin(), mvPostItFields.end(),
-        [&pBroadcast](const SwSidebarItem* pField) { return pField->GetBroadCaster() == pBroadcast; });
+        [&pBroadcast](const std::unique_ptr<SwSidebarItem>& pField) { return pField->GetBroadCaster() == pBroadcast; });
     if (i != mvPostItFields.end())
     {
-        SwSidebarItem* p = *i;
+        std::unique_ptr<SwSidebarItem> p = std::move(*i);
         if (GetActiveSidebarWin() == p->pPostIt)
             SetActiveSidebarWin(nullptr);
         // tdf#120487 remove from list before dispose, so comment window
@@ -314,7 +314,6 @@ void SwPostItMgr::RemoveItem( SfxBroadcaster* pBroadcast )
         // transferring from the pPostIt triggers relayout of postits
         mvPostItFields.erase(i);
         p->pPostIt.disposeAndClear();
-        delete p;
     }
     mbLayout = true;
     PrepareView();
@@ -406,7 +405,7 @@ void SwPostItMgr::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
                         // If LOK has disabled tiled annotations, emit annotation callbacks
                         if (comphelper::LibreOfficeKit::isActive() && !comphelper::LibreOfficeKit::isTiledAnnotations())
                         {
-                            lcl_CommentNotification(mpView, CommentNotificationType::Modify, postItField, 0);
+                            lcl_CommentNotification(mpView, CommentNotificationType::Modify, postItField.get(), 0);
                         }
                         break;
                     }
@@ -607,7 +606,7 @@ bool SwPostItMgr::CalcRects()
                 for (unsigned long j=0; j<aPageNum - nNumberOfPages; ++j)
                     mPages.emplace_back( new SwPostItPageItem());
             }
-            mPages[aPageNum-1]->mvSidebarItems.push_back(pItem);
+            mPages[aPageNum-1]->mvSidebarItems.push_back(pItem.get());
             mPages[aPageNum-1]->mPageRect = pItem->maLayoutInfo.mPageFrame;
             mPages[aPageNum-1]->eSidebarPosition = pItem->maLayoutInfo.meSidebarPosition;
         }
@@ -968,7 +967,7 @@ void SwPostItMgr::DrawNotesForPage(OutputDevice *pOutDev, sal_uInt32 nPage)
 
 void SwPostItMgr::PaintTile(OutputDevice& rRenderContext)
 {
-    for (SwSidebarItem* pItem : mvPostItFields)
+    for (std::unique_ptr<SwSidebarItem>& pItem : mvPostItFields)
     {
         SwAnnotationWin* pPostIt = pItem->pPostIt;
         if (!pPostIt)
@@ -1321,11 +1320,11 @@ void SwPostItMgr::AddPostIts(bool bCheckExistence, bool bFocus)
 
 void SwPostItMgr::RemoveSidebarWin()
 {
-    for (auto const& postItField : mvPostItFields)
+    for (auto& postItField : mvPostItFields)
     {
         EndListening( *const_cast<SfxBroadcaster*>(postItField->GetBroadCaster()) );
         postItField->pPostIt.disposeAndClear();
-        delete postItField;
+        postItField.reset();
     }
     mvPostItFields.clear();
 
@@ -1413,7 +1412,7 @@ public:
 //Fields more than once.
 class FieldDocWatchingStack : public SfxListener
 {
-    std::vector<SwSidebarItem*>& sidebarItemVector;
+    std::vector<std::unique_ptr<SwSidebarItem>>& sidebarItemVector;
     std::vector<const SwFormatField*> v;
     SwDocShell& m_rDocShell;
     FilterFunctor& m_rFilter;
@@ -1453,7 +1452,7 @@ class FieldDocWatchingStack : public SfxListener
     }
 
 public:
-    FieldDocWatchingStack(std::vector<SwSidebarItem*>& in, SwDocShell &rDocShell, FilterFunctor& rFilter)
+    FieldDocWatchingStack(std::vector<std::unique_ptr<SwSidebarItem>>& in, SwDocShell &rDocShell, FilterFunctor& rFilter)
         : sidebarItemVector(in)
         , m_rDocShell(rDocShell)
         , m_rFilter(rFilter)
@@ -1724,7 +1723,7 @@ SwAnnotationWin* SwPostItMgr::GetNextPostIt( sal_uInt16 aDirection,
     if (mvPostItFields.size()>1)
     {
         auto i = std::find_if(mvPostItFields.begin(), mvPostItFields.end(),
-            [&aPostIt](const SwSidebarItem* pField) { return pField->pPostIt == aPostIt; });
+            [&aPostIt](const std::unique_ptr<SwSidebarItem>& pField) { return pField->pPostIt == aPostIt; });
         if (i == mvPostItFields.end())
             return nullptr;
 
@@ -1898,7 +1897,7 @@ vcl::Window* SwPostItMgr::IsHitSidebarWindow(const Point& rPointLogic)
         if (bEnableMapMode)
             mpEditWin->EnableMapMode();
 
-        for (SwSidebarItem* pItem : mvPostItFields)
+        for (std::unique_ptr<SwSidebarItem>& pItem : mvPostItFields)
         {
             SwAnnotationWin* pPostIt = pItem->pPostIt;
             if (!pPostIt)


More information about the Libreoffice-commits mailing list