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/dolphinurlnavigatorscontroller.cpp | 67 ++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/dolphinurlnavigatorscontroller.cpp (limited to 'src/dolphinurlnavigatorscontroller.cpp') 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; -- 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/dolphinurlnavigatorscontroller.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