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
This commit is contained in:
CismonX 2026-05-21 02:38:16 +08:00
parent 2d11b36a24
commit 63270d5c06
No known key found for this signature in database
GPG key ID: 250FCE3001350BCA
2 changed files with 12 additions and 0 deletions

View file

@ -73,6 +73,12 @@
## Unreleased ## Unreleased
### Added ### Added
### Changed ### Changed
* No longer copies empty text after selection ([#2327][2327]).
[2327]: https://codeberg.org/dnkl/foot/issues/2327
### Deprecated ### Deprecated
### Removed ### Removed
### Fixed ### Fixed

View file

@ -1948,6 +1948,9 @@ static const struct zwp_primary_selection_source_v1_listener primary_selection_s
bool bool
text_to_clipboard(struct seat *seat, struct terminal *term, char *text, uint32_t serial) 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); xassert(serial != 0);
struct wl_clipboard *clipboard = &seat->clipboard; struct wl_clipboard *clipboard = &seat->clipboard;
@ -2418,6 +2421,9 @@ selection_from_clipboard(struct seat *seat, struct terminal *term, uint32_t seri
bool bool
text_to_primary(struct seat *seat, struct terminal *term, char *text, uint32_t serial) 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) if (term->wl->primary_selection_device_manager == NULL)
return false; return false;