diff options
author | emersion <contact@emersion.fr> | 2017-12-25 16:23:17 +0100 |
---|---|---|
committer | emersion <contact@emersion.fr> | 2017-12-25 16:23:17 +0100 |
commit | cdc21cdcff7e8d9beb1f8d0ea00b71b141c17466 (patch) | |
tree | 7555e4b3dd95bdb71bc4da10cdc8db5b5d69900c /xwayland | |
parent | 6dffaa7bb79b88253f5fb9c6f106b19554a68b23 (diff) |
Properly free selection sources
Diffstat (limited to 'xwayland')
-rw-r--r-- | xwayland/selection.c | 15 |
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); } } } |