]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kitemlistcontroller.cpp
Implement dropping of items into the Places Panel
[dolphin.git] / src / kitemviews / kitemlistcontroller.cpp
index b8d719d3bb82c81debb60e01a6b6de3798cb4510..1b9c53ccffe9260e479af171a3fa745b02da3d09 100644 (file)
@@ -758,6 +758,7 @@ bool KItemListController::dragLeaveEvent(QGraphicsSceneDragDropEvent* event, con
     Q_UNUSED(transform);
 
     m_view->setAutoScroll(false);
+    m_view->hideDropIndicator();
 
     KItemListWidget* widget = hoveredWidget();
     if (widget) {
@@ -793,6 +794,11 @@ bool KItemListController::dragMoveEvent(QGraphicsSceneDragDropEvent* event, cons
             const int index = newHoveredWidget->index();
             if (m_model->supportsDropping(index)) {
                 newHoveredWidget->setHovered(true);
+            } else if (m_model->sortRole().isEmpty()) {
+                // The model supports inserting of items on
+                // the given index. Assure that a drop-indicator
+                // is shown by the view.
+                m_view->showDropIndicator(pos);
             }
             emit itemHovered(index);
 
@@ -817,8 +823,15 @@ bool KItemListController::dropEvent(QGraphicsSceneDragDropEvent* event, const QT
     m_view->setAutoScroll(false);
 
     const QPointF pos = transform.map(event->pos());
-    const int index = m_view->itemAt(pos);
-    emit itemDropEvent(index, event);
+    if (m_model->sortRole().isEmpty()) {
+        // The model supports inserting of items on
+        // a given index.
+        const int dropIndex = m_view->showDropIndicator(pos);
+        m_view->hideDropIndicator();
+        emit itemDropEvent(dropIndex, event);
+    } else {
+        emit itemDropEvent(m_view->itemAt(pos), event);
+    }
 
     return true;
 }