diff --git a/Telegram/SourceFiles/platform/linux/file_utilities_linux.cpp b/Telegram/SourceFiles/platform/linux/file_utilities_linux.cpp index d1676cdba..47dd56a41 100644 --- a/Telegram/SourceFiles/platform/linux/file_utilities_linux.cpp +++ b/Telegram/SourceFiles/platform/linux/file_utilities_linux.cpp @@ -87,7 +87,7 @@ bool NativeSupported() { #ifndef TDESKTOP_FORCE_GTK_FILE_DIALOG return false; #endif // TDESKTOP_FORCE_GTK_FILE_DIALOG - return !Platform::IsXDGDesktopPortalPresent() + return !Platform::UseXDGDesktopPortal() && Platform::internal::GdkHelperLoaded() && (Libs::gtk_widget_hide_on_delete != nullptr) && (Libs::gtk_clipboard_store != nullptr) diff --git a/Telegram/SourceFiles/platform/linux/specific_linux.cpp b/Telegram/SourceFiles/platform/linux/specific_linux.cpp index b83ddd0c7..08c9ab45c 100644 --- a/Telegram/SourceFiles/platform/linux/specific_linux.cpp +++ b/Telegram/SourceFiles/platform/linux/specific_linux.cpp @@ -45,8 +45,6 @@ namespace { constexpr auto kDesktopFile = ":/misc/telegramdesktop.desktop"_cs; constexpr auto kSnapLauncherDir = "/var/lib/snapd/desktop/applications/"_cs; -bool XDGDesktopPortalPresent = false; - #ifndef TDESKTOP_DISABLE_DBUS_INTEGRATION void SandboxAutostart(bool autostart) { QVariantMap options; @@ -203,9 +201,22 @@ bool InSnap() { } bool IsXDGDesktopPortalPresent() { +#ifdef TDESKTOP_DISABLE_DBUS_INTEGRATION + static const auto XDGDesktopPortalPresent = false; +#else // TDESKTOP_DISABLE_DBUS_INTEGRATION + static const auto XDGDesktopPortalPresent = QDBusInterface( + "org.freedesktop.portal.Desktop", + "/org/freedesktop/portal/desktop").isValid(); +#endif // !TDESKTOP_DISABLE_DBUS_INTEGRATION return XDGDesktopPortalPresent; } +bool UseXDGDesktopPortal() { + static const auto UsePortal = qEnvironmentVariableIsSet("TDESKTOP_USE_PORTAL") + && IsXDGDesktopPortalPresent(); + return UsePortal; +} + QString ProcessNameByPID(const QString &pid) { constexpr auto kMaxPath = 1024; char result[kMaxPath] = { 0 }; @@ -414,20 +425,21 @@ namespace Platform { void start() { FallbackFontConfig(); -#if !defined(TDESKTOP_DISABLE_DBUS_INTEGRATION) && defined(TDESKTOP_FORCE_GTK_FILE_DIALOG) +#ifdef TDESKTOP_FORCE_GTK_FILE_DIALOG LOG(("Checking for XDG Desktop Portal...")); - XDGDesktopPortalPresent = QDBusInterface( - "org.freedesktop.portal.Desktop", - "/org/freedesktop/portal/desktop").isValid(); - // this can give us a chance to use a proper file dialog for current session - if(XDGDesktopPortalPresent) { + if(IsXDGDesktopPortalPresent()) { LOG(("XDG Desktop Portal is present!")); - qputenv("QT_QPA_PLATFORMTHEME", "xdgdesktopportal"); + if(UseXDGDesktopPortal()) { + LOG(("Usage of XDG Desktop Portal is enabled.")); + qputenv("QT_QPA_PLATFORMTHEME", "xdgdesktopportal"); + } else { + LOG(("Usage of XDG Desktop Portal is disabled.")); + } } else { LOG(("XDG Desktop Portal is not present :(")); } -#endif // !TDESKTOP_DISABLE_DBUS_INTEGRATION && TDESKTOP_FORCE_GTK_FILE_DIALOG +#endif // TDESKTOP_FORCE_GTK_FILE_DIALOG } void finish() { diff --git a/Telegram/SourceFiles/platform/linux/specific_linux.h b/Telegram/SourceFiles/platform/linux/specific_linux.h index 3ce0640ff..f878dac71 100644 --- a/Telegram/SourceFiles/platform/linux/specific_linux.h +++ b/Telegram/SourceFiles/platform/linux/specific_linux.h @@ -24,6 +24,7 @@ bool InSandbox(); bool InSnap(); bool IsXDGDesktopPortalPresent(); +bool UseXDGDesktopPortal(); QString ProcessNameByPID(const QString &pid); QString CurrentExecutablePath(int argc, char *argv[]);