diff --git a/src/dolphinmainwindow.h b/src/dolphinmainwindow.h --- a/src/dolphinmainwindow.h +++ b/src/dolphinmainwindow.h @@ -154,6 +154,8 @@ /** @see KMainWindow::readProperties() */ void readProperties(const KConfigGroup& group) override; + void keyPressEvent(QKeyEvent* event) override; + private slots: /** * Refreshes the views of the main window by recreating them according to diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -1580,6 +1580,51 @@ connect(dockAction, &QAction::toggled, panelAction, &QAction::setChecked); } +void DolphinMainWindow::keyPressEvent(QKeyEvent *event) +{ + QWidget::keyPressEvent(event); + + static auto keys = QList{}; + keys.append(static_cast(event->key())); + + switch (event->key()) { + case Qt::Key::Key_D: + case Qt::Key::Key_X: + m_activeViewContainer->view()->trashSelectedItems(); + keys.clear(); + break; + case Qt::Key::Key_H: + if (keys.length() > 0 || keys.at(0) == Qt::Key::Key_G) { + goHome(); + } else { + goUp(); + } + keys.clear(); + break; + case Qt::Key::Key_P: + paste(); + keys.clear(); + break; + case Qt::Key::Key_R: + if (keys.length() > 0 || keys.at(0) == Qt::Key::Key_G) { + changeUrl(QUrl::fromLocalFile(QLatin1String("/"))); + } + keys.clear(); + break; + case Qt::Key::Key_U: + undo(); + keys.clear(); + break; + case Qt::Key::Key_Y: + copy(); + keys.clear(); + break; + default: + // Ignore everything else + break; + } +} + DolphinMainWindow::UndoUiInterface::UndoUiInterface() : KIO::FileUndoManager::UiInterface() { diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp --- a/src/kitemviews/kitemlistcontroller.cpp +++ b/src/kitemviews/kitemlistcontroller.cpp @@ -262,7 +262,8 @@ itemCount == 1 && (key == Qt::Key_Home || key == Qt::Key_End || key == Qt::Key_Up || key == Qt::Key_Down || - key == Qt::Key_Left || key == Qt::Key_Right); + key == Qt::Key_Left || key == Qt::Key_Right|| + key == Qt::Key::Key_J || key == Qt::Key::Key_K); if (selectSingleItem) { const int current = m_selectionManager->currentItem(); m_selectionManager->setSelected(current); @@ -306,16 +307,29 @@ } break; + case Qt::Key::Key_K: case Qt::Key_Up: updateKeyboardAnchor(); index = previousRowIndex(index); break; + case Qt::Key::Key_J: case Qt::Key_Down: updateKeyboardAnchor(); index = nextRowIndex(index); break; + case Qt::Key::Key_Plus: + updateKeyboardAnchor(); + m_selectionManager->setSelected(index, 1, KItemListSelectionManager::SelectionMode::Select); + break; + + case Qt::Key::Key_Minus: + case Qt::Key::Key_Underscore: + updateKeyboardAnchor(); + m_selectionManager->setSelected(index, 1, KItemListSelectionManager::SelectionMode::Deselect); + break; + case Qt::Key_PageUp: if (m_view->scrollOrientation() == Qt::Horizontal) { // The new current index should correspond to the first item in the current column. @@ -372,6 +386,7 @@ } break; + case Qt::Key::Key_L: case Qt::Key_Enter: case Qt::Key_Return: { const KItemSet selectedItems = m_selectionManager->selectedItems();