diff --git a/src/video/wayland/SDL_waylanddatamanager.c b/src/video/wayland/SDL_waylanddatamanager.c index c8d3ec757..3fbdd72fa 100644 --- a/src/video/wayland/SDL_waylanddatamanager.c +++ b/src/video/wayland/SDL_waylanddatamanager.c @@ -322,6 +322,10 @@ void Wayland_data_source_destroy(SDL_WaylandDataSource *source) { if (source != NULL) { + SDL_WaylandDataDevice *data_device = (SDL_WaylandDataDevice *) source->data_device; + if (data_device && (data_device->selection_source == source)) { + data_device->selection_source = NULL; + } wl_data_source_destroy(source->source); mime_data_list_free(&source->mimes); SDL_free(source); @@ -449,6 +453,7 @@ Wayland_data_device_set_selection(SDL_WaylandDataDevice *data_device, Wayland_data_source_destroy(data_device->selection_source); } data_device->selection_source = source; + source->data_device = data_device; } } diff --git a/src/video/wayland/SDL_waylanddatamanager.h b/src/video/wayland/SDL_waylanddatamanager.h index 4e85dfa31..0030a3915 100644 --- a/src/video/wayland/SDL_waylanddatamanager.h +++ b/src/video/wayland/SDL_waylanddatamanager.h @@ -40,6 +40,7 @@ typedef struct { typedef struct { struct wl_data_source *source; struct wl_list mimes; + void *data_device; } SDL_WaylandDataSource; typedef struct {