QXdgDesktopPortalTheme: watch for color scheme changes on runtime

Subscribe to SettingChanged signal from xdg-desktop-portal to get info
when color scheme changes and update it on runtime.

Fixes: QTBUG-116197
Pick-to: 6.6
Change-Id: I7803ea76bc1ac0749d60ee55c1c0d9051dad210a
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
(cherry picked from commit a833d5682ac44571e13568336f2bd3ec7deb1d6d)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Jan Grulich 2024-03-22 12:09:52 +01:00 committed by Qt Cherry-pick Bot
parent 2d7972e059
commit 3aa05a9481

View File

@ -20,8 +20,9 @@ QT_BEGIN_NAMESPACE
using namespace Qt::StringLiterals;
class QXdgDesktopPortalThemePrivate : public QPlatformThemePrivate
{
class QXdgDesktopPortalThemePrivate : public QObject
{
Q_OBJECT
public:
enum XdgColorschemePref {
None,
@ -30,7 +31,7 @@ public:
};
QXdgDesktopPortalThemePrivate()
: QPlatformThemePrivate()
: QObject()
{ }
~QXdgDesktopPortalThemePrivate()
@ -62,6 +63,17 @@ public:
}
}
public Q_SLOTS:
void settingChanged(const QString &group, const QString &key,
const QDBusVariant &value)
{
if (group == "org.freedesktop.appearance"_L1 && key == "color-scheme"_L1) {
colorScheme = colorSchemeFromXdgPref(static_cast<XdgColorschemePref>(value.variant().toUInt()));
QWindowSystemInterface::handleThemeChange();
}
}
public:
QPlatformTheme *baseTheme = nullptr;
uint fileChooserPortalVersion = 0;
Qt::ColorScheme colorScheme = Qt::ColorScheme::Unknown;
@ -126,6 +138,11 @@ QXdgDesktopPortalTheme::QXdgDesktopPortalTheme()
const QXdgDesktopPortalThemePrivate::XdgColorschemePref xdgPref = static_cast<QXdgDesktopPortalThemePrivate::XdgColorschemePref>(dbusVariant.variant().toUInt());
d->colorScheme = QXdgDesktopPortalThemePrivate::colorSchemeFromXdgPref(xdgPref);
}
QDBusConnection::sessionBus().connect(
"org.freedesktop.portal.Desktop"_L1, "/org/freedesktop/portal/desktop"_L1,
"org.freedesktop.portal.Settings"_L1, "SettingChanged"_L1, d_ptr.get(),
SLOT(settingChanged(QString, QString, QDBusVariant)));
}
QPlatformMenuItem* QXdgDesktopPortalTheme::createPlatformMenuItem() const
@ -247,3 +264,5 @@ QString QXdgDesktopPortalTheme::standardButtonText(int button) const
}
QT_END_NAMESPACE
#include "qxdgdesktopportaltheme.moc"