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:
parent
2d7972e059
commit
3aa05a9481
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user