summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gui-wm/tinywl/Manifest1
-rw-r--r--gui-wm/tinywl/files/tinywl-don-t-crash-when-there-is-no-keyboard.patch55
-rw-r--r--gui-wm/tinywl/metadata.xml8
-rw-r--r--gui-wm/tinywl/tinywl-0.15.1.ebuild48
4 files changed, 112 insertions, 0 deletions
diff --git a/gui-wm/tinywl/Manifest b/gui-wm/tinywl/Manifest
new file mode 100644
index 0000000..9433b60
--- /dev/null
+++ b/gui-wm/tinywl/Manifest
@@ -0,0 +1 @@
+DIST wlroots-0.15.1.tar.gz 565816 BLAKE2B 09b704a55d8b4a5ab19bb0fcdd041635fbbbb8eed94ff6d189ef47f9f86e90178efa8441c7db78839b1145ed79ed016d520d6599e256cdcf49130cda38bc307d SHA512 6228160f2f350a406c612f1048d7075cf2f78206cc84bc16f889d5d0acd614f9e98845fffed03d7067cfdbd7558b77fcc5d8cedc3868d866e476523126a63677
diff --git a/gui-wm/tinywl/files/tinywl-don-t-crash-when-there-is-no-keyboard.patch b/gui-wm/tinywl/files/tinywl-don-t-crash-when-there-is-no-keyboard.patch
new file mode 100644
index 0000000..cff1f72
--- /dev/null
+++ b/gui-wm/tinywl/files/tinywl-don-t-crash-when-there-is-no-keyboard.patch
@@ -0,0 +1,55 @@
+From 7d950f3dac6cca62635d5e4ff2af33b35372f6db Mon Sep 17 00:00:00 2001
+From: Simon Ser <contact@emersion.fr>
+Date: Sat, 19 Mar 2022 14:00:43 +0100
+Subject: [PATCH] tinywl: don't crash when there is no keyboard
+
+Running with WLR_BACKENDS=headless, there is no keyboard device.
+Avoid crashes like so:
+
+ ../tinywl/tinywl.c:136:2: runtime error: member access within null pointer of type 'struct wlr_keyboard'
+ ../tinywl/tinywl.c:136:2: runtime error: member access within null pointer of type 'struct wlr_keyboard'
+ AddressSanitizer:DEADLYSIGNAL
+ =================================================================
+ ==331107==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000120 (pc 0x556ed03e4e99 bp 0x7ffce834bc10 sp 0x7ffce834bbb0 T0)
+ ==331107==The signal is caused by a READ memory access.
+ ==331107==Hint: address points to the zero page.
+ #0 0x556ed03e4e99 in focus_view ../tinywl/tinywl.c:136
+ #1 0x556ed03eb3be in xdg_toplevel_map ../tinywl/tinywl.c:603
+ #2 0x7f75d6f768db in wlr_signal_emit_safe ../util/signal.c:29
+ #3 0x7f75d6e9cac7 in xdg_surface_role_commit ../types/xdg_shell/wlr_xdg_surface.c:315
+ #4 0x7f75d6eb6944 in surface_commit_state ../types/wlr_compositor.c:466
+ #5 0x7f75d6eb7b02 in surface_handle_commit ../types/wlr_compositor.c:523
+ #6 0x7f75d5714d49 (/usr/lib/libffi.so.8+0x6d49)
+ #7 0x7f75d5714266 (/usr/lib/libffi.so.8+0x6266)
+ #8 0x7f75d68cb322 (/usr/lib/libwayland-server.so.0+0xd322)
+ #9 0x7f75d68c65cb (/usr/lib/libwayland-server.so.0+0x85cb)
+ #10 0x7f75d68c91c9 in wl_event_loop_dispatch (/usr/lib/libwayland-server.so.0+0xb1c9)
+ #11 0x7f75d68c6d36 in wl_display_run (/usr/lib/libwayland-server.so.0+0x8d36)
+ #12 0x556ed03eef55 in main ../tinywl/tinywl.c:905
+ #13 0x7f75d5d2330f in __libc_start_call_main (/usr/lib/libc.so.6+0x2d30f)
+ #14 0x7f75d5d233c0 in __libc_start_main@GLIBC_2.2.5 (/usr/lib/libc.so.6+0x2d3c0)
+ #15 0x556ed03e46e4 in _start (/home/simon/src/wlroots/build/tinywl/tinywl+0x136e4)
+---
+ tinywl/tinywl.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/tinywl/tinywl.c b/tinywl/tinywl.c
+index dd442aac..8796e9df 100644
+--- a/tinywl/tinywl.c
++++ b/tinywl/tinywl.c
+@@ -130,8 +130,10 @@ static void focus_view(struct tinywl_view *view, struct wlr_surface *surface) {
+ * track of this and automatically send key events to the appropriate
+ * clients without additional work on your part.
+ */
+- wlr_seat_keyboard_notify_enter(seat, view->xdg_surface->surface,
+- keyboard->keycodes, keyboard->num_keycodes, &keyboard->modifiers);
++ if (keyboard != NULL) {
++ wlr_seat_keyboard_notify_enter(seat, view->xdg_surface->surface,
++ keyboard->keycodes, keyboard->num_keycodes, &keyboard->modifiers);
++ }
+ }
+
+ static void keyboard_handle_modifiers(
+--
+2.36.1
+
diff --git a/gui-wm/tinywl/metadata.xml b/gui-wm/tinywl/metadata.xml
new file mode 100644
index 0000000..f32ad44
--- /dev/null
+++ b/gui-wm/tinywl/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>alex_y_xu@yahoo.ca</email>
+ <name>Alex Xu (Hello71)</name>
+ </maintainer>
+</pkgmetadata>
diff --git a/gui-wm/tinywl/tinywl-0.15.1.ebuild b/gui-wm/tinywl/tinywl-0.15.1.ebuild
new file mode 100644
index 0000000..c8ddb20
--- /dev/null
+++ b/gui-wm/tinywl/tinywl-0.15.1.ebuild
@@ -0,0 +1,48 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION='"minimum viable product" Wayland compositor based on wlroots'
+HOMEPAGE="https://gitlab.freedesktop.org/wlroots/wlroots/-/tree/tinywl"
+
+if [[ ${PV} == 9999 ]]; then
+ EGIT_REPO_URI="https://gitlab.freedesktop.org/wlroots/wlroots.git"
+ inherit git-r3
+else
+ SRC_URI="https://gitlab.freedesktop.org/wlroots/wlroots/-/archive/${PV}/wlroots-${PV}.tar.gz"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="CC0-1.0"
+SLOT="0"
+IUSE=""
+
+DEPEND="
+ >=gui-libs/wlroots-${PV}:=
+ dev-libs/wayland-protocols
+"
+RDEPEND="
+ ${DEPEND}
+"
+BDEPEND="
+ dev-libs/wayland-protocols
+ virtual/pkgconfig
+"
+
+S=${WORKDIR}/wlroots-${PV}
+
+PATCHES=(
+ "${FILESDIR}/tinywl-don-t-crash-when-there-is-no-keyboard.patch"
+)
+
+S="${WORKDIR}/wlroots-${PV}/tinywl"
+
+src_prepare() {
+ cd ..
+ default
+}
+
+src_install() {
+ dobin tinywl
+}