Browse Source

Merge pull request #1148 from AtomicGameEngine/JME-ATOMIC-1145

Only widgets should receive drag end events
JoshEngebretson 9 years ago
parent
commit
db85b4a92e
2 changed files with 6 additions and 2 deletions
  1. 3 2
      Source/Atomic/UI/UIDragDrop.cpp
  2. 3 0
      Source/Atomic/UI/UIListView.cpp

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

@@ -89,11 +89,12 @@ void UIDragDrop::DragEnd()
     SharedPtr<UIWidget> currentTargetWidget(currentTargetWidget_);
     SharedPtr<UIWidget> currentTargetWidget(currentTargetWidget_);
     SharedPtr<UIWidget> dragSourceWidget(dragSourceWidget_);
     SharedPtr<UIWidget> dragSourceWidget(dragSourceWidget_);
 
 
+
     // clean up
     // clean up
     currentTargetWidget_ = 0;
     currentTargetWidget_ = 0;
     dragObject_ = 0;
     dragObject_ = 0;
     dragSourceWidget_ = 0;
     dragSourceWidget_ = 0;
-    dragLayout_->SetVisibility(UI_WIDGET_VISIBILITY_GONE);
+    dragLayout_->SetVisibility(UI_WIDGET_VISIBILITY_GONE);    
 
 
     if (currentTargetWidget.Null())
     if (currentTargetWidget.Null())
     {
     {
@@ -212,7 +213,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);