diff options
| author | Emirald Mateli <[email protected]> | 2017-11-11 15:05:15 +0100 |
|---|---|---|
| committer | Elvis Angelaccio <[email protected]> | 2017-11-11 15:06:13 +0100 |
| commit | 99e80c1c7e6e77aa26ccbca4fbb0430b35974544 (patch) | |
| tree | be2f13eb7b687cdead75488e4324e5f821214871 /src/kitemviews/kitemlistcontroller.cpp | |
| parent | fa04e37569a316b3aaab3ca9fc42d50501347fd8 (diff) | |
Prevent folders from drag and dropping onto themselves in dolphin main view
Summary:
This patch aims to improve user experience by not allowing the user to drag and drop a folder into itself.
The current behavior shows a red message at the top which can then be closed by the user, instead of relying on that, this patch disables the option of dropping onto self and uses the "Invalid drop target cursor" to highlight the behavior.
BUG: 307747
Since spectacle is unable to screenshot the cursor overlay, find attached a photo of the screen.
{F3787651}
Test Plan:
1. Drag a folder.
2. Drop it onto itself.
Reviewers: #dolphin, elvisangelaccio, ngraham, rkflx, dfaure
Reviewed By: #dolphin, elvisangelaccio, rkflx, dfaure
Subscribers: rkflx, ngraham, elvisangelaccio, dfaure, anthonyfieroni, #konqueror
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D6281
Diffstat (limited to 'src/kitemviews/kitemlistcontroller.cpp')
| -rw-r--r-- | src/kitemviews/kitemlistcontroller.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index 753d7915d..008b6c4c6 100644 --- a/src/kitemviews/kitemlistcontroller.cpp +++ b/src/kitemviews/kitemlistcontroller.cpp @@ -39,6 +39,7 @@ #include <QMimeData> #include <QTimer> #include <QAccessible> +#include <views/draganddrophelper.h> KItemListController::KItemListController(KItemModelBase* model, KItemListView* view, QObject* parent) : QObject(parent), @@ -842,6 +843,7 @@ bool KItemListController::dragLeaveEvent(QGraphicsSceneDragDropEvent* event, con Q_UNUSED(event); Q_UNUSED(transform); + m_autoActivationTimer->stop(); m_view->setAutoScroll(false); m_view->hideDropIndicator(); @@ -859,8 +861,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()); @@ -883,6 +885,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. @@ -908,6 +915,8 @@ bool KItemListController::dragMoveEvent(QGraphicsSceneDragDropEvent* event, cons m_view->hideDropIndicator(); } + event->setAccepted(!DragAndDropHelper::urlListMatchesUrl(event->mimeData()->urls(), hoveredDir)); + return false; } |
