aboutsummaryrefslogtreecommitdiff
path: root/xwayland
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2019-01-21 19:23:40 +0100
committeremersion <contact@emersion.fr>2019-01-21 19:23:40 +0100
commit06467d2e1233d8c2830500ca399bcce8dd37a91b (patch)
treec4b168bd7876879cb53bde307697561db0b139db /xwayland
parentb619ab4d34b9bbcae7fbfdf87e84a9567acefa6b (diff)
primary-selection: add a serial argument
The serial needs to be bumped when X11 clients set the selection, otherwise some Wayland clients (e.g. GTK) will overwrite it when they gain focus.
Diffstat (limited to 'xwayland')
-rw-r--r--xwayland/selection/incoming.c6
-rw-r--r--xwayland/selection/selection.c3
2 files changed, 6 insertions, 3 deletions
diff --git a/xwayland/selection/incoming.c b/xwayland/selection/incoming.c
index 3e97ca04..79197e60 100644
--- a/xwayland/selection/incoming.c
+++ b/xwayland/selection/incoming.c
@@ -370,7 +370,8 @@ static void xwm_selection_get_targets(struct wlr_xwm_selection *selection) {
bool ok = source_get_targets(selection, &source->base.mime_types,
&source->mime_types_atoms);
if (ok) {
- wlr_seat_set_primary_selection(xwm->seat, &source->base);
+ wlr_seat_set_primary_selection(xwm->seat, &source->base,
+ wl_display_next_serial(xwm->xwayland->wl_display));
} else {
wlr_primary_selection_source_destroy(&source->base);
}
@@ -427,7 +428,8 @@ int xwm_handle_xfixes_selection_notify(struct wlr_xwm *xwm,
wlr_seat_set_selection(xwm->seat, NULL,
wl_display_next_serial(xwm->xwayland->wl_display));
} else if (selection == &xwm->primary_selection) {
- wlr_seat_set_primary_selection(xwm->seat, NULL);
+ wlr_seat_set_primary_selection(xwm->seat, NULL,
+ wl_display_next_serial(xwm->xwayland->wl_display));
} else if (selection == &xwm->dnd_selection) {
// TODO: DND
} else {
diff --git a/xwayland/selection/selection.c b/xwayland/selection/selection.c
index 4d7732cb..dee7f9c3 100644
--- a/xwayland/selection/selection.c
+++ b/xwayland/selection/selection.c
@@ -231,7 +231,8 @@ void xwm_selection_finish(struct wlr_xwm *xwm) {
if (xwm->seat->primary_selection_source &&
primary_selection_source_is_xwayland(
xwm->seat->primary_selection_source)) {
- wlr_seat_set_primary_selection(xwm->seat, NULL);
+ wlr_seat_set_primary_selection(xwm->seat, NULL,
+ wl_display_next_serial(xwm->xwayland->wl_display));
}
wlr_xwayland_set_seat(xwm->xwayland, NULL);
}