[Libreoffice-commits] core.git: include/vcl vcl/source

Takeshi Abe tabe at fixedpoint.jp
Fri Aug 18 08:36:36 UTC 2017


 include/vcl/dockwin.hxx       |    6 +++++-
 vcl/source/window/dockmgr.cxx |   33 +++++++--------------------------
 2 files changed, 12 insertions(+), 27 deletions(-)

New commits:
commit 75539963e621faafdc0d3ef6759cadb2e0a5d9b4
Author: Takeshi Abe <tabe at fixedpoint.jp>
Date:   Wed Aug 16 23:04:39 2017 +0900

    vcl: DockingManager owns ImplDockingWindowWrappers
    
    so simplify code with std::unique_ptr.
    
    Change-Id: Ieec470e0a5f52c0d652d169c1ced6ca7307f062f
    Reviewed-on: https://gerrit.libreoffice.org/41217
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/include/vcl/dockwin.hxx b/include/vcl/dockwin.hxx
index fb0b2863a8e8..92637db78771 100644
--- a/include/vcl/dockwin.hxx
+++ b/include/vcl/dockwin.hxx
@@ -24,6 +24,7 @@
 #include <vcl/dllapi.h>
 #include <vcl/builder.hxx>
 #include <vcl/floatwin.hxx>
+#include <memory>
 #include <vector>
 
 // data to be sent with docking events
@@ -164,12 +165,15 @@ public:
 
 class VCL_DLLPUBLIC DockingManager
 {
-    ::std::vector<ImplDockingWindowWrapper *> mDockingWindows;
+    std::vector<std::unique_ptr<ImplDockingWindowWrapper>> mvDockingWindows;
 
 public:
     DockingManager();
     ~DockingManager();
 
+    DockingManager& operator=( DockingManager const & ) = delete; // MSVC2015 workaround
+    DockingManager( DockingManager const & ) = delete; // MSVC2015 workaround
+
     void AddWindow( const vcl::Window *pWin );
     void RemoveWindow( const vcl::Window *pWin );
 
diff --git a/vcl/source/window/dockmgr.cxx b/vcl/source/window/dockmgr.cxx
index 2c43b0cffc2a..0ae6a941b961 100644
--- a/vcl/source/window/dockmgr.cxx
+++ b/vcl/source/window/dockmgr.cxx
@@ -273,25 +273,14 @@ DockingManager::DockingManager()
 
 DockingManager::~DockingManager()
 {
-    ::std::vector< ImplDockingWindowWrapper* >::iterator p;
-    p = mDockingWindows.begin();
-    for(; p != mDockingWindows.end(); ++p )
-    {
-        delete (*p);
-    }
-    mDockingWindows.clear();
 }
 
 ImplDockingWindowWrapper* DockingManager::GetDockingWindowWrapper( const vcl::Window *pWindow )
 {
-    ::std::vector< ImplDockingWindowWrapper* >::iterator p;
-    p = mDockingWindows.begin();
-    while( p != mDockingWindows.end() )
+    for( auto& xWrapper : mvDockingWindows )
     {
-        if( (*p)->mpDockingWindow == pWindow )
-            return (*p);
-        else
-            ++p;
+        if( xWrapper->mpDockingWindow == pWindow )
+            return xWrapper.get();
     }
     return nullptr;
 }
@@ -375,26 +364,18 @@ void DockingManager::AddWindow( const vcl::Window *pWindow )
     ImplDockingWindowWrapper* pWrapper = GetDockingWindowWrapper( pWindow );
     if( pWrapper )
         return;
-    else
-        pWrapper = new ImplDockingWindowWrapper( pWindow );
-
-    mDockingWindows.push_back( pWrapper );
+    mvDockingWindows.emplace_back( new ImplDockingWindowWrapper( pWindow ) );
 }
 
 void DockingManager::RemoveWindow( const vcl::Window *pWindow )
 {
-    ::std::vector< ImplDockingWindowWrapper* >::iterator p;
-    p = mDockingWindows.begin();
-    while( p != mDockingWindows.end() )
+    for( auto it = mvDockingWindows.begin(); it != mvDockingWindows.end(); ++it )
     {
-        if( (*p)->mpDockingWindow == pWindow )
+        if( (*it)->mpDockingWindow == pWindow )
         {
-            delete (*p);
-            mDockingWindows.erase( p );
+            mvDockingWindows.erase( it );
             break;
         }
-        else
-            ++p;
     }
 }
 


More information about the Libreoffice-commits mailing list