Browse Source

Fix potential crash issue when dragging a widget on top of itself, also don't send drop event when dropping widget on top of self

Josh Engebretson 10 years ago
parent
commit
46ca1f71c9
2 changed files with 5 additions and 4 deletions
  1. 3 2
      Source/Atomic/UI/UIDragDrop.cpp
  2. 2 2
      Source/Atomic/UI/UIDragDrop.h

+ 3 - 2
Source/Atomic/UI/UIDragDrop.cpp

@@ -86,7 +86,8 @@ UIDragDrop::~UIDragDrop()
 void UIDragDrop::DragEnd()
 {
     SharedPtr<UIDragObject> dragObject = dragObject_;
-    WeakPtr<UIWidget> currentTargetWidget = currentTargetWidget_;
+    SharedPtr<UIWidget> currentTargetWidget(currentTargetWidget_);
+    SharedPtr<UIWidget> dragSourceWidget(dragSourceWidget_);
 
     // clean up
     currentTargetWidget_ = 0;
@@ -94,7 +95,7 @@ void UIDragDrop::DragEnd()
     dragSourceWidget_ = 0;
     dragLayout_->SetVisibility(UI_WIDGET_VISIBILITY_GONE);
 
-    if (currentTargetWidget.Null())
+    if (currentTargetWidget.Null() || dragSourceWidget == currentTargetWidget)
     {
         return;
     }

+ 2 - 2
Source/Atomic/UI/UIDragDrop.h

@@ -64,8 +64,8 @@ private:
     SharedPtr<UIImageWidget> dragImage_;
     SharedPtr<UITextField> dragText_;
 
-    WeakPtr<UIWidget> currentTargetWidget_;
-    WeakPtr<UIWidget> dragSourceWidget_;
+    SharedPtr<UIWidget> currentTargetWidget_;
+    SharedPtr<UIWidget> dragSourceWidget_;
 
     SharedPtr<UIDragObject> dragObject_;