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 4af36e1f0e1363bb8adb01735dfa21a9223158ed Author: Oliver Specht <oliver.spe...@cib.de> AuthorDate: Tue May 20 17:23:08 2025 +0200 Commit: Thorsten Behrens <thorsten.behr...@collabora.com> CommitDate: Tue Jul 1 22:56:50 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/+/185616 Tested-by: Thorsten Behrens <thorsten.behr...@collabora.com> Reviewed-by: Thorsten Behrens <thorsten.behr...@collabora.com> diff --git a/include/svx/galmisc.hxx b/include/svx/galmisc.hxx index 33a4425b03e7..ca801c259c8b 100644 --- a/include/svx/galmisc.hxx +++ b/include/svx/galmisc.hxx @@ -168,7 +168,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 a73060a50f01..9e5324bb246d 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 9e23f59b5d5f..6b77f3bbe91f 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; }