include/svx/galmisc.hxx | 3 ++- svx/source/gallery2/galbrws1.cxx | 37 +++++++++++++++++++++++-------------- svx/source/gallery2/galtheme.cxx | 3 ++- 3 files changed, 27 insertions(+), 16 deletions(-)
New commits: commit f8eb5d8503adb589239788f649f93d0ef51c2a47 Author: Oliver Specht <oliver.spe...@cib.de> AuthorDate: Tue May 20 17:23:08 2025 +0200 Commit: Oliver Specht <oliver.spe...@cib.de> CommitDate: Thu May 22 07:53:33 2025 +0200 tdf#164202 Update gallery data on insert/remove Fixes crashes introduced with 09c6204b6309321aa25c542f918fde9f5f3f7fe2 Change-Id: Ifca32646c8ba5abce647934e1d2ddac8a8eba2ed Reviewed-on: https://gerrit.libreoffice.org/c/core/+/185584 Tested-by: Jenkins Reviewed-by: Oliver Specht <oliver.spe...@cib.de> diff --git a/include/svx/galmisc.hxx b/include/svx/galmisc.hxx index 9a9eaa1116c6..6e7c5b851d89 100644 --- a/include/svx/galmisc.hxx +++ b/include/svx/galmisc.hxx @@ -165,7 +165,8 @@ enum class GalleryHintType THEME_RENAMED, THEME_CREATED, THEME_UPDATEVIEW, - CLOSE_OBJECT + CLOSE_OBJECT, + ADD_OBJECT }; class GalleryHint final : public SfxHint diff --git a/svx/source/gallery2/galbrws1.cxx b/svx/source/gallery2/galbrws1.cxx index 2346410b3085..537fe88ae16b 100644 --- a/svx/source/gallery2/galbrws1.cxx +++ b/svx/source/gallery2/galbrws1.cxx @@ -490,6 +490,13 @@ void GalleryBrowser1::Notify( SfxBroadcaster&, const SfxHint& rHint ) ImplUpdateViews( reinterpret_cast<size_t>(rGalleryHint.GetData1()) + 1 ); } break; + case GalleryHintType::ADD_OBJECT: + case GalleryHintType::CLOSE_OBJECT: + { + FillThemeEntries(); + ImplUpdateViews(0); + } + break; default: break; @@ -1500,26 +1507,28 @@ IMPL_LINK(GalleryBrowser1, SelectTbxHdl, weld::Toggleable&, rBox, void) void GalleryBrowser1::FillThemeEntries() { - for (size_t i = 0, nCount = mpGallery->GetThemeCount(); i < nCount; ++i) + maFoundThemeEntries.clear(); + maAllThemeEntries.clear(); + 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(); + if (GalleryTheme* pTheme = mpGallery->AcquireTheme(aThemeName, maLocalListener)) { - const GalleryThemeEntry* pThemeInfo = mpGallery->GetThemeInfo( i ); - OUString aThemeName = pThemeInfo->GetThemeName(); - //sal_uInt32 nId = pThemeInfo->GetId(); - if (GalleryTheme* pTheme = mpGallery->AcquireTheme(aThemeName, maLocalListener)) + sal_uInt32 nObjectCount = pTheme->GetObjectCount(); + for (size_t nObject = 0; nObject < nObjectCount; ++nObject) { - sal_uInt32 nObjectCount = pTheme->GetObjectCount(); - for (size_t nObject = 0; nObject < nObjectCount; ++nObject) + if (std::unique_ptr<SgaObject> xSgaObject = pTheme->AcquireObject(nObject)) { - if (std::unique_ptr<SgaObject> xSgaObject = pTheme->AcquireObject(nObject)) - { - OUString aTitle = GetItemText(*xSgaObject, GalleryItemFlags::Title); - maAllThemeEntries.push_back(ThemeEntry(aThemeName, aTitle, nObject)); - } + OUString aTitle = GetItemText(*xSgaObject, GalleryItemFlags::Title); + maAllThemeEntries.push_back(ThemeEntry(aThemeName, aTitle, nObject)); } - mpGallery->ReleaseTheme(pTheme, maLocalListener); } + mpGallery->ReleaseTheme(pTheme, maLocalListener); } - maFoundThemeEntries.assign(maAllThemeEntries.begin(), maAllThemeEntries.end()); + } + maFoundThemeEntries.assign(maAllThemeEntries.begin(), maAllThemeEntries.end()); } IMPL_LINK(GalleryBrowser1, SearchHdl, weld::Entry&, searchEdit, void) { diff --git a/svx/source/gallery2/galtheme.cxx b/svx/source/gallery2/galtheme.cxx index f2d7854d3aa7..846267a15e20 100644 --- a/svx/source/gallery2/galtheme.cxx +++ b/svx/source/gallery2/galtheme.cxx @@ -134,7 +134,8 @@ bool GalleryTheme::InsertObject(const SgaObject& rObj, sal_uInt32 nInsertPos) mpGalleryStorageEngine->insertObject(rObj, pFoundEntry, nInsertPos); ImplSetModified(true); - ImplBroadcast(pFoundEntry? iFoundPos: nInsertPos); + Broadcast( GalleryHint( GalleryHintType::ADD_OBJECT, GetName(), + reinterpret_cast<void*>(static_cast<sal_uIntPtr>(pFoundEntry? iFoundPos: nInsertPos)) ) ); return true; }