svx/source/gallery2/galbrws1.cxx | 25 ++++++++++++------------- svx/source/inc/galbrws1.hxx | 1 + 2 files changed, 13 insertions(+), 13 deletions(-)
New commits: commit 203b6a00cf5b716cb580d2bd4e9a6071cec23574 Author: Oliver Specht <oliver.spe...@cib.de> AuthorDate: Tue Mar 19 13:16:07 2024 +0100 Commit: Gabor Kelemen <gabor.kelemen.ext...@allotropia.de> CommitDate: Mon Mar 25 16:59:06 2024 +0100 tdf#160264 Fixed crash in gallery Local gallery themes need an additional listener to prevent deleting the global theme. Change-Id: If6cfcb5a3eeffdc087b089f2151c45b2cff87bbd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165029 Tested-by: Jenkins Tested-by: Gabor Kelemen <gabor.kelemen.ext...@allotropia.de> Reviewed-by: Gabor Kelemen <gabor.kelemen.ext...@allotropia.de> diff --git a/svx/source/gallery2/galbrws1.cxx b/svx/source/gallery2/galbrws1.cxx index c68c2d8ba83e..443d9be4adec 100644 --- a/svx/source/gallery2/galbrws1.cxx +++ b/svx/source/gallery2/galbrws1.cxx @@ -256,7 +256,7 @@ void GalleryBrowser1::ImplFillExchangeData( const GalleryTheme* pThm, ExchangeDa void GalleryBrowser1::ImplGetExecuteVector(std::vector<OUString>& o_aExec) { - GalleryTheme* pTheme = mpGallery->AcquireTheme( GetSelectedTheme(), *this ); + GalleryTheme* pTheme = mpGallery->AcquireTheme( GetSelectedTheme(), maLocalListner ); if( !pTheme ) return; @@ -288,14 +288,14 @@ void GalleryBrowser1::ImplGetExecuteVector(std::vector<OUString>& o_aExec) o_aExec.emplace_back("properties"); - mpGallery->ReleaseTheme( pTheme, *this ); + mpGallery->ReleaseTheme( pTheme, maLocalListner ); } void GalleryBrowser1::ImplGalleryThemeProperties( std::u16string_view rThemeName, bool bCreateNew ) { DBG_ASSERT(!mpThemePropsDlgItemSet, "mpThemePropsDlgItemSet already set!"); mpThemePropsDlgItemSet.reset(new SfxItemSet( SfxGetpApp()->GetPool() )); - GalleryTheme* pTheme = mpGallery->AcquireTheme( rThemeName, *this ); + GalleryTheme* pTheme = mpGallery->AcquireTheme( rThemeName, maLocalListner ); ImplFillExchangeData( pTheme, *mpExchangeData ); @@ -345,7 +345,7 @@ void GalleryBrowser1::ImplEndGalleryThemeProperties(bool bCreateNew, sal_Int32 n } OUString aThemeName( mpExchangeData->pTheme->GetName() ); - mpGallery->ReleaseTheme( mpExchangeData->pTheme, *this ); + mpGallery->ReleaseTheme( mpExchangeData->pTheme, maLocalListner ); if ( bCreateNew && ( nRet != RET_OK ) ) { @@ -367,13 +367,13 @@ void GalleryBrowser1::ImplExecute(std::u16string_view rIdent) { if (rIdent == u"update") { - GalleryTheme* pTheme = mpGallery->AcquireTheme( GetSelectedTheme(), *this ); + GalleryTheme* pTheme = mpGallery->AcquireTheme( GetSelectedTheme(), maLocalListner ); SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); ScopedVclPtr<VclAbstractDialog> aActualizeProgress(pFact->CreateActualizeProgressDialog(mxThemes.get(), pTheme)); aActualizeProgress->Execute(); - mpGallery->ReleaseTheme( pTheme, *this ); + mpGallery->ReleaseTheme( pTheme, maLocalListner ); } else if (rIdent == u"delete") { @@ -384,7 +384,7 @@ void GalleryBrowser1::ImplExecute(std::u16string_view rIdent) } else if (rIdent == u"rename") { - GalleryTheme* pTheme = mpGallery->AcquireTheme( GetSelectedTheme(), *this ); + GalleryTheme* pTheme = mpGallery->AcquireTheme( GetSelectedTheme(), maLocalListner ); const OUString aOldName( pTheme->GetName() ); SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); @@ -407,11 +407,11 @@ void GalleryBrowser1::ImplExecute(std::u16string_view rIdent) mpGallery->RenameTheme( aOldName, aName ); } } - mpGallery->ReleaseTheme( pTheme, *this ); + mpGallery->ReleaseTheme( pTheme, maLocalListner ); } else if (rIdent == u"assign") { - GalleryTheme* pTheme = mpGallery->AcquireTheme( GetSelectedTheme(), *this ); + GalleryTheme* pTheme = mpGallery->AcquireTheme( GetSelectedTheme(), maLocalListner ); if (pTheme && !pTheme->IsReadOnly()) { @@ -422,7 +422,7 @@ void GalleryBrowser1::ImplExecute(std::u16string_view rIdent) pTheme->SetId( aDlg->GetId(), true ); } - mpGallery->ReleaseTheme( pTheme, *this ); + mpGallery->ReleaseTheme( pTheme, maLocalListner ); } else if (rIdent == u"properties") { @@ -1500,13 +1500,12 @@ IMPL_LINK(GalleryBrowser1, SelectTbxHdl, weld::Toggleable&, rBox, void) void GalleryBrowser1::FillThemeEntries() { - SfxListener aListener; for (size_t i = 0, nCount = mpGallery->GetThemeCount(); i < nCount; ++i) { const GalleryThemeEntry* pThemeInfo = mpGallery->GetThemeInfo( i ); OUString aThemeName = pThemeInfo->GetThemeName(); //sal_uInt32 nId = pThemeInfo->GetId(); - GalleryTheme* pTheme = mpGallery->AcquireTheme(aThemeName, aListener); + GalleryTheme* pTheme = mpGallery->AcquireTheme(aThemeName, maLocalListner); sal_uInt32 nObjectCount = pTheme->GetObjectCount(); for (size_t nObject = 0; nObject < nObjectCount; ++nObject) { @@ -1514,7 +1513,7 @@ void GalleryBrowser1::FillThemeEntries() OUString aTitle = GetItemText(*xSgaObject, GalleryItemFlags::Title); maAllThemeEntries.push_back(ThemeEntry(aThemeName, aTitle, nObject)); } - mpGallery->ReleaseTheme(pTheme, aListener); + mpGallery->ReleaseTheme(pTheme, maLocalListner); } maFoundThemeEntries.assign(maAllThemeEntries.begin(), maAllThemeEntries.end()); } diff --git a/svx/source/inc/galbrws1.hxx b/svx/source/inc/galbrws1.hxx index 5f9988b9148c..50cffa1ddd7b 100644 --- a/svx/source/inc/galbrws1.hxx +++ b/svx/source/inc/galbrws1.hxx @@ -135,6 +135,7 @@ private: css::uno::Reference<css::util::XURLTransformer> m_xTransformer; CharClass m_aCharacterClassficator; + SfxListener maLocalListner; void ImplInsertThemeEntry(const GalleryThemeEntry* pEntry); static void ImplFillExchangeData(const GalleryTheme* pThm, ExchangeData& rData);