summaryrefslogtreecommitdiff
path: root/svx
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2017-01-16 13:53:00 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2017-01-17 11:36:59 +0000
commit4bde081f7ebaf3d6e489a50b287f82ccb14de224 (patch)
tree5551f3ff0532344a761033a29b1887f21bf05711 /svx
parentf3217ade046a723ae7ff9c729ca6691f19581ebb (diff)
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 (cherry picked from commit cd9d8315141c3070f43e145ed4ee390e837eb73f) Reviewed-on: https://gerrit.libreoffice.org/33209 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'svx')
-rw-r--r--svx/source/gallery2/galbrws1.cxx28
-rw-r--r--svx/source/gallery2/galbrws1.hxx3
2 files changed, 16 insertions, 15 deletions
diff --git a/svx/source/gallery2/galbrws1.cxx b/svx/source/gallery2/galbrws1.cxx
index dbd09be8f738..3967fc4eaa8c 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 999d8a6cea76..47118f3e0a14 100644
--- a/svx/source/gallery2/galbrws1.hxx
+++ b/svx/source/gallery2/galbrws1.hxx
@@ -77,8 +77,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;