]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinmainwindow.cpp
dolphinmainwindow: zoom action is now a KToolBarPopupAction
[dolphin.git] / src / dolphinmainwindow.cpp
index efcd4190e36e066c6cec9d86438e0084d44acde6..78560d820605bad2b91080db25e7246927a3eeef 100644 (file)
@@ -29,6 +29,7 @@
 #include "search/dolphinquery.h"
 #include "selectionmode/actiontexthelper.h"
 #include "settings/dolphinsettingsdialog.h"
+#include "statusbar/diskspaceusagemenu.h"
 #include "statusbar/dolphinstatusbar.h"
 #include "views/dolphinnewfilemenuobserver.h"
 #include "views/dolphinremoteencoding.h"
@@ -126,6 +127,7 @@ DolphinMainWindow::DolphinMainWindow()
     , m_forwardAction(nullptr)
     , m_splitViewAction(nullptr)
     , m_splitViewMenuAction(nullptr)
+    , m_diskSpaceUsageMenu(nullptr)
     , m_sessionSaveTimer(nullptr)
     , m_sessionSaveWatcher(nullptr)
     , m_sessionSaveScheduled(false)
@@ -392,6 +394,7 @@ void DolphinMainWindow::changeUrl(const QUrl &url)
     updatePasteAction();
     updateViewActions();
     updateGoActions();
+    m_diskSpaceUsageMenu->setUrl(url);
 
     // will signal used urls to activities manager, too
     m_recentFiles->addUrl(url, QString(), "inode/directory");
@@ -760,6 +763,8 @@ void DolphinMainWindow::slotSaveSession()
         KConfig *config = KConfigGui::sessionConfig();
         saveGlobalProperties(config);
         savePropertiesInternal(config, 1);
+        KConfigGroup group = config->group(QStringLiteral("Number"));
+        group.writeEntry("NumberOfWindows", 1); // Makes session restore aware that there is a window to restore.
 
         auto future = QtConcurrent::run([config]() {
             config->sync();
@@ -1506,7 +1511,7 @@ void DolphinMainWindow::updateHamburgerMenu()
         menu = new QMenu(this);
         hamburgerMenu->setMenu(menu);
         hamburgerMenu->hideActionsOf(ac->action(QStringLiteral("basic_actions"))->menu());
-        hamburgerMenu->hideActionsOf(ac->action(QStringLiteral("zoom"))->menu());
+        hamburgerMenu->hideActionsOf(qobject_cast<KToolBarPopupAction *>(ac->action(QStringLiteral("zoom")))->popupMenu());
     } else {
         menu->clear();
     }
@@ -1557,15 +1562,18 @@ void DolphinMainWindow::updateHamburgerMenu()
     // The third group contains actions to change what one sees in the view
     // and to change the more general UI.
     if (!toolBar()->isVisible()
-        || (!toolbarActions.contains(ac->action(QStringLiteral("icons"))) && !toolbarActions.contains(ac->action(QStringLiteral("compact")))
-            && !toolbarActions.contains(ac->action(QStringLiteral("details"))) && !toolbarActions.contains(ac->action(QStringLiteral("view_mode"))))) {
+        || ((!toolbarActions.contains(ac->action(QStringLiteral("icons"))) && !toolbarActions.contains(ac->action(QStringLiteral("compact")))
+             && !toolbarActions.contains(ac->action(QStringLiteral("details"))) && !toolbarActions.contains(ac->action(QStringLiteral("view_mode"))))
+            && !toolbarActions.contains(ac->action(QStringLiteral("view_settings"))))) {
         menu->addAction(ac->action(QStringLiteral("view_mode")));
     }
-    menu->addAction(ac->action(QStringLiteral("show_hidden_files")));
-    menu->addAction(ac->action(QStringLiteral("sort")));
-    menu->addAction(ac->action(QStringLiteral("additional_info")));
-    if (!GeneralSettings::showStatusBar() || !GeneralSettings::showZoomSlider()) {
-        menu->addAction(ac->action(QStringLiteral("zoom")));
+    if (!toolBar()->isVisible() || !toolbarActions.contains(ac->action(QStringLiteral("view_settings")))) {
+        menu->addAction(ac->action(QStringLiteral("show_hidden_files")));
+        menu->addAction(ac->action(QStringLiteral("sort")));
+        menu->addAction(ac->action(QStringLiteral("additional_info")));
+        if (!GeneralSettings::showStatusBar() || !GeneralSettings::showZoomSlider()) {
+            menu->addAction(ac->action(QStringLiteral("zoom")));
+        }
     }
     menu->addAction(ac->action(QStringLiteral("panels")));
 
@@ -1621,6 +1629,7 @@ void DolphinMainWindow::activeViewChanged(DolphinViewContainer *viewContainer)
         if (auto secondaryUrlNavigator = navigators->secondaryUrlNavigator()) {
             secondaryUrlNavigator->disconnect(this);
         }
+        oldViewContainer->disconnect(m_diskSpaceUsageMenu);
 
         // except the requestItemInfo so that on hover the information panel can still be updated
         connect(oldViewContainer->view(), &DolphinView::requestItemInfo, this, &DolphinMainWindow::requestItemInfo);
@@ -1642,6 +1651,13 @@ void DolphinMainWindow::activeViewChanged(DolphinViewContainer *viewContainer)
     updateViewActions();
     updateGoActions();
     updateSearchAction();
+    connect(m_diskSpaceUsageMenu,
+            &DiskSpaceUsageMenu::showMessage,
+            viewContainer,
+            [viewContainer](const QString &message, KMessageWidget::MessageType messageType) {
+                viewContainer->showMessage(message, messageType);
+            });
+    connect(m_diskSpaceUsageMenu, &DiskSpaceUsageMenu::showInstallationProgress, viewContainer, &DolphinViewContainer::showProgress);
 
     const QUrl url = viewContainer->url();
     Q_EMIT urlChanged(url);
@@ -1710,7 +1726,11 @@ void DolphinMainWindow::setViewsToHomeIfMountPathOpen(const QString &mountPath)
 {
     const QVector<DolphinViewContainer *> theViewContainers = viewContainers();
     for (DolphinViewContainer *viewContainer : theViewContainers) {
-        if (viewContainer && viewContainer->url().toLocalFile().startsWith(mountPath)) {
+        if (!viewContainer) {
+            continue;
+        }
+        const auto viewPath = viewContainer->url().toLocalFile();
+        if (viewPath.startsWith(mountPath + QLatin1String("/")) || viewPath == mountPath) {
             viewContainer->setUrl(QUrl::fromLocalFile(QDir::homePath()));
         }
     }
@@ -2085,6 +2105,12 @@ void DolphinMainWindow::setupActions()
     compareFiles->setEnabled(false);
     connect(compareFiles, &QAction::triggered, this, &DolphinMainWindow::compareFiles);
 
+    QAction *manageDiskSpaceUsage = actionCollection()->addAction(QStringLiteral("manage_disk_space"));
+    manageDiskSpaceUsage->setText(i18nc("@action:inmenu Tools", "Manage Disk Space Usage"));
+    manageDiskSpaceUsage->setIcon(QIcon::fromTheme(QStringLiteral("filelight")));
+    m_diskSpaceUsageMenu = new DiskSpaceUsageMenu{this};
+    manageDiskSpaceUsage->setMenu(m_diskSpaceUsageMenu);
+
     QAction *openPreferredSearchTool = actionCollection()->addAction(QStringLiteral("open_preferred_search_tool"));
     openPreferredSearchTool->setText(i18nc("@action:inmenu Tools", "Open Preferred Search Tool"));
     openPreferredSearchTool->setWhatsThis(xi18nc("@info:whatsthis",