diff options
| author | Méven Car <[email protected]> | 2023-02-23 11:06:12 +0100 |
|---|---|---|
| committer | Felix Ernst <[email protected]> | 2023-03-16 14:27:52 +0000 |
| commit | 9967a5cdee3ca7027871a6b2b640e94435d6b7af (patch) | |
| tree | bad3b840bb60a934f618625a14bddf800a635fc6 /src/kitemviews/kitemlistcontroller.cpp | |
| parent | 43c2963b52c7b1aabcb57421e7d371a9463bf553 (diff) | |
Prevent dragging on non-writable directories
KFileItemModel::supportsDroppin now returns the rootItem when -1 is passed and checks for write access.
Diffstat (limited to 'src/kitemviews/kitemlistcontroller.cpp')
| -rw-r--r-- | src/kitemviews/kitemlistcontroller.cpp | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index 54a856fb8..0c9f19f55 100644 --- a/src/kitemviews/kitemlistcontroller.cpp +++ b/src/kitemviews/kitemlistcontroller.cpp @@ -534,7 +534,7 @@ void KItemListController::slotAutoActivationTimeout() * * See Bug 293200 and 305783 */ - if (m_model->supportsDropping(index) && m_view->isUnderMouse()) { + if (m_view->isUnderMouse()) { if (m_view->supportsItemExpanding() && m_model->isExpandable(index)) { const bool expanded = m_model->isExpanded(index); m_model->setExpanded(index, !expanded); @@ -738,6 +738,7 @@ bool KItemListController::dragMoveEvent(QGraphicsSceneDragDropEvent *event, cons const QPointF pos = transform.map(event->pos()); KItemListWidget *newHoveredWidget = widgetForDropPos(pos); + int index = -1; if (oldHoveredWidget != newHoveredWidget) { m_autoActivationTimer->stop(); @@ -755,25 +756,23 @@ bool KItemListController::dragMoveEvent(QGraphicsSceneDragDropEvent *event, cons droppingBetweenItems = (m_view->showDropIndicator(pos) >= 0); } - const int index = newHoveredWidget->index(); + 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); - Q_EMIT itemHovered(index); - } + // Something has been dragged on an item. + m_view->hideDropIndicator(); + if (!newHoveredWidget->isHovered()) { + newHoveredWidget->setHovered(true); + Q_EMIT itemHovered(index); + } - if (!m_autoActivationTimer->isActive() && m_autoActivationTimer->interval() >= 0) { - m_autoActivationTimer->setProperty("index", index); - m_autoActivationTimer->start(); - } + if (!m_autoActivationTimer->isActive() && m_autoActivationTimer->interval() >= 0) { + m_autoActivationTimer->setProperty("index", index); + m_autoActivationTimer->start(); } } else { m_autoActivationTimer->stop(); @@ -790,8 +789,13 @@ bool KItemListController::dragMoveEvent(QGraphicsSceneDragDropEvent *event, cons event->setDropAction(Qt::IgnoreAction); event->ignore(); } else { - event->setDropAction(event->proposedAction()); - event->accept(); + if (m_model->supportsDropping(index)) { + event->setDropAction(event->proposedAction()); + event->accept(); + } else { + event->setDropAction(Qt::IgnoreAction); + event->ignore(); + } } return false; } |
