X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/533f050855a50212bba7be57a1590f9ce743e26d..55db38d5ecc1f13e17fecd7f3a5ea24421080b77:/src/dolphincontextmenu.cpp diff --git a/src/dolphincontextmenu.cpp b/src/dolphincontextmenu.cpp index 1f4e8f010..ca561b5c7 100644 --- a/src/dolphincontextmenu.cpp +++ b/src/dolphincontextmenu.cpp @@ -20,43 +20,41 @@ #include "dolphincontextmenu.h" +#include "dolphin_generalsettings.h" #include "dolphinmainwindow.h" #include "dolphinnewfilemenu.h" -#include "dolphinviewcontainer.h" -#include "dolphin_generalsettings.h" #include "dolphinremoveaction.h" +#include "dolphinviewcontainer.h" +#include "panels/places/placesitem.h" +#include "panels/places/placesitemmodel.h" +#include "trash/dolphintrash.h" +#include "views/dolphinview.h" +#include "views/viewmodecontroller.h" -#include #include +#include #include #include -#include #include #include #include +#include #include +#include #include #include #include #include -#include #include #include #include #include #include -#include #include +#include #include -#include -#include - - -#include "views/dolphinview.h" -#include "views/viewmodecontroller.h" - DolphinContextMenu::DolphinContextMenu(DolphinMainWindow* parent, const QPoint& pos, const KFileItem& fileInfo, @@ -83,6 +81,8 @@ DolphinContextMenu::DolphinContextMenu(DolphinMainWindow* parent, DolphinContextMenu::~DolphinContextMenu() { + delete m_baseFileItem; + m_baseFileItem = nullptr; delete m_selectedItemsProperties; m_selectedItemsProperties = nullptr; } @@ -142,8 +142,7 @@ void DolphinContextMenu::openTrashContextMenu() Q_ASSERT(m_context & TrashContext); QAction* emptyTrashAction = new QAction(QIcon::fromTheme(QStringLiteral("trash-empty")), i18nc("@action:inmenu", "Empty Trash"), this); - KConfig trashConfig(QStringLiteral("trashrc"), KConfig::SimpleConfig); - emptyTrashAction->setEnabled(!trashConfig.group("Status").readEntry("Empty", true)); + emptyTrashAction->setEnabled(!Trash::isEmpty()); addAction(emptyTrashAction); addCustomActions(); @@ -154,13 +153,7 @@ void DolphinContextMenu::openTrashContextMenu() addShowMenuBarAction(); if (exec(m_pos) == emptyTrashAction) { - KIO::JobUiDelegate uiDelegate; - uiDelegate.setWindow(m_mainWindow); - if (uiDelegate.askDeleteConfirmation(QList(), KIO::JobUiDelegate::EmptyTrash, KIO::JobUiDelegate::DefaultConfirmation)) { - KIO::Job* job = KIO::emptyTrash(); - KJobWidgets::setWindow(job, m_mainWindow); - job->uiDelegate()->setAutoErrorHandlingEnabled(true); - } + Trash::empty(m_mainWindow); } } @@ -170,6 +163,7 @@ void DolphinContextMenu::openTrashItemContextMenu() Q_ASSERT(m_context & ItemContext); QAction* restoreAction = new QAction(i18nc("@action:inmenu", "Restore"), m_mainWindow); + restoreAction->setShortcut(Qt::CTRL + Qt::Key_R); addAction(restoreAction); QAction* deleteAction = m_mainWindow->actionCollection()->action(KStandardAction::name(KStandardAction::DeleteFile)); @@ -201,9 +195,29 @@ void DolphinContextMenu::openItemContextMenu() QAction* addToPlacesAction = nullptr; const KFileItemListProperties& selectedItemsProps = selectedItemsProperties(); + KFileItemActions fileItemActions; + fileItemActions.setParentWidget(m_mainWindow); + fileItemActions.setItemListProperties(selectedItemsProps); + if (m_selectedItems.count() == 1) { if (m_fileInfo.isDir()) { - // setup 'Create New' menu + // insert 'Open in new window' and 'Open in new tab' entries + addAction(m_mainWindow->actionCollection()->action(QStringLiteral("open_in_new_window"))); + addAction(m_mainWindow->actionCollection()->action(QStringLiteral("open_in_new_tab"))); + + // Insert 'Open With' entries + addOpenWithActions(fileItemActions); + + // insert 'Add to Places' entry + if (!placeExists(m_fileInfo.url())) { + addToPlacesAction = addAction(QIcon::fromTheme(QStringLiteral("bookmark-new")), + i18nc("@action:inmenu Add selected folder to places", + "Add to Places")); + } + + addSeparator(); + + // set up 'Create New' menu DolphinNewFileMenu* newFileMenu = new DolphinNewFileMenu(m_mainWindow->actionCollection(), m_mainWindow); const DolphinView* view = m_mainWindow->activeViewContainer()->view(); newFileMenu->setViewShowsHiddenFiles(view->hiddenFilesShown()); @@ -217,21 +231,11 @@ void DolphinContextMenu::openItemContextMenu() menu->setTitle(i18nc("@title:menu Create new folder, file, link, etc.", "Create New")); menu->setIcon(QIcon::fromTheme(QStringLiteral("document-new"))); addMenu(menu); - addSeparator(); - - // insert 'Open in new window' and 'Open in new tab' entries - addAction(m_mainWindow->actionCollection()->action(QStringLiteral("open_in_new_window"))); - addAction(m_mainWindow->actionCollection()->action(QStringLiteral("open_in_new_tab"))); - - // insert 'Add to Places' entry - if (!placeExists(m_fileInfo.url())) { - addToPlacesAction = addAction(QIcon::fromTheme(QStringLiteral("bookmark-new")), - i18nc("@action:inmenu Add selected folder to places", - "Add to Places")); - } addSeparator(); } else if (m_baseUrl.scheme().contains(QStringLiteral("search")) || m_baseUrl.scheme().contains(QStringLiteral("timeline"))) { + addOpenWithActions(fileItemActions); + openParentAction = new QAction(QIcon::fromTheme(QStringLiteral("document-open-folder")), i18nc("@action:inmenu", "Open Path"), @@ -252,10 +256,20 @@ void DolphinContextMenu::openItemContextMenu() addSeparator(); } else if (!DolphinView::openItemAsFolderUrl(m_fileInfo).isEmpty()) { + // Insert 'Open With" entries + addOpenWithActions(fileItemActions); + // insert 'Open in new window' and 'Open in new tab' entries addAction(m_mainWindow->actionCollection()->action(QStringLiteral("open_in_new_window"))); addAction(m_mainWindow->actionCollection()->action(QStringLiteral("open_in_new_tab"))); + addSeparator(); + } else { + // Insert 'Open With" entries + addOpenWithActions(fileItemActions); + } + if (m_fileInfo.isLink()) { + addAction(m_mainWindow->actionCollection()->action(QStringLiteral("show_target"))); addSeparator(); } } else { @@ -271,18 +285,16 @@ void DolphinContextMenu::openItemContextMenu() if (selectionHasOnlyDirs) { // insert 'Open in new tab' entry addAction(m_mainWindow->actionCollection()->action(QStringLiteral("open_in_new_tabs"))); - addSeparator(); } + // Insert 'Open With" entries + addOpenWithActions(fileItemActions); } insertDefaultItemActions(selectedItemsProps); addSeparator(); - KFileItemActions fileItemActions; - fileItemActions.setItemListProperties(selectedItemsProps); - addServiceActions(fileItemActions); - + fileItemActions.addServiceActionsTo(this); fileItemActions.addPluginActionsTo(this); addVersionControlPluginActions(); @@ -296,6 +308,7 @@ void DolphinContextMenu::openItemContextMenu() } // insert 'Properties...' entry + addSeparator(); QAction* propertiesAction = m_mainWindow->actionCollection()->action(QStringLiteral("properties")); addAction(propertiesAction); @@ -329,9 +342,21 @@ void DolphinContextMenu::openViewportContextMenu() addMenu(newFileMenu->menu()); addSeparator(); + // Insert 'Open With' entries + KFileItem baseItem = view->rootItem(); + if (baseItem.isNull() || baseItem.url() != m_baseUrl) { + baseItem = baseFileItem(); + } + + const KFileItemListProperties baseUrlProperties(KFileItemList() << baseItem); + KFileItemActions fileItemActions; + fileItemActions.setParentWidget(m_mainWindow); + fileItemActions.setItemListProperties(baseUrlProperties); + addOpenWithActions(fileItemActions); + // Insert 'New Window' and 'New Tab' entries. Don't use "open_in_new_window" and // "open_in_new_tab" here, as the current selection should get ignored. - addAction(m_mainWindow->actionCollection()->action(QStringLiteral("new_window"))); + addAction(m_mainWindow->actionCollection()->action(QStringLiteral("file_new"))); addAction(m_mainWindow->actionCollection()->action(QStringLiteral("new_tab"))); // Insert 'Add to Places' entry if exactly one item is selected @@ -347,12 +372,14 @@ void DolphinContextMenu::openViewportContextMenu() addAction(pasteAction); addSeparator(); - // Insert service actions - const KFileItemListProperties baseUrlProperties(KFileItemList() << baseFileItem()); - KFileItemActions fileItemActions; - fileItemActions.setItemListProperties(baseUrlProperties); - addServiceActions(fileItemActions); + // Insert 'Sort By' and 'View Mode' + addAction(m_mainWindow->actionCollection()->action(QStringLiteral("sort"))); + addAction(m_mainWindow->actionCollection()->action(QStringLiteral("view_mode"))); + + addSeparator(); + // Insert service actions + fileItemActions.addServiceActionsTo(this); fileItemActions.addPluginActionsTo(this); addVersionControlPluginActions(); @@ -396,26 +423,24 @@ void DolphinContextMenu::insertDefaultItemActions(const KFileItemListProperties& addAction(collection->action(KStandardAction::name(KStandardAction::RenameFile))); // Insert 'Move to Trash' and/or 'Delete' - if (properties.supportsDeleting()) { - const bool showDeleteAction = (KSharedConfig::openConfig()->group("KDE").readEntry("ShowDeleteCommand", false) || - !properties.isLocal()); - const bool showMoveToTrashAction = (properties.isLocal() && - properties.supportsMoving()); - - if (showDeleteAction && showMoveToTrashAction) { - delete m_removeAction; - m_removeAction = nullptr; - addAction(m_mainWindow->actionCollection()->action(KStandardAction::name(KStandardAction::MoveToTrash))); - addAction(m_mainWindow->actionCollection()->action(KStandardAction::name(KStandardAction::DeleteFile))); - } else if (showDeleteAction && !showMoveToTrashAction) { - addAction(m_mainWindow->actionCollection()->action(KStandardAction::name(KStandardAction::DeleteFile))); - } else { - if (!m_removeAction) { - m_removeAction = new DolphinRemoveAction(this, m_mainWindow->actionCollection()); - } - addAction(m_removeAction); - m_removeAction->update(); + const bool showDeleteAction = (KSharedConfig::openConfig()->group("KDE").readEntry("ShowDeleteCommand", false) || + !properties.isLocal()); + const bool showMoveToTrashAction = (properties.isLocal() && + properties.supportsMoving()); + + if (showDeleteAction && showMoveToTrashAction) { + delete m_removeAction; + m_removeAction = nullptr; + addAction(m_mainWindow->actionCollection()->action(KStandardAction::name(KStandardAction::MoveToTrash))); + addAction(m_mainWindow->actionCollection()->action(KStandardAction::name(KStandardAction::DeleteFile))); + } else if (showDeleteAction && !showMoveToTrashAction) { + addAction(m_mainWindow->actionCollection()->action(KStandardAction::name(KStandardAction::DeleteFile))); + } else { + if (!m_removeAction) { + m_removeAction = new DolphinRemoveAction(this, m_mainWindow->actionCollection()); } + addAction(m_removeAction); + m_removeAction->update(); } } @@ -474,15 +499,10 @@ KFileItem DolphinContextMenu::baseFileItem() return *m_baseFileItem; } -void DolphinContextMenu::addServiceActions(KFileItemActions& fileItemActions) +void DolphinContextMenu::addOpenWithActions(KFileItemActions& fileItemActions) { - fileItemActions.setParentWidget(m_mainWindow); - // insert 'Open With...' action or sub menu - fileItemActions.addOpenWithActionsTo(this, QStringLiteral("DesktopEntryName != 'dolphin'")); - - // insert 'Actions' sub menu - fileItemActions.addServiceActionsTo(this); + fileItemActions.addOpenWithActionsTo(this, QStringLiteral("DesktopEntryName != '%1'").arg(qApp->desktopFileName())); } void DolphinContextMenu::addVersionControlPluginActions()