internal bool DoDragMotion(Gdk.DragContext context, int x, int y, uint time) { DragDropInfo.LastDragPosition = new Point(x, y); DragDropAction ac; if ((enabledEvents & WidgetEvent.DragOverCheck) == 0) { if ((enabledEvents & WidgetEvent.DragOver) != 0) { ac = DragDropAction.Default; } else { ac = ConvertDragAction(DragDropInfo.DestDragAction); } } else { // This is a workaround to what seems to be a mac gtk bug. // Suggested action is set to all when no control key is pressed var cact = ConvertDragAction(context.Actions); if (cact == DragDropAction.All) { cact = DragDropAction.Move; } var target = Gtk.Drag.DestFindTarget(EventsRootWidget, context, null); var targetTypes = Util.GetDragTypes(new Gdk.Atom[] { target }); DragOverCheckEventArgs da = new DragOverCheckEventArgs(new Point(x, y), targetTypes, cact); ApplicationContext.InvokeUserCode(delegate { EventSink.OnDragOverCheck(da); }); ac = da.AllowedAction; if ((enabledEvents & WidgetEvent.DragOver) == 0 && ac == DragDropAction.Default) { ac = DragDropAction.None; } } if (ac == DragDropAction.None) { OnSetDragStatus(context, x, y, time, (Gdk.DragAction) 0); return(true); } else if (ac == DragDropAction.Default) { // Undefined, we need more data QueryDragData(context, time, true); return(true); } else { // Gtk.Drag.Highlight (Widget); OnSetDragStatus(context, x, y, time, ConvertDragAction(ac)); return(true); } }
public virtual void DragOverCheck(DragOverCheckEventArgs args) { if (!args.DataTypes.Intersect(this.TargetTypes).Any()) { args.AllowedAction = DragDropAction.None; } else { args.AllowedAction = DragDropAction.All; } }
static NSDragOperation DraggingUpdated(IntPtr sender, IntPtr sel, IntPtr dragInfo) { IViewObject <T> ob = Runtime.GetNSObject(sender) as IViewObject <T>; if (ob == null) { return(NSDragOperation.None); } var backend = (ViewBackend <T, S>)WidgetRegistry.GetBackend(ob.Frontend); NSDraggingInfo di = new NSDraggingInfo(dragInfo); var types = di.DraggingPasteboard.Types.Select(t => ToXwtDragType(t)).ToArray(); var pos = new Point(di.DraggingLocation.X, di.DraggingLocation.Y); if ((backend.currentEvents & WidgetEvent.DragOverCheck) != 0) { var args = new DragOverCheckEventArgs(pos, types, ConvertAction(di.DraggingSourceOperationMask)); Toolkit.Invoke(delegate { backend.eventSink.OnDragOverCheck(args); }); if (args.AllowedAction == DragDropAction.None) { return(NSDragOperation.None); } if (args.AllowedAction != DragDropAction.Default) { return(ConvertAction(args.AllowedAction)); } } if ((backend.currentEvents & WidgetEvent.DragOver) != 0) { TransferDataStore store = new TransferDataStore(); FillDataStore(store, di.DraggingPasteboard, ob.View.RegisteredDragTypes()); var args = new DragOverEventArgs(pos, store, ConvertAction(di.DraggingSourceOperationMask)); Toolkit.Invoke(delegate { backend.eventSink.OnDragOver(args); }); if (args.AllowedAction == DragDropAction.None) { return(NSDragOperation.None); } if (args.AllowedAction != DragDropAction.Default) { return(ConvertAction(args.AllowedAction)); } } return(di.DraggingSourceOperationMask); }
void HandleWidgetDragMotion(object o, Gtk.DragMotionArgs args) { lastDragPosition = new Point(args.X, args.Y); DragDropAction ac; if ((enabledEvents & WidgetEvent.DragOverCheck) == 0) { if ((enabledEvents & WidgetEvent.DragOver) != 0) { ac = DragDropAction.Default; } else { ac = ConvertDragAction(destDragAction); } } else { DragOverCheckEventArgs da = new DragOverCheckEventArgs(new Point(args.X, args.Y), Util.GetDragTypes(args.Context.Targets), ConvertDragAction(args.Context.Actions)); Toolkit.Invoke(delegate { EventSink.OnDragOverCheck(da); }); ac = da.AllowedAction; if ((enabledEvents & WidgetEvent.DragOver) == 0 && ac == DragDropAction.Default) { ac = DragDropAction.None; } } if (ac == DragDropAction.None) { args.RetVal = true; Gdk.Drag.Status(args.Context, (Gdk.DragAction) 0, args.Time); } else if (ac == DragDropAction.Default) { // Undefined, we need more data args.RetVal = true; QueryDragData(args.Context, args.Time, true); } else { // Gtk.Drag.Highlight (Widget); args.RetVal = true; Gdk.Drag.Status(args.Context, ConvertDragAction(ac), args.Time); } }
void CheckDrop(object sender, System.Windows.DragEventArgs e) { var types = e.Data.GetFormats().Select(DataConverter.ToXwtTransferType).ToArray(); var pos = e.GetPosition(Widget).ToXwtPoint(); var proposedAction = DetectDragAction(e.KeyStates); e.Handled = true; // Prevent default handlers from being used. if ((enabledEvents & WidgetEvent.DragOverCheck) > 0) { var checkArgs = new DragOverCheckEventArgs(pos, types, proposedAction); Context.InvokeUserCode(delegate { eventSink.OnDragOverCheck(checkArgs); }); if (checkArgs.AllowedAction == DragDropAction.None) { e.Effects = currentDragEffect = DragDropEffects.None; return; } if (checkArgs.AllowedAction != DragDropAction.Default) { e.Effects = currentDragEffect = checkArgs.AllowedAction.ToWpfDropEffect(); return; } } if ((enabledEvents & WidgetEvent.DragOver) > 0) { var store = new TransferDataStore(); FillDataStore(store, e.Data); //, DragDropInfo.TargetTypes); var args = new DragOverEventArgs(pos, store, proposedAction); OnDragOver(sender, args); if (args.AllowedAction == DragDropAction.None) { e.Effects = currentDragEffect = DragDropEffects.None; return; } if (args.AllowedAction != DragDropAction.Default) { e.Effects = currentDragEffect = args.AllowedAction.ToWpfDropEffect(); return; } } e.Effects = currentDragEffect = proposedAction.ToWpfDropEffect(); }
void WidgetDragOverHandler(object sender, System.Windows.DragEventArgs e) { var types = e.Data.GetFormats ().Select (t => t.ToXwtTransferType ()).ToArray (); var pos = e.GetPosition (Widget).ToXwtPoint (); var proposedAction = DetectDragAction (e.KeyStates); e.Handled = true; // Prevent default handlers from being used. if (Adorner != null) { var w = GetParentWindow (); var v = (UIElement)w.Content; if (w != AdornedWindow) { AdornedLayer.Remove (Adorner); AdornedWindow.AllowDrop = false; AdornedWindow.DragOver -= AdornedWindowOnDragOver; AdornedWindow = w; AdornedWindow.AllowDrop = true; AdornedWindow.DragOver += AdornedWindowOnDragOver; AdornedLayer = AdornerLayer.GetAdornerLayer (v); AdornedLayer.Add (Adorner); } Adorner.Offset = e.GetPosition (v); } if ((enabledEvents & WidgetEvent.DragOverCheck) > 0) { var checkArgs = new DragOverCheckEventArgs (pos, types, proposedAction); Context.InvokeUserCode (delegate { eventSink.OnDragOverCheck (checkArgs); }); if (checkArgs.AllowedAction == DragDropAction.None) { e.Effects = currentDragEffect = DragDropEffects.None; return; } if (checkArgs.AllowedAction != DragDropAction.Default) { e.Effects = currentDragEffect = checkArgs.AllowedAction.ToWpfDropEffect (); return; } } if ((enabledEvents & WidgetEvent.DragOver) > 0) { var store = new TransferDataStore (); FillDataStore (store, e.Data, DragDropInfo.TargetTypes); var args = new DragOverEventArgs (pos, store, proposedAction); OnDragOver (sender, args); if (args.AllowedAction == DragDropAction.None) { e.Effects = currentDragEffect = DragDropEffects.None; return; } if (args.AllowedAction != DragDropAction.Default) { e.Effects = currentDragEffect = args.AllowedAction.ToWpfDropEffect (); return; } } e.Effects = currentDragEffect = proposedAction.ToWpfDropEffect (); }
void CheckDrop(object sender, System.Windows.DragEventArgs e) { var types = e.Data.GetFormats ().Select (t => t.ToXwtTransferType ()).ToArray (); var pos = e.GetPosition (Widget).ToXwtPoint (); var proposedAction = DetectDragAction (e.KeyStates); e.Handled = true; // Prevent default handlers from being used. if ((enabledEvents & WidgetEvent.DragOverCheck) > 0) { var checkArgs = new DragOverCheckEventArgs (pos, types, proposedAction); Context.InvokeUserCode (delegate { eventSink.OnDragOverCheck (checkArgs); }); if (checkArgs.AllowedAction == DragDropAction.None) { e.Effects = currentDragEffect = DragDropEffects.None; return; } if (checkArgs.AllowedAction != DragDropAction.Default) { e.Effects = currentDragEffect = checkArgs.AllowedAction.ToWpfDropEffect (); return; } } if ((enabledEvents & WidgetEvent.DragOver) > 0) { var store = new TransferDataStore (); FillDataStore (store, e.Data, DragDropInfo.TargetTypes); var args = new DragOverEventArgs (pos, store, proposedAction); OnDragOver (sender, args); if (args.AllowedAction == DragDropAction.None) { e.Effects = currentDragEffect = DragDropEffects.None; return; } if (args.AllowedAction != DragDropAction.Default) { e.Effects = currentDragEffect = args.AllowedAction.ToWpfDropEffect (); return; } } e.Effects = currentDragEffect = proposedAction.ToWpfDropEffect (); }
void WidgetDragOverHandler(object sender, System.Windows.DragEventArgs e) { var types = e.Data.GetFormats().Select(t => t.ToXwtTransferType()).ToArray(); var pos = e.GetPosition(Widget).ToXwtPoint(); var proposedAction = DetectDragAction(e.KeyStates); e.Handled = true; // Prevent default handlers from being used. if (Adorner != null) { var w = GetParentWindow(); var v = (UIElement)w.Content; if (w != AdornedWindow) { AdornedLayer.Remove(Adorner); AdornedWindow.AllowDrop = false; AdornedWindow.DragOver -= AdornedWindowOnDragOver; AdornedWindow = w; AdornedWindow.AllowDrop = true; AdornedWindow.DragOver += AdornedWindowOnDragOver; AdornedLayer = AdornerLayer.GetAdornerLayer(v); AdornedLayer.Add(Adorner); } Adorner.Offset = e.GetPosition(v); } if ((enabledEvents & WidgetEvent.DragOverCheck) > 0) { var checkArgs = new DragOverCheckEventArgs(pos, types, proposedAction); Context.InvokeUserCode(delegate { eventSink.OnDragOverCheck(checkArgs); }); if (checkArgs.AllowedAction == DragDropAction.None) { e.Effects = currentDragEffect = DragDropEffects.None; return; } if (checkArgs.AllowedAction != DragDropAction.Default) { e.Effects = currentDragEffect = checkArgs.AllowedAction.ToWpfDropEffect(); return; } } if ((enabledEvents & WidgetEvent.DragOver) > 0) { var store = new TransferDataStore(); FillDataStore(store, e.Data, DragDropInfo.TargetTypes); var args = new DragOverEventArgs(pos, store, proposedAction); OnDragOver(sender, args); if (args.AllowedAction == DragDropAction.None) { e.Effects = currentDragEffect = DragDropEffects.None; return; } if (args.AllowedAction != DragDropAction.Default) { e.Effects = currentDragEffect = args.AllowedAction.ToWpfDropEffect(); return; } } e.Effects = currentDragEffect = proposedAction.ToWpfDropEffect(); }
protected virtual void OnDragOverCheck(NSDraggingInfo di, DragOverCheckEventArgs args) { Toolkit.Invoke(delegate { eventSink.OnDragOverCheck(args); }); }