X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/131c889b0c050592809035242db6200482e0edde..863c1be871d7dbd16800cf7400284783d52352d5:/src/kitemviews/kitemlistcontroller.cpp diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index 997e6623b..5a396de61 100644 --- a/src/kitemviews/kitemlistcontroller.cpp +++ b/src/kitemviews/kitemlistcontroller.cpp @@ -243,6 +243,20 @@ bool KItemListController::keyPressEvent(QKeyEvent *event) const bool horizontalScrolling = m_view->scrollOrientation() == Qt::Horizontal; + if (m_view->layoutDirection() == Qt::RightToLeft) { + // swap left and right arrow keys + switch (key) { + case Qt::Key_Left: + key = Qt::Key_Right; + break; + case Qt::Key_Right: + key = Qt::Key_Left; + break; + default: + break; + } + } + // Handle the expanding/collapsing of items // expand / collapse all selected directories if (m_view->supportsItemExpanding() && m_model->isExpandable(index) && (key == Qt::Key_Right || key == Qt::Key_Left)) { @@ -270,7 +284,9 @@ bool KItemListController::keyPressEvent(QKeyEvent *event) } const bool controlPressed = event->modifiers() & Qt::ControlModifier; - const bool shiftOrControlPressed = shiftPressed || controlPressed; + if (m_selectionMode && !controlPressed && !shiftPressed && (key == Qt::Key_Enter || key == Qt::Key_Return)) { + key = Qt::Key_Space; // In selection mode one moves around with arrow keys and toggles selection with Enter. + } const bool navigationPressed = key == Qt::Key_Home || key == Qt::Key_End || key == Qt::Key_PageUp || key == Qt::Key_PageDown || key == Qt::Key_Up || key == Qt::Key_Down || key == Qt::Key_Left || key == Qt::Key_Right; @@ -297,34 +313,6 @@ bool KItemListController::keyPressEvent(QKeyEvent *event) } } - if (m_view->layoutDirection() == Qt::RightToLeft) { - if (horizontalScrolling) { - // swap up and down arrow keys - switch (key) { - case Qt::Key_Up: - key = Qt::Key_Down; - break; - case Qt::Key_Down: - key = Qt::Key_Up; - break; - default: - break; - } - } else if (!m_view->supportsItemExpanding()) { - // swap left and right arrow keys - switch (key) { - case Qt::Key_Left: - key = Qt::Key_Right; - break; - case Qt::Key_Right: - key = Qt::Key_Left; - break; - default: - break; - } - } - } - const bool selectSingleItem = m_selectionBehavior != NoSelection && itemCount == 1 && navigationPressed; if (selectSingleItem) { @@ -467,7 +455,7 @@ bool KItemListController::keyPressEvent(QKeyEvent *event) case Qt::Key_Space: if (m_selectionBehavior == MultiSelection) { - if (controlPressed) { + if (controlPressed || m_selectionMode) { // Toggle the selection state of the current item. m_selectionManager->endAnchoredSelection(); m_selectionManager->setSelected(index, 1, KItemListSelectionManager::Toggle); @@ -503,13 +491,13 @@ bool KItemListController::keyPressEvent(QKeyEvent *event) break; case MultiSelection: - if (controlPressed) { + if (controlPressed || (m_selectionMode && !shiftPressed)) { m_selectionManager->endAnchoredSelection(); } m_selectionManager->setCurrentItem(index); - if (!shiftOrControlPressed) { + if (!shiftPressed && !controlPressed && !m_selectionMode) { m_selectionManager->clearSelection(); m_selectionManager->setSelected(index, 1); } @@ -540,10 +528,16 @@ void KItemListController::slotChangeCurrentItem(const QString &text, bool search index = m_model->indexForKeyboardSearch(text, 0); } if (index >= 0) { + if (m_selectionMode) { + m_selectionManager->endAnchoredSelection(); + } + m_selectionManager->setCurrentItem(index); if (m_selectionBehavior != NoSelection) { - m_selectionManager->replaceSelection(index); + if (!m_selectionMode) { // Don't clear the selection in selection mode. + m_selectionManager->replaceSelection(index); + } m_selectionManager->beginAnchoredSelection(index); } @@ -700,6 +694,15 @@ bool KItemListController::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event, const QPointF pos = transform.map(event->pos()); const std::optional index = m_view->itemAt(pos); + if (event->button() & (Qt::ForwardButton | Qt::BackButton)) { + // "Forward" and "Back" are reserved for quickly navigating through the + // history. Double-clicking those buttons should be interpreted as two + // separate button presses. We arrive here for the second click, which + // we now react to just as we would for a singular click + Q_EMIT mouseButtonPressed(index.value_or(-1), event->button()); + return false; + } + if (!index.has_value()) { Q_EMIT doubleClickViewBackground(event->button()); return false;