From 63270d5c0620a444b59dd1b2ab43bc7467b1e4c9 Mon Sep 17 00:00:00 2001 From: CismonX Date: Thu, 21 May 2026 02:38:16 +0800 Subject: [PATCH] selection: do not copy empty text Copy-on-select (configured with 'selection-target') may accidentally clear the clipboard, if the user drags the mouse a little bit when clicking inside a terminal window. Now we only copy if there is actual text being selected. Closes #2327 --- CHANGELOG.md | 6 ++++++ selection.c | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5792c240..609bc084 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -73,6 +73,12 @@ ## Unreleased ### Added ### Changed + +* No longer copies empty text after selection ([#2327][2327]). + +[2327]: https://codeberg.org/dnkl/foot/issues/2327 + + ### Deprecated ### Removed ### Fixed diff --git a/selection.c b/selection.c index 0a479ee8..bb0d3f1b 100644 --- a/selection.c +++ b/selection.c @@ -1948,6 +1948,9 @@ static const struct zwp_primary_selection_source_v1_listener primary_selection_s bool text_to_clipboard(struct seat *seat, struct terminal *term, char *text, uint32_t serial) { + if (text == NULL || text[0] == '\0') + return false; + xassert(serial != 0); struct wl_clipboard *clipboard = &seat->clipboard; @@ -2418,6 +2421,9 @@ selection_from_clipboard(struct seat *seat, struct terminal *term, uint32_t seri bool text_to_primary(struct seat *seat, struct terminal *term, char *text, uint32_t serial) { + if (text == NULL || text[0] == '\0') + return false; + if (term->wl->primary_selection_device_manager == NULL) return false;