cui/inc/strings.hrc                                  |    2 
 cui/source/options/appearance.cxx                    |  154 -
 cui/source/options/appearance.hxx                    |    8 
 cui/uiconfig/ui/appearance.ui                        |  120 -
 include/svtools/colorcfg.hxx                         |    2 
 include/vcl/themecolors.hxx                          |   16 
 officecfg/registry/data/org/openoffice/Office/UI.xcu | 1546 +++++++++++++++++++
 svtools/source/config/colorcfg.cxx                   |    4 
 8 files changed, 1627 insertions(+), 225 deletions(-)

New commits:
commit b145d0925a68863aae03c123d827de19dc784428
Author:     Sahil Gautam <sahil.gautam.ext...@allotropia.de>
AuthorDate: Tue Apr 22 14:00:00 2025 +0530
Commit:     Sahil Gautam <sahil.gautam.ext...@allotropia.de>
CommitDate: Wed May 14 08:58:45 2025 +0200

    tdf#164970 Merge appearance options with themes dropdown
    
    TL;DR
    Now there is only one entity "THEME" the user has to care about when
    using the appearance tab page. We ship three default themes which
    just change the document colors. Custom themes can customize the UI
    too.
    
    We used to have two sections in the appearance tab, the themes dropdown
    and the appearance radio buttons group (automatic, light and dark), and
    this was really confusing.
    
    Let's say I am a new user, and I go to the appearance tag page I select
    the dark radio button, why isn't my application changing to dark mode?
    same for light... and then the distinction between application colors
    and document colors, the radio buttons were mainly for the docuemnt
    appearance, and the themes dropdown was for changing the current theme
    which might change the document colors as well.
    
    Now the radio buttons have been merged with the themes dropdown. Now
    there are three default themes there, "Automatic", "Light" and "Dark".
    These three themes don't define any UI colors and just change the
    document colors. If the user installs a new theme, and if that theme
    defines UI colors, the UI will also be customized.
    
    Change-Id: If8da6d2f729f117ada07e13b607ed8525395cb6c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/184429
    Reviewed-by: Sahil Gautam <sahil.gautam.ext...@allotropia.de>
    Tested-by: Jenkins

diff --git a/cui/inc/strings.hrc b/cui/inc/strings.hrc
index 982845bb3795..ce8d0bbe3f95 100644
--- a/cui/inc/strings.hrc
+++ b/cui/inc/strings.hrc
@@ -402,6 +402,8 @@
 
 // Translatable names of color schemes
 #define RID_COLOR_SCHEME_LIBREOFFICE_AUTOMATIC      
NC_("RID_COLOR_SCHEME_LIBREOFFICE_AUTOMATIC", "Automatic")
+#define RID_COLOR_SCHEME_LIBREOFFICE_LIGHT          
NC_("RID_COLOR_SCHEME_LIBREOFFICE_LIGHT", "Light")
+#define RID_COLOR_SCHEME_LIBREOFFICE_DARK           
NC_("RID_COLOR_SCHEME_LIBREOFFICE_DARK", "Dark")
 
 // Translatable Bitmap Names
 #define BMP_FUZZY_LIGHTGREY                         NC_("BMP_FUZZY_LIGHTGREY", 
"Fuzzy Lightgrey")
diff --git a/cui/source/options/appearance.cxx 
b/cui/source/options/appearance.cxx
index 225bfbd862ac..10a796aa038c 100644
--- a/cui/source/options/appearance.cxx
+++ b/cui/source/options/appearance.cxx
@@ -87,6 +87,13 @@ std::vector<BitmapData> const& getBitmapList()
 }
 }
 
+static bool IsDarkModeEnabled()
+{
+    return MiscSettings::GetAppColorMode() == AppearanceMode::DARK
+           || (MiscSettings::GetAppColorMode() == AppearanceMode::AUTO
+               && MiscSettings::GetUseDarkMode());
+}
+
 SvxAppearanceTabPage::SvxAppearanceTabPage(weld::Container* pPage,
                                            weld::DialogController* pController,
                                            const SfxItemSet& rSet)
@@ -97,9 +104,6 @@ SvxAppearanceTabPage::SvxAppearanceTabPage(weld::Container* 
pPage,
     , m_xMoreThemesBtn(m_xBuilder->weld_button(u"morethemesbtn"_ustr))
     , m_xAddSchemeBtn(m_xBuilder->weld_button(u"newschemebtn"_ustr))
     , m_xRemoveSchemeBtn(m_xBuilder->weld_button(u"removeschemebtn"_ustr))
-    , m_xAppearanceSystem(m_xBuilder->weld_radio_button(u"system"_ustr))
-    , m_xAppearanceLight(m_xBuilder->weld_radio_button(u"light"_ustr))
-    , m_xAppearanceDark(m_xBuilder->weld_radio_button(u"dark"_ustr))
     , m_xColorEntryBtn(m_xBuilder->weld_combo_box(u"registrydropdown"_ustr))
     , m_xColorChangeBtn((new 
ColorListBox(m_xBuilder->weld_menu_button(u"colorsdropdownbtn"_ustr),
                                           [this] { return GetFrameWeld(); })))
@@ -112,7 +116,6 @@ SvxAppearanceTabPage::SvxAppearanceTabPage(weld::Container* 
pPage,
     , m_xBitmapDropDownBtn(m_xBuilder->weld_combo_box(u"bitmapdropdown"_ustr))
 {
     InitThemes();
-    InitAppearance();
     InitCustomization();
 }
 
@@ -120,16 +123,29 @@ void SvxAppearanceTabPage::LoadSchemeList()
 {
     m_xSchemeList->clear();
     css::uno::Sequence<OUString> aSchemeNames = pColorConfig->GetSchemeNames();
-    for (size_t i = 0; i < aSchemeNames.size(); ++i)
-    {
-        if (aSchemeNames[i] != AUTOMATIC_COLOR_SCHEME)
-            m_xSchemeList->insert(i, aSchemeNames[i], nullptr, nullptr, 
nullptr);
-    }
+
+    // insert auto, light, dark themes first
     m_xSchemeList->insert(0, CuiResId(RID_COLOR_SCHEME_LIBREOFFICE_AUTOMATIC),
                           &AUTOMATIC_COLOR_SCHEME, nullptr, nullptr);
+    m_xSchemeList->insert(1, CuiResId(RID_COLOR_SCHEME_LIBREOFFICE_LIGHT), 
&LIGHT_COLOR_SCHEME,
+                          nullptr, nullptr);
+    m_xSchemeList->insert(2, CuiResId(RID_COLOR_SCHEME_LIBREOFFICE_DARK), 
&DARK_COLOR_SCHEME,
+                          nullptr, nullptr);
+
+    // insert all the custom color schemes
+    for (size_t i = 0; i < aSchemeNames.size(); ++i)
+        if (ThemeColors::IsCustomTheme(aSchemeNames[i]))
+            m_xSchemeList->append_text(aSchemeNames[i]);
 
-    if (pColorConfig->GetCurrentSchemeName() == AUTOMATIC_COLOR_SCHEME)
+    // since this function just loads entries into the list, we don't call
+    // MiscSettings::SetAppColorMode(...) here, and instead do so in the
+    // SchemeChangeHdl callback.
+    if (ThemeColors::IsAutomaticTheme(pColorConfig->GetCurrentSchemeName()))
         m_xSchemeList->set_active_id(AUTOMATIC_COLOR_SCHEME);
+    else if (ThemeColors::IsLightTheme(pColorConfig->GetCurrentSchemeName()))
+        m_xSchemeList->set_active_id(LIGHT_COLOR_SCHEME);
+    else if (ThemeColors::IsDarkTheme(pColorConfig->GetCurrentSchemeName()))
+        m_xSchemeList->set_active_id(DARK_COLOR_SCHEME);
     else
         m_xSchemeList->set_active_text(pColorConfig->GetCurrentSchemeName());
 }
@@ -165,15 +181,6 @@ OUString SvxAppearanceTabPage::GetAllStrings()
 
 bool SvxAppearanceTabPage::FillItemSet(SfxItemSet* /* rSet */)
 {
-    // commit appearance value if changed
-    if (eCurrentAppearanceMode != MiscSettings::GetAppColorMode())
-    {
-        MiscSettings::SetAppColorMode(eCurrentAppearanceMode);
-        // if themes disabled then change the document colors as per the new 
appearance mode.
-        if (ThemeColors::IsThemeDisabled())
-            UpdateDocumentAppearance();
-    }
-
     // commit ColorConfig
     if (pColorConfig->IsModified())
         pColorConfig->Commit();
@@ -192,9 +199,6 @@ void SvxAppearanceTabPage::Reset(const SfxItemSet* /* rSet 
*/)
 
     UpdateRemoveBtnState();
 
-    // reset appearance
-    eCurrentAppearanceMode = MiscSettings::GetAppColorMode();
-
     // reset ColorConfig
     pColorConfig->ClearModified();
     pColorConfig->DisableBroadcast();
@@ -215,25 +219,6 @@ IMPL_LINK_NOARG(SvxAppearanceTabPage, ShowInDocumentHdl, 
weld::Toggleable&, void
     pColorConfig->SetColorValue(nEntry, aCurrentEntryColor);
 }
 
-IMPL_LINK_NOARG(SvxAppearanceTabPage, AppearanceChangeHdl, weld::Toggleable&, 
void)
-{
-    if (m_xAppearanceSystem->get_state() == TRISTATE_TRUE)
-        eCurrentAppearanceMode = AppearanceMode::AUTO;
-    if (m_xAppearanceLight->get_state() == TRISTATE_TRUE)
-        eCurrentAppearanceMode = AppearanceMode::LIGHT;
-    if (m_xAppearanceDark->get_state() == TRISTATE_TRUE)
-        eCurrentAppearanceMode = AppearanceMode::DARK;
-    // set the extension theme on light/dark
-
-    // restart iff appearance was toggled and theme was enabled
-    m_bRestartRequired = false;
-    if (eCurrentAppearanceMode != MiscSettings::GetAppColorMode()
-        && !ThemeColors::IsThemeDisabled())
-        m_bRestartRequired = true;
-
-    UpdateColorDropdown();
-}
-
 IMPL_LINK_NOARG(SvxAppearanceTabPage, ColorEntryChgHdl, weld::ComboBox&, void)
 {
     // get selected entry index and ColorConfigValue
@@ -316,14 +301,42 @@ IMPL_LINK_NOARG(SvxAppearanceTabPage, ColorValueChgHdl, 
ColorListBox&, void)
 
 IMPL_LINK_NOARG(SvxAppearanceTabPage, SchemeChangeHdl, weld::ComboBox&, void)
 {
-    if (m_xSchemeList->get_active_id() == AUTOMATIC_COLOR_SCHEME)
-        pColorConfig->LoadScheme(AUTOMATIC_COLOR_SCHEME);
+    AppearanceMode eMode;
+    OUString sNewScheme;
+
+    if (ThemeColors::IsAutomaticTheme(m_xSchemeList->get_active_id()))
+    {
+        sNewScheme = AUTOMATIC_COLOR_SCHEME;
+        eMode = AppearanceMode::AUTO;
+    }
+    else if (ThemeColors::IsLightTheme(m_xSchemeList->get_active_id()))
+    {
+        sNewScheme = LIGHT_COLOR_SCHEME;
+        eMode = AppearanceMode::LIGHT;
+    }
+    else if (ThemeColors::IsDarkTheme(m_xSchemeList->get_active_id()))
+    {
+        sNewScheme = DARK_COLOR_SCHEME;
+        eMode = AppearanceMode::DARK;
+    }
     else
-        pColorConfig->LoadScheme(m_xSchemeList->get_active_text());
+    {
+        sNewScheme = m_xSchemeList->get_active_text();
+        // for custom theme, keep appearance to AUTO, doesn't matter for the 
most part,
+        // but if some colors like document colors are not specified, then 
they will be
+        // set as per the OS appearance mode
+        eMode = AppearanceMode::AUTO;
+    }
+
+    // NOTE: LoadScheme must be called after updating the AppearanceMode as 
LoadScheme calls Lode
+    // which loads colors based on the current application appearance.
+    MiscSettings::SetAppColorMode(eMode);
+    pColorConfig->LoadScheme(sNewScheme);
 
     if (m_xSchemeList->get_value_changed_from_saved() && 
!ThemeColors::IsThemeDisabled())
         m_bRestartRequired = true;
 
+    UpdateColorDropdown();
     UpdateRemoveBtnState();
 }
 
@@ -479,30 +492,6 @@ void SvxAppearanceTabPage::InitThemes()
     UpdateRemoveBtnState();
 }
 
-void SvxAppearanceTabPage::InitAppearance()
-{
-    m_xAppearanceSystem->connect_toggled(LINK(this, SvxAppearanceTabPage, 
AppearanceChangeHdl));
-    m_xAppearanceDark->connect_toggled(LINK(this, SvxAppearanceTabPage, 
AppearanceChangeHdl));
-
-    AppearanceMode nAppearance = MiscSettings::GetAppColorMode();
-    eCurrentAppearanceMode = nAppearance;
-
-    switch (nAppearance)
-    {
-        case AppearanceMode::AUTO:
-            m_xAppearanceSystem->set_state(TRISTATE_TRUE);
-            break;
-        case AppearanceMode::LIGHT:
-            m_xAppearanceLight->set_state(TRISTATE_TRUE);
-            break;
-        case AppearanceMode::DARK:
-            m_xAppearanceDark->set_state(TRISTATE_TRUE);
-            break;
-        default:
-            eCurrentAppearanceMode = AppearanceMode::AUTO;
-    }
-}
-
 void SvxAppearanceTabPage::InitCustomization()
 {
     m_xColorEntryBtn->connect_changed(LINK(this, SvxAppearanceTabPage, 
ColorEntryChgHdl));
@@ -534,12 +523,10 @@ void SvxAppearanceTabPage::InitCustomization()
     EnableImageControls(false);
 }
 
-// disable remove if only one scheme available or if the selected theme is 
AUTOMATIC_COLOR_SCHEME
+// enable remove button for custom themes only
 void SvxAppearanceTabPage::UpdateRemoveBtnState()
 {
-    bool bEnableRemoveButton = (m_xSchemeList->get_count() > 1)
-                               && (m_xSchemeList->get_active_id() != 
AUTOMATIC_COLOR_SCHEME);
-    m_xRemoveSchemeBtn->set_sensitive(bEnableRemoveButton);
+    
m_xRemoveSchemeBtn->set_sensitive(ThemeColors::IsCustomTheme(m_xSchemeList->get_active_id()));
 }
 
 void SvxAppearanceTabPage::EnableImageControls(bool bEnabled)
@@ -568,29 +555,6 @@ void SvxAppearanceTabPage::UpdateColorDropdown()
         m_xColorChangeBtn->SelectEntry(rCurrentEntryColor.nLightColor);
 }
 
-// if the user changes appearance options for automatic theme, then follow the 
old behaviour
-// and change the document colors to light/dark based on the choice.
-void SvxAppearanceTabPage::UpdateDocumentAppearance()
-{
-    ColorConfigValue aValue;
-    bool bIsDarkModeEnabled = IsDarkModeEnabled();
-    for (size_t i = 0; i < WINDOWCOLOR; ++i)
-    {
-        if (bIsDarkModeEnabled)
-            aValue.nDarkColor = 
ColorConfig::GetDefaultColor(static_cast<ColorConfigEntry>(i), 1);
-        else
-            aValue.nLightColor = 
ColorConfig::GetDefaultColor(static_cast<ColorConfigEntry>(i), 0);
-
-        pColorConfig->SetColorValue(static_cast<ColorConfigEntry>(i), aValue);
-    }
-}
-
-bool SvxAppearanceTabPage::IsDarkModeEnabled()
-{
-    return eCurrentAppearanceMode == AppearanceMode::DARK
-           || (eCurrentAppearanceMode == AppearanceMode::AUTO && 
MiscSettings::GetUseDarkMode());
-}
-
 void SvxAppearanceTabPage::FillItemsList()
 {
     static const std::map<ColorConfigEntry, OUString> aRegistryEntries
diff --git a/cui/source/options/appearance.hxx 
b/cui/source/options/appearance.hxx
index 73a2a44f248e..3ee7295c1eb5 100644
--- a/cui/source/options/appearance.hxx
+++ b/cui/source/options/appearance.hxx
@@ -34,16 +34,12 @@ class SvxAppearanceTabPage : public SfxTabPage
 {
 private:
     bool m_bRestartRequired;
-    AppearanceMode eCurrentAppearanceMode;
     std::unique_ptr<EditableColorConfig> pColorConfig;
 
     std::unique_ptr<weld::ComboBox> m_xSchemeList;
     std::unique_ptr<weld::Button> m_xMoreThemesBtn;
     std::unique_ptr<weld::Button> m_xAddSchemeBtn;
     std::unique_ptr<weld::Button> m_xRemoveSchemeBtn;
-    std::unique_ptr<weld::RadioButton> m_xAppearanceSystem;
-    std::unique_ptr<weld::RadioButton> m_xAppearanceLight;
-    std::unique_ptr<weld::RadioButton> m_xAppearanceDark;
     std::unique_ptr<weld::ComboBox> m_xColorEntryBtn;
     std::unique_ptr<ColorListBox> m_xColorChangeBtn;
     std::unique_ptr<weld::CheckButton> m_xShowInDocumentChkBtn;
@@ -56,7 +52,6 @@ private:
 
     std::unique_ptr<weld::ComboBox> m_xBitmapDropDownBtn;
 
-    DECL_LINK(AppearanceChangeHdl, weld::Toggleable&, void);
     DECL_LINK(ColorEntryChgHdl, weld::ComboBox&, void);
     DECL_LINK(ColorValueChgHdl, ColorListBox&, void);
     DECL_LINK(ShowInDocumentHdl, weld::Toggleable&, void);
@@ -71,15 +66,12 @@ private:
     DECL_LINK(ResetAllBtnHdl, weld::Button&, void);
 
     void InitThemes();
-    void InitAppearance();
     void InitCustomization();
     void LoadSchemeList();
 
     void UpdateRemoveBtnState();
     void EnableImageControls(bool bEnabled);
     void UpdateColorDropdown();
-    void UpdateDocumentAppearance();
-    bool IsDarkModeEnabled();
     void FillItemsList();
     ColorConfigEntry GetActiveEntry();
 
diff --git a/cui/uiconfig/ui/appearance.ui b/cui/uiconfig/ui/appearance.ui
index a042151b2f2a..b3463f394b23 100644
--- a/cui/uiconfig/ui/appearance.ui
+++ b/cui/uiconfig/ui/appearance.ui
@@ -155,126 +155,6 @@
             <property name="visible">True</property>
             <property name="can-focus">False</property>
             <property name="orientation">vertical</property>
-            <child>
-              <object class="GtkFrame" id="options">
-                <property name="visible">True</property>
-                <property name="can-focus">False</property>
-                <property name="margin-start">12</property>
-                <property name="margin-bottom">6</property>
-                <property name="label-xalign">0</property>
-                <property name="shadow-type">none</property>
-                <child>
-                  <!-- n-columns=2 n-rows=1 -->
-                  <object class="GtkGrid">
-                    <property name="visible">True</property>
-                    <property name="can-focus">False</property>
-                    <property name="margin-start">12</property>
-                    <property name="margin-top">6</property>
-                    <child>
-                      <object class="GtkLabel" id="appearancelb">
-                        <property name="visible">True</property>
-                        <property name="can-focus">False</property>
-                        <property name="valign">start</property>
-                        <property name="margin-end">6</property>
-                        <property name="label" translatable="yes" 
context="appearancetabpage|appearancelb">Appearance:</property>
-                        <property name="use-underline">True</property>
-                        <property name="mnemonic-widget">system</property>
-                      </object>
-                      <packing>
-                        <property name="left-attach">0</property>
-                        <property name="top-attach">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkBox">
-                        <property name="visible">True</property>
-                        <property name="can-focus">False</property>
-                        <property name="orientation">vertical</property>
-                        <child>
-                          <object class="GtkRadioButton" id="system">
-                            <property name="label" translatable="yes" 
context="appearancetabpage|system">System</property>
-                            <property name="visible">True</property>
-                            <property name="can-focus">True</property>
-                            <property name="receives-default">False</property>
-                            <property name="active">True</property>
-                            <property name="draw-indicator">True</property>
-                            <child internal-child="accessible">
-                              <object class="AtkObject" id="system-atkobject">
-                                <property 
name="AtkObject::accessible-description" translatable="yes" 
context="appearance|extended_tip|system">The application and document 
appearance depends on the desktop environment theme.</property>
-                              </object>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">True</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkRadioButton" id="light">
-                            <property name="label" translatable="yes" 
context="appearancetabpage|light">Light</property>
-                            <property name="visible">True</property>
-                            <property name="can-focus">True</property>
-                            <property name="receives-default">False</property>
-                            <property name="draw-indicator">True</property>
-                            <property name="group">system</property>
-                            <child internal-child="accessible">
-                              <object class="AtkObject" id="light-atkobject">
-                                <property 
name="AtkObject::accessible-description" translatable="yes" 
context="appearance|extended_tip|light">Light theme colors are used.</property>
-                              </object>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">True</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkRadioButton" id="dark">
-                            <property name="label" translatable="yes" 
context="appearancetabpage|dark">Dark</property>
-                            <property name="visible">True</property>
-                            <property name="can-focus">True</property>
-                            <property name="receives-default">False</property>
-                            <property name="draw-indicator">True</property>
-                            <property name="group">system</property>
-                            <child internal-child="accessible">
-                              <object class="AtkObject" id="dark-atkobject">
-                                <property 
name="AtkObject::accessible-description" translatable="yes" 
context="appearance|extended_tip|dark">Dark theme colors are used.</property>
-                              </object>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">True</property>
-                            <property name="position">2</property>
-                          </packing>
-                        </child>
-                      </object>
-                      <packing>
-                        <property name="left-attach">1</property>
-                        <property name="top-attach">0</property>
-                      </packing>
-                    </child>
-                  </object>
-                </child>
-                <child type="label">
-                  <object class="GtkLabel" id="optionslb">
-                    <property name="visible">True</property>
-                    <property name="can-focus">False</property>
-                    <property name="label" translatable="yes" 
context="appearancetabpage|optionslb">Options</property>
-                    <attributes>
-                      <attribute name="weight" value="bold"/>
-                    </attributes>
-                  </object>
-                </child>
-              </object>
-              <packing>
-                <property name="expand">True</property>
-                <property name="fill">True</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
             <child>
               <object class="GtkFrame" id="items">
                 <property name="visible">True</property>
diff --git a/include/svtools/colorcfg.hxx b/include/svtools/colorcfg.hxx
index 7030abc21c3a..0dcfb7d2acf1 100644
--- a/include/svtools/colorcfg.hxx
+++ b/include/svtools/colorcfg.hxx
@@ -130,6 +130,8 @@ enum ColorConfigEntry : int
 };
 
 constexpr OUString AUTOMATIC_COLOR_SCHEME = 
u"COLOR_SCHEME_LIBREOFFICE_AUTOMATIC"_ustr;
+constexpr OUString LIGHT_COLOR_SCHEME = u"COLOR_SCHEME_LIBREOFFICE_LIGHT"_ustr;
+constexpr OUString DARK_COLOR_SCHEME = u"COLOR_SCHEME_LIBREOFFICE_DARK"_ustr;
 constexpr size_t THEME_APPLICATION_COLORS_COUNT = ColorConfigEntryCount - 
WINDOWCOLOR;
 
 namespace {
diff --git a/include/vcl/themecolors.hxx b/include/vcl/themecolors.hxx
index e00e228d9d69..c2498e9cd479 100644
--- a/include/vcl/themecolors.hxx
+++ b/include/vcl/themecolors.hxx
@@ -52,6 +52,22 @@ public:
         return rThemeName == svtools::AUTOMATIC_COLOR_SCHEME;
     }
 
+    static bool IsLightTheme(std::u16string_view rThemeName)
+    {
+        return rThemeName == svtools::LIGHT_COLOR_SCHEME;
+    }
+
+    static bool IsDarkTheme(std::u16string_view rThemeName)
+    {
+        return rThemeName == svtools::DARK_COLOR_SCHEME;
+    }
+
+    static bool IsCustomTheme(std::u16string_view rThemeName)
+    {
+        return !IsAutomaticTheme(rThemeName) && !IsLightTheme(rThemeName)
+               && !IsDarkTheme(rThemeName);
+    }
+
     static ThemeState GetThemeState();
     static void SetThemeState(ThemeState eState);
 
diff --git a/officecfg/registry/data/org/openoffice/Office/UI.xcu 
b/officecfg/registry/data/org/openoffice/Office/UI.xcu
index 90d4d640b8f8..27f4677db5d8 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI.xcu
@@ -910,6 +910,1552 @@
           </prop>
         </node>
       </node>
+      <node oor:name="COLOR_SCHEME_LIBREOFFICE_LIGHT" oor:op="replace">
+        <!-- Group_General -->
+        <node oor:name="DocColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="DocBoundaries">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="AppBackground">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="BackgroundType">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Bitmap">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="TableBoundaries">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="FontColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Links">
+          <prop oor:name="IsVisible">
+            <value>false</value>
+          </prop>
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="LinksVisited">
+          <prop oor:name="IsVisible">
+            <value>false</value>
+          </prop>
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Spell">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Grammar">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="SmartTags">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Shadow">
+          <prop oor:name="IsVisible">
+            <value>true</value>
+          </prop>
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="WriterTextGrid">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="WriterFieldShadings">
+          <prop oor:name="IsVisible">
+            <value>true</value>
+          </prop>
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="WriterIdxShadings">
+          <prop oor:name="IsVisible">
+            <value>true</value>
+          </prop>
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="WriterDirectCursor">
+          <prop oor:name="IsVisible">
+            <value>true</value>
+          </prop>
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="WriterScriptIndicator">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="WriterSectionBoundaries">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="WriterHeaderFooterMark">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="WriterPageBreaks">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="WriterNonPrintChars">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="HTMLSGML">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="HTMLComment">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="HTMLKeyword">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="HTMLUnknown">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcGrid">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcCellFocus">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcPageBreak">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcPageBreakManual">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcPageBreakAutomatic">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcHiddenColRow">
+          <prop oor:name="IsVisible">
+            <value>false</value>
+          </prop>
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcTextOverflow">
+          <prop oor:name="IsVisible">
+            <value>true</value>
+          </prop>
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcComments">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcDetective">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcDetectiveError">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcReference">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcNotesBackground">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcValue">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcFormula">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcText">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcProtectedBackground">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="DrawGrid">
+          <prop oor:name="IsVisible">
+            <value>true</value>
+          </prop>
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Author1">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Author2">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Author3">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Author4">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Author5">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Author6">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Author7">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Author8">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Author9">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="BASICEditor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="BASICIdentifier">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="BASICComment">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="BASICNumber">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="BASICString">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="BASICOperator">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="BASICKeyword">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="BASICError">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="SQLIdentifier">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="SQLNumber">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="SQLString">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="SQLOperator">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="SQLKeyword">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="SQLParameter">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="SQLComment">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <!-- Group Application -->
+        <node oor:name="WindowColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="WindowTextColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="BaseColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="ButtonColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="ButtonTextColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="AccentColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="DisabledColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="DisabledTextColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="ShadowColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="SeparatorColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="FaceColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="ActiveColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="ActiveTextColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="ActiveBorderColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="FieldColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="MenuBarColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="MenuBarTextColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="MenuBarHighlightColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="MenuBarHighlightTextColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="MenuColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="MenuTextColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="MenuHighlightColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="MenuHighlightTextColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="MenuBorderColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="InactiveColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="InactiveTextColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="InactiveBorderColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+      </node>
+      <node oor:name="COLOR_SCHEME_LIBREOFFICE_DARK" oor:op="replace">
+        <!-- Group_General -->
+        <node oor:name="DocColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="DocBoundaries">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="AppBackground">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="BackgroundType">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Bitmap">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="TableBoundaries">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="FontColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Links">
+          <prop oor:name="IsVisible">
+            <value>false</value>
+          </prop>
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="LinksVisited">
+          <prop oor:name="IsVisible">
+            <value>false</value>
+          </prop>
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Spell">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Grammar">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="SmartTags">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Shadow">
+          <prop oor:name="IsVisible">
+            <value>true</value>
+          </prop>
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="WriterTextGrid">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="WriterFieldShadings">
+          <prop oor:name="IsVisible">
+            <value>true</value>
+          </prop>
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="WriterIdxShadings">
+          <prop oor:name="IsVisible">
+            <value>true</value>
+          </prop>
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="WriterDirectCursor">
+          <prop oor:name="IsVisible">
+            <value>true</value>
+          </prop>
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="WriterScriptIndicator">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="WriterSectionBoundaries">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="WriterHeaderFooterMark">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="WriterPageBreaks">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="WriterNonPrintChars">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="HTMLSGML">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="HTMLComment">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="HTMLKeyword">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="HTMLUnknown">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcGrid">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcCellFocus">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcPageBreak">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcPageBreakManual">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcPageBreakAutomatic">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcHiddenColRow">
+          <prop oor:name="IsVisible">
+            <value>false</value>
+          </prop>
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcTextOverflow">
+          <prop oor:name="IsVisible">
+            <value>true</value>
+          </prop>
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcComments">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcDetective">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcDetectiveError">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcReference">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcNotesBackground">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcValue">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcFormula">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcText">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="CalcProtectedBackground">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="DrawGrid">
+          <prop oor:name="IsVisible">
+            <value>true</value>
+          </prop>
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Author1">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Author2">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Author3">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Author4">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Author5">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Author6">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Author7">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Author8">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="Author9">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="BASICEditor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="BASICIdentifier">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="BASICComment">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="BASICNumber">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="BASICString">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="BASICOperator">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="BASICKeyword">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="BASICError">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="SQLIdentifier">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="SQLNumber">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="SQLString">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="SQLOperator">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="SQLKeyword">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="SQLParameter">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="SQLComment">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <!-- Group Application -->
+        <node oor:name="WindowColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="WindowTextColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="BaseColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="ButtonColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="ButtonTextColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="AccentColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="DisabledColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="DisabledTextColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="ShadowColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="SeparatorColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="FaceColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="ActiveColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="ActiveTextColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="ActiveBorderColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="FieldColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="MenuBarColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="MenuBarTextColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="MenuBarHighlightColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="MenuBarHighlightTextColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="MenuColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="MenuTextColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="MenuHighlightColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="MenuHighlightTextColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="MenuBorderColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="InactiveColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="InactiveTextColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+        <node oor:name="InactiveBorderColor">
+          <prop oor:name="Light">
+            <value xsi:nil="true"/>
+          </prop>
+          <prop oor:name="Dark">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
+      </node>
     </node>
   </node>
 </oor:component-data>
diff --git a/svtools/source/config/colorcfg.cxx 
b/svtools/source/config/colorcfg.cxx
index ce664ce40288..c0e3e16feea7 100644
--- a/svtools/source/config/colorcfg.cxx
+++ b/svtools/source/config/colorcfg.cxx
@@ -177,8 +177,8 @@ void ColorConfig_Impl::Load(const OUString& rScheme)
     }
     m_sLoadedScheme = sScheme;
 
-    // in cases like theme not found or extension removal, use 
AUTOMATIC_COLOR_SCHEME as fallback.
-    if (!ThemeColors::IsAutomaticTheme(sScheme))
+    // use automatic theme as the fallback, in case the theme extension was 
removed
+    if (ThemeColors::IsCustomTheme(sScheme))
     {
         uno::Sequence<OUString> aSchemes = GetSchemeNames();
         bool bFound = std::any_of(aSchemes.begin(), aSchemes.end(),

Reply via email to