[Libreoffice-commits] core.git: Branch 'feature/vclref' - basctl/source compilerplugins/clang cui/source dbaccess/source desktop/source extensions/source include/vcl sc/source sfx2/source starmath/source svtools/source svx/source sw/source vcl/source xmlsecurity/source

Noel Grandin noel at peralex.com
Wed Mar 18 01:20:05 PDT 2015


 basctl/source/basicide/basidesh.cxx                        |    2 -
 basctl/source/basicide/moduldlg.cxx                        |    2 -
 compilerplugins/clang/vclwidgets.cxx                       |   13 ++++++++++
 cui/source/dialogs/cuigaldlg.cxx                           |    4 +--
 cui/source/dialogs/scriptdlg.cxx                           |    4 +--
 cui/source/options/optjava.cxx                             |    4 +--
 dbaccess/source/ui/misc/WCopyTable.cxx                     |    6 ++--
 dbaccess/source/ui/querydesign/JoinTableView.cxx           |    8 +++---
 dbaccess/source/ui/querydesign/QueryTableView.cxx          |    6 ++--
 dbaccess/source/ui/relationdesign/RelationTableView.cxx    |    8 +++---
 desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx |    4 +--
 extensions/source/bibliography/bibbeam.cxx                 |    4 +--
 extensions/source/bibliography/bibcont.cxx                 |   12 ++++-----
 extensions/source/propctrlr/propertyeditor.cxx             |    9 +++----
 include/vcl/builder.hxx                                    |    2 -
 sc/source/ui/miscdlgs/retypepassdlg.cxx                    |    8 +++---
 sfx2/source/appl/sfxhelp.cxx                               |    6 ++--
 sfx2/source/control/thumbnailview.cxx                      |    4 +--
 sfx2/source/dialog/infobar.cxx                             |    2 -
 sfx2/source/doc/doctemplates.cxx                           |    4 +--
 sfx2/source/toolbox/tbxitem.cxx                            |    2 -
 sfx2/source/view/viewprn.cxx                               |    4 +--
 starmath/source/dialog.cxx                                 |    8 +++---
 svtools/source/contnr/fileview.cxx                         |    6 ----
 svtools/source/dialogs/wizardmachine.cxx                   |    2 -
 svtools/source/uno/popupwindowcontroller.cxx               |    2 -
 svx/source/form/datanavi.cxx                               |    8 +++---
 sw/source/ui/dbui/mmoutputtypepage.cxx                     |    3 +-
 sw/source/ui/index/cnttab.cxx                              |   16 ++++++-------
 sw/source/uibase/dbui/dbmgr.cxx                            |   12 ++++-----
 sw/source/uibase/utlui/navipi.cxx                          |    3 +-
 vcl/source/app/help.cxx                                    |    8 +++---
 vcl/source/outdev/map.cxx                                  |    4 +--
 vcl/source/uipreviewer/previewer.cxx                       |    4 +--
 vcl/source/window/builder.cxx                              |    4 +--
 vcl/source/window/dockmgr.cxx                              |    7 ++---
 vcl/source/window/dockwin.cxx                              |    4 +--
 vcl/source/window/window.cxx                               |    4 +--
 xmlsecurity/source/dialogs/certificateviewer.cxx           |    6 ++--
 xmlsecurity/source/dialogs/macrosecurity.cxx               |    4 +--
 40 files changed, 116 insertions(+), 107 deletions(-)

New commits:
commit 2b3deb9eb591065fb3108c7d5fc0ff39f58cc9ca
Author: Noel Grandin <noel at peralex.com>
Date:   Wed Mar 18 08:33:14 2015 +0200

    vclwidget: check for calling delete on subclasses of vcl::Window
    
    Change-Id: I7fb7cf919e3f46dd03a18b1cb95fa881915f9642

diff --git a/basctl/source/basicide/basidesh.cxx b/basctl/source/basicide/basidesh.cxx
index 58938a2..db6136b 100644
--- a/basctl/source/basicide/basidesh.cxx
+++ b/basctl/source/basicide/basidesh.cxx
@@ -819,7 +819,7 @@ void Shell::RemoveWindow( BaseWindow* pWindow_, bool bDestroy, bool bAllowChange
     {
         if ( !( pWindow_->GetStatus() & BASWIN_INRESCHEDULE ) )
         {
-            delete pWindow_;
+            VclPtr<BaseWindow>(pWindow_).disposeAndClear();
         }
         else
         {
diff --git a/basctl/source/basicide/moduldlg.cxx b/basctl/source/basicide/moduldlg.cxx
index 290b771..bc23326 100644
--- a/basctl/source/basicide/moduldlg.cxx
+++ b/basctl/source/basicide/moduldlg.cxx
@@ -494,7 +494,7 @@ void OrganizeDialog::dispose()
     if (m_pTabCtrl)
     {
         for ( sal_uInt16 i = 0; i < m_pTabCtrl->GetPageCount(); i++ )
-            delete m_pTabCtrl->GetTabPage( m_pTabCtrl->GetPageId( i ) );
+            VclPtr<vcl::Window>(m_pTabCtrl->GetTabPage( m_pTabCtrl->GetPageId( i ) )).disposeAndClear();
     }
     m_pTabCtrl.clear();
 
diff --git a/compilerplugins/clang/vclwidgets.cxx b/compilerplugins/clang/vclwidgets.cxx
index a88eb2b..b0164d5 100644
--- a/compilerplugins/clang/vclwidgets.cxx
+++ b/compilerplugins/clang/vclwidgets.cxx
@@ -230,6 +230,7 @@ bool VCLWidgets::VisitVarDecl(const VarDecl * pVarDecl) {
         && !startsWith(pVarDecl->getType().getAsString(), "::std::multimap<sal_Int32, OTableWindow *>")
         && !startsWith(pVarDecl->getType().getAsString(), "::std::multimap<sal_Int32, class OTableWindow *>")
         && !startsWith(pVarDecl->getType().getAsString(), "::dbp::OMultiInstanceAutoRegistration< ::dbp::OUnoAutoPilot<")
+        && !startsWith(pVarDecl->getType().getAsString(), "SwSidebarWin_iterator")
         && containsWindowSubclass(pVarDecl->getType()))
     {
         report(
@@ -399,6 +400,9 @@ bool VCLWidgets::VisitFunctionDecl( const FunctionDecl* functionDecl )
         }
     }
     // check dispose method to make sure we are actually disposing all of the VclPtr fields
+    /*
+       Now that we are in the debugging phase this is no longer useful, since we have to break this rule on
+       occassion to make the destruction process work cleanly.
     if (pMethodDecl && pMethodDecl->isInstance() && pMethodDecl->getBody()
         && pMethodDecl->param_size()==0
         && pMethodDecl->getNameAsString() == "dispose"
@@ -458,6 +462,7 @@ bool VCLWidgets::VisitFunctionDecl( const FunctionDecl* functionDecl )
            }
        }
     }
+    */
     return true;
 }
 
@@ -466,6 +471,14 @@ bool VCLWidgets::VisitCXXDeleteExpr(const CXXDeleteExpr *pCXXDeleteExpr)
     if (ignoreLocation(pCXXDeleteExpr)) {
         return true;
     }
+    const CXXRecordDecl *pPointee = pCXXDeleteExpr->getArgument()->getType()->getPointeeCXXRecordDecl();
+    if (pPointee && isDerivedFromWindow(pPointee)) {
+        report(
+            DiagnosticsEngine::Warning,
+            "calling delete on instance of vcl::Window subclass, must rather call disposeAndClear()",
+            pCXXDeleteExpr->getLocStart())
+          << pCXXDeleteExpr->getSourceRange();
+    }
     const ImplicitCastExpr* pImplicitCastExpr = dyn_cast<ImplicitCastExpr>(pCXXDeleteExpr->getArgument());
     if (!pImplicitCastExpr) {
         return true;
diff --git a/cui/source/dialogs/cuigaldlg.cxx b/cui/source/dialogs/cuigaldlg.cxx
index 9bd702a..2e2f76d 100644
--- a/cui/source/dialogs/cuigaldlg.cxx
+++ b/cui/source/dialogs/cuigaldlg.cxx
@@ -253,7 +253,7 @@ IMPL_LINK_NOARG(SearchProgress, CleanUpHdl)
 
     EndDialog( RET_OK );
 
-    delete this;
+    VclPtr<SearchProgress>(this).disposeAndClear();
     return 0L;
 }
 
@@ -431,7 +431,7 @@ IMPL_LINK_NOARG(TakeProgress, CleanUpHdl)
     GetParent()->LeaveWait();
 
     EndDialog( RET_OK );
-    delete this;
+    VclPtr<TakeProgress>(this).disposeAndClear();
     return 0L;
 }
 
diff --git a/cui/source/dialogs/scriptdlg.cxx b/cui/source/dialogs/scriptdlg.cxx
index 8df83e6..0e52d58 100644
--- a/cui/source/dialogs/scriptdlg.cxx
+++ b/cui/source/dialogs/scriptdlg.cxx
@@ -1503,11 +1503,11 @@ IMPL_LINK( SvxScriptErrorDialog, ShowDialog, OUString*, pMessage )
         message = OUString( CUI_RES( RID_SVXSTR_ERROR_TITLE ) );
     }
 
-    MessageDialog* pBox = new MessageDialog(NULL, message, VCL_MESSAGE_WARNING);
+    VclPtr<MessageDialog> pBox = new MessageDialog(NULL, message, VCL_MESSAGE_WARNING);
     pBox->SetText( CUI_RES( RID_SVXSTR_ERROR_TITLE ) );
     pBox->Execute();
 
-    delete pBox;
+    pBox.disposeAndClear();
     delete pMessage;
 
     return 0;
diff --git a/cui/source/options/optjava.cxx b/cui/source/options/optjava.cxx
index 2d41230..2c8e6e8 100644
--- a/cui/source/options/optjava.cxx
+++ b/cui/source/options/optjava.cxx
@@ -437,7 +437,7 @@ IMPL_LINK( SvxJavaOptionsPage, DialogClosedHdl, DialogClosedEvent*, pEvt )
 
 IMPL_LINK_NOARG( SvxJavaOptionsPage, ExpertConfigHdl_Impl )
 {
-    CuiAboutConfigTabPage* m_pExpertConfigDlg = new CuiAboutConfigTabPage(this);
+    VclPtr<CuiAboutConfigTabPage> m_pExpertConfigDlg = new CuiAboutConfigTabPage(this);
     m_pExpertConfigDlg->Reset();//initialize and reset function
 
     if( RET_OK == m_pExpertConfigDlg->Execute() )
@@ -445,7 +445,7 @@ IMPL_LINK_NOARG( SvxJavaOptionsPage, ExpertConfigHdl_Impl )
         m_pExpertConfigDlg->FillItemSet();//save changes if there are any
     }
 
-    delete m_pExpertConfigDlg;
+    m_pExpertConfigDlg.disposeAndClear();
     return 0;
 }
 
diff --git a/dbaccess/source/ui/misc/WCopyTable.cxx b/dbaccess/source/ui/misc/WCopyTable.cxx
index e28110b..c50fd4b 100644
--- a/dbaccess/source/ui/misc/WCopyTable.cxx
+++ b/dbaccess/source/ui/misc/WCopyTable.cxx
@@ -693,11 +693,11 @@ void OCopyTableWizard::dispose()
 {
     for ( ;; )
     {
-        TabPage *pPage = GetPage(0);
-        if ( pPage == NULL )
+        VclPtr<TabPage> pPage = GetPage(0);
+        if ( pPage == nullptr )
             break;
         RemovePage( pPage );
-        delete pPage;
+        pPage.disposeAndClear();
     }
 
     if ( m_bDeleteSourceColumns )
diff --git a/dbaccess/source/ui/querydesign/JoinTableView.cxx b/dbaccess/source/ui/querydesign/JoinTableView.cxx
index d55b937..46b4f75 100644
--- a/dbaccess/source/ui/querydesign/JoinTableView.cxx
+++ b/dbaccess/source/ui/querydesign/JoinTableView.cxx
@@ -265,7 +265,7 @@ bool OJoinTableView::RemoveConnection( OTableConnection* _pConn,bool _bDelete )
                                                 Any());
     if ( _bDelete )
     {
-        delete _pConn;
+        VclPtr<OTableConnection>(_pConn).disposeAndClear();
     }
 
     return true;
@@ -326,7 +326,7 @@ void OJoinTableView::AddTabWin(const OUString& _rComposedName, const OUString& r
     TTableWindowData::value_type pNewTabWinData(createTableWindowData( _rComposedName, rWinName,rWinName ));
 
     // insert new window in window list
-    OTableWindow* pNewTabWin = createWindow( pNewTabWinData );
+    VclPtr<OTableWindow> pNewTabWin = createWindow( pNewTabWinData );
     if ( pNewTabWin->Init() )
     {
         m_pView->getController().getTableWindowData().push_back( pNewTabWinData);
@@ -348,7 +348,7 @@ void OJoinTableView::AddTabWin(const OUString& _rComposedName, const OUString& r
     else
     {
         pNewTabWin->clearListBox();
-        delete pNewTabWin;
+        pNewTabWin.disposeAndClear();
     }
 }
 
@@ -401,7 +401,7 @@ void OJoinTableView::RemoveTabWin( OTableWindow* pTabWin )
             m_pLastFocusTabWin = NULL;
 
         pTabWin->clearListBox();
-        delete pTabWin;
+        VclPtr<OTableWindow>(pTabWin).disposeAndClear();
 
     }
     if ( (sal_Int32)m_vTableConnection.size() < (nCount-1) ) // if some connections could be removed
diff --git a/dbaccess/source/ui/querydesign/QueryTableView.cxx b/dbaccess/source/ui/querydesign/QueryTableView.cxx
index 18d0fd5..66c6e4d 100644
--- a/dbaccess/source/ui/querydesign/QueryTableView.cxx
+++ b/dbaccess/source/ui/querydesign/QueryTableView.cxx
@@ -259,7 +259,7 @@ void OQueryTableView::ReSync()
     for(;aIter != rTabWinDataList.rend();++aIter)
     {
         OQueryTableWindowData* pData = static_cast<OQueryTableWindowData*>(aIter->get());
-        OTableWindow* pTabWin = createWindow(*aIter);
+        VclPtr<OTableWindow> pTabWin = createWindow(*aIter);
 
         // I dont't use ShowTabWin as this adds the window data to the list of documents.
         // This would be bad as I am getting them from there.
@@ -269,7 +269,7 @@ void OQueryTableView::ReSync()
             // The initialisation has gone wrong, this TabWin is not available, so
             // I must clean up the data and the document
             pTabWin->clearListBox();
-            delete pTabWin;
+            pTabWin.disposeAndClear();
             arrInvalidTables.push_back(pData->GetAliasName());
 
             rTabWinDataList.erase( ::std::remove(rTabWinDataList.begin(), rTabWinDataList.end(), *aIter), rTabWinDataList.end());
@@ -926,7 +926,7 @@ bool OQueryTableView::ShowTabWin( OQueryTableWindow* pTabWin, OQueryTabWinUndoAc
             // Initialisation failed
             // (for example when the Connection to the database is not available at the moment)
             pTabWin->clearListBox();
-            delete pTabWin;
+            VclPtr<OQueryTableWindow>(pTabWin).disposeAndClear();
         }
     }
 
diff --git a/dbaccess/source/ui/relationdesign/RelationTableView.cxx b/dbaccess/source/ui/relationdesign/RelationTableView.cxx
index 80c085d..49c7137 100644
--- a/dbaccess/source/ui/relationdesign/RelationTableView.cxx
+++ b/dbaccess/source/ui/relationdesign/RelationTableView.cxx
@@ -106,14 +106,14 @@ void ORelationTableView::ReSync()
     for(;aIter != rTabWinDataList.rend();++aIter)
     {
         TTableWindowData::value_type pData = *aIter;
-        OTableWindow* pTabWin = createWindow(pData);
+        VclPtr<OTableWindow> pTabWin = createWindow(pData);
 
         if (!pTabWin->Init())
         {
             // initialisation failed, which means this TabWin is not available, therefore,
             // it should be cleaned up, including its data in the document
             pTabWin->clearListBox();
-            delete pTabWin;
+            pTabWin.disposeAndClear();
             arrInvalidTables.push_back(pData->GetTableName());
 
             rTabWinDataList.erase( ::std::remove(rTabWinDataList.begin(), rTabWinDataList.end(), *aIter), rTabWinDataList.end());
@@ -300,7 +300,7 @@ void ORelationTableView::AddTabWin(const OUString& _rComposedName, const OUStrin
     pNewTabWinData->ShowAll(false);
 
     // link new window into the window list
-    OTableWindow* pNewTabWin = createWindow( pNewTabWinData );
+    VclPtr<OTableWindow> pNewTabWin = createWindow( pNewTabWinData );
     if(pNewTabWin->Init())
     {
         m_pView->getController().getTableWindowData().push_back( pNewTabWinData);
@@ -320,7 +320,7 @@ void ORelationTableView::AddTabWin(const OUString& _rComposedName, const OUStrin
     else
     {
         pNewTabWin->clearListBox();
-        delete pNewTabWin;
+        pNewTabWin.disposeAndClear();
     }
 }
 
diff --git a/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx b/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx
index 8bd1af5..42607bc 100644
--- a/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx
+++ b/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx
@@ -923,7 +923,7 @@ void ExtensionCmdQueue::Thread::_removeExtension( ::rtl::Reference< ProgressCmdE
 void ExtensionCmdQueue::Thread::_checkForUpdates(
     const std::vector<uno::Reference<deployment::XPackage > > &vExtensionList )
 {
-    UpdateDialog* pUpdateDialog;
+    VclPtr<UpdateDialog> pUpdateDialog;
     std::vector< UpdateData > vData;
 
     const SolarMutexGuard guard;
@@ -970,7 +970,7 @@ void ExtensionCmdQueue::Thread::_checkForUpdates(
     else
         pUpdateDialog->notifyMenubar( false, false ); // check if there updates to be notified via menu bar icon
 
-    delete pUpdateDialog;
+    pUpdateDialog.disposeAndClear();
 }
 
 
diff --git a/extensions/source/bibliography/bibbeam.cxx b/extensions/source/bibliography/bibbeam.cxx
index 93e68d7..ada4987 100644
--- a/extensions/source/bibliography/bibbeam.cxx
+++ b/extensions/source/bibliography/bibbeam.cxx
@@ -221,10 +221,10 @@ namespace bib
 
         if( pGridWin )
         {
-            BibGridwin* pDel = pGridWin;
+            VclPtr<BibGridwin> pDel = pGridWin;
             pGridWin.disposeAndClear();
             pDel->disposeGridWin();
-            delete pDel;
+            pDel.disposeAndClear();
         }
         pToolBar.disposeAndClear();
         pGridWin.disposeAndClear();
diff --git a/extensions/source/bibliography/bibcont.cxx b/extensions/source/bibliography/bibcont.cxx
index 95ccfb9..3dbee9d 100644
--- a/extensions/source/bibliography/bibcont.cxx
+++ b/extensions/source/bibliography/bibcont.cxx
@@ -93,9 +93,9 @@ void BibWindowContainer::dispose()
 {
     if( pChild )
     {
-        vcl::Window* pDel = GetChild();
+        VclPtr<vcl::Window> pDel = GetChild();
         pChild = NULL;          // prevents GetFocus for child while deleting!
-        delete pDel;
+        pDel.disposeAndClear();
     }
     vcl::Window::dispose();
 }
@@ -142,16 +142,16 @@ void BibBookContainer::dispose()
 
     if( pTopWin )
     {
-        vcl::Window* pDel = pTopWin;
+        VclPtr<vcl::Window> pDel = pTopWin;
         pTopWin = NULL;         // prevents GetFocus for child while deleting!
-        delete pDel;
+        pDel.disposeAndClear();
     }
 
     if( pBottomWin )
     {
-        vcl::Window* pDel = pBottomWin;
+        VclPtr<vcl::Window> pDel = pBottomWin;
         pBottomWin = NULL;      // prevents GetFocus for child while deleting!
-        delete pDel;
+        pDel.disposeAndClear();
     }
 
     CloseBibModul( pBibMod );
diff --git a/extensions/source/propctrlr/propertyeditor.cxx b/extensions/source/propctrlr/propertyeditor.cxx
index 759579e7..17a73e6 100644
--- a/extensions/source/propctrlr/propertyeditor.cxx
+++ b/extensions/source/propctrlr/propertyeditor.cxx
@@ -81,12 +81,12 @@ namespace pcr
         for(long i = nCount-1; i >= 0; --i)
         {
             sal_uInt16 nID = m_aTabControl->GetPageId((sal_uInt16)i);
-            OBrowserPage* pPage = static_cast<OBrowserPage*>(m_aTabControl->GetTabPage(nID));
+            VclPtr<OBrowserPage> pPage = static_cast<OBrowserPage*>(m_aTabControl->GetTabPage(nID));
             if (pPage)
             {
                 pPage->EnableInput(false);
                 m_aTabControl->RemovePage(nID);
-                delete pPage;
+                pPage.disposeAndClear();
             }
         }
         m_aTabControl->Clear();
@@ -243,13 +243,12 @@ namespace pcr
 
     void OPropertyEditor::RemovePage(sal_uInt16 nID)
     {
-        OBrowserPage* pPage = static_cast<OBrowserPage*>(m_aTabControl->GetTabPage(nID));
+        VclPtr<OBrowserPage> pPage = static_cast<OBrowserPage*>(m_aTabControl->GetTabPage(nID));
 
         if (pPage)
             pPage->EnableInput(false);
         m_aTabControl->RemovePage(nID);
-        if (pPage)
-            delete pPage;
+        pPage.disposeAndClear();
     }
 
 
diff --git a/include/vcl/builder.hxx b/include/vcl/builder.hxx
index 9187b5a..96b625a 100644
--- a/include/vcl/builder.hxx
+++ b/include/vcl/builder.hxx
@@ -76,7 +76,7 @@ public:
     short           get_response(const vcl::Window *pWindow) const;
 
     OString         get_by_window(const vcl::Window *pWindow) const;
-    void            delete_by_window(const vcl::Window *pWindow);
+    void            delete_by_window(vcl::Window *pWindow);
 
     //release ownership of pWindow, i.e. don't delete it
     void            drop_ownership(const vcl::Window *pWindow);
diff --git a/sc/source/ui/miscdlgs/retypepassdlg.cxx b/sc/source/ui/miscdlgs/retypepassdlg.cxx
index 07fa8c0..737a9e5 100644
--- a/sc/source/ui/miscdlgs/retypepassdlg.cxx
+++ b/sc/source/ui/miscdlgs/retypepassdlg.cxx
@@ -71,15 +71,15 @@ void ScRetypePassDlg::DeleteSheets()
 {
     for(auto it = maSheets.begin(); it != maSheets.end(); ++it)
     {
-        vcl::Window *pWindow = (*it);
+        VclPtr<vcl::Window> pWindow = (*it);
         vcl::Window *pChild = pWindow->GetWindow(WINDOW_FIRSTCHILD);
         while (pChild)
         {
-            vcl::Window *pOldChild = pChild;
+            VclPtr<vcl::Window> pOldChild = pChild;
             pChild = pChild->GetWindow(WINDOW_NEXT);
-            delete pOldChild;
+            pOldChild.disposeAndClear();
         }
-        delete pWindow;
+        pWindow.disposeAndClear();
     }
 }
 
diff --git a/sfx2/source/appl/sfxhelp.cxx b/sfx2/source/appl/sfxhelp.cxx
index 9e3e5fd..e73726d 100644
--- a/sfx2/source/appl/sfxhelp.cxx
+++ b/sfx2/source/appl/sfxhelp.cxx
@@ -403,8 +403,8 @@ SfxHelpWindow_Impl* impl_createHelp(Reference< XFrame2 >& rHelpTask   ,
 
     // create all internal windows and sub frames ...
     Reference< ::com::sun::star::awt::XWindow > xParentWindow = xHelpTask->getContainerWindow();
-    vcl::Window*                                     pParentWindow = VCLUnoHelper::GetWindow( xParentWindow );
-    SfxHelpWindow_Impl*                         pHelpWindow   = new SfxHelpWindow_Impl( xHelpTask, pParentWindow, WB_DOCKBORDER );
+    vcl::Window*                                pParentWindow = VCLUnoHelper::GetWindow( xParentWindow );
+    VclPtr<SfxHelpWindow_Impl>                  pHelpWindow   = new SfxHelpWindow_Impl( xHelpTask, pParentWindow, WB_DOCKBORDER );
     Reference< ::com::sun::star::awt::XWindow > xHelpWindow   = VCLUnoHelper::GetInterface( pHelpWindow );
 
     Reference< XFrame > xHelpContent;
@@ -430,7 +430,7 @@ SfxHelpWindow_Impl* impl_createHelp(Reference< XFrame2 >& rHelpTask   ,
 
     if (!xHelpContent.is())
     {
-        delete pHelpWindow;
+        pHelpWindow.disposeAndClear();
         return NULL;
     }
 
diff --git a/sfx2/source/control/thumbnailview.cxx b/sfx2/source/control/thumbnailview.cxx
index 47de43c..07c366a 100644
--- a/sfx2/source/control/thumbnailview.cxx
+++ b/sfx2/source/control/thumbnailview.cxx
@@ -276,7 +276,7 @@ void ThumbnailView::CalculateItemPositions (bool bScrollBarUsed)
     Size        aWinSize = GetOutputSizePixel();
     size_t      nItemCount = mFilteredItemList.size();
     WinBits     nStyle = GetStyle();
-    ScrollBar*  pDelScrBar = NULL;
+    VclPtr<ScrollBar>  pDelScrBar;
 
     // consider the scrolling
     if ( nStyle & WB_VSCROLL )
@@ -441,7 +441,7 @@ void ThumbnailView::CalculateItemPositions (bool bScrollBarUsed)
     }
 
     // delete ScrollBar
-    delete pDelScrBar;
+    pDelScrBar.disposeAndClear();
 }
 
 size_t ThumbnailView::ImplGetItem( const Point& rPos ) const
diff --git a/sfx2/source/dialog/infobar.cxx b/sfx2/source/dialog/infobar.cxx
index a8b4e01..671a20c 100644
--- a/sfx2/source/dialog/infobar.cxx
+++ b/sfx2/source/dialog/infobar.cxx
@@ -278,7 +278,7 @@ void SfxInfoBarContainerWindow::removeInfoBar( SfxInfoBarWindow* pInfoBar )
             break;
         }
     }
-    delete pInfoBar;
+    VclPtr<SfxInfoBarWindow>(pInfoBar).disposeAndClear();
 
     long nY = 0;
     for ( auto it = m_pInfoBars.begin( ); it != m_pInfoBars.end( ); ++it )
diff --git a/sfx2/source/doc/doctemplates.cxx b/sfx2/source/doc/doctemplates.cxx
index 4674bb9..8fa6ca4 100644
--- a/sfx2/source/doc/doctemplates.cxx
+++ b/sfx2/source/doc/doctemplates.cxx
@@ -471,7 +471,7 @@ void SfxDocTplService_Impl::init_Impl()
             aGuard.clear();
             SolarMutexClearableGuard aSolarGuard;
 
-            WaitWindow_Impl* pWin = new WaitWindow_Impl();
+            VclPtr<WaitWindow_Impl> pWin = new WaitWindow_Impl();
 
             aSolarGuard.clear();
             ::osl::ClearableMutexGuard anotherGuard( maMutex );
@@ -481,7 +481,7 @@ void SfxDocTplService_Impl::init_Impl()
             anotherGuard.clear();
             SolarMutexGuard aSecondSolarGuard;
 
-            delete pWin;
+            pWin.disposeAndClear();
         }
         else if ( needsUpdate() )
             // the UI should be shown only on the first update
diff --git a/sfx2/source/toolbox/tbxitem.cxx b/sfx2/source/toolbox/tbxitem.cxx
index 7921069..908843c 100644
--- a/sfx2/source/toolbox/tbxitem.cxx
+++ b/sfx2/source/toolbox/tbxitem.cxx
@@ -1384,7 +1384,7 @@ void SfxPopupWindow::Delete()
 {
     if ( m_aDeleteLink.IsSet() )
         m_aDeleteLink.Call( this );
-    delete this;
+    VclPtr<SfxPopupWindow>(this).disposeAndClear();
 }
 
 
diff --git a/sfx2/source/view/viewprn.cxx b/sfx2/source/view/viewprn.cxx
index 3b51d0d..c9e5d0d 100644
--- a/sfx2/source/view/viewprn.cxx
+++ b/sfx2/source/view/viewprn.cxx
@@ -811,7 +811,7 @@ void SfxViewShell::ExecPrint_Impl( SfxRequest &rReq )
                 nDialogRet = 0;
 
                 // execute PrinterSetupDialog
-                PrinterSetupDialog* pPrintSetupDlg = new PrinterSetupDialog( GetWindow() );
+                VclPtr<PrinterSetupDialog> pPrintSetupDlg = new PrinterSetupDialog( GetWindow() );
                 SfxDialogExecutor_Impl* pExecutor = 0;
 
                 if (pImp->m_bHasPrintOptions && HasPrintOptionsPage())
@@ -838,7 +838,7 @@ void SfxViewShell::ExecPrint_Impl( SfxRequest &rReq )
                     }
                 }
 
-                DELETEZ( pPrintSetupDlg );
+                pPrintSetupDlg.disposeAndClear();
                 delete pExecutor;
 
                 // no recording of PrinterSetup except printer name (is printer dependent)
diff --git a/starmath/source/dialog.cxx b/starmath/source/dialog.cxx
index 6e7e96e..c1865a6 100644
--- a/starmath/source/dialog.cxx
+++ b/starmath/source/dialog.cxx
@@ -547,12 +547,12 @@ IMPL_LINK( SmFontTypeDialog, MenuSelectHdl, Menu *, pMenu )
 
     if (pActiveListBox)
     {
-        SmFontDialog *pFontDialog = new SmFontDialog(this, pFontListDev, bHideCheckboxes);
+        VclPtr<SmFontDialog> pFontDialog = new SmFontDialog(this, pFontListDev, bHideCheckboxes);
 
         pActiveListBox->WriteTo(*pFontDialog);
         if (pFontDialog->Execute() == RET_OK)
             pActiveListBox->ReadFrom(*pFontDialog);
-        delete pFontDialog;
+        pFontDialog.disposeAndClear();
     }
     return 0;
 }
@@ -1505,7 +1505,7 @@ IMPL_LINK_NOARG( SmSymbolDialog, SymbolChangeHdl )
 
 IMPL_LINK_NOARG(SmSymbolDialog, EditClickHdl)
 {
-    SmSymDefineDialog *pDialog = new SmSymDefineDialog(this, pFontListDev, rSymbolMgr);
+    VclPtr<SmSymDefineDialog> pDialog = new SmSymDefineDialog(this, pFontListDev, rSymbolMgr);
 
     // set current symbol and SymbolSet for the new dialog
     const OUString  aSymSetName (m_pSymbolSets->GetSelectEntry()),
@@ -1542,7 +1542,7 @@ IMPL_LINK_NOARG(SmSymbolDialog, EditClickHdl)
         nSymPos = static_cast< sal_uInt16 >(aSymbolSet.size()) - 1;
     SelectSymbol( nSymPos );
 
-    delete pDialog;
+    pDialog.disposeAndClear();
     return 0;
 }
 
diff --git a/svtools/source/contnr/fileview.cxx b/svtools/source/contnr/fileview.cxx
index 9722b41..2264eb1 100644
--- a/svtools/source/contnr/fileview.cxx
+++ b/svtools/source/contnr/fileview.cxx
@@ -1589,11 +1589,7 @@ SvtFileView_Impl::SvtFileView_Impl( SvtFileView* pAntiImpl, Reference < XCommand
 SvtFileView_Impl::~SvtFileView_Impl()
 {
     Clear();
-
-    // use temp pointer to prevent access of deleted member (GetFocus())
-    ViewTabListBox_Impl* pTemp = mpView;
-    mpView = NULL;
-    delete pTemp;
+    mpView.disposeAndClear();
 }
 
 
diff --git a/svtools/source/dialogs/wizardmachine.cxx b/svtools/source/dialogs/wizardmachine.cxx
index 47e8178..9809442 100644
--- a/svtools/source/dialogs/wizardmachine.cxx
+++ b/svtools/source/dialogs/wizardmachine.cxx
@@ -214,7 +214,7 @@ namespace svt
         m_pHelp.disposeAndClear();
 
         for (WizardState i=0; i<m_pImpl->nFirstUnknownPage; ++i)
-            delete GetPage(i);
+            VclPtr<vcl::Window>(GetPage(i)).disposeAndClear();
 
         delete m_pImpl;
         WizardDialog::dispose();
diff --git a/svtools/source/uno/popupwindowcontroller.cxx b/svtools/source/uno/popupwindowcontroller.cxx
index af2445f..b5c7db8 100644
--- a/svtools/source/uno/popupwindowcontroller.cxx
+++ b/svtools/source/uno/popupwindowcontroller.cxx
@@ -126,7 +126,7 @@ IMPL_LINK( PopupWindowControllerImpl, WindowEventListener, VclSimpleEvent*, pEve
 IMPL_STATIC_LINK( PopupWindowControllerImpl, AsyncDeleteWindowHdl, vcl::Window*, pWindow )
 {
     (void)*pThis;
-    delete pWindow;
+    VclPtr<vcl::Window>(pWindow).disposeAndClear();
     return 0;
 }
 
diff --git a/svx/source/form/datanavi.cxx b/svx/source/form/datanavi.cxx
index e264a82..249200b 100644
--- a/svx/source/form/datanavi.cxx
+++ b/svx/source/form/datanavi.cxx
@@ -1701,7 +1701,7 @@ namespace svxform
             else if (sIdent == "instancesremove")
             {
                 sal_uInt16 nId = 0;
-                XFormsPage* pPage = GetCurrentPage( nId );
+                VclPtr<XFormsPage> pPage = GetCurrentPage( nId );
                 if ( pPage )
                 {
                     OUString sInstName = pPage->GetInstanceName();
@@ -1721,7 +1721,7 @@ namespace svxform
                             if ( aFoundPage != aPageListEnd )
                             {
                                 m_aPageList.erase( aFoundPage );
-                                delete pPage;
+                                pPage.disposeAndClear() ;
                                 bDoRemove = true;
                             }
                         }
@@ -2013,10 +2013,10 @@ namespace svxform
         sal_Int32 i, nCount = m_aPageList.size();
         for ( i = 0; i < nCount; ++i )
         {
-            XFormsPage* pPage = m_aPageList[i];
+            VclPtr<XFormsPage> pPage = m_aPageList[i];
             pPage->ClearModel();
             if ( bClearPages )
-                delete pPage;
+                pPage.disposeAndClear();
         }
 
         if ( bClearPages )
diff --git a/sw/source/ui/dbui/mmoutputtypepage.cxx b/sw/source/ui/dbui/mmoutputtypepage.cxx
index 453fc37..b02ce8f 100644
--- a/sw/source/ui/dbui/mmoutputtypepage.cxx
+++ b/sw/source/ui/dbui/mmoutputtypepage.cxx
@@ -410,7 +410,8 @@ IMPL_STATIC_LINK( SwSendMailDialog, RemoveThis, Timer*, pTimer )
             (!pThis->m_pImpl->xMailDispatcher.is() ||
                     !pThis->m_pImpl->xMailDispatcher->isRunning()))
     {
-        delete pThis;
+        VclPtr<vcl::Window> a(pThis);
+        a.disposeAndClear();
     }
     else
     {
diff --git a/sw/source/ui/index/cnttab.cxx b/sw/source/ui/index/cnttab.cxx
index 49e2eee..be8e89b 100644
--- a/sw/source/ui/index/cnttab.cxx
+++ b/sw/source/ui/index/cnttab.cxx
@@ -2769,10 +2769,10 @@ void SwTokenWindow::dispose()
 {
     for (ctrl_iterator it = aControlList.begin(); it != aControlList.end(); ++it)
     {
-        Control* pControl = (*it);
+        VclPtr<Control> pControl = (*it);
         pControl->SetGetFocusHdl( Link() );
         pControl->SetLoseFocusHdl( Link() );
-        delete pControl;
+        pControl.disposeAndClear();
     }
     aControlList.clear();
     disposeBuilder();
@@ -3188,15 +3188,15 @@ void SwTokenWindow::RemoveControl(SwTOXButton* pDel, bool bInternalCall )
     ctrl_iterator itLeft = it, itRight = it;
     --itLeft;
     ++itRight;
-    Control *pLeftEdit = *itLeft;
-    Control *pRightEdit = *itRight;
+    VclPtr<Control> pLeftEdit = *itLeft;
+    VclPtr<Control> pRightEdit = *itRight;
 
-    static_cast<SwTOXEdit*>(pLeftEdit)->SetText(static_cast<SwTOXEdit*>(pLeftEdit)->GetText() +
-                                     static_cast<SwTOXEdit*>(pRightEdit)->GetText());
-    static_cast<SwTOXEdit*>(pLeftEdit)->AdjustSize();
+    static_cast<SwTOXEdit*>(pLeftEdit.get())->SetText(static_cast<SwTOXEdit*>(pLeftEdit.get())->GetText() +
+                                     static_cast<SwTOXEdit*>(pRightEdit.get())->GetText());
+    static_cast<SwTOXEdit*>(pLeftEdit.get())->AdjustSize();
 
     aControlList.erase(itRight);
-    delete pRightEdit;
+    pRightEdit.disposeAndClear();
 
     aControlList.erase(it);
     pActiveCtrl->Hide();
diff --git a/sw/source/uibase/dbui/dbmgr.cxx b/sw/source/uibase/dbui/dbmgr.cxx
index f9204f1..fec31a3 100644
--- a/sw/source/uibase/dbui/dbmgr.cxx
+++ b/sw/source/uibase/dbui/dbmgr.cxx
@@ -903,7 +903,7 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
             bool bPageStylesWithHeaderFooter = false;
 
             vcl::Window *pSourceWindow = 0;
-            CancelableModelessDialog *pProgressDlg = 0;
+            VclPtr<CancelableModelessDialog> pProgressDlg;
 
             if (!IsMergeSilent()) {
                 pSourceWindow = &pSourceShell->GetView().GetEditWin();
@@ -911,7 +911,7 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
                     pProgressDlg = new CreateMonitor( pSourceWindow );
                 else {
                     pProgressDlg = new PrintMonitor( pSourceWindow, PrintMonitor::MONITOR_TYPE_PRINT );
-                    static_cast<PrintMonitor*>( pProgressDlg )->SetText(pSourceShell->GetView().GetDocShell()->GetTitle(22));
+                    static_cast<PrintMonitor*>( pProgressDlg.get() )->SetText(pSourceShell->GetView().GetDocShell()->GetTitle(22));
                 }
                 pProgressDlg->SetCancelHdl( LINK(this, SwDBManager, PrtCancelHdl) );
                 pProgressDlg->Show();
@@ -986,7 +986,7 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
             int targetDocPageCount = 0;
             if( !IsMergeSilent() && bMergeShell &&
                     lcl_getCountFromResultSet( nDocCount, pImpl->pMergeData->xResultSet ) )
-                static_cast<CreateMonitor*>( pProgressDlg )->SetTotalCount( nDocCount );
+                static_cast<CreateMonitor*>( pProgressDlg.get() )->SetTotalCount( nDocCount );
 
             long nStartRow, nEndRow;
             bool bFreezedLayouts = false;
@@ -1040,9 +1040,9 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
                         INetURLObject aTempFileURL(aTempFile->GetURL());
                         if (!IsMergeSilent()) {
                             if( bMergeShell )
-                                static_cast<CreateMonitor*>( pProgressDlg )->SetCurrentPosition( nDocNo );
+                                static_cast<CreateMonitor*>( pProgressDlg.get() )->SetCurrentPosition( nDocNo );
                             else {
-                                PrintMonitor *pPrintMonDlg = static_cast<PrintMonitor*>( pProgressDlg );
+                                PrintMonitor *pPrintMonDlg = static_cast<PrintMonitor*>( pProgressDlg.get() );
                                 pPrintMonDlg->m_pPrinter->SetText( aTempFileURL.GetBase() );
                                 OUString sStat(SW_RES(STR_STATSTR_LETTER));   // Brief
                                 sStat += " ";
@@ -1293,7 +1293,7 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
                 std::for_each( aAllLayouts.begin(), aAllLayouts.end(),std::mem_fun(&SwRootFrm::AllCheckPageDescs));
             }
 
-            DELETEZ( pProgressDlg );
+            pProgressDlg.disposeAndClear();
 
             // save the single output document
             if (bMergeShell)
diff --git a/sw/source/uibase/utlui/navipi.cxx b/sw/source/uibase/utlui/navipi.cxx
index 0cf11e9..454ed8d 100644
--- a/sw/source/uibase/utlui/navipi.cxx
+++ b/sw/source/uibase/utlui/navipi.cxx
@@ -868,7 +868,8 @@ void SwNavigationPI::dispose()
     SfxImageManager* pImgMan = SfxImageManager::GetImageManager(*SW_MOD());
     pImgMan->ReleaseToolBox(aContentToolBox.get());
     pImgMan->ReleaseToolBox(aGlobalToolBox.get());
-    delete aContentToolBox->GetItemWindow(FN_PAGENUMBER);
+    VclPtr<vcl::Window> a(aContentToolBox->GetItemWindow(FN_PAGENUMBER));
+    a.disposeAndClear();
     aContentToolBox->Clear();
     if(pxObjectShell)
     {
diff --git a/vcl/source/app/help.cxx b/vcl/source/app/help.cxx
index 4ebfd24..9c9e43b 100644
--- a/vcl/source/app/help.cxx
+++ b/vcl/source/app/help.cxx
@@ -229,12 +229,12 @@ void Help::UpdateTip( sal_uIntPtr nId, vcl::Window* pParent, const Rectangle& rS
 
 void Help::HideTip( sal_uLong nId )
 {
-    HelpTextWindow* pHelpWin = reinterpret_cast<HelpTextWindow*>(nId);
+    VclPtr<HelpTextWindow> pHelpWin = reinterpret_cast<HelpTextWindow*>(nId);
     vcl::Window* pFrameWindow = pHelpWin->ImplGetFrameWindow();
     pHelpWin->Hide();
     // trigger update, so that a Paint is instantly triggered since we do not save the background
     pFrameWindow->ImplUpdateAll();
-    delete pHelpWin;
+    pHelpWin.disposeAndClear();
     ImplGetSVData()->maHelpData.mnLastHelpHideTime = tools::Time::GetSystemTicks();
 }
 
@@ -550,7 +550,7 @@ void ImplShowHelpWindow( vcl::Window* pParent, sal_uInt16 nHelpWinStyle, sal_uIn
 void ImplDestroyHelpWindow( bool bUpdateHideTime )
 {
     ImplSVData* pSVData = ImplGetSVData();
-    HelpTextWindow* pHelpWin = pSVData->maHelpData.mpHelpWin;
+    VclPtr<HelpTextWindow> pHelpWin = pSVData->maHelpData.mpHelpWin;
     if ( pHelpWin )
     {
         vcl::Window * pWindow = pHelpWin->GetParent()->ImplGetFrameWindow();
@@ -561,7 +561,7 @@ void ImplDestroyHelpWindow( bool bUpdateHideTime )
         pSVData->maHelpData.mpHelpWin = NULL;
         pSVData->maHelpData.mbKeyboardHelp = false;
         pHelpWin->Hide();
-        delete pHelpWin;
+        pHelpWin.disposeAndClear();
         if( bUpdateHideTime )
             pSVData->maHelpData.mnLastHelpHideTime = tools::Time::GetSystemTicks();
     }
diff --git a/vcl/source/outdev/map.cxx b/vcl/source/outdev/map.cxx
index 5117471..41909dc 100644
--- a/vcl/source/outdev/map.cxx
+++ b/vcl/source/outdev/map.cxx
@@ -228,9 +228,9 @@ static void ImplCalcMapResolution( const MapMode& rMapMode,
                     vcl::Window::ImplInitAppFontData( pSVData->maWinData.mpFirstFrame );
                 else
                 {
-                    WorkWindow* pWin = new WorkWindow( NULL, 0 );
+                    VclPtr<WorkWindow> pWin = new WorkWindow( NULL, 0 );
                     vcl::Window::ImplInitAppFontData( pWin );
-                    delete pWin;
+                    pWin.disposeAndClear();
                 }
             }
             rMapRes.mnMapScNumX   = pSVData->maGDIData.mnAppFontX;
diff --git a/vcl/source/uipreviewer/previewer.cxx b/vcl/source/uipreviewer/previewer.cxx
index e889e78..2007429 100644
--- a/vcl/source/uipreviewer/previewer.cxx
+++ b/vcl/source/uipreviewer/previewer.cxx
@@ -68,7 +68,7 @@ int UIPreviewApp::Main()
 
     try
     {
-        Dialog *pDialog = new Dialog(DIALOG_NO_PARENT, WB_STDDIALOG | WB_SIZEABLE);
+        VclPtr<Dialog> pDialog = new Dialog(DIALOG_NO_PARENT, WB_STDDIALOG | WB_SIZEABLE);
 
         {
             VclBuilder aBuilder(pDialog, OUString(), uifiles[0]);
@@ -90,7 +90,7 @@ int UIPreviewApp::Main()
             pRealDialog->Execute();
         }
 
-        delete pDialog;
+        pDialog.disposeAndClear();
     }
     catch (const uno::Exception &e)
     {
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index e0c9389..1f9be33 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -3227,10 +3227,10 @@ void VclBuilder::delete_by_name(const OString& sID)
     }
 }
 
-void VclBuilder::delete_by_window(const vcl::Window *pWindow)
+void VclBuilder::delete_by_window(vcl::Window *pWindow)
 {
     drop_ownership(pWindow);
-    delete pWindow;
+    VclPtr<vcl::Window>(pWindow).disposeAndClear();
 }
 
 void VclBuilder::drop_ownership(const vcl::Window *pWindow)
diff --git a/vcl/source/window/dockmgr.cxx b/vcl/source/window/dockmgr.cxx
index 7ff298a..20ae030 100644
--- a/vcl/source/window/dockmgr.cxx
+++ b/vcl/source/window/dockmgr.cxx
@@ -858,14 +858,14 @@ bool ImplDockingWindowWrapper::ImplStartDocking( const Point& rPos )
     mbStartFloat    = mbLastFloatMode;
 
     // calculate FloatingBorder
-    FloatingWindow* pWin;
+    VclPtr<FloatingWindow> pWin;
     if ( mpFloatWin )
         pWin = mpFloatWin;
     else
         pWin = new ImplDockFloatWin2( mpParent, mnFloatBits, NULL );
     pWin->GetBorder( mnDockLeft, mnDockTop, mnDockRight, mnDockBottom );
     if ( !mpFloatWin )
-        delete pWin;
+        pWin.disposeAndClear();
 
     Point   aPos    = GetWindow()->ImplOutputToFrame( Point() );
     Size    aSize   = GetWindow()->GetOutputSizePixel();
@@ -1322,8 +1322,7 @@ void ImplDockingWindowWrapper::SetFloatingMode( bool bFloatMode )
                 GetWindow()->SetParent( pRealParent );
                 GetWindow()->mpWindowImpl->mpRealParent = pRealParent;
 
-                delete static_cast<ImplDockFloatWin2*>(mpFloatWin.get());
-                mpFloatWin = NULL;
+                mpFloatWin.disposeAndClear();
                 GetWindow()->SetPosPixel( maDockPos );
 
                 if ( bVisible )
diff --git a/vcl/source/window/dockwin.cxx b/vcl/source/window/dockwin.cxx
index 93b9c85..3efb65f 100644
--- a/vcl/source/window/dockwin.cxx
+++ b/vcl/source/window/dockwin.cxx
@@ -267,14 +267,14 @@ bool DockingWindow::ImplStartDocking( const Point& rPos )
     mbStartFloat    = mbLastFloatMode;
 
     // calculate FloatingBorder
-    FloatingWindow* pWin;
+    VclPtr<FloatingWindow> pWin;
     if ( mpFloatWin )
         pWin = mpFloatWin;
     else
         pWin = new ImplDockFloatWin( mpImplData->mpParent, mnFloatBits, NULL );
     pWin->GetBorder( mnDockLeft, mnDockTop, mnDockRight, mnDockBottom );
     if ( !mpFloatWin )
-        delete pWin;
+        pWin.disposeAndClear();
 
     Point   aPos    = ImplOutputToFrame( Point() );
     Size    aSize   = Window::GetOutputSizePixel();
diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index 93280a7..d1d2acb 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -2097,7 +2097,7 @@ void Window::SetBorderStyle( WindowBorderStyle nBorderStyle )
             // this is a little awkward: some controls (e.g. svtools ProgressBar)
             // cannot avoid getting constructed with WB_BORDER but want to disable
             // borders in case of NWF drawing. So they need a method to remove their border window
-            vcl::Window* pBorderWin = mpWindowImpl->mpBorderWindow;
+            VclPtr<vcl::Window> pBorderWin = mpWindowImpl->mpBorderWindow;
             // remove us as border window's client
             pBorderWin->mpWindowImpl->mpClientWindow = NULL;
             mpWindowImpl->mpBorderWindow = NULL;
@@ -2109,7 +2109,7 @@ void Window::SetBorderStyle( WindowBorderStyle nBorderStyle )
             Size aBorderSize( pBorderWin->GetSizePixel() );
             setPosSizePixel( aBorderPos.X(), aBorderPos.Y(), aBorderSize.Width(), aBorderSize.Height() );
             // release border window
-            delete pBorderWin;
+            pBorderWin.disposeAndClear();
 
             // set new style bits
             SetStyle( GetStyle() & (~WB_BORDER) );
diff --git a/xmlsecurity/source/dialogs/certificateviewer.cxx b/xmlsecurity/source/dialogs/certificateviewer.cxx
index 2ac3b72..6b319ad 100644
--- a/xmlsecurity/source/dialogs/certificateviewer.cxx
+++ b/xmlsecurity/source/dialogs/certificateviewer.cxx
@@ -66,9 +66,9 @@ CertificateViewer::~CertificateViewer()
 
 void CertificateViewer::dispose()
 {
-    delete mpTabCtrl->GetTabPage(mnGeneralId);
-    delete mpTabCtrl->GetTabPage(mnDetailsId);
-    delete mpTabCtrl->GetTabPage(mnPathId);
+    VclPtr<vcl::Window>(mpTabCtrl->GetTabPage(mnGeneralId)).disposeAndClear();
+    VclPtr<vcl::Window>(mpTabCtrl->GetTabPage(mnDetailsId)).disposeAndClear();
+    VclPtr<vcl::Window>(mpTabCtrl->GetTabPage(mnPathId)).disposeAndClear();
     mpTabCtrl.disposeAndClear();
     TabDialog::dispose();
 }
diff --git a/xmlsecurity/source/dialogs/macrosecurity.cxx b/xmlsecurity/source/dialogs/macrosecurity.cxx
index e29b4bc..75880df 100644
--- a/xmlsecurity/source/dialogs/macrosecurity.cxx
+++ b/xmlsecurity/source/dialogs/macrosecurity.cxx
@@ -89,8 +89,8 @@ MacroSecurity::~MacroSecurity()
 
 void MacroSecurity::dispose()
 {
-    delete m_pTabCtrl->GetTabPage(m_nSecTrustId);
-    delete m_pTabCtrl->GetTabPage(m_nSecLevelId);
+    VclPtr<vcl::Window>(m_pTabCtrl->GetTabPage(m_nSecTrustId)).disposeAndClear();
+    VclPtr<vcl::Window>(m_pTabCtrl->GetTabPage(m_nSecLevelId)).disposeAndClear();
     m_pTabCtrl.disposeAndClear();
     m_pOkBtn.disposeAndClear();
     m_pResetBtn.disposeAndClear();


More information about the Libreoffice-commits mailing list