diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,6 @@ find_package(Qt5 REQUIRED NO_MODULE COMPONENTS Widgets Svg Test) find_package(KF5 REQUIRED COMPONENTS I18n KIO ConfigWidgets NewStuff Archive KCMUtils IconThemes DBusAddons) -find_package(X11 REQUIRED) find_package(GTK3 REQUIRED) find_package(GSettingSchemas REQUIRED) diff --git a/kded/configvalueprovider.h b/kded/configvalueprovider.h --- a/kded/configvalueprovider.h +++ b/kded/configvalueprovider.h @@ -43,6 +43,7 @@ QString iconsInMenus() const; QString toolbarStyle(ToolbarStyleNotation notation) const; QString scrollbarBehavior() const; + QString preferDarkTheme() const; private: QString toolbarStyleInDesiredNotation(const QString &kdeConfigValue, ToolbarStyleNotation notation) const; diff --git a/kded/configvalueprovider.cpp b/kded/configvalueprovider.cpp --- a/kded/configvalueprovider.cpp +++ b/kded/configvalueprovider.cpp @@ -20,6 +20,7 @@ #include #include +#include #include #include @@ -110,6 +111,21 @@ } } +QString ConfigValueProvider::preferDarkTheme() const +{ + kdeglobalsConfig->reparseConfiguration(); + KConfigGroup colorsConfigGroup = kdeglobalsConfig->group(QStringLiteral("Colors:Window")); + QColor windowBackgroundColor = colorsConfigGroup.readEntry(QStringLiteral("BackgroundNormal"), QColor(239, 240, 241)); + const int windowBackgroundGray = qGray(windowBackgroundColor.rgb()); + + // We use heuristic to determine if current color scheme is dark or not + if (windowBackgroundGray >= 192) { + return QStringLiteral("0"); + } else { + return QStringLiteral("1"); + } +} + QString ConfigValueProvider::toolbarStyleInDesiredNotation(const QString &kdeConfigValue, ConfigValueProvider::ToolbarStyleNotation notation) const { QStringList toolbarStyles {}; diff --git a/kded/gtkconfig.h b/kded/gtkconfig.h --- a/kded/gtkconfig.h +++ b/kded/gtkconfig.h @@ -63,6 +63,7 @@ void setIconsInMenus() const; void setToolbarStyle() const; void setScrollbarBehavior() const; + void setDarkThemePreference() const; void applyAllSettings() const; diff --git a/kded/gtkconfig.cpp b/kded/gtkconfig.cpp --- a/kded/gtkconfig.cpp +++ b/kded/gtkconfig.cpp @@ -115,6 +115,12 @@ ConfigEditor::setGtk3ConfigValueXSettingsd(QStringLiteral("Gtk/PrimaryButtonWarpsSlider"), scrollbarBehavior); } +void GtkConfig::setDarkThemePreference() const +{ + const QString preferDarkTheme = configValueProvider->preferDarkTheme(); + ConfigEditor::setGtk3ConfigValueSettingsIni(QStringLiteral("gtk-application-prefer-dark-theme"), preferDarkTheme); +} + void GtkConfig::applyAllSettings() const { setFont(); @@ -124,6 +130,7 @@ setIconsInMenus(); setToolbarStyle(); setScrollbarBehavior(); + setDarkThemePreference(); } void GtkConfig::onGlobalSettingsChange(int settingsChangeType, int arg) const @@ -139,6 +146,8 @@ setToolbarStyle(); } else if (changeType == SettingsChangeType::Settings && settingsCategory == SettingsCategory::Mouse) { setScrollbarBehavior(); + } else if (changeType == SettingsChangeType::Palette) { + setDarkThemePreference(); } } diff --git a/src/appearancegtk3.h b/src/appearancegtk3.h --- a/src/appearancegtk3.h +++ b/src/appearancegtk3.h @@ -36,8 +36,6 @@ bool loadSettings() override; bool saveSettings(const QString &file) const override; bool loadSettings(const QString &path) override; - bool getApplicationPreferDarkTheme() const; - void setApplicationPreferDarkTheme(bool enable); private: QString defaultConfigFile() const; diff --git a/src/appearancegtk3.cpp b/src/appearancegtk3.cpp --- a/src/appearancegtk3.cpp +++ b/src/appearancegtk3.cpp @@ -29,7 +29,6 @@ #include #include -#include #include "appearancegtk3.h" @@ -64,7 +63,6 @@ KConfigGroup group(file, QStringLiteral("Settings")); group.writeEntry(QStringLiteral("gtk-theme-name"), m_settings["theme"]); - group.writeEntry(QStringLiteral("gtk-application-prefer-dark-theme"), m_settings[QStringLiteral("application_prefer_dark_theme")]); const bool sync = group.sync(); Q_ASSERT(sync); @@ -80,12 +78,9 @@ return false; } - m_settings = QMap { - {QStringLiteral("application_prefer_dark_theme"), QStringLiteral("false")} - }; + m_settings.clear(); m_settings[QStringLiteral("theme")] = group.readEntry(QStringLiteral("gtk-theme-name")); - m_settings[QStringLiteral("application_prefer_dark_theme")] = group.readEntry(QStringLiteral("gtk-application-prefer-dark-theme")); for(auto it = m_settings.begin(); it != m_settings.end(); ) { if (it.value().isEmpty()) { it = m_settings.erase(it); @@ -111,16 +106,6 @@ return root + '/' + configFileName(); } -bool AppearanceGTK3::getApplicationPreferDarkTheme() const -{ - return m_settings[QStringLiteral("application_prefer_dark_theme")] == QStringLiteral("1") || m_settings[QStringLiteral("application_prefer_dark_theme")] == QStringLiteral("true"); -} - -void AppearanceGTK3::setApplicationPreferDarkTheme(bool enable) -{ - m_settings[QStringLiteral("application_prefer_dark_theme")] = enable ? QStringLiteral("true") : QStringLiteral("false"); -} - bool AppearanceGTK3::saveSettings(const QString& file) const { auto cfg = KSharedConfig::openConfig(file, KConfig::NoGlobals); @@ -148,8 +133,6 @@ g_autoptr(GSettings) gsettings = g_settings_new("org.gnome.desktop.interface"); g_settings_set_string(gsettings, "gtk-theme", m_settings["theme"].toUtf8().constData()); - g_object_set(gtk_settings_get_default(), "gtk-application-prefer-dark-theme", getApplicationPreferDarkTheme(), nullptr); - auto cfg = KSharedConfig::openConfig(configFileName(), KConfig::NoGlobals); return saveSettings(cfg); } diff --git a/src/appearencegtk.h b/src/appearencegtk.h --- a/src/appearencegtk.h +++ b/src/appearencegtk.h @@ -41,11 +41,9 @@ void setTheme(const QString &); void setThemeGtk3(const QString &theme); - void setApplicationPreferDarkTheme(bool enable); QString getTheme() const; QString getThemeGtk3() const; - bool getApplicationPreferDarkTheme() const; bool loadFileConfig(); bool saveFileConfig(); diff --git a/src/appearencegtk.cpp b/src/appearencegtk.cpp --- a/src/appearencegtk.cpp +++ b/src/appearencegtk.cpp @@ -58,16 +58,6 @@ return gtk3Appearance()->setTheme(name); } -bool AppearenceGTK::getApplicationPreferDarkTheme() const -{ - return ((AppearanceGTK3*)gtk3Appearance())->getApplicationPreferDarkTheme(); -} - -void AppearenceGTK::setApplicationPreferDarkTheme(bool enable) -{ - return ((AppearanceGTK3*)gtk3Appearance())->setApplicationPreferDarkTheme(enable); -} - bool AppearenceGTK::loadFileConfig() { bool correct = false; diff --git a/src/gtkconfigkcmodule.cpp b/src/gtkconfigkcmodule.cpp --- a/src/gtkconfigkcmodule.cpp +++ b/src/gtkconfigkcmodule.cpp @@ -93,7 +93,6 @@ // UI changes connect(ui->cb_theme, SIGNAL(currentIndexChanged(int)), this, SLOT(appChanged())); connect(ui->cb_theme_gtk3, SIGNAL(currentIndexChanged(int)), this, SLOT(appChanged())); - connect(ui->checkBox_theme_gtk3_prefer_dark, &QAbstractButton::clicked, this, >KConfigKCModule::appChanged); // Preview updates connect(ui->gtk2Preview, &QAbstractButton::clicked, this, >KConfigKCModule::runGtk2IfNecessary); @@ -126,7 +125,6 @@ { appareance->setThemeGtk3(ui->cb_theme_gtk3->currentText()); appareance->setTheme(ui->cb_theme->currentText()); - appareance->setApplicationPreferDarkTheme(ui->checkBox_theme_gtk3_prefer_dark->isChecked()); } void GTKConfigKCModule::showThemeGHNS() @@ -348,10 +346,6 @@ useConfig ? appareance->getThemeGtk3() : ui->cb_theme_gtk3->currentText(), appareance->gtk3Appearance()->installedThemesNames()); - // Dark theme for gtk3 - ui->checkBox_theme_gtk3_prefer_dark->setChecked(appareance->getApplicationPreferDarkTheme()); - - m_saveEnabled = wasenabled; emit changed(true); } diff --git a/src/ui/gui.ui b/src/ui/gui.ui --- a/src/ui/gui.ui +++ b/src/ui/gui.ui @@ -90,13 +90,6 @@ - - - - Prefer dark theme - - - @@ -162,7 +155,4 @@ - - - diff --git a/tests/configsavetest.cpp b/tests/configsavetest.cpp --- a/tests/configsavetest.cpp +++ b/tests/configsavetest.cpp @@ -17,11 +17,6 @@ static void fillValues(QScopedPointer& a) { a->setTheme("a"); - - auto a3 = dynamic_cast(a.data()); - if (a3) { - a3->setApplicationPreferDarkTheme(false); - } } void compareAppearances(QScopedPointer& reloaded, QScopedPointer& instance)