include/docmodel/theme/ColorSet.hxx         |    2 
 include/sfx2/tabdlg.hxx                     |   41 +
 include/svx/ColorSets.hxx                   |    3 
 include/svx/dialog/ThemeColorEditDialog.hxx |   47 ++
 include/svx/dialog/ThemeDialog.hxx          |   23 -
 sfx2/source/dialog/tabdlg.cxx               |   32 -
 svx/Library_svx.mk                          |    1 
 svx/UIConfig_svx.mk                         |    1 
 svx/source/dialog/ThemeColorEditDialog.cxx  |   89 ++++
 svx/source/dialog/ThemeColorValueSet.cxx    |    4 
 svx/source/dialog/ThemeDialog.cxx           |   76 ++-
 svx/source/styles/ColorSets.cxx             |   51 ++
 svx/uiconfig/ui/themecoloreditdialog.ui     |  601 ++++++++++++++++++++++++++++
 svx/uiconfig/ui/themedialog.ui              |   43 +-
 sw/source/uibase/shells/basesh.cxx          |   14 
 15 files changed, 964 insertions(+), 64 deletions(-)

New commits:
commit 8e5df127d26e42c3535e66f1733730e32e12df4d
Author:     Tomaž Vajngerl <[email protected]>
AuthorDate: Tue Apr 25 23:10:35 2023 +0900
Commit:     Tomaž Vajngerl <[email protected]>
CommitDate: Tue Apr 25 20:38:25 2023 +0200

    svx: rework the theme dialog to allow editing theme colors
    
    In addition to editing of theme colors, this also changes the
    way how theme colors are represented in the theme dialog and the
    behaviour when changing applying a theme color change.
    
    Previously a theme colors were applied with double-click, now a
    double-click still applies, but automatically exits the dialog.
    The selected theme is applied also when OK button is pressed.
    
    Change-Id: Ic0f8399ede180d6ab0001a7f8b5dda0e7c49fa3c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150975
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <[email protected]>

diff --git a/include/docmodel/theme/ColorSet.hxx 
b/include/docmodel/theme/ColorSet.hxx
index 6e7fa94eafee..d803fbc3e668 100644
--- a/include/docmodel/theme/ColorSet.hxx
+++ b/include/docmodel/theme/ColorSet.hxx
@@ -29,6 +29,8 @@ class DOCMODEL_DLLPUBLIC ColorSet
 public:
     ColorSet(OUString const& rName);
 
+    void setName(OUString const& rName) { maName = rName; }
+
     void add(model::ThemeColorType Type, Color aColorData);
 
     const OUString& getName() const { return maName; }
diff --git a/include/svx/ColorSets.hxx b/include/svx/ColorSets.hxx
index cb096dab0e87..f95859044b28 100644
--- a/include/svx/ColorSets.hxx
+++ b/include/svx/ColorSets.hxx
@@ -27,6 +27,7 @@ private:
     ColorSets();
     void init();
 public:
+    enum class IdenticalNameAction { Overwrite, AutoRename };
     static ColorSets& get();
 
     const std::vector<model::ColorSet>& getColorSetVector() const
@@ -41,7 +42,7 @@ public:
 
     model::ColorSet const* getColorSet(std::u16string_view rName) const;
 
-    void insert(model::ColorSet const& rColorSet);
+    void insert(model::ColorSet const& rColorSet, IdenticalNameAction eAction 
= IdenticalNameAction::Overwrite);
 };
 
 } // end of namespace svx
diff --git a/include/svx/dialog/ThemeColorEditDialog.hxx 
b/include/svx/dialog/ThemeColorEditDialog.hxx
new file mode 100644
index 000000000000..6111607fe033
--- /dev/null
+++ b/include/svx/dialog/ThemeColorEditDialog.hxx
@@ -0,0 +1,47 @@
+/* -*- 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 <svx/svxdllapi.h>
+#include <vcl/weld.hxx>
+#include <docmodel/theme/ColorSet.hxx>
+
+class ColorListBox;
+
+namespace svx
+{
+class SVX_DLLPUBLIC ThemeColorEditDialog final : public 
weld::GenericDialogController
+{
+private:
+    model::ColorSet maColorSet;
+
+    std::unique_ptr<weld::Entry> mxThemeColorsNameEntry;
+    std::unique_ptr<ColorListBox> mxDark1;
+    std::unique_ptr<ColorListBox> mxLight1;
+    std::unique_ptr<ColorListBox> mxDark2;
+    std::unique_ptr<ColorListBox> mxLight2;
+    std::unique_ptr<ColorListBox> mxAccent1;
+    std::unique_ptr<ColorListBox> mxAccent2;
+    std::unique_ptr<ColorListBox> mxAccent3;
+    std::unique_ptr<ColorListBox> mxAccent4;
+    std::unique_ptr<ColorListBox> mxAccent5;
+    std::unique_ptr<ColorListBox> mxAccent6;
+    std::unique_ptr<ColorListBox> mxHyperlink;
+    std::unique_ptr<ColorListBox> mxFollowHyperlink;
+
+public:
+    ThemeColorEditDialog(weld::Window* pParent, model::ColorSet& rColorSet);
+    virtual ~ThemeColorEditDialog() override;
+    model::ColorSet getColorSet();
+};
+
+} // end svx namespace
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/svx/dialog/ThemeDialog.hxx 
b/include/svx/dialog/ThemeDialog.hxx
index aa068f9528c1..d715894f027a 100644
--- a/include/svx/dialog/ThemeDialog.hxx
+++ b/include/svx/dialog/ThemeDialog.hxx
@@ -14,32 +14,45 @@
 #include <svx/svdpage.hxx>
 #include <svx/theme/IThemeColorChanger.hxx>
 #include <svx/dialog/ThemeColorValueSet.hxx>
+#include <functional>
 
 namespace model
 {
 class Theme;
 }
 
+class ColorListBox;
+
 namespace svx
 {
 class SVX_DLLPUBLIC ThemeDialog final : public weld::GenericDialogController
 {
 private:
+    weld::Window* mpWindow;
     model::Theme* mpTheme;
     std::vector<model::ColorSet> maColorSets;
 
-    std::shared_ptr<IThemeColorChanger> mpChanger;
-
     std::unique_ptr<svx::ThemeColorValueSet> mxValueSetThemeColors;
     std::unique_ptr<weld::CustomWeld> mxValueSetThemeColorsWindow;
+    std::unique_ptr<weld::Button> mxAdd;
+
+    std::optional<std::reference_wrapper<model::ColorSet>> moCurrentColorSet;
+
+    void runThemeColorEditDialog();
+    void initColorSets();
 
 public:
-    ThemeDialog(weld::Window* pParent, model::Theme* pTheme,
-                std::shared_ptr<IThemeColorChanger> const& pChanger);
+    ThemeDialog(weld::Window* pParent, model::Theme* pTheme);
     virtual ~ThemeDialog() override;
 
     DECL_LINK(DoubleClickValueSetHdl, ValueSet*, void);
-    void DoubleClickHdl();
+    DECL_LINK(SelectItem, ValueSet*, void);
+    DECL_LINK(ButtonClicked, weld::Button&, void);
+
+    std::optional<std::reference_wrapper<model::ColorSet>> const& 
getCurrentColorSet()
+    {
+        return moCurrentColorSet;
+    }
 };
 
 } // end svx namespace
diff --git a/svx/Library_svx.mk b/svx/Library_svx.mk
index 7a8cd93577e6..2240211e2c23 100644
--- a/svx/Library_svx.mk
+++ b/svx/Library_svx.mk
@@ -176,6 +176,7 @@ $(eval $(call gb_Library_add_exception_objects,svx,\
     svx/source/dialog/swframeposstrings \
     svx/source/dialog/ThemeColorValueSet \
     svx/source/dialog/ThemeDialog \
+    svx/source/dialog/ThemeColorEditDialog \
     svx/source/dialog/txencbox \
     svx/source/dialog/txenctab \
     svx/source/dialog/weldeditview \
diff --git a/svx/UIConfig_svx.mk b/svx/UIConfig_svx.mk
index 23d866c7c3ac..a5fbbe9a6e95 100644
--- a/svx/UIConfig_svx.mk
+++ b/svx/UIConfig_svx.mk
@@ -142,6 +142,7 @@ $(eval $(call gb_UIConfig_add_uifiles,svx,\
        svx/uiconfig/ui/textcontrolparadialog \
        svx/uiconfig/ui/textunderlinecontrol \
        svx/uiconfig/ui/themedialog \
+       svx/uiconfig/ui/themecoloreditdialog \
        svx/uiconfig/ui/toolbarpopover \
        svx/uiconfig/ui/xmlsecstatmenu \
        svx/uiconfig/ui/xformspage \
diff --git a/svx/source/dialog/ThemeColorEditDialog.cxx 
b/svx/source/dialog/ThemeColorEditDialog.cxx
new file mode 100644
index 000000000000..4b5e60a8b2a2
--- /dev/null
+++ b/svx/source/dialog/ThemeColorEditDialog.cxx
@@ -0,0 +1,89 @@
+/* -*- 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 <svx/dialog/ThemeColorEditDialog.hxx>
+#include <vcl/svapp.hxx>
+#include <svx/colorbox.hxx>
+
+namespace svx
+{
+ThemeColorEditDialog::ThemeColorEditDialog(weld::Window* pParent, 
model::ColorSet& rColorSet)
+    : GenericDialogController(pParent, "svx/ui/themecoloreditdialog.ui", 
"ThemeColorEditDialog")
+    , maColorSet(rColorSet)
+    , mxThemeColorsNameEntry(m_xBuilder->weld_entry("entryThemeColorsName"))
+    , mxDark1(new ColorListBox(m_xBuilder->weld_menu_button("buttonDark1"),
+                               [pParent] { return pParent; }))
+    , mxLight1(new ColorListBox(m_xBuilder->weld_menu_button("buttonLight1"),
+                                [pParent] { return pParent; }))
+    , mxDark2(new ColorListBox(m_xBuilder->weld_menu_button("buttonDark2"),
+                               [pParent] { return pParent; }))
+    , mxLight2(new ColorListBox(m_xBuilder->weld_menu_button("buttonLight2"),
+                                [pParent] { return pParent; }))
+    , mxAccent1(new ColorListBox(m_xBuilder->weld_menu_button("buttonAccent1"),
+                                 [pParent] { return pParent; }))
+    , mxAccent2(new ColorListBox(m_xBuilder->weld_menu_button("buttonAccent2"),
+                                 [pParent] { return pParent; }))
+    , mxAccent3(new ColorListBox(m_xBuilder->weld_menu_button("buttonAccent3"),
+                                 [pParent] { return pParent; }))
+    , mxAccent4(new ColorListBox(m_xBuilder->weld_menu_button("buttonAccent4"),
+                                 [pParent] { return pParent; }))
+    , mxAccent5(new ColorListBox(m_xBuilder->weld_menu_button("buttonAccent5"),
+                                 [pParent] { return pParent; }))
+    , mxAccent6(new ColorListBox(m_xBuilder->weld_menu_button("buttonAccent6"),
+                                 [pParent] { return pParent; }))
+    , mxHyperlink(new 
ColorListBox(m_xBuilder->weld_menu_button("buttonHyperlink"),
+                                   [pParent] { return pParent; }))
+    , mxFollowHyperlink(new 
ColorListBox(m_xBuilder->weld_menu_button("buttonFollowHyperlink"),
+                                         [pParent] { return pParent; }))
+{
+    mxThemeColorsNameEntry->set_text(rColorSet.getName());
+    mxDark1->SelectEntry(rColorSet.getColor(model::ThemeColorType::Dark1));
+    mxLight1->SelectEntry(rColorSet.getColor(model::ThemeColorType::Light1));
+    mxDark2->SelectEntry(rColorSet.getColor(model::ThemeColorType::Dark2));
+    mxLight2->SelectEntry(rColorSet.getColor(model::ThemeColorType::Light2));
+    mxAccent1->SelectEntry(rColorSet.getColor(model::ThemeColorType::Accent1));
+    mxAccent2->SelectEntry(rColorSet.getColor(model::ThemeColorType::Accent2));
+    mxAccent3->SelectEntry(rColorSet.getColor(model::ThemeColorType::Accent3));
+    mxAccent4->SelectEntry(rColorSet.getColor(model::ThemeColorType::Accent4));
+    mxAccent5->SelectEntry(rColorSet.getColor(model::ThemeColorType::Accent5));
+    mxAccent6->SelectEntry(rColorSet.getColor(model::ThemeColorType::Accent6));
+    
mxHyperlink->SelectEntry(rColorSet.getColor(model::ThemeColorType::Hyperlink));
+    
mxFollowHyperlink->SelectEntry(rColorSet.getColor(model::ThemeColorType::FollowedHyperlink));
+}
+
+ThemeColorEditDialog::~ThemeColorEditDialog() = default;
+
+model::ColorSet ThemeColorEditDialog::getColorSet()
+{
+    OUString aName = mxThemeColorsNameEntry->get_text();
+
+    model::ColorSet aColorSet(aName);
+
+    if (!aName.isEmpty())
+    {
+        aColorSet.add(model::ThemeColorType::Dark1, 
mxDark1->GetSelectEntryColor());
+        aColorSet.add(model::ThemeColorType::Light1, 
mxLight1->GetSelectEntryColor());
+        aColorSet.add(model::ThemeColorType::Dark2, 
mxDark2->GetSelectEntryColor());
+        aColorSet.add(model::ThemeColorType::Light2, 
mxLight2->GetSelectEntryColor());
+        aColorSet.add(model::ThemeColorType::Accent1, 
mxAccent1->GetSelectEntryColor());
+        aColorSet.add(model::ThemeColorType::Accent2, 
mxAccent2->GetSelectEntryColor());
+        aColorSet.add(model::ThemeColorType::Accent3, 
mxAccent3->GetSelectEntryColor());
+        aColorSet.add(model::ThemeColorType::Accent4, 
mxAccent4->GetSelectEntryColor());
+        aColorSet.add(model::ThemeColorType::Accent5, 
mxAccent5->GetSelectEntryColor());
+        aColorSet.add(model::ThemeColorType::Accent6, 
mxAccent6->GetSelectEntryColor());
+        aColorSet.add(model::ThemeColorType::Hyperlink, 
mxHyperlink->GetSelectEntryColor());
+        aColorSet.add(model::ThemeColorType::FollowedHyperlink,
+                      mxFollowHyperlink->GetSelectEntryColor());
+    }
+    return aColorSet;
+}
+
+} // end svx namespace
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/dialog/ThemeColorValueSet.cxx 
b/svx/source/dialog/ThemeColorValueSet.cxx
index bc0356b2b711..aa0abe0bad66 100644
--- a/svx/source/dialog/ThemeColorValueSet.cxx
+++ b/svx/source/dialog/ThemeColorValueSet.cxx
@@ -13,8 +13,8 @@
 
 namespace svx
 {
-constexpr tools::Long BORDER = 3;
-constexpr tools::Long SIZE = 14;
+constexpr tools::Long BORDER = 4;
+constexpr tools::Long SIZE = 16;
 constexpr tools::Long LABEL_HEIGHT = 16;
 constexpr tools::Long LABEL_TEXT_HEIGHT = 14;
 constexpr tools::Long constElementNumber = 8;
diff --git a/svx/source/dialog/ThemeDialog.cxx 
b/svx/source/dialog/ThemeDialog.cxx
index 9da0e48bf13b..c440292b723d 100644
--- a/svx/source/dialog/ThemeDialog.cxx
+++ b/svx/source/dialog/ThemeDialog.cxx
@@ -8,30 +8,49 @@
  */
 
 #include <svx/dialog/ThemeDialog.hxx>
+#include <svx/dialog/ThemeColorEditDialog.hxx>
 #include <docmodel/theme/ThemeColor.hxx>
 #include <docmodel/theme/ColorSet.hxx>
 #include <docmodel/theme/Theme.hxx>
 #include <svx/ColorSets.hxx>
 #include <vcl/svapp.hxx>
+#include <svx/colorbox.hxx>
 
 namespace svx
 {
-ThemeDialog::ThemeDialog(weld::Window* pParent, model::Theme* pTheme,
-                         std::shared_ptr<IThemeColorChanger> const& pChanger)
+ThemeDialog::ThemeDialog(weld::Window* pParent, model::Theme* pTheme)
     : GenericDialogController(pParent, "svx/ui/themedialog.ui", "ThemeDialog")
+    , mpWindow(pParent)
     , mpTheme(pTheme)
-    , mpChanger(pChanger)
     , mxValueSetThemeColors(new svx::ThemeColorValueSet)
     , mxValueSetThemeColorsWindow(
           new weld::CustomWeld(*m_xBuilder, "valueset_theme_colors", 
*mxValueSetThemeColors))
+    , mxAdd(m_xBuilder->weld_button("button_add"))
 {
-    mxValueSetThemeColors->SetColCount(2);
-    mxValueSetThemeColors->SetLineCount(6);
+    mxValueSetThemeColors->SetColCount(3);
+    mxValueSetThemeColors->SetLineCount(4);
     
mxValueSetThemeColors->SetColor(Application::GetSettings().GetStyleSettings().GetFaceColor());
     mxValueSetThemeColors->SetDoubleClickHdl(LINK(this, ThemeDialog, 
DoubleClickValueSetHdl));
+    mxValueSetThemeColors->SetSelectHdl(LINK(this, ThemeDialog, SelectItem));
 
+    mxAdd->connect_clicked(LINK(this, ThemeDialog, ButtonClicked));
+
+    initColorSets();
+
+    if (!maColorSets.empty())
+    {
+        mxValueSetThemeColors->SelectItem(1); // ItemId 1, position 0
+        moCurrentColorSet = std::ref(maColorSets[0]);
+    }
+}
+
+ThemeDialog::~ThemeDialog() = default;
+
+void ThemeDialog::initColorSets()
+{
     if (mpTheme)
         maColorSets.push_back(*mpTheme->GetColorSet());
+
     auto const& rColorSetVector = ColorSets::get().getColorSetVector();
     maColorSets.insert(maColorSets.end(), rColorSetVector.begin(), 
rColorSetVector.end());
 
@@ -41,16 +60,15 @@ ThemeDialog::ThemeDialog(weld::Window* pParent, 
model::Theme* pTheme,
     }
 
     mxValueSetThemeColors->SetOptimalSize();
-
-    if (!rColorSetVector.empty())
-        mxValueSetThemeColors->SelectItem(1); // ItemId 1, position 0
 }
 
-ThemeDialog::~ThemeDialog() = default;
-
-IMPL_LINK_NOARG(ThemeDialog, DoubleClickValueSetHdl, ValueSet*, void) { 
DoubleClickHdl(); }
+IMPL_LINK_NOARG(ThemeDialog, DoubleClickValueSetHdl, ValueSet*, void)
+{
+    SelectItem(nullptr);
+    m_xDialog->response(RET_OK);
+}
 
-void ThemeDialog::DoubleClickHdl()
+IMPL_LINK_NOARG(ThemeDialog, SelectItem, ValueSet*, void)
 {
     sal_uInt32 nItemId = mxValueSetThemeColors->GetSelectedItemId();
     if (!nItemId)
@@ -58,10 +76,38 @@ void ThemeDialog::DoubleClickHdl()
 
     sal_uInt32 nIndex = nItemId - 1;
 
-    if (nIndex < maColorSets.size())
+    if (nIndex >= maColorSets.size())
+        return;
+
+    moCurrentColorSet = std::ref(maColorSets[nIndex]);
+}
+
+void ThemeDialog::runThemeColorEditDialog()
+{
+    auto pDialog = std::make_shared<svx::ThemeColorEditDialog>(mpWindow, 
*moCurrentColorSet);
+    weld::DialogController::runAsync(pDialog, [this, pDialog](sal_uInt32 
nResult) {
+        if (nResult != RET_OK)
+            return;
+        auto aColorSet = pDialog->getColorSet();
+        if (!aColorSet.getName().isEmpty())
+        {
+            ColorSets::get().insert(aColorSet, 
ColorSets::IdenticalNameAction::AutoRename);
+            maColorSets.clear();
+            mxValueSetThemeColors->Clear();
+
+            initColorSets();
+
+            mxValueSetThemeColors->SelectItem(maColorSets.size() - 1);
+            moCurrentColorSet = std::ref(maColorSets[maColorSets.size() - 1]);
+        }
+    });
+}
+
+IMPL_LINK(ThemeDialog, ButtonClicked, weld::Button&, rButton, void)
+{
+    if (moCurrentColorSet && mxAdd.get() == &rButton)
     {
-        model::ColorSet const& rColorSet = maColorSets[nIndex];
-        mpChanger->apply(rColorSet);
+        runThemeColorEditDialog();
     }
 }
 
diff --git a/svx/source/styles/ColorSets.cxx b/svx/source/styles/ColorSets.cxx
index 438a9a36b01c..cfdeb83df442 100644
--- a/svx/source/styles/ColorSets.cxx
+++ b/svx/source/styles/ColorSets.cxx
@@ -11,6 +11,7 @@
 #include <svx/ColorSets.hxx>
 
 #include <utility>
+#include <unordered_set>
 #include <docmodel/theme/ColorSet.hxx>
 
 using namespace com::sun::star;
@@ -157,20 +158,56 @@ model::ColorSet const* 
ColorSets::getColorSet(std::u16string_view rName) const
     }
     return nullptr;
 }
+namespace
+{
 
-void ColorSets::insert(model::ColorSet const& rNewColorSet)
+OUString findUniqueName(std::unordered_set<OUString> const& rNames, OUString 
const& rNewName)
 {
-    for (model::ColorSet& rColorSet : maColorSets)
+    auto iterator = rNames.find(rNewName);
+    if (iterator == rNames.cend())
+        return rNewName;
+
+    int i = 1;
+    OUString aName;
+    do
     {
-        if (rColorSet.getName() == rNewColorSet.getName())
+        aName = rNewName + "_" + OUString::number(i);
+        i++;
+        iterator = rNames.find(aName);
+    } while (iterator != rNames.cend());
+
+    return aName;
+}
+
+} // end anonymous namespace
+
+void ColorSets::insert(model::ColorSet const& rNewColorSet, 
IdenticalNameAction eAction)
+{
+    if (eAction == IdenticalNameAction::Overwrite)
+    {
+        for (model::ColorSet& rColorSet : maColorSets)
         {
-            rColorSet = rNewColorSet;
-            return;
+            if (rColorSet.getName() == rNewColorSet.getName())
+            {
+                rColorSet = rNewColorSet;
+                return;
+            }
         }
+        // color set not found, so insert it
+        maColorSets.push_back(rNewColorSet);
     }
+    else if (eAction == IdenticalNameAction::AutoRename)
+    {
+        std::unordered_set<OUString> aNames;
+        for (model::ColorSet& rColorSet : maColorSets)
+            aNames.insert(rColorSet.getName());
 
-    // color set not found, so insert it
-    maColorSets.push_back(rNewColorSet);
+        OUString aName = findUniqueName(aNames, rNewColorSet.getName());
+
+        model::ColorSet aNewColorSet = rNewColorSet;
+        aNewColorSet.setName(aName);
+        maColorSets.push_back(aNewColorSet);
+    }
 }
 
 } // end of namespace svx
diff --git a/svx/uiconfig/ui/themecoloreditdialog.ui 
b/svx/uiconfig/ui/themecoloreditdialog.ui
new file mode 100644
index 000000000000..51e0be981ab6
--- /dev/null
+++ b/svx/uiconfig/ui/themecoloreditdialog.ui
@@ -0,0 +1,601 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.40.0 -->
+<interface domain="svx">
+  <requires lib="gtk+" version="3.20"/>
+  <object class="GtkDialog" id="ThemeColorEditDialog">
+    <property name="width-request">400</property>
+    <property name="height-request">300</property>
+    <property name="can-focus">False</property>
+    <property name="hexpand">True</property>
+    <property name="vexpand">True</property>
+    <property name="border-width">6</property>
+    <property name="title" translatable="yes" 
context="themedialog|Title">Theme Color Edit</property>
+    <property name="type-hint">dialog</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialogBox1">
+        <property name="can-focus">False</property>
+        <property name="hexpand">True</property>
+        <property name="vexpand">True</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">12</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialogButtons">
+            <property name="can-focus">False</property>
+            <property name="layout-style">end</property>
+            <child>
+              <object class="GtkButton" id="help">
+                <property name="label" translatable="yes" 
context="stock">_Help</property>
+                <property name="visible">True</property>
+                <property name="can-focus">True</property>
+                <property name="receives-default">True</property>
+                <property name="use-underline">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="ok">
+                <property name="label" translatable="yes" 
context="stock">_OK</property>
+                <property name="visible">True</property>
+                <property name="can-focus">True</property>
+                <property name="can-default">True</property>
+                <property name="has-default">True</property>
+                <property name="receives-default">True</property>
+                <property name="use-underline">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="cancel">
+                <property name="label" translatable="yes" 
context="stock">_Cancel</property>
+                <property name="visible">True</property>
+                <property name="can-focus">True</property>
+                <property name="receives-default">True</property>
+                <property name="use-underline">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack-type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <!-- n-columns=2 n-rows=1 -->
+          <object class="GtkGrid">
+            <property name="visible">True</property>
+            <property name="can-focus">False</property>
+            <child>
+              <object class="GtkEntry" id="entryThemeColorsName">
+                <property name="visible">True</property>
+                <property name="can-focus">True</property>
+                <property name="margin-start">12</property>
+                <property name="margin-end">12</property>
+                <property name="margin-top">6</property>
+                <property name="margin-bottom">6</property>
+                <property name="hexpand">True</property>
+                <property name="truncate-multiline">True</property>
+                <accessibility>
+                  <relation type="labelled-by" target="labelThemeColorsName"/>
+                </accessibility>
+              </object>
+              <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="labelThemeColorsName">
+                <property name="visible">True</property>
+                <property name="can-focus">False</property>
+                <property name="margin-start">6</property>
+                <property name="margin-end">6</property>
+                <property name="margin-top">6</property>
+                <property name="margin-bottom">6</property>
+                <property name="label" translatable="yes" 
context="themecoloreditdialog|labelThemeColorsName">Name:</property>
+                <accessibility>
+                  <relation type="label-for" target="entryThemeColorsName"/>
+                </accessibility>
+              </object>
+              <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">0</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkFrame">
+            <property name="visible">True</property>
+            <property name="can-focus">False</property>
+            <property name="label-xalign">0.019999999552965164</property>
+            <property name="shadow-type">in</property>
+            <child>
+              <!-- n-columns=4 n-rows=6 -->
+              <object class="GtkGrid">
+                <property name="visible">True</property>
+                <property name="can-focus">False</property>
+                <property name="margin-start">12</property>
+                <property name="margin-end">12</property>
+                <property name="margin-top">12</property>
+                <property name="margin-bottom">12</property>
+                <property name="hexpand">True</property>
+                <property name="vexpand">True</property>
+                <property name="row-spacing">6</property>
+                <property name="column-spacing">6</property>
+                <child>
+                  <object class="GtkMenuButton" id="buttonDark1">
+                    <property name="visible">True</property>
+                    <property name="can-focus">True</property>
+                    <property name="receives-default">False</property>
+                    <property name="xalign">0</property>
+                    <property name="draw-indicator">True</property>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <accessibility>
+                      <relation type="labelled-by" target="labelDark1"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">1</property>
+                    <property name="top-attach">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkMenuButton" id="buttonLight1">
+                    <property name="visible">True</property>
+                    <property name="can-focus">True</property>
+                    <property name="receives-default">False</property>
+                    <property name="xalign">0</property>
+                    <property name="draw-indicator">True</property>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <accessibility>
+                      <relation type="labelled-by" target="labelLight1"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">1</property>
+                    <property name="top-attach">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkMenuButton" id="buttonDark2">
+                    <property name="visible">True</property>
+                    <property name="can-focus">True</property>
+                    <property name="receives-default">False</property>
+                    <property name="xalign">0</property>
+                    <property name="draw-indicator">True</property>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <accessibility>
+                      <relation type="labelled-by" target="labelDark2"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">1</property>
+                    <property name="top-attach">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="labelDark1">
+                    <property name="visible">True</property>
+                    <property name="can-focus">False</property>
+                    <property name="margin-start">6</property>
+                    <property name="margin-end">12</property>
+                    <property name="label" translatable="yes" 
context="themecoloreditdialog|labelDark">Dark 1:</property>
+                    <property name="xalign">0</property>
+                    <accessibility>
+                      <relation type="label-for" target="buttonDark1"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">0</property>
+                    <property name="top-attach">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="labelLight1">
+                    <property name="visible">True</property>
+                    <property name="can-focus">False</property>
+                    <property name="margin-start">6</property>
+                    <property name="margin-end">12</property>
+                    <property name="label" translatable="yes" 
context="themecoloreditdialog|labelLight1">Light1:</property>
+                    <property name="xalign">0</property>
+                    <accessibility>
+                      <relation type="label-for" target="buttonLight1"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">0</property>
+                    <property name="top-attach">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="labelDark2">
+                    <property name="visible">True</property>
+                    <property name="can-focus">False</property>
+                    <property name="margin-start">6</property>
+                    <property name="margin-end">12</property>
+                    <property name="label" translatable="yes" 
context="themecoloreditdialog|labelDark2">Dark 2:</property>
+                    <property name="xalign">0</property>
+                    <accessibility>
+                      <relation type="label-for" target="buttonDark2"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">0</property>
+                    <property name="top-attach">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="labelLight2">
+                    <property name="visible">True</property>
+                    <property name="can-focus">False</property>
+                    <property name="margin-start">6</property>
+                    <property name="margin-end">12</property>
+                    <property name="label" translatable="yes" 
context="themecoloreditdialog|labelLight2">Light2:</property>
+                    <property name="xalign">0</property>
+                    <accessibility>
+                      <relation type="label-for" target="buttonLight2"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">0</property>
+                    <property name="top-attach">3</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkMenuButton" id="buttonLight2">
+                    <property name="visible">True</property>
+                    <property name="can-focus">True</property>
+                    <property name="receives-default">False</property>
+                    <property name="xalign">0</property>
+                    <property name="draw-indicator">True</property>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <accessibility>
+                      <relation type="labelled-by" target="labelLight2"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">1</property>
+                    <property name="top-attach">3</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="labelAccent1">
+                    <property name="visible">True</property>
+                    <property name="can-focus">False</property>
+                    <property name="margin-start">6</property>
+                    <property name="margin-end">12</property>
+                    <property name="label" translatable="yes" 
context="themecoloreditdialog|labelAccent1">Accent 1:</property>
+                    <property name="xalign">0</property>
+                    <accessibility>
+                      <relation type="label-for" target="buttonAccent1"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">2</property>
+                    <property name="top-attach">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="labelAccent2">
+                    <property name="visible">True</property>
+                    <property name="can-focus">False</property>
+                    <property name="margin-start">6</property>
+                    <property name="margin-end">12</property>
+                    <property name="label" translatable="yes" 
context="themecoloreditdialog|labelAccent2">Accent 2:</property>
+                    <property name="xalign">0</property>
+                    <accessibility>
+                      <relation type="label-for" target="buttonAccent2"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">2</property>
+                    <property name="top-attach">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkMenuButton" id="buttonAccent1">
+                    <property name="visible">True</property>
+                    <property name="can-focus">True</property>
+                    <property name="receives-default">False</property>
+                    <property name="xalign">0</property>
+                    <property name="draw-indicator">True</property>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <accessibility>
+                      <relation type="labelled-by" target="labelAccent1"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">3</property>
+                    <property name="top-attach">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkMenuButton" id="buttonAccent2">
+                    <property name="visible">True</property>
+                    <property name="can-focus">True</property>
+                    <property name="receives-default">False</property>
+                    <property name="xalign">0</property>
+                    <property name="draw-indicator">True</property>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <accessibility>
+                      <relation type="labelled-by" target="labelAccent2"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">3</property>
+                    <property name="top-attach">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="labelAccent3">
+                    <property name="visible">True</property>
+                    <property name="can-focus">False</property>
+                    <property name="margin-start">6</property>
+                    <property name="margin-end">12</property>
+                    <property name="label" translatable="yes" 
context="themecoloreditdialog|labelAccent3">Accent 3:</property>
+                    <property name="xalign">0</property>
+                    <accessibility>
+                      <relation type="label-for" target="buttonAccent3"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">2</property>
+                    <property name="top-attach">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="labelAccent4">
+                    <property name="visible">True</property>
+                    <property name="can-focus">False</property>
+                    <property name="margin-start">6</property>
+                    <property name="margin-end">12</property>
+                    <property name="label" translatable="yes" 
context="themecoloreditdialog|labelAccent4">Accent 4:</property>
+                    <property name="xalign">0</property>
+                    <accessibility>
+                      <relation type="label-for" target="buttonAccent4"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">2</property>
+                    <property name="top-attach">3</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="labelAccent5">
+                    <property name="visible">True</property>
+                    <property name="can-focus">False</property>
+                    <property name="margin-start">6</property>
+                    <property name="margin-end">12</property>
+                    <property name="label" translatable="yes" 
context="themecoloreditdialog|labelAccent5">Accent 5:</property>
+                    <property name="xalign">0</property>
+                    <accessibility>
+                      <relation type="label-for" target="buttonAccent5"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">2</property>
+                    <property name="top-attach">4</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="labelAccent6">
+                    <property name="visible">True</property>
+                    <property name="can-focus">False</property>
+                    <property name="margin-start">6</property>
+                    <property name="margin-end">12</property>
+                    <property name="label" translatable="yes" 
context="themecoloreditdialog|labelAccent6">Accent 6:</property>
+                    <property name="xalign">0</property>
+                    <accessibility>
+                      <relation type="label-for" target="buttonAccent6"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">2</property>
+                    <property name="top-attach">5</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkMenuButton" id="buttonAccent3">
+                    <property name="visible">True</property>
+                    <property name="can-focus">True</property>
+                    <property name="receives-default">False</property>
+                    <property name="xalign">0</property>
+                    <property name="draw-indicator">True</property>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <accessibility>
+                      <relation type="labelled-by" target="labelAccent3"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">3</property>
+                    <property name="top-attach">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkMenuButton" id="buttonAccent4">
+                    <property name="visible">True</property>
+                    <property name="can-focus">True</property>
+                    <property name="receives-default">False</property>
+                    <property name="xalign">0</property>
+                    <property name="draw-indicator">True</property>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <accessibility>
+                      <relation type="labelled-by" target="labelAccent4"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">3</property>
+                    <property name="top-attach">3</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkMenuButton" id="buttonAccent5">
+                    <property name="visible">True</property>
+                    <property name="can-focus">True</property>
+                    <property name="receives-default">False</property>
+                    <property name="xalign">0</property>
+                    <property name="draw-indicator">True</property>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <accessibility>
+                      <relation type="labelled-by" target="labelAccent5"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">3</property>
+                    <property name="top-attach">4</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkMenuButton" id="buttonAccent6">
+                    <property name="visible">True</property>
+                    <property name="can-focus">True</property>
+                    <property name="receives-default">False</property>
+                    <property name="xalign">0</property>
+                    <property name="draw-indicator">True</property>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <accessibility>
+                      <relation type="labelled-by" target="labelAccent6"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">3</property>
+                    <property name="top-attach">5</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="labelHyperlink">
+                    <property name="visible">True</property>
+                    <property name="can-focus">False</property>
+                    <property name="margin-start">6</property>
+                    <property name="margin-end">12</property>
+                    <property name="label" translatable="yes" 
context="themecoloreditdialog|labelHyperlink">Hyperlink:</property>
+                    <property name="xalign">0</property>
+                    <accessibility>
+                      <relation type="label-for" target="buttonHyperlink"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">0</property>
+                    <property name="top-attach">4</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="labelFollowHyperlink">
+                    <property name="visible">True</property>
+                    <property name="can-focus">False</property>
+                    <property name="margin-start">6</property>
+                    <property name="margin-end">12</property>
+                    <property name="label" translatable="yes" 
context="themecoloreditdialog|labelFollowHyperlink">Follow Hyperlink:</property>
+                    <property name="xalign">0</property>
+                    <accessibility>
+                      <relation type="label-for" 
target="buttonFollowHyperlink"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">0</property>
+                    <property name="top-attach">5</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkMenuButton" id="buttonHyperlink">
+                    <property name="visible">True</property>
+                    <property name="can-focus">True</property>
+                    <property name="receives-default">False</property>
+                    <property name="xalign">0</property>
+                    <property name="draw-indicator">True</property>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <accessibility>
+                      <relation type="labelled-by" target="labelHyperlink"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">1</property>
+                    <property name="top-attach">4</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkMenuButton" id="buttonFollowHyperlink">
+                    <property name="visible">True</property>
+                    <property name="can-focus">True</property>
+                    <property name="receives-default">False</property>
+                    <property name="xalign">0</property>
+                    <property name="draw-indicator">True</property>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <accessibility>
+                      <relation type="labelled-by" 
target="labelFollowHyperlink"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left-attach">1</property>
+                    <property name="top-attach">5</property>
+                  </packing>
+                </child>
+              </object>
+            </child>
+            <child type="label">
+              <object class="GtkLabel" id="frameLabel">
+                <property name="visible">True</property>
+                <property name="can-focus">False</property>
+                <property name="label" translatable="yes" 
context="themecoloreditdialog|frameLabel">Colors</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="-11">help</action-widget>
+      <action-widget response="-5">ok</action-widget>
+      <action-widget response="-6">cancel</action-widget>
+    </action-widgets>
+  </object>
+</interface>
diff --git a/svx/uiconfig/ui/themedialog.ui b/svx/uiconfig/ui/themedialog.ui
index 78d226d15ad3..80bbcc5fca67 100644
--- a/svx/uiconfig/ui/themedialog.ui
+++ b/svx/uiconfig/ui/themedialog.ui
@@ -75,16 +75,22 @@
           </packing>
         </child>
         <child>
-          <!-- n-columns=1 n-rows=1 -->
+          <!-- n-columns=1 n-rows=2 -->
           <object class="GtkGrid">
             <property name="visible">True</property>
             <property name="can-focus">False</property>
+            <property name="hexpand">True</property>
+            <property name="vexpand">True</property>
             <child>
               <object class="GtkScrolledWindow" id="scroll_window">
                 <property name="visible">True</property>
                 <property name="can-focus">True</property>
-                <property name="hexpand">False</property>
-                <property name="vexpand">False</property>
+                <property name="margin-start">12</property>
+                <property name="margin-end">12</property>
+                <property name="margin-top">12</property>
+                <property name="margin-bottom">12</property>
+                <property name="hexpand">True</property>
+                <property name="vexpand">True</property>
                 <property name="hscrollbar-policy">never</property>
                 <property name="vscrollbar-policy">never</property>
                 <property name="shadow-type">in</property>
@@ -109,6 +115,37 @@
                 <property name="top-attach">0</property>
               </packing>
             </child>
+            <child>
+              <object class="GtkButtonBox" id="buttonbox1">
+                <property name="visible">True</property>
+                <property name="can-focus">False</property>
+                <property name="spacing">6</property>
+                <property name="layout-style">start</property>
+                <child>
+                  <object class="GtkButton" id="button_add">
+                    <property name="label" translatable="yes" 
context="stock">_Add</property>
+                    <property name="visible">True</property>
+                    <property name="can-focus">True</property>
+                    <property name="receives-default">True</property>
+                    <property name="use-underline">True</property>
+                    <child internal-child="accessible">
+                      <object class="AtkObject" id="button_add-atkobject">
+                        <property name="AtkObject::accessible-description" 
translatable="yes" context="hatchpage|extended_tip|add">Adds a custom hatching 
pattern to the current list. Specify the properties of your hatching pattern, 
and then click this button.</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">1</property>
+              </packing>
+            </child>
           </object>
           <packing>
             <property name="expand">False</property>
diff --git a/sw/source/uibase/shells/basesh.cxx 
b/sw/source/uibase/shells/basesh.cxx
index df4dac954495..4add92e90068 100644
--- a/sw/source/uibase/shells/basesh.cxx
+++ b/sw/source/uibase/shells/basesh.cxx
@@ -3048,8 +3048,18 @@ void SwBaseShell::ExecDlg(SfxRequest &rReq)
                 if (pTheme)
                 {
                     std::shared_ptr<svx::IThemeColorChanger> pChanger(new 
sw::ThemeColorChanger(pDocumentShell));
-                    auto pDialog = std::make_shared<svx::ThemeDialog>(pMDI, 
pTheme.get(), pChanger);
-                    weld::DialogController::runAsync(pDialog, [](int) {});
+                    auto pDialog = std::make_shared<svx::ThemeDialog>(pMDI, 
pTheme.get());
+                    weld::DialogController::runAsync(pDialog, [pDialog, 
pChanger](sal_uInt32 nResult) {
+                        if (RET_OK != nResult)
+                            return;
+
+                        auto oColorSet = pDialog->getCurrentColorSet();
+                        if (oColorSet)
+                        {
+                            auto& rColorSet = (*oColorSet).get();
+                            pChanger->apply(rColorSet);
+                        }
+                    });
                 }
             }
         }
commit 5cde4f2781fc80ed32aac2ad9c81cadab80860e8
Author:     Tomaž Vajngerl <[email protected]>
AuthorDate: Sat Apr 22 20:51:13 2023 +0900
Commit:     Tomaž Vajngerl <[email protected]>
CommitDate: Tue Apr 25 20:38:16 2023 +0200

    add "m" prefix to member variables - SfxTabPage
    
    Change-Id: I482c341518948bf92f81d4f89b7e307635220150
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150974
    Tested-by: Tomaž Vajngerl <[email protected]>
    Reviewed-by: Tomaž Vajngerl <[email protected]>

diff --git a/include/sfx2/tabdlg.hxx b/include/sfx2/tabdlg.hxx
index 29f2bd600fe2..bde7dee39660 100644
--- a/include/sfx2/tabdlg.hxx
+++ b/include/sfx2/tabdlg.hxx
@@ -188,18 +188,20 @@ friend class SfxTabDialog;
 friend class SfxTabDialogController;
 
 private:
-    const SfxItemSet*   pSet;
-    OUString            aUserString;
-    bool                bHasExchangeSupport;
+    const SfxItemSet* mpSet;
+    OUString maUserString;
+    bool mbHasExchangeSupport;
     std::unordered_map<OUString, css::uno::Any> maAdditionalProperties;
 
-    std::unique_ptr< TabPageImpl >        pImpl;
+    std::unique_ptr<TabPageImpl> mpImpl;
 
 protected:
     SfxTabPage(weld::Container* pPage, weld::DialogController* pController, 
const OUString& rUIXMLDescription, const OUString& rID, const SfxItemSet 
*rAttrSet);
 
     sal_uInt16          GetWhich( sal_uInt16 nSlot, bool bDeep = true ) const
-                            { return pSet->GetPool()->GetWhich( nSlot, bDeep 
); }
+    {
+        return mpSet->GetPool()->GetWhich(nSlot, bDeep);
+    }
     template<class T>
     TypedWhichId<T> GetWhich( TypedWhichId<T> nSlot, bool bDeep = true ) const
     {
@@ -223,23 +225,36 @@ public:
         m_xContainer->set_visible(bVisible);
     }
 
-    const SfxItemSet&   GetItemSet() const { return *pSet; }
+    const SfxItemSet& GetItemSet() const
+    {
+        return *mpSet;
+    }
 
     virtual bool        FillItemSet( SfxItemSet* );
     virtual void        Reset( const SfxItemSet* );
     // Allows to postpone some initialization to the first activation
     virtual bool        DeferResetToFirstActivation();
 
-    bool                HasExchangeSupport() const
-                            { return bHasExchangeSupport; }
-    void                SetExchangeSupport()
-                            { bHasExchangeSupport = true; }
+    bool HasExchangeSupport() const
+    {
+        return mbHasExchangeSupport;
+    }
+
+    void SetExchangeSupport()
+    {
+        mbHasExchangeSupport = true;
+    }
 
     virtual void            ActivatePage( const SfxItemSet& );
     virtual DeactivateRC    DeactivatePage( SfxItemSet* pSet );
-    void                    SetUserData(const OUString& rString)
-                              { aUserString = rString; }
-    const OUString&         GetUserData() const { return aUserString; }
+    void SetUserData(const OUString& rString)
+    {
+        maUserString = rString;
+    }
+    const OUString& GetUserData() const
+    {
+        return maUserString;
+    }
     virtual void            FillUserData();
     virtual bool            IsReadOnly() const;
     virtual void PageCreated (const SfxAllItemSet& aSet);
diff --git a/sfx2/source/dialog/tabdlg.cxx b/sfx2/source/dialog/tabdlg.cxx
index ce79cfd2d676..34589ca029aa 100644
--- a/sfx2/source/dialog/tabdlg.cxx
+++ b/sfx2/source/dialog/tabdlg.cxx
@@ -126,14 +126,14 @@ static Data_Impl* Find( const SfxTabDlgData_Impl& rArr, 
std::u16string_view rId,
 
 void SfxTabPage::SetFrame(const css::uno::Reference< css::frame::XFrame >& 
xFrame)
 {
-    if (pImpl)
-        pImpl->mxFrame = xFrame;
+    if (mpImpl)
+        mpImpl->mxFrame = xFrame;
 }
 
 css::uno::Reference< css::frame::XFrame > SfxTabPage::GetFrame() const
 {
-    if (pImpl)
-        return pImpl->mxFrame;
+    if (mpImpl)
+        return mpImpl->mxFrame;
     return css::uno::Reference< css::frame::XFrame >();
 }
 
@@ -141,11 +141,11 @@ SfxTabPage::SfxTabPage(weld::Container* pPage, 
weld::DialogController* pControll
     : BuilderPage(pPage, pController, rUIXMLDescription, rID,
                     comphelper::LibreOfficeKit::isActive() && 
SfxViewShell::Current()
                     && SfxViewShell::Current()->isLOKMobilePhone())
-    , pSet                ( rAttrSet )
-    , bHasExchangeSupport ( false )
-    , pImpl               ( new TabPageImpl )
+    , mpSet(rAttrSet)
+    , mbHasExchangeSupport(false)
+    , mpImpl(new TabPageImpl)
 {
-    pImpl->mpSfxDialogController = 
dynamic_cast<SfxOkDialogController*>(m_pDialogController);
+    mpImpl->mpSfxDialogController = 
dynamic_cast<SfxOkDialogController*>(m_pDialogController);
 }
 
 SfxTabPage::~SfxTabPage()
@@ -157,7 +157,7 @@ SfxTabPage::~SfxTabPage()
             xParent->move(m_xContainer.get(), nullptr);
     }
     m_xContainer.reset();
-    pImpl.reset();
+    mpImpl.reset();
     m_xBuilder.reset();
 }
 
@@ -256,7 +256,7 @@ const SfxPoolItem* SfxTabPage::GetOldItem( const 
SfxItemSet& rSet,
     sal_uInt16 nWh = GetWhich( nSlot, bDeep );
     const SfxPoolItem* pItem = nullptr;
 
-    if ( pImpl->mbStandard && rOldSet.GetParent() )
+    if (mpImpl->mbStandard && rOldSet.GetParent())
         pItem = GetItem( *rOldSet.GetParent(), nSlot );
     else if ( rSet.GetParent() &&
               SfxItemState::DONTCARE == rSet.GetItemState( nWh ) )
@@ -277,13 +277,13 @@ void SfxTabPage::ChangesApplied()
 
 void SfxTabPage::SetDialogController(SfxOkDialogController* pDialog)
 {
-    pImpl->mpSfxDialogController = pDialog;
-    m_pDialogController = pImpl->mpSfxDialogController;
+    mpImpl->mpSfxDialogController = pDialog;
+    m_pDialogController = mpImpl->mpSfxDialogController;
 }
 
 SfxOkDialogController* SfxTabPage::GetDialogController() const
 {
-    return pImpl->mpSfxDialogController;
+    return mpImpl->mpSfxDialogController;
 }
 
 OUString SfxTabPage::GetHelpId() const
@@ -302,8 +302,8 @@ weld::Window* SfxTabPage::GetFrameWeld() const
 
 const SfxItemSet* SfxTabPage::GetDialogExampleSet() const
 {
-    if (pImpl->mpSfxDialogController)
-        return pImpl->mpSfxDialogController->GetExampleSet();
+    if (mpImpl->mpSfxDialogController)
+        return mpImpl->mpSfxDialogController->GetExampleSet();
     return nullptr;
 }
 
@@ -506,7 +506,7 @@ IMPL_LINK_NOARG(SfxTabDialogController, BaseFmtHdl, 
weld::Button&, void)
     // Set all Items as new  -> the call the current Page Reset()
     assert(pDataObject->xTabPage && "the Page is gone");
     pDataObject->xTabPage->Reset( &aTmpSet );
-    pDataObject->xTabPage->pImpl->mbStandard = true;
+    pDataObject->xTabPage->mpImpl->mbStandard = true;
 }
 
 IMPL_LINK(SfxTabDialogController, ActivatePageHdl, const OUString&, rPage, 
void)

Reply via email to