diff --git a/src/filewidgets/kdiroperator.h b/src/filewidgets/kdiroperator.h --- a/src/filewidgets/kdiroperator.h +++ b/src/filewidgets/kdiroperator.h @@ -794,6 +794,13 @@ */ QString makeDirCompletion(const QString &); + /** + * Initiates a rename operation on the currently selected files/directories, + * prompting the user to choose a new name(s) for the currently selected items + * @since 5.67 + */ + void renameSelected(); + /** * Trashes the currently selected files/directories. * diff --git a/src/filewidgets/kdiroperator.cpp b/src/filewidgets/kdiroperator.cpp --- a/src/filewidgets/kdiroperator.cpp +++ b/src/filewidgets/kdiroperator.cpp @@ -58,6 +58,7 @@ #include #include #include +#include #include #include #include @@ -427,6 +428,7 @@ { const bool hasSelection = (d->itemView != nullptr) && d->itemView->selectionModel()->hasSelection(); + d->actionCollection->action(QStringLiteral("rename"))->setEnabled(hasSelection); d->actionCollection->action(QStringLiteral("trash"))->setEnabled(hasSelection); d->actionCollection->action(QStringLiteral("delete"))->setEnabled(hasSelection); d->actionCollection->action(QStringLiteral("properties"))->setEnabled(hasSelection); @@ -865,6 +867,23 @@ return d->isSaving; } +void KDirOperator::renameSelected() +{ + if (d->itemView == nullptr) { + return; + } + + const KFileItemList items = selectedItems(); + if (items.isEmpty()) { + return; + } + + KIO::RenameFileDialog* dialog = new KIO::RenameFileDialog(items, this); + connect(dialog, SIGNAL(renamingFinished()), SLOT(_k_assureVisibleSelection())); + + dialog->open(); +} + void KDirOperator::trashSelected() { if (d->itemView == nullptr) { @@ -1949,6 +1968,9 @@ mkdirAction->setIcon(QIcon::fromTheme(QStringLiteral("folder-new"))); connect(mkdirAction, SIGNAL(triggered(bool)), this, SLOT(mkdir())); + QAction *rename = KStandardAction::renameFile(this, &KDirOperator::renameSelected, this); + d->actionCollection->addAction(QStringLiteral("rename"), rename); + QAction *trash = new QAction(i18n("Move to Trash"), this); d->actionCollection->addAction(QStringLiteral("trash"), trash); trash->setIcon(QIcon::fromTheme(QStringLiteral("user-trash"))); @@ -2162,6 +2184,10 @@ if (whichActions & FileActions) { d->actionMenu->addAction(d->actionCollection->action(QStringLiteral("new"))); + + d->actionMenu->addAction(d->actionCollection->action(QStringLiteral("rename"))); + d->actionCollection->action(QStringLiteral("rename"))->setEnabled(KProtocolManager::supportsMoving(d->currUrl)); + if (d->currUrl.isLocalFile() && !(QApplication::keyboardModifiers() & Qt::ShiftModifier)) { d->actionMenu->addAction(d->actionCollection->action(QStringLiteral("trash"))); }