]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Adress most of the second round of Angelaccio's review comments
authorFelix Ernst <fe.a.ernst@gmail.com>
Thu, 5 Nov 2020 22:30:07 +0000 (23:30 +0100)
committerElvis Angelaccio <elvis.angelaccio@kde.org>
Mon, 9 Nov 2020 22:49:07 +0000 (23:49 +0100)
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
src/dolphinmainwindow.cpp
src/dolphinnavigatorswidgetaction.cpp
src/dolphinnavigatorswidgetaction.h
src/dolphintabwidget.cpp
src/dolphintabwidget.h
src/dolphinurlnavigator.cpp
src/dolphinurlnavigator.h
src/dolphinurlnavigatorscontroller.cpp [new file with mode: 0644]
src/dolphinurlnavigatorscontroller.h [new file with mode: 0644]
src/dolphinviewcontainer.cpp

index 8fad3434711a08622ef514b18eaffa2ce14e5bc0..1955ce5581275443b0d2c7bf8bec6961d79030a7 100644 (file)
@@ -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
index e3435685f89395c19ff767b574757b8e1259ee29..0c4c3c88177b1f43b2fcb46763738e1b01284347 100644 (file)
 #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 <KActionCollection>
@@ -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<DolphinViewContainer *> DolphinMainWindow::viewContainers() const
+QVector<DolphinViewContainer*> DolphinMainWindow::viewContainers() const
 {
     QVector<DolphinViewContainer*> 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<DolphinNavigatorsWidgetAction *>
         (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);
-    QActioneditableLocactionAction = actionCollection()->action(QStringLiteral("editable_location"));
+    QAction *editableLocactionAction = actionCollection()->action(QStringLiteral("editable_location"));
     editableLocactionAction->setChecked(navigator->isUrlEditable());
     connect(navigator, &KUrlNavigator::editableStateChanged,
             this, &DolphinMainWindow::slotEditableStateChanged);
index 11140347a805312e6ef5eb2c89111b843c30f76f..84f52279a56471afc1bc109f56efd5e1b7ec3820 100644 (file)
 #include <QPushButton>
 #include <QSplitter>
 
+#include <limits>
+
 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<DolphinUrlNavigator *>(m_splitter->widget(0)->findChild<KUrlNavigator *>());
+    return m_splitter->widget(0)->findChild<DolphinUrlNavigator *>();
 }
 
 DolphinUrlNavigator* DolphinNavigatorsWidgetAction::secondaryUrlNavigator() const
@@ -108,7 +110,7 @@ DolphinUrlNavigator* DolphinNavigatorsWidgetAction::secondaryUrlNavigator() cons
     if (m_splitter->count() < 2) {
         return nullptr;
     }
-    return static_cast<DolphinUrlNavigator *>(m_splitter->widget(1)->findChild<KUrlNavigator *>());
+    return m_splitter->widget(1)->findChild<DolphinUrlNavigator *>();
 }
 
 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<int> 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));
+}
index 8046ce2dcb066ab9e200180dc88ff96f4f38e6bc..f343e6a1c23a1dc8dd32debf45b6d24d54be9417 100644 (file)
@@ -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.
      */
index eb3f741ee741be46e8a067313f95e62364c4925c..94cdc627b72e862058f359d50316b0aeafe180e8 100644 (file)
@@ -8,7 +8,6 @@
 
 #include "dolphin_generalsettings.h"
 #include "dolphintabbar.h"
-#include "dolphintabpage.h"
 #include "dolphinviewcontainer.h"
 
 #include <KConfigGroup>
index 707eb086ad4cd73468d4b1034e25e8ed1110fe55..4a1b9d99c1063101763449d020315f8cf8ace82f 100644 (file)
@@ -8,11 +8,11 @@
 #define DOLPHIN_TAB_WIDGET_H
 
 #include "dolphinnavigatorswidgetaction.h"
+#include "dolphintabpage.h"
 
 #include <QTabWidget>
 #include <QUrl>
 
-class DolphinTabPage;
 class DolphinViewContainer;
 class KConfigGroup;
 
index 2b7f3d4eb4d55d90c23c33821ded1b1260f29199..f24cf2e067ab700f93fa597f4fa242663d29d5aa 100644 (file)
@@ -9,6 +9,7 @@
 
 #include "dolphin_generalsettings.h"
 #include "dolphinplacesmodelsingleton.h"
+#include "dolphinurlnavigatorscontroller.h"
 #include "global.h"
 
 #include <KUrlComboBox>
 #include <QLineEdit>
 
 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",
         "<para>This describes the location of the files and folders "
@@ -51,22 +45,21 @@ void DolphinUrlNavigator::init()
         "<link url='help:/dolphin/location-bar.html'>click here</link>. "
         "This will open the dedicated page in the Handbook.</para>"));
 
-    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 *> DolphinUrlNavigator::s_instances;
-bool DolphinUrlNavigator::s_placesSelectorVisible = true;
index 8f8d270aebe445f9159e41e29c376f4585d2d5a4..a154287995a209b4e8c759d8fc1e2b0bfb9ce85a 100644 (file)
@@ -8,17 +8,12 @@
 #ifndef DOLPHINURLNAVIGATOR_H
 #define DOLPHINURLNAVIGATOR_H
 
-#include <KCompletion>
 #include <KUrlNavigator>
 
-#include <forward_list>
-
-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<DolphinUrlNavigator *> 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 (file)
index 0000000..78fecd1
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+    This file is part of the KDE project
+    SPDX-FileCopyrightText: 2020 Felix Ernst <fe.a.ernst@gmail.com>
+
+    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 <KUrlComboBox>
+
+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<DolphinUrlNavigator *> DolphinUrlNavigatorsController::s_instances;
+bool DolphinUrlNavigatorsController::s_placesSelectorVisible = true;
diff --git a/src/dolphinurlnavigatorscontroller.h b/src/dolphinurlnavigatorscontroller.h
new file mode 100644 (file)
index 0000000..797cbf4
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+    This file is part of the KDE project
+    SPDX-FileCopyrightText: 2020 Felix Ernst <fe.a.ernst@gmail.com>
+
+    SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
+*/
+
+#ifndef DOLPHINURLNAVIGATORSCONTROLLER_H
+#define DOLPHINURLNAVIGATORSCONTROLLER_H
+
+#include <KCompletion>
+
+#include <QObject>
+
+#include <forward_list>
+
+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<DolphinUrlNavigator *> s_instances;
+
+    /** Caches the (negated) places panel visibility */
+    static bool s_placesSelectorVisible;
+
+    friend class DolphinUrlNavigator;
+};
+
+#endif // DOLPHINURLNAVIGATORSCONTROLLER_H
index 46968e9ff6003f6c6a775eb8ef59c79eec8fbd39..9761f108fc84602ae83f51a3807151e215fbe333 100644 (file)
@@ -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