diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,6 +28,7 @@ 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 --- /dev/null +++ b/kconf_update/CMakeLists.txt @@ -0,0 +1,38 @@ +add_executable(gtk_theme gtktheme.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 + gtkconfig.upd + DESTINATION + ${KCONF_UPDATE_INSTALL_DIR} +) diff --git a/kconf_update/gtkconfig.upd b/kconf_update/gtkconfig.upd new file mode 100644 --- /dev/null +++ b/kconf_update/gtkconfig.upd @@ -0,0 +1,3 @@ +Version=5 +Id=gtk_theme +Script=gtk_theme diff --git a/kconf_update/gtktheme.cpp b/kconf_update/gtktheme.cpp new file mode 100644 --- /dev/null +++ b/kconf_update/gtktheme.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 --- a/kded/configeditor.cpp +++ b/kded/configeditor.cpp @@ -109,7 +109,7 @@ } } - return QStringLiteral("Breeze"); + return QString(); } QString ConfigEditor::gtk3ConfigValueSettingsIni(const QString& paramName) @@ -120,7 +120,7 @@ KSharedConfig::Ptr gtk3Config = KSharedConfig::openConfig(gtk3ConfigPath, KConfig::NoGlobals); KConfigGroup group = gtk3Config->group(QStringLiteral("Settings")); - return group.readEntry(paramName, QStringLiteral("Breeze")); + return group.readEntry(paramName); }