/// <summary> /// Emitted on the drag source when the drag finishes /// </summary> void HandleDragEnd(object o, DragEndArgs args) { if (RepositionMode) { Owner.CursorTracker.CursorPositionChanged -= HandleCursorPositionChanged; } if (!drag_canceled && drag_item != null) { if (!Owner.DockHovered) { // Remove from dock AbstractDockItemProvider provider = ProviderForItem(drag_item); bool poof = false; if (provider != null && provider.ItemCanBeRemoved(drag_item)) { // provider can manually remove provider.RemoveItem(drag_item); if (FileApplicationProvider.WindowManager != null) { FileApplicationProvider.WindowManager.UpdateTransientItems(); } poof = true; } if (poof) { PoofWindow window = new PoofWindow(128); window.SetCenterPosition(Owner.CursorTracker.Cursor); window.Run(); } } else { // Dropped somewhere on dock AbstractDockItem item = Owner.HoveredItem; if (item != null && item.CanAcceptDrop(drag_item)) { item.AcceptDrop(drag_item); } } } InternalDragActive = false; drag_item = null; Keyboard.Ungrab(Gtk.Global.CurrentEventTime); Owner.AnimatedDraw(); Owner.CursorTracker.CancelHighResolution(this); }
public bool ItemAcceptsDrop() { if (drag_data == null) { return(false); } AbstractDockItem item = Owner.HoveredItem; if (!drag_is_desktop_file && item != null && item.CanAcceptDrop(drag_data)) { return(true); } return(false); }