diff options
-rw-r--r-- | src/nautilus-window-slot-dnd.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/nautilus-window-slot-dnd.c b/src/nautilus-window-slot-dnd.c index ec0134e46..772a8bb88 100644 --- a/src/nautilus-window-slot-dnd.c +++ b/src/nautilus-window-slot-dnd.c @@ -36,6 +36,7 @@ typedef struct gboolean have_data; gboolean have_valid_data; + gboolean is_hover; gboolean drop_occurred; unsigned int info; @@ -170,6 +171,8 @@ slot_proxy_drag_motion (GtkWidget *widget, drag_info = user_data; + drag_info->is_hover = TRUE; + action = 0; valid_text_drag = FALSE; valid_xds_drag = FALSE; @@ -335,6 +338,7 @@ slot_proxy_drag_leave (GtkWidget *widget, drag_info = user_data; + drag_info->is_hover = FALSE; gtk_drag_unhighlight (widget); drag_info_clear (drag_info); } @@ -474,6 +478,13 @@ slot_proxy_drag_data_received (GtkWidget *widget, g_assert (!drag_info->have_data); drag_info->waiting_for_data = FALSE; + if (!drag_info->is_hover && !drag_info->drop_occurred) + { + /* Ignore data arriving after ::drag-leave, except if followed by + * ::drag-drop. */ + return; + } + if (gtk_selection_data_get_length (data) < 0) { /* Data retrieval failed. */ |