X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/82bbdb6e6b4aa87a4da6f2d4b6a65177e6aa5d16..9f233850beb60168e8773623e0b5ae052c5287e9:/src/dolphinremoveaction.cpp diff --git a/src/dolphinremoveaction.cpp b/src/dolphinremoveaction.cpp index 7e8a353f0..b6a982a38 100644 --- a/src/dolphinremoveaction.cpp +++ b/src/dolphinremoveaction.cpp @@ -1,32 +1,17 @@ -/*************************************************************************** - * Copyright (C) 2013 by Dawit Alemayehu + * SPDX-FileCopyrightText: 2017 Elvis Angelaccio + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ #include "dolphinremoveaction.h" #include -#include - - -DolphinRemoveAction::DolphinRemoveAction(QObject* parent, KActionCollection* collection) : - QAction(parent), - m_collection(collection) +DolphinRemoveAction::DolphinRemoveAction(QObject *parent, KActionCollection *collection) + : QAction(parent) + , m_collection(collection) { update(); connect(this, &DolphinRemoveAction::triggered, this, &DolphinRemoveAction::slotRemoveActionTriggered); @@ -39,23 +24,46 @@ void DolphinRemoveAction::slotRemoveActionTriggered() } } -void DolphinRemoveAction::update() +void DolphinRemoveAction::update(ShiftState shiftState) { - Q_ASSERT(m_collection); - // Using setText(action->text()) does not apply the &-shortcut. - // 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(KStandardAction::name(KStandardAction::DeleteFile)) : 0; - setText(i18nc("@action:inmenu", "&Delete")); - } else { - m_action = m_collection ? m_collection->action(KStandardAction::name(KStandardAction::MoveToTrash)) : 0; - setText(i18nc("@action:inmenu", "&Move to Trash")); + if (!m_collection) { + m_action = nullptr; + return; + } + + if (shiftState == ShiftState::Unknown) { + shiftState = QGuiApplication::keyboardModifiers() & Qt::ShiftModifier ? ShiftState::Pressed : ShiftState::Released; + } + + switch (shiftState) { + case ShiftState::Pressed: { + m_action = m_collection->action(KStandardAction::name(KStandardAction::DeleteFile)); + // Make sure we show Shift+Del in the context menu. + auto deleteShortcuts = m_action->shortcuts(); + deleteShortcuts.removeAll(Qt::SHIFT | Qt::Key_Delete); + deleteShortcuts.prepend(Qt::SHIFT | Qt::Key_Delete); + m_collection->setDefaultShortcuts(this, deleteShortcuts); + break; + } + case ShiftState::Released: { + m_action = m_collection->action(KStandardAction::name(KStandardAction::MoveToTrash)); + // Make sure we show Del in the context menu. + auto trashShortcuts = m_action->shortcuts(); + trashShortcuts.removeAll(QKeySequence::Delete); + trashShortcuts.prepend(QKeySequence::Delete); + m_collection->setDefaultShortcuts(this, trashShortcuts); + break; + } + case ShiftState::Unknown: + Q_UNREACHABLE(); + break; } if (m_action) { + setText(m_action->text()); setIcon(m_action->icon()); - m_collection->setDefaultShortcuts(this, m_action->shortcuts()); setEnabled(m_action->isEnabled()); } } + +#include "moc_dolphinremoveaction.cpp"