diff --git a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp index 07ed48d1e85..413240810bf 100644 --- a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp @@ -146,7 +146,6 @@ void DragTool::beginWithPoint(const QPointF &beginPoint) m_moveManipulator.setItem(m_movingItem.data()); m_moveManipulator.begin(beginPoint); - } void DragTool::createQmlItemNode(const ItemLibraryEntry &itemLibraryEntry, QmlItemNode parentNode, QPointF scenePos) @@ -163,8 +162,6 @@ void DragTool::createQmlItemNode(const ItemLibraryEntry &itemLibraryEntry, QmlIt QList nodeList; nodeList.append(m_dragNode); m_selectionIndicator.setItems(scene()->itemsForQmlItemNodes(nodeList)); - - QmlDesignerItemLibraryDragAndDrop::CustomDragAndDrop::hide(); } void DragTool::createQmlItemNodeFromImage(const QString &imageName, QmlItemNode parentNode, QPointF scenePos) @@ -182,8 +179,6 @@ void DragTool::createQmlItemNodeFromImage(const QString &imageName, QmlItemNode QList nodeList; nodeList.append(m_dragNode); m_selectionIndicator.setItems(scene()->itemsForQmlItemNodes(nodeList)); - - QmlDesignerItemLibraryDragAndDrop::CustomDragAndDrop::hide(); } FormEditorItem* DragTool::calculateContainer(const QPointF &point, FormEditorItem * currentItem) @@ -195,7 +190,7 @@ FormEditorItem* DragTool::calculateContainer(const QPointF &point, FormEditorIte return formEditorItem; } - if (scene()->rootFormEditorItem() && scene()->rootFormEditorItem()->boundingRect().adjusted(-100, -100, 100, 100).contains(point)) + if (scene()->rootFormEditorItem()) return scene()->rootFormEditorItem(); return 0; } @@ -215,6 +210,7 @@ void DragTool::instancesCompleted(const QList &itemList) foreach (FormEditorItem* item, itemList) if (item->qmlItemNode() == m_dragNode) clearMoveDelay(); + QmlDesignerItemLibraryDragAndDrop::CustomDragAndDrop::hide(); } void DragTool::clearMoveDelay() @@ -314,6 +310,8 @@ void DragTool::dragMoveEvent(QGraphicsSceneDragDropEvent * event) { if (m_blockMove) return; + if (QmlDesignerItemLibraryDragAndDrop::CustomDragAndDrop::isAnimated()) + return; if (event->mimeData()->hasFormat("application/vnd.bauhaus.itemlibraryinfo") || event->mimeData()->hasFormat("application/vnd.bauhaus.libraryresource")) { event->accept(); @@ -334,7 +332,7 @@ void DragTool::dragMoveEvent(QGraphicsSceneDragDropEvent * event) if (m_dragNode.modelNode().isValid()) return; - FormEditorItem *parentItem = calculateContainer(event->scenePos()); + FormEditorItem *parentItem = calculateContainer(scenePos); if (!parentItem) return; QmlItemNode parentNode; diff --git a/src/plugins/qmldesigner/components/itemlibrary/customdraganddrop.cpp b/src/plugins/qmldesigner/components/itemlibrary/customdraganddrop.cpp index 95e07e36458..81fdf623df3 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/customdraganddrop.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/customdraganddrop.cpp @@ -160,7 +160,7 @@ void CustomDragAndDropIcon::enter() { connect(&m_timeLine, SIGNAL( frameChanged (int)), this, SLOT(animateDrag(int))); m_timeLine.setFrameRange(0, 10); - m_timeLine.setDuration(250); + m_timeLine.setDuration(150); m_timeLine.setLoopCount(1); m_timeLine.setCurveShape(QTimeLine::EaseInCurve); m_timeLine.start(); @@ -310,6 +310,13 @@ void CustomDragAndDrop::drop(QWidget *target, QPoint globalPos) } } +bool CustomDragAndDrop::isAnimated() +{ + if (instance()->m_widget) + return instance()->m_widget->isAnimated(); + return false; +} + } //namespace QmlDesignerItemLibraryDragAndDrop } //namespave QmlDesigner diff --git a/src/plugins/qmldesigner/components/itemlibrary/customdraganddrop.h b/src/plugins/qmldesigner/components/itemlibrary/customdraganddrop.h index 30360d39198..56ef2646b5d 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/customdraganddrop.h +++ b/src/plugins/qmldesigner/components/itemlibrary/customdraganddrop.h @@ -60,6 +60,9 @@ public: void startDrag(); void grabMouseSafely(); + bool isAnimated() const + { return m_timeLine.state() == QTimeLine::Running; } + public slots: void animateDrag(int frame); @@ -87,6 +90,7 @@ public: static void leave(QWidget *target, QPoint globalPos); static void move(QWidget *target, QPoint globalPos); static void drop(QWidget *target, QPoint globalPos); + static bool isAnimated(); static void hide() { instance()->m_isVisible = false; } static void show()