mirror of
https://invent.kde.org/system/dolphin
synced 2024-09-17 15:31:20 +00:00
Keep renamed file(s) in view
When renaming a file, if its new name causes it to scroll out of view, Dolphin will not scroll to the location of the new file. This patch aims to address that. This affects all view modes. CCBUG: 354330 Test Plan: 1. Have many files in a directory (or several files, just zoom in a lot) 2. Rename a file so that it will move out of view Differential Revision: https://phabricator.kde.org/D6312
This commit is contained in:
parent
cdd002c57c
commit
478f404b8a
|
@ -635,6 +635,9 @@ void DolphinView::renameSelectedItems()
|
||||||
this, &DolphinView::slotRoleEditingFinished);
|
this, &DolphinView::slotRoleEditingFinished);
|
||||||
} else {
|
} else {
|
||||||
RenameDialog* dialog = new RenameDialog(this, items);
|
RenameDialog* dialog = new RenameDialog(this, items);
|
||||||
|
|
||||||
|
connect(dialog, &RenameDialog::renamingFinished, this, &DolphinView::slotRenameDialogRenamingFinished);
|
||||||
|
|
||||||
dialog->setAttribute(Qt::WA_DeleteOnClose);
|
dialog->setAttribute(Qt::WA_DeleteOnClose);
|
||||||
dialog->show();
|
dialog->show();
|
||||||
dialog->raise();
|
dialog->raise();
|
||||||
|
@ -1308,9 +1311,7 @@ QUrl DolphinView::openItemAsFolderUrl(const KFileItem& item, const bool browseTh
|
||||||
void DolphinView::observeCreatedItem(const QUrl& url)
|
void DolphinView::observeCreatedItem(const QUrl& url)
|
||||||
{
|
{
|
||||||
if (m_active) {
|
if (m_active) {
|
||||||
clearSelection();
|
forceUrlsSelection(url, {url});
|
||||||
markUrlAsCurrent(url);
|
|
||||||
markUrlsAsSelected({url});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1541,6 +1542,8 @@ void DolphinView::slotRoleEditingFinished(int index, const QByteArray& role, con
|
||||||
KIO::FileUndoManager::self()->recordJob(KIO::FileUndoManager::Rename, {oldUrl}, newUrl, job);
|
KIO::FileUndoManager::self()->recordJob(KIO::FileUndoManager::Rename, {oldUrl}, newUrl, job);
|
||||||
job->uiDelegate()->setAutoErrorHandlingEnabled(true);
|
job->uiDelegate()->setAutoErrorHandlingEnabled(true);
|
||||||
|
|
||||||
|
forceUrlsSelection(newUrl, {newUrl});
|
||||||
|
|
||||||
if (!newNameExistsAlready) {
|
if (!newNameExistsAlready) {
|
||||||
// Only connect the result signal if there is no item with the new name
|
// Only connect the result signal if there is no item with the new name
|
||||||
// in the model yet, see bug 328262.
|
// in the model yet, see bug 328262.
|
||||||
|
@ -1747,3 +1750,16 @@ QUrl DolphinView::viewPropertiesUrl() const
|
||||||
url.setPath(m_viewPropertiesContext);
|
url.setPath(m_viewPropertiesContext);
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DolphinView::slotRenameDialogRenamingFinished(const QList<QUrl>& urls)
|
||||||
|
{
|
||||||
|
forceUrlsSelection(urls.first(), urls);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DolphinView::forceUrlsSelection(const QUrl& current, const QList<QUrl>& selected)
|
||||||
|
{
|
||||||
|
clearSelection();
|
||||||
|
m_clearSelectionBeforeSelectingNewItems = true;
|
||||||
|
markUrlAsCurrent(current);
|
||||||
|
markUrlsAsSelected(selected);
|
||||||
|
}
|
||||||
|
|
|
@ -576,6 +576,7 @@ private slots:
|
||||||
void slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* event);
|
void slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* event);
|
||||||
void slotModelChanged(KItemModelBase* current, KItemModelBase* previous);
|
void slotModelChanged(KItemModelBase* current, KItemModelBase* previous);
|
||||||
void slotMouseButtonPressed(int itemIndex, Qt::MouseButtons buttons);
|
void slotMouseButtonPressed(int itemIndex, Qt::MouseButtons buttons);
|
||||||
|
void slotRenameDialogRenamingFinished(const QList<QUrl>& urls);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Is called when new items get pasted or dropped.
|
* Is called when new items get pasted or dropped.
|
||||||
|
@ -760,6 +761,14 @@ private:
|
||||||
*/
|
*/
|
||||||
QUrl viewPropertiesUrl() const;
|
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 forceUrlsSelection(const QUrl& current, const QList<QUrl>& selected);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void updatePalette();
|
void updatePalette();
|
||||||
|
|
||||||
|
|
|
@ -162,6 +162,11 @@ void RenameDialog::renameItem(const KFileItem &item, const QString& newName)
|
||||||
KIO::Job * job = KIO::moveAs(oldUrl, newUrl, KIO::HideProgressInfo);
|
KIO::Job * job = KIO::moveAs(oldUrl, newUrl, KIO::HideProgressInfo);
|
||||||
KJobWidgets::setWindow(job, widget);
|
KJobWidgets::setWindow(job, widget);
|
||||||
KIO::FileUndoManager::self()->recordJob(KIO::FileUndoManager::Rename, {oldUrl}, newUrl, job);
|
KIO::FileUndoManager::self()->recordJob(KIO::FileUndoManager::Rename, {oldUrl}, newUrl, job);
|
||||||
|
|
||||||
|
if (!job->error()) {
|
||||||
|
m_renamedItems << newUrl;
|
||||||
|
}
|
||||||
|
|
||||||
job->uiDelegate()->setAutoErrorHandlingEnabled(true);
|
job->uiDelegate()->setAutoErrorHandlingEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -223,6 +228,10 @@ void RenameDialog::renameItems()
|
||||||
renameItem(item, newName);
|
renameItem(item, newName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!m_items.empty()) {
|
||||||
|
emit renamingFinished(m_renamedItems);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QString RenameDialog::indexedName(const QString& name, int index, const QChar& indexPlaceHolder)
|
QString RenameDialog::indexedName(const QString& name, int index, const QChar& indexPlaceHolder)
|
||||||
|
|
|
@ -41,6 +41,9 @@ public:
|
||||||
explicit RenameDialog(QWidget* parent, const KFileItemList& items);
|
explicit RenameDialog(QWidget* parent, const KFileItemList& items);
|
||||||
virtual ~RenameDialog();
|
virtual ~RenameDialog();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void renamingFinished(const QList<QUrl>& urls);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void slotAccepted();
|
void slotAccepted();
|
||||||
void slotTextChanged(const QString& newName);
|
void slotTextChanged(const QString& newName);
|
||||||
|
@ -63,6 +66,7 @@ private:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_renameOneItem;
|
bool m_renameOneItem;
|
||||||
|
QList<QUrl> m_renamedItems;
|
||||||
QString m_newName;
|
QString m_newName;
|
||||||
QLineEdit* m_lineEdit;
|
QLineEdit* m_lineEdit;
|
||||||
KFileItemList m_items;
|
KFileItemList m_items;
|
||||||
|
|
Loading…
Reference in a new issue