docmodel/source/theme/Theme.cxx               |   18 +----
 docmodel/source/uno/UnoTheme.cxx              |    2 
 include/docmodel/theme/Theme.hxx              |    8 +-
 oox/qa/unit/drawingml.cxx                     |    4 -
 oox/source/drawingml/themeelementscontext.cxx |    4 -
 oox/source/export/ThemeExport.cxx             |    4 -
 sd/qa/filter/eppt/eppt.cxx                    |    6 -
 sd/qa/unit/uiimpress.cxx                      |    4 -
 svx/source/dialog/ThemeDialog.cxx             |    2 
 svx/source/svdraw/svdmodel.cxx                |    4 -
 svx/source/svdraw/svdpage.cxx                 |    8 +-
 sw/Library_sw.mk                              |    1 
 sw/inc/strings.hrc                            |    2 
 sw/inc/swundo.hxx                             |    1 
 sw/qa/core/theme/ThemeTest.cxx                |   82 +++++++++++++++++++++++++-
 sw/source/core/inc/ThemeColorChanger.hxx      |    3 
 sw/source/core/inc/UndoThemeChange.hxx        |   35 +++++++++++
 sw/source/core/model/ThemeColorChanger.cxx    |   23 ++++---
 sw/source/core/undo/UndoThemeChange.cxx       |   48 +++++++++++++++
 sw/source/core/undo/undobj.cxx                |    3 
 sw/source/filter/xml/xmlfmte.cxx              |    2 
 xmloff/inc/XMLThemeContext.hxx                |    4 -
 xmloff/qa/unit/draw.cxx                       |    8 +-
 xmloff/qa/unit/text.cxx                       |    4 -
 xmloff/source/draw/sdxmlexp.cxx               |    2 
 xmloff/source/style/XMLThemeContext.cxx       |   12 +--
 26 files changed, 229 insertions(+), 65 deletions(-)

New commits:
commit 34872a4d4e721bdf17642d406b08d407e9cfe8b2
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Thu May 4 00:21:55 2023 +0900
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Thu Jun 1 11:18:50 2023 +0200

    sw: support Undo/Redo for theme colors
    
    Change-Id: Ic4166ec4836545467866a70b4160f1adba0bad96
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151448
    Tested-by: Tomaž Vajngerl <qui...@gmail.com>
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>
    (cherry picked from commit 33d35a2181c9cebf77bc1aa9322a2d11892de5fd)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152233
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>

diff --git a/sw/Library_sw.mk b/sw/Library_sw.mk
index 05dd36258649..be2f30b3acb9 100644
--- a/sw/Library_sw.mk
+++ b/sw/Library_sw.mk
@@ -482,6 +482,7 @@ $(eval $(call gb_Library_add_exception_objects,sw,\
     sw/source/core/undo/unspnd \
     sw/source/core/undo/untbl \
     sw/source/core/undo/untblk \
+    sw/source/core/undo/UndoThemeChange \
     sw/source/core/unocore/SwXTextDefaults \
     sw/source/core/unocore/TextCursorHelper  \
     sw/source/core/unocore/XMLRangeHelper \
diff --git a/sw/inc/strings.hrc b/sw/inc/strings.hrc
index e6927179b875..22ee62908a16 100644
--- a/sw/inc/strings.hrc
+++ b/sw/inc/strings.hrc
@@ -589,6 +589,8 @@
 #define STR_UNDO_TABLE_DELETE                   NC_("STR_UNDO_TABLE_DELETE", 
"Delete table")
 #define STR_UNDO_INSERT_FORM_FIELD              
NC_("STR_UNDO_INSERT_FORM_FIELD", "Insert form field")
 #define STR_UNDO_INSERT_PAGE_NUMBER             
NC_("STR_UNDO_INSERT_PAGE_NUMBER", "Insert page number")
+#define STR_UNDO_CHANGE_THEME_COLORS            
NC_("STR_UNDO_CHANGE_THEME_COLORS", "Change document theme color")
+
 #define STR_DROP_DOWN_FIELD_ITEM_LIMIT          
NC_("STR_DROP_DOWN_FIELD_ITEM_LIMIT", "You can specify maximum of 25 items for 
a drop-down form field.")
 
 #define STR_ACCESS_DOC_NAME                     NC_("STR_ACCESS_DOC_NAME", 
"Document view")
diff --git a/sw/inc/swundo.hxx b/sw/inc/swundo.hxx
index 7e9e0108b71f..874e63413a10 100644
--- a/sw/inc/swundo.hxx
+++ b/sw/inc/swundo.hxx
@@ -167,6 +167,7 @@ enum class SwUndoId
     INSERT_FORM_FIELD,                 // 135
     OUTLINE_EDIT,                      // 136
     INSERT_PAGE_NUMBER,                // 137
+    CHANGE_THEME = 148,
 };
 
 OUString GetUndoComment(SwUndoId eId);
diff --git a/sw/qa/core/theme/ThemeTest.cxx b/sw/qa/core/theme/ThemeTest.cxx
index 0802994aead6..f76460eb6b98 100644
--- a/sw/qa/core/theme/ThemeTest.cxx
+++ b/sw/qa/core/theme/ThemeTest.cxx
@@ -18,6 +18,8 @@
 #include <svx/svdpage.hxx>
 #include <docmodel/uno/UnoThemeColor.hxx>
 #include <docmodel/theme/Theme.hxx>
+#include <ThemeColorChanger.hxx>
+#include <svx/ColorSets.hxx>
 
 using namespace css;
 
@@ -392,6 +394,82 @@ CPPUNIT_TEST_FIXTURE(SwCoreThemeTest, 
testDrawPageThemeExistsODT)
     CPPUNIT_ASSERT_EQUAL(Color(0xCCDDEA), 
pTheme->GetColor(model::ThemeColorType::Light2));
 }
 
+CPPUNIT_TEST_FIXTURE(SwCoreThemeTest, testThemeChanging)
+{
+    createSwDoc("ThemeColorInHeading.docx");
+    SwDoc* pDoc = getSwDoc();
+    CPPUNIT_ASSERT(pDoc);
+    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+    CPPUNIT_ASSERT(pWrtShell);
+    SdrPage* pPage = 
pDoc->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0);
+    CPPUNIT_ASSERT(pPage);
+
+    // Check current theme colors
+    {
+        auto const& pTheme = pPage->getSdrPageProperties().GetTheme();
+        CPPUNIT_ASSERT(pTheme);
+        CPPUNIT_ASSERT_EQUAL(OUString(u"Office Theme"), pTheme->GetName());
+
+        auto pColorSet = pTheme->getColorSet();
+        CPPUNIT_ASSERT(pColorSet);
+        CPPUNIT_ASSERT_EQUAL(OUString(u"Orange"), pColorSet->getName());
+        CPPUNIT_ASSERT_EQUAL(Color(0xE48312), 
pTheme->GetColor(model::ThemeColorType::Accent1));
+    }
+
+    // Change theme colors
+    {
+        auto const& rColorSets = svx::ColorSets::get();
+        model::ColorSet const& rNewColorSet = rColorSets.getColorSet(0);
+        // check that the theme colors are as expected
+        CPPUNIT_ASSERT_EQUAL(OUString(u"LibreOffice"), rNewColorSet.getName());
+
+        sw::ThemeColorChanger aChanger(pDoc->GetDocShell());
+        aChanger.apply(rNewColorSet);
+    }
+
+    // Check new theme colors
+    {
+        auto const& pTheme = pPage->getSdrPageProperties().GetTheme();
+        CPPUNIT_ASSERT(pTheme);
+        CPPUNIT_ASSERT_EQUAL(OUString(u"Office Theme"), pTheme->GetName());
+
+        auto pColorSet = pTheme->getColorSet();
+        CPPUNIT_ASSERT(pColorSet);
+        CPPUNIT_ASSERT_EQUAL(OUString(u"LibreOffice"), pColorSet->getName());
+        CPPUNIT_ASSERT_EQUAL(Color(0x18A303), 
pTheme->GetColor(model::ThemeColorType::Accent1));
+    }
+
+    // Undo
+    pWrtShell->Undo();
+
+    // Check theme colors have been reverted
+    {
+        auto const& pTheme = pPage->getSdrPageProperties().GetTheme();
+        CPPUNIT_ASSERT(pTheme);
+        CPPUNIT_ASSERT_EQUAL(OUString(u"Office Theme"), pTheme->GetName());
+
+        auto pColorSet = pTheme->getColorSet();
+        CPPUNIT_ASSERT(pColorSet);
+        CPPUNIT_ASSERT_EQUAL(OUString(u"Orange"), pColorSet->getName());
+        CPPUNIT_ASSERT_EQUAL(Color(0xE48312), 
pTheme->GetColor(model::ThemeColorType::Accent1));
+    }
+
+    // Redo
+    pWrtShell->Redo();
+
+    // Check theme colors have been applied again
+    {
+        auto const& pTheme = pPage->getSdrPageProperties().GetTheme();
+        CPPUNIT_ASSERT(pTheme);
+        CPPUNIT_ASSERT_EQUAL(OUString(u"Office Theme"), pTheme->GetName());
+
+        auto pColorSet = pTheme->getColorSet();
+        CPPUNIT_ASSERT(pColorSet);
+        CPPUNIT_ASSERT_EQUAL(OUString(u"LibreOffice"), pColorSet->getName());
+        CPPUNIT_ASSERT_EQUAL(Color(0x18A303), 
pTheme->GetColor(model::ThemeColorType::Accent1));
+    }
+}
+
 } // end anonymous namnespace
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/core/inc/ThemeColorChanger.hxx 
b/sw/source/core/inc/ThemeColorChanger.hxx
index 71526f79d216..e7e2620a41d0 100644
--- a/sw/source/core/inc/ThemeColorChanger.hxx
+++ b/sw/source/core/inc/ThemeColorChanger.hxx
@@ -9,13 +9,14 @@
  */
 #pragma once
 
+#include <swdllapi.h>
 #include <docsh.hxx>
 #include <docmodel/theme/ColorSet.hxx>
 #include <svx/theme/ThemeColorChanger.hxx>
 
 namespace sw
 {
-class ThemeColorChanger : public svx::IThemeColorChanger
+class SW_DLLPUBLIC ThemeColorChanger : public svx::IThemeColorChanger
 {
 private:
     SwDocShell* mpDocSh;
diff --git a/sw/source/core/inc/UndoThemeChange.hxx 
b/sw/source/core/inc/UndoThemeChange.hxx
new file mode 100644
index 000000000000..5ce490080179
--- /dev/null
+++ b/sw/source/core/inc/UndoThemeChange.hxx
@@ -0,0 +1,35 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#pragma once
+
+#include <undobj.hxx>
+#include <memory>
+#include <docmodel/theme/ColorSet.hxx>
+
+namespace sw
+{
+class UndoThemeChange final : public SwUndo
+{
+private:
+    SwDoc& mrDocument;
+    std::shared_ptr<model::ColorSet> mpOldColorSet;
+    std::shared_ptr<model::ColorSet> mpNewColorSet;
+
+public:
+    UndoThemeChange(SwDoc& rDocument, std::shared_ptr<model::ColorSet> const& 
pOld,
+                    std::shared_ptr<model::ColorSet> const& pNew);
+    virtual ~UndoThemeChange() override;
+
+    virtual void UndoImpl(UndoRedoContext& rUndoRedoContext) override;
+    virtual void RedoImpl(UndoRedoContext& rUndoRedoContext) override;
+};
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/core/model/ThemeColorChanger.cxx 
b/sw/source/core/model/ThemeColorChanger.cxx
index 6c70e4bb2cd5..9f973d80aaf2 100644
--- a/sw/source/core/model/ThemeColorChanger.cxx
+++ b/sw/source/core/model/ThemeColorChanger.cxx
@@ -21,6 +21,7 @@
 #include <DocumentContentOperationsManager.hxx>
 #include <IDocumentDrawModelAccess.hxx>
 #include <IDocumentUndoRedo.hxx>
+#include <UndoThemeChange.hxx>
 
 #include <sal/config.h>
 #include <svx/svdpage.hxx>
@@ -154,18 +155,22 @@ void ThemeColorChanger::apply(model::ColorSet const& 
rColorSet)
     pDocument->GetIDocumentUndoRedo().StartUndo(SwUndoId::EMPTY, nullptr);
 
     SdrPage* pPage = 
pDocument->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0);
+
     auto pTheme = pPage->getSdrPageProperties().GetTheme();
-    if (pTheme)
-    {
-        pTheme->setColorSet(std::make_shared<model::ColorSet>(rColorSet));
-    }
-    else
+    if (!pTheme)
     {
         pTheme = std::make_shared<model::Theme>("Office");
         pPage->getSdrPageProperties().SetTheme(pTheme);
-        pTheme->setColorSet(std::make_shared<model::ColorSet>(rColorSet));
     }
 
+    auto pNewColorSet = std::make_shared<model::ColorSet>(rColorSet);
+    auto pOldColorSet = pTheme->getColorSet();
+    pTheme->setColorSet(pNewColorSet);
+
+    auto pUndoThemeChange
+        = std::make_unique<sw::UndoThemeChange>(*pDocument, pOldColorSet, 
pNewColorSet);
+    pDocument->GetIDocumentUndoRedo().AppendUndo(std::move(pUndoThemeChange));
+
     SfxStyleSheetBasePool* pPool = mpDocSh->GetStyleSheetPool();
     SwDocStyleSheet* pStyle;
 
diff --git a/sw/source/core/undo/UndoThemeChange.cxx 
b/sw/source/core/undo/UndoThemeChange.cxx
new file mode 100644
index 000000000000..468df82274e3
--- /dev/null
+++ b/sw/source/core/undo/UndoThemeChange.cxx
@@ -0,0 +1,48 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <UndoThemeChange.hxx>
+#include <svx/svdpage.hxx>
+#include <docmodel/theme/Theme.hxx>
+#include <doc.hxx>
+#include <drawdoc.hxx>
+#include <IDocumentDrawModelAccess.hxx>
+
+#include <memory>
+
+namespace sw
+{
+UndoThemeChange::UndoThemeChange(SwDoc& rDocument,
+                                 std::shared_ptr<model::ColorSet> const& 
pOldColorSet,
+                                 std::shared_ptr<model::ColorSet> const& 
pNewColorSet)
+    : SwUndo(SwUndoId::CHANGE_THEME, &rDocument)
+    , mrDocument(rDocument)
+    , mpOldColorSet(pOldColorSet)
+    , mpNewColorSet(pNewColorSet)
+{
+}
+
+UndoThemeChange::~UndoThemeChange() {}
+
+void UndoThemeChange::UndoImpl(UndoRedoContext& /*rUndoRedoContext*/)
+{
+    SdrPage* pPage = 
mrDocument.getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0);
+    auto pTheme = pPage->getSdrPageProperties().GetTheme();
+    pTheme->setColorSet(mpOldColorSet);
+}
+
+void UndoThemeChange::RedoImpl(UndoRedoContext& /*rUndoRedoContext*/)
+{
+    SdrPage* pPage = 
mrDocument.getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0);
+    auto pTheme = pPage->getSdrPageProperties().GetTheme();
+    pTheme->setColorSet(mpNewColorSet);
+}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/core/undo/undobj.cxx b/sw/source/core/undo/undobj.cxx
index b4ecde1d52bd..5e80183a1b38 100644
--- a/sw/source/core/undo/undobj.cxx
+++ b/sw/source/core/undo/undobj.cxx
@@ -646,6 +646,9 @@ OUString GetUndoComment(SwUndoId eId)
         case SwUndoId::INSERT_PAGE_NUMBER:
             pId = STR_UNDO_INSERT_PAGE_NUMBER;
             break;
+        case SwUndoId::CHANGE_THEME:
+            pId = STR_UNDO_CHANGE_THEME_COLORS;
+            break;
     }
 
     assert(pId);
commit 1b5e37186e8b7676a2e6234266dfc601762e11f7
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Wed May 3 22:58:47 2023 +0900
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Thu Jun 1 11:18:36 2023 +0200

    change model::ColorSet to be stored in a shared_ptr in model::Theme
    
    Change-Id: Ic3067f1681c047cd944e64179c568f4e972e0c95
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151447
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>
    (cherry picked from commit 8bafae3656f7a0a6b74bb0985403a96f9a3f61be)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152232
    Tested-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/docmodel/source/theme/Theme.cxx b/docmodel/source/theme/Theme.cxx
index b8fad072144a..d4095eeb3ebd 100644
--- a/docmodel/source/theme/Theme.cxx
+++ b/docmodel/source/theme/Theme.cxx
@@ -33,20 +33,11 @@ Theme::Theme(OUString const& rName)
 
 Theme::Theme(Theme const& rTheme)
     : maName(rTheme.maName)
-    , mpColorSet(new ColorSet(*rTheme.GetColorSet()))
+    , mpColorSet(new ColorSet(*rTheme.getColorSet()))
     , maFontScheme(rTheme.maFontScheme)
 {
 }
 
-void Theme::SetColorSet(std::unique_ptr<model::ColorSet> pColorSet)
-{
-    mpColorSet = std::move(pColorSet);
-}
-
-const model::ColorSet* Theme::GetColorSet() const { return mpColorSet.get(); }
-
-model::ColorSet* Theme::GetColorSet() { return mpColorSet.get(); }
-
 void Theme::SetName(const OUString& rName) { maName = rName; }
 
 const OUString& Theme::GetName() const { return maName; }
@@ -94,7 +85,7 @@ std::unique_ptr<Theme> Theme::FromAny(const uno::Any& rVal)
 {
     comphelper::SequenceAsHashMap aMap(rVal);
     std::unique_ptr<Theme> pTheme;
-    model::ColorSet* pColorSet = nullptr;
+    std::shared_ptr<model::ColorSet> pColorSet;
 
     auto it = aMap.find("Name");
     if (it != aMap.end())
@@ -109,9 +100,8 @@ std::unique_ptr<Theme> Theme::FromAny(const uno::Any& rVal)
     {
         OUString aName;
         it->second >>= aName;
-        auto pSet = std::make_unique<model::ColorSet>(aName);
-        pTheme->SetColorSet(std::move(pSet));
-        pColorSet = pTheme->GetColorSet();
+        pColorSet = std::make_shared<model::ColorSet>(aName);
+        pTheme->setColorSet(pColorSet);
     }
 
     it = aMap.find("ColorScheme");
diff --git a/docmodel/source/uno/UnoTheme.cxx b/docmodel/source/uno/UnoTheme.cxx
index 30d3f827fea2..a7eac05cbd9b 100644
--- a/docmodel/source/uno/UnoTheme.cxx
+++ b/docmodel/source/uno/UnoTheme.cxx
@@ -22,7 +22,7 @@ OUString UnoTheme::getName() { return mpTheme->GetName(); }
 css::uno::Sequence<sal_Int32> UnoTheme::getColorSet()
 {
     std::vector<sal_Int32> aColorScheme(12);
-    auto* pColorSet = mpTheme->GetColorSet();
+    auto pColorSet = mpTheme->getColorSet();
     if (pColorSet)
     {
         size_t i = 0;
diff --git a/include/docmodel/theme/Theme.hxx b/include/docmodel/theme/Theme.hxx
index 9a5c9fe6ed5a..4643f0d0b33a 100644
--- a/include/docmodel/theme/Theme.hxx
+++ b/include/docmodel/theme/Theme.hxx
@@ -158,7 +158,7 @@ class DOCMODEL_DLLPUBLIC Theme
 {
 private:
     OUString maName;
-    std::unique_ptr<model::ColorSet> mpColorSet;
+    std::shared_ptr<model::ColorSet> mpColorSet;
 
     FontScheme maFontScheme = FontScheme::getDefault();
     FormatScheme maFormatScheme;
@@ -176,9 +176,9 @@ public:
     FormatScheme const& getFormatScheme() const { return maFormatScheme; }
     FormatScheme& getFormatScheme() { return maFormatScheme; }
 
-    void SetColorSet(std::unique_ptr<ColorSet> pColorSet);
-    const ColorSet* GetColorSet() const;
-    ColorSet* GetColorSet();
+    void setColorSet(std::shared_ptr<model::ColorSet> const& pColorSet) { 
mpColorSet = pColorSet; }
+
+    std::shared_ptr<model::ColorSet> const& getColorSet() const { return 
mpColorSet; }
 
     void SetName(const OUString& rName);
     const OUString& GetName() const;
diff --git a/oox/qa/unit/drawingml.cxx b/oox/qa/unit/drawingml.cxx
index 20aa63ef5e92..77628aa4bfd4 100644
--- a/oox/qa/unit/drawingml.cxx
+++ b/oox/qa/unit/drawingml.cxx
@@ -399,10 +399,10 @@ CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testPptxTheme)
     auto pTheme = pUnoTheme->getTheme();
 
     CPPUNIT_ASSERT_EQUAL(OUString("Office Theme"), pTheme->GetName());
-    CPPUNIT_ASSERT_EQUAL(OUString("Office"), pTheme->GetColorSet()->getName());
+    CPPUNIT_ASSERT_EQUAL(OUString("Office"), pTheme->getColorSet()->getName());
 
     CPPUNIT_ASSERT_EQUAL(Color(0x954F72),
-                         
pTheme->GetColorSet()->getColor(model::ThemeColorType::FollowedHyperlink));
+                         
pTheme->getColorSet()->getColor(model::ThemeColorType::FollowedHyperlink));
 
     // Check the reference to that theme:
     uno::Reference<drawing::XShapes> xDrawPageShapes(xDrawPage, 
uno::UNO_QUERY);
diff --git a/oox/source/drawingml/themeelementscontext.cxx 
b/oox/source/drawingml/themeelementscontext.cxx
index c0b8eaed4d78..bdc752b98512 100644
--- a/oox/source/drawingml/themeelementscontext.cxx
+++ b/oox/source/drawingml/themeelementscontext.cxx
@@ -327,10 +327,10 @@ ContextHandlerRef 
ThemeElementsContext::onCreateContext(sal_Int32 nElement, cons
         case A_TOKEN( clrScheme ):  // CT_ColorScheme
         {
             OUString aColorSchemeName = rAttribs.getStringDefaulted(XML_name);
-            
mrTheme.SetColorSet(std::make_unique<model::ColorSet>(aColorSchemeName));
+            
mrTheme.setColorSet(std::make_shared<model::ColorSet>(aColorSchemeName));
             if (rAttribs.hasAttribute(XML_name))
                 
mrOoxTheme.getClrScheme().SetName(rAttribs.getStringDefaulted(XML_name));
-            return new clrSchemeContext(*this, mrOoxTheme.getClrScheme(), 
*mrTheme.GetColorSet());
+            return new clrSchemeContext(*this, mrOoxTheme.getClrScheme(), 
*mrTheme.getColorSet());
         }
         case A_TOKEN( fontScheme ): // CT_FontScheme
         {
diff --git a/oox/source/export/ThemeExport.cxx 
b/oox/source/export/ThemeExport.cxx
index cd944ed1a7ea..511647ee1fc3 100644
--- a/oox/source/export/ThemeExport.cxx
+++ b/oox/source/export/ThemeExport.cxx
@@ -53,7 +53,7 @@ void ThemeExport::write(OUString const& rPath, model::Theme 
const& rTheme)
 
     mpFS->startElementNS(XML_a, XML_themeElements);
 
-    const model::ColorSet* pColorSet = rTheme.GetColorSet();
+    const auto pColorSet = rTheme.getColorSet();
 
     mpFS->startElementNS(XML_a, XML_clrScheme, XML_name, pColorSet->getName());
     writeColorSet(rTheme);
@@ -859,7 +859,7 @@ bool ThemeExport::writeColorSet(model::Theme const& rTheme)
         = { XML_dk1,     XML_lt1,     XML_dk2,     XML_lt2,     XML_accent1, 
XML_accent2,
             XML_accent3, XML_accent4, XML_accent5, XML_accent6, XML_hlink,   
XML_folHlink };
 
-    const model::ColorSet* pColorSet = rTheme.GetColorSet();
+    const auto pColorSet = rTheme.getColorSet();
     if (!pColorSet)
         return false;
 
diff --git a/sd/qa/filter/eppt/eppt.cxx b/sd/qa/filter/eppt/eppt.cxx
index 3af6256d8728..a1f960f7b3dd 100644
--- a/sd/qa/filter/eppt/eppt.cxx
+++ b/sd/qa/filter/eppt/eppt.cxx
@@ -71,7 +71,7 @@ CPPUNIT_TEST_FIXTURE(Test, testThemeExport)
         uno::Reference<beans::XPropertySet> 
xMasterPage(xDrawPage->getMasterPage(), uno::UNO_QUERY);
 
         auto pTheme = std::make_shared<model::Theme>("mytheme");
-        std::unique_ptr<model::ColorSet> pColorSet(new 
model::ColorSet("mycolorscheme"));
+        auto pColorSet = std::make_shared<model::ColorSet>("mycolorscheme");
         pColorSet->add(model::ThemeColorType::Dark1, 0x111111);
         pColorSet->add(model::ThemeColorType::Light1, 0x222222);
         pColorSet->add(model::ThemeColorType::Dark2, 0x333333);
@@ -84,7 +84,7 @@ CPPUNIT_TEST_FIXTURE(Test, testThemeExport)
         pColorSet->add(model::ThemeColorType::Accent6, 0xaaaaaa);
         pColorSet->add(model::ThemeColorType::Hyperlink, 0xbbbbbb);
         pColorSet->add(model::ThemeColorType::FollowedHyperlink, 0xcccccc);
-        pTheme->SetColorSet(std::move(pColorSet));
+        pTheme->setColorSet(pColorSet);
 
         xMasterPage->setPropertyValue("Theme", 
uno::Any(model::theme::createXTheme(pTheme)));
     }
@@ -111,7 +111,7 @@ CPPUNIT_TEST_FIXTURE(Test, testThemeExport)
         auto pTheme = pUnoTheme->getTheme();
 
         CPPUNIT_ASSERT_EQUAL(OUString("mytheme"), pTheme->GetName());
-        CPPUNIT_ASSERT_EQUAL(OUString("mycolorscheme"), 
pTheme->GetColorSet()->getName());
+        CPPUNIT_ASSERT_EQUAL(OUString("mycolorscheme"), 
pTheme->getColorSet()->getName());
         CPPUNIT_ASSERT_EQUAL(OUString("Office"), 
pTheme->getFontScheme().getName());
         CPPUNIT_ASSERT_EQUAL(OUString(""), 
pTheme->getFormatScheme().getName());
     }
diff --git a/sd/qa/unit/uiimpress.cxx b/sd/qa/unit/uiimpress.cxx
index e9f42581e5fb..08c7f0766017 100644
--- a/sd/qa/unit/uiimpress.cxx
+++ b/sd/qa/unit/uiimpress.cxx
@@ -1151,7 +1151,7 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, 
testThemeShapeInsert)
                                                     uno::UNO_QUERY);
 
     auto pTheme = std::make_shared<model::Theme>("mytheme");
-    std::unique_ptr<model::ColorSet> pColorSet(new 
model::ColorSet("mycolorscheme"));
+    auto pColorSet = std::make_shared<model::ColorSet>("mycolorscheme");
     pColorSet->add(model::ThemeColorType::Dark1, 0x0);
     pColorSet->add(model::ThemeColorType::Light1, 0x1);
     pColorSet->add(model::ThemeColorType::Dark2, 0x2);
@@ -1164,7 +1164,7 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, 
testThemeShapeInsert)
     pColorSet->add(model::ThemeColorType::Accent6, 0x9);
     pColorSet->add(model::ThemeColorType::Hyperlink, 0xa);
     pColorSet->add(model::ThemeColorType::FollowedHyperlink, 0xb);
-    pTheme->SetColorSet(std::move(pColorSet));
+    pTheme->setColorSet(pColorSet);
 
     xMasterPage->setPropertyValue("Theme", 
uno::Any(model::theme::createXTheme(pTheme)));
 
diff --git a/svx/source/dialog/ThemeDialog.cxx 
b/svx/source/dialog/ThemeDialog.cxx
index 01f88fa036ed..68e2eceeee1c 100644
--- a/svx/source/dialog/ThemeDialog.cxx
+++ b/svx/source/dialog/ThemeDialog.cxx
@@ -50,7 +50,7 @@ ThemeDialog::~ThemeDialog() = default;
 void ThemeDialog::initColorSets()
 {
     if (mpTheme)
-        maColorSets.push_back(*mpTheme->GetColorSet());
+        maColorSets.push_back(*mpTheme->getColorSet());
 
     auto const& rColorSetVector = ColorSets::get().getColorSetVector();
     maColorSets.insert(maColorSets.end(), rColorSetVector.begin(), 
rColorSetVector.end());
diff --git a/svx/source/svdraw/svdmodel.cxx b/svx/source/svdraw/svdmodel.cxx
index 7166170115f9..ca0c79479b4d 100644
--- a/svx/source/svdraw/svdmodel.cxx
+++ b/svx/source/svdraw/svdmodel.cxx
@@ -105,8 +105,8 @@ struct SdrModelImpl
         auto const* pColorSet = 
svx::ColorSets::get().getColorSet(u"LibreOffice");
         if (pColorSet)
         {
-            std::unique_ptr<model::ColorSet> pDefaultColorSet(new 
model::ColorSet(*pColorSet));
-            mpTheme->SetColorSet(std::move(pDefaultColorSet));
+            std::shared_ptr<model::ColorSet> pDefaultColorSet(new 
model::ColorSet(*pColorSet));
+            mpTheme->setColorSet(pDefaultColorSet);
         }
     }
 };
diff --git a/svx/source/svdraw/svdpage.cxx b/svx/source/svdraw/svdpage.cxx
index 23ce2bf1dcd6..75d5ef80f9bd 100644
--- a/svx/source/svdraw/svdpage.cxx
+++ b/svx/source/svdraw/svdpage.cxx
@@ -1229,8 +1229,8 @@ SdrPageProperties::SdrPageProperties(SdrPage& rSdrPage)
         auto const* pColorSet = 
svx::ColorSets::get().getColorSet(u"LibreOffice");
         if (pColorSet)
         {
-            std::unique_ptr<model::ColorSet> pDefaultColorSet(new 
model::ColorSet(*pColorSet));
-            mpTheme->SetColorSet(std::move(pDefaultColorSet));
+            std::shared_ptr<model::ColorSet> pDefaultColorSet(new 
model::ColorSet(*pColorSet));
+            mpTheme->setColorSet(pDefaultColorSet);
         }
     }
 }
@@ -1305,7 +1305,7 @@ void 
SdrPageProperties::SetTheme(std::shared_ptr<model::Theme> const& pTheme)
 {
     mpTheme = pTheme;
 
-    if (mpTheme && mpTheme->GetColorSet() && mpSdrPage->IsMasterPage())
+    if (mpTheme && mpTheme->getColorSet() && mpSdrPage->IsMasterPage())
     {
         SdrModel& rModel = mpSdrPage->getSdrModelFromSdrPage();
         sal_uInt16 nPageCount = rModel.GetPageCount();
@@ -1318,7 +1318,7 @@ void 
SdrPageProperties::SetTheme(std::shared_ptr<model::Theme> const& pTheme)
             }
 
             svx::ThemeColorChanger aChanger(pPage);
-            aChanger.apply(*mpTheme->GetColorSet());
+            aChanger.apply(*mpTheme->getColorSet());
         }
     }
 }
diff --git a/sw/qa/core/theme/ThemeTest.cxx b/sw/qa/core/theme/ThemeTest.cxx
index 169854ec3535..0802994aead6 100644
--- a/sw/qa/core/theme/ThemeTest.cxx
+++ b/sw/qa/core/theme/ThemeTest.cxx
@@ -329,7 +329,7 @@ CPPUNIT_TEST_FIXTURE(SwCoreThemeTest, 
testDrawPageThemeExistsDOCX)
     CPPUNIT_ASSERT(pTheme);
     CPPUNIT_ASSERT_EQUAL(OUString(u"Office Theme"), pTheme->GetName());
 
-    model::ColorSet* pColorSet = pTheme->GetColorSet();
+    auto pColorSet = pTheme->getColorSet();
     CPPUNIT_ASSERT(pColorSet);
     CPPUNIT_ASSERT_EQUAL(OUString(u"Orange"), pColorSet->getName());
 
@@ -376,7 +376,7 @@ CPPUNIT_TEST_FIXTURE(SwCoreThemeTest, 
testDrawPageThemeExistsODT)
     CPPUNIT_ASSERT(pTheme);
     CPPUNIT_ASSERT_EQUAL(OUString(u"Office Theme"), pTheme->GetName());
 
-    model::ColorSet* pColorSet = pTheme->GetColorSet();
+    auto pColorSet = pTheme->getColorSet();
     CPPUNIT_ASSERT(pColorSet);
     CPPUNIT_ASSERT_EQUAL(OUString(u"Orange"), pColorSet->getName());
 
diff --git a/sw/source/core/model/ThemeColorChanger.cxx 
b/sw/source/core/model/ThemeColorChanger.cxx
index 6e230969b692..6c70e4bb2cd5 100644
--- a/sw/source/core/model/ThemeColorChanger.cxx
+++ b/sw/source/core/model/ThemeColorChanger.cxx
@@ -154,16 +154,16 @@ void ThemeColorChanger::apply(model::ColorSet const& 
rColorSet)
     pDocument->GetIDocumentUndoRedo().StartUndo(SwUndoId::EMPTY, nullptr);
 
     SdrPage* pPage = 
pDocument->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0);
-    model::Theme* pTheme = pPage->getSdrPageProperties().GetTheme().get();
+    auto pTheme = pPage->getSdrPageProperties().GetTheme();
     if (pTheme)
     {
-        pTheme->SetColorSet(std::make_unique<model::ColorSet>(rColorSet));
+        pTheme->setColorSet(std::make_shared<model::ColorSet>(rColorSet));
     }
     else
     {
-        
pPage->getSdrPageProperties().SetTheme(std::make_unique<model::Theme>("Office"));
-        pTheme = pPage->getSdrPageProperties().GetTheme().get();
-        pTheme->SetColorSet(std::make_unique<model::ColorSet>(rColorSet));
+        pTheme = std::make_shared<model::Theme>("Office");
+        pPage->getSdrPageProperties().SetTheme(pTheme);
+        pTheme->setColorSet(std::make_shared<model::ColorSet>(rColorSet));
     }
 
     SfxStyleSheetBasePool* pPool = mpDocSh->GetStyleSheetPool();
diff --git a/sw/source/filter/xml/xmlfmte.cxx b/sw/source/filter/xml/xmlfmte.cxx
index 83f9b7c4b7ec..f0300d5bbf55 100644
--- a/sw/source/filter/xml/xmlfmte.cxx
+++ b/sw/source/filter/xml/xmlfmte.cxx
@@ -214,7 +214,7 @@ void SwXMLExport::ExportThemeElement(const 
uno::Reference<drawing::XDrawPage>& x
         AddAttribute(XML_NAMESPACE_LO_EXT, XML_NAME, pTheme->GetName());
     SvXMLElementExport aTheme(*this, XML_NAMESPACE_LO_EXT, XML_THEME, true, 
true);
 
-    auto* pColorSet = pTheme->GetColorSet();
+    auto pColorSet = pTheme->getColorSet();
     if (!pColorSet->getName().isEmpty())
         AddAttribute(XML_NAMESPACE_LO_EXT, XML_NAME, pColorSet->getName());
     SvXMLElementExport aColorTable(*this, XML_NAMESPACE_LO_EXT, 
XML_COLOR_TABLE, true, true);
diff --git a/xmloff/inc/XMLThemeContext.hxx b/xmloff/inc/XMLThemeContext.hxx
index b85932d4cb41..a270d58bec99 100644
--- a/xmloff/inc/XMLThemeContext.hxx
+++ b/xmloff/inc/XMLThemeContext.hxx
@@ -42,7 +42,7 @@ public:
 class XMLColorTableContext : public SvXMLImportContext
 {
     model::Theme& mrTheme;
-    std::unique_ptr<model::ColorSet> mpColorSet;
+    std::shared_ptr<model::ColorSet> m_pColorSet;
     std::vector<css::util::Color> m_aColorScheme;
 
 public:
@@ -62,7 +62,7 @@ class XMLColorContext : public SvXMLImportContext
 public:
     XMLColorContext(SvXMLImport& rImport,
                     css::uno::Reference<css::xml::sax::XFastAttributeList> 
const& xAttrList,
-                    std::unique_ptr<model::ColorSet>& rpColorSet);
+                    std::shared_ptr<model::ColorSet>& rpColorSet);
 };
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/qa/unit/draw.cxx b/xmloff/qa/unit/draw.cxx
index 3bb2a6ec654a..6a5f17a967ea 100644
--- a/xmloff/qa/unit/draw.cxx
+++ b/xmloff/qa/unit/draw.cxx
@@ -134,7 +134,7 @@ CPPUNIT_TEST_FIXTURE(XmloffDrawTest, testThemeExport)
     uno::Reference<beans::XPropertySet> 
xMasterPage(xDrawPage->getMasterPage(), uno::UNO_QUERY);
 
     auto pTheme = std::make_shared<model::Theme>("mytheme");
-    std::unique_ptr<model::ColorSet> pColorSet(new 
model::ColorSet("mycolorscheme"));
+    auto pColorSet = std::make_shared<model::ColorSet>("mycolorscheme");
     pColorSet->add(model::ThemeColorType::Dark1, 0x0);
     pColorSet->add(model::ThemeColorType::Light1, 0x1);
     pColorSet->add(model::ThemeColorType::Dark2, 0x2);
@@ -147,7 +147,7 @@ CPPUNIT_TEST_FIXTURE(XmloffDrawTest, testThemeExport)
     pColorSet->add(model::ThemeColorType::Accent6, 0x9);
     pColorSet->add(model::ThemeColorType::Hyperlink, 0xa);
     pColorSet->add(model::ThemeColorType::FollowedHyperlink, 0xb);
-    pTheme->SetColorSet(std::move(pColorSet));
+    pTheme->setColorSet(pColorSet);
 
     uno::Reference<util::XTheme> xTheme = model::theme::createXTheme(pTheme);
     xMasterPage->setPropertyValue("Theme", uno::Any(xTheme));
@@ -230,10 +230,10 @@ CPPUNIT_TEST_FIXTURE(XmloffDrawTest, testThemeImport)
     CPPUNIT_ASSERT(pTheme);
 
     CPPUNIT_ASSERT_EQUAL(OUString("Office Theme"), pTheme->GetName());
-    CPPUNIT_ASSERT_EQUAL(OUString("Office"), pTheme->GetColorSet()->getName());
+    CPPUNIT_ASSERT_EQUAL(OUString("Office"), pTheme->getColorSet()->getName());
 
     CPPUNIT_ASSERT_EQUAL(Color(0x954F72),
-                         
pTheme->GetColorSet()->getColor(model::ThemeColorType::FollowedHyperlink));
+                         
pTheme->getColorSet()->getColor(model::ThemeColorType::FollowedHyperlink));
 }
 
 CPPUNIT_TEST_FIXTURE(XmloffDrawTest, testThemeColorExportImport)
diff --git a/xmloff/qa/unit/text.cxx b/xmloff/qa/unit/text.cxx
index 62e7a8a8c387..d2dd9dd3c431 100644
--- a/xmloff/qa/unit/text.cxx
+++ b/xmloff/qa/unit/text.cxx
@@ -921,7 +921,7 @@ CPPUNIT_TEST_FIXTURE(XmloffStyleTest, testThemeExport)
     uno::Reference<beans::XPropertySet> xPageProps(xDrawPage, uno::UNO_QUERY);
 
     auto pTheme = std::make_shared<model::Theme>("My Theme");
-    std::unique_ptr<model::ColorSet> pColorSet(new model::ColorSet("My Color 
Scheme"));
+    auto pColorSet = std::make_shared<model::ColorSet>("My Color Scheme");
     pColorSet->add(model::ThemeColorType::Dark1, 0x101010);
     pColorSet->add(model::ThemeColorType::Light1, 0x202020);
     pColorSet->add(model::ThemeColorType::Dark2, 0x303030);
@@ -934,7 +934,7 @@ CPPUNIT_TEST_FIXTURE(XmloffStyleTest, testThemeExport)
     pColorSet->add(model::ThemeColorType::Accent6, 0xa0a0a0);
     pColorSet->add(model::ThemeColorType::Hyperlink, 0xb0b0b0);
     pColorSet->add(model::ThemeColorType::FollowedHyperlink, 0xc0c0c0);
-    pTheme->SetColorSet(std::move(pColorSet));
+    pTheme->setColorSet(pColorSet);
 
     uno::Reference<util::XTheme> xTheme = model::theme::createXTheme(pTheme);
     xPageProps->setPropertyValue("Theme", uno::Any(xTheme));
diff --git a/xmloff/source/draw/sdxmlexp.cxx b/xmloff/source/draw/sdxmlexp.cxx
index 07d021912980..826447fdd1e1 100644
--- a/xmloff/source/draw/sdxmlexp.cxx
+++ b/xmloff/source/draw/sdxmlexp.cxx
@@ -2393,7 +2393,7 @@ void SdXMLExport::ExportThemeElement(const 
uno::Reference<drawing::XDrawPage>& x
         AddAttribute(XML_NAMESPACE_LO_EXT, XML_NAME, pTheme->GetName());
     SvXMLElementExport aTheme(*this, XML_NAMESPACE_LO_EXT, XML_THEME, true, 
true);
 
-    auto* pColorSet = pTheme->GetColorSet();
+    auto pColorSet = pTheme->getColorSet();
     if (!pColorSet->getName().isEmpty())
         AddAttribute(XML_NAMESPACE_LO_EXT, XML_NAME, pColorSet->getName());
     SvXMLElementExport aColorTable(*this, XML_NAMESPACE_LO_EXT, 
XML_COLOR_TABLE, true, true);
diff --git a/xmloff/source/style/XMLThemeContext.cxx 
b/xmloff/source/style/XMLThemeContext.cxx
index e35aed99c46f..b123cae89561 100644
--- a/xmloff/source/style/XMLThemeContext.cxx
+++ b/xmloff/source/style/XMLThemeContext.cxx
@@ -83,7 +83,7 @@ XMLColorTableContext::XMLColorTableContext(
             case XML_ELEMENT(LO_EXT, XML_NAME):
             {
                 OUString aName = rAttribute.toString();
-                mpColorSet.reset(new model::ColorSet(aName));
+                m_pColorSet.reset(new model::ColorSet(aName));
                 break;
             }
         }
@@ -92,8 +92,8 @@ XMLColorTableContext::XMLColorTableContext(
 
 XMLColorTableContext::~XMLColorTableContext()
 {
-    if (mpColorSet)
-        mrTheme.SetColorSet(std::move(mpColorSet));
+    if (m_pColorSet)
+        mrTheme.setColorSet(m_pColorSet);
 }
 
 uno::Reference<xml::sax::XFastContextHandler> SAL_CALL 
XMLColorTableContext::createFastChildContext(
@@ -101,8 +101,8 @@ uno::Reference<xml::sax::XFastContextHandler> SAL_CALL 
XMLColorTableContext::cre
 {
     if (nElement == XML_ELEMENT(LO_EXT, XML_COLOR))
     {
-        if (mpColorSet)
-            return new XMLColorContext(GetImport(), xAttribs, mpColorSet);
+        if (m_pColorSet)
+            return new XMLColorContext(GetImport(), xAttribs, m_pColorSet);
     }
 
     return nullptr;
@@ -110,7 +110,7 @@ uno::Reference<xml::sax::XFastContextHandler> SAL_CALL 
XMLColorTableContext::cre
 
 XMLColorContext::XMLColorContext(SvXMLImport& rImport,
                                  const 
uno::Reference<xml::sax::XFastAttributeList>& xAttrList,
-                                 std::unique_ptr<model::ColorSet>& rpColorSet)
+                                 std::shared_ptr<model::ColorSet>& rpColorSet)
     : SvXMLImportContext(rImport)
 {
     OUString aName;

Reply via email to