94 : d_ptr(
new QXdgDesktopPortalThemePrivate)
96 Q_D(QXdgDesktopPortalTheme);
98 const QStringList themeNames = QGuiApplicationPrivate::platform_integration->themeNames();
99 for (
const QString &themeName : themeNames) {
100 if (QXdgDesktopPortalTheme::isXdgPlugin(themeName))
103 d->baseTheme = QPlatformThemeFactory::create(themeName,
nullptr);
108 d->baseTheme = QGuiApplicationPrivate::platform_integration->createPlatformTheme(themeName);
115 d->baseTheme =
new QPlatformTheme;
118 QDBusMessage message = QDBusMessage::createMethodCall(
"org.freedesktop.portal.Desktop"_L1,
119 "/org/freedesktop/portal/desktop"_L1,
120 "org.freedesktop.DBus.Properties"_L1,
122 message <<
"org.freedesktop.portal.FileChooser"_L1 <<
"version"_L1;
123 QDBusPendingCall pendingCall = QDBusConnection::sessionBus().asyncCall(message);
124 QDBusPendingCallWatcher *watcher =
new QDBusPendingCallWatcher(pendingCall);
125 QObject::connect(watcher, &QDBusPendingCallWatcher::finished, watcher, [d] (QDBusPendingCallWatcher *watcher) {
126 QDBusPendingReply<QVariant> reply = *watcher;
127 if (reply.isValid()) {
128 d->fileChooserPortalVersion = reply.value().toUInt();
130 qWarning() <<
"Call for getting org.freedesktop.portal.FileChooser version failed"
133 watcher->deleteLater();
137 message = QDBusMessage::createMethodCall(
"org.freedesktop.portal.Desktop"_L1,
138 "/org/freedesktop/portal/desktop"_L1,
139 "org.freedesktop.portal.Settings"_L1,
142 QStringList namespaces = { appearanceInterface };
143 message << namespaces;
146 QDBusReply<QMap<QString, QVariantMap>> reply = QDBusConnection::sessionBus().call(message);
147 if (reply.isValid()) {
148 const QMap<QString, QVariantMap> settingsMap = reply.value();
149 if (!settingsMap.isEmpty()) {
150 const auto xdgColorSchemePref =
static_cast<QXdgDesktopPortalThemePrivate::XdgColorschemePref>(settingsMap.value(appearanceInterface).value(colorSchemeKey).toUInt());
151 d->colorScheme = QXdgDesktopPortalThemePrivate::colorSchemeFromXdgPref(xdgColorSchemePref);
152 d->contrast =
static_cast<Qt::ContrastPreference>(settingsMap.value(appearanceInterface).value(contrastKey).toUInt());
155 qWarning() <<
"Call to org.freedesktop.portal.Settings.ReadAll failed" << reply.error();
158 QDBusConnection::sessionBus().connect(
159 "org.freedesktop.portal.Desktop"_L1,
"/org/freedesktop/portal/desktop"_L1,
160 "org.freedesktop.portal.Settings"_L1,
"SettingChanged"_L1, d_ptr.get(),
161 SLOT(settingChanged(QString,QString,QDBusVariant)));
200 Q_D(
const QXdgDesktopPortalTheme);
202 if (type == FileDialog && d->fileChooserPortalVersion) {
205 if (d->baseTheme->usePlatformNativeDialog(type))
206 return new QXdgDesktopPortalFileDialog(
static_cast<QPlatformFileDialogHelper*>(d->baseTheme->createPlatformDialogHelper(type)),
207 d->fileChooserPortalVersion);
212 return d->baseTheme->createPlatformDialogHelper(type);