Kaydet (Commit) 75539963 authored tarafından Takeshi Abe's avatar Takeshi Abe Kaydeden (comit) Noel Grandin

vcl: DockingManager owns ImplDockingWindowWrappers

so simplify code with std::unique_ptr.

Change-Id: Ieec470e0a5f52c0d652d169c1ced6ca7307f062f
Reviewed-on: https://gerrit.libreoffice.org/41217Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarNoel Grandin <noel.grandin@collabora.co.uk>
üst d7a9abdc
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <vcl/dllapi.h> #include <vcl/dllapi.h>
#include <vcl/builder.hxx> #include <vcl/builder.hxx>
#include <vcl/floatwin.hxx> #include <vcl/floatwin.hxx>
#include <memory>
#include <vector> #include <vector>
// data to be sent with docking events // data to be sent with docking events
...@@ -164,12 +165,15 @@ public: ...@@ -164,12 +165,15 @@ public:
class VCL_DLLPUBLIC DockingManager class VCL_DLLPUBLIC DockingManager
{ {
::std::vector<ImplDockingWindowWrapper *> mDockingWindows; std::vector<std::unique_ptr<ImplDockingWindowWrapper>> mvDockingWindows;
public: public:
DockingManager(); DockingManager();
~DockingManager(); ~DockingManager();
DockingManager& operator=( DockingManager const & ) = delete; // MSVC2015 workaround
DockingManager( DockingManager const & ) = delete; // MSVC2015 workaround
void AddWindow( const vcl::Window *pWin ); void AddWindow( const vcl::Window *pWin );
void RemoveWindow( const vcl::Window *pWin ); void RemoveWindow( const vcl::Window *pWin );
......
...@@ -273,25 +273,14 @@ DockingManager::DockingManager() ...@@ -273,25 +273,14 @@ DockingManager::DockingManager()
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 ) ImplDockingWindowWrapper* DockingManager::GetDockingWindowWrapper( const vcl::Window *pWindow )
{ {
::std::vector< ImplDockingWindowWrapper* >::iterator p; for( auto& xWrapper : mvDockingWindows )
p = mDockingWindows.begin();
while( p != mDockingWindows.end() )
{ {
if( (*p)->mpDockingWindow == pWindow ) if( xWrapper->mpDockingWindow == pWindow )
return (*p); return xWrapper.get();
else
++p;
} }
return nullptr; return nullptr;
} }
...@@ -375,26 +364,18 @@ void DockingManager::AddWindow( const vcl::Window *pWindow ) ...@@ -375,26 +364,18 @@ void DockingManager::AddWindow( const vcl::Window *pWindow )
ImplDockingWindowWrapper* pWrapper = GetDockingWindowWrapper( pWindow ); ImplDockingWindowWrapper* pWrapper = GetDockingWindowWrapper( pWindow );
if( pWrapper ) if( pWrapper )
return; return;
else mvDockingWindows.emplace_back( new ImplDockingWindowWrapper( pWindow ) );
pWrapper = new ImplDockingWindowWrapper( pWindow );
mDockingWindows.push_back( pWrapper );
} }
void DockingManager::RemoveWindow( const vcl::Window *pWindow ) void DockingManager::RemoveWindow( const vcl::Window *pWindow )
{ {
::std::vector< ImplDockingWindowWrapper* >::iterator p; for( auto it = mvDockingWindows.begin(); it != mvDockingWindows.end(); ++it )
p = mDockingWindows.begin();
while( p != mDockingWindows.end() )
{ {
if( (*p)->mpDockingWindow == pWindow ) if( (*it)->mpDockingWindow == pWindow )
{ {
delete (*p); mvDockingWindows.erase( it );
mDockingWindows.erase( p );
break; break;
} }
else
++p;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment