99 : d_ptr(
new QXdgDesktopPortalThemePrivate)
101 Q_D(QXdgDesktopPortalTheme);
103 const QStringList themeNames = QGuiApplicationPrivate::platform_integration->themeNames();
104 for (
const QString &themeName : themeNames) {
105 if (QXdgDesktopPortalTheme::isXdgPlugin(themeName))
108 d->baseTheme = QPlatformThemeFactory::create(themeName,
nullptr);
113 d->baseTheme = QGuiApplicationPrivate::platform_integration->createPlatformTheme(themeName);
120 d->baseTheme =
new QPlatformTheme;
123 QDBusMessage message = QDBusMessage::createMethodCall(
"org.freedesktop.portal.Desktop"_L1,
124 "/org/freedesktop/portal/desktop"_L1,
125 "org.freedesktop.DBus.Properties"_L1,
127 message <<
"org.freedesktop.portal.FileChooser"_L1 <<
"version"_L1;
128 QDBusPendingCall pendingCall = QDBusConnection::sessionBus().asyncCall(message);
129 QDBusPendingCallWatcher *watcher =
new QDBusPendingCallWatcher(pendingCall);
130 QObject::connect(watcher, &QDBusPendingCallWatcher::finished, watcher, [d] (QDBusPendingCallWatcher *watcher) {
131 QDBusPendingReply<QVariant> reply = *watcher;
132 if (reply.isValid()) {
133 d->fileChooserPortalVersion = reply.value().toUInt();
135 qWarning() <<
"Call for getting org.freedesktop.portal.FileChooser version failed"
138 watcher->deleteLater();
142 message = QDBusMessage::createMethodCall(
"org.freedesktop.portal.Desktop"_L1,
143 "/org/freedesktop/portal/desktop"_L1,
144 "org.freedesktop.portal.Settings"_L1,
147 QStringList namespaces = { appearanceInterface };
148 message << namespaces;
151 QDBusReply<QMap<QString, QVariantMap>> reply = QDBusConnection::sessionBus().call(message);
152 if (reply.isValid()) {
153 const QMap<QString, QVariantMap> settingsMap = reply.value();
154 if (!settingsMap.isEmpty()) {
155 const auto xdgColorSchemePref =
static_cast<QXdgDesktopPortalThemePrivate::XdgColorschemePref>(settingsMap.value(appearanceInterface).value(colorSchemeKey).toUInt());
156 d->colorScheme = QXdgDesktopPortalThemePrivate::colorSchemeFromXdgPref(xdgColorSchemePref);
157 d->contrast =
static_cast<Qt::ContrastPreference>(settingsMap.value(appearanceInterface).value(contrastKey).toUInt());
158 d->motion =
static_cast<Qt::MotionPreference>(settingsMap.value(appearanceInterface).value(motionKey).toUInt());
161 qWarning() <<
"Call to org.freedesktop.portal.Settings.ReadAll failed" << reply.error();
164 QDBusConnection::sessionBus().connect(
165 "org.freedesktop.portal.Desktop"_L1,
"/org/freedesktop/portal/desktop"_L1,
166 "org.freedesktop.portal.Settings"_L1,
"SettingChanged"_L1, d_ptr.get(),
167 SLOT(settingChanged(QString,QString,QDBusVariant)));
206 Q_D(
const QXdgDesktopPortalTheme);
208 if (type == FileDialog && d->fileChooserPortalVersion) {
211 if (d->baseTheme->usePlatformNativeDialog(type))
212 return new QXdgDesktopPortalFileDialog(
static_cast<QPlatformFileDialogHelper*>(d->baseTheme->createPlatformDialogHelper(type)),
213 d->fileChooserPortalVersion);
218 return d->baseTheme->createPlatformDialogHelper(type);