"</para>"));
toggleSelectionModeAction->setIcon(QIcon::fromTheme(QStringLiteral("quickwizard")));
toggleSelectionModeAction->setCheckable(true);
- actionCollection()->setDefaultShortcut(toggleSelectionModeAction, Qt::Key_Space );
connect(toggleSelectionModeAction, &QAction::triggered, this, &DolphinMainWindow::toggleSelectionMode);
// A special version of the toggleSelectionModeAction for the toolbar that also contains a menu
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;
- }
+ } else if (m_keyboardManager->addKeyBeginsNewSearch()) { // File names shouldn't start with a space,
+ // so we can use this press as a keyboard shortcut instead.
+ Q_EMIT selectionModeChangeRequested(!m_selectionMode);
+ break;
}
}
Q_FALLTHROUGH(); // fall through to the default case and add the Space to the current search string.
m_keyboardInputTime.start();
}
+bool KItemListKeyboardSearchManager::addKeyBeginsNewSearch() const
+{
+ return m_keyboardInputTime.hasExpired(m_timeout) || m_searchedString.isEmpty();
+}
+
void KItemListKeyboardSearchManager::setTimeout(qint64 milliseconds)
{
m_timeout = milliseconds;
* Add \a keys to the text buffer used for searching.
*/
void addKeys(const QString& keys);
+ /**
+ * @returns true if the next call to addKeys() will trigger a new search.
+ * Returns false if the next added key char will be added to the search string that was used previously.
+ */
+ bool addKeyBeginsNewSearch() const;
/**
* Sets the delay after which the search is cancelled to \a milliseconds.
qint64 timeout() const;
void cancelSearch();
- bool shouldClearSearchIfInputTimeReached();
public Q_SLOTS:
// (see https://doc.qt.io/archives/qq/qq13-apis.html#thebooleanparametertrap)
void changeCurrentItem(const QString& string, bool searchFromNextItem);
+private:
+ bool shouldClearSearchIfInputTimeReached();
+
private:
QString m_searchedString;
bool m_isSearchRestarted;
+ /** Measures the time since the last key press. */
QElapsedTimer m_keyboardInputTime;
+ /** Time in milliseconds in which a key press is considered as a continuation of the previous search input. */
qint64 m_timeout;
};