/// <summary>Node has been dropped. Send to presenter.</summary> /// <param name="sender">Event sender.</param> /// <param name="e">Event data.</param> private void OnDragDrop(object sender, DragDropArgs e) { try { Gdk.Atom target = Drag.DestFindTarget(treeview1, e.Context, null); // Get the drop location TreePath path; TreeIter dest; bool success = false; if (treeview1.GetPathAtPos(e.X, e.Y, out path) && treemodel.GetIter(out dest, path) && target != Gdk.Atom.Intern("GDK_NONE", false)) { AllowDropArgs args = new AllowDropArgs(); args.NodePath = GetFullPath(path); Drag.GetData(treeview1, e.Context, target, e.Time); if (dragDropData != null) { DropArgs dropArgs = new DropArgs(); dropArgs.NodePath = GetFullPath(path); dropArgs.DragObject = dragDropData; if (e.Context.GetAction() == Gdk.DragAction.Copy) { dropArgs.Copied = true; } else if (e.Context.GetAction() == Gdk.DragAction.Move) { dropArgs.Moved = true; } else { dropArgs.Linked = true; } Droped(this, dropArgs); success = true; } } Gtk.Drag.Finish(e.Context, success, e.Context.GetAction() == Gdk.DragAction.Move, e.Time); e.RetVal = success; } catch (Exception err) { ShowError(err); } }
/// <summary>Node has been dropped. Send to presenter.</summary> /// <param name="sender">Event sender.</param> /// <param name="e">Event data.</param> private void OnDragDataGet(object sender, DragDataGetArgs e) { try { IntPtr data = (IntPtr)dragSourceHandle; Int64 ptrInt = data.ToInt64(); Gdk.Atom target = Drag.DestFindTarget(sender as Widget, e.Context, null); if (target != Gdk.Atom.Intern("GDK_NONE", false)) { e.SelectionData.Set(target, 8, BitConverter.GetBytes(ptrInt)); } } catch (Exception err) { ShowError(err); } }