diff options
author | emersion <contact@emersion.fr> | 2019-01-21 19:23:40 +0100 |
---|---|---|
committer | emersion <contact@emersion.fr> | 2019-01-21 19:23:40 +0100 |
commit | 06467d2e1233d8c2830500ca399bcce8dd37a91b (patch) | |
tree | c4b168bd7876879cb53bde307697561db0b139db /xwayland/selection | |
parent | b619ab4d34b9bbcae7fbfdf87e84a9567acefa6b (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/selection')
-rw-r--r-- | xwayland/selection/incoming.c | 6 | ||||
-rw-r--r-- | xwayland/selection/selection.c | 3 |
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); } |