diff --git a/containments/desktop/package/contents/ui/FolderView.qml b/containments/desktop/package/contents/ui/FolderView.qml --- a/containments/desktop/package/contents/ui/FolderView.qml +++ b/containments/desktop/package/contents/ui/FolderView.qml @@ -807,6 +807,8 @@ dir.paste(); } else if (event.matches(StandardKey.Cut)) { dir.cut(); + } else if (event.matches(StandardKey.Undo)) { + dir.undo(); } } diff --git a/containments/desktop/plugins/folder/foldermodel.h b/containments/desktop/plugins/folder/foldermodel.h --- a/containments/desktop/plugins/folder/foldermodel.h +++ b/containments/desktop/plugins/folder/foldermodel.h @@ -213,6 +213,7 @@ Q_INVOKABLE void cut(); Q_INVOKABLE void deleteSelected(); Q_INVOKABLE void openSelected(); + Q_INVOKABLE void undo(); Q_SIGNALS: void urlChanged() const; diff --git a/containments/desktop/plugins/folder/foldermodel.cpp b/containments/desktop/plugins/folder/foldermodel.cpp --- a/containments/desktop/plugins/folder/foldermodel.cpp +++ b/containments/desktop/plugins/folder/foldermodel.cpp @@ -1619,6 +1619,16 @@ } } +void FolderModel::undo() +{ + if (QAction *action = m_actionCollection.action(QStringLiteral("undo"))) { + // trigger() doesn't check enabled and would crash if invoked nonetheless. + if (action->isEnabled()) { + action->trigger(); + } + } +} + void FolderModel::emptyTrashBin() { KIO::JobUiDelegate uiDelegate;