selection: primary: don't require compositor to implement it

This commit is contained in:
Daniel Eklöf 2019-09-25 19:26:55 +02:00
parent 5340204cbc
commit 16f15d1a36
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 20 additions and 8 deletions

16
main.c
View file

@ -735,10 +735,8 @@ main(int argc, char *const *argv)
"(wl_data_device_manager not implemented by server)");
goto out;
}
if (term.wl.primary_selection_device_manager == NULL) {
LOG_ERR("no primary selection available");
goto out;
}
if (term.wl.primary_selection_device_manager == NULL)
LOG_WARN("no primary selection available");
tll_foreach(term.wl.monitors, it) {
LOG_INFO("%s: %dx%d+%dx%d (scale=%d, refresh=%.2fHz)",
@ -752,10 +750,12 @@ main(int argc, char *const *argv)
wl_data_device_add_listener(term.wl.data_device, &data_device_listener, &term);
/* Primary selection */
term.wl.primary_selection_device = zwp_primary_selection_device_manager_v1_get_device(
term.wl.primary_selection_device_manager, term.wl.seat);
zwp_primary_selection_device_v1_add_listener(
term.wl.primary_selection_device, &primary_selection_device_listener, &term);
if (term.wl.primary_selection_device_manager != NULL) {
term.wl.primary_selection_device = zwp_primary_selection_device_manager_v1_get_device(
term.wl.primary_selection_device_manager, term.wl.seat);
zwp_primary_selection_device_v1_add_listener(
term.wl.primary_selection_device, &primary_selection_device_listener, &term);
}
/* Cursor */
unsigned cursor_size = 24;

View file

@ -549,6 +549,9 @@ selection_from_clipboard(struct terminal *term, uint32_t serial)
bool
text_to_primary(struct terminal *term, char *text, uint32_t serial)
{
if (term->wl.primary_selection_device_manager == NULL)
return false;
/* TODO: somehow share code with the clipboard equivalent */
if (term->selection.primary.data_source != NULL) {
/* Kill previous data source */
@ -592,6 +595,9 @@ text_to_primary(struct terminal *term, char *text, uint32_t serial)
void
selection_to_primary(struct terminal *term, uint32_t serial)
{
if (term->wl.primary_selection_device_manager == NULL)
return;
/* Get selection as a string */
char *text = extract_selection(term);
if (!text_to_primary(term, text, serial))
@ -603,6 +609,9 @@ text_from_primary(
struct terminal *term, void (*cb)(const char *data, size_t size, void *user),
void *user)
{
if (term->wl.primary_selection_device_manager == NULL)
return;
struct primary *primary = &term->selection.primary;
if (primary->data_offer == NULL)
return;
@ -645,6 +654,9 @@ text_from_primary(
void
selection_from_primary(struct terminal *term)
{
if (term->wl.primary_selection_device_manager == NULL)
return;
struct clipboard *clipboard = &term->selection.clipboard;
if (clipboard->data_offer == NULL)
return;