From 37327c9b0aae112c5890703cba1f0157043007e0 Mon Sep 17 00:00:00 2001 From: Felix Ernst Date: Sun, 20 Sep 2020 18:53:59 +0200 Subject: Make UrlNavigators in the toolbar the only option The UrlNavigators will be automatically added to the toolbar. The Sort By action is removed from the default toolbar to make space. Remove all options to have UrlNavigators outside the toolbar and remove those code paths. Make it so the new NavigatorsWidgetAction contains two UrlNavigators when in split view mode. Spacing was also added to align these UrlNavigators with the ViewContainers when enough space is available. Force the toolbar to be either at the top or bottom of the window. Set a sane sizeHint for DolphinUrlNavigator. It would be better to do this in KUrlNavigator in the future. This commit also contains a changes which should be moved to a separate merge requests before this gets merged: - Add an expansion animation when split view is enabled by the user --- src/dolphinnavigatorswidgetaction.cpp | 243 ++++++++++++++++++++++++++++++++++ 1 file changed, 243 insertions(+) create mode 100644 src/dolphinnavigatorswidgetaction.cpp (limited to 'src/dolphinnavigatorswidgetaction.cpp') diff --git a/src/dolphinnavigatorswidgetaction.cpp b/src/dolphinnavigatorswidgetaction.cpp new file mode 100644 index 000000000..bd2985d47 --- /dev/null +++ b/src/dolphinnavigatorswidgetaction.cpp @@ -0,0 +1,243 @@ +/* + This file is part of the KDE project + SPDX-FileCopyrightText: 2020 Felix Ernst + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#include "dolphinnavigatorswidgetaction.h" + +#include "trash/dolphintrash.h" + +#include +#include +#include + +#include +#include +#include +#include + +DolphinNavigatorsWidgetAction::DolphinNavigatorsWidgetAction(QWidget *parent) : + QWidgetAction{parent}, + m_splitter{new QSplitter(Qt::Horizontal)}, + m_adjustSpacingTimer{new QTimer(this)}, + m_globalXOfPrimary{-1}, + m_widthOfPrimary{-1}, + m_globalXOfSecondary{-1}, + m_widthOfSecondary{-1} +{ + setText(i18nc("@action:inmenu", "Url navigator")); + + m_splitter->setChildrenCollapsible(false); + setDefaultWidget(m_splitter.get()); + + m_splitter->addWidget(createNavigatorWidget(Primary)); + + m_adjustSpacingTimer->setInterval(100); + m_adjustSpacingTimer->setSingleShot(true); + connect(m_adjustSpacingTimer.get(), &QTimer::timeout, + this, &DolphinNavigatorsWidgetAction::adjustSpacing); +} + +bool DolphinNavigatorsWidgetAction::addToToolbarAndSave(KXmlGuiWindow *mainWindow) +{ + const QString rawXml = KXMLGUIFactory::readConfigFile(mainWindow->xmlFile()); + QDomDocument domDocument; + if (rawXml.isEmpty() || !domDocument.setContent(rawXml) || domDocument.isNull()) { + return false; + } + QDomNode toolbar = domDocument.elementsByTagName(QStringLiteral("ToolBar")).at(0); + if (toolbar.isNull()) { + return false; + } + + QDomElement urlNavigatorElement = domDocument.createElement(QStringLiteral("Action")); + urlNavigatorElement.setAttribute(QStringLiteral("name"), QStringLiteral("url_navigators")); + + QDomNode position = toolbar.lastChildElement(QStringLiteral("Spacer")); + if (position.isNull()) { + toolbar.appendChild(urlNavigatorElement); + } else { + toolbar.replaceChild(urlNavigatorElement, position); + } + + KXMLGUIFactory::saveConfigFile(domDocument, mainWindow->xmlFile()); + mainWindow->reloadXML(); + mainWindow->createGUI(); + return true; +} + +void DolphinNavigatorsWidgetAction::createSecondaryUrlNavigator() +{ + Q_ASSERT(m_splitter->count() == 1); + m_splitter->addWidget(createNavigatorWidget(Secondary)); + Q_ASSERT(m_splitter->count() == 2); +} + +void DolphinNavigatorsWidgetAction::followViewContainerGeometry( + int globalXOfPrimary, int widthOfPrimary) +{ + followViewContainersGeometry(globalXOfPrimary, widthOfPrimary, -1, -1); +} + +void DolphinNavigatorsWidgetAction::followViewContainersGeometry( + int globalXOfPrimary, int widthOfPrimary, + int globalXOfSecondary, int widthOfSecondary) +{ + m_globalXOfSplitter = m_splitter->mapToGlobal(QPoint(0,0)).x(); + m_globalXOfPrimary = globalXOfPrimary; + m_widthOfPrimary = widthOfPrimary; + m_globalXOfSecondary = globalXOfSecondary; + m_widthOfSecondary = widthOfSecondary; + adjustSpacing(); +} + +DolphinUrlNavigator* DolphinNavigatorsWidgetAction::primaryUrlNavigator() const +{ + Q_ASSERT(m_splitter); + return static_cast(m_splitter->widget(0)->findChild()); +} + +DolphinUrlNavigator* DolphinNavigatorsWidgetAction::secondaryUrlNavigator() const +{ + Q_ASSERT(m_splitter); + if (m_splitter->count() < 2) { + return nullptr; + } + return static_cast(m_splitter->widget(1)->findChild()); +} + +void DolphinNavigatorsWidgetAction::setSecondaryNavigatorVisible(bool visible) +{ + if (visible) { + Q_ASSERT(m_splitter->count() == 2); + m_splitter->widget(1)->setVisible(true); + } else if (m_splitter->count() > 1) { + m_splitter->widget(1)->setVisible(false); + // Fix an unlikely event of wrong trash button visibility. + emptyTrashButton(Secondary)->setVisible(false); + } +} + +void DolphinNavigatorsWidgetAction::adjustSpacing() +{ + const int widthOfSplitterPrimary = m_globalXOfPrimary + m_widthOfPrimary - m_globalXOfSplitter; + const QList splitterSizes = {widthOfSplitterPrimary, + m_splitter->width() - widthOfSplitterPrimary}; + m_splitter->setSizes(splitterSizes); + + // primary side of m_splitter + int leadingSpacing = m_globalXOfPrimary - m_globalXOfSplitter; + if (leadingSpacing < 0) { + leadingSpacing = 0; + } + int trailingSpacing = (m_globalXOfSplitter + m_splitter->width()) + - (m_globalXOfPrimary + m_widthOfPrimary); + if (trailingSpacing < 0 || emptyTrashButton(Primary)->isVisible()) { + trailingSpacing = 0; + } + const int widthLeftForUrlNavigator = m_splitter->widget(0)->width() - leadingSpacing - trailingSpacing; + const int widthNeededForUrlNavigator = primaryUrlNavigator()->sizeHint().width() - widthLeftForUrlNavigator; + if (widthNeededForUrlNavigator > 0) { + trailingSpacing -= widthNeededForUrlNavigator; + if (trailingSpacing < 0) { + leadingSpacing += trailingSpacing; + trailingSpacing = 0; + } + if (leadingSpacing < 0) { + leadingSpacing = 0; + } + } + spacing(Primary, Leading)->setMinimumWidth(leadingSpacing); + spacing(Primary, Trailing)->setFixedWidth(trailingSpacing); + + // secondary side of m_splitter + if (m_globalXOfSecondary == -1) { + Q_ASSERT(m_widthOfSecondary == -1); + return; + } + spacing(Primary, Trailing)->setFixedWidth(0); + + trailingSpacing = (m_globalXOfSplitter + m_splitter->width()) + - (m_globalXOfSecondary + m_widthOfSecondary); + if (trailingSpacing < 0 || emptyTrashButton(Secondary)->isVisible()) { + trailingSpacing = 0; + } else { + const int widthLeftForUrlNavigator2 = m_splitter->widget(1)->width() - trailingSpacing; + const int widthNeededForUrlNavigator2 = secondaryUrlNavigator()->sizeHint().width() - widthLeftForUrlNavigator2; + if (widthNeededForUrlNavigator2 > 0) { + trailingSpacing -= widthNeededForUrlNavigator2; + if (trailingSpacing < 0) { + trailingSpacing = 0; + } + } + } + spacing(Secondary, Trailing)->setMinimumWidth(trailingSpacing); +} + +QWidget *DolphinNavigatorsWidgetAction::createNavigatorWidget(Side side) const +{ + auto navigatorWidget = new QWidget(m_splitter.get()); + auto layout = new QHBoxLayout{navigatorWidget}; + layout->setSpacing(0); + layout->setContentsMargins(0, 0, 0, 0); + if (side == Primary) { + auto leadingSpacing = new QWidget{navigatorWidget}; + layout->addWidget(leadingSpacing); + } + auto urlNavigator = new DolphinUrlNavigator(navigatorWidget); + layout->addWidget(urlNavigator); + + auto emptyTrashButton = newEmptyTrashButton(urlNavigator, navigatorWidget); + layout->addWidget(emptyTrashButton); + + connect(urlNavigator, &KUrlNavigator::urlChanged, [this]() { + // We have to wait for DolphinUrlNavigator::sizeHint() to update which + // happens a little bit later than when urlChanged is emitted. + this->m_adjustSpacingTimer->start(); + }); + + auto trailingSpacing = new QWidget{navigatorWidget}; + layout->addWidget(trailingSpacing); + return navigatorWidget; +} + +QPushButton * DolphinNavigatorsWidgetAction::emptyTrashButton(DolphinNavigatorsWidgetAction::Side side) +{ + int sideIndex = (side == Primary ? 0 : 1); + if (side == Primary) { + return static_cast(m_splitter->widget(sideIndex)->layout()->itemAt(2)->widget()); + } + return static_cast(m_splitter->widget(sideIndex)->layout()->itemAt(1)->widget()); +} + +QPushButton *DolphinNavigatorsWidgetAction::newEmptyTrashButton(const DolphinUrlNavigator *urlNavigator, QWidget *parent) const +{ + auto emptyTrashButton = new QPushButton(QIcon::fromTheme(QStringLiteral("user-trash")), + i18nc("@action:button", "Empty Trash"), parent); + emptyTrashButton->setFlat(true); + connect(emptyTrashButton, &QPushButton::clicked, + this, [parent]() { Trash::empty(parent); }); + connect(&Trash::instance(), &Trash::emptinessChanged, + emptyTrashButton, &QPushButton::setDisabled); + emptyTrashButton->hide(); + connect(urlNavigator, &KUrlNavigator::urlChanged, [emptyTrashButton, urlNavigator]() { + emptyTrashButton->setVisible(urlNavigator->locationUrl().scheme() == QLatin1String("trash")); + }); + emptyTrashButton->setDisabled(Trash::isEmpty()); + return emptyTrashButton; +} + +QWidget *DolphinNavigatorsWidgetAction::spacing(Side side, Position position) const +{ + int sideIndex = (side == Primary ? 0 : 1); + if (position == Leading) { + Q_ASSERT(side == Primary); // The secondary side of the splitter has no leading spacing. + return m_splitter->widget(sideIndex)->layout()->itemAt(0)->widget(); + } + if (side == Primary) { + return m_splitter->widget(sideIndex)->layout()->itemAt(3)->widget(); + } + return m_splitter->widget(sideIndex)->layout()->itemAt(2)->widget(); +} -- cgit v1.3 From 42023831374496c62708ce7ad2cdd69104a1c820 Mon Sep 17 00:00:00 2001 From: Felix Ernst Date: Thu, 5 Nov 2020 16:28:13 +0100 Subject: Apply Méven Car's suggestions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/dolphinmainwindow.cpp | 9 +++------ src/dolphinnavigatorswidgetaction.cpp | 15 +++++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) (limited to 'src/dolphinnavigatorswidgetaction.cpp') diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 8b389ce9b..e3435685f 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -143,9 +143,6 @@ DolphinMainWindow::DolphinMainWindow() : setAcceptDrops(true); 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"); @@ -915,17 +912,17 @@ void DolphinMainWindow::goBack() void DolphinMainWindow::goForward() { - m_activeViewContainer->urlNavigator()->goForward(); + m_activeViewContainer->urlNavigatorInternalWithHistory()->goForward(); } void DolphinMainWindow::goUp() { - m_activeViewContainer->urlNavigator()->goUp(); + m_activeViewContainer->urlNavigatorInternalWithHistory()->goUp(); } void DolphinMainWindow::goHome() { - m_activeViewContainer->urlNavigator()->goHome(); + m_activeViewContainer->urlNavigatorInternalWithHistory()->goHome(); } void DolphinMainWindow::goBackInNewTab() diff --git a/src/dolphinnavigatorswidgetaction.cpp b/src/dolphinnavigatorswidgetaction.cpp index bd2985d47..11140347a 100644 --- a/src/dolphinnavigatorswidgetaction.cpp +++ b/src/dolphinnavigatorswidgetaction.cpp @@ -27,7 +27,10 @@ DolphinNavigatorsWidgetAction::DolphinNavigatorsWidgetAction(QWidget *parent) : m_globalXOfSecondary{-1}, m_widthOfSecondary{-1} { - setText(i18nc("@action:inmenu", "Url navigator")); + setText(i18nc( + "@action:inmenu When split view is enabled there are two otherwise one.", + "Url Navigator(s)")); + setIcon(QIcon::fromTheme(QStringLiteral("dialog-scripts"))); m_splitter->setChildrenCollapsible(false); setDefaultWidget(m_splitter.get()); @@ -55,7 +58,7 @@ bool DolphinNavigatorsWidgetAction::addToToolbarAndSave(KXmlGuiWindow *mainWindo QDomElement urlNavigatorElement = domDocument.createElement(QStringLiteral("Action")); urlNavigatorElement.setAttribute(QStringLiteral("name"), QStringLiteral("url_navigators")); - QDomNode position = toolbar.lastChildElement(QStringLiteral("Spacer")); + QDomNode position = toolbar.firstChildElement(QStringLiteral("Spacer")); if (position.isNull()) { toolbar.appendChild(urlNavigatorElement); } else { @@ -193,10 +196,10 @@ QWidget *DolphinNavigatorsWidgetAction::createNavigatorWidget(Side side) const layout->addWidget(emptyTrashButton); connect(urlNavigator, &KUrlNavigator::urlChanged, [this]() { - // We have to wait for DolphinUrlNavigator::sizeHint() to update which - // happens a little bit later than when urlChanged is emitted. - this->m_adjustSpacingTimer->start(); - }); + // We have to wait for DolphinUrlNavigator::sizeHint() to update which + // happens a little bit later than when urlChanged is emitted. + this->m_adjustSpacingTimer->start(); + }); auto trailingSpacing = new QWidget{navigatorWidget}; layout->addWidget(trailingSpacing); -- cgit v1.3 From 2d4d2ce9a14902ee5a2b236f8510596fc2f86b99 Mon Sep 17 00:00:00 2001 From: Felix Ernst Date: Thu, 5 Nov 2020 23:30:07 +0100 Subject: Adress most of the second round of Angelaccio's review comments This commit applies most suggestions which were made on the MR. Most notably the DolphinUrlNavigator class is split up which leads to the creation of a DolphinUrlNavigatorsController class. Additionally some minor coding style and const correctness changes are included. The error value of cached integers is changed from -1 to INT_MIN because situations could come up in which -1 would be a valid value. --- src/CMakeLists.txt | 1 + src/dolphinmainwindow.cpp | 27 ++++++------ src/dolphinnavigatorswidgetaction.cpp | 37 +++++++++++------ src/dolphinnavigatorswidgetaction.h | 22 ++++++---- src/dolphintabwidget.cpp | 1 - src/dolphintabwidget.h | 2 +- src/dolphinurlnavigator.cpp | 61 ++++----------------------- src/dolphinurlnavigator.h | 44 ++------------------ src/dolphinurlnavigatorscontroller.cpp | 67 ++++++++++++++++++++++++++++++ src/dolphinurlnavigatorscontroller.h | 76 ++++++++++++++++++++++++++++++++++ src/dolphinviewcontainer.cpp | 3 +- 11 files changed, 208 insertions(+), 133 deletions(-) create mode 100644 src/dolphinurlnavigatorscontroller.cpp create mode 100644 src/dolphinurlnavigatorscontroller.h (limited to 'src/dolphinnavigatorswidgetaction.cpp') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8fad34347..1955ce558 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -210,6 +210,7 @@ set(dolphinstatic_SRCS dolphintabpage.cpp dolphintabwidget.cpp dolphinurlnavigator.cpp + dolphinurlnavigatorscontroller.cpp trash/dolphintrash.cpp filterbar/filterbar.cpp panels/places/placespanel.cpp diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index e3435685f..0c4c3c881 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -14,8 +14,10 @@ #include "dolphinbookmarkhandler.h" #include "dolphindockwidget.h" #include "dolphincontextmenu.h" +#include "dolphinnavigatorswidgetaction.h" #include "dolphinnewfilemenu.h" #include "dolphinrecenttabsmenu.h" +#include "dolphinurlnavigatorscontroller.h" #include "dolphinviewcontainer.h" #include "dolphintabpage.h" #include "middleclickactioneventfilter.h" @@ -31,7 +33,6 @@ #include "views/draganddrophelper.h" #include "views/viewproperties.h" #include "views/dolphinnewfilemenuobserver.h" -#include "dolphinnavigatorswidgetaction.h" #include "dolphin_generalsettings.h" #include @@ -106,8 +107,7 @@ DolphinMainWindow::DolphinMainWindow() : m_placesPanel(nullptr), m_tearDownFromPlacesRequested(false), m_backAction(nullptr), - m_forwardAction(nullptr), - m_updateHistoryConnection{} + m_forwardAction(nullptr) { Q_INIT_RESOURCE(dolphin); @@ -210,7 +210,7 @@ DolphinMainWindow::~DolphinMainWindow() { } -QVector DolphinMainWindow::viewContainers() const +QVector DolphinMainWindow::viewContainers() const { QVector viewContainers; @@ -927,14 +927,14 @@ void DolphinMainWindow::goHome() void DolphinMainWindow::goBackInNewTab() { - KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigatorInternalWithHistory(); + const KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigatorInternalWithHistory(); const int index = urlNavigator->historyIndex() + 1; openNewTabAfterCurrentTab(urlNavigator->locationUrl(index)); } void DolphinMainWindow::goForwardInNewTab() { - KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigatorInternalWithHistory(); + const KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigatorInternalWithHistory(); const int index = urlNavigator->historyIndex() - 1; openNewTabAfterCurrentTab(urlNavigator->locationUrl(index)); } @@ -1066,7 +1066,8 @@ void DolphinMainWindow::editSettings() const QUrl url = container->url(); DolphinSettingsDialog* settingsDialog = new DolphinSettingsDialog(url, this); connect(settingsDialog, &DolphinSettingsDialog::settingsChanged, this, &DolphinMainWindow::refreshViews); - connect(settingsDialog, &DolphinSettingsDialog::settingsChanged, &DolphinUrlNavigator::slotReadSettings); + connect(settingsDialog, &DolphinSettingsDialog::settingsChanged, + &DolphinUrlNavigatorsController::slotReadSettings); settingsDialog->setAttribute(Qt::WA_DeleteOnClose); settingsDialog->show(); m_settingsDialog = settingsDialog; @@ -1898,14 +1899,14 @@ void DolphinMainWindow::setupDockWidgets() connect(this, &DolphinMainWindow::urlChanged, m_placesPanel, &PlacesPanel::setUrl); connect(placesDock, &DolphinDockWidget::visibilityChanged, - &DolphinUrlNavigator::slotPlacesPanelVisibilityChanged); + &DolphinUrlNavigatorsController::slotPlacesPanelVisibilityChanged); connect(this, &DolphinMainWindow::settingsChanged, m_placesPanel, &PlacesPanel::readSettings); connect(m_placesPanel, &PlacesPanel::storageTearDownRequested, this, &DolphinMainWindow::slotStorageTearDownFromPlacesRequested); connect(m_placesPanel, &PlacesPanel::storageTearDownExternallyRequested, this, &DolphinMainWindow::slotStorageTearDownExternallyRequested); - DolphinUrlNavigator::slotPlacesPanelVisibilityChanged(m_placesPanel->isVisible()); + DolphinUrlNavigatorsController::slotPlacesPanelVisibilityChanged(m_placesPanel->isVisible()); auto actionShowAllPlaces = new QAction(QIcon::fromTheme(QStringLiteral("view-hidden")), i18nc("@item:inmenu", "Show Hidden Places"), this); actionShowAllPlaces->setCheckable(true); @@ -2176,13 +2177,13 @@ void DolphinMainWindow::connectViewSignals(DolphinViewContainer* container) auto navigators = static_cast (actionCollection()->action(QStringLiteral("url_navigators"))); - KUrlNavigator *navigator = m_tabWidget->currentTabPage()->primaryViewActive() ? - navigators->primaryUrlNavigator() : - navigators->secondaryUrlNavigator(); + const KUrlNavigator *navigator = m_tabWidget->currentTabPage()->primaryViewActive() ? + navigators->primaryUrlNavigator() : + navigators->secondaryUrlNavigator(); connect(navigator, &KUrlNavigator::urlChanged, this, &DolphinMainWindow::changeUrl); - QAction* editableLocactionAction = actionCollection()->action(QStringLiteral("editable_location")); + QAction *editableLocactionAction = actionCollection()->action(QStringLiteral("editable_location")); editableLocactionAction->setChecked(navigator->isUrlEditable()); connect(navigator, &KUrlNavigator::editableStateChanged, this, &DolphinMainWindow::slotEditableStateChanged); diff --git a/src/dolphinnavigatorswidgetaction.cpp b/src/dolphinnavigatorswidgetaction.cpp index 11140347a..84f52279a 100644 --- a/src/dolphinnavigatorswidgetaction.cpp +++ b/src/dolphinnavigatorswidgetaction.cpp @@ -18,18 +18,19 @@ #include #include +#include + DolphinNavigatorsWidgetAction::DolphinNavigatorsWidgetAction(QWidget *parent) : QWidgetAction{parent}, m_splitter{new QSplitter(Qt::Horizontal)}, m_adjustSpacingTimer{new QTimer(this)}, - m_globalXOfPrimary{-1}, - m_widthOfPrimary{-1}, - m_globalXOfSecondary{-1}, - m_widthOfSecondary{-1} + m_globalXOfSplitter{INT_MIN}, + m_globalXOfPrimary{INT_MIN}, + m_widthOfPrimary{INT_MIN}, + m_globalXOfSecondary{INT_MIN}, + m_widthOfSecondary{INT_MIN} { - setText(i18nc( - "@action:inmenu When split view is enabled there are two otherwise one.", - "Url Navigator(s)")); + updateText(); setIcon(QIcon::fromTheme(QStringLiteral("dialog-scripts"))); m_splitter->setChildrenCollapsible(false); @@ -76,12 +77,13 @@ void DolphinNavigatorsWidgetAction::createSecondaryUrlNavigator() Q_ASSERT(m_splitter->count() == 1); m_splitter->addWidget(createNavigatorWidget(Secondary)); Q_ASSERT(m_splitter->count() == 2); + updateText(); } void DolphinNavigatorsWidgetAction::followViewContainerGeometry( int globalXOfPrimary, int widthOfPrimary) { - followViewContainersGeometry(globalXOfPrimary, widthOfPrimary, -1, -1); + followViewContainersGeometry(globalXOfPrimary, widthOfPrimary, INT_MIN, INT_MIN); } void DolphinNavigatorsWidgetAction::followViewContainersGeometry( @@ -99,7 +101,7 @@ void DolphinNavigatorsWidgetAction::followViewContainersGeometry( DolphinUrlNavigator* DolphinNavigatorsWidgetAction::primaryUrlNavigator() const { Q_ASSERT(m_splitter); - return static_cast(m_splitter->widget(0)->findChild()); + return m_splitter->widget(0)->findChild(); } DolphinUrlNavigator* DolphinNavigatorsWidgetAction::secondaryUrlNavigator() const @@ -108,7 +110,7 @@ DolphinUrlNavigator* DolphinNavigatorsWidgetAction::secondaryUrlNavigator() cons if (m_splitter->count() < 2) { return nullptr; } - return static_cast(m_splitter->widget(1)->findChild()); + return m_splitter->widget(1)->findChild(); } void DolphinNavigatorsWidgetAction::setSecondaryNavigatorVisible(bool visible) @@ -121,10 +123,14 @@ void DolphinNavigatorsWidgetAction::setSecondaryNavigatorVisible(bool visible) // Fix an unlikely event of wrong trash button visibility. emptyTrashButton(Secondary)->setVisible(false); } + updateText(); } void DolphinNavigatorsWidgetAction::adjustSpacing() { + Q_ASSERT(m_globalXOfSplitter != INT_MIN); + Q_ASSERT(m_globalXOfPrimary != INT_MIN); + Q_ASSERT(m_widthOfPrimary != INT_MIN); const int widthOfSplitterPrimary = m_globalXOfPrimary + m_widthOfPrimary - m_globalXOfSplitter; const QList splitterSizes = {widthOfSplitterPrimary, m_splitter->width() - widthOfSplitterPrimary}; @@ -156,8 +162,8 @@ void DolphinNavigatorsWidgetAction::adjustSpacing() spacing(Primary, Trailing)->setFixedWidth(trailingSpacing); // secondary side of m_splitter - if (m_globalXOfSecondary == -1) { - Q_ASSERT(m_widthOfSecondary == -1); + if (m_globalXOfSecondary == INT_MIN) { + Q_ASSERT(m_widthOfSecondary == INT_MIN); return; } spacing(Primary, Trailing)->setFixedWidth(0); @@ -244,3 +250,10 @@ QWidget *DolphinNavigatorsWidgetAction::spacing(Side side, Position position) co } return m_splitter->widget(sideIndex)->layout()->itemAt(2)->widget(); } + +void DolphinNavigatorsWidgetAction::updateText() +{ + const int urlNavigatorsAmount = m_splitter->count() > 1 && m_splitter->widget(1)->isVisible() ? + 2 : 1; + setText(i18ncp("@action:inmenu", "Url Navigator", "Url Navigators", urlNavigatorsAmount)); +} diff --git a/src/dolphinnavigatorswidgetaction.h b/src/dolphinnavigatorswidgetaction.h index 8046ce2dc..f343e6a1c 100644 --- a/src/dolphinnavigatorswidgetaction.h +++ b/src/dolphinnavigatorswidgetaction.h @@ -38,14 +38,6 @@ class DolphinNavigatorsWidgetAction : public QWidgetAction { Q_OBJECT - /** - * In Left-to-right languages the Primary side will be the left one. - */ - enum Side { - Primary, - Secondary - }; - public: DolphinNavigatorsWidgetAction(QWidget *parent = nullptr); @@ -95,7 +87,7 @@ public: */ void setSecondaryNavigatorVisible(bool visible); -protected: +private: /** * Adjusts the width of the spacings used to align the UrlNavigators with ViewContainers. * This can only work nicely if up-to-date geometry of ViewContainers is cached so @@ -103,6 +95,13 @@ protected: */ void adjustSpacing(); + /** + * In Left-to-right languages the Primary side will be the left one. + */ + enum Side { + Primary, + Secondary + }; /** * Used to create the navigatorWidgets for both sides of the QSplitter. */ @@ -133,6 +132,11 @@ protected: */ QWidget *spacing(Side side, Position position) const; + /** + * Sets this action's text depending on the amount of visible UrlNavigators. + */ + void updateText(); + /** * The defaultWidget() of this QWidgetAction. */ diff --git a/src/dolphintabwidget.cpp b/src/dolphintabwidget.cpp index eb3f741ee..94cdc627b 100644 --- a/src/dolphintabwidget.cpp +++ b/src/dolphintabwidget.cpp @@ -8,7 +8,6 @@ #include "dolphin_generalsettings.h" #include "dolphintabbar.h" -#include "dolphintabpage.h" #include "dolphinviewcontainer.h" #include diff --git a/src/dolphintabwidget.h b/src/dolphintabwidget.h index 707eb086a..4a1b9d99c 100644 --- a/src/dolphintabwidget.h +++ b/src/dolphintabwidget.h @@ -8,11 +8,11 @@ #define DOLPHIN_TAB_WIDGET_H #include "dolphinnavigatorswidgetaction.h" +#include "dolphintabpage.h" #include #include -class DolphinTabPage; class DolphinViewContainer; class KConfigGroup; diff --git a/src/dolphinurlnavigator.cpp b/src/dolphinurlnavigator.cpp index 2b7f3d4eb..f24cf2e06 100644 --- a/src/dolphinurlnavigator.cpp +++ b/src/dolphinurlnavigator.cpp @@ -9,6 +9,7 @@ #include "dolphin_generalsettings.h" #include "dolphinplacesmodelsingleton.h" +#include "dolphinurlnavigatorscontroller.h" #include "global.h" #include @@ -19,24 +20,17 @@ #include DolphinUrlNavigator::DolphinUrlNavigator(QWidget *parent) : - KUrlNavigator(DolphinPlacesModelSingleton::instance().placesModel(), QUrl(), parent) -{ - init(); -} + DolphinUrlNavigator(QUrl(), parent) +{} DolphinUrlNavigator::DolphinUrlNavigator(const QUrl &url, QWidget *parent) : KUrlNavigator(DolphinPlacesModelSingleton::instance().placesModel(), url, parent) -{ - init(); -} - -void DolphinUrlNavigator::init() { const GeneralSettings* settings = GeneralSettings::self(); setUrlEditable(settings->editableUrl()); setShowFullPath(settings->showFullPath()); setHomeUrl(Dolphin::homeUrl()); - setPlacesSelectorVisible(s_placesSelectorVisible); + setPlacesSelectorVisible(DolphinUrlNavigatorsController::placesSelectorVisible()); editor()->setCompletionMode(KCompletion::CompletionMode(settings->urlCompletionMode())); setWhatsThis(xi18nc("@info:whatsthis location bar", "This describes the location of the files and folders " @@ -51,22 +45,21 @@ void DolphinUrlNavigator::init() "click here. " "This will open the dedicated page in the Handbook.")); - s_instances.push_front(this); + DolphinUrlNavigatorsController::registerDolphinUrlNavigator(this); connect(this, &DolphinUrlNavigator::returnPressed, this, &DolphinUrlNavigator::slotReturnPressed); connect(editor(), &KUrlComboBox::completionModeChanged, - this, DolphinUrlNavigator::setCompletionMode); + DolphinUrlNavigatorsController::setCompletionMode); } DolphinUrlNavigator::~DolphinUrlNavigator() { - s_instances.remove(this); + DolphinUrlNavigatorsController::unregisterDolphinUrlNavigator(this); } QSize DolphinUrlNavigator::sizeHint() const { - // Change sizeHint() in KUrlNavigator instead. if (isUrlEditable()) { return editor()->lineEdit()->sizeHint(); } @@ -110,49 +103,9 @@ void DolphinUrlNavigator::setVisualState(const VisualState& visualState) } } -void DolphinUrlNavigator::slotReadSettings() -{ - // The startup settings should (only) get applied if they have been - // modified by the user. Otherwise keep the (possibly) different current - // settings of the URL navigators and split view. - if (GeneralSettings::modifiedStartupSettings()) { - for (DolphinUrlNavigator *urlNavigator : s_instances) { - urlNavigator->setUrlEditable(GeneralSettings::editableUrl()); - urlNavigator->setShowFullPath(GeneralSettings::showFullPath()); - urlNavigator->setHomeUrl(Dolphin::homeUrl()); - } - } -} - void DolphinUrlNavigator::slotReturnPressed() { if (!GeneralSettings::editableUrl()) { setUrlEditable(false); } } - -void DolphinUrlNavigator::slotPlacesPanelVisibilityChanged(bool visible) -{ - // The places-selector from the URL navigator should only be shown - // if the places dock is invisible - s_placesSelectorVisible = !visible; - - for (DolphinUrlNavigator *urlNavigator : s_instances) { - urlNavigator->setPlacesSelectorVisible(s_placesSelectorVisible); - } -} - -void DolphinUrlNavigator::setCompletionMode(const KCompletion::CompletionMode completionMode) -{ - if (completionMode != GeneralSettings::urlCompletionMode()) - { - GeneralSettings::setUrlCompletionMode(completionMode); - for (const DolphinUrlNavigator *urlNavigator : s_instances) - { - urlNavigator->editor()->setCompletionMode(completionMode); - } - } -} - -std::forward_list DolphinUrlNavigator::s_instances; -bool DolphinUrlNavigator::s_placesSelectorVisible = true; diff --git a/src/dolphinurlnavigator.h b/src/dolphinurlnavigator.h index 8f8d270ae..a15428799 100644 --- a/src/dolphinurlnavigator.h +++ b/src/dolphinurlnavigator.h @@ -8,17 +8,12 @@ #ifndef DOLPHINURLNAVIGATOR_H #define DOLPHINURLNAVIGATOR_H -#include #include -#include - -class KToggleAction; - /** - * @brief Extends KUrlNavigator in a Dolphin-specific way + * @brief Extends KUrlNavigator in a Dolphin-specific way. * - * Makes sure that Dolphin preferences, settings and settings changes are + * Makes sure that Dolphin preferences and settings are * applied to all constructed DolphinUrlNavigators. * * @see KUrlNavigator @@ -42,12 +37,7 @@ public: virtual ~DolphinUrlNavigator(); - /** - * This method is needed so the DolphinNavigatorWidgetAction knows when there is not enough - * space to neatly align the UrlNavigator with the ViewContainers. Unfortunately KUrlNavigator - * does not have a useful sizeHint() currently. It would make more sense to change - * KUrlNavigator instead. - */ + // TODO: Fix KUrlNavigator::sizeHint() instead. QSize sizeHint() const override; /** @@ -73,39 +63,11 @@ public: void setVisualState(const VisualState &visualState); public slots: - /** - * Refreshes all DolphinUrlNavigators to get synchronized with the - * Dolphin settings if they were changed. - */ - static void slotReadSettings(); - /** * Switches to "breadcrumb" mode if the editable mode is not set to be * preferred in the Dolphin settings. */ void slotReturnPressed(); - - static void slotPlacesPanelVisibilityChanged(bool visible); - -protected: - /** - * Constructor-helper function - */ - void init(); - -protected slots: - /** - * Sets the completion mode for all DolphinUrlNavigators - * and saves it in settings. - */ - static void setCompletionMode(const KCompletion::CompletionMode completionMode); - -protected: - /** Contains all currently constructed DolphinUrlNavigators */ - static std::forward_list s_instances; - - /** Caches the (negated) places panel visibility */ - static bool s_placesSelectorVisible; }; #endif // DOLPHINURLNAVIGATOR_H diff --git a/src/dolphinurlnavigatorscontroller.cpp b/src/dolphinurlnavigatorscontroller.cpp new file mode 100644 index 000000000..78fecd18a --- /dev/null +++ b/src/dolphinurlnavigatorscontroller.cpp @@ -0,0 +1,67 @@ +/* + This file is part of the KDE project + SPDX-FileCopyrightText: 2020 Felix Ernst + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#include "dolphinurlnavigatorscontroller.h" + +#include "dolphin_generalsettings.h" +#include "dolphinurlnavigator.h" +#include "global.h" + +#include + +void DolphinUrlNavigatorsController::slotReadSettings() +{ + // The startup settings should (only) get applied if they have been + // modified by the user. Otherwise keep the (possibly) different current + // settings of the URL navigators and split view. + if (GeneralSettings::modifiedStartupSettings()) { + for (DolphinUrlNavigator *urlNavigator : s_instances) { + urlNavigator->setUrlEditable(GeneralSettings::editableUrl()); + urlNavigator->setShowFullPath(GeneralSettings::showFullPath()); + urlNavigator->setHomeUrl(Dolphin::homeUrl()); + } + } +} + +void DolphinUrlNavigatorsController::slotPlacesPanelVisibilityChanged(bool visible) +{ + // The places-selector from the URL navigator should only be shown + // if the places dock is invisible + s_placesSelectorVisible = !visible; + + for (DolphinUrlNavigator *urlNavigator : s_instances) { + urlNavigator->setPlacesSelectorVisible(s_placesSelectorVisible); + } +} + +bool DolphinUrlNavigatorsController::placesSelectorVisible() +{ + return s_placesSelectorVisible; +} + +void DolphinUrlNavigatorsController::registerDolphinUrlNavigator(DolphinUrlNavigator *dolphinUrlNavigator) +{ + s_instances.push_front(dolphinUrlNavigator); +} + +void DolphinUrlNavigatorsController::unregisterDolphinUrlNavigator(DolphinUrlNavigator *dolphinUrlNavigator) +{ + s_instances.remove(dolphinUrlNavigator); +} + +void DolphinUrlNavigatorsController::setCompletionMode(const KCompletion::CompletionMode completionMode) +{ + if (completionMode != GeneralSettings::urlCompletionMode()) { + GeneralSettings::setUrlCompletionMode(completionMode); + for (const DolphinUrlNavigator *urlNavigator : s_instances) { + urlNavigator->editor()->setCompletionMode(completionMode); + } + } +} + +std::forward_list DolphinUrlNavigatorsController::s_instances; +bool DolphinUrlNavigatorsController::s_placesSelectorVisible = true; diff --git a/src/dolphinurlnavigatorscontroller.h b/src/dolphinurlnavigatorscontroller.h new file mode 100644 index 000000000..797cbf4f9 --- /dev/null +++ b/src/dolphinurlnavigatorscontroller.h @@ -0,0 +1,76 @@ +/* + This file is part of the KDE project + SPDX-FileCopyrightText: 2020 Felix Ernst + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#ifndef DOLPHINURLNAVIGATORSCONTROLLER_H +#define DOLPHINURLNAVIGATORSCONTROLLER_H + +#include + +#include + +#include + +class DolphinUrlNavigator; + +/** + * @brief A controller managing all DolphinUrlNavigators. + * + * This class is used to apply settings changes to all constructed DolphinUrlNavigators. + * + * @see DolphinUrlNavigator + */ +class DolphinUrlNavigatorsController : public QObject +{ + Q_OBJECT + +public: + DolphinUrlNavigatorsController() = delete; + +public slots: + /** + * Refreshes all DolphinUrlNavigators to get synchronized with the + * Dolphin settings if they were changed. + */ + static void slotReadSettings(); + + static void slotPlacesPanelVisibilityChanged(bool visible); + +private: + /** + * @return wether the places selector of DolphinUrlNavigators should be visible. + */ + static bool placesSelectorVisible(); + + /** + * Adds \p dolphinUrlNavigator to the list of DolphinUrlNavigators + * controlled by this class. + */ + static void registerDolphinUrlNavigator(DolphinUrlNavigator *dolphinUrlNavigator); + + /** + * Removes \p dolphinUrlNavigator from the list of DolphinUrlNavigators + * controlled by this class. + */ + static void unregisterDolphinUrlNavigator(DolphinUrlNavigator *dolphinUrlNavigator); + +private slots: + /** + * Sets the completion mode for all DolphinUrlNavigators and saves it in settings. + */ + static void setCompletionMode(const KCompletion::CompletionMode completionMode); + +private: + /** Contains all currently constructed DolphinUrlNavigators */ + static std::forward_list s_instances; + + /** Caches the (negated) places panel visibility */ + static bool s_placesSelectorVisible; + + friend class DolphinUrlNavigator; +}; + +#endif // DOLPHINURLNAVIGATORSCONTROLLER_H diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index 46968e9ff..9761f108f 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -53,8 +53,7 @@ DolphinViewContainer::DolphinViewContainer(const QUrl& url, QWidget* parent) : m_statusBar(nullptr), m_statusBarTimer(nullptr), m_statusBarTimestamp(), - m_autoGrabFocus(true), - m_urlNavigatorVisualState{} + m_autoGrabFocus(true) #ifdef HAVE_KACTIVITIES , m_activityResourceInstance(nullptr) #endif -- cgit v1.3 From 63f4981fe01d88b2ef1b27e0577d7f5d4c8cc485 Mon Sep 17 00:00:00 2001 From: Felix Ernst Date: Mon, 9 Nov 2020 14:25:15 +0100 Subject: Adress the third round of Angelaccio's review comments Additionally remove some redundant code concerning UrlNavigator visuals. --- src/dolphinnavigatorswidgetaction.cpp | 4 ++-- src/dolphintabpage.cpp | 9 +++------ src/dolphintabpage.h | 2 +- src/dolphintabwidget.cpp | 2 +- src/dolphinurlnavigator.cpp | 4 +--- src/dolphinurlnavigator.h | 6 +++++- src/dolphinurlnavigatorscontroller.cpp | 2 ++ src/dolphinviewcontainer.cpp | 5 +++-- 8 files changed, 18 insertions(+), 16 deletions(-) (limited to 'src/dolphinnavigatorswidgetaction.cpp') diff --git a/src/dolphinnavigatorswidgetaction.cpp b/src/dolphinnavigatorswidgetaction.cpp index 84f52279a..984e1f35c 100644 --- a/src/dolphinnavigatorswidgetaction.cpp +++ b/src/dolphinnavigatorswidgetaction.cpp @@ -201,7 +201,7 @@ QWidget *DolphinNavigatorsWidgetAction::createNavigatorWidget(Side side) const auto emptyTrashButton = newEmptyTrashButton(urlNavigator, navigatorWidget); layout->addWidget(emptyTrashButton); - connect(urlNavigator, &KUrlNavigator::urlChanged, [this]() { + connect(urlNavigator, &KUrlNavigator::urlChanged, this, [this]() { // We have to wait for DolphinUrlNavigator::sizeHint() to update which // happens a little bit later than when urlChanged is emitted. this->m_adjustSpacingTimer->start(); @@ -231,7 +231,7 @@ QPushButton *DolphinNavigatorsWidgetAction::newEmptyTrashButton(const DolphinUrl connect(&Trash::instance(), &Trash::emptinessChanged, emptyTrashButton, &QPushButton::setDisabled); emptyTrashButton->hide(); - connect(urlNavigator, &KUrlNavigator::urlChanged, [emptyTrashButton, urlNavigator]() { + connect(urlNavigator, &KUrlNavigator::urlChanged, this, [emptyTrashButton, urlNavigator]() { emptyTrashButton->setVisible(urlNavigator->locationUrl().scheme() == QLatin1String("trash")); }); emptyTrashButton->setDisabled(Trash::isEmpty()); diff --git a/src/dolphintabpage.cpp b/src/dolphintabpage.cpp index d196508a8..7f945dce2 100644 --- a/src/dolphintabpage.cpp +++ b/src/dolphintabpage.cpp @@ -159,11 +159,9 @@ void DolphinTabPage::connectNavigators(DolphinNavigatorsWidgetAction *navigators { m_navigatorsWidget = navigatorsWidget; auto primaryNavigator = navigatorsWidget->primaryUrlNavigator(); - primaryNavigator->setActive(m_primaryViewActive); m_primaryViewContainer->connectUrlNavigator(primaryNavigator); if (m_splitViewEnabled) { auto secondaryNavigator = navigatorsWidget->secondaryUrlNavigator(); - secondaryNavigator->setActive(!m_primaryViewActive); m_secondaryViewContainer->connectUrlNavigator(secondaryNavigator); } resizeNavigators(); @@ -178,12 +176,13 @@ void DolphinTabPage::disconnectNavigators() } } -bool DolphinTabPage::eventFilter(QObject */* watched */, QEvent *event) +bool DolphinTabPage::eventFilter(QObject *watched, QEvent *event) { if (event->type() == QEvent::Resize && m_navigatorsWidget) { resizeNavigators(); + return false; } - return false; + return QWidget::eventFilter(watched, event); } void DolphinTabPage::resizeNavigators() const @@ -292,11 +291,9 @@ void DolphinTabPage::restoreState(const QByteArray& state) stream >> m_primaryViewActive; if (m_primaryViewActive) { m_primaryViewContainer->setActive(true); - m_navigatorsWidget->primaryUrlNavigator()->setActive(true); } else { Q_ASSERT(m_splitViewEnabled); m_secondaryViewContainer->setActive(true); - m_navigatorsWidget->primaryUrlNavigator()->setActive(false); } QByteArray splitterState; diff --git a/src/dolphintabpage.h b/src/dolphintabpage.h index 650594214..b874d128f 100644 --- a/src/dolphintabpage.h +++ b/src/dolphintabpage.h @@ -83,7 +83,7 @@ public: /** * Calls resizeNavigators() when a watched object is resized. */ - bool eventFilter(QObject */* watched */, QEvent *event) override; + bool eventFilter(QObject *watched, QEvent *event) override; /** * Notify the connected DolphinNavigatorsWidgetAction of geometry changes which it diff --git a/src/dolphintabwidget.cpp b/src/dolphintabwidget.cpp index 94cdc627b..da8f76d7c 100644 --- a/src/dolphintabwidget.cpp +++ b/src/dolphintabwidget.cpp @@ -406,7 +406,7 @@ void DolphinTabWidget::currentTabChanged(int index) tabPage->setActive(true); tabPage->connectNavigators(m_navigatorsWidget); m_navigatorsWidget->setSecondaryNavigatorVisible(tabPage->splitViewEnabled()); - m_lastViewedTab = tabPageAt(index); + m_lastViewedTab = tabPage; } void DolphinTabWidget::tabInserted(int index) diff --git a/src/dolphinurlnavigator.cpp b/src/dolphinurlnavigator.cpp index f24cf2e06..1dfe5420f 100644 --- a/src/dolphinurlnavigator.cpp +++ b/src/dolphinurlnavigator.cpp @@ -47,10 +47,8 @@ DolphinUrlNavigator::DolphinUrlNavigator(const QUrl &url, QWidget *parent) : DolphinUrlNavigatorsController::registerDolphinUrlNavigator(this); - connect(this, &DolphinUrlNavigator::returnPressed, + connect(this, &KUrlNavigator::returnPressed, this, &DolphinUrlNavigator::slotReturnPressed); - connect(editor(), &KUrlComboBox::completionModeChanged, - DolphinUrlNavigatorsController::setCompletionMode); } DolphinUrlNavigator::~DolphinUrlNavigator() diff --git a/src/dolphinurlnavigator.h b/src/dolphinurlnavigator.h index a15428799..9bcc32b4d 100644 --- a/src/dolphinurlnavigator.h +++ b/src/dolphinurlnavigator.h @@ -15,8 +15,9 @@ * * Makes sure that Dolphin preferences and settings are * applied to all constructed DolphinUrlNavigators. - * * @see KUrlNavigator + * + * To apply changes to all instances of this class @see DolphinUrlNavigatorsController. */ class DolphinUrlNavigator : public KUrlNavigator { @@ -55,6 +56,9 @@ public: /** * Retrieve the visual state of this DolphinUrlNavigator. * If two DolphinUrlNavigators have the same visual state they should look identical. + * + * @return a copy of the visualState of this object. Ownership of this copy is transferred + * to the caller via std::unique_ptr. */ std::unique_ptr visualState() const; /** diff --git a/src/dolphinurlnavigatorscontroller.cpp b/src/dolphinurlnavigatorscontroller.cpp index 78fecd18a..59e1d6356 100644 --- a/src/dolphinurlnavigatorscontroller.cpp +++ b/src/dolphinurlnavigatorscontroller.cpp @@ -46,6 +46,8 @@ bool DolphinUrlNavigatorsController::placesSelectorVisible() void DolphinUrlNavigatorsController::registerDolphinUrlNavigator(DolphinUrlNavigator *dolphinUrlNavigator) { s_instances.push_front(dolphinUrlNavigator); + connect(dolphinUrlNavigator->editor(), &KUrlComboBox::completionModeChanged, + DolphinUrlNavigatorsController::setCompletionMode); } void DolphinUrlNavigatorsController::unregisterDolphinUrlNavigator(DolphinUrlNavigator *dolphinUrlNavigator) diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index 9761f108f..0fe8ee9d3 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -291,11 +291,11 @@ void DolphinViewContainer::connectUrlNavigator(DolphinUrlNavigator *urlNavigator Q_CHECK_PTR(m_view); urlNavigator->setLocationUrl(m_view->url()); - urlNavigator->setActive(isActive()); if (m_urlNavigatorVisualState) { urlNavigator->setVisualState(*m_urlNavigatorVisualState.get()); m_urlNavigatorVisualState.reset(); } + urlNavigator->setActive(isActive()); connect(m_view, &DolphinView::urlChanged, urlNavigator, &DolphinUrlNavigator::setLocationUrl); @@ -307,7 +307,8 @@ void DolphinViewContainer::connectUrlNavigator(DolphinUrlNavigator *urlNavigator this, &DolphinViewContainer::slotUrlNavigatorLocationAboutToBeChanged); connect(urlNavigator, &DolphinUrlNavigator::urlSelectionRequested, this, &DolphinViewContainer::slotUrlSelectionRequested); - connect(urlNavigator, &DolphinUrlNavigator::urlsDropped, this, [=](const QUrl &destination, QDropEvent *event) { + connect(urlNavigator, &DolphinUrlNavigator::urlsDropped, + this, [=](const QUrl &destination, QDropEvent *event) { m_view->dropUrls(destination, event, urlNavigator->dropWidget()); }); -- cgit v1.3