Commit 9f53bf16 authored by Fabio Bas's avatar Fabio Bas Committed by Nate Graham
Browse files

Desktop as folder: restore functionality of the "delete" action

MR552 introduced RemoveAction but broke functionality of the "delete" action
when both the "trash" and "delete" actions are shown in the menu by requiring
the "shift" key being pressed for the action to work.

BUG: 442765


(cherry picked from commit b893a37f)
parent d7bcf6de
......@@ -1599,6 +1599,7 @@ void FolderModel::createActions()
QAction *rename = KStandardAction::renameFile(this, &FolderModel::requestRename, this);
QAction *trash = KStandardAction::moveToTrash(this, &FolderModel::moveSelectedToTrash, this);
QAction *del = KStandardAction::deleteFile(this, &FolderModel::deleteSelected, this);
RemoveAction *remove = new RemoveAction(&m_actionCollection, this);
QAction *emptyTrash = new QAction(QIcon::fromTheme(QStringLiteral("trash-empty")), i18n("&Empty Trash"), this);
......@@ -1607,8 +1608,6 @@ void FolderModel::createActions()
QAction *restoreFromTrash = new QAction(i18nc("Restore from trash", "Restore"), this);
connect(restoreFromTrash, &QAction::triggered, this, &FolderModel::restoreSelectedFromTrash);
QAction *del = KStandardAction::deleteFile(this, &FolderModel::deleteSelected, this);
QAction *actOpen = new QAction(QIcon::fromTheme(QStringLiteral("window-new")), i18n("&Open"), this);
connect(actOpen, &QAction::triggered, this, &FolderModel::openSelected);
......@@ -1803,20 +1802,20 @@ void FolderModel::openContextMenu(QQuickItem *visualParent, Qt::KeyboardModifier
menu->addSeparator();
menu->addAction(m_actionCollection.action(QStringLiteral("restoreFromTrash")));
KConfigGroup cg(KSharedConfig::openConfig(), "KDE");
bool showDeleteCommand = cg.readEntry("ShowDeleteCommand", false);
if (showDeleteCommand) {
if (isDeleteCommandShown()) {
QAction *trashAction = m_actionCollection.action(QStringLiteral("trash"));
QAction *deleteAction = m_actionCollection.action(QStringLiteral("del"));
deleteAction->setVisible(showDeleteCommand);
trashAction->setVisible(showDeleteCommand);
menu->addAction(trashAction);
menu->addAction(deleteAction);
} else {
if (RemoveAction *removeAction = qobject_cast<RemoveAction *>(m_actionCollection.action(QStringLiteral("remove")))) {
removeAction->update();
menu->addAction(removeAction);
// Used to monitor Shift modifier usage while the menu is open, to
// swap the Trash and Delete actions.
menu->installEventFilter(removeAction);
QCoreApplication::instance()->installEventFilter(removeAction);
}
}
......@@ -1852,13 +1851,6 @@ void FolderModel::openContextMenu(QQuickItem *visualParent, Qt::KeyboardModifier
menu->windowHandle()->setTransientParent(visualParent->window());
}
// Used to monitor Shift modifier usage while the menu is open, to
// swap the Trash and Delete actions.
if (RemoveAction *removeAction = qobject_cast<RemoveAction *>(m_actionCollection.action(QStringLiteral("remove")))) {
menu->installEventFilter(removeAction);
QCoreApplication::instance()->installEventFilter(removeAction);
}
menu->popup(m_menuPosition);
connect(menu, &QMenu::aboutToHide, [menu]() {
menu->deleteLater();
......@@ -2007,8 +1999,16 @@ void FolderModel::moveSelectedToTrash()
return;
}
if (RemoveAction *action = qobject_cast<RemoveAction *>(m_actionCollection.action(QStringLiteral("remove")))) {
if (action->proxyAction() != m_actionCollection.action(QStringLiteral("trash"))) {
if (!isDeleteCommandShown()) {
if (RemoveAction *action = qobject_cast<RemoveAction *>(m_actionCollection.action(QStringLiteral("remove")))) {
if (action->proxyAction() != m_actionCollection.action(QStringLiteral("trash"))) {
return;
}
}
}
if (QAction *action = m_actionCollection.action(QStringLiteral("trash"))) {
if (!action->isEnabled()) {
return;
}
}
......@@ -2029,8 +2029,16 @@ void FolderModel::deleteSelected()
return;
}
if (RemoveAction *action = qobject_cast<RemoveAction *>(m_actionCollection.action(QStringLiteral("remove")))) {
if (action->proxyAction() != m_actionCollection.action(QStringLiteral("del"))) {
if (!isDeleteCommandShown()) {
if (RemoveAction *action = qobject_cast<RemoveAction *>(m_actionCollection.action(QStringLiteral("remove")))) {
if (action->proxyAction() != m_actionCollection.action(QStringLiteral("del"))) {
return;
}
}
}
if (QAction *action = m_actionCollection.action(QStringLiteral("del"))) {
if (!action->isEnabled()) {
return;
}
}
......@@ -2107,3 +2115,9 @@ void FolderModel::createFolder()
m_newMenu->setPopupFiles(QList<QUrl>() << m_dirModel->dirLister()->url());
m_newMenu->createDirectory();
}
bool FolderModel::isDeleteCommandShown()
{
KConfigGroup cg(KSharedConfig::openConfig(), "KDE");
return cg.readEntry("ShowDeleteCommand", false);
}
......@@ -301,6 +301,7 @@ private:
void addDragImage(QDrag *drag, int x, int y);
void setStatus(Status status);
static bool isTrashEmpty();
static bool isDeleteCommandShown();
QList<QUrl> selectedUrls() const;
KDirModel *m_dirModel;
KDirWatch *m_dirWatch;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment