From 1a3d9bcfa2df13246e4d920bc60567fa08d2e2d0 Mon Sep 17 00:00:00 2001 From: outfoxxed Date: Mon, 26 Jun 2023 00:30:08 -0700 Subject: [PATCH] Use arch patched qt5ct --- modules/overlay-pkgs/default.nix | 1 + modules/overlay-pkgs/qt5ct/default.nix | 16 ++ modules/overlay-pkgs/qt5ct/patch.patch | 200 +++++++++++++++++++++++++ 3 files changed, 217 insertions(+) create mode 100644 modules/overlay-pkgs/qt5ct/default.nix create mode 100755 modules/overlay-pkgs/qt5ct/patch.patch diff --git a/modules/overlay-pkgs/default.nix b/modules/overlay-pkgs/default.nix index 444881b..2bbc392 100644 --- a/modules/overlay-pkgs/default.nix +++ b/modules/overlay-pkgs/default.nix @@ -1,5 +1,6 @@ { nixpkgs.overlays = [(final: prev: { kwrite = final.callPackage ./kwrite.nix {}; + qt5ct = final.callPackage ./qt5ct {}; })]; } diff --git a/modules/overlay-pkgs/qt5ct/default.nix b/modules/overlay-pkgs/qt5ct/default.nix new file mode 100644 index 0000000..39f3a5c --- /dev/null +++ b/modules/overlay-pkgs/qt5ct/default.nix @@ -0,0 +1,16 @@ +{ pkgs, ... }: with pkgs; +stdenv.mkDerivation { + pname = "qt5ct"; + version = "1.5"; + src = builtins.fetchurl { + url = "https://downloads.sourceforge.net/project/qt5ct/qt5ct-1.5.tar.bz2"; + sha256 = "14742vs32m98nbfb5mad0i8ciff5f45gfcb5v03p4hh2dvhhqgfn"; + }; + patches = [ ./patch.patch ]; + nativeBuildInputs = with libsForQt5; [ qmake qttools wrapQtAppsHook ]; + buildInputs = with libsForQt5; [ qtbase qtsvg qqc2-desktop-style qtquickcontrols2 kconfig kiconthemes ]; + qmakeFlags = [ + "LRELEASE_EXECUTABLE=${lib.getDev libsForQt5.qttools}/bin/lrelease" + "PLUGINDIR=${placeholder "out"}/${libsForQt5.qtbase.qtPluginPrefix}" + ]; +} diff --git a/modules/overlay-pkgs/qt5ct/patch.patch b/modules/overlay-pkgs/qt5ct/patch.patch new file mode 100755 index 0000000..be3cc23 --- /dev/null +++ b/modules/overlay-pkgs/qt5ct/patch.patch @@ -0,0 +1,200 @@ +diff -ur original/CMakeLists.txt patched/CMakeLists.txt +--- original/CMakeLists.txt 2021-10-01 11:20:38.000000000 -0700 ++++ patched/CMakeLists.txt 2022-04-01 02:08:48.808150703 -0700 +@@ -24,8 +24,11 @@ + + ADD_DEFINITIONS(-DQT_DISABLE_DEPRECATED_BEFORE=0x050C00 -DUSE_WIDGETS) + +-find_package(Qt5 ${QT_MINIMUM_VERSION} COMPONENTS Widgets Concurrent LinguistTools DBus ThemeSupport REQUIRED) ++find_package(Qt5 ${QT_MINIMUM_VERSION} COMPONENTS Widgets Concurrent LinguistTools DBus QuickControls2 ThemeSupport REQUIRED) + find_package(Qt5Gui ${QT_MINIMUM_VERSION} CONFIG REQUIRED Private) ++find_package(KF5Config REQUIRED) ++find_package(KF5ConfigWidgets REQUIRED) ++find_package(KF5IconThemes REQUIRED) + + get_target_property(QT_LRELEASE_EXECUTABLE Qt5::lrelease IMPORTED_LOCATION) + +@@ -44,7 +47,9 @@ + message(FATAL_ERROR "Could NOT find qtpaths executable") + endif() + +-execute_process(COMMAND ${QT_QTPATHS_EXECUTABLE} --plugin-dir OUTPUT_VARIABLE PLUGINDIR OUTPUT_STRIP_TRAILING_WHITESPACE) ++if(NOT PLUGINDIR) ++ execute_process(COMMAND ${QT_QTPATHS_EXECUTABLE} --plugin-dir OUTPUT_VARIABLE PLUGINDIR OUTPUT_STRIP_TRAILING_WHITESPACE) ++endif() + message(STATUS "Plugin path: " ${PLUGINDIR}) + + message(STATUS "Generating translations ...") +diff -ur original/src/qt5ct/appearancepage.cpp patched/src/qt5ct/appearancepage.cpp +--- original/src/qt5ct/appearancepage.cpp 2021-10-01 11:20:38.000000000 -0700 ++++ patched/src/qt5ct/appearancepage.cpp 2022-04-01 02:08:48.809150748 -0700 +@@ -86,6 +86,8 @@ + #else + keys = QPlatformThemeFactory::keys(); + m_ui->dialogComboBox->addItem(tr("Default"), "default"); ++ if(keys.contains("xdgdesktopportal")) ++ m_ui->dialogComboBox->addItem("XDG Desktop Portal", "xdgdesktopportal"); + if(keys.contains("gtk2") || keys.contains("qt5gtk2")) + m_ui->dialogComboBox->addItem("GTK2", "gtk2"); + else if(keys.contains("gtk3") || keys.contains("qt5gtk3")) +@@ -390,7 +392,7 @@ + { + QDir dir(path); + dir.setFilter(QDir::Files); +- dir.setNameFilters(QStringList() << "*.conf"); ++ dir.setNameFilters(QStringList() << "*.conf" << "*.colors"); + + for(QFileInfo info : dir.entryInfoList()) + { +diff -ur original/src/qt5ct/qt5ct.cpp patched/src/qt5ct/qt5ct.cpp +--- original/src/qt5ct/qt5ct.cpp 2021-10-01 11:20:38.000000000 -0700 ++++ patched/src/qt5ct/qt5ct.cpp 2022-04-01 02:08:48.809150748 -0700 +@@ -111,6 +111,7 @@ + for(const QString &p : QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation)) + { + paths << (p + QLatin1String("/qt5ct/colors")); ++ paths << (p + QLatin1String("/color-schemes")); + } + paths << QLatin1String(QT5CT_DATADIR"/qt5ct/colors"); + paths.removeDuplicates(); +diff -ur original/src/qt5ct-qtplugin/CMakeLists.txt patched/src/qt5ct-qtplugin/CMakeLists.txt +--- original/src/qt5ct-qtplugin/CMakeLists.txt 2021-10-01 11:20:38.000000000 -0700 ++++ patched/src/qt5ct-qtplugin/CMakeLists.txt 2022-04-01 02:08:48.812150883 -0700 +@@ -10,5 +10,5 @@ + + add_library(qt5ct-qtplugin MODULE ${app_SRCS}) + set_target_properties(qt5ct-qtplugin PROPERTIES OUTPUT_NAME qt5ct) +-target_link_libraries(qt5ct-qtplugin PRIVATE Qt5::Widgets Qt5::GuiPrivate Qt5::DBus Qt5::ThemeSupportPrivate) ++target_link_libraries(qt5ct-qtplugin PRIVATE Qt5::Widgets Qt5::GuiPrivate Qt5::DBus Qt5::QuickControls2 Qt5::ThemeSupportPrivate KF5::ConfigCore KF5::ConfigWidgets KF5::IconThemes) + install(TARGETS qt5ct-qtplugin DESTINATION ${PLUGINDIR}/platformthemes) +diff -ur original/src/qt5ct-qtplugin/qt5ctplatformtheme.cpp patched/src/qt5ct-qtplugin/qt5ctplatformtheme.cpp +--- original/src/qt5ct-qtplugin/qt5ctplatformtheme.cpp 2021-10-01 11:20:38.000000000 -0700 ++++ patched/src/qt5ct-qtplugin/qt5ctplatformtheme.cpp 2022-04-01 02:08:48.812150883 -0700 +@@ -45,6 +45,7 @@ + #endif + #include + #include ++#include + + #include + #include "qt5ctplatformtheme.h" +@@ -60,6 +61,11 @@ + #include + #endif + ++#include ++#include ++#include ++#include ++ + Q_LOGGING_CATEGORY(lqt5ct, "qt5ct", QtWarningMsg) + + //QT_QPA_PLATFORMTHEME=qt5ct +@@ -75,12 +81,17 @@ + QMetaObject::invokeMethod(this, "createFSWatcher", Qt::QueuedConnection); + #endif + QGuiApplication::setFont(m_generalFont); ++ //if the user has explicitly set something else, don't meddle ++ if (QQuickStyle::name().isEmpty()) { ++ QQuickStyle::setStyle(QLatin1String("org.kde.desktop")); ++ } + } + qCDebug(lqt5ct) << "using qt5ct plugin"; + #ifdef QT_WIDGETS_LIB + if(!QStyleFactory::keys().contains("qt5ct-style")) + qCCritical(lqt5ct) << "unable to find qt5ct proxy style"; + #endif ++ QCoreApplication::instance()->installEventFilter(this); + } + + Qt5CTPlatformTheme::~Qt5CTPlatformTheme() +@@ -195,6 +206,11 @@ + } + #endif + ++QIconEngine *Qt5CTPlatformTheme::createIconEngine(const QString &iconName) const ++{ ++ return new KIconEngine(iconName, KIconLoader::global()); ++} ++ + void Qt5CTPlatformTheme::applySettings() + { + if(!QGuiApplication::desktopSettingsAware() || m_isIgnored) +@@ -313,7 +329,15 @@ + if(!schemePath.isEmpty() && settings.value("custom_palette", false).toBool()) + { + schemePath = Qt5CT::resolvePath(schemePath); //replace environment variables +- m_palette = new QPalette(loadColorScheme(schemePath)); ++ if(schemePath.endsWith(".colors")) ++ { ++ m_palette = new QPalette(KColorScheme::createApplicationPalette(KSharedConfig::openConfig(schemePath))); ++ qApp->setProperty("KDE_COLOR_SCHEME_PATH", schemePath); ++ } ++ else ++ { ++ m_palette = new QPalette(loadColorScheme(schemePath)); ++ } + } + m_iconTheme = settings.value("icon_theme").toString(); + //load dialogs +@@ -480,3 +504,30 @@ + + return customPalette; + } ++ ++bool Qt5CTPlatformTheme::eventFilter(QObject *obj, QEvent *e) ++{ ++ if(obj == qApp && e->type() == QEvent::DynamicPropertyChange) ++ { ++ QDynamicPropertyChangeEvent *ee = static_cast(e); ++ if(ee->propertyName() == "KDE_COLOR_SCHEME_PATH") ++ { ++ if(qApp->property("KDE_COLOR_SCHEME_PATH").isNull()) ++ { ++ QSettings settings(Qt5CT::configFile(), QSettings::IniFormat); ++ settings.beginGroup("Appearance"); ++ QString schemePath = settings.value("color_scheme_path").toString(); ++ if(!schemePath.isEmpty() && settings.value("custom_palette", false).toBool()) ++ { ++ schemePath = Qt5CT::resolvePath(schemePath); //replace environment variables ++ if(schemePath.endsWith(".colors")) ++ { ++ qApp->setProperty("KDE_COLOR_SCHEME_PATH", schemePath); ++ applySettings(); ++ } ++ } ++ } ++ } ++ } ++ return QObject::eventFilter(obj, e); ++} +diff -ur original/src/qt5ct-qtplugin/qt5ctplatformtheme.h patched/src/qt5ct-qtplugin/qt5ctplatformtheme.h +--- original/src/qt5ct-qtplugin/qt5ctplatformtheme.h 2021-10-01 11:20:38.000000000 -0700 ++++ patched/src/qt5ct-qtplugin/qt5ctplatformtheme.h 2022-04-01 02:08:48.812150883 -0700 +@@ -91,10 +91,13 @@ + //virtual QPixmap fileIconPixmap(const QFileInfo &fileInfo, const QSizeF &size, + // QPlatformTheme::IconOptions iconOptions = 0) const; + +- //virtual QIconEngine *createIconEngine(const QString &iconName) const; ++ virtual QIconEngine *createIconEngine(const QString &iconName) const; + //virtual QList keyBindings(QKeySequence::StandardKey key) const; + //virtual QString standardButtonText(int button) const; + ++protected: ++ bool eventFilter(QObject *obj, QEvent *e) override; ++ + private slots: + void applySettings(); + #ifdef QT_WIDGETS_LIB +diff -ur original/src/qt5ct-qtplugin/qt5ct-qtplugin.pro patched/src/qt5ct-qtplugin/qt5ct-qtplugin.pro +--- original/src/qt5ct-qtplugin/qt5ct-qtplugin.pro 2021-10-01 11:20:38.000000000 -0700 ++++ patched/src/qt5ct-qtplugin/qt5ct-qtplugin.pro 2022-04-01 02:08:48.812150883 -0700 +@@ -4,7 +4,7 @@ + TARGET = qt5ct + CONFIG += plugin + +-QT += gui-private ++QT += gui-private quickcontrols2 KConfigCore KConfigWidgets KIconThemes + + !equals(DISABLE_DBUS, 1):qtHaveModule(dbus):greaterThan(QT_MINOR_VERSION, 5) { + greaterThan(QT_MINOR_VERSION, 7) {