sw/source/uibase/app/apphdl.cxx | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-)
New commits: commit 71863c6188a5a0bf9dd1c31c8ad9c7b8b9b9001b Author: Noel Grandin <noel.gran...@collabora.co.uk> Date: Fri Feb 3 14:04:18 2017 +0200 tdf#105684 crash in mail merge wizard commit eca5ea9f79181d45cd7fbabe2313617d3025818a "make the AbstractDialog stuff extend from VclReferenceBase" introduced this regression. Fix up the asynchronous delete to work again - necessary because the delete is triggered from deep inside the object it wants to delete. Change-Id: I18d5a899fbb2da772552ebba7fe6a8e810314010 Reviewed-on: https://gerrit.libreoffice.org/33881 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/sw/source/uibase/app/apphdl.cxx b/sw/source/uibase/app/apphdl.cxx index eaaabf9..4c791be 100644 --- a/sw/source/uibase/app/apphdl.cxx +++ b/sw/source/uibase/app/apphdl.cxx @@ -359,11 +359,13 @@ class SwMailMergeWizardExecutor : public salhelper::SimpleReferenceObject SwView* m_pView; // never owner SwView* m_pView2Close; // never owner VclPtr<AbstractMailMergeWizard> m_pWizard; // always owner + VclPtr<AbstractMailMergeWizard> m_pWizardToDestroyInCallback; + bool m_bDestroyMMToolbarOnCancel; DECL_LINK( EndDialogHdl, Dialog&, void ); DECL_LINK( DestroyDialogHdl, void*, void ); - DECL_STATIC_LINK( SwMailMergeWizardExecutor, DestroyWizardHdl, void*, void ); + DECL_LINK( DestroyWizardHdl, void*, void ); DECL_LINK( CancelHdl, void*, void ); DECL_LINK( CloseFrameHdl, void*, void ); @@ -496,9 +498,11 @@ IMPL_LINK_NOARG( SwMailMergeWizardExecutor, EndDialogHdl, Dialog&, void ) { SwView* pNewView = lcl_LoadDoc(m_pView, m_pWizard->GetReloadDocument()); - // destroy wizard asynchronously + // Destroy wizard asynchronously, since we are deep inside the wizard and dialog + // machinery code here + m_pWizardToDestroyInCallback = m_pWizard; Application::PostUserEvent( - LINK( this, SwMailMergeWizardExecutor, DestroyWizardHdl ), m_pWizard ); + LINK( this, SwMailMergeWizardExecutor, DestroyWizardHdl ), nullptr ); SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create(); std::shared_ptr<SwMailMergeConfigItem> xMMConfig = m_pView->GetMailMergeConfigItem(); @@ -528,8 +532,9 @@ IMPL_LINK_NOARG( SwMailMergeWizardExecutor, EndDialogHdl, Dialog&, void ) if(pTargetView) { // destroy wizard asynchronously + m_pWizardToDestroyInCallback = m_pWizard; Application::PostUserEvent( - LINK( this, SwMailMergeWizardExecutor, DestroyWizardHdl ), m_pWizard ); + LINK( this, SwMailMergeWizardExecutor, DestroyWizardHdl ), nullptr ); SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create(); m_pWizard = pFact->CreateMailMergeWizard(*pTargetView, xMMConfig); @@ -607,10 +612,9 @@ IMPL_LINK_NOARG(SwMailMergeWizardExecutor, DestroyDialogHdl, void*, void) release(); } -IMPL_STATIC_LINK(SwMailMergeWizardExecutor, DestroyWizardHdl, void*, pDialog, void ) +IMPL_LINK_NOARG(SwMailMergeWizardExecutor, DestroyWizardHdl, void*, void) { - VclPtr<AbstractMailMergeWizard> p = static_cast<AbstractMailMergeWizard*>(pDialog); - p.disposeAndClear(); + m_pWizardToDestroyInCallback.disposeAndClear(); } IMPL_LINK_NOARG(SwMailMergeWizardExecutor, CancelHdl, void*, void) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits