]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphincontextmenu.cpp
contextmenu: Listen to new error signal from KFileItemActions
[dolphin.git] / src / dolphincontextmenu.cpp
index eb3f641e5ae6ffe78e237c30e07d5b9cfbf67feb..01e1a4109ed2e3e32967bf985627170b1ebf9bf9 100644 (file)
@@ -22,6 +22,7 @@
 #include <KActionCollection>
 #include <KFileItemActions>
 #include <KFileItemListProperties>
+#include <KHamburgerMenu>
 #include <KIO/EmptyTrashJob>
 #include <KIO/JobUiDelegate>
 #include <KIO/Paste>
@@ -30,9 +31,9 @@
 #include <KLocalizedString>
 #include <KNewFileMenu>
 #include <KPluginMetaData>
-#include <KService>
 #include <KStandardAction>
 #include <KToolBar>
+#include <kio_version.h>
 
 #include <QApplication>
 #include <QClipboard>
@@ -63,7 +64,10 @@ DolphinContextMenu::DolphinContextMenu(DolphinMainWindow* parent,
     const DolphinView* view = m_mainWindow->activeViewContainer()->view();
     m_selectedItems = view->selectedItems();
 
-    installEventFilter(this);
+    QApplication::instance()->installEventFilter(this);
+
+    static_cast<KHamburgerMenu *>(m_mainWindow->actionCollection()->
+                action(QStringLiteral("hamburger_menu")))->addToMenu(this);
 }
 
 DolphinContextMenu::~DolphinContextMenu()
@@ -112,28 +116,23 @@ DolphinContextMenu::Command DolphinContextMenu::open()
     return m_command;
 }
 
-void DolphinContextMenu::childEvent(QChildEvent* event)
+bool DolphinContextMenu::eventFilter(QObject* object, QEvent* event)
 {
-    if(event->added()) {
-        event->child()->installEventFilter(this);
-    }
-    QMenu::childEvent(event);
-}
+    Q_UNUSED(object)
 
-bool DolphinContextMenu::eventFilter(QObject* dest, QEvent* event)
-{
     if(event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease) {
         QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
-        if(m_removeAction && keyEvent->key() == Qt::Key_Shift) {
-            if(event->type() == QEvent::KeyPress) {
+
+        if (m_removeAction && keyEvent->key() == Qt::Key_Shift) {
+            if (event->type() == QEvent::KeyPress) {
                 m_removeAction->update(DolphinRemoveAction::ShiftState::Pressed);
             } else {
                 m_removeAction->update(DolphinRemoveAction::ShiftState::Released);
             }
-            return true;
         }
     }
-    return QMenu::eventFilter(dest, event);
+
+    return false;
 }
 
 void DolphinContextMenu::openTrashContextMenu()
@@ -149,8 +148,6 @@ void DolphinContextMenu::openTrashContextMenu()
     QAction* propertiesAction = m_mainWindow->actionCollection()->action(QStringLiteral("properties"));
     addAction(propertiesAction);
 
-    addShowMenuBarAction();
-
     if (exec(m_pos) == emptyTrashAction) {
         Trash::empty(m_mainWindow);
     }
@@ -209,7 +206,7 @@ void DolphinContextMenu::addDirectoryItemContextMenu(KFileItemActions &fileItemA
 
     QMenu* menu = newFileMenu->menu();
     menu->setTitle(i18nc("@title:menu Create new folder, file, link, etc.", "Create New"));
-    menu->setIcon(QIcon::fromTheme(QStringLiteral("document-new")));
+    menu->setIcon(QIcon::fromTheme(QStringLiteral("list-add")));
     addMenu(menu);
 
     addSeparator();
@@ -226,6 +223,11 @@ void DolphinContextMenu::openItemContextMenu()
 
     KFileItemActions fileItemActions;
     fileItemActions.setParentWidget(m_mainWindow);
+#if KIO_VERSION >= QT_VERSION_CHECK(5, 82, 0)
+    connect(&fileItemActions, &KFileItemActions::error, this, [this](const QString &errorMessage) {
+        m_mainWindow->activeViewContainer()->showMessage(errorMessage, DolphinViewContainer::Error);
+    });
+#endif
     fileItemActions.setItemListProperties(selectedItemsProps);
 
     if (m_selectedItems.count() == 1) {
@@ -317,6 +319,11 @@ void DolphinContextMenu::openViewportContextMenu()
     const KFileItemListProperties baseUrlProperties(KFileItemList() << baseFileItem());
     KFileItemActions fileItemActions;
     fileItemActions.setParentWidget(m_mainWindow);
+#if KIO_VERSION >= QT_VERSION_CHECK(5, 82, 0)
+    connect(&fileItemActions, &KFileItemActions::error, this, [this](const QString &errorMessage) {
+        m_mainWindow->activeViewContainer()->showMessage(errorMessage, DolphinViewContainer::Error);
+    });
+#endif
     fileItemActions.setItemListProperties(baseUrlProperties);
 
     // Set up and insert 'Create New' menu
@@ -361,8 +368,6 @@ void DolphinContextMenu::openViewportContextMenu()
     QAction* propertiesAction = m_mainWindow->actionCollection()->action(QStringLiteral("properties"));
     addAction(propertiesAction);
 
-    addShowMenuBarAction();
-
     exec(m_pos);
 }
 
@@ -423,16 +428,6 @@ void DolphinContextMenu::insertDefaultItemActions(const KFileItemListProperties&
     }
 }
 
-void DolphinContextMenu::addShowMenuBarAction()
-{
-    const KActionCollection* ac = m_mainWindow->actionCollection();
-    QAction* showMenuBar = ac->action(KStandardAction::name(KStandardAction::ShowMenubar));
-    if (!m_mainWindow->menuBar()->isVisible() && !m_mainWindow->toolBar()->isVisible()) {
-        addSeparator();
-        addAction(showMenuBar);
-    }
-}
-
 bool DolphinContextMenu::placeExists(const QUrl& url) const
 {
     const KFilePlacesModel* placesModel = DolphinPlacesModelSingleton::instance().placesModel();
@@ -508,7 +503,7 @@ void DolphinContextMenu::addAdditionalActions(KFileItemActions &fileItemActions,
     addSeparator();
 
     QList<QAction *> additionalActions;
-    if (props.isDirectory() && props.isLocal()) {
+    if (props.isDirectory() && props.isLocal() && ContextMenuSettings::showOpenTerminal()) {
         additionalActions << m_mainWindow->actionCollection()->action(QStringLiteral("open_terminal"));
     }
     fileItemActions.addActionsTo(this, KFileItemActions::MenuActionSource::All, additionalActions);