Portal support in GTK

GTK will transparently use portals for some functionality when it detects that it is being used inside a Flatpak sandbox. Here are some hints for what GTK applications should do to benefit from this.

  • Use g_get_user_config_dir(), g_get_user_cache_dir() and g_get_user_data_dir() to find the right place to store configuration and data

  • Use GtkFileChooserNative (or GtkFileChooserButton) to open files. As of xdg-desktop-portal-gtk 1.7.1 it can also open directories.

  • Use GtkPrintOperation for printing

  • Use gtk_show_uri_on_window() or g_app_info_launch_default_for_uri() to open URIs

  • Use gtk_application_inhibit() if you want to inhibit idle or logout

  • Use g_application_send_notification() to show notifications

  • Use the GtkApplication::screensaver-active property to monitor scrensaver status

Additionally, xdg-desktop-portal-gtk is required for GTK themes and fonts. It is also used as a fallback for the filepicker if the main xdg-desktop-portal implementation doesn’t support filepicking.

Portal support in Qt and KDE

Qt and KDE libraries will transparently use portals for some functionality when they detect that they are being used inside a Flatpak sandbox. Here are some hints for what Qt or KDE applications should do to benefit from this.

  • Use QDesktopServices::openUrl(const QUrl &url) or KIO::OpenUrlJob to open URIs or send an email when using mailto URL

  • Use QFileDialog class to open files and, as of Qt 5.18.90, directories. Avoid using QFileDialog::DontUseNativeDialog. Note that portals cannot currently give access to directories on the host filesystem

  • Use KNotification::notify() to show notification