From 68bb0ec22af0290d298a87a15006f888b0aaf3b9 Mon Sep 17 00:00:00 2001 From: Elvis Angelaccio Date: Fri, 10 Mar 2017 19:31:33 +0100 Subject: [PATCH] Port to KStandardAction::DeleteFile Summary: It was introduced in kconfig 5.25 and it properly handles the shift+del shortcut (together with kxmlgui >= 5.30). This allows us to drop the custom delete shortcut as well as the shift+del workaround in DolphinMainWindow. Test Plan: Shift+Del still deletes files, without the 'ambiguous shortcut' warning dialog. Reviewers: emmanuelp Differential Revision: https://phabricator.kde.org/D5010 --- src/dolphincontextmenu.cpp | 6 +++--- src/dolphinmainwindow.cpp | 10 +++------- src/dolphinpart.cpp | 6 +++--- src/dolphinremoveaction.cpp | 2 +- src/dolphinremoveaction.h | 4 ++-- src/views/dolphinviewactionhandler.cpp | 8 ++------ 6 files changed, 14 insertions(+), 22 deletions(-) diff --git a/src/dolphincontextmenu.cpp b/src/dolphincontextmenu.cpp index 58e2f4de5c..890494ff8a 100644 --- a/src/dolphincontextmenu.cpp +++ b/src/dolphincontextmenu.cpp @@ -172,7 +172,7 @@ void DolphinContextMenu::openTrashItemContextMenu() QAction* restoreAction = new QAction(i18nc("@action:inmenu", "Restore"), m_mainWindow); addAction(restoreAction); - QAction* deleteAction = m_mainWindow->actionCollection()->action(QStringLiteral("delete")); + QAction* deleteAction = m_mainWindow->actionCollection()->action(KStandardAction::name(KStandardAction::DeleteFile)); addAction(deleteAction); QAction* propertiesAction = m_mainWindow->actionCollection()->action(QStringLiteral("properties")); @@ -406,9 +406,9 @@ void DolphinContextMenu::insertDefaultItemActions(const KFileItemListProperties& delete m_removeAction; m_removeAction = 0; addAction(m_mainWindow->actionCollection()->action(QStringLiteral("move_to_trash"))); - addAction(m_mainWindow->actionCollection()->action(QStringLiteral("delete"))); + addAction(m_mainWindow->actionCollection()->action(KStandardAction::name(KStandardAction::DeleteFile))); } else if (showDeleteAction && !showMoveToTrashAction) { - addAction(m_mainWindow->actionCollection()->action(QStringLiteral("delete"))); + addAction(m_mainWindow->actionCollection()->action(KStandardAction::name(KStandardAction::DeleteFile))); } else { if (!m_removeAction) { m_removeAction = new DolphinRemoveAction(this, m_mainWindow->actionCollection()); diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 431ecda443..de8601d4e9 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -1015,12 +1015,8 @@ void DolphinMainWindow::setupActions() SLOT(undo()), actionCollection()); - // need to remove shift+del from cut action, else the shortcut for deletejob - // doesn't work - QAction* cut = KStandardAction::cut(this, SLOT(cut()), actionCollection()); - auto cutShortcuts = cut->shortcuts(); - cutShortcuts.removeAll(QKeySequence(Qt::SHIFT | Qt::Key_Delete)); - actionCollection()->setDefaultShortcuts(cut, cutShortcuts); + + KStandardAction::cut(this, SLOT(cut()), actionCollection()); KStandardAction::copy(this, SLOT(copy()), actionCollection()); QAction* paste = KStandardAction::paste(this, SLOT(paste()), actionCollection()); // The text of the paste-action is modified dynamically by Dolphin @@ -1316,7 +1312,7 @@ void DolphinMainWindow::updateEditActions() KActionCollection* col = actionCollection(); QAction* renameAction = col->action(QStringLiteral("rename")); QAction* moveToTrashAction = col->action(QStringLiteral("move_to_trash")); - QAction* deleteAction = col->action(QStringLiteral("delete")); + QAction* deleteAction = col->action(KStandardAction::name(KStandardAction::DeleteFile)); QAction* cutAction = col->action(KStandardAction::name(KStandardAction::Cut)); QAction* deleteWithTrashShortcut = col->action(QStringLiteral("delete_shortcut")); // see DolphinViewActionHandler diff --git a/src/dolphinpart.cpp b/src/dolphinpart.cpp index b55bcabb25..352e9a44fa 100644 --- a/src/dolphinpart.cpp +++ b/src/dolphinpart.cpp @@ -255,7 +255,7 @@ void DolphinPart::slotSelectionChanged(const KFileItemList& selection) QAction* renameAction = actionCollection()->action(QStringLiteral("rename")); QAction* moveToTrashAction = actionCollection()->action(QStringLiteral("move_to_trash")); - QAction* deleteAction = actionCollection()->action(QStringLiteral("delete")); + QAction* deleteAction = actionCollection()->action(KStandardAction::name(KStandardAction::DeleteFile)); QAction* editMimeTypeAction = actionCollection()->action(QStringLiteral("editMimeType")); QAction* propertiesAction = actionCollection()->action(QStringLiteral("properties")); QAction* deleteWithTrashShortcut = actionCollection()->action(QStringLiteral("delete_shortcut")); // see DolphinViewActionHandler @@ -433,9 +433,9 @@ void DolphinPart::slotOpenContextMenu(const QPoint& pos, delete m_removeAction; m_removeAction = 0; editActions.append(actionCollection()->action(QStringLiteral("move_to_trash"))); - editActions.append(actionCollection()->action(QStringLiteral("delete"))); + editActions.append(actionCollection()->action(KStandardAction::name(KStandardAction::DeleteFile))); } else if (showDeleteAction && !showMoveToTrashAction) { - editActions.append(actionCollection()->action(QStringLiteral("delete"))); + editActions.append(actionCollection()->action(KStandardAction::name(KStandardAction::DeleteFile))); } else { if (!m_removeAction) m_removeAction = new DolphinRemoveAction(this, actionCollection()); diff --git a/src/dolphinremoveaction.cpp b/src/dolphinremoveaction.cpp index 10ab25112a..ad00f6286e 100644 --- a/src/dolphinremoveaction.cpp +++ b/src/dolphinremoveaction.cpp @@ -46,7 +46,7 @@ void DolphinRemoveAction::update() // This is only done until the original action has been shown at least once. To // bypass this issue, the text and &-shortcut is applied manually. if (qApp->queryKeyboardModifiers() & Qt::ShiftModifier) { - m_action = m_collection ? m_collection->action(QStringLiteral("delete")) : 0; + m_action = m_collection ? m_collection->action(KStandardAction::name(KStandardAction::DeleteFile)) : 0; setText(i18nc("@action:inmenu", "&Delete")); } else { m_action = m_collection ? m_collection->action(QStringLiteral("move_to_trash")) : 0; diff --git a/src/dolphinremoveaction.h b/src/dolphinremoveaction.h index 85f404318b..fd8fc35d66 100644 --- a/src/dolphinremoveaction.h +++ b/src/dolphinremoveaction.h @@ -31,8 +31,8 @@ * A QAction that manages the delete based on the current state of * the Shift key or the parameter passed to update. * - * This class expects the presence of both the "move_to_trash" and "delete" - * actions in @ref collection. + * This class expects the presence of both the "move_to_trash" and + * KStandardAction::DeleteFile actions in @ref collection. */ class DOLPHIN_EXPORT DolphinRemoveAction : public QAction { diff --git a/src/views/dolphinviewactionhandler.cpp b/src/views/dolphinviewactionhandler.cpp index 273bcdd76a..7e52d5b284 100644 --- a/src/views/dolphinviewactionhandler.cpp +++ b/src/views/dolphinviewactionhandler.cpp @@ -120,14 +120,10 @@ void DolphinViewActionHandler::createActions() connect(moveToTrash, &QAction::triggered, this, &DolphinViewActionHandler::slotTrashActivated); - QAction* deleteAction = m_actionCollection->addAction(QStringLiteral("delete")); - deleteAction->setIcon(QIcon::fromTheme(QStringLiteral("edit-delete"))); - deleteAction->setText(i18nc("@action:inmenu File", "Delete")); - m_actionCollection->setDefaultShortcut(deleteAction, Qt::SHIFT | Qt::Key_Delete); - connect(deleteAction, &QAction::triggered, this, &DolphinViewActionHandler::slotDeleteItems); + KStandardAction::deleteFile(this, &DolphinViewActionHandler::slotDeleteItems, m_actionCollection); // This action is useful for being enabled when "move_to_trash" should be - // disabled and "delete" is enabled (e.g. non-local files), so that Key_Del + // disabled and KStandardAction::DeleteFile is enabled (e.g. non-local files), so that Key_Del // can be used for deleting the file (#76016). It needs to be a separate action // so that the Edit menu isn't affected. QAction* deleteWithTrashShortcut = m_actionCollection->addAction(QStringLiteral("delete_shortcut"));