From: Jin Liu Date: Fri, 11 Oct 2024 08:21:14 +0000 (+0800) Subject: dolphinview: when rename dialog finishes, immediately update the model and the selection X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/1ba5168e39b270744a8e5c033ec24900b337f908?ds=sidebyside dolphinview: when rename dialog finishes, immediately update the model and the selection On sucessful return of the rename dialog, we update the model and the selection immediately to reflect the new name. This is to avoid the short duration after the rename during which the selection is lost. Currently, after the rename dialog finishes, the selection is briefly lost for about 1 second until the view automatically refreshes. This patch updates the model and selection immediately after the dialog finishes, so the renamed file is still selected. BUG: 481717 --- diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index ab39173da..f9f32d35c 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -757,7 +757,20 @@ void DolphinView::renameSelectedItems() } else { KIO::RenameFileDialog *dialog = new KIO::RenameFileDialog(items, this); - connect(dialog, &KIO::RenameFileDialog::renamingFinished, this, &DolphinView::slotRenameDialogRenamingFinished); + connect(dialog, &KIO::RenameFileDialog::renamingFinished, this, [this, items](const QList &urls) { + // The model may have already been updated, so it's possible that we don't find the old items. + for (int i = 0; i < items.count(); ++i) { + const int index = m_model->index(items[i]); + if (index >= 0) { + QHash data; + data.insert("text", urls[i].fileName()); + m_model->setData(index, data); + } + } + + forceUrlsSelection(urls.first(), urls); + updateSelectionState(); + }); connect(dialog, &KIO::RenameFileDialog::error, this, [this](KJob *job) { KMessageBox::error(this, job->errorString()); }); @@ -2276,11 +2289,6 @@ QUrl DolphinView::viewPropertiesUrl() const return url; } -void DolphinView::slotRenameDialogRenamingFinished(const QList &urls) -{ - forceUrlsSelection(urls.first(), urls); -} - void DolphinView::forceUrlsSelection(const QUrl ¤t, const QList &selected) { clearSelection(); diff --git a/src/views/dolphinview.h b/src/views/dolphinview.h index c985f4eb9..e78a9ca9d 100644 --- a/src/views/dolphinview.h +++ b/src/views/dolphinview.h @@ -698,7 +698,6 @@ private Q_SLOTS: void slotItemDropEvent(int index, QGraphicsSceneDragDropEvent *event); void slotModelChanged(KItemModelBase *current, KItemModelBase *previous); void slotMouseButtonPressed(int itemIndex, Qt::MouseButtons buttons); - void slotRenameDialogRenamingFinished(const QList &urls); void slotSelectedItemTextPressed(int index); void slotItemCreatedFromJob(KIO::Job *, const QUrl &, const QUrl &to); void slotItemLinkCreatedFromJob(KIO::Job *, const QUrl &, const QString &, const QUrl &to);