#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"
DolphinContextMenu::~DolphinContextMenu()
{
+ delete m_baseFileItem;
+ m_baseFileItem = nullptr;
delete m_selectedItemsProperties;
m_selectedItemsProperties = nullptr;
}
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();
addShowMenuBarAction();
if (exec(m_pos) == emptyTrashAction) {
- KIO::JobUiDelegate uiDelegate;
- uiDelegate.setWindow(m_mainWindow);
- if (uiDelegate.askDeleteConfirmation(QList<QUrl>(), KIO::JobUiDelegate::EmptyTrash, KIO::JobUiDelegate::DefaultConfirmation)) {
- KIO::Job* job = KIO::emptyTrash();
- KJobWidgets::setWindow(job, m_mainWindow);
- job->uiDelegate()->setAutoErrorHandlingEnabled(true);
- }
+ Trash::empty(m_mainWindow);
}
}
Q_ASSERT(m_context & TrashContext);
Q_ASSERT(m_context & ItemContext);
- QAction* restoreAction = new QAction(i18nc("@action:inmenu", "Restore"), m_mainWindow);
+ QAction* restoreAction = new QAction(QIcon::fromTheme("restoration"), i18nc("@action:inmenu", "Restore"), m_mainWindow);
addAction(restoreAction);
QAction* deleteAction = m_mainWindow->actionCollection()->action(KStandardAction::name(KStandardAction::DeleteFile));
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());
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"),
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 {
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();
}
// insert 'Properties...' entry
+ addSeparator();
QAction* propertiesAction = m_mainWindow->actionCollection()->action(QStringLiteral("properties"));
addAction(propertiesAction);
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);
+
+ // Don't show "Open With" menu items if the current dir is empty, because there's
+ // generally no app that can do anything interesting with an empty directory
+ if (view->itemsCount() != 0) {
+ 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
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();
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();
}
}
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()