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;
|
using namespace Qt::StringLiterals;
|
||||||
|
|
||||||
class QXdgDesktopPortalThemePrivate : public QPlatformThemePrivate
|
class QXdgDesktopPortalThemePrivate : public QObject
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
enum XdgColorschemePref {
|
enum XdgColorschemePref {
|
||||||
None,
|
None,
|
||||||
@ -30,7 +31,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
QXdgDesktopPortalThemePrivate()
|
QXdgDesktopPortalThemePrivate()
|
||||||
: QPlatformThemePrivate()
|
: QObject()
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
~QXdgDesktopPortalThemePrivate()
|
~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;
|
QPlatformTheme *baseTheme = nullptr;
|
||||||
uint fileChooserPortalVersion = 0;
|
uint fileChooserPortalVersion = 0;
|
||||||
Qt::ColorScheme colorScheme = Qt::ColorScheme::Unknown;
|
Qt::ColorScheme colorScheme = Qt::ColorScheme::Unknown;
|
||||||
@ -126,6 +138,11 @@ QXdgDesktopPortalTheme::QXdgDesktopPortalTheme()
|
|||||||
const QXdgDesktopPortalThemePrivate::XdgColorschemePref xdgPref = static_cast<QXdgDesktopPortalThemePrivate::XdgColorschemePref>(dbusVariant.variant().toUInt());
|
const QXdgDesktopPortalThemePrivate::XdgColorschemePref xdgPref = static_cast<QXdgDesktopPortalThemePrivate::XdgColorschemePref>(dbusVariant.variant().toUInt());
|
||||||
d->colorScheme = QXdgDesktopPortalThemePrivate::colorSchemeFromXdgPref(xdgPref);
|
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
|
QPlatformMenuItem* QXdgDesktopPortalTheme::createPlatformMenuItem() const
|
||||||
@ -247,3 +264,5 @@ QString QXdgDesktopPortalTheme::standardButtonText(int button) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
#include "qxdgdesktopportaltheme.moc"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user