I'm not sure if this backtrace helps: https://bugs.kde.org/show_bug.cgi?id=469168#c2 I also reported the bug to the audiotube dev to see if they can assist
Search Criteria
Package Details: qt5ct-kde 1.8-15
Package Actions
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: | 16 |
Popularity: | 0.024758 |
First Submitted: | 2021-07-11 08:02 (UTC) |
Last Updated: | 2024-10-25 18:56 (UTC) |
Dependencies (3)
- qqc2-desktop-style5
- cmake (cmake-gitAUR) (make)
- qt5-tools (make)
Required by (10)
- artix-dark-theme-git (requires qt5ct) (optional)
- autokey-git (requires qt5ct)
- cameracontrol-bin (requires qt5ct) (optional)
- editcp (requires qt5ct)
- kdeltachat-git (requires qt5ct)
- lxqt-qt5ct (requires qt5ct)
- nscde (requires qt5ct) (optional)
- nscde-git (requires qt5ct) (optional)
- paperde (requires qt5ct)
- wayfire-desktop-git (requires qt5ct)
Sources (2)
juniorsupertux commented on 2023-05-01 11:27 (UTC)
ilya-fedin commented on 2023-05-01 10:33 (UTC)
qqc2-desktop-style uses Kirigami itself, so it can add additional Kirigami-related warnings likely. I can't help with crashes without backtraces though (obtaining which would likely involve rebuilding Qt, KDE libraries and applications themselves with debug symbols).
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
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:
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:
How to ensure that session dbus instance is running correctly when using xinit (DMs should already do the right thing for you):
for f in /etc/X11/xinit/xinitrc.d/?*.sh
loop from /etc/X11/xinit/xinitrc to your .xinitrcsystemctl --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