Check for KDE portal backend when using portals on KDE

This commit is contained in:
Ilya Fedin 2020-10-15 20:31:40 +04:00 committed by John Preston
parent 4033a091b5
commit ca67ac913f
1 changed files with 15 additions and 4 deletions

View File

@ -123,6 +123,14 @@ void PortalAutostart(bool autostart, bool silent = false) {
}
}
bool IsXDGDesktopPortalKDEPresent() {
static const auto Result = QDBusInterface(
qsl("org.freedesktop.impl.portal.desktop.kde"),
kXDGDesktopPortalObjectPath.utf16()).isValid();
return Result;
}
uint FileChooserPortalVersion() {
static const auto Result = [&]() -> uint {
auto message = QDBusMessage::createMethodCall(
@ -731,17 +739,20 @@ bool IsXDGDesktopPortalPresent() {
}
bool UseXDGDesktopPortal() {
#ifndef DESKTOP_APP_DISABLE_DBUS_INTEGRATION
static const auto Result = [&] {
const auto envVar = qEnvironmentVariableIsSet("TDESKTOP_USE_PORTAL");
const auto portalPresent = IsXDGDesktopPortalPresent();
const auto neededForKde = DesktopEnvironment::IsKDE()
&& IsXDGDesktopPortalKDEPresent();
return (
DesktopEnvironment::IsKDE()
|| envVar
) && portalPresent;
return (neededForKde || envVar) && portalPresent;
}();
return Result;
#endif // !DESKTOP_APP_DISABLE_DBUS_INTEGRATION
return false;
}
bool CanOpenDirectoryWithPortal() {