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;
 }

Reply via email to