aboutsummaryrefslogtreecommitdiff
path: root/xwayland
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2017-12-25 16:23:17 +0100
committeremersion <contact@emersion.fr>2017-12-25 16:23:17 +0100
commitcdc21cdcff7e8d9beb1f8d0ea00b71b141c17466 (patch)
tree7555e4b3dd95bdb71bc4da10cdc8db5b5d69900c /xwayland
parent6dffaa7bb79b88253f5fb9c6f106b19554a68b23 (diff)
Properly free selection sources
Diffstat (limited to 'xwayland')
-rw-r--r--xwayland/selection.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/xwayland/selection.c b/xwayland/selection.c
index 8bcad509..be803599 100644
--- a/xwayland/selection.c
+++ b/xwayland/selection.c
@@ -507,7 +507,9 @@ static void data_source_send(struct wlr_data_source *base,
}
static void data_source_cancel(struct wlr_data_source *base) {
- // No-op
+ struct x11_data_source *source = (struct x11_data_source *)base;
+ wl_array_release(&source->mime_types_atoms);
+ free(source);
}
struct x11_primary_selection_source {
@@ -528,8 +530,11 @@ static void primary_selection_source_send(
}
static void primary_selection_source_cancel(
- struct wlr_primary_selection_source *source) {
- // No-op
+ struct wlr_primary_selection_source *base) {
+ struct x11_primary_selection_source *source =
+ (struct x11_primary_selection_source *)base;
+ wl_array_release(&source->mime_types_atoms);
+ free(source);
}
static bool source_get_targets(struct wlr_xwm_selection *selection,
@@ -631,6 +636,8 @@ static void xwm_selection_get_targets(struct wlr_xwm_selection *selection) {
if (ok) {
wlr_seat_set_selection(xwm->seat, &source->base,
wl_display_next_serial(xwm->xwayland->wl_display));
+ } else {
+ source->base.cancel(&source->base);
}
} else if (selection == &xwm->primary_selection) {
struct x11_primary_selection_source *source =
@@ -650,6 +657,8 @@ static void xwm_selection_get_targets(struct wlr_xwm_selection *selection) {
if (ok) {
wlr_seat_set_primary_selection(xwm->seat, &source->base,
wl_display_next_serial(xwm->xwayland->wl_display));
+ } else {
+ source->base.cancel(&source->base);
}
}
}