┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews
diff options
context:
space:
mode:
Diffstat (limited to 'src/kitemviews')
-rw-r--r--src/kitemviews/kfileitemmodel.h2
-rw-r--r--src/kitemviews/kitemlistcontroller.cpp11
-rw-r--r--src/kitemviews/kitemmodelbase.cpp14
-rw-r--r--src/kitemviews/kitemmodelbase.h14
4 files changed, 39 insertions, 2 deletions
diff --git a/src/kitemviews/kfileitemmodel.h b/src/kitemviews/kfileitemmodel.h
index 5dbeb32b2..0ca748d7a 100644
--- a/src/kitemviews/kfileitemmodel.h
+++ b/src/kitemviews/kfileitemmodel.h
@@ -73,7 +73,7 @@ public:
* the root-parent of all items.
* @see rootItem()
*/
- QUrl directory() const;
+ QUrl directory() const Q_DECL_OVERRIDE;
/**
* Cancels the loading of a directory which has been started by either
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;
}
diff --git a/src/kitemviews/kitemmodelbase.cpp b/src/kitemviews/kitemmodelbase.cpp
index ee7e81084..d73468336 100644
--- a/src/kitemviews/kitemmodelbase.cpp
+++ b/src/kitemviews/kitemmodelbase.cpp
@@ -164,3 +164,17 @@ void KItemModelBase::onSortOrderChanged(Qt::SortOrder current, Qt::SortOrder pre
Q_UNUSED(previous);
}
+QUrl KItemModelBase::url(int index) const
+{
+ return data(index).value("url").toUrl();
+}
+
+bool KItemModelBase::isDir(int index) const
+{
+ return data(index).value("isDir").toBool();
+}
+
+QUrl KItemModelBase::directory() const
+{
+ return QUrl();
+} \ No newline at end of file
diff --git a/src/kitemviews/kitemmodelbase.h b/src/kitemviews/kitemmodelbase.h
index 45ad1f61a..55078dc24 100644
--- a/src/kitemviews/kitemmodelbase.h
+++ b/src/kitemviews/kitemmodelbase.h
@@ -182,6 +182,20 @@ public:
*/
QString blacklistItemDropEventMimeType() const;
+ /**
+ * @return URL of the item at the specified index
+ */
+ virtual QUrl url(int index) const;
+
+ /**
+ * @return True, if item at specified index is a directory
+ */
+ virtual bool isDir(int index) const;
+
+ /**
+ * @return Parent directory of the items that are shown
+ */
+ virtual QUrl directory() const;
signals:
/**
* Is emitted if one or more items have been inserted. Each item-range consists