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 @@
#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 );
......
......@@ -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;
}
}
......
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