X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/08a4edad3ee4ab4b997e5a7567b0ea685cad078d..93151bd392bb131bd5b714732fb1f9d8726f65a0:/src/dolphincontextmenu.cpp diff --git a/src/dolphincontextmenu.cpp b/src/dolphincontextmenu.cpp index ed6db0c12..7a529d184 100644 --- a/src/dolphincontextmenu.cpp +++ b/src/dolphincontextmenu.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -30,7 +31,6 @@ #include #include #include -#include #include #include @@ -43,7 +43,8 @@ DolphinContextMenu::DolphinContextMenu(DolphinMainWindow* parent, const QPoint& pos, const KFileItem& fileInfo, - const QUrl& baseUrl) : + const QUrl& baseUrl, + KFileItemActions *fileItemActions) : QMenu(parent), m_pos(pos), m_mainWindow(parent), @@ -56,14 +57,18 @@ DolphinContextMenu::DolphinContextMenu(DolphinMainWindow* parent, m_copyToMenu(parent), m_customActions(), m_command(None), - m_removeAction(nullptr) + m_removeAction(nullptr), + m_fileItemActions(fileItemActions) { // The context menu either accesses the URLs of the selected items // or the items itself. To increase the performance both lists are cached. const DolphinView* view = m_mainWindow->activeViewContainer()->view(); m_selectedItems = view->selectedItems(); - installEventFilter(this); + QApplication::instance()->installEventFilter(this); + + static_cast(m_mainWindow->actionCollection()-> + action(QStringLiteral("hamburger_menu")))->addToMenu(this); } DolphinContextMenu::~DolphinContextMenu() @@ -112,28 +117,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(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 +149,6 @@ void DolphinContextMenu::openTrashContextMenu() QAction* propertiesAction = m_mainWindow->actionCollection()->action(QStringLiteral("properties")); addAction(propertiesAction); - addShowMenuBarAction(); - if (exec(m_pos) == emptyTrashAction) { Trash::empty(m_mainWindow); } @@ -183,7 +181,7 @@ void DolphinContextMenu::openTrashItemContextMenu() } } -void DolphinContextMenu::addDirectoryItemContextMenu(KFileItemActions &fileItemActions) +void DolphinContextMenu::addDirectoryItemContextMenu() { // insert 'Open in new window' and 'Open in new tab' entries const KFileItemListProperties& selectedItemsProps = selectedItemsProperties(); @@ -195,7 +193,7 @@ void DolphinContextMenu::addDirectoryItemContextMenu(KFileItemActions &fileItemA } // Insert 'Open With' entries - addOpenWithActions(fileItemActions); + addOpenWithActions(); // set up 'Create New' menu DolphinNewFileMenu* newFileMenu = new DolphinNewFileMenu(m_mainWindow->actionCollection(), m_mainWindow); @@ -209,7 +207,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(); @@ -224,16 +222,15 @@ void DolphinContextMenu::openItemContextMenu() QAction* openParentInNewTabAction = nullptr; const KFileItemListProperties& selectedItemsProps = selectedItemsProperties(); - KFileItemActions fileItemActions; - fileItemActions.setParentWidget(m_mainWindow); - fileItemActions.setItemListProperties(selectedItemsProps); + + m_fileItemActions->setItemListProperties(selectedItemsProps); if (m_selectedItems.count() == 1) { // single files if (m_fileInfo.isDir()) { - addDirectoryItemContextMenu(fileItemActions); + addDirectoryItemContextMenu(); } else if (m_context & TimelineContext || m_context & SearchContext) { - addOpenWithActions(fileItemActions); + addOpenWithActions(); openParentAction = new QAction(QIcon::fromTheme(QStringLiteral("document-open-folder")), i18nc("@action:inmenu", @@ -256,7 +253,7 @@ void DolphinContextMenu::openItemContextMenu() addSeparator(); } else { // Insert 'Open With" entries - addOpenWithActions(fileItemActions); + addOpenWithActions(); } if (m_fileInfo.isLink()) { addAction(m_mainWindow->actionCollection()->action(QStringLiteral("show_target"))); @@ -278,12 +275,12 @@ void DolphinContextMenu::openItemContextMenu() addAction(m_mainWindow->actionCollection()->action(QStringLiteral("open_in_new_tabs"))); } // Insert 'Open With" entries - addOpenWithActions(fileItemActions); + addOpenWithActions(); } insertDefaultItemActions(selectedItemsProps); - addAdditionalActions(fileItemActions, selectedItemsProps); + addAdditionalActions(selectedItemsProps); // insert 'Copy To' and 'Move To' sub menus if (ContextMenuSettings::showCopyMoveMenu()) { @@ -315,9 +312,7 @@ void DolphinContextMenu::openViewportContextMenu() const DolphinView* view = m_mainWindow->activeViewContainer()->view(); const KFileItemListProperties baseUrlProperties(KFileItemList() << baseFileItem()); - KFileItemActions fileItemActions; - fileItemActions.setParentWidget(m_mainWindow); - fileItemActions.setItemListProperties(baseUrlProperties); + m_fileItemActions->setItemListProperties(baseUrlProperties); // Set up and insert 'Create New' menu KNewFileMenu* newFileMenu = m_mainWindow->newFileMenu(); @@ -328,7 +323,7 @@ void DolphinContextMenu::openViewportContextMenu() // Show "open with" menu items even if the dir is empty, because there are legitimate // use cases for this, such as opening an empty dir in Kate or VSCode or something - addOpenWithActions(fileItemActions); + addOpenWithActions(); QAction* pasteAction = createPasteAction(); if (pasteAction) { @@ -353,7 +348,7 @@ void DolphinContextMenu::openViewportContextMenu() addSeparator(); } - addAdditionalActions(fileItemActions, baseUrlProperties); + addAdditionalActions(baseUrlProperties); addCustomActions(); addSeparator(); @@ -361,8 +356,6 @@ void DolphinContextMenu::openViewportContextMenu() QAction* propertiesAction = m_mainWindow->actionCollection()->action(QStringLiteral("properties")); addAction(propertiesAction); - addShowMenuBarAction(); - exec(m_pos); } @@ -423,16 +416,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(); @@ -492,10 +475,10 @@ KFileItem DolphinContextMenu::baseFileItem() return *m_baseFileItem; } -void DolphinContextMenu::addOpenWithActions(KFileItemActions& fileItemActions) +void DolphinContextMenu::addOpenWithActions() { // insert 'Open With...' action or sub menu - fileItemActions.addOpenWithActionsTo(this, QStringLiteral("DesktopEntryName != '%1'").arg(qApp->desktopFileName())); + m_fileItemActions->addOpenWithActionsTo(this, QStringLiteral("DesktopEntryName != '%1'").arg(qApp->desktopFileName())); } void DolphinContextMenu::addCustomActions() @@ -503,7 +486,7 @@ void DolphinContextMenu::addCustomActions() addActions(m_customActions); } -void DolphinContextMenu::addAdditionalActions(KFileItemActions &fileItemActions, const KFileItemListProperties &props) +void DolphinContextMenu::addAdditionalActions(const KFileItemListProperties &props) { addSeparator(); @@ -511,7 +494,7 @@ void DolphinContextMenu::addAdditionalActions(KFileItemActions &fileItemActions, if (props.isDirectory() && props.isLocal() && ContextMenuSettings::showOpenTerminal()) { additionalActions << m_mainWindow->actionCollection()->action(QStringLiteral("open_terminal")); } - fileItemActions.addActionsTo(this, KFileItemActions::MenuActionSource::All, additionalActions); + m_fileItemActions->addActionsTo(this, KFileItemActions::MenuActionSource::All, additionalActions); const DolphinView* view = m_mainWindow->activeViewContainer()->view(); const QList versionControlActions = view->versionControlActions(m_selectedItems);