33528 Commits

Author SHA1 Message Date
Sebastian Wick
0e4f4147a2 wayland/cursor-shape: Use an actual map for looking up MetaCursor shapes
The thing before pretended to be a map but wasn't, so it required
iterating over it and checking the fields to find the requested one. The
code didn't do that and index into it anyway and because the shapes
start at a value of 1, everything was off.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4307>
2025-03-11 09:55:01 +00:00
Sebastian Wick
8074cc5fbd wayland: Update cursor-shape protocol to upsteam version 2
The protocol changes for version 2 made it upstream but are not in a
release, yet. As soon as we have a release, we should replace this copy
with the wayland-protocols variant.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4307>
2025-03-11 09:55:01 +00:00
Sebastian Wick
b126b01490 tests/ref-test: Inhibit hardware cursors for ref tests
We run some ref-tests in the tty and kms test harnesses which does
support cursor planes. If we get "unlucky", the cursor could end up on
one of them and won't show up in the captured output.

Inhibit the hardware cursor when capturing the output for a ref-test.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4307>
2025-03-11 09:55:01 +00:00
Sebastian Wick
4a0b672146 tests: Always use the bundled cursor theme
To not depend on the system cursor theme for tests, always use
our own, even if the cursor theme appearance makes no difference.
We also need to add all of Adwaita's cursors in tree, to avoid any test
arbitrarily triggering missing cursor warnings or errors.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4307>
2025-03-11 09:55:01 +00:00
Sebastian Wick
20d5311697 tests/surface-scale: Use the default cursor instead of legacy left_ptr
We will start using only the cursors we ship with the tests, which is a
snapshot of Adwaita cursors. left_ptr is not one of the supported ones,
so we use default instead.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4307>
2025-03-11 09:55:01 +00:00
Sebastian Wick
2770eef638 tests: Unify G_TEST_SRCDIR/G_TEST_BUILDDIR locations
Cogl and Clutter use the "current source dir" whereas the tests in
src/tests use the non-test source directory. The installed tests already
only use a single directory.

This commit changes everything to be src/test in the source and build
directory.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4307>
2025-03-11 09:55:01 +00:00
Sebastian Wick
5c9444d03b cursor-renderer/native: Log instead of warn when cursor size mismatch
KMS can support only very specific cursor sizes and having a cursor that
doesn't match that size isn't something going wrong. Instead of
generating a warning, just log it.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4307>
2025-03-11 09:55:01 +00:00
Sebastian Wick
db488ccab0 stage: Maybe schedule updates for the remaining stage views
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4307>
2025-03-11 09:55:01 +00:00
Sebastian Wick
1e28542270 cursor-renderer/native: Use the existing inhibit logic without hw cursor
By setting cursor_stage_view->is_hw_cursor_valid and has_hw_cursor and
then skipping to the code below, we can reuse all the logic for when we
need to inhibit/uninhibit and update the sprite.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4307>
2025-03-11 09:55:01 +00:00
Michel Dänzer
d32f63acc5 drm-timeline: Always call g_set_error when failing _get_eventfd
Fixes crashing in the caller due to dereferencing a NULL GError pointer.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3961
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4326>
2025-03-11 09:26:31 +00:00
Michel Dänzer
d9efa3f52e kms/crtc: Revert DEADLINE_EVASION_CONSTANT_US to 800
This was the value before
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3934.

Now that the deadline timer is used for all KMS updates (since
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3964), the lower
value turned out too aggressive under some circumstances, resulting in
frequent frame skips.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3867
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4325>
2025-03-11 07:37:45 +00:00
Daniel van Vugt
892fd772fa renderer/native: Set needs_config for EGLDevice
Just like we do for EGL on X11.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3958
Fixes: 18085b0e40 ("cogl/egl: Choose config only if needed")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4324>
2025-03-11 01:48:18 +00:00
Anders Jonsson
546e2efcd5 Update Swedish translation 2025-03-10 21:38:40 +00:00
Bilal Elmoussaoui
41175dfccd cogl: Replace unused field with computed value
As in the commit mentioned below, we dropped the only place where
current_gl_draw_buffer is set. Which was still being used for glx and
ended up causing black screen with multi-monitors & nvidia.

Fixes: aa0600bf2 ("cogl: Remove Framebuffer:stereo-mode")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4323>
2025-03-10 15:50:44 +00:00
Emin Tufan Çetin
535dbe9f59 Update Turkish translation 2025-03-09 21:10:51 +00:00
Asier Saratsua Garmendia
efb3cb75e4 Update Basque translation 2025-03-09 09:16:13 +00:00
Ask Hjorth Larsen
330b719aa3 Update Danish translation 2025-03-09 01:34:15 +00:00
Jordi Mas i Hernandez
f61aa39ce2 Update Catalan translation 2025-03-08 12:07:17 +00:00
Carlos Garnacho
141c6c29ca backends/native: Generalize keyboard LED management
Use an enum and an array to enumerate the keyboard LEDs and
map xkb_led_index_t to libinput_led. There are future additions
coming and this will be extensible without becoming too spaghetti.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4301>
2025-03-07 13:26:27 +00:00
Sebastian Wick
ef21f2307e cursor-renderer/native: Invalidate state for output color state changes
When the output color state changes, we have to re-create the color
state transform. This is especially noticable when the luminance is
adjusted and the cursor is not affected.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3935
Fixes: a72ee3be0d ("cursor-renderer/native: Transform cursor sprite into output color state")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4315>
2025-03-06 11:42:49 +00:00
Sebastian Wick
603742d98c clutter/stage-view: Notify about color state changes
The cursor renderer will rely on the stage view telling it when its
output color state has changed.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4315>
2025-03-06 11:42:49 +00:00
Sebastian Wick
192f11646c cursor-renderer/native: Removed unused argument and update name
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4315>
2025-03-06 11:42:49 +00:00
Balázs Úr
54dd70eaf7 Update Hungarian translation 2025-03-05 17:28:55 +00:00
Artur S0
a708d51433 Update Russian translation 2025-03-05 09:33:06 +00:00
Daniel van Vugt
2d70451bf3 clutter/frame-clock: Verify and change state earlier in dispatch
So that if somehow it does return early then we're not left with an
allocated `clutter_frame_clock_new_frame` that is never dispatched
(which then leads to the pool being exhausted a frame or two later).

It's not yet clear how it comes to this where the source is dispatched
and the state unscheduled, but at least the more detailed logging here
will help us to identify which state it came from.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3945
Fixes: 394bf5ab24 ("clutter/frame-clock: Add triple buffering support")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4316>
2025-03-05 01:56:52 +00:00
José Expósito
3203fbafad wayland/drm-lease: Send drm_fd to pending clients
Listen to the signal that indicates that the current session is active
and send the drm_fd, connector(s) and done events to the clients that
were waiting for them.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3921>
2025-03-04 16:34:44 +00:00
José Expósito
d49a5b37a9 wayland/drm-lease: Move on device bind events to a function
Now that sending a drm_fd can fail, wrap the on device bind events
(drm_fd, connector and done) in their own function.

Refactor, no function changes.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3921>
2025-03-04 16:34:44 +00:00
José Expósito
eb4b70baed wayland/drm-lease: Put clients in a queue on drm_fd error
When a client binds to the a device, if obtaining a non-privileged fd
fails, instead of returning an error, put the client in a pending
queue.

Delaying the drm_fd is allowed by the protocol definition:

    The compositor will send this event when the wp_drm_lease_device_v1
    global is bound, although there are no guarantees as to how long
    this takes [...]

A future commit will send the drm_fd events to the clients in the list
once Mutter can obtain a valid fd.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3921>
2025-03-04 16:34:44 +00:00
Joan Torres
30315f3fca wayland/color-management: Ensure ref lum can't be bigger than max lum
This might be possible if extended target volume is supported but
currently it isn't.

This is a requirement from the wayland color management:

"'reference_lum' may be higher than 'max_lum'. In that case reaching
the reference white output level in image content requires the
'extended_target_volume' feature support."

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4304>
2025-03-04 14:05:41 +01:00
Joan Torres
565cff5cb9 clutter/color-state-params: Ignore explicit max_lum on EOTF_PQ
This is a requirement from the wayland color management:

"With transfer_function.st2084_pq the given 'max_lum' value is
ignored, and 'max_lum' is taken as 'min_lum' + 10000 cd/m²."

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4304>
2025-03-04 14:05:41 +01:00
Joan Torres
62df470837 clutter/color-state-params: Handle on gamma EOTFs negative vals
This is a requirement from the wayland color management:

"Negative values are handled by mirroring the positive half of
the curve through the origin."

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4304>
2025-03-04 14:05:41 +01:00
Daniel van Vugt
c87bf90471 tests: Vary the gdctl path used for installed tests
So they don't rely on the source tree.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4309>
2025-03-04 01:30:29 +00:00
Florian Müllner
d56904f299
Bump version to 48.rc
Update NEWS.
2025-03-03 17:19:32 +01:00
Danial Behzadi
15bcf4114f Update Persian translation 2025-03-03 15:22:06 +00:00
Daniel Mustieles
eb144053b0 Updated Spanish translation 2025-03-03 16:20:23 +01:00
Philip Withnall
6bd634e7ad tests: Mock logind’s Inhibit method
This is needed to allow gnome-shell to start up during its unit tests,
as it now calls `Inhibit` to make saving screen time information
race-free.

See
https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3643#note_2367420.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
Helps: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/8185
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4314>
2025-03-03 12:58:55 +00:00
Brage Fuglseth
0651563e3b Update Norwegian Bokmål translation 2025-03-02 14:32:41 +00:00
Piotr Drąg
24016d751a Update Polish translation 2025-03-02 12:50:49 +01:00
Robert Mader
6c05ec7ded Revert "clutter: Drop CLUTTER_DRIVER env variable"
This reverts commit 7d376dfddc386ae01da8c4dafbb4fc6080642253.

Closes https://gitlab.gnome.org/GNOME/mutter/-/issues/3923

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4312>
2025-03-02 10:06:46 +00:00
Robert Mader
9d5f8d464e Revert "cogl: Drop Rendererer.set_driver"
This reverts commit 6c22b7faba8112065a611921a538b9f66d9500bf.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4312>
2025-03-02 10:06:46 +00:00
Yaron Shahrabani
a623a839fd Update Hebrew translation 2025-03-02 09:43:08 +00:00
Ekaterine Papava
86b326ff94 Update Georgian translation 2025-03-02 08:00:11 +00:00
Vincent Chatelain
5f11c660bf Update French translation 2025-03-01 22:20:36 +00:00
Carlos Garnacho
5a7ec6791d wayland: Move window before tiling/maximizing when restoring from session
Ensure the window is placed in coordinates, before maximizing, tiling or
minimizing it. This should make the window maximized/tiled on the right
(or correctmost) monitor given the stored coordinates.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4311>
2025-03-01 15:02:21 +01:00
Carlos Garnacho
351f2fddff tests: Add more session management tests
Ensure that windows get restored either in maximized and unmaximized
state. And ensure that monitors being removed result in windows
snapping back to reachable positions.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4311>
2025-03-01 15:02:21 +01:00
Carlos Garnacho
e82cc58614 wayland: Ensure to constrain windows restored through session management
Otherwise, these might end up outside the desktop extents.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4311>
2025-03-01 15:02:21 +01:00
Carlos Garnacho
9a1dc0216e core: Add MetaSessionManager::session-instantiated signal
Mostly useful for tests to catch a session being created.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4311>
2025-03-01 15:02:21 +01:00
Michel Dänzer
99606f840c clutter/frame-clock: Use update time estimate in want_triple_buffering
We don't want triple buffering when the estimated maximum update time is
known and no larger than a refresh interval. In that case, regular frame
clock dispatch is scheduled after the previous frame is presented, so no
third buffer is necessary.

Allowing triple buffering anyway was problematic when frames are skipped
for reasons other than the frame update taking too long (e.g.
https://gitlab.gnome.org/GNOME/mutter/-/issues/3884):

1. First frame dispatches, targets display refresh cycle (DRC) n, but
   skips
2. Second frame dispatches, targets DRC n+1
3. First frame is presented at DRC n+1
4. Second frame is presented at DRC n+2

Without triple buffering:

2. First frame is presented at DRC n+1
3. Second frame dispatches, targets DRC n+2
4. Second frame is presented at DRC n+2

The second frame is presented at DRC n+2 in both cases, but with triple
buffering it targeted n+1, i.e. its contents might not be consistent
with when it's presented.

It gets worse with triple buffering if the second frame also skips:

4. Second frame skips, is presented at DRC n+3

That's a discrepancy of 2 refresh cycles between the target and
effective presentation time, which might be noticeable as more severe
stutter.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4282>
2025-03-01 13:33:09 +00:00
Michel Dänzer
4727d5a00f clutter/frame-clock: Fix max_update_time_estimate clamping
When triple buffering isn't allowed, it needs to be clamped to a single
refresh interval instead of two.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4282>
2025-03-01 13:33:09 +00:00
Michel Dänzer
826b856945 clutter/frame-clock: Rename max_render_time → max_update_time_estimate
Better describes what it's about.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4282>
2025-03-01 13:33:09 +00:00