diff --git a/src/views/dolphinview.h b/src/views/dolphinview.h --- a/src/views/dolphinview.h +++ b/src/views/dolphinview.h @@ -312,6 +312,8 @@ */ void setUrl(const QUrl& url); + void slotRenameDialogRenamingFinished(const QList& urls); + /** * Selects all items. * @see DolphinView::selectedItems() @@ -760,6 +762,14 @@ */ QUrl viewPropertiesUrl() const; + /** + * Clears the selection and updates current item and selection according to the parameters + * + * @param current URL to be set as current + * @param selected list of selected items + */ + void urlsForceSelection(const QUrl ¤t, const QList& selected); + private: void updatePalette(); diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -635,6 +635,9 @@ this, &DolphinView::slotRoleEditingFinished); } else { RenameDialog* dialog = new RenameDialog(this, items); + + connect(dialog, &RenameDialog::renamingFinished, this, &DolphinView::slotRenameDialogRenamingFinished); + dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->show(); dialog->raise(); @@ -1308,9 +1311,7 @@ void DolphinView::observeCreatedItem(const QUrl& url) { if (m_active) { - clearSelection(); - markUrlAsCurrent(url); - markUrlsAsSelected({url}); + urlsForceSelection(url, {url}); } } @@ -1541,6 +1542,8 @@ KIO::FileUndoManager::self()->recordJob(KIO::FileUndoManager::Rename, {oldUrl}, newUrl, job); job->uiDelegate()->setAutoErrorHandlingEnabled(true); + urlsForceSelection(newUrl, {newUrl}); + if (!newNameExistsAlready) { // Only connect the result signal if there is no item with the new name // in the model yet, see bug 328262. @@ -1747,3 +1750,16 @@ url.setPath(m_viewPropertiesContext); return url; } + +void DolphinView::slotRenameDialogRenamingFinished(const QList& urls) +{ + urlsForceSelection(urls.first(), urls); +} + +void DolphinView::urlsForceSelection(const QUrl& current, const QList& selected) +{ + clearSelection(); + m_clearSelectionBeforeSelectingNewItems = true; + markUrlAsCurrent(current); + markUrlsAsSelected(selected); +} diff --git a/src/views/renamedialog.h b/src/views/renamedialog.h --- a/src/views/renamedialog.h +++ b/src/views/renamedialog.h @@ -41,6 +41,9 @@ explicit RenameDialog(QWidget* parent, const KFileItemList& items); virtual ~RenameDialog(); +signals: + void renamingFinished(const QList& urls); + private slots: void slotAccepted(); void slotTextChanged(const QString& newName); @@ -63,6 +66,7 @@ private: bool m_renameOneItem; + QList m_renamedItems; QString m_newName; QLineEdit* m_lineEdit; KFileItemList m_items; diff --git a/src/views/renamedialog.cpp b/src/views/renamedialog.cpp --- a/src/views/renamedialog.cpp +++ b/src/views/renamedialog.cpp @@ -39,6 +39,7 @@ QDialog(parent), m_renameOneItem(false), m_newName(), + m_renamedItems(), m_lineEdit(0), m_items(items), m_allExtensionsDifferent(true), @@ -162,6 +163,11 @@ KIO::Job * job = KIO::moveAs(oldUrl, newUrl, KIO::HideProgressInfo); KJobWidgets::setWindow(job, widget); KIO::FileUndoManager::self()->recordJob(KIO::FileUndoManager::Rename, {oldUrl}, newUrl, job); + + if (!job->error()) { + m_renamedItems << newUrl; + } + job->uiDelegate()->setAutoErrorHandlingEnabled(true); } @@ -223,6 +229,10 @@ renameItem(item, newName); } } + + if (!m_items.empty()) { + emit renamingFinished(m_renamedItems); + } } QString RenameDialog::indexedName(const QString& name, int index, const QChar& indexPlaceHolder) @@ -243,4 +253,3 @@ return newName; } -