git: 2af7805da5c5 - main - x11-toolkits/wlroots: update to 0.15.0

From: Jan Beich <jbeich_at_FreeBSD.org>
Date: Fri, 17 Dec 2021 11:31:29 UTC
The branch main has been updated by jbeich:

URL: https://cgit.FreeBSD.org/ports/commit/?id=2af7805da5c5fc73eb28fba4065cead63c4bb5ab

commit 2af7805da5c5fc73eb28fba4065cead63c4bb5ab
Author:     Jan Beich <jbeich@FreeBSD.org>
AuthorDate: 2021-06-24 17:53:05 +0000
Commit:     Jan Beich <jbeich@FreeBSD.org>
CommitDate: 2021-12-17 11:30:04 +0000

    x11-toolkits/wlroots: update to 0.15.0
    
    Changes:        https://gitlab.freedesktop.org/wlroots/wlroots/-/releases/0.15.0
    Reported by:    upstream (tracking bug)
---
 x11-toolkits/wlroots/Makefile                      |  60 ++---
 x11-toolkits/wlroots/distinfo                      |  70 +-----
 x11-toolkits/wlroots/pkg-message                   |   1 +
 x11-toolkits/wlroots/pkg-plist                     |  15 +-
 x11-wm/cage/Makefile                               |   6 +-
 x11-wm/cage/distinfo                               |   4 +
 x11-wm/hikari/Makefile                             |   4 +-
 x11-wm/hikari/files/patch-wlroots-0.15             | 256 +++++++++++++++++++++
 x11-wm/kwinft/Makefile                             |   1 +
 x11-wm/labwc/Makefile                              |  14 +-
 x11-wm/labwc/distinfo                              |  16 ++
 x11-wm/river/Makefile                              |   2 +
 x11-wm/sway/Makefile                               |  20 +-
 x11-wm/sway/distinfo                               |  32 +++
 x11-wm/wayfire-plugins-extra/Makefile              |   5 +-
 x11-wm/wayfire-plugins-extra/distinfo              |   2 +
 .../wayfire-plugins-extra/files/patch-wlroots-0.15 |  27 +++
 x11-wm/wayfire/Makefile                            |  15 +-
 x11-wm/wayfire/distinfo                            |  22 ++
 x11-wm/wayfire/files/patch-wlroots-0.15            | 121 ++++++++++
 20 files changed, 568 insertions(+), 125 deletions(-)

diff --git a/x11-toolkits/wlroots/Makefile b/x11-toolkits/wlroots/Makefile
index 97beb25a28d6..7eea12d52baa 100644
--- a/x11-toolkits/wlroots/Makefile
+++ b/x11-toolkits/wlroots/Makefile
@@ -1,11 +1,12 @@
 PORTNAME=	wlroots
-DISTVERSION=	0.14.1
-PORTREVISION=	2
+DISTVERSION=	0.15.0
+DISTVERSIONSUFFIX=	-g${GL_COMMIT:C/(.{12}).*/\1/}
 CATEGORIES=	x11-toolkits
 
 PATCH_SITES=	https://github.com/swaywm/${GL_PROJECT}/commit/
 PATCHFILES+=	7c0e2a271a4c.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2064
 PATCHFILES+=	55a8d225cf8c.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2064
+PATCHFILES+=	347b32642fb6.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3318
 
 MAINTAINER=	jbeich@FreeBSD.org
 COMMENT=	Modular Wayland compositor library
@@ -13,12 +14,11 @@ COMMENT=	Modular Wayland compositor library
 LICENSE=	MIT
 LICENSE_FILE=	${WRKSRC}/LICENSE
 
-BUILD_DEPENDS=	wayland-protocols>=1.21:graphics/wayland-protocols
+BUILD_DEPENDS=	wayland-protocols>=1.24:graphics/wayland-protocols
 LIB_DEPENDS=	libudev.so:devel/libudev-devd \
 		libdrm.so:graphics/libdrm \
 		libwayland-server.so:graphics/wayland \
 		libseat.so:sysutils/seatd \
-		libinput.so:x11/libinput \
 		libxkbcommon.so:x11/libxkbcommon
 
 USES=		compiler:c11 gl meson pkgconfig xorg
@@ -27,16 +27,20 @@ USE_GL=		gbm
 USE_XORG=	pixman
 USE_LDCONFIG=	yes
 GL_SITE=	https://gitlab.freedesktop.org
-GL_COMMIT=	49a574420138646845fb664862db03982cfd9f5b
-MESON_ARGS=	-Dexamples=false -Drenderers=${RENDERERS:ts,}
+GL_COMMIT=	9f41627aa10a94d9427bc315fa3d363a61b94d7c
+MESON_ARGS=	-Dexamples=false -Dbackends=${BACKENDS:ts,} -Drenderers=${RENDERERS:ts,}
 
-OPTIONS_DEFINE=	NVIDIA OPENGL VULKAN X11
-OPTIONS_DEFAULT=OPENGL VULKAN X11
+OPTIONS_DEFINE=	DRM NVIDIA OPENGL VULKAN X11
+OPTIONS_DEFAULT=DRM OPENGL VULKAN X11
 OPTIONS_SUB=	yes
 
+DRM_DESC=		KMS console support
+DRM_LIB_DEPENDS=	libinput.so:x11/libinput
+DRM_VARS=		BACKENDS+="drm libinput"
+
 NVIDIA_DESC=		EGLStreams support for DRM backend (experimental)
 NVIDIA_PATCH_SITES=	https://github.com/danvd/${GL_PROJECT}-eglstreams/commit/:nvidia
-NVIDIA_PATCHFILES=	d9acdb6b21ec.patch:-p1:nvidia # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2769
+NVIDIA_PATCHFILES=	7660c54541d5.patch:-p1:nvidia # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2769
 NVIDIA_IMPLIES=		OPENGL
 .if make(makesum)
 .MAKEFLAGS:		WITH+=NVIDIA
@@ -46,45 +50,12 @@ OPENGL_RUN_DEPENDS=	mesa-dri>0:graphics/mesa-dri
 OPENGL_USE=		GL=egl,glesv2
 OPENGL_VARS=		RENDERERS+=gles2
 
-VULKAN_DESC=		Vulkan renderer (experimental)
-VULKAN_PATCHFILES+=	8c700c534556.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	0464af8573f9.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	e3e9250ea6d8.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	1af1d1694195.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	93319aa2b633.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	0028938735d1.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	6885b636508c.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	76534695a8d3.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	445142e6a1f9.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	f029ae1dac4b.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	ad1fab0b3704.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	4407b8e5a3a7.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	e021c068d02f.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	2cc710bda83c.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	f0888604d6ce.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	4fdd5efc9260.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	59c119829f1c.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	cfbd8aa6cf24.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	3f6dbe428e8b.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	a83943798aef.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	f64a98d49d25.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	9885ccb4b0b1.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	71f9f33e3bf2.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	bd8c520dbd9a.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	2d89dc9b8651.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	8f9aeda46d8a.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	e3d16970433f.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	79f10d929b72.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	1a16e8fc56a9.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	dd039c56d93a.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2771
-VULKAN_PATCHFILES+=	347b32642fb6.patch:-p1 # https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3318
+VULKAN_DESC=		Vulkan renderer
 VULKAN_BUILD_DEPENDS=	glslangValidator:graphics/glslang \
 			vulkan-headers>0:graphics/vulkan-headers
 VULKAN_LIB_DEPENDS=	libvulkan.so:graphics/vulkan-loader
 VULKAN_RUN_DEPENDS=	mesa-dri>0:graphics/mesa-dri
 VULKAN_VARS=		RENDERERS+=vulkan
-VULKAN_PLIST_FILES=	include/wlr/types/wlr_drm.h \
-			%%VULKAN%%include/wlr/render/vulkan.h
 
 X11_LIB_DEPENDS=	libxcb-errors.so:x11/xcb-util-errors \
 			libxcb-render-util.so:x11/xcb-util-renderutil \
@@ -93,7 +64,8 @@ X11_BUILD_DEPENDS=	evdev-proto>0:devel/evdev-proto \
 			xwayland-devel>0:x11-servers/xwayland-devel
 X11_RUN_DEPENDS=	xwayland-devel>0:x11-servers/xwayland-devel
 X11_USE=		XORG=xcb
-X11_MESON_ENABLED=	x11-backend xwayland
+X11_MESON_ENABLED=	xwayland
+X11_VARS=		BACKENDS+=x11
 
 post-patch:
 # Extract (snapshot) version from the port instead of meson.build
diff --git a/x11-toolkits/wlroots/distinfo b/x11-toolkits/wlroots/distinfo
index b81c6f1c79eb..56318da77266 100644
--- a/x11-toolkits/wlroots/distinfo
+++ b/x11-toolkits/wlroots/distinfo
@@ -1,71 +1,11 @@
-TIMESTAMP = 1625757481
-SHA256 (wlroots-wlroots-49a574420138646845fb664862db03982cfd9f5b_GL0.tar.gz) = 9d5ba3dbd415730a7e3f6270cca35d70382fb97b0ea3537e096af67bb7addeb9
-SIZE (wlroots-wlroots-49a574420138646845fb664862db03982cfd9f5b_GL0.tar.gz) = 505990
+TIMESTAMP = 1639578848
+SHA256 (wlroots-wlroots-9f41627aa10a94d9427bc315fa3d363a61b94d7c_GL0.tar.gz) = 31381f649538bb52c5fa0b3c0d2a2d9a1fc3f0dd22367c39a12abbe53b53bb04
+SIZE (wlroots-wlroots-9f41627aa10a94d9427bc315fa3d363a61b94d7c_GL0.tar.gz) = 565273
 SHA256 (7c0e2a271a4c.patch) = 2b92d3dde7640061ed85ab1690031f7627bebc2366e8c4da217017188ba7195e
 SIZE (7c0e2a271a4c.patch) = 5729
 SHA256 (55a8d225cf8c.patch) = f9df98540fdabe35c61ed828f6d64633aab72edf0ba1c7ad0849594f10383ce7
 SIZE (55a8d225cf8c.patch) = 4209
-SHA256 (d9acdb6b21ec.patch) = b78414c89ebf93b4af02d955f9345d886d05ea0865d48f5c05e1e415adf3c45e
-SIZE (d9acdb6b21ec.patch) = 91660
-SHA256 (8c700c534556.patch) = d004493cde08be574d81e3e6024491cd1c4312ddadbdc0f5ea818327a558165a
-SIZE (8c700c534556.patch) = 49189
-SHA256 (0464af8573f9.patch) = f4870fb2a232885513ab18594ff97463483e132ebbac09f367f3017c510d3823
-SIZE (0464af8573f9.patch) = 110532
-SHA256 (e3e9250ea6d8.patch) = d5f2764df5b99c57b106a87af160ffa955a0afe1de33bd90131eced1c39f44a1
-SIZE (e3e9250ea6d8.patch) = 11220
-SHA256 (1af1d1694195.patch) = 16d705e33b0939a8b11ea3d0f9355ddcb7c0cb85f8d7f668f4c016370be80c11
-SIZE (1af1d1694195.patch) = 2056
-SHA256 (93319aa2b633.patch) = 0bbbb871aefacdf8b85b72a7bcafcfe9757e48653b345d1e1a96988f88680753
-SIZE (93319aa2b633.patch) = 35376
-SHA256 (0028938735d1.patch) = d110d2fd139497f04ba7c8c0d649d03d28224ba6b33aaab95f4d233077234db9
-SIZE (0028938735d1.patch) = 39808
-SHA256 (6885b636508c.patch) = b7c8d57224db108cc40420ba06aa7c227d2a48a8418f9430f2d0381447c68e62
-SIZE (6885b636508c.patch) = 694
-SHA256 (76534695a8d3.patch) = 084e97edd02f5ffd5d0181f9f9d0eea0f76bebe2b55b20f0dd78b182b0fe58cf
-SIZE (76534695a8d3.patch) = 9670
-SHA256 (445142e6a1f9.patch) = e6b88f71a7e2b4ba340e53dc356748bc8d280a295e2188fde834aa0e45608f63
-SIZE (445142e6a1f9.patch) = 2876
-SHA256 (f029ae1dac4b.patch) = f87e1128f3f8f34dc250bc2d4948275ee35b6def3026667758952dd74c0829e7
-SIZE (f029ae1dac4b.patch) = 835
-SHA256 (ad1fab0b3704.patch) = 1aa049ea5b83e8148d44e5c8b18b2a17188bb027220201e25d957181dc48f953
-SIZE (ad1fab0b3704.patch) = 1543
-SHA256 (4407b8e5a3a7.patch) = e882f50f0c06224e44c34f06dc9321aba84630c6e5146bdf3289f8c9fac67c96
-SIZE (4407b8e5a3a7.patch) = 7109
-SHA256 (e021c068d02f.patch) = bfe830161b0946187107f3eaba5c1eacc7118011a02375991f951124dc969f89
-SIZE (e021c068d02f.patch) = 1365
-SHA256 (2cc710bda83c.patch) = b8c6b3d354fc531bc7042312c006770c78b6ab61628a6d83d3417761372e478f
-SIZE (2cc710bda83c.patch) = 8937
-SHA256 (f0888604d6ce.patch) = 4d354bd7324d308ec5fc9ce211cdf81e6fdcee2bbc62dc4fff41a34a5f77c00a
-SIZE (f0888604d6ce.patch) = 21680
-SHA256 (4fdd5efc9260.patch) = 96d8e057c8b0d987e78d34ea5fdb6ec35ed3878eb5d1ee83319dcb29af198bd8
-SIZE (4fdd5efc9260.patch) = 5628
-SHA256 (59c119829f1c.patch) = 34408bc1edac183fbcb86f3a22d5a43e7c5f47b2dd5226b1e60b140e8387214c
-SIZE (59c119829f1c.patch) = 1005
-SHA256 (cfbd8aa6cf24.patch) = 62027ea791c9e8f0ea4ced680ab688f6c57d1dddae04cbfe70e108ad8b439a58
-SIZE (cfbd8aa6cf24.patch) = 4007
-SHA256 (3f6dbe428e8b.patch) = e6b7339027d7e653f955da9df579167e2da56311ab294187b24f709b70026952
-SIZE (3f6dbe428e8b.patch) = 11424
-SHA256 (a83943798aef.patch) = 408e5a26afec05b88768451c65c7712fe87de3b8a3193c3655e7adfeb63b323c
-SIZE (a83943798aef.patch) = 679
-SHA256 (f64a98d49d25.patch) = ec753b6fad3afd5db8e06983689f549e0966305b4ea892f82078cf879d9a0640
-SIZE (f64a98d49d25.patch) = 4998
-SHA256 (9885ccb4b0b1.patch) = 83c2f06446c0519523885627a210d77fdbdd23491e3ec0145c4aebec199c23a6
-SIZE (9885ccb4b0b1.patch) = 7855
-SHA256 (71f9f33e3bf2.patch) = 75ad6be6c4ab195e3015647fdb1365f5dab534155eed11153f13f61a30cb4792
-SIZE (71f9f33e3bf2.patch) = 12943
-SHA256 (bd8c520dbd9a.patch) = 7ff9eb420a1870177b16227ba7b380084eaaaffeac2bac39b8c0e329515af36a
-SIZE (bd8c520dbd9a.patch) = 55639
-SHA256 (2d89dc9b8651.patch) = 488722edd6da814cfb20156e8bd2a50b54743334506dfab69576990ebd8bb365
-SIZE (2d89dc9b8651.patch) = 15460
-SHA256 (8f9aeda46d8a.patch) = 8241a0003819e6355cc495a512ea8eed0bb521cbb416aa26068a72f12d9a991b
-SIZE (8f9aeda46d8a.patch) = 7070
-SHA256 (e3d16970433f.patch) = e4641123a64519921991a1db7437ff3d2fe007662ec35ba9572aa3a60b188228
-SIZE (e3d16970433f.patch) = 1180
-SHA256 (79f10d929b72.patch) = b3b5fe1ef223bae812c00b4d98f09c1bba5688fdcfa38e150551020232f32553
-SIZE (79f10d929b72.patch) = 10811
-SHA256 (1a16e8fc56a9.patch) = 2bc8e01099fdf6410f07392147e6d376cc5f89b3bb3dda6133c4e4c9ead05883
-SIZE (1a16e8fc56a9.patch) = 1422
-SHA256 (dd039c56d93a.patch) = 533707ab9512b75a9a66ca50b95340883ba51fb2daa294f9b0ff0b7c5dbef572
-SIZE (dd039c56d93a.patch) = 1258
 SHA256 (347b32642fb6.patch) = 961ff1069ef3eb1b4a71cd915947cdc6acbf2b9b98bae7e3bb41de87d115da9d
 SIZE (347b32642fb6.patch) = 3800
+SHA256 (7660c54541d5.patch) = 543174148ab998ee67ea8e540f703d63c5c37dc2d1b78603cea047a4f0946407
+SIZE (7660c54541d5.patch) = 147050
diff --git a/x11-toolkits/wlroots/pkg-message b/x11-toolkits/wlroots/pkg-message
index 0b0bf2ceaf83..8ce805eb0b35 100644
--- a/x11-toolkits/wlroots/pkg-message
+++ b/x11-toolkits/wlroots/pkg-message
@@ -3,6 +3,7 @@
   message: <<EOM
 Known issues:
 - NVIDIA may be affected by https://github.com/aritger/eglstreams-kms-example/issues/7
+- VULKAN currently requires mesa-devel
 EOM
 }
 ]
diff --git a/x11-toolkits/wlroots/pkg-plist b/x11-toolkits/wlroots/pkg-plist
index a0e52cd844d1..0651a6d62807 100644
--- a/x11-toolkits/wlroots/pkg-plist
+++ b/x11-toolkits/wlroots/pkg-plist
@@ -1,10 +1,9 @@
 include/wlr/backend.h
-include/wlr/backend/drm.h
+%%DRM%%include/wlr/backend/drm.h
 include/wlr/backend/headless.h
 include/wlr/backend/interface.h
-include/wlr/backend/libinput.h
+%%DRM%%include/wlr/backend/libinput.h
 include/wlr/backend/multi.h
-include/wlr/backend/noop.h
 include/wlr/backend/session.h
 include/wlr/backend/wayland.h
 %%X11%%include/wlr/backend/x11.h
@@ -17,12 +16,14 @@ include/wlr/interfaces/wlr_switch.h
 include/wlr/interfaces/wlr_tablet_pad.h
 include/wlr/interfaces/wlr_tablet_tool.h
 include/wlr/interfaces/wlr_touch.h
+include/wlr/render/allocator.h
 include/wlr/render/dmabuf.h
 include/wlr/render/drm_format_set.h
 %%OPENGL%%include/wlr/render/egl.h
 %%OPENGL%%include/wlr/render/gles2.h
 include/wlr/render/interface.h
 include/wlr/render/pixman.h
+%%VULKAN%%include/wlr/render/vulkan.h
 include/wlr/render/wlr_renderer.h
 include/wlr/render/wlr_texture.h
 include/wlr/types/wlr_box.h
@@ -31,6 +32,8 @@ include/wlr/types/wlr_compositor.h
 include/wlr/types/wlr_cursor.h
 include/wlr/types/wlr_data_control_v1.h
 include/wlr/types/wlr_data_device.h
+include/wlr/types/wlr_drm.h
+include/wlr/types/wlr_drm_lease_v1.h
 include/wlr/types/wlr_export_dmabuf_v1.h
 include/wlr/types/wlr_foreign_toplevel_management_v1.h
 include/wlr/types/wlr_fullscreen_shell_v1.h
@@ -45,7 +48,6 @@ include/wlr/types/wlr_keyboard_group.h
 include/wlr/types/wlr_keyboard_shortcuts_inhibit_v1.h
 include/wlr/types/wlr_layer_shell_v1.h
 include/wlr/types/wlr_linux_dmabuf_v1.h
-include/wlr/types/wlr_list.h
 include/wlr/types/wlr_matrix.h
 include/wlr/types/wlr_output.h
 include/wlr/types/wlr_output_damage.h
@@ -60,6 +62,7 @@ include/wlr/types/wlr_primary_selection.h
 include/wlr/types/wlr_primary_selection_v1.h
 include/wlr/types/wlr_region.h
 include/wlr/types/wlr_relative_pointer_v1.h
+include/wlr/types/wlr_scene.h
 include/wlr/types/wlr_screencopy_v1.h
 include/wlr/types/wlr_seat.h
 include/wlr/types/wlr_server_decoration.h
@@ -81,6 +84,8 @@ include/wlr/types/wlr_xdg_foreign_v1.h
 include/wlr/types/wlr_xdg_foreign_v2.h
 include/wlr/types/wlr_xdg_output_v1.h
 include/wlr/types/wlr_xdg_shell.h
+include/wlr/util/addon.h
+include/wlr/util/box.h
 include/wlr/util/edges.h
 include/wlr/util/log.h
 include/wlr/util/region.h
@@ -88,5 +93,5 @@ include/wlr/version.h
 include/wlr/xcursor.h
 %%X11%%include/wlr/xwayland.h
 lib/libwlroots.so
-lib/libwlroots.so.9
+lib/libwlroots.so.10
 libdata/pkgconfig/wlroots.pc
diff --git a/x11-wm/cage/Makefile b/x11-wm/cage/Makefile
index 9727763f9694..163fed29419b 100644
--- a/x11-wm/cage/Makefile
+++ b/x11-wm/cage/Makefile
@@ -1,12 +1,14 @@
 PORTNAME=	cage
 DISTVERSIONPREFIX=	v
 DISTVERSION=	0.1.4
-PORTREVISION=	2
+PORTREVISION=	3
 CATEGORIES=	x11-wm
 
 PATCH_SITES=	https://github.com/${GH_ACCOUNT}/${GH_PROJECT}/commit/
 PATCHFILES+=	70ecdcb02ea0.patch:-p1 # https://github.com/Hjdskes/cage/pull/148
 PATCHFILES+=	31a3571a7798.patch:-p1 # https://github.com/Hjdskes/cage/pull/209
+PATCHFILES+=	1a3ab3eb3ad0.patch:-p1 # https://github.com/Hjdskes/cage/pull/198
+PATCHFILES+=	ee748fec3adf.patch:-p1 # https://github.com/Hjdskes/cage/pull/197
 
 MAINTAINER=	jbeich@FreeBSD.org
 COMMENT=	Wayland kiosk
@@ -16,7 +18,7 @@ LICENSE_FILE=	${WRKSRC}/LICENSE
 
 BUILD_DEPENDS=	evdev-proto>0:devel/evdev-proto \
 		wayland-protocols>=1.14:graphics/wayland-protocols \
-		wlroots>=0.14.0:x11-toolkits/wlroots
+		wlroots>=0.15.0:x11-toolkits/wlroots
 LIB_DEPENDS=	libwayland-server.so:graphics/wayland \
 		libwlroots.so:x11-toolkits/wlroots \
 		libxkbcommon.so:x11/libxkbcommon
diff --git a/x11-wm/cage/distinfo b/x11-wm/cage/distinfo
index 25caebd32116..4cf877a2040e 100644
--- a/x11-wm/cage/distinfo
+++ b/x11-wm/cage/distinfo
@@ -5,3 +5,7 @@ SHA256 (70ecdcb02ea0.patch) = 2dd0e99d181986c6b2d5e04e89f692e3d77b8bd2a3a08f94cf
 SIZE (70ecdcb02ea0.patch) = 2137
 SHA256 (31a3571a7798.patch) = 2bedfc37fd7ef5e623e1ba4202be8c2fe2837a495d716c05ae19c41f561f69aa
 SIZE (31a3571a7798.patch) = 880
+SHA256 (1a3ab3eb3ad0.patch) = 7a652a0bb0cfc54da5f4687c55c5576b7413615b171582871c22a6217fc75013
+SIZE (1a3ab3eb3ad0.patch) = 1417
+SHA256 (ee748fec3adf.patch) = 641d86dfac45f471b953b3bfd1884944a1e3292d5d8327bbdbc588e71f9969a6
+SIZE (ee748fec3adf.patch) = 10111
diff --git a/x11-wm/hikari/Makefile b/x11-wm/hikari/Makefile
index 20ff7980580e..f03452ab7ef1 100644
--- a/x11-wm/hikari/Makefile
+++ b/x11-wm/hikari/Makefile
@@ -1,6 +1,6 @@
 PORTNAME=	hikari
 DISTVERSION=	2.3.2
-PORTREVISION=	1
+PORTREVISION=	2
 CATEGORIES=	x11-wm
 MASTER_SITES=	https://hikari.acmelabs.space/releases/
 
@@ -12,7 +12,7 @@ LICENSE_FILE=	${WRKSRC}/LICENSE
 
 BUILD_DEPENDS=	evdev-proto>0:devel/evdev-proto \
 		wayland-protocols>=1.14:graphics/wayland-protocols \
-		wlroots>=0.14.0<0.15.0:x11-toolkits/wlroots
+		wlroots>=0.15.0<0.16.0:x11-toolkits/wlroots
 LIB_DEPENDS=	libinput.so:x11/libinput \
 		libucl.so:textproc/libucl \
 		libwayland-server.so:graphics/wayland \
diff --git a/x11-wm/hikari/files/patch-wlroots-0.15 b/x11-wm/hikari/files/patch-wlroots-0.15
new file mode 100644
index 000000000000..dde7380f765f
--- /dev/null
+++ b/x11-wm/hikari/files/patch-wlroots-0.15
@@ -0,0 +1,256 @@
+src/layer_shell.c:202:37: error: no member named 'client_pending' in 'struct wlr_layer_surface_v1'
+  layer->layer = wlr_layer_surface->client_pending.layer;
+                 ~~~~~~~~~~~~~~~~~  ^
+
+src/layer_shell.c:312:51: error: no member named 'geometry' in 'struct wlr_xdg_surface'
+  int popup_sx = popup->geometry.x - popup->base->geometry.x;
+                                     ~~~~~~~~~~~  ^
+src/layer_shell.c:313:51: error: no member named 'geometry' in 'struct wlr_xdg_surface'
+  int popup_sy = popup->geometry.y - popup->base->geometry.y;
+                                     ~~~~~~~~~~~  ^
+
+src/output.c:199:5: warning: implicit declaration of function 'wlr_layer_surface_v1_close' is invalid in C99 [-Wimplicit-function-declaration]
+    wlr_layer_surface_v1_close(layer->surface);
+    ^
+src/workspace.c:123:5: warning: implicit declaration of function 'wlr_layer_surface_v1_close' is invalid in C99 [-Wimplicit-function-declaration]
+    wlr_layer_surface_v1_close(focus_layer->surface);
+    ^
+
+src/view.c:812:47: error: no member named 'subsurfaces_below' in 'struct wlr_surface'
+  wl_list_for_each (wlr_subsurface, &surface->subsurfaces_below, parent_link) {
+                                     ~~~~~~~  ^
+/usr/local/include/wayland-util.h:443:30: note: expanded from macro 'wl_list_for_each'
+        for (pos = wl_container_of((head)->next, pos, member);  \
+                                    ^~~~
+/usr/local/include/wayland-util.h:409:32: note: expanded from macro 'wl_container_of'
+        (__typeof__(sample))((char *)(ptr) -                            \
+                                      ^~~
+
+src/xdg_view.c:50:30: error: no member named 'configure_serial' in 'struct wlr_xdg_surface'
+  uint32_t serial = surface->configure_serial;
+                    ~~~~~~~  ^
+
+ld: error: undefined symbol: wlr_backend_get_renderer
+>>> referenced by indicator_bar.c
+>>>               indicator_bar.o:(hikari_indicator_bar_update)
+>>> referenced by lock_indicator.c
+>>>               lock_indicator.o:(init_indicator_circle)
+>>> referenced by output.c
+>>>               output.o:(hikari_output_load_background)
+>>> referenced 2 more times
+
+src/server.c:9:10: fatal error: 'wlr/backend/noop.h' file not found
+#include <wlr/backend/noop.h>
+         ^~~~~~~~~~~~~~~~~~~~
+
+--- include/hikari/server.h.orig	2021-04-09 17:37:23 UTC
++++ include/hikari/server.h
+@@ -51,6 +51,7 @@ struct hikari_server {
+   struct wl_event_loop *event_loop;
+   struct wlr_backend *backend;
+   struct wlr_renderer *renderer;
++  struct wlr_allocator *allocator;
+   struct wlr_xdg_output_manager_v1 *output_manager;
+   struct wlr_data_device_manager *data_device_manager;
+ 
+--- src/indicator_bar.c.orig	2021-04-10 08:38:40 UTC
++++ src/indicator_bar.c
+@@ -80,8 +80,7 @@ hikari_indicator_bar_update(struct hikari_indicator_ba
+   struct hikari_font *font = &hikari_configuration->font;
+   int width = hikari_configuration->font.character_width * len + 8;
+   int height = hikari_configuration->font.height;
+-  struct wlr_renderer *wlr_renderer =
+-      wlr_backend_get_renderer(output->wlr_output->backend);
++  struct wlr_renderer *wlr_renderer = output->wlr_output->renderer;
+ 
+   indicator_bar->width = width;
+ 
+--- src/layer_shell.c.orig	2021-03-28 17:02:57 UTC
++++ src/layer_shell.c
+@@ -199,7 +199,7 @@ hikari_layer_init(
+   layer->node.focus = focus;
+   layer->node.for_each_surface = for_each_surface;
+   layer->output = output;
+-  layer->layer = wlr_layer_surface->client_pending.layer;
++  layer->layer = wlr_layer_surface->pending.layer;
+   layer->surface = wlr_layer_surface;
+   layer->mapped = false;
+ 
+@@ -309,8 +309,8 @@ damage_popup(struct hikari_layer_popup *layer_popup, b
+   struct wlr_xdg_popup *popup = layer_popup->popup;
+   struct wlr_surface *surface = popup->base->surface;
+ 
+-  int popup_sx = popup->geometry.x - popup->base->geometry.x;
+-  int popup_sy = popup->geometry.y - popup->base->geometry.y;
++  int popup_sx = popup->geometry.x - popup->base->current.geometry.x;
++  int popup_sy = popup->geometry.y - popup->base->current.geometry.y;
+   int ox = popup_sx, oy = popup_sy;
+ 
+   struct hikari_layer *layer;
+--- src/lock_indicator.c.orig	2021-04-10 11:39:20 UTC
++++ src/lock_indicator.c
+@@ -19,8 +19,7 @@ init_indicator_circle(float color[static 4])
+   const int size = 100;
+ 
+   struct wlr_texture *texture;
+-  struct wlr_renderer *wlr_renderer =
+-      wlr_backend_get_renderer(hikari_server.backend);
++  struct wlr_renderer *wlr_renderer = hikari_server.renderer;
+ 
+   cairo_surface_t *surface =
+       cairo_image_surface_create(CAIRO_FORMAT_ARGB32, size, size);
+--- src/output.c.orig	2021-07-20 21:52:59 UTC
++++ src/output.c
+@@ -84,8 +84,7 @@ hikari_output_load_background(struct hikari_output *ou
+   unsigned char *data = cairo_image_surface_get_data(output_surface);
+   int stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, output_width);
+ 
+-  struct wlr_renderer *renderer =
+-      wlr_backend_get_renderer(output->wlr_output->backend);
++  struct wlr_renderer *renderer = output->wlr_output->renderer;
+ 
+   output->background = wlr_texture_from_pixels(
+       renderer, DRM_FORMAT_ARGB8888, stride, output_width, output_height, data);
+@@ -196,7 +195,7 @@ close_layers(struct wl_list *layers)
+ {
+   struct hikari_layer *layer, *layer_temp;
+   wl_list_for_each_safe (layer, layer_temp, layers, layer_surfaces) {
+-    wlr_layer_surface_v1_close(layer->surface);
++    wlr_layer_surface_v1_destroy(layer->surface);
+     layer->output = NULL;
+   }
+ }
+@@ -257,7 +256,7 @@ hikari_output_init(struct hikari_output *output, struc
+ 
+     if (!wl_list_empty(&wlr_output->modes)) {
+       struct wlr_output_mode *mode =
+-          wl_container_of(wlr_output->modes.prev, mode, link);
++          wl_container_of(wlr_output->modes.next, mode, link);
+       wlr_output_set_mode(wlr_output, mode);
+     }
+ 
+--- src/renderer.c.orig	2021-03-28 17:02:57 UTC
++++ src/renderer.c
+@@ -487,8 +487,7 @@ static inline void
+ render_output(struct hikari_output *output, pixman_region32_t *damage)
+ {
+   struct wlr_output *wlr_output = output->wlr_output;
+-  struct wlr_renderer *wlr_renderer =
+-      wlr_backend_get_renderer(wlr_output->backend);
++  struct wlr_renderer *wlr_renderer = wlr_output->renderer;
+ 
+   struct hikari_renderer renderer = {
+     .wlr_output = wlr_output, .wlr_renderer = wlr_renderer, .damage = damage
+--- src/server.c.orig	2021-07-20 21:52:59 UTC
++++ src/server.c
+@@ -5,9 +5,11 @@
+ #include <unistd.h>
+ 
+ #include <wlr/backend.h>
++#include <wlr/backend/headless.h>
+ #include <wlr/backend/libinput.h>
+-#include <wlr/backend/noop.h>
+ #include <wlr/backend/session.h>
++#include <wlr/render/allocator.h>
++#include <wlr/render/wlr_renderer.h>
+ #include <wlr/types/wlr_compositor.h>
+ #include <wlr/types/wlr_data_control_v1.h>
+ #include <wlr/types/wlr_data_device.h>
+@@ -213,6 +215,10 @@ new_output_handler(struct wl_listener *listener, void 
+   struct wlr_output *wlr_output = data;
+   struct hikari_output *output = hikari_malloc(sizeof(struct hikari_output));
+ 
++  if (!wlr_output_init_render(wlr_output, server->allocator, server->renderer)) {
++    exit(EXIT_FAILURE);
++  }
++
+   hikari_output_init(output, wlr_output);
+   hikari_cursor_reset_image(&server->cursor);
+ }
+@@ -766,9 +772,9 @@ done:
+ static void
+ init_noop_output(struct hikari_server *server)
+ {
+-  server->noop_backend = wlr_noop_backend_create(server->display);
++  server->noop_backend = wlr_headless_backend_create(server->display);
+ 
+-  struct wlr_output *wlr_output = wlr_noop_add_output(server->noop_backend);
++  struct wlr_output *wlr_output = wlr_headless_add_output(server->noop_backend, 800, 600);
+   struct hikari_output *noop_output =
+       hikari_malloc(sizeof(struct hikari_output));
+ 
+@@ -816,14 +822,19 @@ server_init(struct hikari_server *server, char *config
+ 
+   signal(SIGPIPE, SIG_IGN);
+ 
+-  server->renderer = wlr_backend_get_renderer(server->backend);
+-
++  server->renderer = wlr_renderer_autocreate(server->backend);
+   if (server->renderer == NULL) {
+     wl_display_destroy(server->display);
+     exit(EXIT_FAILURE);
+   }
+ 
+   wlr_renderer_init_wl_display(server->renderer, server->display);
++
++  server->allocator = wlr_allocator_autocreate(server->backend, server->renderer);
++  if (server->allocator == NULL) {
++    wl_display_destroy(server->display);
++    exit(EXIT_FAILURE);
++  }
+ 
+   server->socket = wl_display_add_socket_auto(server->display);
+   if (server->socket == NULL) {
+--- src/view.c.orig	2021-07-20 21:52:59 UTC
++++ src/view.c
+@@ -809,13 +809,13 @@ hikari_view_map(struct hikari_view *view, struct wlr_s
+   wl_signal_add(&surface->events.new_subsurface, &view->new_subsurface);
+ 
+   struct wlr_subsurface *wlr_subsurface;
+-  wl_list_for_each (wlr_subsurface, &surface->subsurfaces_below, parent_link) {
++  wl_list_for_each (wlr_subsurface, &surface->current.subsurfaces_below, current.link) {
+     struct hikari_view_subsurface *subsurface =
+         (struct hikari_view_subsurface *)malloc(
+             sizeof(struct hikari_view_subsurface));
+     hikari_view_subsurface_init(subsurface, view, wlr_subsurface);
+   }
+-  wl_list_for_each (wlr_subsurface, &surface->subsurfaces_above, parent_link) {
++  wl_list_for_each (wlr_subsurface, &surface->current.subsurfaces_above, current.link) {
+     struct hikari_view_subsurface *subsurface =
+         (struct hikari_view_subsurface *)malloc(
+             sizeof(struct hikari_view_subsurface));
+@@ -1695,10 +1695,10 @@ hikari_view_child_init(struct hikari_view_child *view_
+   wl_list_insert(&parent->children, &view_child->link);
+ 
+   struct wlr_subsurface *subsurface;
+-  wl_list_for_each (subsurface, &surface->subsurfaces_below, parent_link) {
++  wl_list_for_each (subsurface, &surface->current.subsurfaces_below, current.link) {
+     view_subsurface_create(subsurface, parent);
+   }
+-  wl_list_for_each (subsurface, &surface->subsurfaces_above, parent_link) {
++  wl_list_for_each (subsurface, &surface->current.subsurfaces_above, current.link) {
+     view_subsurface_create(subsurface, parent);
+   }
+ }
+--- src/workspace.c.orig	2021-04-09 17:37:23 UTC
++++ src/workspace.c
+@@ -120,7 +120,7 @@ hikari_workspace_quit_view(struct hikari_workspace *wo
+ 
+   if (focus_layer != NULL) {
+     assert(focus_view == NULL);
+-    wlr_layer_surface_v1_close(focus_layer->surface);
++    wlr_layer_surface_v1_destroy(focus_layer->surface);
+     return;
+   }
+ #endif
+--- src/xdg_view.c.orig	2021-03-28 17:02:57 UTC
++++ src/xdg_view.c
+@@ -47,7 +47,7 @@ commit_handler(struct wl_listener *listener, void *dat
+ 
+   struct hikari_view *view = (struct hikari_view *)xdg_view;
+   struct wlr_xdg_surface *surface = xdg_view->surface;
+-  uint32_t serial = surface->configure_serial;
++  uint32_t serial = surface->current.configure_serial;
+ 
+   assert(view->surface != NULL);
+ 
diff --git a/x11-wm/kwinft/Makefile b/x11-wm/kwinft/Makefile
index db7dddc78693..f69e232f1b3d 100644
--- a/x11-wm/kwinft/Makefile
+++ b/x11-wm/kwinft/Makefile
@@ -1,6 +1,7 @@
 PORTNAME=	kwinft
 DISTVERSIONPREFIX=	${PORTNAME}@
 DISTVERSION=	5.23.2
+PORTREVISION=	1
 CATEGORIES=	x11-wm
 
 PATCH_SITES=	${GL_SITE}/${GL_ACCOUNT}/${GL_PROJECT}/-/commit/
diff --git a/x11-wm/labwc/Makefile b/x11-wm/labwc/Makefile
index de9f4b68cb4d..0d6c14afe20a 100644
--- a/x11-wm/labwc/Makefile
+++ b/x11-wm/labwc/Makefile
@@ -1,15 +1,25 @@
 PORTNAME=	labwc
 DISTVERSION=	0.3.0
-PORTREVISION=	1
+PORTREVISION=	2
 CATEGORIES=	x11-wm
 
+PATCH_SITES=	https://github.com/${GH_ACCOUNT}/${GH_PROJECT}/commit/
+PATCHFILES+=	a1ae16c1cf17.patch:-p1 # wlroots 0.15
+PATCHFILES+=	6fe058358dbc.patch:-p1 # wlroots 0.15
+PATCHFILES+=	3d15444b3aa8.patch:-p1 # wlroots 0.15
+PATCHFILES+=	d11643bea5a4.patch:-p1 # wlroots 0.15
+PATCHFILES+=	329ca691da63.patch:-p1 # wlroots 0.15
+PATCHFILES+=	940577cb643b.patch:-p1 # wlroots 0.15
+PATCHFILES+=	73b8f06a262b.patch:-p1 # wlroots 0.15
+PATCHFILES+=	5db2ee171c54.patch:-p1 # wlroots 0.15
+
 MAINTAINER=	jbeich@FreeBSD.org
 COMMENT=	Wayland stacking compositor
 
 LICENSE=	GPLv2
 
 BUILD_DEPENDS=	wayland-protocols>0:graphics/wayland-protocols \
-		wlroots>=0.14.0<0.15.0:x11-toolkits/wlroots
+		wlroots>=0.15.0<0.16.0:x11-toolkits/wlroots
 LIB_DEPENDS=	libwayland-server.so:graphics/wayland \
 		libwlroots.so:x11-toolkits/wlroots \
 		libinput.so:x11/libinput \
diff --git a/x11-wm/labwc/distinfo b/x11-wm/labwc/distinfo
index e1bba827eb17..4c6691f37bc7 100644
--- a/x11-wm/labwc/distinfo
+++ b/x11-wm/labwc/distinfo
@@ -1,3 +1,19 @@
 TIMESTAMP = 1637485788
 SHA256 (labwc-labwc-0.3.0_GH0.tar.gz) = 035ae57bfdfa2b6453d07359cb0baf3c7ffd8192db63316a0f48db589c025787
 SIZE (labwc-labwc-0.3.0_GH0.tar.gz) = 69020
+SHA256 (a1ae16c1cf17.patch) = 4963630c31e7639b6140d7170911114546abf4a03dd728923d1d96fc5a2441f5
+SIZE (a1ae16c1cf17.patch) = 679
+SHA256 (6fe058358dbc.patch) = 2446fd25203ee67d15bcf151900ace0a892a58ead70204bc598dc57a17a6b3de
+SIZE (6fe058358dbc.patch) = 1192
+SHA256 (3d15444b3aa8.patch) = 0f21320be80b8b969080f0116b442f634989d9ac9863c052e0e4fec47a764ec5
+SIZE (3d15444b3aa8.patch) = 967
+SHA256 (d11643bea5a4.patch) = 07e40be07c12e8a619e0eb0f5a111e33b5f99d4c0f37961d5865673cd335f330
+SIZE (d11643bea5a4.patch) = 736
+SHA256 (329ca691da63.patch) = 3329e1d84c362866bdcab4de83266d904f3242f8744850075e8836f0eeac546b
+SIZE (329ca691da63.patch) = 1177
+SHA256 (940577cb643b.patch) = 0931720d617f5999f09f302694c1415d69531cf6dcf603c588c97215ef670ee4
+SIZE (940577cb643b.patch) = 2202
+SHA256 (73b8f06a262b.patch) = 2166cf99db8bb2a79c3adaa231e4af0b46d5573570c582f143f9f0f2eeaa9d59
+SIZE (73b8f06a262b.patch) = 1596
+SHA256 (5db2ee171c54.patch) = 05438ce2665a8362b089abc97d0da831974170ba55f9d17433067d2532561ef9
+SIZE (5db2ee171c54.patch) = 5222
diff --git a/x11-wm/river/Makefile b/x11-wm/river/Makefile
index ff22e7611859..5ba4c5e55a9e 100644
--- a/x11-wm/river/Makefile
+++ b/x11-wm/river/Makefile
@@ -13,6 +13,8 @@ COMMENT=	Dynamic tiling Wayland compositor
 LICENSE=	GPLv3+
 LICENSE_FILE=	${WRKSRC}/LICENSE
 
+BROKEN=		fails to build with wlroots 0.15: outdated Zig bindings
+
 BUILD_DEPENDS=	evdev-proto>0:devel/evdev-proto \
 		wayland-protocols>0:graphics/wayland-protocols \
 		wlroots>=0.14.0:x11-toolkits/wlroots \
diff --git a/x11-wm/sway/Makefile b/x11-wm/sway/Makefile
index 2c8917be79db..cdefc08c0bcc 100644
--- a/x11-wm/sway/Makefile
+++ b/x11-wm/sway/Makefile
@@ -1,6 +1,6 @@
 PORTNAME=	sway
 DISTVERSION=	1.6.1
-PORTREVISION=	2
+PORTREVISION=	3
 CATEGORIES=	x11-wm
 
 PATCH_SITES=	https://github.com/${GH_ACCOUNT}/${GH_PROJECT}/commit/
@@ -8,6 +8,22 @@ PATCHFILES+=	cd9d1038a822.patch:-p1 # https://github.com/swaywm/sway/pull/5090
 PATCHFILES+=	f98ca3ab7ca1.patch:-p1 # https://github.com/swaywm/sway/pull/5090
 PATCHFILES+=	86b08e3257a4.patch:-p1 # WLR_RENDERER=vulkan
 PATCHFILES+=	ff468584abdd.patch:-p1 # https://github.com/swaywm/sway/pull/6566
+PATCHFILES+=	c53ef023850f.patch:-p1 # wlroots 0.15
+PATCHFILES+=	fd36289faa86.patch:-p1 # wlroots 0.15
+PATCHFILES+=	95a51aefc38a.patch:-p1 # wlroots 0.15
+PATCHFILES+=	711403015921.patch:-p1 # wlroots 0.15
+PATCHFILES+=	c9060bcc12d0.patch:-p1 # wlroots 0.15
+PATCHFILES+=	ae80bdedf998.patch:-p1 # wlroots 0.15
+PATCHFILES+=	eb03298b4606.patch:-p1 # wlroots 0.15
+PATCHFILES+=	b7b3ef6dcf90.patch:-p1 # wlroots 0.15
+PATCHFILES+=	c11b5db4d6c1.patch:-p1 # wlroots 0.15
+PATCHFILES+=	f67ed6772c27.patch:-p1 # wlroots 0.15
+PATCHFILES+=	5fd5d6434e9e.patch:-p1 # wlroots 0.15
+PATCHFILES+=	94680d1aa044.patch:-p1 # wlroots 0.15
+PATCHFILES+=	0c210a5e68ea.patch:-p1 # wlroots 0.15
+PATCHFILES+=	3e2f3f5d67b8.patch:-p1 # wlroots 0.15
+PATCHFILES+=	729e18bff5ff.patch:-p1 # wlroots 0.15
+PATCHFILES+=	d475eb2d8089.patch:-p1 # wlroots 0.15
 
 MAINTAINER=	jbeich@FreeBSD.org
 COMMENT=	i3-compatible Wayland compositor
@@ -17,7 +33,7 @@ LICENSE_FILE=	${WRKSRC}/LICENSE
 
 BUILD_DEPENDS=	evdev-proto>0:devel/evdev-proto \
 		wayland-protocols>=1.14:graphics/wayland-protocols \
-		wlroots>=0.14.0<0.15.0:x11-toolkits/wlroots
+		wlroots>=0.15.0<0.16.0:x11-toolkits/wlroots
 LIB_DEPENDS=	libjson-c.so:devel/json-c \
 		libevdev.so:devel/libevdev \
 		libudev.so:devel/libudev-devd \
diff --git a/x11-wm/sway/distinfo b/x11-wm/sway/distinfo
index d4a6d66154dd..f572dc41ebad 100644
--- a/x11-wm/sway/distinfo
+++ b/x11-wm/sway/distinfo
@@ -9,3 +9,35 @@ SHA256 (86b08e3257a4.patch) = ff3399269a1d1cbdf9cd38255c7e4ce072c9562c3665784036
 SIZE (86b08e3257a4.patch) = 932
 SHA256 (ff468584abdd.patch) = 9803de05490e2e84b2c79d634837aeb880ba5b29c1c485707593af40fdddc3f6
 SIZE (ff468584abdd.patch) = 2131
+SHA256 (c53ef023850f.patch) = 1bb46925d7e9085a20d4cb979f05bb9b4b0a1fd885faaf3af3f7100d6280d8d9
+SIZE (c53ef023850f.patch) = 705
+SHA256 (fd36289faa86.patch) = b62f414f719d2b2304551b990fd3a8d0651e24d78650ba0b082a693ee0224920
+SIZE (fd36289faa86.patch) = 8876
+SHA256 (95a51aefc38a.patch) = 0e23eaeea342e642a9ba38ef5768099e84dd03b447b91495c0a4f2e2a1e79dae
+SIZE (95a51aefc38a.patch) = 5118
+SHA256 (711403015921.patch) = 8b9cdd43cf4c7f6febc00049b8ff41b9407eda911fef83126f1f7b2ec7bf25d5
+SIZE (711403015921.patch) = 3101
+SHA256 (c9060bcc12d0.patch) = 19f8876995162e244a277019e4eaf76291b0bbe4013d74ded8509ea9eeccf8e6
+SIZE (c9060bcc12d0.patch) = 1760
+SHA256 (ae80bdedf998.patch) = c8065ac08cdd4c51eff7ea2261a8536942e64d016ad008baf58080dc61d2c94a
+SIZE (ae80bdedf998.patch) = 1772
+SHA256 (eb03298b4606.patch) = bd2140b5038d97cc7715dca952fec1f59dc79b243b9da3b088d291e6686eba54
+SIZE (eb03298b4606.patch) = 861
+SHA256 (b7b3ef6dcf90.patch) = 42d77ac75de836ada68acf038a2c2278981028a895bd7fad2a4517117a314150
+SIZE (b7b3ef6dcf90.patch) = 2340
+SHA256 (c11b5db4d6c1.patch) = 96d478208d9390b49b6f429653e082fc7b33afaeaccae503f977f5abef7d9199
+SIZE (c11b5db4d6c1.patch) = 854
+SHA256 (f67ed6772c27.patch) = 1042e40c9bb23e06c8b5d17a29de4508a14706013beafbe8602d18ad9f3d6231
+SIZE (f67ed6772c27.patch) = 2585
+SHA256 (5fd5d6434e9e.patch) = 4bf8eec44673cd3e1ffb05b418e76a028425f8d46e05accb7c8faf41e58047db
+SIZE (5fd5d6434e9e.patch) = 3051
+SHA256 (94680d1aa044.patch) = b7f4f09f3882d825c647127e60775f3b3a3563e4a24f323d6f1ca0bcb82a6125
+SIZE (94680d1aa044.patch) = 2971
+SHA256 (0c210a5e68ea.patch) = 85a1d824087adff2b12b0d6e36c33238be28a760889b6d36647d7608d6538254
+SIZE (0c210a5e68ea.patch) = 825
+SHA256 (3e2f3f5d67b8.patch) = 93afa35c723a687c80f4fb097e740b4cc4e064712b0e20aeac68dd9e047e8ffc
+SIZE (3e2f3f5d67b8.patch) = 6930
+SHA256 (729e18bff5ff.patch) = 84057f5efe10ccf4e7b5b2536edf37aa39ba230dcdf7cffc8dc7af7b9fc0c8b2
+SIZE (729e18bff5ff.patch) = 1285
+SHA256 (d475eb2d8089.patch) = 01ae1c03758fed3d58a86cbf442613f5b57f7dc7dacb0057869b85f543458841
+SIZE (d475eb2d8089.patch) = 9277
diff --git a/x11-wm/wayfire-plugins-extra/Makefile b/x11-wm/wayfire-plugins-extra/Makefile
index 379cc9d3e200..b062448b2aa7 100644
--- a/x11-wm/wayfire-plugins-extra/Makefile
+++ b/x11-wm/wayfire-plugins-extra/Makefile
@@ -1,9 +1,12 @@
 PORTNAME=	wayfire-plugins-extra
 DISTVERSIONPREFIX=	v
 DISTVERSION=	0.7.0
-PORTREVISION=	2
+PORTREVISION=	3
 CATEGORIES=	x11-wm
 
+PATCH_SITES=	https://github.com/${GH_ACCOUNT}/${GH_PROJECT}/commit/
+PATCHFILES+=	a8eca14c44b9.patch:-p1 # https://github.com/WayfireWM/wayfire-plugins-extra/pull/106
+
 MAINTAINER=	jbeich@FreeBSD.org
 COMMENT=	Additional plugins for Wayfire
 
diff --git a/x11-wm/wayfire-plugins-extra/distinfo b/x11-wm/wayfire-plugins-extra/distinfo
index fda1482173f6..2af881fe3ae3 100644
--- a/x11-wm/wayfire-plugins-extra/distinfo
+++ b/x11-wm/wayfire-plugins-extra/distinfo
@@ -1,3 +1,5 @@
 TIMESTAMP = 1611938557
 SHA256 (WayfireWM-wayfire-plugins-extra-v0.7.0_GH0.tar.gz) = e6377e7f2cd6b0a19fe0a256c819f801ee1d963524ed4e4930b702474bc04287
 SIZE (WayfireWM-wayfire-plugins-extra-v0.7.0_GH0.tar.gz) = 50385
+SHA256 (a8eca14c44b9.patch) = 99dd5f51ff2a27bbff2165ee80707ea3954c25c438bef5969f85bedcda410c7f
+SIZE (a8eca14c44b9.patch) = 1059
diff --git a/x11-wm/wayfire-plugins-extra/files/patch-wlroots-0.15 b/x11-wm/wayfire-plugins-extra/files/patch-wlroots-0.15
new file mode 100644
index 000000000000..6124414c61e5
--- /dev/null
+++ b/x11-wm/wayfire-plugins-extra/files/patch-wlroots-0.15
@@ -0,0 +1,27 @@
+../src/mag.cpp:176:30: error: no member named 'front_buffer' in 'wlr_output'
+        if (!output->handle->front_buffer)
+             ~~~~~~~~~~~~~~  ^
+../src/mag.cpp:184:52: error: no member named 'front_buffer' in 'wlr_output'
+        if (!wlr_buffer_get_dmabuf(output->handle->front_buffer, &dmabuf_attribs))
+                                   ~~~~~~~~~~~~~~  ^
+
+--- src/mag.cpp.orig	2021-01-29 16:42:37 UTC
++++ src/mag.cpp
+@@ -173,7 +173,7 @@ class wayfire_magnifier : public wf::plugin_interface_
+     {
+         wlr_dmabuf_attributes dmabuf_attribs;
+ 
+-        if (!output->handle->front_buffer)
++        if (!output->handle->back_buffer)
+         {
+             LOGE("Got empty buffer on ", output->handle->name);
+             return;
+@@ -181,7 +181,7 @@ class wayfire_magnifier : public wf::plugin_interface_
+ 
+         /* This plugin only works if this function succeeds. It will not
+          * work with the x11 backend but works with drm, for example. */
+-        if (!wlr_buffer_get_dmabuf(output->handle->front_buffer, &dmabuf_attribs))
++        if (!wlr_buffer_get_dmabuf(output->handle->back_buffer, &dmabuf_attribs))
+         {
+             LOGE("Failed reading output contents");
+             deactivate();
diff --git a/x11-wm/wayfire/Makefile b/x11-wm/wayfire/Makefile
index bb001929462a..8dd77be0c092 100644
--- a/x11-wm/wayfire/Makefile
+++ b/x11-wm/wayfire/Makefile
@@ -1,11 +1,22 @@
 PORTNAME=	wayfire
 DISTVERSIONPREFIX=	v
 DISTVERSION=	0.7.2
-PORTREVISION=	1
+PORTREVISION=	2
 CATEGORIES=	x11-wm
 
 PATCH_SITES=	https://github.com/${GH_ACCOUNT}/${GH_PROJECT}/commit/
 PATCHFILES+=	7b664f055249.patch:-p1 # https://github.com/WayfireWM/wayfire/pull/1230
+PATCHFILES+=	8096b2f6d190.patch:-p1 # wlroots 0.15
+PATCHFILES+=	394fc3a86db4.patch:-p1 # wlroots 0.15
+PATCHFILES+=	839c11ec4d39.patch:-p1 # wlroots 0.15
+PATCHFILES+=	be3113dda0c9.patch:-p1 # wlroots 0.15
+PATCHFILES+=	2d212482870a.patch:-p1 # wlroots 0.15
+PATCHFILES+=	e6f403af09cc.patch:-p1 # wlroots 0.15
+PATCHFILES+=	7355cf0f1f64.patch:-p1 # wlroots 0.15
+PATCHFILES+=	f9446a5d7496.patch:-p1 # wlroots 0.15
+PATCHFILES+=	a4e83480ad60.patch:-p1 # wlroots 0.15
+PATCHFILES+=	292b0d28aab5.patch:-p1 # wlroots 0.15
+PATCHFILES+=	6603ba65e1c4.patch:-p1 # wlroots 0.15
 
 MAINTAINER=	jbeich@FreeBSD.org
 COMMENT=	3D Wayland compositor
@@ -18,7 +29,7 @@ BUILD_DEPENDS=	evdev-proto>0:devel/evdev-proto \
 		${LOCALBASE}/include/xf86drmMode.h:graphics/libdrm \
 		wayland-protocols>=1.12:graphics/wayland-protocols \
 		glm>=0.9.8:math/glm \
-		wlroots>=0.14.0<0.15.0:x11-toolkits/wlroots
+		wlroots>=0.15.0<0.16.0:x11-toolkits/wlroots
 LIB_DEPENDS=	libinotify.so:devel/libinotify \
 		libwf-config.so:devel/wf-config \
 		libpng.so:graphics/png \
diff --git a/x11-wm/wayfire/distinfo b/x11-wm/wayfire/distinfo
index 589e5ae10034..bc581a9fb07b 100644
--- a/x11-wm/wayfire/distinfo
+++ b/x11-wm/wayfire/distinfo
@@ -7,3 +7,25 @@ SHA256 (WayfireWM-wf-utils-889fdaf_GH0.tar.gz) = 8848592f4a04dec60c3e09a996f15d1
 SIZE (WayfireWM-wf-utils-889fdaf_GH0.tar.gz) = 48477
 SHA256 (7b664f055249.patch) = 080c3674c9f27cd49fb1c32e0aec0dc126f901368643653e93f6c0e3e390f269
 SIZE (7b664f055249.patch) = 625
+SHA256 (8096b2f6d190.patch) = 4e28fac7d3f3e7240febfe41a69a66b47498406f60314f21168488c7245f54b0
+SIZE (8096b2f6d190.patch) = 1021
+SHA256 (394fc3a86db4.patch) = 749541ea922f24ce2b2db6e435f0e8b579b4cbbd19bc17e2b80659094dfd91e1
+SIZE (394fc3a86db4.patch) = 763
+SHA256 (839c11ec4d39.patch) = d9b7065820448e7acd169c79979d818534913ae71abe5cb203d2699bb7690c78
+SIZE (839c11ec4d39.patch) = 1200
+SHA256 (be3113dda0c9.patch) = 7603ac5f6008a4f275f208683bcc2618e078943053308c5292670b902a628927
+SIZE (be3113dda0c9.patch) = 3224
+SHA256 (2d212482870a.patch) = ecb6c2f2f91ee19a808ef209e0d141c466b02d28c3bc593a6830988014d399e6
+SIZE (2d212482870a.patch) = 1249
+SHA256 (e6f403af09cc.patch) = d7ea1e35a74a8a8368e8c09d1d3ba4611409862e1437ec600655470ec44d9ecd
+SIZE (e6f403af09cc.patch) = 1308
+SHA256 (7355cf0f1f64.patch) = dbc57120e2e45e95f97027ad6c52d0d74b388f304bdea3b3c3a13120fdfc103c
+SIZE (7355cf0f1f64.patch) = 1327
+SHA256 (f9446a5d7496.patch) = 52959a1c416c3ec8ef0c262cce71267523bf970f71ceba77cc94b99c7423605d
+SIZE (f9446a5d7496.patch) = 1230
+SHA256 (a4e83480ad60.patch) = f1e5aae88a83182cf5fc8522ff88399e31d6cd7c91985c3d89bd5cc31d75e150
+SIZE (a4e83480ad60.patch) = 917
+SHA256 (292b0d28aab5.patch) = e97d20b71a13bc152f2dd004dce8e92196013652b502ace11a947e0b69f42b1c
+SIZE (292b0d28aab5.patch) = 3585
+SHA256 (6603ba65e1c4.patch) = e4a31e4fd9b959a13c5ab4fd749f74b053821983ae0db75f0447e673acf33140
+SIZE (6603ba65e1c4.patch) = 918
diff --git a/x11-wm/wayfire/files/patch-wlroots-0.15 b/x11-wm/wayfire/files/patch-wlroots-0.15
new file mode 100644
index 000000000000..0aa3a5a6cea2
--- /dev/null
+++ b/x11-wm/wayfire/files/patch-wlroots-0.15
@@ -0,0 +1,121 @@
+https://github.com/WayfireWM/wayfire/issues/1351
+
+In file included from ../src/core/core.cpp:17:
+../src/api/wayfire/nonstd/wlroots-full.hpp:85:10: fatal error: 'wlr/backend/noop.h' file not found
+#include <wlr/backend/noop.h>
+         ^~~~~~~~~~~~~~~~~~~~
+../src/core/output-layout.cpp:630:25: error: no member named 'front_buffer' in 'wlr_output'
+        if (wo->handle->front_buffer == NULL)
+            ~~~~~~~~~~  ^
+../src/core/output-layout.cpp:637:48: error: no member named 'front_buffer' in 'wlr_output'
+        if (!wlr_buffer_get_dmabuf(wo->handle->front_buffer, &attributes))
+                                   ~~~~~~~~~~  ^
+
+--- plugins/single_plugins/preserve-output.cpp.orig	2021-06-23 13:11:20 UTC
++++ plugins/single_plugins/preserve-output.cpp
+@@ -297,7 +297,7 @@ class wayfire_preserve_output : public wf::plugin_inte
+   public:
+     void init() override
+     {
+-        if (wlr_output_is_noop(output->handle))
++        if (wlr_output_is_headless(output->handle))
+         {
+             // Don't do anything for NO-OP outputs
+             return;
+--- src/api/wayfire/nonstd/wlroots-full.hpp.orig	2021-06-23 13:11:20 UTC
++++ src/api/wayfire/nonstd/wlroots-full.hpp
+@@ -81,7 +81,7 @@ extern "C"
+ #if WLR_HAS_X11_BACKEND
+     #include <wlr/backend/x11.h>
+ #endif
+-#include <wlr/backend/noop.h>
++#include <wlr/backend/headless.h>
+ #include <wlr/backend/wayland.h>
+ #undef static
+ #include <wlr/backend/libinput.h>
+--- src/core/output-layout.cpp.orig	2021-06-23 13:11:20 UTC
++++ src/core/output-layout.cpp
+@@ -439,7 +439,7 @@ struct output_layout_output_t
+          * focused */
+         wlr_output *focused = get_core().get_active_output() ?
+             get_core().get_active_output()->handle : nullptr;
+-        if (!focused || wlr_output_is_noop(focused))
++        if (!focused || wlr_output_is_headless(focused))
+         {
+             get_core().focus_output(wo);
*** 76 LINES SKIPPED ***