X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/ced9de5b82046d6eb6f6b828fa9bbc874bbea857..96ba990d865b2dfb966961061ba5154dcd3187b4:/src/kitemviews/kitemlistcontroller.cpp diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index c6239df94..9335ab816 100644 --- a/src/kitemviews/kitemlistcontroller.cpp +++ b/src/kitemviews/kitemlistcontroller.cpp @@ -375,19 +375,6 @@ bool KItemListController::keyPressEvent(QKeyEvent* event) break; } - case Qt::Key_Space: - if (m_selectionBehavior == MultiSelection) { - if (controlPressed) { - m_selectionManager->endAnchoredSelection(); - m_selectionManager->setSelected(index, 1, KItemListSelectionManager::Toggle); - m_selectionManager->beginAnchoredSelection(index); - } else { - const int current = m_selectionManager->currentItem(); - m_selectionManager->setSelected(current); - } - } - break; - case Qt::Key_Menu: { // Emit the signal itemContextMenuRequested() in case if at least one // item is selected. Otherwise the signal viewContextMenuRequested() will be emitted. @@ -418,6 +405,25 @@ bool KItemListController::keyPressEvent(QKeyEvent* event) m_keyboardManager->cancelSearch(); break; + case Qt::Key_Space: + if (m_selectionBehavior == MultiSelection) { + if (controlPressed) { + // Toggle the selection state of the current item. + m_selectionManager->endAnchoredSelection(); + m_selectionManager->setSelected(index, 1, KItemListSelectionManager::Toggle); + m_selectionManager->beginAnchoredSelection(index); + break; + } else { + // Select the current item if it is not selected yet. + const int current = m_selectionManager->currentItem(); + if (!m_selectionManager->isSelected(current)) { + m_selectionManager->setSelected(current); + break; + } + } + } + // Fall through to the default case and add the Space to the current search string. + default: m_keyboardManager->addKeys(event->text()); // Make sure unconsumed events get propagated up the chain. #302329 @@ -474,9 +480,13 @@ void KItemListController::slotChangeCurrentItem(const QString& text, bool search } if (index >= 0) { m_selectionManager->setCurrentItem(index); - m_selectionManager->clearSelection(); - m_selectionManager->setSelected(index, 1); - m_selectionManager->beginAnchoredSelection(index); + + if (m_selectionBehavior != NoSelection) { + m_selectionManager->clearSelection(); + m_selectionManager->setSelected(index, 1); + m_selectionManager->beginAnchoredSelection(index); + } + m_view->scrollToItem(index); } } @@ -838,27 +848,39 @@ bool KItemListController::dragMoveEvent(QGraphicsSceneDragDropEvent* event, cons oldHoveredWidget->setHovered(false); emit itemUnhovered(oldHoveredWidget->index()); } + } - if (newHoveredWidget) { - bool droppingBetweenItems = false; - if (m_model->sortRole().isEmpty()) { - // The model supports inserting items between other items. - droppingBetweenItems = (m_view->showDropIndicator(pos) >= 0); - } + if (newHoveredWidget) { + bool droppingBetweenItems = false; + if (m_model->sortRole().isEmpty()) { + // The model supports inserting items between other items. + droppingBetweenItems = (m_view->showDropIndicator(pos) >= 0); + } - const int index = newHoveredWidget->index(); - if (!droppingBetweenItems && m_model->supportsDropping(index)) { + const int index = newHoveredWidget->index(); + if (!droppingBetweenItems) { + if (m_model->supportsDropping(index)) { // Something has been dragged on an item. m_view->hideDropIndicator(); - newHoveredWidget->setHovered(true); - emit itemHovered(index); + if (!newHoveredWidget->isHovered()) { + newHoveredWidget->setHovered(true); + emit itemHovered(index); + } - if (m_autoActivationTimer->interval() >= 0) { + if (!m_autoActivationTimer->isActive() && m_autoActivationTimer->interval() >= 0) { m_autoActivationTimer->setProperty("index", index); m_autoActivationTimer->start(); } } + } else { + m_autoActivationTimer->stop(); + if (newHoveredWidget && newHoveredWidget->isHovered()) { + newHoveredWidget->setHovered(false); + emit itemUnhovered(index); + } } + } else { + m_view->hideDropIndicator(); } return false;