Commit Graph

249 Commits

Author SHA1 Message Date
Rémi Verschelde f5a290ac46 Move RenderingServer enums to a dedicated RenderingServerEnums (RSE) namespace
A number of headers in the codebase included `rendering_server.h` just for
some enum definitions. This means that any change to `rendering_server.h` or
one of its dependencies would trigger a massive incremental rebuild.

With this change, we decouple a number of classes from `rendering_server.h`,
greatly speeding up incremental rebuilds for that area.

On my machine, this reduces incremental compilation time after an edit of
`rendering_server.h` by 60s (from 2m57s).
2026-02-25 19:43:03 +01:00
Lukas Tenbrink e9465cd380 Move variant pools to their own compile unit. 2026-02-21 13:24:17 +01:00
Rémi Verschelde ad4b910a10 Minimize include dependencies of display_server.h
- Removes `native_menu.h` dependency from `display_server.h`.
  It's now forward-declared in all DisplayServer implementations and should
  be included in the .cpp's.
- Removes some unused `rb_set.h` and `rb_map.h` dependencies, which leads to
  having to include them explicitly in half the scene and editor codebase...
  which shows how much we depend on `display_server.h`.
- Forward-declare `input_event.h`, so now we need only `keyboard.h`.
2026-02-17 19:45:31 +01:00
Thaddeus Crews a82e210b5a Merge pull request #116376 from deralmas/wl/noope
Wayland: Skip resize request when the size is the same
2026-02-17 09:28:23 -06:00
Dery Almas 870631211f Wayland: Skip resize request when the size is the same
`DisplayServer::window_set_size` is called lots of times in the code,
with the assumption (I suppose) that it's going to be idempotent.

We had checks in _update_window_rect but we still called
`WaylandThread::window_set_size`, which did a lot of stuff. In
particular, this caused issues with HiDPI as it "overrode" the window
size before it had a time to figure out its scale.
2026-02-16 20:10:54 +01:00
Thaddeus Crews 41f4ca3247 Merge pull request #116236 from deralmas/the-chosen-one
Wayland: Only handle the current output mode
2026-02-16 10:19:35 -06:00
Thaddeus Crews b769ae2d5f Merge pull request #116309 from deralmas/wl/sdrawkcab
Wayland: Swap backward and forward mouse buttons
2026-02-16 10:19:30 -06:00
Thaddeus Crews 2762c56829 Merge pull request #112287 from Kiisu-Master/wl_pointer_warp
Add pointer warping on wayland
2026-02-16 10:19:18 -06:00
Kiisu_Master 4dceee5252 Add pointer warping on wayland 2026-02-15 18:16:27 +01:00
Dery Almas fe0acc1003 Wayland: Swap backward and forward mouse buttons
They were bound in reverse. No idea how I originally chose which was
which.

This patch also orders the switch cases by their underlying codes: left,
right, middle, side, extra.
2026-02-15 09:28:52 +01:00
Dery Almas dc8e7ef2ce Wayland: Only handle the current output mode
Some compositors (e.g. COSMIC) can report *all* supported output modes,
not just the current mode. This is valid, albeit deprecated, so let's
add a check and ignore any non-current output events.
2026-02-13 02:52:40 +01:00
Skyth 8fbf2f1e14 Reduce includes to rendering device.
Co-authored-by: Lukas Tenbrink <lukas.tenbrink@gmail.com>
2026-02-10 16:58:50 +03:00
Thaddeus Crews 435e6c3830 CI: Enable Ruff preview options; bump version
• 1.14.7 → 1.15.0
2026-02-05 12:20:10 -06:00
Thaddeus Crews 65e79f33cb Merge pull request #115823 from deralmas/what-the-fd
Wayland Embedder: Fix FD leak with inert objects
2026-02-05 09:32:34 -06:00
Lukas Tenbrink c5df0cb82b Don't right-align escaped newlines, e.g. for #define. This has previously led to long diffs in the commit history. 2026-02-04 19:31:28 +01:00
Dery Almas 6e5d1e00e0 Wayland Embedder: Fix FD leak with inert objects
Freshly deleted objects are temporarily "inert" until their destruction
is acknowledged by the compositor.

Inert objects are ignored. By doing so, we mistakenly returned too
early and missed some FD cleanup logic. This patch ensures that any
outstanding FDs are always closed by moving its logic outside of the
message handling routine.
2026-02-03 16:26:56 +01:00
Nintorch eb019511ed Optimize files that #include input.h header 2026-01-28 14:21:00 +05:00
Thaddeus Crews ed0ae97d98 Merge pull request #114922 from DarioSamo/android-platform-gl3-fallback-fix
Fix fallback to OpenGL3 from Vulkan initialization on Android.
2026-01-27 09:04:14 -06:00
Dery Almas 27b1916465 Wayland: Update popup scale information on creation
Popups start with their size and position already scaled based on the parent.
We forgot to update the popup's scale itself, leading to a double-scale.
2026-01-22 06:28:27 +01:00
Rémi Verschelde a1e209b7fe Merge pull request #115090 from deralmas/wayland-ime-bruh-moment
Wayland: Fix IME
2026-01-19 10:46:13 +01:00
Dery Almas 3a2a53f901 Wayland: Fix IME
The spec tells us to ignore certain events if we didn't get an `enter`
event first. Certainly we need to at least acknowledge the `enter` event
itself 😅
2026-01-18 09:47:23 +01:00
Dario 542f8ddf22 Fix fallback to OpenGL3 from Vulkan initialization on Android. 2026-01-14 23:55:21 -03:00
Dery Almas 8a448032c2 Wayland: Allow non-interactive window resizing
Despite what I thought in the past, it is allowed, as long as we follow
certain limitations depending on the toplevel's state.

As usual I peppered the code with comments expaining what those
limitations are.

Regarding popups, AFAICT there are no major limitations, although we
should eventually use the new `reposition` method, which autoadjusts the
popup to follow the screen's borders and whatnot. I didn't do that in
this patch as it requires some elbow grease, especially if we want to do
it synchronously.
2026-01-14 11:20:06 +01:00
Rémi Verschelde 571c574f96 Merge pull request #113950 from deralmas/wl-misc-fixes/not-listening
Wayland: Ignore IME events without a valid window
2026-01-13 11:06:00 +01:00
Rémi Verschelde 865dbfc2fb Merge pull request #113949 from deralmas/wl-misc-fixes/too-much-debugging
Wayland: Remove `GODOT_DEBUG_EMBEDDER_SINGLE_INSTANCE` debug option
2026-01-13 11:05:54 +01:00
Ville Baillie e02b117af7 wayland_embedder.cpp: fix duplicated-branches error 2026-01-08 19:01:33 +00:00
Riteo Siuga 33a48f1387 Wayland: Track popup menu mouse mask properly
We were updating `last_mouse_monitor_mask` only if there were popup
menus open, which is obviously wrong.
2026-01-03 21:48:18 +01:00
Rémi Verschelde 0509500a9f Merge pull request #114081 from deralmas/thirdparty/libdecor/0.2.5
libdecor: Regenerate dynamic wrapper
2025-12-17 13:58:46 +01:00
Dery Almas bea572fc00 libdecor: Regenerate dynamic wrapper 2025-12-17 13:17:14 +01:00
Riteo 0e21840973 Wayland: Add environment variable to disable libdecor loading
Libdecor has some quirks and depending on the setup it might be useful
to switch to the xdg-shell branch. Recompiling the whole engine without
libdecor is not an acceptable way to do that.
2025-12-16 19:12:49 +01:00
Rémi Verschelde 3e2f769ddf Merge pull request #113947 from deralmas/wl-misc-fixes/cleanup-forgor
Wayland: Add missing destroy calls for text input and tablet
2025-12-16 11:26:53 +01:00
Rémi Verschelde d84a8a63fa Merge pull request #113946 from deralmas/wl-misc-fixes/mfw-mutating-a-copy
Wayland: Fix accidental copy during global remove
2025-12-16 11:26:47 +01:00
Rémi Verschelde 5d5db072f3 Merge pull request #113656 from deralmas/gray-goo-scenario
Wayland: Work around window scale ambiguity
2025-12-16 11:26:42 +01:00
Rémi Verschelde 61b5f80a50 Merge pull request #113256 from deralmas/wl-keyboard-stuff
Wayland: Misc keyboard touchups
2025-12-16 11:26:31 +01:00
Thaddeus Crews 206f1b5a7c Merge pull request #113977 from deralmas/wl-misc-fixes/shhhhh
Wayland: Silence `window_get_wl_surface` on invalid window
2025-12-15 08:01:05 -06:00
Dery Almas 874dd28d66 Wayland: Silence window_get_wl_surface on invalid window
Makes it more consistent with the rest of the `WaylandThread` methods
(so that we can silently check for the window's existence).

Fixes errors when trying to capture the pointer when no surface has been
pointed yet (its logic assumed that this method was silent).

We double-check everywhere anyway but I added it in some places where we
can't either guarantee that it'll check (to avoid segfaults) or that
would be useful to report directly.
2025-12-13 10:10:29 +01:00
Dery Almas 55360ec825 Wayland: Ignore IME events without a valid window
The spec says "After leave event, compositor must ignore requests from
any text input instances until next enter event."

Fixes an error on jay, which at least on 1.11.0 sends
`zwp_text_input_v3::done` after `zwp_text_input_v3::leave`, which we
didn't ignore, leading to a commit without a valid window id.
2025-12-12 19:40:02 +01:00
Dery Almas a8e1d23855 Wayland: Remove GODOT_DEBUG_EMBEDDER_SINGLE_INSTANCE debug option
This is _extremely_ specific, and was meant to be removed after a review
in the game embedder PR. No idea how it found its way back in.
2025-12-12 19:23:26 +01:00
Dery Almas 1d1cd7cc1a Wayland: Add missing destroy calls for text input and tablet
Thank you Kiisu_Master for finding this!
2025-12-12 19:22:19 +01:00
Dery Almas b439a71db3 Wayland: Fix accidental copy during global remove
We were accidentally mutating a copy during cleanup of the viewporter
and fractional scale manager.

Thank you Aaron Franke for finding this out :D
2025-12-12 19:06:29 +01:00
Pāvels Nadtočajevs 1251348c96 [Wayland] Implement keyboard_get_label_from_physical 2025-12-10 13:19:35 +02:00
Berke Güzel 48c50bacba Wayland: Fix laggy window resize
scale_changed and size_changed were incorrectly initialized to true,
causing redundant WindowRectMessage and DPI change events to be pushed
on every configure event regardless of actual changes.
2025-12-07 13:29:19 +03:00
Dery Almas 99b109e981 Wayland: Work around window scale ambiguity 2025-12-06 00:54:50 +01:00
Rémi Verschelde 1c7ef74f4f Merge pull request #113346 from deralmas/wl-keyboard-saga/unify-keys
Wayland: Unify key handling logic
2025-12-01 11:50:11 +01:00
Dery Almas 9a814b4444 Wayland: Unify key handling logic
Previously we had different logic for direct key presses and client-side
key repetition, as one queued up input events and the other dispatched
them directly (client-side key repetition is run from the main thread).

I kinda figured out that this difference doesn't really matter, as we
can queue them up before the thread message dispatching logic. That's
exactly what we do now, which allows us to make a single method for both
of them, making the code much clearer and simplifying future maintenance.

This patch also includes a tiny fixup in the compose logic, which checks
for the validity of the generated key event before actually working with
it. The cases in which we can end up with an invalid reference are very
few, so it's not the end of the world, but it's still absolutely a good
idea to check, to avoid nasty surprises down the line.
2025-11-30 05:11:40 +01:00
LanzaSchneider 3a965d50fe Fix incorrect format specifier for bool in Wayland libdecor 2025-11-29 10:20:27 +08:00
Riteo Siuga f90a9ad659 Destroy XKB keymap and state on seat capability change
Wasn't that much of a concern as it would have been disposed of next
time a keyboard got added, but it's still a good thing to do.
2025-11-27 23:02:08 +01:00
Dery Almas a79239e332 Wayland: Add default keyboard repetition values
The `wl_keyboard::repeat_info` event got introduced in version 4. On
versions older than that, we defaulted to 0 delay, which means no
repetition. That's a veeery old version and basically everything offers
it, but it doesn't hurt to add a reasonable default.
2025-11-27 22:37:28 +01:00
Dery Almas b0a42784f1 Wayland: Fix SIGFPE with repeat rate of 0
We always divided by the rate, which could be zero, which is a valid
value (it means "disable key repeating").
2025-11-27 22:37:28 +01:00
Rémi Verschelde e28ef68957 Merge pull request #113135 from deralmas/buffer-jaywalking
Wayland: Fix trailing garbage error while using the embedder on Jay
2025-11-27 21:48:12 +01:00