From 491e0aca38c7a6832bbf7745775a23a6dafb7128 Mon Sep 17 00:00:00 2001 From: Donovan Glover Date: Sat, 30 Mar 2024 15:02:02 -0400 Subject: [PATCH] overlays(kitty): Patch wlroots copying bug This fixes an issue where copying text would break until changing workspaces and consequently windows. This *was* fixed in 0.32.0 as a result of [1], however kitty 0.33.1 with the recent fontconfig workaround patch[2] ends up showing CJK characters with a very thin weight, causing them to be inconsistent relative to the surrounding text and more difficult to read. [1]: https://github.com/kovidgoyal/kitty/issues/6890 [2]: https://github.com/kovidgoyal/kitty/commit/d2c21ee2973ecda23825b8942989c11caa8193ff --- overlays/kitty.nix | 4 ++ patches/kitty-wlroots-copying-fix.patch | 55 +++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 patches/kitty-wlroots-copying-fix.patch diff --git a/overlays/kitty.nix b/overlays/kitty.nix index f5232ceb..d998e92b 100644 --- a/overlays/kitty.nix +++ b/overlays/kitty.nix @@ -16,6 +16,10 @@ inherit src version; vendorHash = "sha256-OyZAWefSIiLQO0icxMIHWH3BKgNas8HIxLcse/qWKcU="; }).goModules; + + patches = (oldAttrs.patches or [ ]) ++ [ + ../patches/kitty-wlroots-copying-fix.patch + ]; }); }) ]; diff --git a/patches/kitty-wlroots-copying-fix.patch b/patches/kitty-wlroots-copying-fix.patch new file mode 100644 index 00000000..7af25b77 --- /dev/null +++ b/patches/kitty-wlroots-copying-fix.patch @@ -0,0 +1,55 @@ +From 69a5c7e3b232ab050a6eb1a2b40c235f5a0d9ccf Mon Sep 17 00:00:00 2001 +From: Kovid Goyal +Date: Fri, 8 Dec 2023 08:38:08 +0530 +Subject: [PATCH] Wayland: Fix a regression in the previous release that broke + copying to clipboard under wl-roots based compositors in some circumstances + +As is usual in Wayland land, utter chaos. Divergent implementations, +incorrect interpretations of the spec, bla bla. + +Fixes #6890 +--- + docs/changelog.rst | 3 +++ + glfw/wl_window.c | 14 ++++++++++++-- + 2 files changed, 15 insertions(+), 2 deletions(-) + +diff --git a/docs/changelog.rst b/docs/changelog.rst +index 2a8295c5aef..0193b12c4c8 100644 +--- a/docs/changelog.rst ++++ b/docs/changelog.rst +@@ -54,6 +54,9 @@ Detailed list of changes + + - A new action :ac:`send_key` to simplify mapping key presses to other keys without needing :ac:`send_text` + ++- Wayland: Fix a regression in the previous release that broke copying to clipboard under wl-roots based compositors in some circumstances ++ (:iss:`6890`) ++ + + 0.31.0 [2023-11-08] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +diff --git a/glfw/wl_window.c b/glfw/wl_window.c +index 0dcc868e3c9..b64a29ca62d 100644 +--- a/glfw/wl_window.c ++++ b/glfw/wl_window.c +@@ -2034,9 +2034,19 @@ _glfwPlatformSetClipboard(GLFWClipboardType t) { + f(data_source, cd->mime_types[i]); + } + if (t == GLFW_CLIPBOARD) { +- // According to the Wayland spec only the application that has keyboard focus can set the clipboard. ++ // According to some interpretations of the Wayland spec only the application that has keyboard focus can set the clipboard. + // Hurray for the Wayland nanny state! +- wl_data_device_set_selection(_glfw.wl.dataDevice, _glfw.wl.dataSourceForClipboard, _glfw.wl.keyboard_enter_serial); ++ // ++ // However in wl-roots based compositors, using the serial from the keyboard enter event doesn't work. No clue what ++ // the correct serial to use here is. Given this Wayland there probably isn't one. What a joke. ++ // Bug report: https://github.com/kovidgoyal/kitty/issues/6890 ++ // Ironically one of the contributors to wl_roots claims the keyboard enter serial is the correct one to use: ++ // https://emersion.fr/blog/2020/wayland-clipboard-drag-and-drop/ ++ // The Wayland spec itself says "serial number of the event that triggered this request" ++ // https://wayland.freedesktop.org/docs/html/apa.html#protocol-spec-wl_data_device ++ // So who the fuck knows. Just use the latest received serial and ask anybody that uses Wayland ++ // to get their head examined. ++ wl_data_device_set_selection(_glfw.wl.dataDevice, _glfw.wl.dataSourceForClipboard, _glfw.wl.serial); + } else { + // According to the Wayland spec we can only set the primary selection in response to a pointer button event + // Hurray for the Wayland nanny state!