Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/xwt.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLluis Sanchez <lluis@xamarin.com>2013-10-24 19:31:19 +0400
committerLluis Sanchez <lluis@xamarin.com>2013-10-24 19:31:54 +0400
commit782df29bb99e115ca4623883e3c9e9db7523df0b (patch)
tree2ac82ce020d5f444eda6b19fba4dff4a87245fe3 /Xwt.WPF
parentbdb1e9aab9e08cdef6d13673948debcf4716e590 (diff)
[WPF] Fix drag&drop issue
Do an additional DragOver check before dropping, since the Drop event may come without a DragOver. Also properly initialize the initial drag area.
Diffstat (limited to 'Xwt.WPF')
-rw-r--r--Xwt.WPF/Xwt.WPFBackend/WidgetBackend.cs24
1 files changed, 17 insertions, 7 deletions
diff --git a/Xwt.WPF/Xwt.WPFBackend/WidgetBackend.cs b/Xwt.WPF/Xwt.WPFBackend/WidgetBackend.cs
index 49e2c805..47874d7a 100644
--- a/Xwt.WPF/Xwt.WPFBackend/WidgetBackend.cs
+++ b/Xwt.WPF/Xwt.WPFBackend/WidgetBackend.cs
@@ -56,7 +56,7 @@ namespace Xwt.WPFBackend
{
// Source
public bool AutodetectDrag;
- public Rect DragRect;
+ public Rect DragRect = Rect.Empty;
// Target
public TransferDataType [] TargetTypes = new TransferDataType [0];
}
@@ -821,12 +821,6 @@ namespace Xwt.WPFBackend
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;
@@ -847,6 +841,16 @@ namespace Xwt.WPFBackend
Adorner.Offset = e.GetPosition (v);
}
+ CheckDrop (sender, e);
+ }
+
+ 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);
@@ -884,6 +888,12 @@ namespace Xwt.WPFBackend
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 ();