Package Details: qt5ct-kde 1.8-4

Git Clone URL: https://aur.archlinux.org/qt5ct-kde.git (read-only, click to copy)
Package Base: qt5ct-kde
Description: Qt5 Configuration Utility, patched to work correctly with KDE applications
Upstream URL: https://qt5ct.sourceforge.io/
Licenses: BSD
Conflicts: qt5ct
Provides: qt5ct
Submitter: ilya-fedin
Maintainer: ilya-fedin
Last Packager: ilya-fedin
Votes: 17
Popularity: 1.84
First Submitted: 2021-07-11 08:02 (UTC)
Last Updated: 2024-04-06 01:14 (UTC)

Dependencies (3)

Required by (10)

Sources (2)

Pinned Comments

ilya-fedin commented on 2021-07-11 08:04 (UTC) (edited on 2024-03-12 00:09 (UTC) by ilya-fedin)

Some user guide:

My patchset contains multiple fixes/features in comparison to vanilla qt5ct:

  1. KDE color schemes support
  2. KDE QML applications theming support
  3. KDE's icon engine is used, fixing monochrome icons colors (I saw problems with e.g. Adapta Kvantum theme on KDE applications toolbars, like dolphin, they're grey when should be white)

xdg-desktop-portal allows you to have KDE dialogs in non-KDE environment without installing plasma-integration package. To get them, all you need is:

  1. Install xdg-desktop-portal + xdg-desktop-portal-kde
  2. If you have xdg-desktop-portal-gtk installed, rename usr/share/xdg-desktop-portal/portals/gtk.portal to zz-gtk.portal (backend priority is in alphabetical order). You can add that file to NoExtract in pacman.conf.
  3. Ensure that session dbus instance is running correctly.

How to ensure that session dbus instance is running correctly when using xinit (DMs should already do the right thing for you):

  1. Ensure you don't have dbus-launch nor dbus-session-run in .xinitrc
  2. Ensure you copied the for f in /etc/X11/xinit/xinitrc.d/?*.sh loop from /etc/X11/xinit/xinitrc to your .xinitrc
  3. Ensure you have no errors in systemctl --user status dbus and the service is running. You shouldn't enable the service, it should be activated by dbus.socket.

In case of Wayland, you may need to integrate your WM with systemd (that's what one of the scripts in /etc/X11/xinit/xinitrc.d does for X11): https://github.com/swaywm/sway/wiki#gtk-applications-take-20-seconds-to-start

Latest Comments

« First ‹ Previous 1 2 3 Next › Last »

juniorsupertux commented on 2023-05-01 10:20 (UTC)

Yes, I did mean the Kirigami message. However, the messages don't appear when setting the two environment variables to Fusion when running Kirigami QtQuick applications. Moreover, some Kirigami applications segfaults directly (Kalendar & Audiotube from what I've tested) and cannot be launched.

ilya-fedin commented on 2023-04-30 15:49 (UTC)

What 'the error' is? The error string you previously posted refers to a bug in the KDE's Kirigami framework. I believe you can just ignore it as most errors from QtQuick applications.

juniorsupertux commented on 2023-04-30 15:31 (UTC)

Wait, the issue persists. I was trying the wrong thing.

When I execute when the theme is set to Fusion in qt5ct:

QT_QPA_PLATFORMTHEME=qt5ct QT_STYLE_OVERRIDE=qt5ct-style audiotube

the error exist.

However, when I execute the following:

QT_QPA_PLATFORMTHEME=Fustion QT_STYLE_OVERRIDE=Fusion audiotube

It executes normally

juniorsupertux commented on 2023-04-30 15:12 (UTC)

After some toggling, I noticed that it only occurs when using kvantum themes, so it's more related to kvantum. Sorry for any inconvenience.

ilya-fedin commented on 2023-04-30 06:09 (UTC)

Can you prove somehow that this is due to this package? The error doesn't sound related.

juniorsupertux commented on 2023-04-30 05:47 (UTC)

This package works like charm on some KDE QtQuick applications. However, most outputs file:///usr/lib/qt5/qml/org/kde/kirigami.2/styles/Plasma/Theme.qml:73: TypeError: Cannot read property 'Theme' of undefined and few even segfaults.

TheKarion commented on 2023-03-22 17:02 (UTC)

The single best package in the aur. Makes qt5ct actually work like it's supposed to

q234rty commented on 2023-03-15 17:19 (UTC)

FWIW, here's the rebased patch onto 1.6:

diff -Naur qt5ct-1.6/CMakeLists.txt qt5ct-kde-1.6/CMakeLists.txt
--- qt5ct-1.6/CMakeLists.txt    2023-02-26 16:39:25.000000000 +0000
+++ qt5ct-kde-1.6/CMakeLists.txt    2023-03-12 18:31:39.766040816 +0000
@@ -25,8 +25,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)

@@ -45,7 +48,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 -Naur qt5ct-1.6/src/qt5ct/appearancepage.cpp qt5ct-kde-1.6/src/qt5ct/appearancepage.cpp
--- qt5ct-1.6/src/qt5ct/appearancepage.cpp  2023-02-26 16:39:25.000000000 +0000
+++ qt5ct-kde-1.6/src/qt5ct/appearancepage.cpp  2023-03-12 18:41:38.195132763 +0000
@@ -378,7 +378,7 @@
 {
     QDir dir(path);
     dir.setFilter(QDir::Files);
-    dir.setNameFilters(QStringList() << "*.conf");
+    dir.setNameFilters(QStringList() << "*.conf" << "*.colors");

     for(const QFileInfo &info : dir.entryInfoList())
     {
diff -Naur qt5ct-1.6/src/qt5ct-common/qt5ct.cpp qt5ct-kde-1.6/src/qt5ct-common/qt5ct.cpp
--- qt5ct-1.6/src/qt5ct-common/qt5ct.cpp    2023-02-26 16:39:25.000000000 +0000
+++ qt5ct-kde-1.6/src/qt5ct-common/qt5ct.cpp    2023-03-12 18:37:10.842983985 +0000
@@ -112,6 +112,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 -Naur qt5ct-1.6/src/qt5ct-qtplugin/CMakeLists.txt qt5ct-kde-1.6/src/qt5ct-qtplugin/CMakeLists.txt
--- qt5ct-1.6/src/qt5ct-qtplugin/CMakeLists.txt 2023-02-26 16:39:25.000000000 +0000
+++ qt5ct-kde-1.6/src/qt5ct-qtplugin/CMakeLists.txt 2023-03-12 18:38:42.957051979 +0000
@@ -9,5 +9,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 qt5ct-common)
+target_link_libraries(qt5ct-qtplugin PRIVATE Qt5::Widgets Qt5::GuiPrivate Qt5::DBus Qt5::QuickControls2 Qt5::ThemeSupportPrivate qt5ct-common KF5::ConfigCore KF5::ConfigWidgets KF5::IconThemes)
 install(TARGETS qt5ct-qtplugin DESTINATION ${PLUGINDIR}/platformthemes)
diff -Naur qt5ct-1.6/src/qt5ct-qtplugin/qt5ctplatformtheme.cpp qt5ct-kde-1.6/src/qt5ct-qtplugin/qt5ctplatformtheme.cpp
--- qt5ct-1.6/src/qt5ct-qtplugin/qt5ctplatformtheme.cpp 2023-02-26 16:39:25.000000000 +0000
+++ qt5ct-kde-1.6/src/qt5ct-qtplugin/qt5ctplatformtheme.cpp 2023-03-12 18:37:10.846317482 +0000
@@ -45,6 +45,7 @@
 #endif
 #include <QFile>
 #include <QFileSystemWatcher>
+#include <QQuickStyle>

 #include "qt5ct.h"
 #include "qt5ctplatformtheme.h"
@@ -58,6 +59,11 @@
 #include <QStringList>
 #include <qpa/qplatformthemefactory_p.h>

+#include <ksharedconfig.h>
+#include <kcolorscheme.h>
+#include <kiconengine.h>
+#include <kiconloader.h>
+
 Q_LOGGING_CATEGORY(lqt5ct, "qt5ct", QtWarningMsg)

 //QT_QPA_PLATFORMTHEME=qt5ct
@@ -73,12 +79,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()
@@ -185,6 +196,11 @@
 }
 #endif

+QIconEngine *Qt5CTPlatformTheme::createIconEngine(const QString &iconName) const
+{
+    return new KIconEngine(iconName, KIconLoader::global());
+}
+
 void Qt5CTPlatformTheme::applySettings()
 {
     if(!QGuiApplication::desktopSettingsAware() || m_isIgnored)
@@ -299,7 +315,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
@@ -464,3 +488,30 @@

     return customPalette;
 }
+
+bool Qt5CTPlatformTheme::eventFilter(QObject *obj, QEvent *e)
+{
+    if(obj == qApp && e->type() == QEvent::DynamicPropertyChange)
+    {
+        QDynamicPropertyChangeEvent *ee = static_cast<QDynamicPropertyChangeEvent*>(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 -Naur qt5ct-1.6/src/qt5ct-qtplugin/qt5ctplatformtheme.h qt5ct-kde-1.6/src/qt5ct-qtplugin/qt5ctplatformtheme.h
--- qt5ct-1.6/src/qt5ct-qtplugin/qt5ctplatformtheme.h   2023-02-26 16:39:25.000000000 +0000
+++ qt5ct-kde-1.6/src/qt5ct-qtplugin/qt5ctplatformtheme.h   2023-03-12 18:37:10.846317482 +0000
@@ -87,10 +87,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<QKeySequence> 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

TheKarion commented on 2023-02-27 20:56 (UTC)

Not out of date, package is the only proper working version of qt5ct

ilya-fedin commented on 2022-09-12 16:19 (UTC)

Would be nice to get stack trace