Context menu: allow to show copy to/move to inactive split view

Prevent copying/moving to same folder as origin when copying/moving to inactive split view

BUG: 356436
This commit is contained in:
Méven Car 2023-04-02 07:22:07 +00:00
parent cdf56e761d
commit 9061b22a0d
6 changed files with 50 additions and 8 deletions

View file

@ -257,6 +257,16 @@ void DolphinContextMenu::addItemContextMenu()
m_copyToMenu.addActionsTo(this);
}
if (m_mainWindow->isSplitViewEnabledInCurrentTab()) {
if (ContextMenuSettings::showCopyToOtherSplitView()) {
addAction(m_mainWindow->actionCollection()->action(QStringLiteral("copy_to_inactive_split_view")));
}
if (ContextMenuSettings::showMoveToOtherSplitView()) {
addAction(m_mainWindow->actionCollection()->action(QStringLiteral("move_to_inactive_split_view")));
}
}
// insert 'Properties...' entry
addSeparator();
QAction *propertiesAction = m_mainWindow->actionCollection()->action(QStringLiteral("properties"));

View file

@ -88,6 +88,8 @@
#include <QTimer>
#include <QToolButton>
#include <algorithm>
namespace
{
// Used for GeneralSettings::version() to determine whether
@ -265,6 +267,11 @@ bool DolphinMainWindow::isInformationPanelEnabled() const
#endif
}
bool DolphinMainWindow::isSplitViewEnabledInCurrentTab() const
{
return m_tabWidget->currentTabPage()->splitViewEnabled();
}
void DolphinMainWindow::openFiles(const QStringList &files, bool splitView)
{
openFiles(QUrl::fromStringList(files), splitView);
@ -1609,8 +1616,8 @@ void DolphinMainWindow::setupActions()
+ cutCopyPastePara);
QAction *copyToOtherViewAction = actionCollection()->addAction(QStringLiteral("copy_to_inactive_split_view"));
copyToOtherViewAction->setText(i18nc("@action:inmenu", "Copy to Inactive Split View"));
m_actionTextHelper->registerTextWhenNothingIsSelected(copyToOtherViewAction, i18nc("@action:inmenu", "Copy to Inactive Split View…"));
copyToOtherViewAction->setText(i18nc("@action:inmenu", "Copy to Other View"));
m_actionTextHelper->registerTextWhenNothingIsSelected(copyToOtherViewAction, i18nc("@action:inmenu", "Copy to Other View…"));
copyToOtherViewAction->setWhatsThis(xi18nc("@info:whatsthis Copy",
"This copies the selected items from "
"the <emphasis>active</emphasis> view to the inactive split view."));
@ -1620,8 +1627,8 @@ void DolphinMainWindow::setupActions()
connect(copyToOtherViewAction, &QAction::triggered, this, &DolphinMainWindow::copyToInactiveSplitView);
QAction *moveToOtherViewAction = actionCollection()->addAction(QStringLiteral("move_to_inactive_split_view"));
moveToOtherViewAction->setText(i18nc("@action:inmenu", "Move to Inactive Split View"));
m_actionTextHelper->registerTextWhenNothingIsSelected(moveToOtherViewAction, i18nc("@action:inmenu", "Move to Inactive Split View…"));
moveToOtherViewAction->setText(i18nc("@action:inmenu", "Move to Other View"));
m_actionTextHelper->registerTextWhenNothingIsSelected(moveToOtherViewAction, i18nc("@action:inmenu", "Move to Other View…"));
moveToOtherViewAction->setWhatsThis(xi18nc("@info:whatsthis Move",
"This moves the selected items from "
"the <emphasis>active</emphasis> view to the inactive split view."));
@ -2280,7 +2287,7 @@ void DolphinMainWindow::updateFileAndEditActions()
duplicateAction->setEnabled(capabilitiesSource.supportsWriting());
}
if (m_tabWidget->currentTabPage()->splitViewEnabled()) {
if (m_tabWidget->currentTabPage()->splitViewEnabled() && !list.isEmpty()) {
DolphinTabPage *tabPage = m_tabWidget->currentTabPage();
KFileItem capabilitiesDestination;
@ -2290,8 +2297,14 @@ void DolphinMainWindow::updateFileAndEditActions()
capabilitiesDestination = tabPage->primaryViewContainer()->rootItem();
}
copyToOtherViewAction->setEnabled(capabilitiesDestination.isWritable());
moveToOtherViewAction->setEnabled((list.isEmpty() || capabilitiesSource.supportsMoving()) && capabilitiesDestination.isWritable());
const auto destUrl = capabilitiesDestination.url();
const bool allNotTargetOrigin = std::all_of(list.cbegin(), list.cend(), [destUrl](const KFileItem &item) {
return item.url().adjusted(QUrl::RemoveFilename | QUrl::StripTrailingSlash) != destUrl;
});
copyToOtherViewAction->setEnabled(capabilitiesDestination.isWritable() && allNotTargetOrigin);
moveToOtherViewAction->setEnabled((list.isEmpty() || capabilitiesSource.supportsMoving()) && capabilitiesDestination.isWritable()
&& allNotTargetOrigin);
} else {
copyToOtherViewAction->setEnabled(false);
moveToOtherViewAction->setEnabled(false);

View file

@ -118,6 +118,7 @@ public:
bool isFoldersPanelEnabled() const;
bool isInformationPanelEnabled() const;
bool isSplitViewEnabledInCurrentTab() const;
public Q_SLOTS:
/**

View file

@ -129,6 +129,10 @@ bool ContextMenuSettingsPage::entryVisible(const QString &id)
return ContextMenuSettings::showDuplicateHere();
} else if (id == "open_terminal_here") {
return ContextMenuSettings::showOpenTerminal();
} else if (id == "copy_to_inactive_split_view") {
return ContextMenuSettings::showCopyToOtherSplitView();
} else if (id == "move_to_inactive_split_view") {
return ContextMenuSettings::showMoveToOtherSplitView();
}
return false;
}
@ -151,6 +155,10 @@ void ContextMenuSettingsPage::setEntryVisible(const QString &id, bool visible)
ContextMenuSettings::setShowDuplicateHere(visible);
} else if (id == "open_terminal_here") {
ContextMenuSettings::setShowOpenTerminal(visible);
} else if (id == "copy_to_inactive_split_view") {
ContextMenuSettings::setShowCopyToOtherSplitView(visible);
} else if (id == "move_to_inactive_split_view") {
ContextMenuSettings::setShowMoveToOtherSplitView(visible);
}
}

View file

@ -42,5 +42,13 @@
<label>Show 'Open Terminal' in context menu.</label>
<default>true</default>
</entry>
<entry name="ShowCopyToOtherSplitView" type="Bool">
<label>Show 'Copy to other split view' in context menu.</label>
<default>true</default>
</entry>
<entry name="ShowMoveToOtherSplitView" type="Bool">
<label>Show 'Move to other split view' in context menu.</label>
<default>true</default>
</entry>
</group>
</kcfg>

View file

@ -84,7 +84,9 @@ DolphinSettingsDialog::DolphinSettingsDialog(const QUrl &url, QWidget *parent, K
QStringLiteral("open_in_new_window"),
QStringLiteral("copy_location"),
QStringLiteral("duplicate"),
QStringLiteral("open_terminal_here")});
QStringLiteral("open_terminal_here"),
QStringLiteral("copy_to_inactive_split_view"),
QStringLiteral("move_to_inactive_split_view")});
KPageWidgetItem *contextMenuSettingsFrame = addPage(contextMenuSettingsPage, i18nc("@title:group", "Context Menu"));
contextMenuSettingsFrame->setIcon(QIcon::fromTheme(QStringLiteral("preferences-desktop-menu-edit")));
connect(contextMenuSettingsPage, &ContextMenuSettingsPage::changed, this, &DolphinSettingsDialog::enableApply);