vcl/inc/IconThemeSelector.hxx                 |    8 ++--
 vcl/osx/salframe.cxx                          |    2 -
 vcl/qa/cppunit/app/test_IconThemeSelector.cxx |    2 -
 vcl/source/app/IconThemeSelector.cxx          |   42 +++++++++++++++++---------
 4 files changed, 34 insertions(+), 20 deletions(-)

New commits:
commit 772328b386db4ab5a2b15e650610c31b34815c8c
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Fri Mar 10 11:41:45 2023 +0000
Commit:     Adolfo Jayme Barrientos <fit...@ubuntu.com>
CommitDate: Sat Mar 11 03:41:30 2023 +0000

    Use a matching dark icon theme on auto picking icon theme from fallbacks
    
    explicitly use:
     breeze/breeze_dark for plasma
     sukapura/sukapura_dark for macOS
     colibre/colibre_dark for win
    
    originally we only had one dark theme so in a dark theme there was only
    one option available, but there's now a bunch to choose from.
    
    In practice nothing changes here because breeze_dark is the current (as
    originally only) dark mode fallback for gnome and win/osx name an
    explicit something"_dark" in their platform specific bits
    
    Change-Id: I13fdfe586cec30b5a9770dc80c9bdcc6a57d04a5
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148650
    Tested-by: Jenkins
    Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com>

diff --git a/vcl/inc/IconThemeSelector.hxx b/vcl/inc/IconThemeSelector.hxx
index 8dab03d3a8d2..0bfbf2034858 100644
--- a/vcl/inc/IconThemeSelector.hxx
+++ b/vcl/inc/IconThemeSelector.hxx
@@ -77,12 +77,12 @@ private:
     static OUString
     ReturnFallback(const std::vector<IconThemeInfo>& installedThemes);
 
-    /** The name of the icon theme which is used as fallback */
-    static constexpr OUStringLiteral FALLBACK_ICON_THEME_ID = u"colibre";
-
+    /** The name of the icon themes which are used as fallbacks */
+    static constexpr OUStringLiteral FALLBACK_LIGHT_ICON_THEME_ID = u"colibre";
+    static constexpr OUStringLiteral FALLBACK_DARK_ICON_THEME_ID = 
u"colibre_dark";
 
     static OUString
-    GetIconThemeForDesktopEnvironment(const OUString& desktopEnvironment);
+    GetIconThemeForDesktopEnvironment(const OUString& desktopEnvironment, bool 
bPreferDarkIconTheme);
 
     OUString mPreferredIconTheme;
     bool mUseHighContrastTheme;
diff --git a/vcl/osx/salframe.cxx b/vcl/osx/salframe.cxx
index bf2257be9fac..80045b92913f 100644
--- a/vcl/osx/salframe.cxx
+++ b/vcl/osx/salframe.cxx
@@ -1315,8 +1315,6 @@ SAL_WNODEPRECATED_DECLARATIONS_POP
                                   NSAppearanceNameAqua, 
NSAppearanceNameDarkAqua]];
         bUseDarkMode = [match isEqualToString: NSAppearanceNameDarkAqua];
     }
-    // there is no sukapura_dark, at the time of writing at least, so whatever
-    // is considered the default dark icon set will be used
     OUString sThemeName(!bUseDarkMode ? u"sukapura" : u"sukapura_dark");
     aStyleSettings.SetPreferredIconTheme(sThemeName, bUseDarkMode);
 
diff --git a/vcl/qa/cppunit/app/test_IconThemeSelector.cxx 
b/vcl/qa/cppunit/app/test_IconThemeSelector.cxx
index 94d53b43d309..72ee344b1437 100644
--- a/vcl/qa/cppunit/app/test_IconThemeSelector.cxx
+++ b/vcl/qa/cppunit/app/test_IconThemeSelector.cxx
@@ -148,7 +148,7 @@ 
IconThemeSelectorTest::FallbackThemeIsReturnedForEmptyInput()
     vcl::IconThemeSelector s;
     OUString selected = s.SelectIconTheme(std::vector<vcl::IconThemeInfo>(), 
"colibre");
     CPPUNIT_ASSERT_EQUAL_MESSAGE("fallback is returned for empty input",
-            OUString(vcl::IconThemeSelector::FALLBACK_ICON_THEME_ID), 
selected);
+            OUString(vcl::IconThemeSelector::FALLBACK_LIGHT_ICON_THEME_ID), 
selected);
 }
 
 void
diff --git a/vcl/source/app/IconThemeSelector.cxx 
b/vcl/source/app/IconThemeSelector.cxx
index fd32008d9414..73c2f7e6ab39 100644
--- a/vcl/source/app/IconThemeSelector.cxx
+++ b/vcl/source/app/IconThemeSelector.cxx
@@ -51,30 +51,50 @@ IconThemeSelector::IconThemeSelector()
 }
 
 /*static*/ OUString
-IconThemeSelector::GetIconThemeForDesktopEnvironment(const OUString& 
desktopEnvironment)
+IconThemeSelector::GetIconThemeForDesktopEnvironment(const OUString& 
desktopEnvironment, bool bPreferDarkIconTheme)
 {
     if (comphelper::LibreOfficeKit::isActive())
-        return "colibre";
+    {
+        if (!bPreferDarkIconTheme)
+            return "colibre";
+        else
+            return "colibre_dark";
+    }
 
 #ifdef _WIN32
     (void)desktopEnvironment;
-    return "colibre";
+    if (!bPreferDarkIconTheme)
+        return "colibre";
+    else
+        return "colibre_dark";
 #else
     OUString r;
     if ( desktopEnvironment.equalsIgnoreAsciiCase("plasma5") ||
          desktopEnvironment.equalsIgnoreAsciiCase("lxqt") ) {
-        r = "breeze";
+        if (!bPreferDarkIconTheme)
+            r = "breeze";
+        else
+            r = "breeze_dark";
     }
     else if ( desktopEnvironment.equalsIgnoreAsciiCase("macosx") ) {
-        r = "sukapura";
+        if (!bPreferDarkIconTheme)
+            r = "sukapura";
+        else
+            r = "sukapura_dark";
     }
     else if ( desktopEnvironment.equalsIgnoreAsciiCase("gnome") ||
          desktopEnvironment.equalsIgnoreAsciiCase("mate") ||
          desktopEnvironment.equalsIgnoreAsciiCase("unity") ) {
-        r = "elementary";
+        if (!bPreferDarkIconTheme)
+            r = "elementary";
+        else
+            r = "breeze_dark";
     } else
     {
-        r = FALLBACK_ICON_THEME_ID;
+        if (!bPreferDarkIconTheme)
+            r = FALLBACK_LIGHT_ICON_THEME_ID;
+        else
+            r = FALLBACK_DARK_ICON_THEME_ID;
     }
     return r;
 #endif // _WIN32
@@ -89,13 +109,9 @@ IconThemeSelector::SelectIconThemeForDesktopEnvironment(
         if (icon_theme_is_in_installed_themes(mPreferredIconTheme, 
installedThemes)) {
             return mPreferredIconTheme;
         }
-        //if a dark variant is preferred, and we didn't have an exact match, 
then try our one and only dark theme
-        if (mPreferDarkIconTheme && 
icon_theme_is_in_installed_themes("breeze_dark", installedThemes)) {
-            return "breeze_dark";
-        }
     }
 
-    OUString themeForDesktop = 
GetIconThemeForDesktopEnvironment(desktopEnvironment);
+    OUString themeForDesktop = 
GetIconThemeForDesktopEnvironment(desktopEnvironment, mPreferDarkIconTheme);
     if (icon_theme_is_in_installed_themes(themeForDesktop, installedThemes)) {
         return themeForDesktop;
     }
@@ -177,7 +193,7 @@ IconThemeSelector::ReturnFallback(const 
std::vector<IconThemeInfo>& installedThe
         return installedThemes.front().GetThemeId();
     }
     else {
-        return FALLBACK_ICON_THEME_ID;
+        return FALLBACK_LIGHT_ICON_THEME_ID;
     }
 }
 

Reply via email to