diff options
| author | Rafał Lichwała <[email protected]> | 2025-11-29 13:32:30 +0100 |
|---|---|---|
| committer | Rafał Lichwała <[email protected]> | 2025-12-03 12:19:46 +0100 |
| commit | 9e5926147606737a87cf17535db1ecbfd2c9a2c5 (patch) | |
| tree | c3128c3f62fe7515d1f913fec93427668d15fde9 /src | |
| parent | 861a95a262a2e4352c0913791bf8b43aa5f21424 (diff) | |
folderstabssettingspage: add 3 options for closing split view
There is one bool setting in Dolphin Interface->Folders&Tabs->Split_view
which determines which panel is closed on "Close split view" button
click (currently focused or unfocused one).
This commit replaces this setting with (enum-based) 3-state combo box.
Since now we can set "When closing a split view" action to:
- Close the active pane
- Close the inactive pane
- Close the right pane
BUG: 464696
BUG: 186185
Diffstat (limited to 'src')
| -rw-r--r-- | src/dolphinmainwindow.cpp | 75 | ||||
| -rw-r--r-- | src/dolphintabpage.cpp | 16 | ||||
| -rw-r--r-- | src/settings/dolphin_generalsettings.kcfg | 11 | ||||
| -rw-r--r-- | src/settings/interface/folderstabssettingspage.cpp | 41 | ||||
| -rw-r--r-- | src/settings/interface/folderstabssettingspage.h | 4 |
5 files changed, 111 insertions, 36 deletions
diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 72ed98f77..9e25f94e8 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -1117,7 +1117,21 @@ void DolphinMainWindow::popoutSplitView() DolphinTabPage *tabPage = m_tabWidget->currentTabPage(); if (!tabPage->splitViewEnabled()) return; - openNewWindow((GeneralSettings::closeActiveSplitView() ? tabPage->activeViewContainer() : tabPage->inactiveViewContainer())->url()); + using Choice = GeneralSettings::EnumCloseSplitViewChoice; + switch (GeneralSettings::closeSplitViewChoice()) { + case Choice::ActiveView: + openNewWindow(tabPage->activeViewContainer()->url()); + break; + case Choice::InactiveView: + openNewWindow(tabPage->inactiveViewContainer()->url()); + break; + case Choice::RightView: + openNewWindow(tabPage->secondaryViewContainer()->url()); + break; + default: + Q_UNREACHABLE(); + } + tabPage->setSplitViewEnabled(false, WithAnimation); updateSplitActions(); } @@ -2805,22 +2819,57 @@ void DolphinMainWindow::updateSplitActions() const DolphinTabPage *tabPage = m_tabWidget->currentTabPage(); if (tabPage->splitViewEnabled()) { - if (GeneralSettings::closeActiveSplitView() ? tabPage->primaryViewActive() : !tabPage->primaryViewActive()) { - m_splitViewAction->setText(i18nc("@action:intoolbar Close left view", "Close")); - m_splitViewAction->setToolTip(i18nc("@info", "Close left view")); - m_splitViewAction->setIcon(QIcon::fromTheme(QStringLiteral("view-left-close"))); - m_splitViewMenuAction->setText(i18nc("@action:inmenu Close left view", "Close Left View")); + using Choice = GeneralSettings::EnumCloseSplitViewChoice; + switch (GeneralSettings::closeSplitViewChoice()) { + case Choice::ActiveView: + if (tabPage->primaryViewActive()) { + m_splitViewAction->setText(i18nc("@action:intoolbar Close left view", "Close")); + m_splitViewAction->setToolTip(i18nc("@info View refer here to split view", "Close Left View")); + m_splitViewAction->setIcon(QIcon::fromTheme(QStringLiteral("view-left-close"))); + m_splitViewMenuAction->setText(i18nc("@action:inmenu View refer here to split view", "Close Left View")); - popoutSplitAction->setText(i18nc("@action:intoolbar Move left view to a new window", "Pop out Left View")); - popoutSplitAction->setToolTip(i18nc("@info", "Move left view to a new window")); - } else { + popoutSplitAction->setText(i18nc("@action:intoolbar Move left split view to a new window", "Pop out Left View")); + popoutSplitAction->setToolTip(i18nc("@info View refer here to split view", "Move left split view to a new window")); + } else { + m_splitViewAction->setText(i18nc("@action:intoolbar Close right view", "Close")); + m_splitViewAction->setToolTip(i18nc("@info View refer here to split view", "Close Right View")); + m_splitViewAction->setIcon(QIcon::fromTheme(QStringLiteral("view-right-close"))); + m_splitViewMenuAction->setText(i18nc("@action:inmenu View refer here to split view", "Close Right View")); + + popoutSplitAction->setText(i18nc("@action:intoolbar Move right split view to a new window", "Pop out Right View")); + popoutSplitAction->setToolTip(i18nc("@info View refer here to split view", "Move right split view to a new window")); + } + break; + case Choice::InactiveView: + if (!tabPage->primaryViewActive()) { + m_splitViewAction->setText(i18nc("@action:intoolbar Close left view", "Close")); + m_splitViewAction->setToolTip(i18nc("@info View refer here to split view", "Close Left View")); + m_splitViewAction->setIcon(QIcon::fromTheme(QStringLiteral("view-left-close"))); + m_splitViewMenuAction->setText(i18nc("@action:inmenu View refer here to split view", "Close Left View")); + + popoutSplitAction->setText(i18nc("@action:intoolbar Move left split view to a new window", "Pop out Left View")); + popoutSplitAction->setToolTip(i18nc("@info View refer here to split view", "Move left split view to a new window")); + } else { + m_splitViewAction->setText(i18nc("@action:intoolbar Close right view", "Close")); + m_splitViewAction->setToolTip(i18nc("@info View refer here to split view", "Close Right View")); + m_splitViewAction->setIcon(QIcon::fromTheme(QStringLiteral("view-right-close"))); + m_splitViewMenuAction->setText(i18nc("@action:inmenu View refer here to split view", "Close Right View")); + + popoutSplitAction->setText(i18nc("@action:intoolbar Move right split view to a new window", "Pop out Right View")); + popoutSplitAction->setToolTip(i18nc("@info View refer here to split view", "Move right split view to a new window")); + } + break; + case Choice::RightView: m_splitViewAction->setText(i18nc("@action:intoolbar Close right view", "Close")); - m_splitViewAction->setToolTip(i18nc("@info", "Close right view")); + m_splitViewAction->setToolTip(i18nc("@info View refer here to split view", "Close Right View")); m_splitViewAction->setIcon(QIcon::fromTheme(QStringLiteral("view-right-close"))); - m_splitViewMenuAction->setText(i18nc("@action:inmenu Close left view", "Close Right View")); + m_splitViewMenuAction->setText(i18nc("@action:inmenu View refer here to split view", "Close Right View")); - popoutSplitAction->setText(i18nc("@action:intoolbar Move right view to a new window", "Pop out Right View")); - popoutSplitAction->setToolTip(i18nc("@info", "Move right view to a new window")); + popoutSplitAction->setText(i18nc("@action:intoolbar Move right split view to a new window", "Pop out Right View")); + popoutSplitAction->setToolTip(i18nc("@info View refer here to split view", "Move right split view to a new window")); + break; + default: + Q_UNREACHABLE(); } popoutSplitAction->setEnabled(true); if (!m_splitViewAction->menu()) { diff --git a/src/dolphintabpage.cpp b/src/dolphintabpage.cpp index 1ceda7d9f..8373d17b8 100644 --- a/src/dolphintabpage.cpp +++ b/src/dolphintabpage.cpp @@ -139,16 +139,28 @@ void DolphinTabPage::setSplitViewEnabled(bool enabled, Animated animated, const std::swap(m_primaryViewContainer, m_secondaryViewContainer); m_primaryViewActive = !m_primaryViewActive; }; - if (GeneralSettings::closeActiveSplitView()) { + using Choice = GeneralSettings::EnumCloseSplitViewChoice; + switch (GeneralSettings::closeSplitViewChoice()) { + case Choice::ActiveView: view = activeViewContainer(); if (m_primaryViewActive) { swapActiveView(); } - } else { + break; + case Choice::InactiveView: view = m_primaryViewActive ? m_secondaryViewContainer : m_primaryViewContainer; if (!m_primaryViewActive) { swapActiveView(); } + break; + case Choice::RightView: + view = m_secondaryViewContainer; + if (!m_primaryViewActive) { + swapActiveView(); + } + break; + default: + Q_UNREACHABLE(); } m_primaryViewContainer->setActive(true); m_navigatorsWidget->followViewContainersGeometry(m_primaryViewContainer, nullptr); diff --git a/src/settings/dolphin_generalsettings.kcfg b/src/settings/dolphin_generalsettings.kcfg index 4a55b4bde..01ce316f4 100644 --- a/src/settings/dolphin_generalsettings.kcfg +++ b/src/settings/dolphin_generalsettings.kcfg @@ -98,9 +98,14 @@ <label>Use tab for switching between right and left view</label> <default>false</default> </entry> - <entry name="CloseActiveSplitView" type="Bool"> - <label>Close the view in focus when turning off split view</label> - <default>true</default> + <entry name="CloseSplitViewChoice" type="Enum"> + <choices> + <choice name="ActiveView" /> + <choice name="InactiveView" /> + <choice name="RightView" /> + </choices> + <label>Close split view</label> + <default code="true">EnumCloseSplitViewChoice::ActiveView</default> </entry> <entry name="OpenNewTabAfterLastTab" type="Bool"> <label>New tab will be open after last one</label> diff --git a/src/settings/interface/folderstabssettingspage.cpp b/src/settings/interface/folderstabssettingspage.cpp index 0e6c1aaab..bf8d76746 100644 --- a/src/settings/interface/folderstabssettingspage.cpp +++ b/src/settings/interface/folderstabssettingspage.cpp @@ -18,6 +18,7 @@ #endif #include <QButtonGroup> #include <QCheckBox> +#include <QComboBox> #include <QFileDialog> #include <QFormLayout> #include <QGridLayout> @@ -42,6 +43,7 @@ FoldersTabsSettingsPage::FoldersTabsSettingsPage(QWidget *parent) , m_showFullPathInTitlebar(nullptr) , m_openExternallyCalledFolderInNewTab(nullptr) , m_useTabForSplitViewSwitch(nullptr) + , m_closeSplitComboBox(nullptr) { QFormLayout *topLayout = new QFormLayout(this); @@ -123,26 +125,27 @@ FoldersTabsSettingsPage::FoldersTabsSettingsPage(QWidget *parent) topLayout->addRow(i18nc("@title:group", "Open new tabs: "), m_openNewTabAfterCurrentTab); topLayout->addRow(QString(), m_openNewTabAfterLastTab); - // Split Views topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed)); + // Close split view properties + QLabel *closeSplitViewLabel{new QLabel(i18nc("@info", "When closing a split view"))}; + m_closeSplitComboBox = new QComboBox(this); + m_closeSplitComboBox->addItems({i18n("Close the active pane"), i18n("Close the inactive pane"), i18n("Close the right pane")}); + QHBoxLayout *closeSplitViewHLayout{new QHBoxLayout()}; + QWidget *closeSplitViewWidget{new QWidget()}; + closeSplitViewWidget->setLayout(closeSplitViewHLayout); + closeSplitViewHLayout->addWidget(closeSplitViewLabel); + closeSplitViewHLayout->setContentsMargins(0, 0, 0, 0); + closeSplitViewHLayout->addWidget(m_closeSplitComboBox); + topLayout->addRow(i18nc("@title:group", "Split view: "), closeSplitViewWidget); + // 'Switch between panes of split views with tab key' - auto *splitViewLabel = new QLabel{i18nc("@title:group", "Split view: ")}; m_useTabForSplitViewSwitch = new QCheckBox(i18nc("option:check split view panes", "Switch between views with Tab key")); - splitViewLabel->setAccessibleName(m_useTabForSplitViewSwitch->text()); - topLayout->addRow(splitViewLabel, m_useTabForSplitViewSwitch); - - // 'Close active pane when turning off split view' - m_closeActiveSplitView = new QCheckBox(i18nc("option:check", "Turning off split view closes the view in focus")); - topLayout->addRow(QString(), m_closeActiveSplitView); - m_closeActiveSplitView->setToolTip( - i18n("When unchecked, the opposite view will be closed. The Close icon always illustrates which view (left or right) will be closed.")); + topLayout->addRow(QString(), m_useTabForSplitViewSwitch); // 'Begin in split view mode' - auto *newWindowsLabel = new QLabel{i18n("New windows:")}; - m_splitView = new QCheckBox(i18nc("@option:check Startup Settings", "Begin in split view mode")); - newWindowsLabel->setAccessibleName(m_splitView->text()); - topLayout->addRow(newWindowsLabel, m_splitView); + m_splitView = new QCheckBox(i18nc("@option:check Startup Settings", "Open new window in split view mode")); + topLayout->addRow(QString(), m_splitView); loadSettings(); @@ -159,7 +162,8 @@ FoldersTabsSettingsPage::FoldersTabsSettingsPage(QWidget *parent) connect(m_showFullPathInTitlebar, &QCheckBox::toggled, this, &FoldersTabsSettingsPage::slotSettingsChanged); connect(m_useTabForSplitViewSwitch, &QCheckBox::toggled, this, &FoldersTabsSettingsPage::changed); - connect(m_closeActiveSplitView, &QCheckBox::toggled, this, &FoldersTabsSettingsPage::changed); + + connect(m_closeSplitComboBox, qOverload<int>(&QComboBox::currentIndexChanged), this, &FoldersTabsSettingsPage::changed); connect(m_openNewTabAfterCurrentTab, &QRadioButton::toggled, this, &FoldersTabsSettingsPage::changed); connect(m_openNewTabAfterLastTab, &QRadioButton::toggled, this, &FoldersTabsSettingsPage::changed); @@ -174,7 +178,9 @@ void FoldersTabsSettingsPage::applySettings() GeneralSettings *settings = GeneralSettings::self(); settings->setUseTabForSwitchingSplitView(m_useTabForSplitViewSwitch->isChecked()); - settings->setCloseActiveSplitView(m_closeActiveSplitView->isChecked()); + + settings->setCloseSplitViewChoice(m_closeSplitComboBox->currentIndex()); + const QUrl url(QUrl::fromUserInput(m_homeUrl->text(), QString(), QUrl::AssumeLocalFile)); if (url.isValid() && KProtocolManager::supportsListing(url)) { KIO::StatJob *job = KIO::stat(url, KIO::StatJob::SourceSide, KIO::StatDetail::StatBasic, KIO::JobFlag::HideProgressInfo); @@ -280,7 +286,8 @@ void FoldersTabsSettingsPage::loadSettings() m_openExternallyCalledFolderInNewTab->setChecked(GeneralSettings::openExternallyCalledFolderInNewTab()); m_useTabForSplitViewSwitch->setChecked(GeneralSettings::useTabForSwitchingSplitView()); - m_closeActiveSplitView->setChecked(GeneralSettings::closeActiveSplitView()); + + m_closeSplitComboBox->setCurrentIndex(GeneralSettings::closeSplitViewChoice()); m_openNewTabAfterLastTab->setChecked(GeneralSettings::openNewTabAfterLastTab()); m_openNewTabAfterCurrentTab->setChecked(!m_openNewTabAfterLastTab->isChecked()); diff --git a/src/settings/interface/folderstabssettingspage.h b/src/settings/interface/folderstabssettingspage.h index 89e5c0982..ae104cc7e 100644 --- a/src/settings/interface/folderstabssettingspage.h +++ b/src/settings/interface/folderstabssettingspage.h @@ -13,6 +13,7 @@ #include <qobject.h> class QCheckBox; +class QComboBox; class QLineEdit; class QLabel; class QRadioButton; @@ -63,7 +64,8 @@ private: QCheckBox *m_showFullPathInTitlebar; QCheckBox *m_openExternallyCalledFolderInNewTab; QCheckBox *m_useTabForSplitViewSwitch; - QCheckBox *m_closeActiveSplitView; + + QComboBox *m_closeSplitComboBox; }; #endif |
