diff --git a/src/video/wayland/SDL_waylandevents.c b/src/video/wayland/SDL_waylandevents.c index d3d087665f..ea2c8a2296 100644 --- a/src/video/wayland/SDL_waylandevents.c +++ b/src/video/wayland/SDL_waylandevents.c @@ -1873,11 +1873,15 @@ static void data_device_handle_enter(void *data, struct wl_data_device *wl_data_ } /* find the current window */ - if (surface && SDL_WAYLAND_own_surface(surface)) { - SDL_WindowData *window = (SDL_WindowData *)wl_surface_get_user_data(surface); - if (window) { - data_device->dnd_window = window->sdlwindow; - } + if (surface) { + if (SDL_WAYLAND_own_surface(surface)) { + SDL_WindowData *window = (SDL_WindowData *)wl_surface_get_user_data(surface); + if (window) { + data_device->dnd_window = window->sdlwindow; + } + } else { + data_device->dnd_window = NULL; + } } } } @@ -1897,7 +1901,7 @@ static void data_device_handle_motion(void *data, struct wl_data_device *wl_data { SDL_WaylandDataDevice *data_device = data; - if (data_device->drag_offer != NULL) { + if (data_device->drag_offer != NULL && data_device->dnd_window) { /* TODO: SDL Support more mime types */ size_t length; void *buffer = Wayland_data_offer_receive(data_device->drag_offer, @@ -2046,7 +2050,7 @@ static void data_device_handle_drop(void *data, struct wl_data_device *wl_data_d { SDL_WaylandDataDevice *data_device = data; - if (data_device->drag_offer != NULL) { + if (data_device->drag_offer != NULL && data_device->dnd_window) { /* TODO: SDL Support more mime types */ size_t length; SDL_bool drop_handled = SDL_FALSE; @@ -2102,9 +2106,10 @@ static void data_device_handle_drop(void *data, struct wl_data_device *wl_data_d WL_DATA_OFFER_FINISH_SINCE_VERSION) { wl_data_offer_finish(data_device->drag_offer->offer); } - Wayland_data_offer_destroy(data_device->drag_offer); - data_device->drag_offer = NULL; } + + Wayland_data_offer_destroy(data_device->drag_offer); + data_device->drag_offer = NULL; } static void data_device_handle_selection(void *data, struct wl_data_device *wl_data_device,