diff options
author | Takeshi Abe <tabe@fixedpoint.jp> | 2017-08-16 23:04:39 +0900 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2017-08-18 10:35:00 +0200 |
commit | 75539963e621faafdc0d3ef6759cadb2e0a5d9b4 (patch) | |
tree | d8a632850c455825a491a59fcd18311efc8014d2 | |
parent | d7a9abdce528581362ac39185b51c9ff88e9d494 (diff) |
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@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r-- | include/vcl/dockwin.hxx | 6 | ||||
-rw-r--r-- | vcl/source/window/dockmgr.cxx | 33 |
2 files changed, 12 insertions, 27 deletions
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; } } |