X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/2c564cc1f9d5d31df22d9d1f1b3202e5b0dccbda..815bb8d514d70d79ef5f3fd7fffa95850f761d55:/src/dolphinmainwindow.cpp diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 3acbfdd02..03486a9cf 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -118,6 +118,8 @@ DolphinMainWindow::DolphinMainWindow() , m_sessionSaveTimer(nullptr) , m_sessionSaveWatcher(nullptr) , m_sessionSaveScheduled(false) + , m_splitViewAction(nullptr) + , m_splitViewMenuAction(nullptr) { Q_INIT_RESOURCE(dolphin); @@ -989,8 +991,9 @@ void DolphinMainWindow::popoutSplitView() DolphinTabPage *tabPage = m_tabWidget->currentTabPage(); if (!tabPage->splitViewEnabled()) return; - openNewWindow(tabPage->activeViewContainer()->url()); + openNewWindow((GeneralSettings::closeActiveSplitView() ? tabPage->activeViewContainer() : tabPage->inactiveViewContainer())->url()); tabPage->setSplitViewEnabled(false, WithAnimation); + updateSplitActions(); } void DolphinMainWindow::toggleSplitStash() @@ -1205,8 +1208,9 @@ QPointer DolphinMainWindow::preferredSearchTool() auto *action = new QAction(QIcon::fromTheme(kfind->icon()), kfind->name(), this); - connect(action, &QAction::triggered, this, [kfind] { + connect(action, &QAction::triggered, this, [this, kfind] { auto *job = new KIO::ApplicationLauncherJob(kfind); + job->setUrls({m_activeViewContainer->url()}); job->start(); }); @@ -1829,14 +1833,21 @@ void DolphinMainWindow::setupActions() // setup 'View' menu // (note that most of it is set up in DolphinViewActionHandler) - QAction *split = actionCollection()->addAction(QStringLiteral("split_view")); - split->setWhatsThis(xi18nc("@info:whatsthis find", - "This splits " - "the folder view below into two autonomous views.This " - "way you can see two locations at once and move items between them " - "quickly.Click this again afterwards to recombine the views.")); - actionCollection()->setDefaultShortcut(split, Qt::Key_F3); - connect(split, &QAction::triggered, this, &DolphinMainWindow::toggleSplitView); + m_splitViewAction = actionCollection()->add(QStringLiteral("split_view")); + m_splitViewMenuAction = actionCollection()->addAction(QStringLiteral("split_view_menu")); + + m_splitViewAction->setWhatsThis(xi18nc("@info:whatsthis find", + "This splits " + "the folder view below into two autonomous views.This " + "way you can see two locations at once and move items between them " + "quickly.Click this again afterwards to recombine the views.")); + m_splitViewMenuAction->setWhatsThis(m_splitViewAction->whatsThis()); + + // only set it for the menu version + actionCollection()->setDefaultShortcut(m_splitViewMenuAction, Qt::Key_F3); + + connect(m_splitViewAction, &QAction::triggered, this, &DolphinMainWindow::toggleSplitView); + connect(m_splitViewMenuAction, &QAction::triggered, this, &DolphinMainWindow::toggleSplitView); QAction *popoutSplit = actionCollection()->addAction(QStringLiteral("popout_split_view")); popoutSplit->setWhatsThis(xi18nc("@info:whatsthis", @@ -2524,30 +2535,54 @@ void DolphinMainWindow::connectViewSignals(DolphinViewContainer *container) void DolphinMainWindow::updateSplitActions() { - QAction *splitAction = actionCollection()->action(QStringLiteral("split_view")); QAction *popoutSplitAction = actionCollection()->action(QStringLiteral("popout_split_view")); + + auto setActionPopupMode = [this](KActionMenu *action, QToolButton::ToolButtonPopupMode popupMode) { + action->setPopupMode(popupMode); + if (auto *buttonForAction = qobject_cast(toolBar()->widgetForAction(action))) { + buttonForAction->setPopupMode(popupMode); + } + }; + const DolphinTabPage *tabPage = m_tabWidget->currentTabPage(); if (tabPage->splitViewEnabled()) { if (GeneralSettings::closeActiveSplitView() ? tabPage->primaryViewActive() : !tabPage->primaryViewActive()) { - splitAction->setText(i18nc("@action:intoolbar Close left view", "Close")); - splitAction->setToolTip(i18nc("@info", "Close left view")); - splitAction->setIcon(QIcon::fromTheme(QStringLiteral("view-left-close"))); + 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"))); popoutSplitAction->setText(i18nc("@action:intoolbar Move left split view to a new window", "Pop out")); popoutSplitAction->setToolTip(i18nc("@info", "Move left split view to a new window")); } else { - splitAction->setText(i18nc("@action:intoolbar Close right view", "Close")); - splitAction->setToolTip(i18nc("@info", "Close right view")); - splitAction->setIcon(QIcon::fromTheme(QStringLiteral("view-right-close"))); + m_splitViewAction->setText(i18nc("@action:intoolbar Close right view", "Close")); + m_splitViewAction->setToolTip(i18nc("@info", "Close right view")); + m_splitViewAction->setIcon(QIcon::fromTheme(QStringLiteral("view-right-close"))); popoutSplitAction->setText(i18nc("@action:intoolbar Move right split view to a new window", "Pop out")); popoutSplitAction->setToolTip(i18nc("@info", "Move right split view to a new window")); } - popoutSplitAction->setVisible(true); + popoutSplitAction->setEnabled(true); + if (!m_splitViewAction->menu()) { + setActionPopupMode(m_splitViewAction, QToolButton::MenuButtonPopup); + m_splitViewAction->setMenu(new QMenu); + m_splitViewAction->addAction(popoutSplitAction); + } } else { - splitAction->setText(i18nc("@action:intoolbar Split view", "Split")); - splitAction->setToolTip(i18nc("@info", "Split view")); - splitAction->setIcon(QIcon::fromTheme(QStringLiteral("view-right-new"))); - popoutSplitAction->setVisible(false); + m_splitViewAction->setText(i18nc("@action:intoolbar Split view", "Split")); + m_splitViewAction->setToolTip(i18nc("@info", "Split view")); + m_splitViewAction->setIcon(QIcon::fromTheme(QStringLiteral("view-right-new"))); + popoutSplitAction->setText(i18nc("@action:intoolbar Move active split view to a new window", "Pop out")); + popoutSplitAction->setEnabled(false); + if (m_splitViewAction->menu()) { + m_splitViewAction->removeAction(popoutSplitAction); + m_splitViewAction->menu()->deleteLater(); + m_splitViewAction->setMenu(nullptr); + setActionPopupMode(m_splitViewAction, QToolButton::DelayedPopup); + } } + + // Update state from toolbar action + m_splitViewMenuAction->setText(m_splitViewAction->text()); + m_splitViewMenuAction->setToolTip(m_splitViewAction->toolTip()); + m_splitViewMenuAction->setIcon(m_splitViewAction->icon()); } void DolphinMainWindow::updateAllowedToolbarAreas()