mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-16 15:14:17 +00:00
wayland: Prepare against NULL selection owners on data_source requests
Currently, due to the lack of progress information in the Wayland DnD protocol, we assume a DnD operation is finished after the first data_source.send is finished (It's either that or leaving stuck grabs). This however breaks previous assumptions that dest widgets can request the data multiple times, even in response to GtkWidget::drag-motion. This leaves us with a NULL owner for the DnD atom when we aren't finished receiving wl_data_source events yet, causing a crash. This commit fixes the crash, the behavior left is still far from desirable though...
This commit is contained in:
parent
109572286c
commit
50178ce014
@ -705,7 +705,7 @@ data_source_target (void *data,
|
||||
{
|
||||
GdkWaylandSelection *wayland_selection = data;
|
||||
GdkDragContext *context = NULL;
|
||||
GdkWindow *window;
|
||||
GdkWindow *window = NULL;
|
||||
|
||||
g_debug (G_STRLOC ": %s source = %p, mime_type = %s",
|
||||
G_STRFUNC, source, mime_type);
|
||||
@ -732,7 +732,8 @@ data_source_target (void *data,
|
||||
}
|
||||
else if (source == wayland_selection->clipboard_source)
|
||||
window = wayland_selection->clipboard_owner;
|
||||
else
|
||||
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
gdk_wayland_selection_request_target (wayland_selection, window,
|
||||
@ -771,6 +772,9 @@ data_source_send (void *data,
|
||||
return;
|
||||
}
|
||||
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
if (!gdk_wayland_selection_request_target (wayland_selection, window,
|
||||
gdk_atom_intern (mime_type, FALSE),
|
||||
fd))
|
||||
|
Loading…
Reference in New Issue
Block a user