Properly free selection sources

This commit is contained in:
emersion 2017-12-25 16:23:17 +01:00
parent 6dffaa7bb7
commit cdc21cdcff
No known key found for this signature in database
GPG Key ID: 0FDE7BE0E88F5E48
1 changed files with 12 additions and 3 deletions

View File

@ -507,7 +507,9 @@ static void data_source_send(struct wlr_data_source *base,
} }
static void data_source_cancel(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 { struct x11_primary_selection_source {
@ -528,8 +530,11 @@ static void primary_selection_source_send(
} }
static void primary_selection_source_cancel( static void primary_selection_source_cancel(
struct wlr_primary_selection_source *source) { struct wlr_primary_selection_source *base) {
// No-op 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, 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) { if (ok) {
wlr_seat_set_selection(xwm->seat, &source->base, wlr_seat_set_selection(xwm->seat, &source->base,
wl_display_next_serial(xwm->xwayland->wl_display)); wl_display_next_serial(xwm->xwayland->wl_display));
} else {
source->base.cancel(&source->base);
} }
} else if (selection == &xwm->primary_selection) { } else if (selection == &xwm->primary_selection) {
struct x11_primary_selection_source *source = struct x11_primary_selection_source *source =
@ -650,6 +657,8 @@ static void xwm_selection_get_targets(struct wlr_xwm_selection *selection) {
if (ok) { 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)); wl_display_next_serial(xwm->xwayland->wl_display));
} else {
source->base.cancel(&source->base);
} }
} }
} }