selection: add selection_<type>_unset()

These functions clear the current selection.
This commit is contained in:
Daniel Eklöf 2020-09-09 18:44:49 +02:00
parent 99023cae99
commit c3cacb4704
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 44 additions and 0 deletions

View file

@ -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)

View file

@ -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);