include/ucbhelper/interactionrequest.hxx | 4 --- svx/source/gallery2/galbrws1.cxx | 28 +++++++++++------------ svx/source/gallery2/galbrws1.hxx | 3 +- ucbhelper/source/provider/interactionrequest.cxx | 17 +------------ vcl/source/window/dialog.cxx | 2 - 5 files changed, 20 insertions(+), 34 deletions(-)
New commits: commit cd9d8315141c3070f43e145ed4ee390e837eb73f Author: Noel Grandin <[email protected]> Date: Mon Jan 16 13:53:00 2017 +0200 tdf#105017 Crash when click a "New Theme..." in Gallery on detached SideBar caused by VclPtr fixes which meant instead of the dialog staying in an always-zero ref-count state, it went up to a ref-count of 1, then down to zero, which triggered a delete before the dialog had finished displaying. And revert my fix in commit 0c1cd678f71e519f5a4e623d93442e046485005a which just worked around the underlying problem Change-Id: Icb35535dd06a2d1db1016d00d106760847d87430 diff --git a/svx/source/gallery2/galbrws1.cxx b/svx/source/gallery2/galbrws1.cxx index c995723..7201c6e 100644 --- a/svx/source/gallery2/galbrws1.cxx +++ b/svx/source/gallery2/galbrws1.cxx @@ -148,6 +148,7 @@ GalleryBrowser1::~GalleryBrowser1() void GalleryBrowser1::dispose() { EndListening( *mpGallery ); + mpThemePropertiesDialog.clear(); mpThemes.disposeAndClear(); delete mpExchangeData; mpExchangeData = nullptr; @@ -265,24 +266,24 @@ void GalleryBrowser1::ImplGalleryThemeProperties( const OUString & rThemeName, b SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); assert(pFact && "Got no AbstractDialogFactory!"); - VclPtr<VclAbstractDialog2> pThemeProps = pFact->CreateGalleryThemePropertiesDialog( mpExchangeData, mpThemePropsDlgItemSet ); - assert(pThemeProps && "Got no GalleryThemePropertiesDialog!"); + mpThemePropertiesDialog = pFact->CreateGalleryThemePropertiesDialog( mpExchangeData, mpThemePropsDlgItemSet ); + assert(mpThemePropertiesDialog && "Got no GalleryThemePropertiesDialog!"); if ( bCreateNew ) { - pThemeProps->StartExecuteModal( + mpThemePropertiesDialog->StartExecuteModal( LINK( this, GalleryBrowser1, EndNewThemePropertiesDlgHdl ) ); } else { - pThemeProps->StartExecuteModal( + mpThemePropertiesDialog->StartExecuteModal( LINK( this, GalleryBrowser1, EndThemePropertiesDlgHdl ) ); } } -void GalleryBrowser1::ImplEndGalleryThemeProperties(Dialog* pDialog, bool bCreateNew) +void GalleryBrowser1::ImplEndGalleryThemeProperties(Dialog* /*pDialog*/, bool bCreateNew) { - long nRet = pDialog->GetResult(); + long nRet = mpThemePropertiesDialog->GetResult(); if( nRet == RET_OK ) { @@ -319,23 +320,22 @@ void GalleryBrowser1::ImplEndGalleryThemeProperties(Dialog* pDialog, bool bCreat } // destroy mpThemeProps asynchronously - Application::PostUserEvent( LINK( this, GalleryBrowser1, DestroyThemePropertiesDlgHdl ), pDialog, true ); + Application::PostUserEvent( LINK( this, GalleryBrowser1, DestroyThemePropertiesDlgHdl ), nullptr, true ); } -IMPL_LINK( GalleryBrowser1, EndNewThemePropertiesDlgHdl, Dialog&, rDialog, void ) +IMPL_LINK( GalleryBrowser1, EndNewThemePropertiesDlgHdl, Dialog&, /*rDialog*/, void ) { - ImplEndGalleryThemeProperties(&rDialog, true); + ImplEndGalleryThemeProperties(nullptr, true); } -IMPL_LINK( GalleryBrowser1, EndThemePropertiesDlgHdl, Dialog&, rDialog, void ) +IMPL_LINK( GalleryBrowser1, EndThemePropertiesDlgHdl, Dialog&, /*rDialog*/, void ) { - ImplEndGalleryThemeProperties(&rDialog, false); + ImplEndGalleryThemeProperties(nullptr, false); } -IMPL_LINK( GalleryBrowser1, DestroyThemePropertiesDlgHdl, void*, p, void ) +IMPL_LINK( GalleryBrowser1, DestroyThemePropertiesDlgHdl, void*, /*p*/, void ) { - VclPtr<VclAbstractDialog2> pDialog = static_cast<VclAbstractDialog2*>(p); - pDialog.disposeAndClear(); + mpThemePropertiesDialog.disposeAndClear(); delete mpThemePropsDlgItemSet; mpThemePropsDlgItemSet = nullptr; } diff --git a/svx/source/gallery2/galbrws1.hxx b/svx/source/gallery2/galbrws1.hxx index 896fca1..294623c 100644 --- a/svx/source/gallery2/galbrws1.hxx +++ b/svx/source/gallery2/galbrws1.hxx @@ -76,8 +76,9 @@ class GalleryBrowser1 : public Control, public SfxListener private: - VclPtr<GalleryButton> maNewTheme; + VclPtr<GalleryButton> maNewTheme; VclPtr<GalleryThemeListBox> mpThemes; + VclPtr<VclAbstractDialog2> mpThemePropertiesDialog; // to keep it alive during execution Gallery* mpGallery; ExchangeData* mpExchangeData; SfxItemSet* mpThemePropsDlgItemSet; diff --git a/vcl/source/window/dialog.cxx b/vcl/source/window/dialog.cxx index e17b66b..4e0fd97 100644 --- a/vcl/source/window/dialog.cxx +++ b/vcl/source/window/dialog.cxx @@ -1037,7 +1037,7 @@ void Dialog::SetModalInputMode( bool bModal ) // Disable the prev Modal Dialog, because our dialog must close at first, // before the other dialog can be closed (because the other dialog // is on stack since our dialog returns) - if ( mpPrevExecuteDlg && !mpPrevExecuteDlg->isDisposed() && !mpPrevExecuteDlg->IsWindowOrChild( this, true ) ) + if ( mpPrevExecuteDlg && !mpPrevExecuteDlg->IsWindowOrChild( this, true ) ) mpPrevExecuteDlg->EnableInput( false, this ); // determine next overlap dialog parent commit 26b0e86405b27a0342a5b42f82a944559f3a1358 Author: Noel Grandin <[email protected]> Date: Mon Jan 16 11:12:59 2017 +0200 inline InteractionContinuation_Impl since it only contains one field, and does nothing special with it Change-Id: Ie1c099a4507a6b99af28be5852793ccaa557aa72 diff --git a/include/ucbhelper/interactionrequest.hxx b/include/ucbhelper/interactionrequest.hxx index 4bf10bc..f0d3fec 100644 --- a/include/ucbhelper/interactionrequest.hxx +++ b/include/ucbhelper/interactionrequest.hxx @@ -139,8 +139,6 @@ public: }; -struct InteractionContinuation_Impl; - /** * This class is the base for implementations of the interface * XInteractionContinuation. Classes derived from this bas class work together @@ -152,7 +150,7 @@ struct InteractionContinuation_Impl; */ class UCBHELPER_DLLPUBLIC InteractionContinuation : public cppu::OWeakObject { - std::unique_ptr<InteractionContinuation_Impl> m_pImpl; + InteractionRequest* m_pRequest; protected: /** diff --git a/ucbhelper/source/provider/interactionrequest.cxx b/ucbhelper/source/provider/interactionrequest.cxx index 52bc3b4..c8d0858b 100644 --- a/ucbhelper/source/provider/interactionrequest.cxx +++ b/ucbhelper/source/provider/interactionrequest.cxx @@ -187,23 +187,10 @@ InteractionRequest::getContinuations() // InteractionContinuation Implementation. -namespace ucbhelper -{ - -struct InteractionContinuation_Impl -{ - InteractionRequest * m_pRequest; - - explicit InteractionContinuation_Impl( InteractionRequest * pRequest ) - : m_pRequest( pRequest ) {} -}; - -} - InteractionContinuation::InteractionContinuation( InteractionRequest * pRequest ) -: m_pImpl( new InteractionContinuation_Impl( pRequest ) ) +: m_pRequest( pRequest ) { } @@ -216,7 +203,7 @@ InteractionContinuation::~InteractionContinuation() void InteractionContinuation::recordSelection() { - m_pImpl->m_pRequest->setSelection( this ); + m_pRequest->setSelection( this ); } _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
