1
0
Fork 0
godot/servers
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
..
audio Remove ABS in favor of Math::abs 2025-03-19 13:52:40 +01:00
camera Style: Replace header guards with `#pragma once` 2025-03-07 17:33:47 -06:00
debugger Use initializer list in Arrays 2025-03-26 18:38:15 +01:00
display Style: Replace header guards with `#pragma once` 2025-03-07 17:33:47 -06:00
extensions Style: Replace header guards with `#pragma once` 2025-03-07 17:33:47 -06:00
movie_writer Fix time display in MovieWriter window title and console output 2025-03-31 20:38:18 +02:00
navigation Allow to compile templates without navigation features 2025-04-01 11:53:35 -03:00
rendering Merge pull request #104850 from Repiteo/core/warning-macros 2025-04-03 16:50:22 -05:00
text Add font import flag to toggle modulation of colored glyphs. 2025-04-01 13:36:10 +03:00
xr Merge pull request #89782 from KoBeWi/stdArrayList 2025-03-28 17:29:40 +01:00
SCsub Allow to compile templates without physics servers 2025-03-28 11:00:44 -03:00
audio_server.cpp Merge pull request #99555 from Meorge/mute-game 2025-03-19 17:46:11 -05:00
audio_server.h Add "Mute Audio" button to Game view in editor 2025-03-19 08:20:17 -07:00
camera_server.cpp Deactivate the `CameraServer` by default. 2025-03-21 07:58:57 +01:00
camera_server.h Deactivate the `CameraServer` by default. 2025-03-21 07:58:57 +01:00
display_server.compat.inc Improve native file dialog parent window selection. 2025-03-06 17:15:39 +02:00
display_server.cpp Wayland: Implement native sub-windows 2025-04-04 20:23:25 +02:00
display_server.h Wayland: Implement native sub-windows 2025-04-04 20:23:25 +02:00
display_server_headless.h Style: Replace header guards with `#pragma once` 2025-03-07 17:33:47 -06:00
navigation_server_2d.compat.inc
navigation_server_2d.cpp [Navigation] Create a dedicated 2D navigation server 2025-03-29 12:10:50 +01:00
navigation_server_2d.h Prepare NavigationServer for process() and physics_process() split 2025-04-02 11:01:08 +02:00
navigation_server_2d_dummy.h Prepare NavigationServer for process() and physics_process() split 2025-04-02 11:01:08 +02:00
navigation_server_3d.compat.inc
navigation_server_3d.cpp [Navigation] Create a dedicated 2D navigation server 2025-03-29 12:10:50 +01:00
navigation_server_3d.h Prepare NavigationServer for process() and physics_process() split 2025-04-02 11:01:08 +02:00
navigation_server_3d_dummy.h Prepare NavigationServer for process() and physics_process() split 2025-04-02 11:01:08 +02:00
physics_server_2d.cpp
physics_server_2d.h Style: Replace header guards with `#pragma once` 2025-03-07 17:33:47 -06:00
physics_server_2d_dummy.h Style: Replace header guards with `#pragma once` 2025-03-07 17:33:47 -06:00
physics_server_2d_wrap_mt.cpp
physics_server_2d_wrap_mt.h Style: Replace header guards with `#pragma once` 2025-03-07 17:33:47 -06:00
physics_server_3d.cpp
physics_server_3d.h Style: Replace header guards with `#pragma once` 2025-03-07 17:33:47 -06:00
physics_server_3d_dummy.h Style: Replace header guards with `#pragma once` 2025-03-07 17:33:47 -06:00
physics_server_3d_wrap_mt.cpp
physics_server_3d_wrap_mt.h Style: Replace header guards with `#pragma once` 2025-03-07 17:33:47 -06:00
register_server_types.cpp Organize ifdefs for disabling navigation, physics, and XR 2025-04-02 08:24:24 -07:00
register_server_types.h Style: Replace header guards with `#pragma once` 2025-03-07 17:33:47 -06:00
rendering_server.compat.inc
rendering_server.cpp Replace size() == 0 with is_empty(). 2025-04-02 19:18:43 +08:00
rendering_server.h Style: Replace header guards with `#pragma once` 2025-03-07 17:33:47 -06:00
server_wrap_mt_common.h Style: Replace header guards with `#pragma once` 2025-03-07 17:33:47 -06:00
text_server.compat.inc
text_server.cpp Replace size() == 0 with is_empty(). 2025-04-02 19:18:43 +08:00
text_server.h Add font import flag to toggle modulation of colored glyphs. 2025-04-01 13:36:10 +03:00
xr_server.compat.inc
xr_server.cpp Replace size() == 0 with is_empty(). 2025-04-02 19:18:43 +08:00
xr_server.h Style: Replace header guards with `#pragma once` 2025-03-07 17:33:47 -06:00