cui/source/inc/cuitabarea.hxx     |   30 ++++++------------
 cui/source/tabpages/tabarea.cxx   |   61 --------------------------------------
 cui/source/tabpages/tparea.cxx    |   23 +++++++++-----
 cui/source/tabpages/tpbitmap.cxx  |   21 ++++++++++---
 cui/source/tabpages/tpgradnt.cxx  |   24 +++++++++++---
 cui/source/tabpages/tphatch.cxx   |   23 +++++++++++---
 cui/source/tabpages/tppattern.cxx |   24 +++++++++++---
 7 files changed, 99 insertions(+), 107 deletions(-)
New commits:
commit 6595fcacfa9afb5f09465785aa0c4af46e972ef0
Author:     Justin Luth <justin.l...@collabora.com>
AuthorDate: Sat Nov 9 15:21:10 2024 -0500
Commit:     Miklos Vajna <vmik...@collabora.com>
CommitDate: Wed Nov 13 09:25:46 2024 +0100

    tdf#103916 tdf#163824 cui tparea: always save changed Fill Lists
    
    This was only working for some EditEng components.
    This change makes it work for all uses of Area Fill.
    
    I put this in the destructor because the current implementation
    (for SvxAreaTabDialog) SavePalettes() on both OK and CANCEL.
    
    I first tried putting it in DeactivatePage,
    but that is not called on a CANCEL,
    or on a switch to another AREA type.
    
    [ColorListState doesn't need this treatment
    since we don't save to disk here,
    plus it needs to be shared between SvxAreaTabDialog pages.]
    
    NOTE: the rename/delete fix for bug 157467 is probably a dependency
    because this patch will significantly increase the likelihood
    that people will try to manage these lists.
    
    Change-Id: I65a84eb6befe91620fd43f3cec2d3ce4dd7ae92d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/176325
    Tested-by: Jenkins
    Reviewed-by: Justin Luth <jl...@mail.com>

diff --git a/cui/source/inc/cuitabarea.hxx b/cui/source/inc/cuitabarea.hxx
index f0f5bdc28a5b..7021a7aa7847 100644
--- a/cui/source/inc/cuitabarea.hxx
+++ b/cui/source/inc/cuitabarea.hxx
@@ -87,6 +87,12 @@ enum class PageType
     Transparence,
 };
 
+class AreaTabHelper
+{
+public:
+    static OUString GetPalettePath();
+};
+
 class SvxAreaTabDialog final : public SfxTabDialogController
 {
     SdrModel*           mpDrawModel;
@@ -103,10 +109,6 @@ class SvxAreaTabDialog final : public 
SfxTabDialogController
     XPatternListRef       mpNewPatternList;
 
     ChangeType          mnColorListState;
-    ChangeType          mnBitmapListState;
-    ChangeType          mnPatternListState;
-    ChangeType          mnGradientListState;
-    ChangeType          mnHatchingListState;
 
     virtual void        PageCreated(const OUString& rId, SfxTabPage &rPage) 
override;
 
@@ -230,10 +232,6 @@ private:
     ChangeType          maFixed_ChangeType;
 
     ChangeType*         m_pnColorListState;
-    ChangeType*         m_pnBitmapListState;
-    ChangeType*         m_pnPatternListState;
-    ChangeType*         m_pnGradientListState;
-    ChangeType*         m_pnHatchingListState;
 
     XFillAttrSetItem    m_aXFillAttr;
     SfxItemSet&         m_rXFSet;
@@ -294,10 +292,6 @@ public:
     virtual void PageCreated(const SfxAllItemSet& aSet) override;
     void    CreatePage(sal_Int32 nId, SfxTabPage& rTab);
     void    SetColorChgd( ChangeType* pIn ) { m_pnColorListState = pIn; }
-    void    SetGrdChgd( ChangeType* pIn ) { m_pnGradientListState = pIn; }
-    void    SetHtchChgd( ChangeType* pIn ) { m_pnHatchingListState = pIn; }
-    void    SetBmpChgd( ChangeType* pIn ) { m_pnBitmapListState = pIn; }
-    void    SetPtrnChgd( ChangeType* pIn ) { m_pnPatternListState = pIn; }
 };
 
 
@@ -362,7 +356,7 @@ private:
     XColorListRef         m_pColorList;
     XGradientListRef      m_pGradientList;
 
-    ChangeType*         m_pnGradientListState;
+    ChangeType m_nGradientListState;
     ChangeType*         m_pnColorListState;
 
     XFillAttrSetItem    m_aXFillAttr;
@@ -429,7 +423,6 @@ public:
     void    SetColorList( XColorListRef const & pColorList ) { m_pColorList = 
pColorList; }
     void    SetGradientList( XGradientListRef const & pGrdLst)
                 { m_pGradientList = pGrdLst; }
-    void    SetGrdChgd( ChangeType* pIn ) { m_pnGradientListState = pIn; }
     void    SetColorChgd( ChangeType* pIn ) { m_pnColorListState = pIn; }
 };
 
@@ -443,7 +436,7 @@ private:
     XColorListRef         m_pColorList;
     XHatchListRef         m_pHatchingList;
 
-    ChangeType*         m_pnHatchingListState;
+    ChangeType m_nHatchingListState;
     ChangeType*         m_pnColorListState;
 
     XFillAttrSetItem    m_aXFillAttr;
@@ -498,7 +491,6 @@ public:
     void    SetHatchingList( XHatchListRef const & pHtchLst)
                 { m_pHatchingList = pHtchLst; }
 
-    void    SetHtchChgd( ChangeType* pIn ) { m_pnHatchingListState = pIn; }
     void    SetColorChgd( ChangeType* pIn ) { m_pnColorListState = pIn; }
 };
 
@@ -511,7 +503,7 @@ private:
     const SfxItemSet&          m_rOutAttrs;
 
     XBitmapListRef             m_pBitmapList;
-    ChangeType*                m_pnBitmapListState;
+    ChangeType m_nBitmapListState;
 
     double                     m_fObjectWidth;
     double                     m_fObjectHeight;
@@ -574,7 +566,6 @@ public:
     virtual DeactivateRC DeactivatePage( SfxItemSet* pSet ) override;
 
     void    SetBitmapList( const XBitmapListRef& pBmpLst) { m_pBitmapList = 
pBmpLst; }
-    void    SetBmpChgd( ChangeType* pIn ) { m_pnBitmapListState = pIn; }
 };
 
 /************************************************************************/
@@ -587,7 +578,7 @@ private:
     XColorListRef         m_pColorList;
     XPatternListRef       m_pPatternList;
 
-    ChangeType*         m_pnPatternListState;
+    ChangeType m_nPatternListState;
     ChangeType*         m_pnColorListState;
 
     XFillAttrSetItem    m_aXFillAttr;
@@ -631,7 +622,6 @@ public:
 
     void    SetColorList( XColorListRef const & pColorList ) { m_pColorList = 
pColorList; }
     void    SetPatternList( XPatternListRef const & pPatternList) { 
m_pPatternList = pPatternList; }
-    void    SetPtrnChgd( ChangeType* pIn ) { m_pnPatternListState = pIn; }
     void    SetColorChgd( ChangeType* pIn ) { m_pnColorListState = pIn; }
     void    ChangeColor_Impl();
 };
diff --git a/cui/source/tabpages/tabarea.cxx b/cui/source/tabpages/tabarea.cxx
index 498afe81fdc5..6a42f8328b72 100644
--- a/cui/source/tabpages/tabarea.cxx
+++ b/cui/source/tabpages/tabarea.cxx
@@ -46,12 +46,7 @@ SvxAreaTabDialog::SvxAreaTabDialog
     mpNewBitmapList      ( pModel->GetBitmapList() ),
     mpPatternList        ( pModel->GetPatternList() ),
     mpNewPatternList     ( pModel->GetPatternList() ),
-
-    mnColorListState ( ChangeType::NONE ),
-    mnBitmapListState ( ChangeType::NONE ),
-    mnPatternListState ( ChangeType::NONE ),
-    mnGradientListState ( ChangeType::NONE ),
-    mnHatchingListState ( ChangeType::NONE )
+    mnColorListState(ChangeType::NONE)
 {
     if (bSlideBackground)
         AddTabPage(u"RID_SVXPAGE_AREA"_ustr, 
SvxAreaTabPage::CreateWithSlideBackground, nullptr);
@@ -119,56 +114,6 @@ void SvxAreaTabDialog::SavePalettes()
     }
 
     // save the tables when they have been changed
-
-    OUString aPalettePath(SvtPathOptions().GetPalettePath());
-    OUString aPath;
-    sal_Int32 nIndex = 0;
-    do
-    {
-        aPath = aPalettePath.getToken(0, ';', nIndex);
-    }
-    while (nIndex >= 0);
-
-    if( mnHatchingListState & ChangeType::MODIFIED )
-    {
-        mpHatchingList->SetPath( aPath );
-        mpHatchingList->Save();
-
-        SvxHatchListItem aItem( mpHatchingList, SID_HATCH_LIST );
-        // ToolBoxControls are informed:
-        pShell->PutItem( aItem );
-    }
-
-    if( mnBitmapListState & ChangeType::MODIFIED )
-    {
-        mpBitmapList->SetPath( aPath );
-        mpBitmapList->Save();
-
-        SvxBitmapListItem aItem( mpBitmapList, SID_BITMAP_LIST );
-        // ToolBoxControls are informed:
-        pShell->PutItem( aItem );
-    }
-
-    if( mnPatternListState & ChangeType::MODIFIED )
-    {
-        mpPatternList->SetPath( aPath );
-        mpPatternList->Save();
-
-        SvxPatternListItem aItem( mpPatternList, SID_PATTERN_LIST );
-        // ToolBoxControls are informed:
-        pShell->PutItem( aItem );
-    }
-
-    if( mnGradientListState & ChangeType::MODIFIED )
-    {
-        mpGradientList->SetPath( aPath );
-        mpGradientList->Save();
-
-        SvxGradientListItem aItem( mpGradientList, SID_GRADIENT_LIST );
-        // ToolBoxControls are informed:
-        pShell->PutItem( aItem );
-    }
-
     if (mnColorListState & ChangeType::MODIFIED && mpColorList.is())
     {
         SvxColorListItem aItem( mpColorList, SID_COLOR_TABLE );
@@ -201,10 +146,6 @@ void SvxAreaTabDialog::PageCreated(const OUString& rId, 
SfxTabPage &rPage)
         static_cast<SvxAreaTabPage&>(rPage).SetHatchingList( mpHatchingList );
         static_cast<SvxAreaTabPage&>(rPage).SetBitmapList( mpBitmapList );
         static_cast<SvxAreaTabPage&>(rPage).SetPatternList( mpPatternList );
-        static_cast<SvxAreaTabPage&>(rPage).SetGrdChgd( &mnGradientListState );
-        static_cast<SvxAreaTabPage&>(rPage).SetHtchChgd( &mnHatchingListState 
);
-        static_cast<SvxAreaTabPage&>(rPage).SetBmpChgd( &mnBitmapListState );
-        static_cast<SvxAreaTabPage&>(rPage).SetPtrnChgd( &mnPatternListState );
         static_cast<SvxAreaTabPage&>(rPage).SetColorChgd( &mnColorListState );
     }
     else if (rId == "RID_SVXPAGE_SHADOW")
diff --git a/cui/source/tabpages/tparea.cxx b/cui/source/tabpages/tparea.cxx
index efd8dfacce78..068d08283f70 100644
--- a/cui/source/tabpages/tparea.cxx
+++ b/cui/source/tabpages/tparea.cxx
@@ -29,6 +29,7 @@
 #include <svx/xgrscit.hxx>
 #include <cuitabarea.hxx>
 #include <sfx2/tabdlg.hxx>
+#include <unotools/pathoptions.hxx>
 
 using namespace com::sun::star;
 
@@ -67,6 +68,20 @@ void lclExtendSize(Size& rSize, const Size& rInputSize)
 
 } // end anonymous namespace
 
+OUString AreaTabHelper::GetPalettePath()
+{
+    const OUString aPalettePath = SvtPathOptions().GetPalettePath();
+    OUString aPath;
+    sal_Int32 nIndex = 0;
+    do
+    {
+        aPath = aPalettePath.getToken(0, ';', nIndex);
+    }
+    while (nIndex >= 0);
+
+    return aPath;
+}
+
 /*************************************************************************
 |*
 |*  Dialog to modify fill-attributes
@@ -80,10 +95,6 @@ SvxAreaTabPage::SvxAreaTabPage(weld::Container* pPage, 
weld::DialogController* p
     , maFixed_ChangeType(ChangeType::NONE)
     // init with pointers to fixed ChangeType
     , m_pnColorListState(&maFixed_ChangeType)
-    , m_pnBitmapListState(&maFixed_ChangeType)
-    , m_pnPatternListState(&maFixed_ChangeType)
-    , m_pnGradientListState(&maFixed_ChangeType)
-    , m_pnHatchingListState(&maFixed_ChangeType)
     , m_aXFillAttr(rInAttrs.GetPool())
     , m_rXFSet(m_aXFillAttr.GetItemSet())
     , m_xFillTab(m_xBuilder->weld_container(u"fillstylebox"_ustr))
@@ -478,7 +489,6 @@ void SvxAreaTabPage::CreatePage(sal_Int32 nId, SfxTabPage& 
rTab)
         auto& rGradientTab = static_cast<SvxGradientTabPage&>(rTab);
         rGradientTab.SetColorList(m_pColorList);
         rGradientTab.SetGradientList(m_pGradientList);
-        rGradientTab.SetGrdChgd(m_pnGradientListState);
         rGradientTab.SetColorChgd(m_pnColorListState);
         rGradientTab.Construct();
         rGradientTab.ActivatePage(m_rXFSet);
@@ -490,7 +500,6 @@ void SvxAreaTabPage::CreatePage(sal_Int32 nId, SfxTabPage& 
rTab)
         auto& rHatchTab = static_cast<SvxHatchTabPage&>(rTab);
         rHatchTab.SetColorList(m_pColorList);
         rHatchTab.SetHatchingList(m_pHatchingList);
-        rHatchTab.SetHtchChgd(m_pnHatchingListState);
         rHatchTab.SetColorChgd(m_pnColorListState);
         rHatchTab.Construct();
         rHatchTab.ActivatePage(m_rXFSet);
@@ -501,7 +510,6 @@ void SvxAreaTabPage::CreatePage(sal_Int32 nId, SfxTabPage& 
rTab)
     {
         auto& rBitmapTab = static_cast<SvxBitmapTabPage&>(rTab);
         rBitmapTab.SetBitmapList(m_pBitmapList);
-        rBitmapTab.SetBmpChgd(m_pnBitmapListState);
         rBitmapTab.Construct();
         rBitmapTab.ActivatePage(m_rXFSet);
         rBitmapTab.Reset(&m_rXFSet);
@@ -512,7 +520,6 @@ void SvxAreaTabPage::CreatePage(sal_Int32 nId, SfxTabPage& 
rTab)
         auto& rPatternTab = static_cast<SvxPatternTabPage&>(rTab);
         rPatternTab.SetColorList(m_pColorList);
         rPatternTab.SetPatternList(m_pPatternList);
-        rPatternTab.SetPtrnChgd(m_pnPatternListState);
         rPatternTab.SetColorChgd(m_pnColorListState);
         rPatternTab.Construct();
         rPatternTab.ActivatePage(m_rXFSet);
diff --git a/cui/source/tabpages/tpbitmap.cxx b/cui/source/tabpages/tpbitmap.cxx
index 17819fb36ebf..9e016879b4cb 100644
--- a/cui/source/tabpages/tpbitmap.cxx
+++ b/cui/source/tabpages/tpbitmap.cxx
@@ -20,6 +20,7 @@
 #include <memory>
 #include <stdlib.h>
 #include <tools/urlobj.hxx>
+#include <svx/drawitem.hxx>
 #include <svx/xbtmpit.hxx>
 #include <svx/svxids.hrc>
 #include <strings.hrc>
@@ -36,6 +37,7 @@
 #include <dialmgr.hxx>
 #include <svx/dlgutil.hxx>
 #include <svl/intitem.hxx>
+#include <sfx2/objsh.hxx>
 #include <sfx2/opengrf.hxx>
 #include <vcl/image.hxx>
 #include <vcl/svapp.hxx>
@@ -69,7 +71,7 @@ enum TileOffset
 SvxBitmapTabPage::SvxBitmapTabPage(weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet& rInAttrs)
     : SfxTabPage(pPage, pController, u"cui/ui/imagetabpage.ui"_ustr, 
u"ImageTabPage"_ustr, &rInAttrs)
     , m_rOutAttrs(rInAttrs)
-    , m_pnBitmapListState(nullptr)
+    , m_nBitmapListState(ChangeType::NONE)
     , m_fObjectWidth(0.0)
     , m_fObjectHeight(0.0)
     , m_bLogicalSize(false)
@@ -140,6 +142,17 @@ SvxBitmapTabPage::~SvxBitmapTabPage()
     m_xBitmapLBWin.reset();
     m_xBitmapLB.reset();
     m_xCtlBitmapPreview.reset();
+
+    if (m_nBitmapListState & ChangeType::MODIFIED)
+    {
+        m_pBitmapList->SetPath(AreaTabHelper::GetPalettePath());
+        m_pBitmapList->Save();
+
+        // ToolBoxControls are informed:
+        SfxObjectShell* pShell = SfxObjectShell::Current();
+        if (pShell)
+            pShell->PutItem(SvxBitmapListItem(m_pBitmapList, SID_BITMAP_LIST));
+    }
 }
 
 void SvxBitmapTabPage::Construct()
@@ -538,7 +551,7 @@ IMPL_LINK_NOARG(SvxBitmapTabPage, ClickRenameHdl, 
SvxPresetListBox*, void)
 
             m_xBitmapLB->SetItemText(nId, aName);
 
-            *m_pnBitmapListState |= ChangeType::MODIFIED;
+            m_nBitmapListState |= ChangeType::MODIFIED;
         }
         else
         {
@@ -581,7 +594,7 @@ IMPL_LINK_NOARG(SvxBitmapTabPage, ClickDeleteHdl, 
SvxPresetListBox*, void)
         m_aCtlBitmapPreview.Invalidate();
     }
     ModifyBitmapHdl(m_xBitmapLB.get());
-    *m_pnBitmapListState |= ChangeType::MODIFIED;
+    m_nBitmapListState |= ChangeType::MODIFIED;
 }
 
 IMPL_LINK_NOARG( SvxBitmapTabPage, ModifyBitmapSizeHdl, 
weld::MetricSpinButton&, void )
@@ -776,7 +789,7 @@ IMPL_LINK_NOARG(SvxBitmapTabPage, ClickImportHdl, 
weld::Button&, void)
 
             m_xBitmapLB->InsertItem( nId + 1, Image(aBitmap), aName );
             m_xBitmapLB->SelectItem( nId + 1 );
-            *m_pnBitmapListState |= ChangeType::MODIFIED;
+            m_nBitmapListState |= ChangeType::MODIFIED;
 
             ModifyBitmapHdl(m_xBitmapLB.get());
         }
diff --git a/cui/source/tabpages/tpgradnt.cxx b/cui/source/tabpages/tpgradnt.cxx
index 555cc834c91e..6e24a438fbf1 100644
--- a/cui/source/tabpages/tpgradnt.cxx
+++ b/cui/source/tabpages/tpgradnt.cxx
@@ -22,8 +22,10 @@
 #include <vcl/svapp.hxx>
 #include <vcl/weld.hxx>
 #include <sfx2/dialoghelper.hxx>
+#include <sfx2/objsh.hxx>
 
 #include <strings.hrc>
+#include <svx/drawitem.hxx>
 #include <svx/xfillit0.hxx>
 #include <svx/xflgrit.hxx>
 #include <svx/colorbox.hxx>
@@ -34,6 +36,7 @@
 #include <dialmgr.hxx>
 #include <svx/dialmgr.hxx>
 #include <svx/strings.hrc>
+#include <svx/svxids.hrc>
 #include <basegfx/utils/gradienttools.hxx>
 #include <sal/log.hxx>
 
@@ -42,7 +45,7 @@ using namespace com::sun::star;
 SvxGradientTabPage::SvxGradientTabPage(weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet& rInAttrs)
     : SfxTabPage(pPage, pController, u"cui/ui/gradientpage.ui"_ustr, 
u"GradientPage"_ustr, &rInAttrs)
     , m_rOutAttrs(rInAttrs)
-    , m_pnGradientListState(nullptr)
+    , m_nGradientListState(ChangeType::NONE)
     , m_pnColorListState(nullptr)
     , m_aXFillAttr(rInAttrs.GetPool())
     , m_rXFSet(m_aXFillAttr.GetItemSet())
@@ -122,6 +125,17 @@ SvxGradientTabPage::~SvxGradientTabPage()
     m_xGradientLB.reset();
     m_xLbColorTo.reset();
     m_xLbColorFrom.reset();
+
+    if (m_nGradientListState & ChangeType::MODIFIED)
+    {
+        m_pGradientList->SetPath(AreaTabHelper::GetPalettePath());
+        m_pGradientList->Save();
+
+        // ToolBoxControls are informed:
+        SfxObjectShell* pShell = SfxObjectShell::Current();
+        if (pShell)
+            pShell->PutItem(SvxGradientListItem(m_pGradientList, 
SID_GRADIENT_LIST));
+    }
 }
 
 void SvxGradientTabPage::Construct()
@@ -383,7 +397,7 @@ IMPL_LINK_NOARG(SvxGradientTabPage, ClickAddHdl_Impl, 
weld::Button&, void)
         m_xGradientLB->SelectItem( nId + 1 );
         m_xGradientLB->Resize();
 
-        *m_pnGradientListState |= ChangeType::MODIFIED;
+        m_nGradientListState |= ChangeType::MODIFIED;
 
         ChangeGradientHdl_Impl();
     }
@@ -426,7 +440,7 @@ IMPL_LINK_NOARG(SvxGradientTabPage, ClickModifyHdl_Impl, 
weld::Button&, void)
     m_xGradientLB->InsertItem( nId, Image(aBitmap), aName, 
static_cast<sal_uInt16>(nPos) );
     m_xGradientLB->SelectItem( nId );
 
-    *m_pnGradientListState |= ChangeType::MODIFIED;
+    m_nGradientListState |= ChangeType::MODIFIED;
 }
 
 IMPL_LINK_NOARG(SvxGradientTabPage, ClickDeleteHdl_Impl, SvxPresetListBox*, 
void)
@@ -452,7 +466,7 @@ IMPL_LINK_NOARG(SvxGradientTabPage, ClickDeleteHdl_Impl, 
SvxPresetListBox*, void
 
             ChangeGradientHdl_Impl();
 
-            *m_pnGradientListState |= ChangeType::MODIFIED;
+            m_nGradientListState |= ChangeType::MODIFIED;
         }
     }
     // determine button state
@@ -488,7 +502,7 @@ IMPL_LINK_NOARG(SvxGradientTabPage, ClickRenameHdl_Impl, 
SvxPresetListBox*, void
 
             m_xGradientLB->SetItemText( nId, aName );
 
-            *m_pnGradientListState |= ChangeType::MODIFIED;
+            m_nGradientListState |= ChangeType::MODIFIED;
         }
         else
         {
diff --git a/cui/source/tabpages/tphatch.cxx b/cui/source/tabpages/tphatch.cxx
index 311e7d46b934..27e41070b6fa 100644
--- a/cui/source/tabpages/tphatch.cxx
+++ b/cui/source/tabpages/tphatch.cxx
@@ -23,8 +23,10 @@
 #include <vcl/svapp.hxx>
 #include <vcl/weld.hxx>
 #include <sfx2/dialoghelper.hxx>
+#include <sfx2/objsh.hxx>
 
 #include <strings.hrc>
+#include <svx/drawitem.hxx>
 #include <svx/xfillit0.hxx>
 #include <svx/xflhtit.hxx>
 #include <svx/xflclit.hxx>
@@ -46,7 +48,7 @@ using namespace com::sun::star;
 SvxHatchTabPage::SvxHatchTabPage(weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet& rInAttrs)
     : SfxTabPage(pPage, pController, u"cui/ui/hatchpage.ui"_ustr, 
u"HatchPage"_ustr, &rInAttrs)
     , m_rOutAttrs(rInAttrs)
-    , m_pnHatchingListState(nullptr)
+    , m_nHatchingListState(ChangeType::NONE)
     , m_pnColorListState(nullptr)
     , m_aXFillAttr(rInAttrs.GetPool())
     , m_rXFSet(m_aXFillAttr.GetItemSet())
@@ -124,6 +126,17 @@ SvxHatchTabPage::~SvxHatchTabPage()
     m_xHatchLB.reset();
     m_xLbBackgroundColor.reset();
     m_xLbLineColor.reset();
+
+    if (m_nHatchingListState & ChangeType::MODIFIED)
+    {
+        m_pHatchingList->SetPath(AreaTabHelper::GetPalettePath());
+        m_pHatchingList->Save();
+
+        // ToolBoxControls are informed:
+        SfxObjectShell* pShell = SfxObjectShell::Current();
+        if (pShell)
+            pShell->PutItem(SvxHatchListItem(m_pHatchingList, SID_HATCH_LIST));
+    }
 }
 
 void SvxHatchTabPage::Construct()
@@ -455,7 +468,7 @@ IMPL_LINK_NOARG(SvxHatchTabPage, ClickAddHdl_Impl, 
weld::Button&, void)
     m_xHatchLB->SelectItem( nId + 1 );
     m_xHatchLB->Resize();
 
-    *m_pnHatchingListState |= ChangeType::MODIFIED;
+    m_nHatchingListState |= ChangeType::MODIFIED;
 
     ChangeHatchHdl_Impl();
 }
@@ -489,7 +502,7 @@ IMPL_LINK_NOARG(SvxHatchTabPage, ClickModifyHdl_Impl, 
weld::Button&, void)
     m_xLbLineColor->SaveValue();
     m_xLbBackgroundColor->SaveValue();
 
-    *m_pnHatchingListState |= ChangeType::MODIFIED;
+    m_nHatchingListState |= ChangeType::MODIFIED;
 }
 
 IMPL_LINK_NOARG(SvxHatchTabPage, ClickDeleteHdl_Impl, SvxPresetListBox*, void)
@@ -517,7 +530,7 @@ IMPL_LINK_NOARG(SvxHatchTabPage, ClickDeleteHdl_Impl, 
SvxPresetListBox*, void)
 
     ChangeHatchHdl_Impl();
 
-    *m_pnHatchingListState |= ChangeType::MODIFIED;
+    m_nHatchingListState |= ChangeType::MODIFIED;
 }
 
 IMPL_LINK_NOARG(SvxHatchTabPage, ClickRenameHdl_Impl, SvxPresetListBox*, void )
@@ -548,7 +561,7 @@ IMPL_LINK_NOARG(SvxHatchTabPage, ClickRenameHdl_Impl, 
SvxPresetListBox*, void )
 
             m_xHatchLB->SetItemText(nId, aName);
 
-            *m_pnHatchingListState |= ChangeType::MODIFIED;
+            m_nHatchingListState |= ChangeType::MODIFIED;
         }
         else
         {
diff --git a/cui/source/tabpages/tppattern.cxx 
b/cui/source/tabpages/tppattern.cxx
index d6f591d1fcbe..3e7a20b37b80 100644
--- a/cui/source/tabpages/tppattern.cxx
+++ b/cui/source/tabpages/tppattern.cxx
@@ -20,14 +20,17 @@
 #include <memory>
 #include <tools/urlobj.hxx>
 #include <sfx2/dialoghelper.hxx>
+#include <sfx2/objsh.hxx>
 #include <svx/colorbox.hxx>
 #include <svx/dialmgr.hxx>
 #include <vcl/BitmapTools.hxx>
 #include <vcl/svapp.hxx>
 #include <vcl/weld.hxx>
 #include <svx/strings.hrc>
+#include <svx/svxids.hrc>
 
 #include <strings.hrc>
+#include <svx/drawitem.hxx>
 #include <svx/xfillit0.hxx>
 #include <svx/xbtmpit.hxx>
 #include <svx/xtable.hxx>
@@ -72,7 +75,7 @@ public:
 SvxPatternTabPage::SvxPatternTabPage(weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet& rInAttrs)
     : SvxTabPage(pPage, pController, u"cui/ui/patterntabpage.ui"_ustr, 
u"PatternTabPage"_ustr, rInAttrs)
     , m_rOutAttrs(rInAttrs)
-    , m_pnPatternListState(nullptr)
+    , m_nPatternListState(ChangeType::NONE)
     , m_pnColorListState(nullptr)
     , m_aXFillAttr(rInAttrs.GetPool())
     , m_rXFSet(m_aXFillAttr.GetItemSet())
@@ -123,6 +126,17 @@ SvxPatternTabPage::~SvxPatternTabPage()
     m_xLbBackgroundColor.reset();
     m_xLbColor.reset();
     m_xCtlPixel.reset();
+
+    if (m_nPatternListState & ChangeType::MODIFIED)
+    {
+        m_pPatternList->SetPath(AreaTabHelper::GetPalettePath());
+        m_pPatternList->Save();
+
+        // ToolBoxControls are informed:
+        SfxObjectShell* pShell = SfxObjectShell::Current();
+        if (pShell)
+            pShell->PutItem(SvxPatternListItem(m_pPatternList, 
SID_PATTERN_LIST));
+    }
 }
 
 void SvxPatternTabPage::Construct()
@@ -386,7 +400,7 @@ IMPL_LINK_NOARG(SvxPatternTabPage, ClickAddHdl_Impl, 
weld::Button&, void)
             m_xPatternLB->SelectItem( nId + 1 );
             m_xPatternLB->Resize();
 
-            *m_pnPatternListState |= ChangeType::MODIFIED;
+            m_nPatternListState |= ChangeType::MODIFIED;
 
             ChangePatternHdl_Impl(m_xPatternLB.get());
         }
@@ -419,7 +433,7 @@ IMPL_LINK_NOARG(SvxPatternTabPage, ClickModifyHdl_Impl, 
weld::Button&, void)
     m_xPatternLB->InsertItem( nId, Image(aBitmap), aName, 
static_cast<sal_uInt16>(nPos) );
     m_xPatternLB->SelectItem( nId );
 
-    *m_pnPatternListState |= ChangeType::MODIFIED;
+    m_nPatternListState |= ChangeType::MODIFIED;
 }
 
 
@@ -453,7 +467,7 @@ IMPL_LINK_NOARG(SvxPatternTabPage, ClickRenameHdl_Impl, 
SvxPresetListBox*, void)
 
             m_xPatternLB->SetItemText( nId, aName );
 
-            *m_pnPatternListState |= ChangeType::MODIFIED;
+            m_nPatternListState |= ChangeType::MODIFIED;
         }
         else
         {
@@ -488,7 +502,7 @@ IMPL_LINK_NOARG(SvxPatternTabPage, ClickDeleteHdl_Impl, 
SvxPresetListBox*, void)
 
             ChangePatternHdl_Impl(m_xPatternLB.get());
 
-            *m_pnPatternListState |= ChangeType::MODIFIED;
+            m_nPatternListState |= ChangeType::MODIFIED;
         }
     }
     // determine button state

Reply via email to