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; } }