+ if (!m_model || !m_view) {
+ return false;
+ }
+
+
+ QUrl hoveredDir = m_model->directory();
+ KItemListWidget* oldHoveredWidget = hoveredWidget();
+
+ const QPointF pos = transform.map(event->pos());
+ KItemListWidget* newHoveredWidget = widgetForPos(pos);
+
+ if (oldHoveredWidget != newHoveredWidget) {
+ m_autoActivationTimer->stop();
+
+ if (oldHoveredWidget) {
+ oldHoveredWidget->setHovered(false);
+ emit itemUnhovered(oldHoveredWidget->index());
+ }
+ }
+
+ if (newHoveredWidget) {
+ bool droppingBetweenItems = false;
+ if (m_model->sortRole().isEmpty()) {
+ // The model supports inserting items between other items.
+ droppingBetweenItems = (m_view->showDropIndicator(pos) >= 0);
+ }
+
+ const int index = newHoveredWidget->index();
+
+ if (m_model->isDir(index)) {
+ hoveredDir = m_model->url(index);
+ }
+
+ if (!droppingBetweenItems) {
+ if (m_model->supportsDropping(index)) {
+ // Something has been dragged on an item.
+ m_view->hideDropIndicator();
+ if (!newHoveredWidget->isHovered()) {
+ newHoveredWidget->setHovered(true);
+ emit itemHovered(index);
+ }
+
+ if (!m_autoActivationTimer->isActive() && m_autoActivationTimer->interval() >= 0) {
+ m_autoActivationTimer->setProperty("index", index);
+ m_autoActivationTimer->start();
+ }
+ }
+ } else {
+ m_autoActivationTimer->stop();
+ if (newHoveredWidget && newHoveredWidget->isHovered()) {
+ newHoveredWidget->setHovered(false);
+ emit itemUnhovered(index);
+ }
+ }
+ } else {
+ m_view->hideDropIndicator();
+ }
+
+ event->setAccepted(!DragAndDropHelper::urlListMatchesUrl(event->mimeData()->urls(), hoveredDir));
+