#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 <KActionCollection>
#include <KAbstractFileItemActionPlugin>
+#include <KActionCollection>
#include <KFileItemActions>
#include <KFileItemListProperties>
-#include <KIO/RestoreJob>
#include <KIO/EmptyTrashJob>
#include <KIO/JobUiDelegate>
#include <KIO/Paste>
+#include <KIO/RestoreJob>
#include <KJobWidgets>
+#include <KLocalizedString>
#include <KMimeTypeTrader>
#include <KNewFileMenu>
#include <KPluginMetaData>
#include <KService>
-#include <KLocalizedString>
#include <KStandardAction>
#include <KToolBar>
#include <QApplication>
#include <QClipboard>
#include <QKeyEvent>
-#include <QMenuBar>
#include <QMenu>
+#include <QMenuBar>
#include <QMimeDatabase>
-#include <panels/places/placesitem.h>
-#include <panels/places/placesitemmodel.h>
-
-
-#include "views/dolphinview.h"
-#include "views/viewmodecontroller.h"
-
DolphinContextMenu::DolphinContextMenu(DolphinMainWindow* parent,
const QPoint& pos,
const KFileItem& fileInfo,
m_mainWindow(parent),
m_fileInfo(fileInfo),
m_baseUrl(baseUrl),
- m_baseFileItem(0),
+ m_baseFileItem(nullptr),
m_selectedItems(),
- m_selectedItemsProperties(0),
+ m_selectedItemsProperties(nullptr),
m_context(NoContext),
m_copyToMenu(parent),
m_customActions(),
m_command(None),
- m_removeAction(0)
+ m_removeAction(nullptr)
{
// The context menu either accesses the URLs of the selected items
// or the items itself. To increase the performance both lists are cached.
DolphinContextMenu::~DolphinContextMenu()
{
delete m_selectedItemsProperties;
- m_selectedItemsProperties = 0;
+ m_selectedItemsProperties = nullptr;
}
void DolphinContextMenu::setCustomActions(const QList<QAction*>& actions)
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_fileInfo.isNull());
- QAction* openParentAction = 0;
- QAction* openParentInNewWindowAction = 0;
- QAction* openParentInNewTabAction = 0;
- QAction* addToPlacesAction = 0;
+ QAction* openParentAction = nullptr;
+ QAction* openParentInNewWindowAction = nullptr;
+ QAction* openParentInNewTabAction = nullptr;
+ QAction* addToPlacesAction = nullptr;
const KFileItemListProperties& selectedItemsProps = selectedItemsProperties();
if (m_selectedItems.count() == 1) {
+ if (m_fileInfo.isLink()) {
+ addAction(m_mainWindow->actionCollection()->action(QStringLiteral("show_target")));
+ addSeparator();
+ }
if (m_fileInfo.isDir()) {
// setup 'Create New' menu
DolphinNewFileMenu* newFileMenu = new DolphinNewFileMenu(m_mainWindow->actionCollection(), m_mainWindow);
if (selectedUrl.isValid()) {
PlacesItemModel model;
const QString text = selectedUrl.fileName();
- PlacesItem* item = model.createPlacesItem(text, selectedUrl, KIO::iconNameForUrl(selectedUrl));
- model.appendItemToGroup(item);
- model.saveBookmarks();
+ model.createPlacesItem(text, selectedUrl, KIO::iconNameForUrl(selectedUrl));
}
} else if (activatedAction == openParentAction) {
m_command = OpenParentFolder;
addAction(m_mainWindow->actionCollection()->action(QStringLiteral("new_tab")));
// Insert 'Add to Places' entry if exactly one item is selected
- QAction* addToPlacesAction = 0;
+ QAction* addToPlacesAction = nullptr;
if (!placeExists(m_mainWindow->activeViewContainer()->url())) {
addToPlacesAction = addAction(QIcon::fromTheme(QStringLiteral("bookmark-new")),
i18nc("@action:inmenu Add current folder to places", "Add to Places"));
QAction* action = exec(m_pos);
if (addToPlacesAction && (action == addToPlacesAction)) {
const DolphinViewContainer* container = m_mainWindow->activeViewContainer();
- if (container->url().isValid()) {
+ const QUrl url = container->url();
+ if (url.isValid()) {
PlacesItemModel model;
- PlacesItem* item = model.createPlacesItem(container->placesText(),
- container->url(),
- KIO::iconNameForUrl(container->url()));
- model.appendItemToGroup(item);
- model.saveBookmarks();
+ QString icon;
+ if (container->isSearchModeEnabled()) {
+ icon = QStringLiteral("folder-saved-search-symbolic");
+ } else {
+ icon = KIO::iconNameForUrl(url);
+ }
+ model.createPlacesItem(container->placesText(), url, icon);
}
}
}
if (showDeleteAction && showMoveToTrashAction) {
delete m_removeAction;
- m_removeAction = 0;
+ 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) {
bool DolphinContextMenu::placeExists(const QUrl& url) const
{
+ Q_UNUSED(url)
// Creating up a PlacesItemModel to find out if 'url' is one of the Places
// can be expensive because the model asks Solid for the devices which are
// available, which can take some time.
QAction* DolphinContextMenu::createPasteAction()
{
- QAction* action = 0;
+ QAction* action = nullptr;
const bool isDir = !m_fileInfo.isNull() && m_fileInfo.isDir();
if (isDir && (m_selectedItems.count() == 1)) {
const QMimeData *mimeData = QApplication::clipboard()->mimeData();
fileItemActions.setParentWidget(m_mainWindow);
// insert 'Open With...' action or sub menu
- fileItemActions.addOpenWithActionsTo(this, QStringLiteral("DesktopEntryName != 'dolphin'"));
+ fileItemActions.addOpenWithActionsTo(this, QStringLiteral("DesktopEntryName != '%1'").arg(qApp->desktopFileName()));
// insert 'Actions' sub menu
fileItemActions.addServiceActionsTo(this);