diff --git a/0001-backend-native-Use-drmModeCloseFB-for-flicker-free-l.patch b/0001-backend-native-Use-drmModeCloseFB-for-flicker-free-l.patch new file mode 100644 index 0000000000000000000000000000000000000000..7741a2b0d1c7e6c8e7c4d19c1a3471c39fe6022a --- /dev/null +++ b/0001-backend-native-Use-drmModeCloseFB-for-flicker-free-l.patch @@ -0,0 +1,51 @@ +From d71294da2282fe9a82cc8661d3110c8020a5069a Mon Sep 17 00:00:00 2001 +From: Jocelyn Falempe +Date: Wed, 13 Mar 2024 15:34:14 +0100 +Subject: [PATCH] backend/native: Use drmModeCloseFB for flicker-free login + +When logging in from gdm to gnome, the main plane is deactivated, and +leads to the screen going blank before gnome is able to enable it +again. +Using the new CloseFB ioctl, allows to keep the gdm login screen +displayed until gnome-shell replace it. + +Signed-off-by: Jocelyn Falempe +Part-of: +(cherry picked from commit a775241efd8b840e7789077fb2224f0df2361d54) +--- + meson.build | 3 ++- + src/backends/native/meta-drm-buffer.c | 4 +++- + 2 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/meson.build b/meson.build +index 613aa67792..0c342ed335 100644 +--- a/meson.build ++++ b/meson.build +@@ -45,7 +45,8 @@ wayland_protocols_req = '>= 1.19' + + # native backend version requirements + libinput_req = '>= 1.15.0' +-gbm_req = '>= 17.3' ++gbm_req = '>= 21.3' ++libdrm_req = '>= 2.4.118' + + # screen cast version requirements + libpipewire_req = '>= 0.3.21' +diff --git a/src/backends/native/meta-drm-buffer.c b/src/backends/native/meta-drm-buffer.c +index a0f8055b31..c650484552 100644 +--- a/src/backends/native/meta-drm-buffer.c ++++ b/src/backends/native/meta-drm-buffer.c +@@ -211,7 +211,9 @@ rm_fb_in_impl (MetaKmsImpl *impl, + int ret; + + fd = meta_kms_impl_device_get_fd (impl_device); +- ret = drmModeRmFB (fd, fb_id); ++ ret = drmModeCloseFB (fd, fb_id); ++ if (ret == -EINVAL) ++ ret = drmModeRmFB (fd, fb_id); + if (ret != 0) + g_warning ("drmModeRmFB: %s", g_strerror (-ret)); + +-- +2.44.0.501.g19981daefd.dirty + diff --git a/0001-backends-Avoid-disabling-touchscreen-outside-of-touc.patch b/0001-backends-Avoid-disabling-touchscreen-outside-of-touc.patch new file mode 100644 index 0000000000000000000000000000000000000000..1633c8b018e02d1edd4dee4b3e06fb7642b66e32 --- /dev/null +++ b/0001-backends-Avoid-disabling-touchscreen-outside-of-touc.patch @@ -0,0 +1,38 @@ +From 5471f40995b71cf838951a9e2fb2672e64aec66d Mon Sep 17 00:00:00 2001 +From: rpm-build +Date: Thu, 24 Apr 2025 16:41:32 +0200 +Subject: [PATCH] backends: Avoid disabling touchscreen outside of touch mode + +The reasons to disable touchscreen on dpms off apply mostly to +devices where the touch mode is useful, and not so much outside of +those. +--- + src/backends/meta-input-mapper.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/backends/meta-input-mapper.c b/src/backends/meta-input-mapper.c +index a0a4b8a..a8d7a10 100644 +--- a/src/backends/meta-input-mapper.c ++++ b/src/backends/meta-input-mapper.c +@@ -695,6 +695,7 @@ input_mapper_power_save_mode_changed_cb (MetaMonitorManager *monitor_manager, + { + ClutterInputDevice *device; + MetaLogicalMonitor *logical_monitor; ++ ClutterSeat *seat; + MetaMonitor *builtin; + MetaPowerSave power_save_mode; + gboolean on; +@@ -718,6 +719,10 @@ input_mapper_power_save_mode_changed_cb (MetaMonitorManager *monitor_manager, + if (!device) + return; + ++ seat = clutter_input_device_get_seat (device); ++ if (!clutter_seat_get_touch_mode (seat)) ++ return; ++ + g_signal_emit (mapper, signals[DEVICE_ENABLED], 0, device, on); + } + +-- +2.49.0 + diff --git a/0001-compositor-x11-sync-again-at-the-end-of-before_paint.patch b/0001-compositor-x11-sync-again-at-the-end-of-before_paint.patch new file mode 100644 index 0000000000000000000000000000000000000000..b86447928a4c055548e7db194be57256bd7d6051 --- /dev/null +++ b/0001-compositor-x11-sync-again-at-the-end-of-before_paint.patch @@ -0,0 +1,85 @@ +From f606a4424a5afc71672566b15f56971bfb7fa4db Mon Sep 17 00:00:00 2001 +From: Daniel van Vugt +Date: Fri, 16 Feb 2024 16:57:55 +0800 +Subject: [PATCH] compositor/x11: Sync again at the end of before_paint + +The existing comment tells us this is necessary: + +> there may be drawing between the last damage event and the +> XDamageSubtract() that needs to be flushed as well. + +But the commit message for 551101c65cda also tells us that +synchronization is necessary before-update. Assuming both are correct +then it needs to be done in both places. + +I did try optimizing out the second sync to only do it if damage +arrived during the update, but that doesn't seem to be the issue. +The damage event is arriving before the update starts and it's some +secondary changes within the damage region running late that need +flushing. So this means the client is reporting damage more frequently +than the frame rate and we're ignoring the secondary damage reports +for efficiency (XDamageReportBoundingBox), which is still a good thing. + +Fixes: 551101c65cda ("compositor-x11: Move synchronization to before-update") +Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2880 +Part-of: +--- + src/compositor/meta-compositor-x11.c | 30 ++++++++++++++++++++++++---- + 1 file changed, 26 insertions(+), 4 deletions(-) + +diff --git a/src/compositor/meta-compositor-x11.c b/src/compositor/meta-compositor-x11.c +index 1d0ba4c..8bfd4c1 100644 +--- a/src/compositor/meta-compositor-x11.c ++++ b/src/compositor/meta-compositor-x11.c +@@ -326,9 +326,7 @@ out: + } + + static void +-on_before_update (ClutterStage *stage, +- ClutterStageView *stage_view, +- MetaCompositor *compositor) ++maybe_do_sync (MetaCompositor *compositor) + { + MetaCompositorX11 *compositor_x11 = META_COMPOSITOR_X11 (compositor); + +@@ -363,6 +361,14 @@ on_before_update (ClutterStage *stage, + } + } + ++static void ++on_before_update (ClutterStage *stage, ++ ClutterStageView *stage_view, ++ MetaCompositor *compositor) ++{ ++ maybe_do_sync (compositor); ++} ++ + static void + on_after_update (ClutterStage *stage, + ClutterStageView *stage_view, +@@ -390,6 +396,22 @@ meta_compositor_x11_before_paint (MetaCompositor *compositor, + + parent_class = META_COMPOSITOR_CLASS (meta_compositor_x11_parent_class); + parent_class->before_paint (compositor, stage_view); ++ ++ /* We must sync after MetaCompositor's before_paint because that's the final ++ * time XDamageSubtract may happen before painting (when it calls ++ * meta_window_actor_x11_before_paint -> handle_updates -> ++ * meta_surface_actor_x11_handle_updates). If a client was to redraw between ++ * the last damage event and XDamageSubtract, and the bounding box of the ++ * region didn't grow, then we will not receive a new damage report for it ++ * (because XDamageReportBoundingBox). Then if we haven't synchronized again ++ * and the same region doesn't change on subsequent frames, we have lost some ++ * part of the update from the client. So to ensure the correct pixels get ++ * composited we must sync at least once between XDamageSubtract and ++ * compositing, which is here. More related documentation can be found in ++ * maybe_do_sync. ++ */ ++ ++ maybe_do_sync (compositor); + } + + static void +-- +GitLab + diff --git a/0001-xwayland-Relax-the-ownership-requirements-of-tmp-.X1.patch b/0001-xwayland-Relax-the-ownership-requirements-of-tmp-.X1.patch new file mode 100644 index 0000000000000000000000000000000000000000..724475726ca56e8bda3307e3ed3f934a583e8377 --- /dev/null +++ b/0001-xwayland-Relax-the-ownership-requirements-of-tmp-.X1.patch @@ -0,0 +1,104 @@ +From 9a9d5744143846f2fbc5da983070592217a344eb Mon Sep 17 00:00:00 2001 +From: Sebastian Wick +Date: Fri, 28 Jan 2022 15:49:11 +0100 +Subject: [PATCH 1/3] xwayland: Relax the ownership requirements of + /tmp/.X11-unix +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The `ensure_x11_unix_perms` function tries to detect systems on which +/tmp/.X11-unix is owned by neither root nor ourselves because in that +case the owner can take over the socket we create (symlink races are +fixed in linux 800179c9b8a1e796e441674776d11cd4c05d61d7). This should +not be possible in the first place and systems should come with some way +to ensure that's the case (systemd-tmpfiles, polyinstantiationm …). That +check however only works if we see the root user namespace which might +not be the case when running in e.g. toolbx. + +This change relaxes the requirements such that in the root user +namespace we detect and abort if a vulnerable system is detected but +unconditionally run in toolbx. + +Part-of: +(cherry picked from commit abadb291325e003c4afa054437303ee5b66af8a0) +--- + src/wayland/meta-xwayland.c | 34 +++++++++++++++++++++++++++------- + 1 file changed, 27 insertions(+), 7 deletions(-) + +diff --git a/src/wayland/meta-xwayland.c b/src/wayland/meta-xwayland.c +index c5a9303df9..2ca555ad65 100644 +--- a/src/wayland/meta-xwayland.c ++++ b/src/wayland/meta-xwayland.c +@@ -59,6 +59,7 @@ + #define XWAYLAND_LISTENFD "-listen" + #endif + ++#define TMP_UNIX_DIR "/tmp" + #define X11_TMP_UNIX_DIR "/tmp/.X11-unix" + #define X11_TMP_UNIX_PATH "/tmp/.X11-unix/X" + +@@ -651,9 +652,18 @@ meta_xwayland_override_display_number (int number) + static gboolean + ensure_x11_unix_perms (GError **error) + { +- struct stat buf; +- +- if (lstat (X11_TMP_UNIX_DIR, &buf) != 0) ++ /* Try to detect systems on which /tmp/.X11-unix is owned by neither root nor ++ * ourselves because in that case the owner can take over the socket we create ++ * (symlink races are fixed in linux 800179c9b8a1). This should not be ++ * possible in the first place and systems should come with some way to ensure ++ * that's the case (systemd-tmpfiles, polyinstantiation …). ++ * ++ * That check however only works if we see the root user namespace which might ++ * not be the case when running in e.g. toolbx (root and other user are all ++ * mapped to overflowuid). */ ++ struct stat x11_tmp, tmp; ++ ++ if (lstat (X11_TMP_UNIX_DIR, &x11_tmp) != 0) + { + g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errno), + "Failed to check permissions on directory \"%s\": %s", +@@ -661,8 +671,18 @@ ensure_x11_unix_perms (GError **error) + return FALSE; + } + +- /* If the directory already exists, it should belong to root or ourselves ... */ +- if (buf.st_uid != 0 && buf.st_uid != getuid ()) ++ if (lstat (TMP_UNIX_DIR, &tmp) != 0) ++ { ++ g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errno), ++ "Failed to check permissions on directory \"%s\": %s", ++ TMP_UNIX_DIR, g_strerror (errno)); ++ return FALSE; ++ } ++ ++ /* If the directory already exists, it should belong to the same ++ * user as /tmp or belong to ourselves ... ++ * (if /tmp is not owned by root or ourselves we're in deep trouble) */ ++ if (x11_tmp.st_uid != tmp.st_uid && x11_tmp.st_uid != getuid ()) + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED, + "Wrong ownership for directory \"%s\"", +@@ -671,7 +691,7 @@ ensure_x11_unix_perms (GError **error) + } + + /* ... be writable ... */ +- if ((buf.st_mode & 0022) != 0022) ++ if ((x11_tmp.st_mode & 0022) != 0022) + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED, + "Directory \"%s\" is not writable", +@@ -680,7 +700,7 @@ ensure_x11_unix_perms (GError **error) + } + + /* ... and have the sticky bit set */ +- if ((buf.st_mode & 01000) != 01000) ++ if ((x11_tmp.st_mode & 01000) != 01000) + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED, + "Directory \"%s\" is missing the sticky bit", +-- +2.50.0 + diff --git a/0002-Be-more-verbose-about-permissions-of-tmp-.X11-unix.patch b/0002-Be-more-verbose-about-permissions-of-tmp-.X11-unix.patch new file mode 100644 index 0000000000000000000000000000000000000000..df66343e7b968b4e6445e197a55faa9e52a40b75 --- /dev/null +++ b/0002-Be-more-verbose-about-permissions-of-tmp-.X11-unix.patch @@ -0,0 +1,31 @@ +From 1a5015dff70c2465e0a8a3df77ace8f0fbb3b20a Mon Sep 17 00:00:00 2001 +From: Nathan Pratta Teodosio +Date: Thu, 29 Aug 2024 09:25:13 +0200 +Subject: [PATCH 2/3] Be more verbose about permissions of /tmp/{,.X11-unix}. + +Part-of: +(cherry picked from commit 4dbaa8178116649076bf542a5eaf42d4ce804e5b) +--- + src/wayland/meta-xwayland.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/src/wayland/meta-xwayland.c b/src/wayland/meta-xwayland.c +index 2ca555ad65..7db122e8da 100644 +--- a/src/wayland/meta-xwayland.c ++++ b/src/wayland/meta-xwayland.c +@@ -685,8 +685,10 @@ ensure_x11_unix_perms (GError **error) + if (x11_tmp.st_uid != tmp.st_uid && x11_tmp.st_uid != getuid ()) + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED, +- "Wrong ownership for directory \"%s\"", +- X11_TMP_UNIX_DIR); ++ "Wrong ownership for directory \"%s\", owned by %d but " ++ "should be same as %s (owned by (%d)) or %d", ++ X11_TMP_UNIX_DIR, x11_tmp.st_uid, TMP_UNIX_DIR, tmp.st_uid, ++ getuid ()); + return FALSE; + } + +-- +2.50.0 + diff --git a/0003-Use-access-instead-of-checking-permission-modes-for-.patch b/0003-Use-access-instead-of-checking-permission-modes-for-.patch new file mode 100644 index 0000000000000000000000000000000000000000..45afc90030bf9757c7b47ae554bbfa1db766d494 --- /dev/null +++ b/0003-Use-access-instead-of-checking-permission-modes-for-.patch @@ -0,0 +1,34 @@ +From 58652bcf5fc379fd07d2cf9cc2b23d469df33f20 Mon Sep 17 00:00:00 2001 +From: Nathan Pratta Teodosio +Date: Fri, 13 Jun 2025 11:24:24 +0200 +Subject: [PATCH 3/3] Use 'access' instead of checking permission modes for + /tmp/.X11-unix/. + +The previous version was missing the 200 case with the directory owned by the +current user. + +C.f. https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7857, + https://launchpad.net/bugs/2069564. + +Part-of: +(cherry picked from commit 36ca36b48e7efd6846fac7533a4f2e97959a8ad6) +--- + src/wayland/meta-xwayland.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/wayland/meta-xwayland.c b/src/wayland/meta-xwayland.c +index 7db122e8da..c2e094e43c 100644 +--- a/src/wayland/meta-xwayland.c ++++ b/src/wayland/meta-xwayland.c +@@ -693,7 +693,7 @@ ensure_x11_unix_perms (GError **error) + } + + /* ... be writable ... */ +- if ((x11_tmp.st_mode & 0022) != 0022) ++ if (access (X11_TMP_UNIX_DIR, W_OK) != 0) + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED, + "Directory \"%s\" is not writable", +-- +2.50.0 + diff --git a/dist b/dist index 635820538d487259e6dce4499a172e3066902da5..89c1faffc18349bb12eee2371e9dc43bf419b95c 100644 --- a/dist +++ b/dist @@ -1 +1 @@ -an9_5 +an9 diff --git a/fix-cogl-framebuffer-get-bits-test.patch b/fix-cogl-framebuffer-get-bits-test.patch new file mode 100644 index 0000000000000000000000000000000000000000..cae8be300ed7751725debcdcd51154cf652d72df --- /dev/null +++ b/fix-cogl-framebuffer-get-bits-test.patch @@ -0,0 +1,295 @@ +From 03c65a2bce1f021c8c387cc5ed7e8c14c18a29f5 Mon Sep 17 00:00:00 2001 +From: Olivier Fourdan +Date: Fri, 2 Jun 2023 14:42:51 +0200 +Subject: [PATCH 1/5] cogl/gl-framebuffer: Fix spurious trailing spaces + +Purely cosmetic fix, no functional change. + +Part-of: +(cherry picked from commit 5a83e8ef8250526a40e8e69c6398f990ab482b2f) +--- + cogl/cogl/driver/gl/cogl-gl-framebuffer-back.c | 12 ++++++------ + cogl/cogl/driver/gl/cogl-gl-framebuffer-fbo.c | 12 ++++++------ + 2 files changed, 12 insertions(+), 12 deletions(-) + +diff --git a/cogl/cogl/driver/gl/cogl-gl-framebuffer-back.c b/cogl/cogl/driver/gl/cogl-gl-framebuffer-back.c +index d6609bb207..8d76f1578b 100644 +--- a/cogl/cogl/driver/gl/cogl-gl-framebuffer-back.c ++++ b/cogl/cogl/driver/gl/cogl-gl-framebuffer-back.c +@@ -72,32 +72,32 @@ ensure_bits_initialized (CoglGlFramebufferBack *gl_framebuffer_back) + GLenum attachment, pname; + size_t offset; + } params[] = { +- { ++ { + .attachment = GL_BACK_LEFT, + .pname = GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE, + .offset = offsetof (CoglFramebufferBits, red), + }, +- { ++ { + .attachment = GL_BACK_LEFT, + .pname = GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE, + .offset = offsetof (CoglFramebufferBits, green), + }, +- { ++ { + .attachment = GL_BACK_LEFT, + .pname = GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE, + .offset = offsetof (CoglFramebufferBits, blue), + }, +- { ++ { + .attachment = GL_BACK_LEFT, + .pname = GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE, + .offset = offsetof (CoglFramebufferBits, alpha), + }, +- { ++ { + .attachment = GL_DEPTH, + .pname = GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE, + .offset = offsetof (CoglFramebufferBits, depth), + }, +- { ++ { + .attachment = GL_STENCIL, + .pname = GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE, + .offset = offsetof (CoglFramebufferBits, stencil), +diff --git a/cogl/cogl/driver/gl/cogl-gl-framebuffer-fbo.c b/cogl/cogl/driver/gl/cogl-gl-framebuffer-fbo.c +index c8db6a23a2..1ffc1d5350 100644 +--- a/cogl/cogl/driver/gl/cogl-gl-framebuffer-fbo.c ++++ b/cogl/cogl/driver/gl/cogl-gl-framebuffer-fbo.c +@@ -82,32 +82,32 @@ ensure_bits_initialized (CoglGlFramebufferFbo *gl_framebuffer_fbo) + GLenum attachment, pname; + size_t offset; + } params[] = { +- { ++ { + .attachment = GL_COLOR_ATTACHMENT0, + .pname = GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE, + .offset = offsetof (CoglFramebufferBits, red), + }, +- { ++ { + .attachment = GL_COLOR_ATTACHMENT0, + .pname = GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE, + .offset = offsetof (CoglFramebufferBits, green), + }, +- { ++ { + .attachment = GL_COLOR_ATTACHMENT0, + .pname = GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE, + .offset = offsetof (CoglFramebufferBits, blue), + }, +- { ++ { + .attachment = GL_COLOR_ATTACHMENT0, + .pname = GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE, + .offset = offsetof (CoglFramebufferBits, alpha), + }, +- { ++ { + .attachment = GL_DEPTH_ATTACHMENT, + .pname = GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE, + .offset = offsetof (CoglFramebufferBits, depth), + }, +- { ++ { + .attachment = GL_STENCIL_ATTACHMENT, + .pname = GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE, + .offset = offsetof (CoglFramebufferBits, stencil), +-- +2.49.0 + + +From deee9d15b7f8e9595e10e43e815c585b42396f07 Mon Sep 17 00:00:00 2001 +From: Olivier Fourdan +Date: Fri, 2 Jun 2023 11:54:58 +0200 +Subject: [PATCH 2/5] cogl/gl-framebuffer: Fix inverted test in + ensure_bits_initialized() + +Cogl's feature COGL_PRIVATE_FEATURE_QUERY_FRAMEBUFFER_BITS is required +to use the GL_FRAMEBUFFER_ATTACHMENT_* queries. + +Unfortunately, the test for the availability of the private feature is +actually inverted in ensure_bits_initialized() which causes that whole +portion of code to be ignored, falling back to the glGetIntegerv() +method which isn't supported in core profiles. + +As Mesa has recently started to be more strict about these, this causes +the CI tests to fail in mutter. + +Part-of: +(cherry picked from commit a2203df9f43b9e501a972d23b3d5584005c03ce6) +--- + cogl/cogl/driver/gl/cogl-gl-framebuffer-fbo.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/cogl/cogl/driver/gl/cogl-gl-framebuffer-fbo.c b/cogl/cogl/driver/gl/cogl-gl-framebuffer-fbo.c +index 1ffc1d5350..75a8b0c1fe 100644 +--- a/cogl/cogl/driver/gl/cogl-gl-framebuffer-fbo.c ++++ b/cogl/cogl/driver/gl/cogl-gl-framebuffer-fbo.c +@@ -76,7 +76,7 @@ ensure_bits_initialized (CoglGlFramebufferFbo *gl_framebuffer_fbo) + COGL_FRAMEBUFFER_STATE_BIND); + + #ifdef HAVE_COGL_GL +- if (!_cogl_has_private_feature (ctx, COGL_PRIVATE_FEATURE_QUERY_FRAMEBUFFER_BITS)) ++ if (_cogl_has_private_feature (ctx, COGL_PRIVATE_FEATURE_QUERY_FRAMEBUFFER_BITS)) + { + const struct { + GLenum attachment, pname; +-- +2.49.0 + + +From a40d29a51382591d8e319af0b448d57510dacc86 Mon Sep 17 00:00:00 2001 +From: Olivier Fourdan +Date: Mon, 5 Jun 2023 10:31:38 +0200 +Subject: [PATCH 3/5] cogl/gl-framebuffer: Match testing features + +The function ensure_bits_initialized() in cogl-gl-framebuffer-fbo.c +checks for COGL_PRIVATE_FEATURE_QUERY_FRAMEBUFFER_BITS whereas the same +in cogl-gl-framebuffer-back.c simply checks for the driver being +COGL_DRIVER_GL3. + +Change the later to use the COGL_PRIVATE_FEATURE_QUERY_FRAMEBUFFER_BITS +flag as well. + +Part-of: +(cherry picked from commit fad240f437d6b11f664c9c09aecabe5f5e703eca) +--- + cogl/cogl/driver/gl/cogl-gl-framebuffer-back.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/cogl/cogl/driver/gl/cogl-gl-framebuffer-back.c b/cogl/cogl/driver/gl/cogl-gl-framebuffer-back.c +index 8d76f1578b..f6a17e8f07 100644 +--- a/cogl/cogl/driver/gl/cogl-gl-framebuffer-back.c ++++ b/cogl/cogl/driver/gl/cogl-gl-framebuffer-back.c +@@ -66,7 +66,7 @@ ensure_bits_initialized (CoglGlFramebufferBack *gl_framebuffer_back) + COGL_FRAMEBUFFER_STATE_BIND); + + #ifdef HAVE_COGL_GL +- if (ctx->driver == COGL_DRIVER_GL3) ++ if (_cogl_has_private_feature (ctx, COGL_PRIVATE_FEATURE_QUERY_FRAMEBUFFER_BITS)) + { + const struct { + GLenum attachment, pname; +-- +2.49.0 + + +From 2d183a8254fb3de388db78d53c282416add20905 Mon Sep 17 00:00:00 2001 +From: Olivier Fourdan +Date: Fri, 2 Jun 2023 14:27:29 +0200 +Subject: [PATCH 4/5] cogl/gl-framebuffer: Fail without QUERY_FRAMEBUFFER_BITS + +glGetIntegerv() with GL_RED_BITS/GL_GREEN_BITS/GL_BLUE_BITS/etc. is not +supported with the GL core context, so there is no point in falling back +to that without supporting COGL_PRIVATE_FEATURE_QUERY_FRAMEBUFFER_BITS, +as this will cause an GL error. + +Part-of: +(cherry picked from commit c3af4c1b1571b05f67d48b90d9ea7313f3ca6003) +--- + cogl/cogl/driver/gl/cogl-gl-framebuffer-back.c | 7 +------ + cogl/cogl/driver/gl/cogl-gl-framebuffer-fbo.c | 7 +------ + 2 files changed, 2 insertions(+), 12 deletions(-) + +diff --git a/cogl/cogl/driver/gl/cogl-gl-framebuffer-back.c b/cogl/cogl/driver/gl/cogl-gl-framebuffer-back.c +index f6a17e8f07..0ccd232407 100644 +--- a/cogl/cogl/driver/gl/cogl-gl-framebuffer-back.c ++++ b/cogl/cogl/driver/gl/cogl-gl-framebuffer-back.c +@@ -119,12 +119,7 @@ ensure_bits_initialized (CoglGlFramebufferBack *gl_framebuffer_back) + else + #endif /* HAVE_COGL_GL */ + { +- GE (ctx, glGetIntegerv (GL_RED_BITS, &bits->red)); +- GE (ctx, glGetIntegerv (GL_GREEN_BITS, &bits->green)); +- GE (ctx, glGetIntegerv (GL_BLUE_BITS, &bits->blue)); +- GE (ctx, glGetIntegerv (GL_ALPHA_BITS, &bits->alpha)); +- GE (ctx, glGetIntegerv (GL_DEPTH_BITS, &bits->depth)); +- GE (ctx, glGetIntegerv (GL_STENCIL_BITS, &bits->stencil)); ++ return FALSE; + } + + COGL_NOTE (FRAMEBUFFER, +diff --git a/cogl/cogl/driver/gl/cogl-gl-framebuffer-fbo.c b/cogl/cogl/driver/gl/cogl-gl-framebuffer-fbo.c +index 75a8b0c1fe..524196207f 100644 +--- a/cogl/cogl/driver/gl/cogl-gl-framebuffer-fbo.c ++++ b/cogl/cogl/driver/gl/cogl-gl-framebuffer-fbo.c +@@ -129,12 +129,7 @@ ensure_bits_initialized (CoglGlFramebufferFbo *gl_framebuffer_fbo) + else + #endif /* HAVE_COGL_GL */ + { +- GE (ctx, glGetIntegerv (GL_RED_BITS, &bits->red)); +- GE (ctx, glGetIntegerv (GL_GREEN_BITS, &bits->green)); +- GE (ctx, glGetIntegerv (GL_BLUE_BITS, &bits->blue)); +- GE (ctx, glGetIntegerv (GL_ALPHA_BITS, &bits->alpha)); +- GE (ctx, glGetIntegerv (GL_DEPTH_BITS, &bits->depth)); +- GE (ctx, glGetIntegerv (GL_STENCIL_BITS, &bits->stencil)); ++ return FALSE; + } + + if (!_cogl_has_private_feature (ctx, COGL_PRIVATE_FEATURE_ALPHA_TEXTURES) && +-- +2.49.0 + + +From 9b91892b5a14cc975e8f219fbad0548e017535b7 Mon Sep 17 00:00:00 2001 +From: Olivier Fourdan +Date: Mon, 5 Jun 2023 10:38:41 +0200 +Subject: [PATCH 5/5] cogl/gl-framebuffer: Remove conditional on HAVE_COGL_GL + +By testing the features flag, we can get rid of the conditional build +on HAVE_COGL_GL entirely. + +Part-of: +(cherry picked from commit d65883e0d7d70987e3888b86222b109c35f5a7a2) +--- + cogl/cogl/driver/gl/cogl-gl-framebuffer-back.c | 2 -- + cogl/cogl/driver/gl/cogl-gl-framebuffer-fbo.c | 2 -- + 2 files changed, 4 deletions(-) + +diff --git a/cogl/cogl/driver/gl/cogl-gl-framebuffer-back.c b/cogl/cogl/driver/gl/cogl-gl-framebuffer-back.c +index 0ccd232407..94154d48ef 100644 +--- a/cogl/cogl/driver/gl/cogl-gl-framebuffer-back.c ++++ b/cogl/cogl/driver/gl/cogl-gl-framebuffer-back.c +@@ -65,7 +65,6 @@ ensure_bits_initialized (CoglGlFramebufferBack *gl_framebuffer_back) + framebuffer, + COGL_FRAMEBUFFER_STATE_BIND); + +-#ifdef HAVE_COGL_GL + if (_cogl_has_private_feature (ctx, COGL_PRIVATE_FEATURE_QUERY_FRAMEBUFFER_BITS)) + { + const struct { +@@ -117,7 +116,6 @@ ensure_bits_initialized (CoglGlFramebufferBack *gl_framebuffer_back) + } + } + else +-#endif /* HAVE_COGL_GL */ + { + return FALSE; + } +diff --git a/cogl/cogl/driver/gl/cogl-gl-framebuffer-fbo.c b/cogl/cogl/driver/gl/cogl-gl-framebuffer-fbo.c +index 524196207f..3ea133d314 100644 +--- a/cogl/cogl/driver/gl/cogl-gl-framebuffer-fbo.c ++++ b/cogl/cogl/driver/gl/cogl-gl-framebuffer-fbo.c +@@ -75,7 +75,6 @@ ensure_bits_initialized (CoglGlFramebufferFbo *gl_framebuffer_fbo) + framebuffer, + COGL_FRAMEBUFFER_STATE_BIND); + +-#ifdef HAVE_COGL_GL + if (_cogl_has_private_feature (ctx, COGL_PRIVATE_FEATURE_QUERY_FRAMEBUFFER_BITS)) + { + const struct { +@@ -127,7 +126,6 @@ ensure_bits_initialized (CoglGlFramebufferFbo *gl_framebuffer_fbo) + } + } + else +-#endif /* HAVE_COGL_GL */ + { + return FALSE; + } +-- +2.49.0 + diff --git a/mutter.spec b/mutter.spec index 06e1934e60dc145055a0773ac3c9ce1a9351065a..b537dee2567e5e46b46dbc24c596763431505a16 100644 --- a/mutter.spec +++ b/mutter.spec @@ -11,7 +11,7 @@ Name: mutter Version: 40.9 -Release: 23%{anolis_release}%{?dist} +Release: 28%{anolis_release}%{?dist} Summary: Window and compositing manager based on Clutter License: GPLv2+ @@ -147,8 +147,27 @@ Patch63: 0003-window-Unregister-cgroup-on-unmanage.patch Patch64: 0004-window-Don-t-use-cgroup-workspace-if-there-already-i.patch Patch65: 0005-cgroup-Get-app-info-from-gnome-shell-when-possible.patch -# RHEL-56602 -Patch66: double-key-event-handling.patch +# RHEL-10895 +Patch66: 0001-backend-native-Use-drmModeCloseFB-for-flicker-free-l.patch + +# RHEL-21286 +Patch67: double-key-event-handling.patch + +# RHEL-31742 +Patch68: 0001-backends-Avoid-disabling-touchscreen-outside-of-touc.patch + +# RHEL-90588 +# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2261 +Patch69: 0001-xwayland-Relax-the-ownership-requirements-of-tmp-.X1.patch +# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3984 +Patch70: 0002-Be-more-verbose-about-permissions-of-tmp-.X11-unix.patch +Patch71: 0003-Use-access-instead-of-checking-permission-modes-for-.patch + +# RHEL-4521 +Patch72: fix-cogl-framebuffer-get-bits-test.patch + +# RHEL-89352 +Patch73: 0001-compositor-x11-sync-again-at-the-end-of-before_paint.patch BuildRequires: chrpath BuildRequires: pango-devel @@ -308,12 +327,32 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop %{_datadir}/mutter-%{mutter_api_version}/tests %changelog -* Mon May 12 2025 mgb01105731 - 40.9-23.0.1 +* Wed Nov 19 2025 mgb01105731 - 40.9-28.0.1 - Add doc sub package -* Tue Jan 28 2025 Carlos Garnacho - 40.9-23 +* Tue Jul 01 2025 Jan Grulich - 40.9-28 +- Backport fix for screen not refreshing properly + Resolves: RHEL-89352 + +* Fri Jun 27 2025 Jonas Ådahl - 40.9-27 +- Backport fixes for cogl OpenGL conformance + Resolves: RHEL-4521 + +* Mon May 12 2025 Olivier Fourdan - 40.9-26 +- Fix polyinstantiation preventing Xwayland to start + Resolves: RHEL-90588 + +* Thu Apr 24 2025 Carlos Garnacho - 40.9-25 +- Do not disable touchscreen on DPMS off if touch-mode is disabled + Resolves: RHEL-31742 + +* Tue Jan 28 2025 Carlos Garnacho - 40.9-24 - Fix stuck modifier keys - Resolves: RHEL-56602 + Resolves: RHEL-21286 + +* Fri Nov 01 2024 Jonas Ådahl - 40.9-23 +- Backport fix for flicker-free login + Resolves: RHEL-10895 * Fri Oct 18 2024 Jonas Ådahl - 40.9-22 - Fix crash when moving window while switching workspace