X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/c85ca114553c198af79eedacdb6b40ac4cab20e0..2e942237c9:/src/kitemviews/kitemlistcontroller.cpp diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index 3731895d0..130936488 100644 --- a/src/kitemviews/kitemlistcontroller.cpp +++ b/src/kitemviews/kitemlistcontroller.cpp @@ -39,6 +39,7 @@ #include #include #include +#include KItemListController::KItemListController(KItemModelBase* model, KItemListView* view, QObject* parent) : QObject(parent), @@ -48,13 +49,13 @@ KItemListController::KItemListController(KItemModelBase* model, KItemListView* v m_selectionBehavior(NoSelection), m_autoActivationBehavior(ActivationAndExpansion), m_mouseDoubleClickAction(ActivateItemOnly), - m_model(0), - m_view(0), + m_model(nullptr), + m_view(nullptr), m_selectionManager(new KItemListSelectionManager(this)), m_keyboardManager(new KItemListKeyboardSearchManager(this)), m_pressedIndex(-1), m_pressedMousePos(), - m_autoActivationTimer(0), + m_autoActivationTimer(nullptr), m_oldSelection(), m_keyboardAnchorIndex(-1), m_keyboardAnchorPos(0) @@ -75,10 +76,10 @@ KItemListController::KItemListController(KItemModelBase* model, KItemListView* v KItemListController::~KItemListController() { - setView(0); + setView(nullptr); Q_ASSERT(!m_view); - setModel(0); + setModel(nullptr); Q_ASSERT(!m_model); } @@ -178,6 +179,20 @@ KItemListController::MouseDoubleClickAction KItemListController::mouseDoubleClic return m_mouseDoubleClickAction; } +int KItemListController::indexCloseToMousePressedPosition() const +{ + QHashIterator it(m_view->m_visibleGroups); + while (it.hasNext()) { + it.next(); + KItemListGroupHeader *groupHeader = it.value(); + const QPointF mappedToGroup = groupHeader->mapFromItem(nullptr, m_pressedMousePos); + if (groupHeader->contains(mappedToGroup)) { + return it.key()->index(); + } + } + return -1; +} + void KItemListController::setAutoActivationDelay(int delay) { m_autoActivationTimer->setInterval(delay); @@ -583,6 +598,10 @@ bool KItemListController::mousePressEvent(QGraphicsSceneMouseEvent* event, const // -> remember that the user pressed an item which had been selected already and // clear the selection in mouseReleaseEvent(), unless the items are dragged. m_clearSelectionIfItemsAreNotDragged = true; + + if (m_selectionManager->selectedItems().count() == 1 && m_view->isAboveText(m_pressedIndex, m_pressedMousePos)) { + emit selectedItemTextPressed(m_pressedIndex); + } } if (!shiftPressed) { @@ -838,6 +857,7 @@ bool KItemListController::dragLeaveEvent(QGraphicsSceneDragDropEvent* event, con Q_UNUSED(event); Q_UNUSED(transform); + m_autoActivationTimer->stop(); m_view->setAutoScroll(false); m_view->hideDropIndicator(); @@ -855,8 +875,8 @@ bool KItemListController::dragMoveEvent(QGraphicsSceneDragDropEvent* event, cons return false; } - event->acceptProposedAction(); + QUrl hoveredDir = m_model->directory(); KItemListWidget* oldHoveredWidget = hoveredWidget(); const QPointF pos = transform.map(event->pos()); @@ -879,6 +899,11 @@ bool KItemListController::dragMoveEvent(QGraphicsSceneDragDropEvent* event, cons } 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. @@ -904,6 +929,8 @@ bool KItemListController::dragMoveEvent(QGraphicsSceneDragDropEvent* event, cons m_view->hideDropIndicator(); } + event->setAccepted(!DragAndDropHelper::urlListMatchesUrl(event->mimeData()->urls(), hoveredDir)); + return false; } @@ -1203,7 +1230,7 @@ KItemListWidget* KItemListController::hoveredWidget() const } } - return 0; + return nullptr; } KItemListWidget* KItemListController::widgetForPos(const QPointF& pos) const @@ -1220,7 +1247,7 @@ KItemListWidget* KItemListController::widgetForPos(const QPointF& pos) const } } - return 0; + return nullptr; } void KItemListController::updateKeyboardAnchor()