33590 Commits

Author SHA1 Message Date
Michel Dänzer
d8a12d1667 wayland: Handle NULL backend in handle_release_points
This can happen during shutdown.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3862
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4372>
2025-04-28 15:44:02 +00:00
Michel Dänzer
6f9862ec65 wayland: Refactor handle_release_points helper out of _dec_use_count
Preparation for next commit, no functional change intended.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4372>
2025-04-28 15:44:02 +00:00
Carlos Garnacho
255e7e7fad compositor: Ensure to freeze DnD surface actor during failed animation
Otherwise, the client may push a NULL buffer early on, and make the feedback
animation ineffective.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4369>
2025-04-28 15:44:02 +00:00
Jonas Ådahl
37594cf964 clutter/frame-clock: Don't accidentally reschedule-now
The state should go from 'dispatched-one-and-scheduled-later' to
'scheduled-later', not 'scheduled-now' when being notified about a frame
being ready - otherwise we'll dispatch without proper pacing.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4334>
2025-04-28 15:44:02 +00:00
Jonas Ådahl
51bc12f7ec Revert "kms/impl-device: Always catch pending KMS update in _schedule_process"
Revert this due to the KMS thread not being supposed to handle
multiple updates per cycle.

This reverts commit d6005b539ca42905dfaf1c3854540a559332b78e.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3977
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4334>
2025-04-28 15:44:02 +00:00
Jonas Ådahl
a68a06cfc3 onscreen/native: Account for all posted frames
The KMS thread handles updates posted asynchronously, but it expects to
only handle one such frame in flight from the compositor at a time. That
means that the triple buffering state tracking in MetaOncreen, that
keeps track of posted frames and when they become presented, must also
account for posted frames that doesn't contain an actual primary plane
pixel buffer.

This was not the case, causing MetaOnscreenNative to post multiple
frames to the KMS thread, which wasn't handled gracefully in certain
situations.

Before the KMS thread grows real support for it's own queue of separate
updates, make sure we keep the contract to the KMS thread in
MetaOnscreenNative, and only submit at most one KMS update for each CRTC
each cycle, even when there are no actual primary plane changes.

v2: Properly handle frame tracking when when KMS update empty

v3: In the page flip callback, only set the presented frame to frames
that has buffers. This is needed on older kernels which doesn't have
drmModeCloseFB() which would otherwise disable the CRTC when presented
frame with an actual buffer would be replaced with an "empty" frame,
causing the frame with the buffer to be released, with the buffer along
with it.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4334>
2025-04-28 15:44:02 +00:00
Jonas Ådahl
48cb47425b onscreen/native: Include connector in some debug logs
This makes it easier to reason about what monitor is handled when
debugging multi monitor issues.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4334>
2025-04-28 15:44:02 +00:00
Jonas Ådahl
0e7ef4f6f8 clutter/frame-clock: Add more debug logging
Log when dispatching, dispatch callbacks (ready / presented), and all
state changes. This greatly improves debugability of the frame clock
state machine.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4334>
2025-04-28 15:44:02 +00:00
Jonas Ådahl
3b732a14c8 clutter/frame-clock: Set frame clock state via helper
This will allow us to log frame clock state changes.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4334>
2025-04-28 15:44:02 +00:00
Jonas Ådahl
e5ff0dbc81 monitor-manager: Don't apply configurations with unsupported color modes
The set of supported color modes of a monitor might change for the same
monitor, for example by the monitor providing different EDID blobs
depending on configuration done on the monitor itself.

When we have a color mode configured that is not actually supported by
the monitor at the moment, amend the configuration and fall back on the
default color mode.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3911
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4364>
2025-04-28 15:44:02 +00:00
Jonas Ådahl
cb5d43b39a monitor-manager: Split out helper to check monitor availability
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4364>
2025-04-28 15:44:02 +00:00
Jonas Ådahl
ab8272c583 monitor: Add helper to check whether a color mode is supported
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4364>
2025-04-28 15:44:02 +00:00
Jonas Ådahl
6113b2824f monitor-config-utils: Add monitors config copy function
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4364>
2025-04-28 15:44:02 +00:00
Michel Dänzer
62d10da4cb wayland: Bail early if cursor shape doesn't change
No need to call meta_wayland_pointer_update_cursor_surface in that case.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4361>
2025-04-28 15:44:02 +00:00
Carlos Garnacho
5141ad2acb wayland: Fix thinko in cursor_shape_manager.get_tablet_tool_v2
Look up the MetaWaylandTabletTool from the correct wl_resource.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/4004
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4367>
2025-04-28 15:44:02 +00:00
Carlos Garnacho
d2fdb99838 wayland: Fix thinko in shape protocol implementation with tablet tools
MetaWaylandTabletTool is not a GObject thus we cannot use weak pointers
on them. The good news is that MetaWaylandTabletTool structs are perennial
and we do not need to do that.

Remove this unnecessary weak pointer handling, which can only cause
runtime warnings or crashes.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4367>
2025-04-28 15:44:02 +00:00
Sebastian Wick
8b20a75df9 kms/device: Add SUPPORTS_COLOR_MODES flag and use it to guard HDR/color
Technically the impl device simple now also supports HDR, but there are
too many things that can go wrong, such as the colorspace prop getting
set, but not the HDR transfer function. For now, we will say that the
simple device impl does not have usable HDR support.

This gets picked up by the MetaOutputKms and propagtes the state to
everywhere.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4357>
2025-04-28 15:44:02 +00:00
Sebastian Wick
9288845959 kms/impl-device/simple: Add support for missing KMS properties
While we do not intend to support HDR on the simple device impl, being
able to get to the default color mode requires support for those
properties. Otherwise, if the monitor is already in HDR mode when mutter
starts, we would be stuck there.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4357>
2025-04-28 15:44:02 +00:00
Sebastian Wick
39e022984e kms/impl-device/simple: Add support for KMS blobs
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4357>
2025-04-28 15:44:02 +00:00
Sebastian Wick
c6f167b1a1 wayland: Allow changing from a cursor shape to a NULL surface
Changing to a cursor shape would set the cursor surface to NULL, so
trying to disable the cursor by setting the cursor surface to NULL was
detected as no-change. This commit fixes the check by taking into
account if the cursor shape is currently set.

Also adds a ref-test for it.

Fixes: 005b969227 ("wayland: Implement the cursor_shape_v1 protocol")
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3997
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4358>
2025-04-28 15:44:02 +00:00
Jan Alexander Steffens (heftig)
b08cf5c135 cursor: Move sprite preparation into sprite classes
Make the prepare function a vfunc of MetaCursorSprite, moving the root
cursor prepare function into MetaCursorSpriteXcursor. This should solve
two issues:

- The root cursor prepare function was changed in f77d8e2a12a07ef6abe9
  to solve an issue with fractional scales. The tool cursor prepare
  function was missing this fix.
- The cursors created via the shape protocol had no prepare function at
  all, so were not getting scaled.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3975
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4345>
2025-04-28 15:44:02 +00:00
Carlos Garnacho
bac6e440ae tests: Disconnect dangling signal handlers
These shouldn't survive across tests, but do.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3972
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4353>
2025-04-28 15:44:02 +00:00
Orko Garai
578d3a62ca Fix mutter crash from should_constraint_be_enabled()
In `should_constraint_be_enabled()` calling
`meta_wayland_surface_get_window()` could return a null window when the
toplevel is reset after locking pointer.

The null check was only done inside `HAVE_XWAYLAND` ifdef, and so if
mutter is built without xwayland it could lead to a crash.

Fixes: 6e818c8c38 ("build: Allow disabling xwayland")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4351>
2025-04-28 15:44:02 +00:00
Florian Müllner
095e1e50da test-client: Ignore GdkX11 deprecations
The entire X11 backend was deprecated, to indicate its planned
removal in GTK5.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4352>
2025-04-28 15:44:02 +00:00
Florian Müllner
48e35f5500 frames: Ignore GdkX11 deprecations
The entire X11 backend was deprecated, to indicate its planned
removal in GTK5.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4352>
2025-04-28 15:44:02 +00:00
Florian Müllner
cb4d8e9aa7 Revert "ci: Disable container building temporarily"
gitlab.freedesktop.org is back, so we can re-enable the
jobs that depend on it.

This reverts commit ad88a6e715bf751488d796d717aa83cafff01d65.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4343>
2025-04-28 15:44:02 +00:00
Florian Müllner
46669d64cb Revert "ci: Disable sysext temporarily"
gitlab.freedesktop.org is back, so we can re-enable the
jobs that depend on it.

This reverts commit 46b4519361f02ac86e50647e2cc1a7d13f99e8d9.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4343>
2025-04-28 15:44:02 +00:00
Daniel van Vugt
aa1f2aac98 tests: Raise the timeout on monitor-unit from 1 minute to 5 minutes
The test is huge and on a very fast machine it takes 10 seconds. So in
Debian and Ubuntu builds we're finding a lot of machines/architectures
where it regularly requires more than a minute to complete.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4340>
2025-04-28 15:44:02 +00:00
Michel Dänzer
6ee87401d4 Revert "onscreen/native: Account for all posted frames"
This reverts commit 9fc5fdc953f96cd91ad54fce6c50964e7ce57815.

It caused freezes for some users.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3974
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4338>
2025-04-28 15:44:02 +00:00
Michel Dänzer
6297a19fa4 kms/impl-device: Always catch pending KMS update in _schedule_process
Not only if the deadline timer is enabled. With the next commit, it'll
be semi-expected to happen even if the deadline timer is disabled.

Still leave the warning though, as a reminder that we'd rather prevent
this outside of the KMS thread.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4338>
2025-04-28 15:44:02 +00:00
ca3f155ff8 Don't build tools or man pages 2025-04-28 15:42:48 +00:00
557ed0bbba Revert GNOME change to force X authentication
See: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2633

It's a headache for us and it doesn't seem to be necessary because we
don't share network namespace between citadel and (nspawn) realms.
2025-04-07 13:30:15 +00:00
99ce63a396 Notify n-workspaces on context switch 2025-04-07 13:30:15 +00:00
7e77910cab Remove mapping of workspace contexts to pid namespaces.
This is handled in gnome shell now.
2025-04-07 13:30:09 +00:00
b7d6d4dfad Citadel changes to Mutter 2025-04-07 13:26:46 +00:00
Florian Müllner
3af3738795
Bump version to 48.0
Update NEWS.
2025-03-16 14:38:48 +01:00
Michel Dänzer
80e66878e8 kms/impl-device: Don't disable deadline timer due to invalid mode
If crtc->current_state.is_drm_mode_valid happens to be FALSE,
meta_kms_crtc_determine_deadline returns G_IO_ERROR_NOT_FOUND. This
previously resulted in silently and permanently disabling the deadline
timer, which is surprising and undesirable.

Bail early from ensure_deadline_timer_armed in this case instead. In
turn, G_IO_ERROR_NOT_FOUND from meta_kms_crtc_determine_deadline no
longer needs to be treated specially.

Fixes: 7493ed39ce20 ("kms/impl-device: Avoid retrying a failing deadline timer")

v2:
* Stop treating G_IO_ERROR_NOT_FOUND specially. (Sebastian Wick)

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4321>
2025-03-16 13:27:01 +00:00
Michel Dänzer
d5bcce3859 kms/impl-device: Process pending update from _schedule_process
If ensure_deadline_timer_armed fails and crtc_frame->pending_update is
non-NULL, we need to process the pending update, or it may fall through
the cracks, and this stage view may freeze.

v2:
* Don't return immediately after calling
  meta_kms_impl_device_do_process_update. (Sebastian Wick)
v3:
* Call meta_kms_impl_device_do_process_update only if
  is_using_deadline_timer returned true, and log a warning if
  crtc_frame->pending_update is non-NULL otherwise.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4321>
2025-03-16 13:27:01 +00:00
Michel Dänzer
46dfb4c4d0 kms/impl-device: Refactor meta_kms_impl_device_do_process_update helper
Preparation for next commit, no functional change intended.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4321>
2025-03-16 13:27:01 +00:00
Jonas Ådahl
9fc5fdc953 onscreen/native: Account for all posted frames
The KMS thread handles updates posted asynchronously, but it expects to
only handle one such frame in flight from the compositor at a time. That
means that the triple buffering state tracking in MetaOncreen, that
keeps track of posted frames and when they become presented, must also
account for posted frames that doesn't contain an actual primary plane
pixel buffer.

This was not the case, causing MetaOnscreenNative to post multiple
frames to the KMS thread, which wasn't handled gracefully in certain
situations.

Before the KMS thread grows real support for it's own queue of separate
updates, make sure we keep the contract to the KMS thread in
MetaOnscreenNative, and only submit at most one KMS update for each CRTC
each cycle, even when there are no actual primary plane changes.

v2: [Michel Dänzer]
* Drop Closes due to
  https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4334#note_2378962.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4321>
2025-03-16 13:27:01 +00:00
Jonas Ådahl
46b4519361 ci: Disable sysext temporarily
It fails due to gitlab.freedesktop.org being down.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4337>
2025-03-16 21:05:32 +08:00
Jonas Ådahl
ad88a6e715 ci: Disable container building temporarily
The freedesktop.org GitLab is undergoing extensive migration, so to
unblock our CI, disable container building using ci-templates for now.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4337>
2025-03-16 21:00:56 +08:00
Cas Pascal
9aff1718ef Update Vietnamese translation 2025-03-16 07:31:10 +00:00
Bruce Cowan
db33dcac51 Update British English translation 2025-03-15 22:02:02 +00:00
A S Alam
f4326be5a1 Update Punjabi translation 2025-03-14 22:31:52 +00:00
Carlos Garnacho
efbd61ae89 wayland: Bump gtk-shell version to 6
No actual changes. We will use this version to hint GTK about
the availability of non broken wl_surface.offset support for
pointer cursors.

GTK can use this version to avoid cursor breakage when running
on older Mutter versions.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4327>
2025-03-13 19:47:29 +00:00
Michel Dänzer
1837c1b299 wayland: Discard stale presentation feedbacks in _present_feedbacks
Any feedbacks for the same stage view but older frames than the one
being presented are discarded.

Since we now use per-frame lists of feedbacks, there can no longer be
any stale feedbacks where we previously discarded them, so remove that
dead code.

v2:
* Use ClutterFrameInfo::frame_count.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4306>
2025-03-13 16:27:52 +01:00
Michel Dänzer
903f6281f9 wayland: Use per-view & per-frame list of pending presentation feedbacks
Instead of a single hash table with a list of feedbacks per stage view,
there's a nested hash table per stage view with a list of feedbacks per
view frame counter.

This ensures that presentation feedbacks don't get mixed up between
different frames.

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

v2:
* Use ClutterFrame(Info)::frame_count. (Jonas Ådahl)

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4306>
2025-03-13 16:18:33 +01:00
Michel Dänzer
34b203ed99 wayland: Use output & frame counter instead of needs_sequence_update
More robust vs multiple frames in flight.

v2:
* Use ClutterFrameInfo::frame_count.
v3:
* Rename to last_view_frame_counter. (Jonas Ådahl)

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4306>
2025-03-13 16:15:23 +01:00
Michel Dänzer
84135e51b0 clutter: Add ClutterFrameInfo::view_frame_counter
And plumb it through from ClutterFrame::frame_count.

Preparation for later changes, no functional change intended.

v2:
* Rename to view_frame_counter. (Jonas Ådahl)

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4306>
2025-03-13 15:43:29 +01:00