From c3cacb470430f3a19db8e2442f1ed61887044373 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Wed, 9 Sep 2020 18:44:49 +0200 Subject: [PATCH] selection: add selection__unset() These functions clear the current selection. --- selection.c | 41 +++++++++++++++++++++++++++++++++++++++++ selection.h | 3 +++ 2 files changed, 44 insertions(+) diff --git a/selection.c b/selection.c index ed8d061b..b423fcca 100644 --- a/selection.c +++ b/selection.c @@ -661,6 +661,47 @@ selection_cancel(struct terminal *term) term->selection.ongoing = false; } +void +selection_clipboard_unset(struct seat *seat) +{ + struct wl_clipboard *clipboard = &seat->clipboard; + + if (clipboard->data_source == NULL) + return; + + /* Kill previous data source */ + assert(clipboard->serial != 0); + wl_data_device_set_selection(seat->data_device, NULL, clipboard->serial); + wl_data_source_destroy(clipboard->data_source); + + clipboard->data_source = NULL; + clipboard->serial = 0; + + free(clipboard->text); + clipboard->text = NULL; +} + +void +selection_primary_unset(struct seat *seat) +{ + struct wl_primary *primary = &seat->primary; + + if (primary->data_source == NULL) + return; + + assert(primary->serial != 0); + zwp_primary_selection_device_v1_set_selection( + seat->primary_selection_device, NULL, primary->serial); + zwp_primary_selection_source_v1_destroy(primary->data_source); + free(primary->text); + + primary->data_source = NULL; + primary->serial = 0; + + free(primary->text); + primary->text = NULL; +} + void selection_mark_word(struct seat *seat, struct terminal *term, int col, int row, bool spaces_only, uint32_t serial) diff --git a/selection.h b/selection.h index 639c36e9..178a990b 100644 --- a/selection.h +++ b/selection.h @@ -30,6 +30,9 @@ void selection_mark_word( void selection_mark_row( struct seat *seat, struct terminal *term, int row, uint32_t serial); +void selection_clipboard_unset(struct seat *seat); +void selection_primary_unset(struct seat *seat); + char *selection_to_text(const struct terminal *term); void selection_to_clipboard( struct seat *seat, struct terminal *term, uint32_t serial);