┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/dolphinmainwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/dolphinmainwindow.cpp')
-rw-r--r--src/dolphinmainwindow.cpp121
1 files changed, 30 insertions, 91 deletions
diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp
index 381d95013..6a93de078 100644
--- a/src/dolphinmainwindow.cpp
+++ b/src/dolphinmainwindow.cpp
@@ -31,7 +31,7 @@
#include "views/draganddrophelper.h"
#include "views/viewproperties.h"
#include "views/dolphinnewfilemenuobserver.h"
-#include "views/dolphinurlnavigatorwidgetaction.h"
+#include "dolphinnavigatorswidgetaction.h"
#include "dolphin_generalsettings.h"
#include <KActionCollection>
@@ -49,7 +49,6 @@
#include <KJobWidgets>
#include <KLocalizedString>
#include <KMessageBox>
-#include <KMessageWidget>
#include <KNS3/KMoreToolsMenuFactory>
#include <KProtocolInfo>
#include <KProtocolManager>
@@ -107,7 +106,8 @@ DolphinMainWindow::DolphinMainWindow() :
m_placesPanel(nullptr),
m_tearDownFromPlacesRequested(false),
m_backAction(nullptr),
- m_forwardAction(nullptr)
+ m_forwardAction(nullptr),
+ m_updateHistoryConnection{}
{
Q_INIT_RESOURCE(dolphin);
@@ -142,7 +142,12 @@ DolphinMainWindow::DolphinMainWindow() :
setAcceptDrops(true);
- m_tabWidget = new DolphinTabWidget(this);
+ auto *navigatorsWidgetAction = new DolphinNavigatorsWidgetAction(this);
+ navigatorsWidgetAction->setText(i18nc(
+ "@action:inmenu When split view is enabled there are two otherwise one.",
+ "Url Navigator(s)"));
+ actionCollection()->addAction(QStringLiteral("url_navigators"), navigatorsWidgetAction);
+ m_tabWidget = new DolphinTabWidget(navigatorsWidgetAction, this);
m_tabWidget->setObjectName("tabWidget");
connect(m_tabWidget, &DolphinTabWidget::activeViewChanged,
this, &DolphinMainWindow::activeViewChanged);
@@ -167,6 +172,11 @@ DolphinMainWindow::DolphinMainWindow() :
setupGUI(Keys | Save | Create | ToolBar);
stateChanged(QStringLiteral("new_file"));
+ toolBar()->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea);
+ toolBar()->setFloatable(false);
+ if (!toolBar()->actions().contains(navigatorsWidgetAction)) {
+ navigatorsWidgetAction->addToToolbarAndSave(this);
+ }
QClipboard* clipboard = QApplication::clipboard();
connect(clipboard, &QClipboard::dataChanged,
this, &DolphinMainWindow::updatePasteAction);
@@ -843,64 +853,6 @@ void DolphinMainWindow::showFilterBar()
m_activeViewContainer->setFilterBarVisible(true);
}
-void DolphinMainWindow::toggleLocationInToolbar()
-{
- // collect needed variables
- QAction *locationInToolbarAction = actionCollection()->action(QStringLiteral("location_in_toolbar"));
- const bool locationInToolbar = locationInToolbarAction->isChecked();
- auto viewContainers = this->viewContainers();
- auto urlNavigatorWidgetAction = static_cast<DolphinUrlNavigatorWidgetAction *>
- (actionCollection()->action(QStringLiteral("url_navigator")));
- const bool isEditable = m_activeViewContainer->urlNavigator()->isUrlEditable();
- const QLineEdit *lineEdit = m_activeViewContainer->urlNavigator()->editor()->lineEdit();
- const bool hasFocus = lineEdit->hasFocus();
- const int cursorPosition = lineEdit->cursorPosition();
- const int selectionStart = lineEdit->selectionStart();
- const int selectionLength = lineEdit->selectionLength();
-
- if (locationInToolbar && !toolBar()->actions().contains(urlNavigatorWidgetAction)) {
- // There is no UrlNavigator on the toolbar. Try to fix it. Otherwise show an error.
- if (!urlNavigatorWidgetAction->addToToolbarAndSave(this)) {
- QAction *configureToolbars = actionCollection()->action(KStandardAction::name(KStandardAction::ConfigureToolbars));
- KMessageWidget *messageWidget = m_activeViewContainer->showMessage(
- xi18nc("@info 2 is the visible text on a button just below the message",
- "The location could not be moved onto the toolbar because there is currently "
- "no \"%1\" item on the toolbar. Select <interface>%2</interface> and add the "
- "\"%1\" item. Then this will work.", urlNavigatorWidgetAction->iconText(),
- configureToolbars->iconText()), DolphinViewContainer::Information);
- messageWidget->addAction(configureToolbars);
- messageWidget->addAction(locationInToolbarAction);
- locationInToolbarAction->setChecked(false);
- return;
- }
- }
-
- // do the switching
- GeneralSettings::setLocationInToolbar(locationInToolbar);
- if (locationInToolbar) {
- for (const auto viewContainer : viewContainers) {
- viewContainer->disconnectUrlNavigator();
- }
- m_activeViewContainer->connectUrlNavigator(urlNavigatorWidgetAction->urlNavigator());
- } else {
- m_activeViewContainer->disconnectUrlNavigator();
- for (const auto viewContainer : viewContainers) {
- viewContainer->connectToInternalUrlNavigator();
- }
- }
-
- urlNavigatorWidgetAction->setUrlNavigatorVisible(locationInToolbar);
- m_activeViewContainer->urlNavigator()->setUrlEditable(isEditable);
- if (hasFocus) { // the rest of this method is unneeded perfectionism
- m_activeViewContainer->urlNavigator()->editor()->lineEdit()->setText(lineEdit->text());
- m_activeViewContainer->urlNavigator()->editor()->lineEdit()->setFocus();
- m_activeViewContainer->urlNavigator()->editor()->lineEdit()->setCursorPosition(cursorPosition);
- if (selectionStart != -1) {
- m_activeViewContainer->urlNavigator()->editor()->lineEdit()->setSelection(selectionStart, selectionLength);
- }
- }
-}
-
void DolphinMainWindow::toggleEditLocation()
{
clearStatusBar();
@@ -1314,9 +1266,11 @@ void DolphinMainWindow::activeViewChanged(DolphinViewContainer* viewContainer)
// view and url navigator) and main window.
oldViewContainer->disconnect(this);
oldViewContainer->view()->disconnect(this);
- oldViewContainer->urlNavigator()->disconnect(this);
- if (GeneralSettings::locationInToolbar()) {
- oldViewContainer->disconnectUrlNavigator();
+ auto navigators = static_cast<DolphinNavigatorsWidgetAction *>
+ (actionCollection()->action(QStringLiteral("url_navigators")));
+ navigators->primaryUrlNavigator()->disconnect(this);
+ if (auto secondaryUrlNavigator = navigators->secondaryUrlNavigator()) {
+ secondaryUrlNavigator->disconnect(this);
}
// except the requestItemInfo so that on hover the information panel can still be updated
@@ -1324,10 +1278,6 @@ void DolphinMainWindow::activeViewChanged(DolphinViewContainer* viewContainer)
this, &DolphinMainWindow::requestItemInfo);
}
- if (GeneralSettings::locationInToolbar()) {
- viewContainer->connectUrlNavigator(static_cast<DolphinUrlNavigatorWidgetAction *>
- (actionCollection()->action(QStringLiteral("url_navigator")))->urlNavigator());
- }
connectViewSignals(viewContainer);
m_actionHandler->setCurrentView(viewContainer->view());
@@ -1559,16 +1509,6 @@ void DolphinMainWindow::setupActions()
stop->setIcon(QIcon::fromTheme(QStringLiteral("process-stop")));
connect(stop, &QAction::triggered, this, &DolphinMainWindow::stopLoading);
- KToggleAction* locationInToolbar = actionCollection()->add<KToggleAction>(QStringLiteral("location_in_toolbar"));
- locationInToolbar->setText(i18nc("@action:inmenu Navigation Bar", "Location in Toolbar"));
- locationInToolbar->setWhatsThis(xi18nc("@info:whatsthis",
- "This toggles between showing the <emphasis>path</emphasis> in the "
- "<emphasis>Location Bar</emphasis> and in the <emphasis>Toolbar</emphasis>."));
- actionCollection()->setDefaultShortcut(locationInToolbar, Qt::Key_F12);
- locationInToolbar->setChecked(GeneralSettings::locationInToolbar());
- connect(locationInToolbar, &KToggleAction::triggered, this, &DolphinMainWindow::toggleLocationInToolbar);
- DolphinUrlNavigator::addToContextMenu(locationInToolbar);
-
KToggleAction* editableLocation = actionCollection()->add<KToggleAction>(QStringLiteral("editable_location"));
editableLocation->setText(i18nc("@action:inmenu Navigation Bar", "Editable Location"));
editableLocation->setWhatsThis(xi18nc("@info:whatsthis",
@@ -1770,12 +1710,6 @@ void DolphinMainWindow::setupActions()
connect(activatePrevTab, &QAction::triggered, m_tabWidget, &DolphinTabWidget::activatePrevTab);
actionCollection()->setDefaultShortcuts(activatePrevTab, prevTabKeys);
- auto *urlNavigatorWidgetAction = new DolphinUrlNavigatorWidgetAction(this);
- urlNavigatorWidgetAction->setText(i18nc("@action:inmenu auto-hide: "
- "Depending on the settings this Widget is blank/invisible.",
- "Url Navigator (auto-hide)"));
- actionCollection()->addAction(QStringLiteral("url_navigator"), urlNavigatorWidgetAction);
-
// for context menu
QAction* showTarget = actionCollection()->addAction(QStringLiteral("show_target"));
showTarget->setText(i18nc("@action:inmenu", "Show Target"));
@@ -2107,10 +2041,6 @@ void DolphinMainWindow::updateViewActions()
showFilterBarAction->setChecked(m_activeViewContainer->isFilterBarVisible());
updateSplitAction();
-
- QAction* editableLocactionAction = actionCollection()->action(QStringLiteral("editable_location"));
- const KUrlNavigator* urlNavigator = m_activeViewContainer->urlNavigator();
- editableLocactionAction->setChecked(urlNavigator->isUrlEditable());
}
void DolphinMainWindow::updateGoActions()
@@ -2246,15 +2176,24 @@ void DolphinMainWindow::connectViewSignals(DolphinViewContainer* container)
connect(view, &DolphinView::goUpRequested,
this, &DolphinMainWindow::goUp);
- const KUrlNavigator* navigator = container->urlNavigator();
+ auto navigators = static_cast<DolphinNavigatorsWidgetAction *>
+ (actionCollection()->action(QStringLiteral("url_navigators")));
+ KUrlNavigator *navigator = m_tabWidget->currentTabPage()->primaryViewActive() ?
+ navigators->primaryUrlNavigator() :
+ navigators->secondaryUrlNavigator();
+
connect(navigator, &KUrlNavigator::urlChanged,
this, &DolphinMainWindow::changeUrl);
+ QAction* editableLocactionAction = actionCollection()->action(QStringLiteral("editable_location"));
+ editableLocactionAction->setChecked(navigator->isUrlEditable());
connect(navigator, &KUrlNavigator::editableStateChanged,
this, &DolphinMainWindow::slotEditableStateChanged);
connect(navigator, &KUrlNavigator::tabRequested,
this, &DolphinMainWindow::openNewTabAfterLastTab);
- connect(container->urlNavigatorInternalWithHistory(), &KUrlNavigator::historyChanged,
+ disconnect(m_updateHistoryConnection);
+ m_updateHistoryConnection = connect(
+ container->urlNavigatorInternalWithHistory(), &KUrlNavigator::historyChanged,
this, &DolphinMainWindow::updateHistory);
}