]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinmainwindow.cpp
Reuse KFileItemActions instance during lifetime of dolphin
[dolphin.git] / src / dolphinmainwindow.cpp
index 428e16547fa65714e3ea08cab7d3a08a6ca67609..fe39d4d2fbabf7e298cf0aef52d79e377ccce393 100644 (file)
@@ -65,6 +65,8 @@
 #include <KWindowSystem>
 #include <KXMLGUIFactory>
 
+#include <kio_version.h>
+
 #include <QApplication>
 #include <QClipboard>
 #include <QCloseEvent>
@@ -207,10 +209,19 @@ DolphinMainWindow::DolphinMainWindow() :
     connect(KSycoca::self(), QOverload<>::of(&KSycoca::databaseChanged), this, &DolphinMainWindow::updateOpenPreferredSearchToolAction);
 
     QTimer::singleShot(0, this, &DolphinMainWindow::updateOpenPreferredSearchToolAction);
+
+    m_fileItemActions.setParentWidget(this);
+#if KIO_VERSION >= QT_VERSION_CHECK(5, 82, 0)
+    connect(&m_fileItemActions, &KFileItemActions::error, this, [this](const QString &errorMessage) {
+        showErrorMessage(errorMessage);
+    });
+#endif
 }
 
 DolphinMainWindow::~DolphinMainWindow()
 {
+    // This fixes a crash on Wayland when closing the mainwindow while another dialog is open.
+    disconnect(QGuiApplication::clipboard(), &QClipboard::dataChanged, this, &DolphinMainWindow::updatePasteAction);
 }
 
 QVector<DolphinViewContainer*> DolphinMainWindow::viewContainers() const
@@ -1123,7 +1134,7 @@ void DolphinMainWindow::openContextMenu(const QPoint& pos,
                                         const QUrl& url,
                                         const QList<QAction*>& customActions)
 {
-    QPointer<DolphinContextMenu> contextMenu = new DolphinContextMenu(this, pos, item, url);
+    QPointer<DolphinContextMenu> contextMenu = new DolphinContextMenu(this, pos, item, url, &m_fileItemActions);
     contextMenu.data()->setCustomActions(customActions);
     const DolphinContextMenu::Command command = contextMenu.data()->open();
 
@@ -1222,6 +1233,7 @@ void DolphinMainWindow::updateHamburgerMenu()
         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")));
@@ -1368,7 +1380,7 @@ void DolphinMainWindow::setupActions()
     QMenu* menu = m_newFileMenu->menu();
     menu->setTitle(i18nc("@title:menu Create new folder, file, link, etc.", "Create New"));
     menu->setIcon(QIcon::fromTheme(QStringLiteral("list-add")));
-    m_newFileMenu->setDelayed(false);
+    m_newFileMenu->setPopupMode(QToolButton::InstantPopup);
     connect(menu, &QMenu::aboutToShow,
             this, &DolphinMainWindow::updateNewMenu);
 
@@ -1571,8 +1583,7 @@ void DolphinMainWindow::setupActions()
         m_backAction->setObjectName(backAction->objectName());
         m_backAction->setShortcuts(backAction->shortcuts());
     }
-    m_backAction->setDelayed(true);
-    m_backAction->setStickyMenu(false);
+    m_backAction->setPopupMode(QToolButton::DelayedPopup);
     connect(m_backAction, &QAction::triggered, this, &DolphinMainWindow::goBack);
     connect(m_backAction->menu(), &QMenu::aboutToShow, this, &DolphinMainWindow::slotAboutToShowBackPopupMenu);
     connect(m_backAction->menu(), &QMenu::triggered, this, &DolphinMainWindow::slotGoBack);
@@ -1615,8 +1626,7 @@ void DolphinMainWindow::setupActions()
         m_forwardAction->setObjectName(forwardAction->objectName());
         m_forwardAction->setShortcuts(forwardAction->shortcuts());
     }
-    m_forwardAction->setDelayed(true);
-    m_forwardAction->setStickyMenu(false);
+    m_forwardAction->setPopupMode(QToolButton::DelayedPopup);
     connect(m_forwardAction, &QAction::triggered, this, &DolphinMainWindow::goForward);
     connect(m_forwardAction->menu(), &QMenu::aboutToShow, this, &DolphinMainWindow::slotAboutToShowForwardPopupMenu);
     connect(m_forwardAction->menu(), &QMenu::triggered, this, &DolphinMainWindow::slotGoForward);
@@ -1674,7 +1684,7 @@ void DolphinMainWindow::setupActions()
     KActionMenu *bookmarkMenu = new KActionMenu(i18nc("@title:menu", "&Bookmarks"), this);
     bookmarkMenu->setIcon(QIcon::fromTheme(QStringLiteral("bookmarks")));
     // Make the toolbar button version work properly on click
-    bookmarkMenu->setDelayed(false);
+    bookmarkMenu->setPopupMode(QToolButton::InstantPopup);
     m_bookmarkHandler = new DolphinBookmarkHandler(this, actionCollection(), bookmarkMenu->menu(), this);
     actionCollection()->addAction(QStringLiteral("bookmarks"), bookmarkMenu);
 
@@ -1976,7 +1986,7 @@ void DolphinMainWindow::setupDockWidgets()
     KActionMenu* panelsMenu = new KActionMenu(i18nc("@action:inmenu View", "Show Panels"), this);
     actionCollection()->addAction(QStringLiteral("panels"), panelsMenu);
     panelsMenu->setIcon(QIcon::fromTheme(QStringLiteral("view-sidetree")));
-    panelsMenu->setDelayed(false);
+    panelsMenu->setPopupMode(QToolButton::InstantPopup);
     const KActionCollection* ac = actionCollection();
     panelsMenu->addAction(ac->action(QStringLiteral("show_places_panel")));
 #ifdef HAVE_BALOO