include/sfx2/childwin.hxx | 2 ++ include/svx/SpellDialogChildWindow.hxx | 2 +- sc/source/ui/inc/anyrefdg.hxx | 2 +- sc/source/ui/miscdlgs/anyrefdg.cxx | 5 +++++ sfx2/source/appl/childwin.cxx | 17 +++++++++++------ svx/source/dialog/SpellDialogChildWindow.cxx | 16 ++++++++-------- sw/source/uibase/dialog/wordcountwrapper.cxx | 10 +++++----- sw/source/uibase/inc/wordcountdialog.hxx | 2 +- vcl/source/window/builder.cxx | 1 + vcl/source/window/winproc.cxx | 8 +++++--- 10 files changed, 40 insertions(+), 25 deletions(-)
New commits: commit 2d06773762cae7d1cc98c723815a65b457a642c8 Author: Caolán McNamara <[email protected]> Date: Tue Jul 7 16:11:27 2015 +0100 replace some IsDead with isDisposed keep both tests for now for cowardice Change-Id: I96d922ef64b874f2124204c3c564a38fa7511ffe diff --git a/vcl/source/window/winproc.cxx b/vcl/source/window/winproc.cxx index dbe7b91..5d73c49 100644 --- a/vcl/source/window/winproc.cxx +++ b/vcl/source/window/winproc.cxx @@ -739,11 +739,13 @@ bool ImplHandleMouseEvent( vcl::Window* pWindow, MouseNotifyEvent nSVEvent, bool } } - if ( !aDelData.IsDead() ) - aNEvt.GetWindow()->ImplNotifyKeyMouseCommandEventListeners( aNEvt ); + assert(aNEvt.GetWindow() == pChild); + + if (!pChild->isDisposed() || !aDelData.IsDead()) + pChild->ImplNotifyKeyMouseCommandEventListeners( aNEvt ); } - if ( aDelData.IsDead() ) + if (pChild->isDisposed() || aDelData.IsDead()) return true; if ( nSVEvent == MouseNotifyEvent::MOUSEMOVE ) commit 4c9d7772bd76c30ddbfb7e0b3460aabb9529cfde Author: Caolán McNamara <[email protected]> Date: Tue Jul 7 15:48:03 2015 +0100 spelling dialog always leaked here Change-Id: I00c96bbfe7106a09c0a8aa09f3209537bc3d2b07 diff --git a/include/svx/SpellDialogChildWindow.hxx b/include/svx/SpellDialogChildWindow.hxx index 2b4964f..2e7253f 100644 --- a/include/svx/SpellDialogChildWindow.hxx +++ b/include/svx/SpellDialogChildWindow.hxx @@ -46,7 +46,7 @@ class SVX_DLLPUBLIC SpellDialogChildWindow : public SfxChildWindow { friend class SpellDialog; - AbstractSpellDialog* m_pAbstractSpellDialog; + std::unique_ptr<AbstractSpellDialog> m_xAbstractSpellDialog; public: SpellDialogChildWindow ( vcl::Window*pParent, diff --git a/svx/source/dialog/SpellDialogChildWindow.cxx b/svx/source/dialog/SpellDialogChildWindow.cxx index 7f580d8..181cede 100644 --- a/svx/source/dialog/SpellDialogChildWindow.cxx +++ b/svx/source/dialog/SpellDialogChildWindow.cxx @@ -35,10 +35,10 @@ SpellDialogChildWindow::SpellDialogChildWindow ( SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); DBG_ASSERT(pFact, "SvxAbstractDialogFactory::Create() failed"); - m_pAbstractSpellDialog = pFact->CreateSvxSpellDialog(_pParent, + m_xAbstractSpellDialog.reset(pFact->CreateSvxSpellDialog(_pParent, pBindings, - this ); - pWindow = m_pAbstractSpellDialog->GetWindow(); + this )); + pWindow = m_xAbstractSpellDialog->GetWindow(); eChildAlignment = SfxChildAlignment::NOALIGNMENT; SetHideNotDelete(true); } @@ -49,15 +49,15 @@ SpellDialogChildWindow::~SpellDialogChildWindow() SfxBindings& SpellDialogChildWindow::GetBindings() const { - OSL_ASSERT (m_pAbstractSpellDialog != NULL); - return m_pAbstractSpellDialog->GetBindings(); + assert(m_xAbstractSpellDialog); + return m_xAbstractSpellDialog->GetBindings(); } void SpellDialogChildWindow::InvalidateSpellDialog() { - OSL_ASSERT (m_pAbstractSpellDialog != NULL); - if(m_pAbstractSpellDialog) - m_pAbstractSpellDialog->Invalidate(); + OSL_ASSERT (m_xAbstractSpellDialog); + if (m_xAbstractSpellDialog) + m_xAbstractSpellDialog->Invalidate(); } bool SpellDialogChildWindow::HasAutoCorrection() commit 3398b59d2dbdcafc7fd3e7446271c5dc3bd9b3be Author: Caolán McNamara <[email protected]> Date: Tue Jul 7 14:36:42 2015 +0100 AbstractSwWordCountFloatDlg always leaked here Change-Id: Icfff86678f6b9d85c0bc9bc77e450891d388cb2a diff --git a/sw/source/uibase/dialog/wordcountwrapper.cxx b/sw/source/uibase/dialog/wordcountwrapper.cxx index 119a0ea..1654667 100644 --- a/sw/source/uibase/dialog/wordcountwrapper.cxx +++ b/sw/source/uibase/dialog/wordcountwrapper.cxx @@ -23,9 +23,9 @@ SwWordCountWrapper::SwWordCountWrapper( vcl::Window *pParentWindow, { SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create(); assert(pFact && "SwAbstractDialogFactory fail!"); - pAbstDlg = pFact->CreateSwWordCountDialog(pBindings, this, pParentWindow, pInfo); - assert(pAbstDlg && "Dialog construction failed!"); - pWindow = pAbstDlg->GetWindow(); + xAbstDlg.reset(pFact->CreateSwWordCountDialog(pBindings, this, pParentWindow, pInfo)); + assert(xAbstDlg && "Dialog construction failed!"); + pWindow = xAbstDlg->GetWindow(); eChildAlignment = SfxChildAlignment::NOALIGNMENT; } @@ -38,12 +38,12 @@ SfxChildWinInfo SwWordCountWrapper::GetInfo() const void SwWordCountWrapper::UpdateCounts() { - pAbstDlg->UpdateCounts(); + xAbstDlg->UpdateCounts(); } void SwWordCountWrapper::SetCounts(const SwDocStat &rCurrCnt, const SwDocStat &rDocStat) { - pAbstDlg->SetCounts(rCurrCnt, rDocStat); + xAbstDlg->SetCounts(rCurrCnt, rDocStat); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/inc/wordcountdialog.hxx b/sw/source/uibase/inc/wordcountdialog.hxx index d4d9bde..1ac17c1 100644 --- a/sw/source/uibase/inc/wordcountdialog.hxx +++ b/sw/source/uibase/inc/wordcountdialog.hxx @@ -65,7 +65,7 @@ public: class SwWordCountWrapper : public SfxChildWindow { - AbstractSwWordCountFloatDlg* pAbstDlg; + std::unique_ptr<AbstractSwWordCountFloatDlg> xAbstDlg; protected: SwWordCountWrapper( vcl::Window *pParentWindow, sal_uInt16 nId, commit 47c41f4c03db2e876301760415db1e937d00f551 Author: Caolán McNamara <[email protected]> Date: Tue Jul 7 14:16:42 2015 +0100 VclPtr: no dialog loaded from a .ui ever actually destructed Change-Id: I51a0596049a43cbc80f914f3d8491c2125c8109e diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index 40d4614..dba80c0 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -543,6 +543,7 @@ void VclBuilder::disposeBuilder() delete aI->m_pMenu; } m_aMenus.clear(); + m_pParent.clear(); } void VclBuilder::handleTranslations(xmlreader::XmlReader &reader) commit 3c6eec0d99a2bb84bd6719ad498d5de54dc959fe Author: Caolán McNamara <[email protected]> Date: Tue Jul 7 13:47:14 2015 +0100 Related: tdf#92392 clear workwins that point to pWindow before trying to destroy pWindow Change-Id: I7257096e8da2a5d6753ad2091287d63ea9ae244b diff --git a/include/sfx2/childwin.hxx b/include/sfx2/childwin.hxx index cffb5b6..e2a4c52 100644 --- a/include/sfx2/childwin.hxx +++ b/include/sfx2/childwin.hxx @@ -163,6 +163,8 @@ private: GetContext() const { return pContext; } + SAL_DLLPRIVATE void ClearWorkwin(); + protected: SfxChildWindow(vcl::Window *pParentWindow, sal_uInt16 nId); diff --git a/sfx2/source/appl/childwin.cxx b/sfx2/source/appl/childwin.cxx index 3346ac2..3c74643 100644 --- a/sfx2/source/appl/childwin.cxx +++ b/sfx2/source/appl/childwin.cxx @@ -177,12 +177,7 @@ void SfxChildWindow::Destroy() { if ( GetFrame().is() ) { - if (pImp->pWorkWin) - { - if (pImp->pWorkWin->GetActiveChild_Impl() == pWindow) - pImp->pWorkWin->SetActiveChild_Impl(NULL); - pImp->pWorkWin = NULL; - } + ClearWorkwin(); try { ::com::sun::star::uno::Reference < ::com::sun::star::util::XCloseable > xClose( GetFrame(), ::com::sun::star::uno::UNO_QUERY ); @@ -199,11 +194,21 @@ void SfxChildWindow::Destroy() delete this; } +void SfxChildWindow::ClearWorkwin() +{ + if (pImp->pWorkWin) + { + if (pImp->pWorkWin->GetActiveChild_Impl() == pWindow) + pImp->pWorkWin->SetActiveChild_Impl(NULL); + pImp->pWorkWin = NULL; + } +} SfxChildWindow::~SfxChildWindow() { delete pContext; pContext = NULL; + ClearWorkwin(); pWindow.disposeAndClear(); delete pImp; pImp = NULL; commit 8e20a25319e16d2f74e18696480556bc841a1679 Author: Caolán McNamara <[email protected]> Date: Tue Jul 7 13:46:41 2015 +0100 Related: tdf#92392 clear some more vclptrs on dispose Change-Id: I91b8d082ff19328e35e2f1c2a02838d96224dc9c diff --git a/sc/source/ui/miscdlgs/anyrefdg.cxx b/sc/source/ui/miscdlgs/anyrefdg.cxx index 3fcc966..c56cf72 100644 --- a/sc/source/ui/miscdlgs/anyrefdg.cxx +++ b/sc/source/ui/miscdlgs/anyrefdg.cxx @@ -83,6 +83,11 @@ void ScFormulaReferenceHelper::dispose() pInputHdl->ResetDelayTimer(); // stop the timer for disabling the input line pAccel.reset(); + + mpOldEditParent.clear(); + m_pWindow.clear(); + pRefBtn.clear(); + pRefEdit.clear(); } void ScFormulaReferenceHelper::enableInput( bool bEnable ) commit 5f216c82ab5fbab44ab55a5127d0be7d4a2da8e3 Author: Caolán McNamara <[email protected]> Date: Tue Jul 7 16:29:45 2015 +0100 Related: tdf#92392 protect against double dispose from dtor with disposeOnce Change-Id: I40f3bdea784a1abed8f9732a9444cd8d1eccf4a9 diff --git a/sc/source/ui/inc/anyrefdg.hxx b/sc/source/ui/inc/anyrefdg.hxx index c059ea9..8341ba8 100644 --- a/sc/source/ui/inc/anyrefdg.hxx +++ b/sc/source/ui/inc/anyrefdg.hxx @@ -278,7 +278,7 @@ struct ScRefHdlrImpl: ScRefHdlrImplBase< TBase, bBindRef > ~ScRefHdlrImpl() { - dispose(); + TBase::disposeOnce(); } };
_______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
