mirror of
https://invent.kde.org/system/dolphin
synced 2024-09-12 12:54:29 +00:00
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:
parent
cdf56e761d
commit
9061b22a0d
|
@ -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"));
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -118,6 +118,7 @@ public:
|
|||
|
||||
bool isFoldersPanelEnabled() const;
|
||||
bool isInformationPanelEnabled() const;
|
||||
bool isSplitViewEnabledInCurrentTab() const;
|
||||
|
||||
public Q_SLOTS:
|
||||
/**
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue