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;
                }
            }
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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;
                }
            }
        }
Example #5
0
        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;
            }
        }