commit 5924d74f27b53525ebd0012b69b654a7cd32c5c6
Author: Simon McVittie <smcv@debian.org>
Date: Sun Aug 23 13:32:16 2026 +0100
Update changelog
commit bb7fd93d58458c357b6c11c90a06bd4fa1a81e41
Merge: 65d1b885 981fb3dd
Author: Simon McVittie <smcv@debian.org>
Date: Sun Aug 23 13:31:57 2026 +0100
Merge branch 'debian/forky' into debian/latest
commit 981fb3dd347ad3368acdf8ba2779bfd9c689e12e
Author: Simon McVittie <smcv@debian.org>
Date: Sun Aug 23 13:28:26 2026 +0100
Team upload
commit 36962465c89946ced43d95e42f1eb58f3f638b03
Author: Simon McVittie <smcv@debian.org>
Date: Sat Aug 22 16:09:27 2026 +0100
New upstream release
commit b3f45664abeee1b09d20a89ad65578aa1bab34df
Merge: 884a40e7 774e9a31
Author: Simon McVittie <smcv@debian.org>
Date: Sat Aug 22 16:09:26 2026 +0100
Update upstream source from tag 'upstream/50.4'
Update to upstream version '50.4'
with Debian dir 939f4acc82356ec189364f5e5db643e6d9f63662
commit 774e9a31d36b4b146c51475b2c404270ce35df6d
Merge: 639f883d 8fe247a2
Author: Simon McVittie <smcv@debian.org>
Date: Sat Aug 22 16:09:02 2026 +0100
New upstream version 50.4
commit 884a40e7787cb097475e8908a64ec3b41ecdaa1c
Author: Simon McVittie <smcv@debian.org>
Date: Sat Aug 22 16:08:42 2026 +0100
Update changelog
commit fc54cdcce356a0f278f5854ff63682f8693ea5fe
Author: Simon McVittie <smcv@debian.org>
Date: Sat Aug 22 16:08:13 2026 +0100
d/watch: Only watch for version 50.x on this branch
commit 65d1b8859bab8699bde8fc9b9eb3f0a8d2b1fa4b
Author: Jeremy Bícha <jbicha@ubuntu.com>
Date: Wed Aug 5 20:50:09 2026 +0200
Clean up after debhelper compat 14 and lintian 2.139.0
I left some Depends and Provides behind until lintian 2.139.0
landed in Unstable to avoid lintian warnings
commit 8fe247a25a5b773e506c3f5f442ca0b7e3d5dc97
Author: Florian Müllner <fmuellner@gnome.org>
Date: Mon Aug 3 14:01:25 2026 +0200
Bump version to 50.4
Update NEWS.
commit fef51314da83181254f540d7b994332c9ca28e84
Author: Michel Dänzer <mdaenzer@redhat.com>
Date: Fri Jun 19 15:44:56 2026 +0200
clutter/frame-clock: Use latest possible next_smooth_presentation_time_us
The target presentation time of pending frames can be not only later
than earliest possible extrapolated from the last presentation time
(when the frame explicitly targets a later refresh cycle), but also
earlier (when a previous frame missed its target cycle).
With a series of frames hitting each refresh cycle, the latter case
resulted in later frames all missing the cycle they were targetting,
and corresponding higher latency for clients using the Wayland
commit-timing protocol.
Solve this by calculating the earliest presentation time all possible
ways, and using the maximum result for next_smooth_presentation_time_us.
Fixes: 23f285f972ae ("clutter/frame-clock: Take previous target presentation time into account")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5137>
(cherry picked from commit 6f0b92d6caa63870e3d5a7691766a4ffccf5e282)
commit 69ef9b30a0b601c7acaf3739d5a47fc230d5c8fc
Author: Marco Trevisan (Treviño) <mail@3v1n0.net>
Date: Mon Jun 17 17:19:56 2024 +0200
backends/stage-impl: Remove unneeded explicit region cleanups
We've autopointers now, so having this implies doubling the same check
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5203>
(cherry picked from commit a903a52505e33981be6c0f92ed299fa4afc59a9e)
commit fa96bf0ed397db7da3a596ed928bb07bf54fe303
Author: Marco Trevisan (Treviño) <mail@3v1n0.net>
Date: Tue May 28 17:44:06 2024 +0200
backends/stage-impl: Mark queued redraw clip op as unlikely
It's happening in the debug case only, so mark it as such
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5203>
(cherry picked from commit 1e4866f40c45c713301cdb1fc80e4bdd4ffd1078)
commit cdb748db2816c50a15ccb11d86ca1f516cb02929
Author: Marco Trevisan (Treviño) <mail@3v1n0.net>
Date: Mon May 27 21:12:44 2024 +0200
backends/stage-impl: Clamp the redraw clips to the framebuffer size
When computing the redraw clips rectangles we were using graphene
extents rounding (via "grow" Mtk rounding strategy) to be sure that
each area is properly covering the unscaled space.
However graphene's extents rounding has not any concept of maximum
allocation space and thus it may lead to generate rectangles that don't
fully fit in the framebuffer area.
Assuming of having a framebuffer 3840x2160 scaled @ 2,2018349170684814453125
An example is this rounding rectangle:
969x1734 at 12x3 (in the framebuffer scaled space)
With the current code it becomes once re-scaled:
2135x3819 at 26x6 (in the framebuffer unscaled (e.g. monitor) space
And clearly this rectangle doesn't properly fit in the framebuffer,
since its x2 would be positioned at 2135+26 (=2161, so a pixel outside).
This is not something that is generally problematic for the receiver
code, since most KMS drivers handle this properly (even though it's still
conceptually wrong to damage an area bigger than the plane size), but it
becomes a problem once such rectangle also get transformed, because due
to the nature of meta_rectangle_transform() the rectangle will also be
offset.
Following the previous example, applying a 90° rotation, it will become:
3819x2135 at 6x-1 (in the monitor space)
And now this is really a problem, because we're ending up sending to the
driver a swap region with offscreen coordinates, and that's something that
most driver do not really support, causing the KMS commit to fail with:
Failed to post KMS update: drmModeAtomicCommit: Invalid argument
So, when scaling the regions, also clamp the rectangles so that they
will fit into the framebuffer area.
In the scale_offset_and_clamp_region() case we also need to rescale the
framebuffer go to back into framebuffer space.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3509
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5203>
(cherry picked from commit 73c65007d50e12c4a428e5e6d751d37f73bbfae5)
commit 36367efae535bb13d9081a01f19038c1d0d1ce38
Author: Marco Trevisan (Treviño) <mail@3v1n0.net>
Date: Tue May 28 10:13:17 2024 +0200
backends/native/kms-impl-device-atomic: Warn on invalid damage rects
When debugging the KMS it may be important check that the submitted
values are valid, so add some more explicit check on this to make
clearer what are the drivers expectations
[ Michel Dänzer: Adjust warning conditions to match the kernel's ]
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5203>
(cherry picked from commit ac57294c3ebd50c13b117e99aa84f9456aeca9df)
commit a9ac87f0468ffc026a6e82a326733e66d0c7493b
Author: Marco Trevisan (Treviño) <mail@3v1n0.net>
Date: Tue May 28 10:08:48 2024 +0200
backends/native/kms-impl-device-atomic: Add debug info for damage clips
Provide debug details when damage clips are submitted, so that we can
check their content when using META_DEBUG=kms since in some cases they
have been the cause for DRM request commit failures.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5203>
(cherry picked from commit 1b5625bdcb8fe52cf4288d49ba3e129b0d40a625)
commit a1ae71798ef1ab2e0d2f753f5c98b38b1039b056
Author: Boogie61 <muhammetali47961@gmail.com>
Date: Thu Jul 30 14:26:41 2026 +0000
output: Fill in mastering display metadata for HDR output
When the bt2100 color mode is enabled, only the EOTF was set on
MetaOutputHdrMetadata. The mastering display primaries, white point and
luminance range were left zero initialised by the designated initializer
and never filled in, so the HDR_OUTPUT_METADATA infoframe told the sink
to use the PQ curve without describing the mastering display at all.
Many sinks are unaffected by that, but some tone map differently when
the mastering display is left undescribed. On the panel this was found
on, a Samsung ATNA60HU06-0, it shows up as washed out content with very
low contrast, which goes away once the fields are populated.
Take the values from the colour state the frames are produced in, so
that the KMS metadata agrees with the image description advertised to
Wayland clients. MaxCLL and MaxFALL stay unset, since the content light
level of the composited scene is not known here.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/work_items/4937
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5199>
(cherry picked from commit fa6b3575f4e1a43a12902ba322a00c91b38f3bcc)
commit ea280c13343c5197da53482fb570a1bdeb28144a
Author: Sebastian Wick <sebastian.wick@redhat.com>
Date: Sun Jul 12 03:06:50 2026 +0200
clutter/color-state-params: Set colorimetry type tag when overriding to sRGB
The PQ blending path set blending_colorimetry.colorspace without
updating the type tag from PRIMARIES to COLORSPACE. Since
ClutterColorimetry is a tagged union, writing the colorspace enum
clobbered only the lower bytes of the primaries pointer, causing a
use-after-free crash in clutter_primaries_equal.
Fixes: e9ab34262e ("clutter/color-state-params: Use output colorimetry & EOTF for blending")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5176>
(cherry picked from commit 98ab49c1caea784c558b67a7a8c5d997f85d787e)
commit 4368367937b8a1244883d729889abf892a41087b
Author: Sebastian Wick <sebastian.wick@redhat.com>
Date: Sun Jul 12 18:01:25 2026 +0200
clutter/stage-view: Clear offscreen when invalidating pipeline
invalidate_offscreen clears offscreen_pipeline but leaves offscreen
alive. If a paint arrives before the idle handler recreates both, the
stage renders into the offscreen but after_paint tries to blit it with a
NULL pipeline, crashing in cogl_pipeline_foreach_layer.
Clear the offscreen together with the pipeline so the state is always
consistent. The idle handler already handles recreating both from
scratch.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5176>
(cherry picked from commit 65215c1dc06b1269daf1617633949d3ec56d2b56)
commit e14c14955284233927c93c70d132562f887d9baa
Author: Sebastian Wick <sebastian.wick@redhat.com>
Date: Sun Jul 12 05:21:36 2026 +0200
clutter/stage-view: Fix viewport not being set on new offscreen
When the idle handler creates a new offscreen FBO, dirty_viewport and
dirty_projection are FALSE, so setup_view_for_pick_or_paint never sets
the viewport on the new framebuffer. On monitors not at position (0,0),
this causes painting with incorrect coordinates since the default
viewport lacks the view_layout offset.
Mark both as dirty before creating the offscreen so the next paint
applies the correct viewport and projection.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5176>
(cherry picked from commit 567987a2d23912f8733199ce1d9100815fad490b)
commit 4f6084ce5dfff3da861e0ba4a309fd588f9245d4
Author: ramyayella <ramya.krishna.yella@intel.com>
Date: Tue Jun 9 17:40:06 2026 +0530
output/kms: Filter fallback modes by panel-supported refresh rates
While adding fallback modes add the modes whose refresh rate matches
with the kernel supported refresh rates.
Signed-off-by: ramyayella <ramya.krishna.yella@intel.com>
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5110>
(cherry picked from commit 73843088ed3f32aec22a17cc89269fa57bd6dbc4)
commit 0edd2d8699534fd3bbb4c161a4e65363e6c1d985
Author: Michel Dänzer <mdaenzer@redhat.com>
Date: Tue Jul 14 18:22:14 2026 +0200
kms/impl-device: Also discard inhibited KMS updates
Fixes *render-kernel-thread* tests failing randomly.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5184>
(cherry picked from commit f811e903708f11ae0a0ab1a8df23fa436d146dec)
commit ade2439b213609552667336f701de2cc1a28ab23
Author: Michel Dänzer <mdaenzer@redhat.com>
Date: Thu Jul 9 09:52:31 2026 +0200
kms/impl-device: Handle NULL crtc_frames in disarm_all_frame_sources
Prevents a crash in that case.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5170>
(cherry picked from commit 5816af5d657af6bcbf0fd6bd830bc7e34611dcfb)
commit 23e796cc0b679d75f45bd9edbdaf9ef4976fd2f6
Author: Michel Dänzer <mdaenzer@redhat.com>
Date: Thu Jun 25 11:48:21 2026 +0200
wayland/transaction: Ignore stale timestamp constraints
If the constraint is in the past, we don't need to do anything for it.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/work_items/4861
v2:
* Drop comparison with next presentation time: If we don't set a
timestamp constraint, the next frame may end up being presented
earlier than expected.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5159>
(cherry picked from commit 7124ddf7e532537c0de8ba62d3a76767fdba5ff1)
commit 137094d1531844c29e34b460fdea17e7dd37fb81
Author: Michel Dänzer <mdaenzer@redhat.com>
Date: Mon Jul 6 16:44:29 2026 +0200
kms/impl-device: Handle NULL crtc_frames in _discard_pending_page_flips
Closes: https://gitlab.gnome.org/GNOME/mutter/-/work_items/4848
Fixes: 14b3d57b7d92 ("kms-impl-device: Discard pending update when discarding pending flips")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5163>
(cherry picked from commit 5d187100e2e146511cc19269d2f1c650cc3125ab)
commit 570de65dd05e1b362fdef90dcb811c22acd8a8e2
Author: Carlos Garnacho <carlosg@gnome.org>
Date: Tue Jun 16 12:08:24 2026 +0200
clutter: Let logical key events from IMs go through without a device
These events are not tied to a hardware device, and poking at input
capabilities of keyboard devices is less of an usecase, so it does not
seem to make a lot of sense to create a virtual keyboard device for
these.
Rely on clutter_event_source_device() return value being nullable, and
let events with the IM flag be propagated without a source device.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/work_items/4853
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5121>
(cherry picked from commit 2710ddc8a2515a0a77afde4cb9a70a4b14c72f14)
commit 514cd59e5f27f6821225d31b801526250a7b4c39
Author: James Railton <jarail@gmail.com>
Date: Tue Jun 16 15:03:51 2026 -0400
tests/stage-views: Add fractional view position test
Add a test with two monitors where the second one is fractionally scaled
at a logical position whose device offset is fractional
(767 * 1.5 = 1150.5), in a stage whose scaled size is also fractional
(1367 * 1.5 = 2050.5). Two view-aligned solid color actors and a texture
displaying alternating single device pixel rows are painted, and
individual pixels of the framebuffer are checked: actor boundaries must
land on the exact device pixel rows, the view's first and last rows must
be covered, and the texture rows must stay pure black and white.
The same content is also captured through
clutter_stage_paint_to_framebuffer_clipped() into an offscreen, which -
unlike an onscreen view - is y-flipped, and checked the same way, so
both paint paths and both viewport flip conventions are covered.
A coverage-only check would not catch this: a pure half-pixel shift
combined with the rasterizer's edge tie-breaking can reproduce identical
solid-color coverage, so the texture is sampled under linear filtering,
where a sub-pixel offset blends the alternating rows to gray instead.
https://gitlab.gnome.org/GNOME/mutter/-/issues/4451
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5115>
(cherry picked from commit 0a7b8b436e4c61144c7615866f433b5eddba4e16)
commit 36fc7e2e7752bf36f4f891d7f5ea4335dbcb661f
Author: James Railton <jarail@gmail.com>
Date: Tue Jun 16 15:02:00 2026 -0400
clutter/stage: Compensate fractional viewport in framebuffer captures
clutter_stage_paint_to_framebuffer_clipped() sets up its target the same
way per-view painting does - the shared stage projection plus a viewport
derived from origin * scale and stage_size * scale - and has the same
rounding problem: it passed the unrounded floats to
cogl_framebuffer_set_viewport(), which truncates them to integers at GL
flush. A capture whose origin * scale is fractional (the monitor
screen-cast source passes the monitor's logical layout and scale
directly, so a fractionally-positioned monitor qualifies) is therefore
shifted by up to half a pixel and stretched, the same blur the previous
commit fixed on the monitor itself - except here it lands in the
recording, which then no longer matches the screen.
Use clutter_stage_calculate_viewport_and_projection() here too, so the
captured framebuffer gets the same integral viewport and compensating
projection.
https://gitlab.gnome.org/GNOME/mutter/-/issues/4451
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5115>
(cherry picked from commit 308a0fccb0238db6006e2da6eb119f5250f36050)
commit 97e61894fccc399811a67a71d5bed5fa5dc17361
Author: James Railton <jarail@gmail.com>
Date: Tue Jun 16 15:00:46 2026 -0400
clutter/stage: Compensate fractional viewport remainders in the projection
The stage to view transform is exact in view-local terms:
fb = (stage - view_position) * view_scale.
_clutter_stage_maybe_setup_viewport() expresses it as the shared stage
projection plus a per-view viewport, which turns the viewport offset into
view_position * view_scale and the viewport size into stage_size *
view_scale - neither of which is necessarily integral. A logical monitor
at y=489 with a scale of 1.5 has a device offset of 733.5, and a stage
spanning 1367 logical pixels covers 2050.5 device pixels on such a view,
while viewports can only carry integers. roundf() silently dropped both
remainders, shifting all rasterization on such views by up to half a
device pixel and stretching it by a fraction of a pixel across the stage.
This had two kinds of user-visible consequences:
Every view with a non-integral device offset rendered blurred: the
sub-pixel shift makes meta_actor_painting_untransformed() fail for every
surface on the view, silently demoting them from NEAREST to LINEAR
filtering and resampling them off the pixel grid. Supported scale values
are floats chosen to make the logical monitor size integral (e.g.
1.3333333730697632), for which position * scale is integral for no
non-zero position at all, so monitors at such scales were blurred at
every placement except the layout origin - which also rules out fixing
this by constraining positions in the configuration layer.
At an offset remainder of exactly 0.5 (odd positions at 150%, positions
2 (mod 4) at 125%), the view-aligned geometry's bottom or right edge
additionally lands exactly on pixel centers, where the rasterizer's fill
rules drop the boundary row, so the view's last pixel row is never
rendered by anything. On views that render through an intermediate
offscreen (e.g. HDR, where the color state needs mapping), the offscreen
is persistent and that row accumulates stale window content indefinitely.
Factor the rounding and compensation into a helper that keeps the
integral parts in the viewport and folds the remainders into the
projection as a clip space scale and translation, so the combined
transform stays exact and view-aligned geometry lands on exact
framebuffer pixel coordinates for any logical monitor position. With zero
remainders the projection passes through unchanged, leaving integral
configurations bit-identical.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/4451
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5115>
(cherry picked from commit a79b894122706a909e8b6b3452bfa6369a8515d4)
commit af617ce242f5eb6e5e3cd184331d370f57baa37e
Author: Michel Dänzer <mdaenzer@redhat.com>
Date: Wed Jul 8 15:01:36 2026 +0200
screen-cast-stream-source: Handle NULL cursor renderer
meta_backend_get_cursor_renderer may return NULL now.
(cherry picked from commit 547f1db2838dc09a189c645d6d679191562092e5)
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5189>
commit 764fdcb86eb7b27c7218d60a27bbbc8ce034d8d5
Author: Vasil Pupkin <3abac@3a.by>
Date: Wed Jul 8 21:25:51 2026 +0000
Update Belarusian translation
Co-authored-by: Vasil Pupkin <3abac@3a.by>
Among the 5 debian patches available in version 50.4-1 of the package, we noticed the following issues: