Wayland / Drag and Drop: find the current window

main
Sylvain 2023-01-03 16:35:51 +01:00 committed by Sam Lantinga
parent 9c1a9ecb4b
commit 86658f2ca7
2 changed files with 11 additions and 2 deletions

View File

@ -75,6 +75,7 @@ typedef struct
uint32_t drag_serial; uint32_t drag_serial;
SDL_WaylandDataOffer *drag_offer; SDL_WaylandDataOffer *drag_offer;
SDL_WaylandDataOffer *selection_offer; SDL_WaylandDataOffer *selection_offer;
SDL_Window *dnd_window;
/* Clipboard and Primary Selection */ /* Clipboard and Primary Selection */
uint32_t selection_serial; uint32_t selection_serial;

View File

@ -1654,6 +1654,14 @@ static void data_device_handle_enter(void *data, struct wl_data_device *wl_data_
wl_data_offer_set_actions(data_device->drag_offer->offer, wl_data_offer_set_actions(data_device->drag_offer->offer,
dnd_action, dnd_action); dnd_action, dnd_action);
} }
/* 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;
}
}
} }
} }
@ -1809,11 +1817,11 @@ static void data_device_handle_drop(void *data, struct wl_data_device *wl_data_d
while (token != NULL) { while (token != NULL) {
char *fn = Wayland_URIToLocal(token); char *fn = Wayland_URIToLocal(token);
if (fn) { if (fn) {
SDL_SendDropFile(NULL, fn); /* FIXME: Window? */ SDL_SendDropFile(data_device->dnd_window, fn);
} }
token = SDL_strtokr(NULL, "\r\n", &saveptr); token = SDL_strtokr(NULL, "\r\n", &saveptr);
} }
SDL_SendDropComplete(NULL); /* FIXME: Window? */ SDL_SendDropComplete(data_device->dnd_window);
SDL_free(buffer); SDL_free(buffer);
} }
} }