diff options
Diffstat (limited to 'src/kitemviews/kitemlistcontroller.cpp')
| -rw-r--r-- | src/kitemviews/kitemlistcontroller.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index d6d276fa4..72227a1e1 100644 --- a/src/kitemviews/kitemlistcontroller.cpp +++ b/src/kitemviews/kitemlistcontroller.cpp @@ -724,7 +724,7 @@ bool KItemListController::dragMoveEvent(QGraphicsSceneDragDropEvent* event, cons KItemListWidget* oldHoveredWidget = hoveredWidget(); const QPointF pos = transform.map(event->pos()); - KItemListWidget* newHoveredWidget = widgetForPos(pos); + KItemListWidget* newHoveredWidget = widgetForDropPos(pos); if (oldHoveredWidget != newHoveredWidget) { m_autoActivationTimer->stop(); @@ -806,7 +806,12 @@ bool KItemListController::dropEvent(QGraphicsSceneDragDropEvent* event, const QT Q_EMIT aboveItemDropEvent(dropAboveIndex, event); } else if (!event->mimeData()->hasFormat(m_model->blacklistItemDropEventMimeType())) { // Something has been dropped on an item or on an empty part of the view. - Q_EMIT itemDropEvent(m_view->itemAt(pos).value_or(-1), event); + const KItemListWidget *receivingWidget = widgetForDropPos(pos); + if (receivingWidget) { + Q_EMIT itemDropEvent(receivingWidget->index(), event); + } else { + Q_EMIT itemDropEvent(-1, event); + } } QAccessibleEvent accessibilityEvent(view(), QAccessible::DragDropEnd); @@ -1364,6 +1369,21 @@ KItemListWidget* KItemListController::widgetForPos(const QPointF& pos) const return nullptr; } +KItemListWidget* KItemListController::widgetForDropPos(const QPointF& pos) const +{ + Q_ASSERT(m_view); + + const auto widgets = m_view->visibleItemListWidgets(); + for (KItemListWidget* widget : widgets) { + const QPointF mappedPos = widget->mapFromItem(m_view, pos); + if (widget->contains(mappedPos)) { + return widget; + } + } + + return nullptr; +} + void KItemListController::updateKeyboardAnchor() { const bool validAnchor = m_keyboardAnchorIndex >= 0 && |
