Browse Source

Only widgets should receive drag end events

Josh Engebretson 9 years ago
parent
commit
e4acb05652
2 changed files with 4 additions and 3 deletions
  1. 1 3
      Source/Atomic/UI/UIDragDrop.cpp
  2. 3 0
      Source/Atomic/UI/UIListView.cpp

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

@@ -87,12 +87,10 @@ void UIDragDrop::DragEnd()
 {
 {
     SharedPtr<UIDragObject> dragObject = dragObject_;
     SharedPtr<UIDragObject> dragObject = dragObject_;
     SharedPtr<UIWidget> currentTargetWidget(currentTargetWidget_);
     SharedPtr<UIWidget> currentTargetWidget(currentTargetWidget_);
-    SharedPtr<UIWidget> dragSourceWidget(dragSourceWidget_);
 
 
     // clean up
     // clean up
     currentTargetWidget_ = 0;
     currentTargetWidget_ = 0;
     dragObject_ = 0;
     dragObject_ = 0;
-    dragSourceWidget_ = 0;
     dragLayout_->SetVisibility(UI_WIDGET_VISIBILITY_GONE);
     dragLayout_->SetVisibility(UI_WIDGET_VISIBILITY_GONE);
 
 
     if (currentTargetWidget.Null())
     if (currentTargetWidget.Null())
@@ -212,7 +210,7 @@ void UIDragDrop::HandleMouseMove(StringHash eventType, VariantMap& eventData)
     // see if we have a widget
     // see if we have a widget
     TBWidget* tbw = TBWidget::hovered_widget;
     TBWidget* tbw = TBWidget::hovered_widget;
 
 
-    while(tbw && !tbw->GetDelegate())
+    while(tbw && (!tbw->GetDelegate() || tbw->IsOfType<TBLayout>()))
     {
     {
         tbw = tbw->GetParent();
         tbw = tbw->GetParent();
     }
     }

+ 3 - 0
Source/Atomic/UI/UIListView.cpp

@@ -41,6 +41,9 @@ class ListViewItemWidget;
 
 
 class ListViewItemWidget : public TBLayout
 class ListViewItemWidget : public TBLayout
 {
 {
+    // For safe typecasting
+    TBOBJECT_SUBCLASS(ListViewItemWidget, TBLayout)
+
 public:
 public:
     ListViewItemWidget(ListViewItem *item, ListViewItemSource *source, TBSelectItemViewer *sourceviewer, int index);
     ListViewItemWidget(ListViewItem *item, ListViewItemSource *source, TBSelectItemViewer *sourceviewer, int index);
     virtual bool OnEvent(const TBWidgetEvent &ev);
     virtual bool OnEvent(const TBWidgetEvent &ev);