void WidgetDropHandler(object sender, System.Windows.DragEventArgs e) { // Do a DragOverCheck before proceeding to the drop. This is required since in some cases the DragOver // handler may not be called. CheckDrop(sender, e); if (e.Effects == DragDropEffects.None) { return; } WidgetDragLeaveHandler(sender, e); var types = e.Data.GetFormats().Select(t => t.ToXwtTransferType()).ToArray(); var pos = e.GetPosition(Widget).ToXwtPoint(); var actualEffect = currentDragEffect; e.Handled = true; // Prevent default handlers from being used. e.Effects = DragDropEffects.None; if ((enabledEvents & WidgetEvent.DragDropCheck) > 0) { var checkArgs = new DragCheckEventArgs(pos, types, actualEffect.ToXwtDropAction()); bool res = Context.InvokeUserCode(delegate { eventSink.OnDragDropCheck(checkArgs); }); if (checkArgs.Result == DragDropResult.Canceled || !res) { e.Effects = DragDropEffects.None; return; } } if ((enabledEvents & WidgetEvent.DragDrop) > 0) { var store = new TransferDataStore(); FillDataStore(store, e.Data, DragDropInfo.TargetTypes); var args = new DragEventArgs(pos, store, actualEffect.ToXwtDropAction()); Context.InvokeUserCode(delegate { eventSink.OnDragDrop(args); }); if (args.Success) { e.Effects = actualEffect; } } }
internal bool DoDragDrop(Gdk.DragContext context, int x, int y, uint time) { DragDropInfo.LastDragPosition = new Point(x, y); var cda = ConvertDragAction(context.Action); DragDropResult res; if ((enabledEvents & WidgetEvent.DragDropCheck) == 0) { if ((enabledEvents & WidgetEvent.DragDrop) != 0) { res = DragDropResult.None; } else { res = DragDropResult.Canceled; } } else { DragCheckEventArgs da = new DragCheckEventArgs(new Point(x, y), Util.GetDragTypes(context.Targets), cda); ApplicationContext.InvokeUserCode(delegate { EventSink.OnDragDropCheck(da); }); res = da.Result; if ((enabledEvents & WidgetEvent.DragDrop) == 0 && res == DragDropResult.None) { res = DragDropResult.Canceled; } } if (res == DragDropResult.Canceled) { Gtk.Drag.Finish(context, false, false, time); return(true); } else if (res == DragDropResult.Success) { Gtk.Drag.Finish(context, true, cda == DragDropAction.Move, time); return(true); } else { // Undefined, we need more data QueryDragData(context, time, false); return(true); } }
void HandleWidgetDragDrop(object o, Gtk.DragDropArgs args) { lastDragPosition = new Point(args.X, args.Y); var cda = ConvertDragAction(args.Context.Action); DragDropResult res; if ((enabledEvents & WidgetEvent.DragDropCheck) == 0) { if ((enabledEvents & WidgetEvent.DragDrop) != 0) { res = DragDropResult.None; } else { res = DragDropResult.Canceled; } } else { DragCheckEventArgs da = new DragCheckEventArgs(new Point(args.X, args.Y), Util.GetDragTypes(args.Context.Targets), cda); Toolkit.Invoke(delegate { EventSink.OnDragDropCheck(da); }); res = da.Result; if ((enabledEvents & WidgetEvent.DragDrop) == 0 && res == DragDropResult.None) { res = DragDropResult.Canceled; } } if (res == DragDropResult.Canceled) { args.RetVal = true; Gtk.Drag.Finish(args.Context, false, false, args.Time); } else if (res == DragDropResult.Success) { args.RetVal = true; Gtk.Drag.Finish(args.Context, true, cda == DragDropAction.Move, args.Time); } else { // Undefined, we need more data args.RetVal = true; QueryDragData(args.Context, args.Time, false); } }
void WidgetDropHandler(object sender, System.Windows.DragEventArgs e) { WidgetDragLeaveHandler(sender, e); var types = e.Data.GetFormats().Select(t => t.ToXwtTransferType()).ToArray(); var pos = e.GetPosition(Widget).ToXwtPoint(); var actualEffect = currentDragEffect; e.Handled = true; // Prevent default handlers from being used. e.Effects = DragDropEffects.None; if ((enabledEvents & WidgetEvent.DragDropCheck) > 0) { var checkArgs = new DragCheckEventArgs(pos, types, actualEffect.ToXwtDropAction()); bool res = Toolkit.Invoke(delegate { eventSink.OnDragDropCheck(checkArgs); }); if (checkArgs.Result == DragDropResult.Canceled || !res) { e.Effects = DragDropEffects.None; return; } } if ((enabledEvents & WidgetEvent.DragDrop) > 0) { var store = new TransferDataStore(); FillDataStore(store, e.Data, DragDropInfo.TargetTypes); var args = new DragEventArgs(pos, store, actualEffect.ToXwtDropAction()); Toolkit.Invoke(delegate { eventSink.OnDragDrop(args); }); if (args.Success) { e.Effects = actualEffect; } } }
void WidgetDropHandler(object sender, System.Windows.DragEventArgs e) { WidgetDragLeaveHandler (sender, e); var types = e.Data.GetFormats ().Select (t => t.ToXwtTransferType ()).ToArray (); var pos = e.GetPosition (Widget).ToXwtPoint (); var actualEffect = currentDragEffect; e.Handled = true; // Prevent default handlers from being used. e.Effects = DragDropEffects.None; if ((enabledEvents & WidgetEvent.DragDropCheck) > 0) { var checkArgs = new DragCheckEventArgs (pos, types, actualEffect.ToXwtDropAction ()); bool res = Context.InvokeUserCode (delegate { eventSink.OnDragDropCheck (checkArgs); }); if (checkArgs.Result == DragDropResult.Canceled || !res) { e.Effects = DragDropEffects.None; return; } } if ((enabledEvents & WidgetEvent.DragDrop) > 0) { var store = new TransferDataStore (); FillDataStore (store, e.Data, DragDropInfo.TargetTypes); var args = new DragEventArgs (pos, store, actualEffect.ToXwtDropAction ()); Context.InvokeUserCode (delegate { eventSink.OnDragDrop (args); }); if (args.Success) e.Effects = actualEffect; } }