godot/platform
Will Thompson 1a3a254e26 Support XDG Inhibit portal
Previously, on Linux and BSD, inhibiting the screensaver was handled
using the org.freedesktop.ScreenSaver D-Bus API. Unfortunately, this API
is not available in a Flatpak sandbox. (This is because there is a
desire to tie inhibit sessions to a specific app and visible window; but
the org.freedesktop.ScreenSaver API does not support this.)

As a result, when using the Flatpak build of the Godot Editor (or a
Flatpak-ed build of a game) and using a controller to play a game, the
session will become idle after a few minutes.

The XDG desktop portal -- which is already used for color-picking, file
choosing, and querying the system theme -- has an Inhibit interface that
provides a superset of the functionality of the
org.freedesktop.ScreenSaver API, and is available to any sandboxed app.

Refactor code for making XDG portal requests that was previously
duplicated for the FileChooser and ColorPicker portal code. Check the
portal version to determine whether these portals can be used:

- FileChooser portal version 3 is required due to the use of the
  "directory" parameter.

- On the Settings portal, the only addition in version 2 is the
  ReadOne() method which is not used here, so version 1 suffices.

- On the Screenshot portal, the only addition in version 2 is the
  "interactive" parameter to the Screenshot() method; this code only
  uses the PickColor() method, so version 1 suffices.

Then, add support for the Inhibit portal. Use it if available and if
running in a sandbox. Prefer to use org.freedesktop.ScreenSaver if not
running in a sandbox, even if the portal is available, because (at least
in the GNOME 43 implementation of the portal) it does not work correctly
if the portal cannot map the request to a running app. This adds a small
amount of complexity to the implementation, but supporting both APIs is
necessary anyway (there are many systems in the wild that support
org.freedesktop.ScreenSaver but not the desktop portal).

Fixes https://github.com/godotengine/godot/issues/108634
2025-11-17 11:46:28 +01:00
..
android Merge pull request #112777 from m4gr3d/add_android_xr_support 2025-11-14 17:16:49 -06:00
ios Add profiler option to SCons builds. 2025-11-08 00:08:45 +01:00
linuxbsd Support XDG Inhibit portal 2025-11-17 11:46:28 +01:00
macos Merge pull request #112379 from bruvzg/tts64id 2025-11-14 14:23:17 -06:00
visionos Add profiler option to SCons builds. 2025-11-08 00:08:45 +01:00
web Merge pull request #112379 from bruvzg/tts64id 2025-11-14 14:23:17 -06:00
windows Merge pull request #112379 from bruvzg/tts64id 2025-11-14 14:23:17 -06:00
platform_builders.py SCons: Begin decoupling generation & build code 2025-04-25 08:23:01 -05:00
register_platform_apis.h Style: Replace header guards with #pragma once 2025-03-07 17:33:47 -06:00
SCsub SCons: Begin decoupling generation & build code 2025-04-25 08:23:01 -05:00