summaryrefslogtreecommitdiff
path: root/x11-wm/mutter/files
diff options
context:
space:
mode:
Diffstat (limited to 'x11-wm/mutter/files')
-rw-r--r--x11-wm/mutter/files/patch-clutter_clutter_clutter-frame-clock.c23
-rw-r--r--x11-wm/mutter/files/patch-clutter_clutter_clutter-stage-view.c58
-rw-r--r--x11-wm/mutter/files/patch-cogl_cogl_cogl-dma-buf-handle.c45
-rw-r--r--x11-wm/mutter/files/patch-cogl_cogl_cogl-dma-buf-handle.h22
-rw-r--r--x11-wm/mutter/files/patch-da3ae7f0.patch29
-rw-r--r--x11-wm/mutter/files/patch-meson.build20
-rw-r--r--x11-wm/mutter/files/patch-src_backends_meta-stage-impl.c18
-rw-r--r--x11-wm/mutter/files/patch-src_backends_x11_meta-input-settings-x11.c39
-rw-r--r--x11-wm/mutter/files/patch-src_backends_x11_meta-seat-x11.c44
-rw-r--r--x11-wm/mutter/files/patch-src_core_meta-context-main.c24
-rw-r--r--x11-wm/mutter/files/patch-src_wayland_meta-wayland-buffer.c46
-rw-r--r--x11-wm/mutter/files/patch-src_wayland_meta-wayland-dma-buf.c152
-rw-r--r--x11-wm/mutter/files/patch-src_wayland_meta-xwayland.c27
13 files changed, 361 insertions, 186 deletions
diff --git a/x11-wm/mutter/files/patch-clutter_clutter_clutter-frame-clock.c b/x11-wm/mutter/files/patch-clutter_clutter_clutter-frame-clock.c
new file mode 100644
index 000000000000..d17c08df52ba
--- /dev/null
+++ b/x11-wm/mutter/files/patch-clutter_clutter_clutter-frame-clock.c
@@ -0,0 +1,23 @@
+--- clutter/clutter/clutter-frame-clock.c.orig 2023-10-31 18:35:00 UTC
++++ clutter/clutter/clutter-frame-clock.c
+@@ -845,7 +845,7 @@ clutter_frame_clock_get_max_render_time_debug_info (Cl
+ GString *string;
+
+ string = g_string_new (NULL);
+- g_string_append_printf (string, "Max render time: %ld µs",
++ g_string_append_printf (string, "Max render time: %lld µs",
+ clutter_frame_clock_compute_max_render_time_us (frame_clock));
+
+ if (frame_clock->got_measurements_last_frame)
+@@ -857,9 +857,9 @@ clutter_frame_clock_get_max_render_time_debug_info (Cl
+ MAX (frame_clock->longterm_max_update_duration_us,
+ frame_clock->shortterm_max_update_duration_us);
+
+- g_string_append_printf (string, "\nVblank duration: %ld µs +",
++ g_string_append_printf (string, "\nVblank duration: %lld µs +",
+ frame_clock->vblank_duration_us);
+- g_string_append_printf (string, "\nUpdate duration: %ld µs +",
++ g_string_append_printf (string, "\nUpdate duration: %lld µs +",
+ max_update_duration_us);
+ g_string_append_printf (string, "\nConstant: %d µs",
+ clutter_max_render_time_constant_us);
diff --git a/x11-wm/mutter/files/patch-clutter_clutter_clutter-stage-view.c b/x11-wm/mutter/files/patch-clutter_clutter_clutter-stage-view.c
deleted file mode 100644
index e12a21f4fefb..000000000000
--- a/x11-wm/mutter/files/patch-clutter_clutter_clutter-stage-view.c
+++ /dev/null
@@ -1,58 +0,0 @@
-$OpenBSD: patch-clutter_clutter_clutter-stage-view_c,v 1.1 2021/06/04 10:56:17 ajacoutot Exp $
-
-Index: clutter/clutter/clutter-stage-view.c
---- clutter/clutter/clutter-stage-view.c.orig
-+++ clutter/clutter/clutter-stage-view.c
-@@ -543,13 +543,13 @@ find_damaged_tiles (ClutterStageView *view,
- bpp = cogl_dma_buf_handle_get_bpp (current_dma_buf_handle);
-
- cogl_framebuffer_finish (COGL_FRAMEBUFFER (priv->shadow.framebuffer));
--
-+#ifdef __linux__
- if (!cogl_dma_buf_handle_sync_read_start (prev_dma_buf_handle, error))
- return NULL;
-
- if (!cogl_dma_buf_handle_sync_read_start (current_dma_buf_handle, error))
- goto err_sync_read_current;
--
-+#endif
- prev_data = cogl_dma_buf_handle_mmap (prev_dma_buf_handle, error);
- if (!prev_data)
- goto err_mmap_prev;
-@@ -594,7 +594,7 @@ find_damaged_tiles (ClutterStageView *view,
- cairo_region_union_rectangle (tile_damage_region, &tile);
- }
- }
--
-+#ifdef __linux__
- if (!cogl_dma_buf_handle_sync_read_end (prev_dma_buf_handle, error))
- {
- g_warning ("Failed to end DMA buffer read synchronization: %s",
-@@ -608,7 +608,7 @@ find_damaged_tiles (ClutterStageView *view,
- (*error)->message);
- g_clear_error (error);
- }
--
-+#endif
- cogl_dma_buf_handle_munmap (prev_dma_buf_handle, prev_data, NULL);
- cogl_dma_buf_handle_munmap (current_dma_buf_handle, current_data, NULL);
-
-@@ -618,13 +618,16 @@ find_damaged_tiles (ClutterStageView *view,
-
- err_mmap_current:
- cogl_dma_buf_handle_munmap (prev_dma_buf_handle, prev_data, NULL);
--
-+#ifdef __linux__
- err_mmap_prev:
- cogl_dma_buf_handle_sync_read_end (current_dma_buf_handle, NULL);
-
- err_sync_read_current:
- cogl_dma_buf_handle_sync_read_end (prev_dma_buf_handle, NULL);
--
-+#else
-+err_mmap_prev:
-+err_sync_read_current:
-+#endif
- return NULL;
- }
-
diff --git a/x11-wm/mutter/files/patch-cogl_cogl_cogl-dma-buf-handle.c b/x11-wm/mutter/files/patch-cogl_cogl_cogl-dma-buf-handle.c
index a0739e3d4895..86768c36f809 100644
--- a/x11-wm/mutter/files/patch-cogl_cogl_cogl-dma-buf-handle.c
+++ b/x11-wm/mutter/files/patch-cogl_cogl_cogl-dma-buf-handle.c
@@ -1,32 +1,31 @@
-$OpenBSD: patch-cogl_cogl_cogl-dma-buf-handle_c,v 1.2 2021/06/04 10:56:17 ajacoutot Exp $
-
Index: cogl/cogl/cogl-dma-buf-handle.c
---- cogl/cogl/cogl-dma-buf-handle.c.orig
+--- cogl/cogl/cogl-dma-buf-handle.c.orig 2023-07-06 10:42:04 UTC
+++ cogl/cogl/cogl-dma-buf-handle.c
-@@ -36,8 +36,10 @@
-
+@@ -37,7 +37,27 @@
#include <errno.h>
#include <gio/gio.h>
+ #include <glib/gstdio.h>
+#ifdef __linux__
#include <linux/dma-buf.h>
- #include <sys/ioctl.h>
++#else
++typedef uint64_t __u64;
++
++// From https://github.com/evadot/drm-subtree or https://reviews.freebsd.org/D23085
++struct dma_buf_sync
++{
++ __u64 flags;
++};
++
++#define DMA_BUF_SYNC_READ (1 << 0)
++#define DMA_BUF_SYNC_WRITE (2 << 0)
++#define DMA_BUF_SYNC_RW (DMA_BUF_SYNC_READ | DMA_BUF_SYNC_WRITE)
++#define DMA_BUF_SYNC_START (0 << 2)
++#define DMA_BUF_SYNC_END (1 << 2)
++#define DMA_BUF_SYNC_VALID_FLAGS_MASK \
++ (DMA_BUF_SYNC_RW | DMA_BUF_SYNC_END)
++#define DMA_BUF_BASE 'b'
++#define DMA_BUF_IOCTL_SYNC _IOW(DMA_BUF_BASE, 0, struct dma_buf_sync)
+#endif
+ #include <sys/ioctl.h>
#include <sys/mman.h>
#include <unistd.h>
-
-@@ -101,6 +103,7 @@ cogl_dma_buf_handle_free (CoglDmaBufHandle *dmabuf_han
- g_free (dmabuf_handle);
- }
-
-+#ifdef __linux__
- static gboolean
- sync_read (CoglDmaBufHandle *dmabuf_handle,
- uint64_t start_or_end,
-@@ -147,6 +150,7 @@ cogl_dma_buf_handle_sync_read_end (CoglDmaBufHandle *
- {
- return sync_read (dmabuf_handle, DMA_BUF_SYNC_END, error);
- }
-+#endif
-
- gpointer
- cogl_dma_buf_handle_mmap (CoglDmaBufHandle *dmabuf_handle,
diff --git a/x11-wm/mutter/files/patch-cogl_cogl_cogl-dma-buf-handle.h b/x11-wm/mutter/files/patch-cogl_cogl_cogl-dma-buf-handle.h
deleted file mode 100644
index a7b5dcad6553..000000000000
--- a/x11-wm/mutter/files/patch-cogl_cogl_cogl-dma-buf-handle.h
+++ /dev/null
@@ -1,22 +0,0 @@
-$OpenBSD: patch-cogl_cogl_cogl-dma-buf-handle_h,v 1.2 2021/06/04 10:56:17 ajacoutot Exp $
-
-Index: cogl/cogl/cogl-dma-buf-handle.h
---- cogl/cogl/cogl-dma-buf-handle.h.orig
-+++ cogl/cogl/cogl-dma-buf-handle.h
-@@ -63,6 +63,7 @@ cogl_dma_buf_handle_new (CoglFramebuffer *framebuffer,
- COGL_EXPORT void
- cogl_dma_buf_handle_free (CoglDmaBufHandle *dmabuf_handle);
-
-+# ifdef __linux__
- COGL_EXPORT gboolean
- cogl_dma_buf_handle_sync_read_start (CoglDmaBufHandle *dmabuf_handle,
- GError **error);
-@@ -70,7 +71,7 @@ cogl_dma_buf_handle_sync_read_start (CoglDmaBufHandle
- COGL_EXPORT gboolean
- cogl_dma_buf_handle_sync_read_end (CoglDmaBufHandle *dmabuf_handle,
- GError **error);
--
-+# endif
- COGL_EXPORT gpointer
- cogl_dma_buf_handle_mmap (CoglDmaBufHandle *dmabuf_handle,
- GError **error);
diff --git a/x11-wm/mutter/files/patch-da3ae7f0.patch b/x11-wm/mutter/files/patch-da3ae7f0.patch
new file mode 100644
index 000000000000..3f26bf205ebe
--- /dev/null
+++ b/x11-wm/mutter/files/patch-da3ae7f0.patch
@@ -0,0 +1,29 @@
+Revert:
+From da3ae7f0e68d8fab424a260e8f8300a217ccf0ee Mon Sep 17 00:00:00 2001
+From: Kamil Szczęk <kamil@szczek.dev>
+Date: Mon, 30 Sep 2024 11:24:32 +0200
+Subject: [PATCH] udev: Use current tags when looking for preferred primary
+ devices
+
+--- meson.build.orig 2024-11-25 14:05:12 UTC
++++ meson.build
+@@ -42,7 +42,7 @@ udev_req = '>= 228'
+
+ # optional version requirements
+ udev_req = '>= 228'
+-gudev_req = '>= 238'
++gudev_req = '>= 232'
+
+ # wayland version requirements
+ wayland_server_req = '>= 1.22'
+--- src/backends/native/meta-udev.c.orig 2024-11-25 14:05:12 UTC
++++ src/backends/native/meta-udev.c
+@@ -125,7 +125,7 @@ meta_is_udev_device_preferred_primary (GUdevDevice *de
+ {
+ const char * const *tags;
+
+- tags = g_udev_device_get_current_tags (device);
++ tags = g_udev_device_get_tags (device);
+ if (!tags)
+ return FALSE;
+
diff --git a/x11-wm/mutter/files/patch-meson.build b/x11-wm/mutter/files/patch-meson.build
new file mode 100644
index 000000000000..29f3431e24d1
--- /dev/null
+++ b/x11-wm/mutter/files/patch-meson.build
@@ -0,0 +1,20 @@
+--- meson.build.orig 2023-07-06 10:42:04 UTC
++++ meson.build
+@@ -226,11 +226,15 @@ have_libgudev = get_option('udev')
+ if have_libgudev
+ libudev_dep = dependency('libudev', version: udev_req)
+ gudev_dep = dependency('gudev-1.0', version: gudev_req)
+- udev_dep = dependency('udev')
++ udev_dep = dependency('udev', required: false)
+
+ udev_dir = get_option('udev_dir')
+ if udev_dir == ''
+- udev_dir = udev_dep.get_variable('udevdir')
++ if udev_dep.found()
++ udev_dir = udev_dep.get_variable('udevdir')
++ else
++ udev_dir = libdir / 'udev'
++ endif
+ endif
+ endif
+
diff --git a/x11-wm/mutter/files/patch-src_backends_meta-stage-impl.c b/x11-wm/mutter/files/patch-src_backends_meta-stage-impl.c
new file mode 100644
index 000000000000..14b366632ca8
--- /dev/null
+++ b/x11-wm/mutter/files/patch-src_backends_meta-stage-impl.c
@@ -0,0 +1,18 @@
+https://gitlab.gnome.org/GNOME/mutter/-/issues/2103
+
+--- src/backends/meta-stage-impl.c.orig 2024-11-25 14:05:12 UTC
++++ src/backends/meta-stage-impl.c
+@@ -612,9 +612,13 @@ meta_stage_impl_redraw_view_primary (MetaStageImpl
+ * artefacts.
+ */
+ /* swap_region does not need damage history, set it up before that */
++#if 0
+ if (!use_clipped_redraw)
+ swap_region = mtk_region_create ();
+ else if (clutter_stage_view_has_shadowfb (stage_view))
++#else
++ if (clutter_stage_view_has_shadowfb (stage_view))
++#endif
+ swap_region = mtk_region_ref (fb_clip_region);
+ else
+ swap_region = mtk_region_copy (fb_clip_region);
diff --git a/x11-wm/mutter/files/patch-src_backends_x11_meta-input-settings-x11.c b/x11-wm/mutter/files/patch-src_backends_x11_meta-input-settings-x11.c
deleted file mode 100644
index 56be8ec7b216..000000000000
--- a/x11-wm/mutter/files/patch-src_backends_x11_meta-input-settings-x11.c
+++ /dev/null
@@ -1,39 +0,0 @@
-$OpenBSD: patch-src_backends_x11_meta-input-settings-x11_c,v 1.5 2021/06/04 10:56:17 ajacoutot Exp $
-
-Index: src/backends/x11/meta-input-settings-x11.c
---- src/backends/x11/meta-input-settings-x11.c.orig
-+++ src/backends/x11/meta-input-settings-x11.c
-@@ -45,6 +45,7 @@ typedef struct _MetaInputSettingsX11Private
- #ifdef HAVE_LIBGUDEV
- GUdevClient *udev_client;
- #endif
-+ bool dummy_field; // struct needs at least one element to compile
- } MetaInputSettingsX11Private;
-
- G_DEFINE_TYPE_WITH_PRIVATE (MetaInputSettingsX11, meta_input_settings_x11,
-@@ -765,11 +766,10 @@ meta_input_settings_x11_set_tablet_aspect_ratio (MetaI
- static void
- meta_input_settings_x11_dispose (GObject *object)
- {
--#ifdef HAVE_LIBGUDEV
- MetaInputSettingsX11 *settings_x11 = META_INPUT_SETTINGS_X11 (object);
- MetaInputSettingsX11Private *priv =
- meta_input_settings_x11_get_instance_private (settings_x11);
--
-+#ifdef HAVE_LIBGUDEV
- g_clear_object (&priv->udev_client);
- #endif
-
-@@ -938,11 +938,10 @@ meta_input_settings_x11_class_init (MetaInputSettingsX
- static void
- meta_input_settings_x11_init (MetaInputSettingsX11 *settings)
- {
--#ifdef HAVE_LIBGUDEV
- MetaInputSettingsX11Private *priv =
- meta_input_settings_x11_get_instance_private (settings);
- const char *subsystems[] = { NULL };
--
-+#ifdef HAVE_LIBGUDEV
- priv->udev_client = g_udev_client_new (subsystems);
- #endif
- }
diff --git a/x11-wm/mutter/files/patch-src_backends_x11_meta-seat-x11.c b/x11-wm/mutter/files/patch-src_backends_x11_meta-seat-x11.c
deleted file mode 100644
index 5845d2d285b2..000000000000
--- a/x11-wm/mutter/files/patch-src_backends_x11_meta-seat-x11.c
+++ /dev/null
@@ -1,44 +0,0 @@
-$OpenBSD: patch-src_backends_x11_meta-seat-x11_c,v 1.3 2021/06/04 10:56:17 ajacoutot Exp $
-
-Index: src/backends/x11/meta-seat-x11.c
---- src/backends/x11/meta-seat-x11.c.orig
-+++ src/backends/x11/meta-seat-x11.c
-@@ -17,8 +17,9 @@
- * Author: Carlos Garnacho <carlosg@gnome.org>
- */
- #include "config.h"
--
-+#ifdef __linux__
- #include <linux/input-event-codes.h>
-+#endif
- #include <X11/extensions/XInput2.h>
- #include <X11/extensions/XKB.h>
-
-@@ -1733,7 +1734,7 @@ get_source_device_checked (MetaSeatX11 *seat,
-
- return source_device;
- }
--
-+#ifdef __linux__
- static uint32_t
- evdev_button_code (uint32_t x_button)
- {
-@@ -1762,7 +1763,7 @@ evdev_button_code (uint32_t x_button)
-
- return button;
- }
--
-+#endif
- gboolean
- meta_seat_x11_translate_event (MetaSeatX11 *seat,
- XEvent *xevent,
-@@ -2050,7 +2051,9 @@ meta_seat_x11_translate_event (MetaSeatX11 *seat,
- event->button.time = xev->time;
- translate_coords (stage_x11, xev->event_x, xev->event_y, &event->button.x, &event->button.y);
- event->button.button = xev->detail;
-+#ifdef __linux__
- event->button.evdev_code = evdev_button_code (xev->detail);
-+#endif
- meta_input_device_x11_translate_state (event,
- &xev->mods,
- &xev->buttons,
diff --git a/x11-wm/mutter/files/patch-src_core_meta-context-main.c b/x11-wm/mutter/files/patch-src_core_meta-context-main.c
new file mode 100644
index 000000000000..ed1fc10ad094
--- /dev/null
+++ b/x11-wm/mutter/files/patch-src_core_meta-context-main.c
@@ -0,0 +1,24 @@
+Based on https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=258042
+
+--- src/core/meta-context-main.c.orig 2025-03-04 18:56:53 UTC
++++ src/core/meta-context-main.c
+@@ -25,7 +25,7 @@
+ #include <glib.h>
+ #include <gio/gio.h>
+
+-#ifdef HAVE_WAYLAND
++#if defined(HAVE_LIBSYSTEMD) && defined(HAVE_WAYLAND)
+ #include <systemd/sd-login.h>
+ #endif
+
+@@ -348,8 +348,10 @@ meta_context_main_get_x11_display_policy (MetaContext
+ #ifdef HAVE_WAYLAND
+ if (context_main->options.no_x11)
+ return META_X11_DISPLAY_POLICY_DISABLED;
++#ifdef HAVE_LIBSYSTEMD
+ else if (sd_pid_get_user_unit (0, &unit) < 0)
+ return META_X11_DISPLAY_POLICY_MANDATORY;
++#endif
+ else
+ return META_X11_DISPLAY_POLICY_ON_DEMAND;
+ #else /* HAVE_WAYLAND */
diff --git a/x11-wm/mutter/files/patch-src_wayland_meta-wayland-buffer.c b/x11-wm/mutter/files/patch-src_wayland_meta-wayland-buffer.c
new file mode 100644
index 000000000000..4f2e3087ee4c
--- /dev/null
+++ b/x11-wm/mutter/files/patch-src_wayland_meta-wayland-buffer.c
@@ -0,0 +1,46 @@
+Based on https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=258042
+
+--- src/wayland/meta-wayland-buffer.c.orig 2024-11-25 14:05:12 UTC
++++ src/wayland/meta-wayland-buffer.c
+@@ -228,6 +228,7 @@ shm_to_drm_format (enum wl_shm_format format)
+ return format;
+ }
+
++#ifdef HAVE_NATIVE_BACKEND
+ static const char *
+ shm_format_to_string (MetaDrmFormatBuf *format_buf,
+ enum wl_shm_format shm_format)
+@@ -237,6 +238,7 @@ shm_format_to_string (MetaDrmFormatBuf *format_buf,
+ drm_format = shm_to_drm_format (shm_format);
+ return meta_drm_format_to_string (format_buf, drm_format);
+ }
++#endif
+
+ static const MetaFormatInfo *
+ get_supported_shm_format_info (uint32_t shm_format)
+@@ -409,7 +411,9 @@ shm_buffer_attach (MetaWaylandBuffer *buffer,
+ int stride, width, height;
+ MetaMultiTextureFormat multi_format;
+ CoglPixelFormat cogl_format;
++#ifdef HAVE_NATIVE_BACKEND
+ MetaDrmFormatBuf format_buf;
++#endif
+ uint32_t shm_format;
+ const MetaFormatInfo *format_info;
+
+@@ -430,6 +434,7 @@ shm_buffer_attach (MetaWaylandBuffer *buffer,
+ cogl_format = format_info->cogl_format;
+ multi_format = format_info->multi_texture_format;
+
++#ifdef HAVE_NATIVE_BACKEND
+ meta_topic (META_DEBUG_WAYLAND,
+ "[wl-shm] wl_buffer@%u wl_shm_format %s "
+ "-> MetaMultiTextureFormat %s / CoglPixelFormat %s",
+@@ -437,6 +442,7 @@ shm_buffer_attach (MetaWaylandBuffer *buffer,
+ shm_format_to_string (&format_buf, shm_format),
+ meta_multi_texture_format_to_string (multi_format),
+ cogl_pixel_format_to_string (cogl_format));
++#endif
+
+ if (*texture &&
+ meta_multi_texture_get_width (*texture) == width &&
diff --git a/x11-wm/mutter/files/patch-src_wayland_meta-wayland-dma-buf.c b/x11-wm/mutter/files/patch-src_wayland_meta-wayland-dma-buf.c
new file mode 100644
index 000000000000..723d17b181ba
--- /dev/null
+++ b/x11-wm/mutter/files/patch-src_wayland_meta-wayland-dma-buf.c
@@ -0,0 +1,152 @@
+Adapt changes https://gitlab.gnome.org/GNOME/mutter/-/commit/c4773089
+
+--- src/wayland/meta-wayland-dma-buf.c.orig 2024-11-25 14:05:12 UTC
++++ src/wayland/meta-wayland-dma-buf.c
+@@ -39,7 +39,9 @@
+
+ #include <drm_fourcc.h>
+ #include <glib/gstdio.h>
++#ifdef __linux__
+ #include <linux/dma-buf.h>
++#endif
+ #include <sys/ioctl.h>
+ #include <sys/stat.h>
+ #include <sys/types.h>
+@@ -72,6 +74,26 @@
+
+ #define META_WAYLAND_DMA_BUF_MAX_FDS 4
+
++#ifndef __linux__
++/* From https://reviews.freebsd.org/D23085 */
++typedef uint64_t __u64;
++
++struct dma_buf_sync
++{
++ __u64 flags;
++};
++
++#define DMA_BUF_SYNC_READ (1 << 0)
++#define DMA_BUF_SYNC_WRITE (2 << 0)
++#define DMA_BUF_SYNC_RW (DMA_BUF_SYNC_READ | DMA_BUF_SYNC_WRITE)
++#define DMA_BUF_SYNC_START (0 << 2)
++#define DMA_BUF_SYNC_END (1 << 2)
++#define DMA_BUF_SYNC_VALID_FLAGS_MASK \
++ (DMA_BUF_SYNC_RW | DMA_BUF_SYNC_END)
++#define DMA_BUF_BASE 'b'
++#define DMA_BUF_IOCTL_SYNC _IOW(DMA_BUF_BASE, 0, struct dma_buf_sync)
++#endif
++
+ /* Compatible with zwp_linux_dmabuf_feedback_v1.tranche_flags */
+ typedef enum _MetaWaylandDmaBufTrancheFlags
+ {
+@@ -863,7 +885,9 @@ typedef struct _MetaWaylandDmaBufSource
+ gpointer user_data;
+
+ gpointer fd_tags[META_WAYLAND_DMA_BUF_MAX_FDS];
++#ifdef __linux__
+ int owned_sync_fd[META_WAYLAND_DMA_BUF_MAX_FDS];
++#endif
+ } MetaWaylandDmaBufSource;
+
+ static gboolean
+@@ -898,11 +922,13 @@ meta_wayland_dma_buf_source_dispatch (GSource *bas
+ for (i = 0; i < META_WAYLAND_DMA_BUF_MAX_FDS; i++)
+ {
+ gpointer fd_tag = source->fd_tags[i];
+- int fd;
+
+ if (!fd_tag)
+ continue;
+
++#ifdef __linux__
++ int fd;
++
+ fd = source->owned_sync_fd[i];
+ if (fd < 0)
+ fd = dma_buf->fds[i];
+@@ -912,10 +938,19 @@ meta_wayland_dma_buf_source_dispatch (GSource *bas
+ ready = FALSE;
+ continue;
+ }
++#else
++ if (!is_fd_readable (dma_buf->fds[i]))
++ {
++ ready = FALSE;
++ continue;
++ }
++#endif
+
+ g_source_remove_unix_fd (&source->base, fd_tag);
+ source->fd_tags[i] = NULL;
++#ifdef __linux__
+ g_clear_fd (&source->owned_sync_fd[i], NULL);
++#endif
+ }
+
+ if (!ready)
+@@ -942,7 +977,9 @@ meta_wayland_dma_buf_source_finalize (GSource *base)
+ {
+ g_source_remove_unix_fd (&source->base, fd_tag);
+ source->fd_tags[i] = NULL;
++#ifdef __linux__
+ g_clear_fd (&source->owned_sync_fd[i], NULL);
++#endif
+ }
+ }
+
+@@ -960,7 +997,6 @@ create_source (MetaWaylandBuffer *buffer
+ gpointer user_data)
+ {
+ MetaWaylandDmaBufSource *source;
+- int i;
+
+ source =
+ (MetaWaylandDmaBufSource *) g_source_new (&meta_wayland_dma_buf_source_funcs,
+@@ -971,12 +1007,17 @@ create_source (MetaWaylandBuffer *buffer
+ source->dispatch = dispatch;
+ source->user_data = user_data;
+
++#ifdef __linux__
++ int i;
++
+ for (i = 0; i < META_WAYLAND_DMA_BUF_MAX_FDS; i++)
+ source->owned_sync_fd[i] = -1;
++#endif
+
+ return source;
+ }
+
++#ifdef __linux__
+ static int
+ get_sync_file (int dma_buf_fd)
+ {
+@@ -994,6 +1035,7 @@ get_sync_file (int dma_buf_fd)
+
+ return -1;
+ }
++#endif
+
+ /**
+ * meta_wayland_dma_buf_create_source:
+@@ -1034,9 +1076,11 @@ meta_wayland_dma_buf_create_source (MetaWaylandBuffer
+ if (!source)
+ source = create_source (buffer, dispatch, user_data);
+
++#ifdef __linux__
+ source->owned_sync_fd[i] = get_sync_file (fd);
+ if (source->owned_sync_fd[i] >= 0)
+ fd = source->owned_sync_fd[i];
++#endif
+
+ source->fd_tags[i] = g_source_add_unix_fd (&source->base, fd, G_IO_IN);
+ }
+@@ -1075,7 +1119,9 @@ meta_wayland_drm_syncobj_create_source (MetaWaylandBuf
+ return NULL;
+
+ source->fd_tags[0] = g_source_add_unix_fd (&source->base, sync_fd, G_IO_IN);
++#ifdef __linux__
+ source->owned_sync_fd[0] = g_steal_fd (&sync_fd);
++#endif
+
+ return &source->base;
+ }
diff --git a/x11-wm/mutter/files/patch-src_wayland_meta-xwayland.c b/x11-wm/mutter/files/patch-src_wayland_meta-xwayland.c
new file mode 100644
index 000000000000..113a0dd6e2bd
--- /dev/null
+++ b/x11-wm/mutter/files/patch-src_wayland_meta-xwayland.c
@@ -0,0 +1,27 @@
+Based on https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=258042
+
+--- src/wayland/meta-xwayland.c.orig 2024-11-25 14:05:12 UTC
++++ src/wayland/meta-xwayland.c
+@@ -598,9 +598,11 @@ open_display_sockets (MetaXWaylandManager *manager,
+ {
+ int abstract_fd, unix_fd;
+
++#ifdef __linux__
+ abstract_fd = bind_to_abstract_socket (display_index, error);
+ if (abstract_fd < 0)
+ return FALSE;
++#endif
+
+ unix_fd = bind_to_unix_socket (display_index, error);
+ if (unix_fd < 0)
+@@ -608,6 +610,10 @@ open_display_sockets (MetaXWaylandManager *manager,
+ close (abstract_fd);
+ return FALSE;
+ }
++
++#ifndef __linux__
++ abstract_fd = unix_fd;
++#endif
+
+ *abstract_fd_out = abstract_fd;
+ *unix_fd_out = unix_fd;