]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinnavigatorswidgetaction.cpp
Rewrite search integration
[dolphin.git] / src / dolphinnavigatorswidgetaction.cpp
index 7dc44f59db8904c115659070de4057256d3039fa..0095869b16446f2aacdd9ad2aefcbaa21a8e37b5 100644 (file)
@@ -18,6 +18,7 @@
 #include <QApplication>
 #include <QHBoxLayout>
 #include <QPushButton>
+#include <QStyle>
 #include <QToolBar>
 
 #include <limits>
@@ -34,6 +35,7 @@ DolphinNavigatorsWidgetAction::DolphinNavigatorsWidgetAction(QWidget *parent)
     m_splitter->setChildrenCollapsible(false);
 
     m_splitter->addWidget(createNavigatorWidget(Primary));
+    m_splitter->setFocusProxy(primaryUrlNavigator());
 
     m_adjustSpacingTimer->setInterval(100);
     m_adjustSpacingTimer->setSingleShot(true);
@@ -45,7 +47,7 @@ void DolphinNavigatorsWidgetAction::adjustSpacing()
     m_previousWindowWidth = qobject_cast<QWidget *>(parent())->window()->width();
     auto viewGeometries = m_viewGeometriesHelper.viewGeometries();
     const int widthOfSplitterPrimary = viewGeometries.globalXOfPrimary + viewGeometries.widthOfPrimary - viewGeometries.globalXOfNavigatorsWidget;
-    const QList<int> splitterSizes = {widthOfSplitterPrimary, m_splitter->width() - widthOfSplitterPrimary};
+    const QList<int> splitterSizes = {widthOfSplitterPrimary, m_splitter->width() - widthOfSplitterPrimary - m_splitter->handleWidth()};
     m_splitter->setSizes(splitterSizes);
 
     // primary side of m_splitter
@@ -133,9 +135,13 @@ void DolphinNavigatorsWidgetAction::setSecondaryNavigatorVisible(bool visible)
 {
     if (visible) {
         Q_ASSERT(m_splitter->count() == 2);
+        m_splitter->widget(0)->setContentsMargins(0, 0, m_splitter->style()->pixelMetric(QStyle::PM_LayoutRightMargin), 0);
+        m_splitter->widget(1)->setContentsMargins(m_splitter->style()->pixelMetric(QStyle::PM_LayoutLeftMargin), 0, 0, 0);
         m_splitter->widget(1)->setVisible(true);
     } else if (m_splitter->count() > 1) {
         m_splitter->widget(1)->setVisible(false);
+        m_splitter->widget(0)->setContentsMargins(0, 0, 0, 0);
+        m_splitter->widget(1)->setContentsMargins(0, 0, 0, 0);
         // Fix an unlikely event of wrong trash button visibility.
         emptyTrashButton(Secondary)->setVisible(false);
     }
@@ -171,6 +177,7 @@ QWidget *DolphinNavigatorsWidgetAction::createNavigatorWidget(Side side) const
     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);
@@ -224,7 +231,7 @@ QPushButton *DolphinNavigatorsWidgetAction::emptyTrashButton(DolphinNavigatorsWi
 
 QPushButton *DolphinNavigatorsWidgetAction::newEmptyTrashButton(const DolphinUrlNavigator *urlNavigator, QWidget *parent) const
 {
-    auto emptyTrashButton = new QPushButton(QIcon::fromTheme(QStringLiteral("user-trash")), i18nc("@action:button", "Empty Trash"), parent);
+    auto emptyTrashButton = new QPushButton(QIcon::fromTheme(QStringLiteral("edit-delete")), i18nc("@action:button", "Empty Trash"), parent);
     emptyTrashButton->setToolTip(i18n("Empties Trash to create free space"));
 
     emptyTrashButton->setFlat(true);
@@ -253,8 +260,8 @@ QPushButton *DolphinNavigatorsWidgetAction::newNetworkFolderButton(const Dolphin
 {
     auto networkFolderButton = new QPushButton(QIcon::fromTheme(QStringLiteral("folder-add")), i18nc("@action:button", "Add Network Folder"), parent);
     networkFolderButton->setFlat(true);
-    KService::Ptr service = KService::serviceByDesktopName(QStringLiteral("org.kde.knetattach"));
-    connect(networkFolderButton, &QPushButton::clicked, this, [networkFolderButton, service]() {
+    connect(networkFolderButton, &QPushButton::clicked, this, [networkFolderButton]() {
+        const KService::Ptr service = KService::serviceByDesktopName(QStringLiteral("org.kde.knetattach"));
         auto *job = new KIO::ApplicationLauncherJob(service, networkFolderButton);
         auto *delegate = new KNotificationJobUiDelegate;
         delegate->setAutoErrorHandlingEnabled(true);
@@ -262,8 +269,14 @@ QPushButton *DolphinNavigatorsWidgetAction::newNetworkFolderButton(const Dolphin
         job->start();
     });
     networkFolderButton->hide();
-    connect(urlNavigator, &KUrlNavigator::urlChanged, this, [networkFolderButton, urlNavigator, service]() {
-        networkFolderButton->setVisible(service && urlNavigator->locationUrl().scheme() == QLatin1String("remote"));
+    connect(urlNavigator, &KUrlNavigator::urlChanged, this, [networkFolderButton, urlNavigator]() {
+        if (urlNavigator->locationUrl().scheme() == QLatin1String("remote")) {
+            // Looking up a service can be a bit slow, so we only do it now when it becomes necessary.
+            const KService::Ptr service = KService::serviceByDesktopName(QStringLiteral("org.kde.knetattach"));
+            networkFolderButton->setVisible(service);
+        } else {
+            networkFolderButton->setVisible(false);
+        }
     });
     return networkFolderButton;
 }