From 969b72c57c81cc5a9be549dd0d501c9e6d2129cb Mon Sep 17 00:00:00 2001 From: Mikhail Zolotukhin Date: Mon, 27 Jan 2020 13:48:00 +0100 Subject: [PATCH] Upgrade theme to Breeze GTK on startup Summary: Also apply it, if the config is empty. This is a port of kconf_update script from `breeze-gtk` repo, but this time it use gtkconfig kded module methods to manipulate config (to avoid code duplication and to write config to all possible configuration storages). BUG: 416635 FIXED-IN: 5.18.0 Test Plan: # Remove `gtk-theme-name=` line in `~/.gtkrc-2.0` file or change it to `BreezyGTK`, `Orion` or `oxygen-gtk` # Run `gtk_theme` executable from `kconf_update` build directory. Line should appear/cahnge to `Breeze` # Remove `gtk-theme-name=` line in `~/.config/gtk-3.0/settings.ini` file or change it to `BreezyGTK`, `Orion` or `oxygen-gtk` # Run `gtk_theme` executable from `kconf_update` build directory. Line should appear/cahnge to `Breeze`, also it should be changed in dconf in `org.gnome.desktop.interface.gtk-theme` prefix and in `~/.config/xsettingsd/xsettingsd.conf` file (`Net/ThemeName "Breeze"` line) Reviewers: fvogt Subscribers: meven, plasma-devel Tags: #plasma Differential Revision: https://phabricator.kde.org/D26891 --- CMakeLists.txt | 1 + kconf_update/CMakeLists.txt | 38 +++++++++++++++++++++++++ kconf_update/gtk_theme.upd | 3 ++ kconf_update/main.cpp | 56 +++++++++++++++++++++++++++++++++++++ kded/configeditor.cpp | 4 +-- 5 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 kconf_update/CMakeLists.txt create mode 100644 kconf_update/gtk_theme.upd create mode 100644 kconf_update/main.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 54be644..72aa16f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,6 +28,7 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake kded/config.h) add_subdirectory(gtkproxies) add_subdirectory(gtk3proxies) add_subdirectory(kded) +add_subdirectory(kconf_update) # add clang-format target for all our real source files file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h) diff --git a/kconf_update/CMakeLists.txt b/kconf_update/CMakeLists.txt new file mode 100644 index 0000000..05a5490 --- /dev/null +++ b/kconf_update/CMakeLists.txt @@ -0,0 +1,38 @@ +add_executable(gtk_theme main.cpp) + +target_sources(gtk_theme + PRIVATE + ../kded/configeditor.cpp +) + +target_link_libraries(gtk_theme + PRIVATE + Qt5::Core + KF5::ConfigCore + ${GIO2_LIBRARY} + ${GOBJECT2_LIBRARY} +) + +target_include_directories(gtk_theme + PRIVATE + ../kded/ + ${GTK3_INCLUDE_DIRS} +) + +target_compile_definitions(gtk_theme + PRIVATE + QT_NO_SIGNALS_SLOTS_KEYWORDS +) + +install( + TARGETS + gtk_theme + DESTINATION + ${LIB_INSTALL_DIR}/kconf_update_bin/ +) +install( + FILES + gtk_theme.upd + DESTINATION + ${KCONF_UPDATE_INSTALL_DIR} +) diff --git a/kconf_update/gtk_theme.upd b/kconf_update/gtk_theme.upd new file mode 100644 index 0000000..6214e77 --- /dev/null +++ b/kconf_update/gtk_theme.upd @@ -0,0 +1,3 @@ +Version=5 +Id=gtk_theme +Script=gtk_theme diff --git a/kconf_update/main.cpp b/kconf_update/main.cpp new file mode 100644 index 0000000..bf9993c --- /dev/null +++ b/kconf_update/main.cpp @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2020 Mikhail Zolotukhin + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License or (at your option) version 3 or any later version + * accepted by the membership of KDE e.V. (or its successor approved + * by the membership of KDE e.V.), which shall act as a proxy + * defined in Section 14 of version 3 of the license. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include + +#include "configeditor.h" + +void upgradeGtk2Theme(); +void upgradeGtk3Theme(); + +int main() { + upgradeGtk2Theme(); + upgradeGtk3Theme(); + return 0; +} + +void upgradeGtk2Theme() { + QString currentGtk2Theme = ConfigEditor::gtk2ConfigValue(QStringLiteral("gtk-theme-name")); + if (currentGtk2Theme.isEmpty() + || currentGtk2Theme == QStringLiteral("oxygen-gtk") + || currentGtk2Theme == QStringLiteral("BreezyGTK") + || currentGtk2Theme == QStringLiteral("Orion") + ) { + ConfigEditor::setGtk2ConfigValue(QStringLiteral("gtk-theme-name"), QStringLiteral("Breeze")); + } +} + +void upgradeGtk3Theme() { + QString currentGtk3Theme = ConfigEditor::gtk3ConfigValueSettingsIni(QStringLiteral("gtk-theme-name")); + if (currentGtk3Theme.isEmpty() + || currentGtk3Theme == QStringLiteral("oxygen-gtk") + || currentGtk3Theme == QStringLiteral("BreezyGTK") + || currentGtk3Theme == QStringLiteral("Orion") + ) { + ConfigEditor::setGtk3ConfigValueDconf(QStringLiteral("gtk-theme"), QStringLiteral("Breeze")); + ConfigEditor::setGtk3ConfigValueSettingsIni(QStringLiteral("gtk-theme-name"), QStringLiteral("Breeze")); + ConfigEditor::setGtk3ConfigValueXSettingsd(QStringLiteral("Net/ThemeName"), QStringLiteral("Breeze")); + } +} diff --git a/kded/configeditor.cpp b/kded/configeditor.cpp index 244fe2c..3074f70 100644 --- a/kded/configeditor.cpp +++ b/kded/configeditor.cpp @@ -109,7 +109,7 @@ QString ConfigEditor::gtk2ConfigValue(const QString& paramName) } } - return QStringLiteral("Breeze"); + return QString(); } QString ConfigEditor::gtk3ConfigValueSettingsIni(const QString& paramName) @@ -120,7 +120,7 @@ QString ConfigEditor::gtk3ConfigValueSettingsIni(const QString& paramName) KSharedConfig::Ptr gtk3Config = KSharedConfig::openConfig(gtk3ConfigPath, KConfig::NoGlobals); KConfigGroup group = gtk3Config->group(QStringLiteral("Settings")); - return group.readEntry(paramName, QStringLiteral("Breeze")); + return group.readEntry(paramName); } -- 2.23.0