diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/kitemviews/kitemlistcontroller.cpp | 42 | ||||
| -rw-r--r-- | src/kitemviews/private/kitemlistkeyboardsearchmanager.cpp | 6 | ||||
| -rw-r--r-- | src/tests/kitemlistcontrollertest.cpp | 11 |
3 files changed, 41 insertions, 18 deletions
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index 4629b29f1..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); } } diff --git a/src/kitemviews/private/kitemlistkeyboardsearchmanager.cpp b/src/kitemviews/private/kitemlistkeyboardsearchmanager.cpp index 38154864b..3bd1b01f3 100644 --- a/src/kitemviews/private/kitemlistkeyboardsearchmanager.cpp +++ b/src/kitemviews/private/kitemlistkeyboardsearchmanager.cpp @@ -46,6 +46,12 @@ void KItemListKeyboardSearchManager::addKeys(const QString& keys) const bool newSearch = m_searchedString.isEmpty(); + // Do not start a new search if the user pressed Space. Only add + // it to the search string if a search is in progress already. + if (newSearch && keys == QLatin1String(" ")) { + return; + } + if (!keys.isEmpty()) { m_searchedString.append(keys); diff --git a/src/tests/kitemlistcontrollertest.cpp b/src/tests/kitemlistcontrollertest.cpp index d8f838873..60e93e539 100644 --- a/src/tests/kitemlistcontrollertest.cpp +++ b/src/tests/kitemlistcontrollertest.cpp @@ -98,7 +98,7 @@ void KItemListControllerTest::initTestCase() << "b1" << "c1" << "c2" << "c3" << "c4" << "c5" << "d1" << "d2" << "d3" << "d4" - << "e1" << "e2" << "e3" << "e4" << "e5" << "e6" << "e7"; + << "e" << "e 2" << "e 3" << "e 4" << "e 5" << "e 6" << "e 7"; m_testDir->createFiles(files); m_model->loadDirectory(m_testDir->url()); @@ -282,7 +282,14 @@ void KItemListControllerTest::testKeyboardNavigation_data() << qMakePair(KeyPress(Qt::Key_Home), ViewState(0, QSet<int>() << 0)) << qMakePair(KeyPress(Qt::Key_Space, Qt::ControlModifier), ViewState(0, QSet<int>())) << qMakePair(KeyPress(Qt::Key_Enter), ViewState(0, QSet<int>(), true)) - << qMakePair(KeyPress(Qt::Key_Space, Qt::ControlModifier), ViewState(0, QSet<int>() << 0)); + << qMakePair(KeyPress(Qt::Key_Space, Qt::ControlModifier), ViewState(0, QSet<int>() << 0)) + << qMakePair(KeyPress(Qt::Key_Space, Qt::ControlModifier), ViewState(0, QSet<int>())) + << qMakePair(KeyPress(Qt::Key_Space), ViewState(0, QSet<int>() << 0)) + << qMakePair(KeyPress(Qt::Key_E), ViewState(13, QSet<int>() << 13)) + << qMakePair(KeyPress(Qt::Key_Space), ViewState(14, QSet<int>() << 14)) + << qMakePair(KeyPress(Qt::Key_3), ViewState(15, QSet<int>() << 15)) + << qMakePair(KeyPress(Qt::Key_Home), ViewState(0, QSet<int>() << 0)) + << qMakePair(KeyPress(Qt::Key_Escape), ViewState(0, QSet<int>())); // Next, we test combinations of key presses which only work for a // particular number of columns and either enabled or disabled grouping. |
