]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Improve copying and moving items between panels
authorEugene Popov <popov895@ukr.net>
Fri, 21 Apr 2023 12:15:31 +0000 (15:15 +0300)
committerMéven Car <meven.car@kdemail.net>
Sun, 23 Apr 2023 09:33:09 +0000 (09:33 +0000)
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).

src/dolphintabwidget.cpp
src/views/dolphinview.cpp

index bb3680f5832b74375f8c1069795e9d2f4a40a955..9ee80160a695cd819db476328e985eeec3566c0e 100644 (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;
     }
 
+    const KFileItemList selectedItems = tabPage->activeViewContainer()->view()->selectedItems();
+    if (selectedItems.isEmpty()) {
+        return;
+    }
+
+    DolphinView *inactiveView;
     if (tabPage->primaryViewActive()) {
-        // copy from left panel to right
-        activeViewContainer->view()->copySelectedItems(activeViewContainer->view()->selectedItems(), tabPage->secondaryViewContainer()->url());
+        inactiveView = tabPage->secondaryViewContainer()->view();
     } else {
-        // copy from right panel to left
-        activeViewContainer->view()->copySelectedItems(activeViewContainer->view()->selectedItems(), tabPage->primaryViewContainer()->url());
+        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;
+    }
+
+    const KFileItemList selectedItems = tabPage->activeViewContainer()->view()->selectedItems();
+    if (selectedItems.isEmpty()) {
         return;
     }
 
+    DolphinView *inactiveView;
     if (tabPage->primaryViewActive()) {
-        // move from left panel to right
-        activeViewContainer->view()->moveSelectedItems(activeViewContainer->view()->selectedItems(), tabPage->secondaryViewContainer()->url());
+        inactiveView = tabPage->secondaryViewContainer()->view();
     } else {
-        // move from right panel to left
-        activeViewContainer->view()->moveSelectedItems(activeViewContainer->view()->selectedItems(), tabPage->primaryViewContainer()->url());
+        inactiveView = tabPage->primaryViewContainer()->view();
     }
+    inactiveView->moveSelectedItems(selectedItems, inactiveView->url());
 }
 
 void DolphinTabWidget::detachTab(int index)
index 66b6c23a88afa1ae14c5a7f0d834a8f8d34799cd..b33353e3a813b85d5df942d799097a08f33ab53b 100644 (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);