godot/platform/linuxbsd
Riteo 84d3adcf2f Wayland: Implement native sub-windows
The backend is now mature enough to not explode with multiple windows
but the `DisplayServer` API still cannot meet some guarantees required
by the various Wayland protocols we use. To meet those guarantees this
patch adds three new elements to the DisplayServer API, with relative
handling logic for `Window` and `Popup` nodes:

 - `WINDOW_EVENT_FORCE_CLOSE`, which tells a window to *forcefully*
close itself and ensure a proper cleanup of its references, as Wayland
enforces this behavior;

 - `WINDOW_FLAG_POPUP_WM_HINT`, which explicitly declares a window as a
"popup", as Wayland enforces this distinction and heuristics are not
reliable enough;

 - `FEATURE_SELF_FITTING_WINDOWS`, which signals that the compositor can
fit windows to the screen automatically and that nodes should not do
that themselves.

Given the size of this feature, this patch also includes various
`WaylandThread` reworks and fixes including:

 - Improvements to frame wait logic, with fixes to various stalls and a
configurable (through a `#define`) timeout amount;

 - A proper implementation of `window_can_draw`;

 - Complete overhaul of pointer and tablet handling. Now everything is
always accumulated and handled only on each respective `frame` event.
This makes their logic simpler and more robust.

 - Better handling of pointer leaving and pointer enter/exit event
sending;

 - Keyboard focus tracking;

 - More solid window references using IDs instead of raw pointers as
windows can be deleted at any time;

 - More aggressive messaging to window nodes to enforce rects imposed by
the compositor.
2025-04-04 20:23:25 +02:00
..
doc_classes Update official export templates architecture list in docs 2025-01-07 20:28:25 +07:00
export change unportable echo in the linux/macos debug launcher script 2025-03-21 17:31:37 +01:00
wayland Wayland: Implement native sub-windows 2025-04-04 20:23:25 +02:00
x11 Detect KDE/LXQt and swap OK/Cancel buttons to Windows style. 2025-04-03 12:47:11 +03:00
crash_handler_linuxbsd.cpp Rename version defines to GODOT_VERSION_* to match GDExtension godot-cpp 2025-03-12 11:11:38 -07:00
crash_handler_linuxbsd.h Style: Replace header guards with #pragma once 2025-03-07 17:33:47 -06:00
dbus-so_wrap.c [X11] Add support for dead keys without active IME. Fix IME focus and cleanup. 2023-01-30 13:31:48 +02:00
dbus-so_wrap.h [X11] Add support for dead keys without active IME. Fix IME focus and cleanup. 2023-01-30 13:31:48 +02:00
detect.py SCons: Add CPPEXTPATH for external includes 2025-04-02 07:29:08 -05:00
fontconfig-so_wrap.c [X11] Add support for dead keys without active IME. Fix IME focus and cleanup. 2023-01-30 13:31:48 +02:00
fontconfig-so_wrap.h [X11] Add support for dead keys without active IME. Fix IME focus and cleanup. 2023-01-30 13:31:48 +02:00
freedesktop_portal_desktop.cpp Merge pull request #101546 from bruvzg/portal_color_picker 2025-03-17 10:52:29 -05:00
freedesktop_portal_desktop.h Merge pull request #101546 from bruvzg/portal_color_picker 2025-03-17 10:52:29 -05:00
freedesktop_screensaver.cpp Check DBus loading status before attempting to detect its version 2023-05-11 19:29:10 +02:00
freedesktop_screensaver.h Style: Replace header guards with #pragma once 2025-03-07 17:33:47 -06:00
godot_linuxbsd.cpp Refactor OS exit code to be EXIT_SUCCESS by default 2024-03-08 23:31:24 +01:00
joypad_linux.cpp Style: Apply new clang-format changes 2024-09-20 08:09:48 -05:00
joypad_linux.h Style: Replace header guards with #pragma once 2025-03-07 17:33:47 -06:00
libudev-so_wrap.c [X11] Add support for dead keys without active IME. Fix IME focus and cleanup. 2023-01-30 13:31:48 +02:00
libudev-so_wrap.h [X11] Add support for dead keys without active IME. Fix IME focus and cleanup. 2023-01-30 13:31:48 +02:00
os_linuxbsd.cpp Add String::remove_char(s) methods for performance and convenience 2025-03-10 13:19:28 +01:00
os_linuxbsd.h Style: Replace header guards with #pragma once 2025-03-07 17:33:47 -06:00
platform_config.h Style: Replace header guards with #pragma once 2025-03-07 17:33:47 -06:00
platform_gl.h Style: Replace header guards with #pragma once 2025-03-07 17:33:47 -06:00
platform_linuxbsd_builders.py Fix linux builds with debug symbols when there is a space in the path. 2024-12-05 10:31:12 -05:00
README.md update logo/run icon path in README 2025-03-10 12:03:41 +06:00
SCsub SCons: Add unobtrusive type hints in SCons files 2024-09-25 09:34:35 -05:00
speechd-so_wrap.c [X11] Add support for dead keys without active IME. Fix IME focus and cleanup. 2023-01-30 13:31:48 +02:00
speechd-so_wrap.h [X11] Add support for dead keys without active IME. Fix IME focus and cleanup. 2023-01-30 13:31:48 +02:00
tts_linux.cpp Remove implicit conversions from String, Char16String and CharString to data pointers. Make conversions to StrRange implicit to aid transition. 2025-01-17 17:31:58 +01:00
tts_linux.h Style: Replace header guards with #pragma once 2025-03-07 17:33:47 -06:00
xkbcommon-so_wrap.c [X11] Add support for dead keys without active IME. Fix IME focus and cleanup. 2023-01-30 13:31:48 +02:00
xkbcommon-so_wrap.h [X11] Add support for dead keys without active IME. Fix IME focus and cleanup. 2023-01-30 13:31:48 +02:00

Linux/*BSD platform port

This folder contains the C++ code for the Linux/*BSD platform port.

See also misc/dist/linux folder for additional files used by this platform.

Documentation

Artwork license

logo.svg is derived from the Linux logo:

Permission to use and/or modify this image is granted provided you acknowledge me lewing@isc.tamu.edu and The GIMP if someone asks.