Improve copying and moving items between panels

Currently, copying the selected items between panels is performed by the active panel, which is wrong, because the inactive panel cannot select the copied items after the operation is completed (as it happens when drag'n'dropping or copying using keyboard shortcuts).
This commit is contained in:
Eugene Popov 2023-04-21 15:15:31 +03:00 committed by Méven Car
parent a9f2abeea4
commit 78a3cd3e4b
2 changed files with 42 additions and 18 deletions

View file

@ -325,36 +325,44 @@ void DolphinTabWidget::restoreClosedTab(const QByteArray &state)
void DolphinTabWidget::copyToInactiveSplitView()
{
const DolphinTabPage *tabPage = tabPageAt(currentIndex());
DolphinViewContainer *activeViewContainer = currentTabPage()->activeViewContainer();
if (!tabPage->splitViewEnabled() || activeViewContainer->view()->selectedItems().isEmpty()) {
const DolphinTabPage *tabPage = currentTabPage();
if (!tabPage->splitViewEnabled()) {
return;
}
if (tabPage->primaryViewActive()) {
// copy from left panel to right
activeViewContainer->view()->copySelectedItems(activeViewContainer->view()->selectedItems(), tabPage->secondaryViewContainer()->url());
} else {
// copy from right panel to left
activeViewContainer->view()->copySelectedItems(activeViewContainer->view()->selectedItems(), tabPage->primaryViewContainer()->url());
const KFileItemList selectedItems = tabPage->activeViewContainer()->view()->selectedItems();
if (selectedItems.isEmpty()) {
return;
}
DolphinView *inactiveView;
if (tabPage->primaryViewActive()) {
inactiveView = tabPage->secondaryViewContainer()->view();
} else {
inactiveView = tabPage->primaryViewContainer()->view();
}
inactiveView->copySelectedItems(selectedItems, inactiveView->url());
}
void DolphinTabWidget::moveToInactiveSplitView()
{
const DolphinTabPage *tabPage = tabPageAt(currentIndex());
DolphinViewContainer *activeViewContainer = currentTabPage()->activeViewContainer();
if (!tabPage->splitViewEnabled() || activeViewContainer->view()->selectedItems().isEmpty()) {
const DolphinTabPage *tabPage = currentTabPage();
if (!tabPage->splitViewEnabled()) {
return;
}
if (tabPage->primaryViewActive()) {
// move from left panel to right
activeViewContainer->view()->moveSelectedItems(activeViewContainer->view()->selectedItems(), tabPage->secondaryViewContainer()->url());
} else {
// move from right panel to left
activeViewContainer->view()->moveSelectedItems(activeViewContainer->view()->selectedItems(), tabPage->primaryViewContainer()->url());
const KFileItemList selectedItems = tabPage->activeViewContainer()->view()->selectedItems();
if (selectedItems.isEmpty()) {
return;
}
DolphinView *inactiveView;
if (tabPage->primaryViewActive()) {
inactiveView = tabPage->secondaryViewContainer()->view();
} else {
inactiveView = tabPage->primaryViewContainer()->view();
}
inactiveView->moveSelectedItems(selectedItems, inactiveView->url());
}
void DolphinTabWidget::detachTab(int index)

View file

@ -814,6 +814,14 @@ void DolphinView::copySelectedItemsToClipboard()
void DolphinView::copySelectedItems(const KFileItemList &selection, const QUrl &destinationUrl)
{
if (selection.isEmpty() || !destinationUrl.isValid()) {
return;
}
m_clearSelectionBeforeSelectingNewItems = true;
m_markFirstNewlySelectedItemAsCurrent = true;
m_selectJobCreatedItems = true;
KIO::CopyJob *job = KIO::copy(selection.urlList(), destinationUrl, KIO::DefaultFlags);
KJobWidgets::setWindow(job, this);
@ -825,6 +833,14 @@ void DolphinView::copySelectedItems(const KFileItemList &selection, const QUrl &
void DolphinView::moveSelectedItems(const KFileItemList &selection, const QUrl &destinationUrl)
{
if (selection.isEmpty() || !destinationUrl.isValid()) {
return;
}
m_clearSelectionBeforeSelectingNewItems = true;
m_markFirstNewlySelectedItemAsCurrent = true;
m_selectJobCreatedItems = true;
KIO::CopyJob *job = KIO::move(selection.urlList(), destinationUrl, KIO::DefaultFlags);
KJobWidgets::setWindow(job, this);