diff --git a/src/dolphincontextmenu.cpp b/src/dolphincontextmenu.cpp --- a/src/dolphincontextmenu.cpp +++ b/src/dolphincontextmenu.cpp @@ -192,14 +192,18 @@ { Q_ASSERT(!m_fileInfo.isNull()); + QAction* openSymlinkDestinationFolder = nullptr; QAction* openParentAction = nullptr; QAction* openParentInNewWindowAction = nullptr; QAction* openParentInNewTabAction = nullptr; QAction* addToPlacesAction = nullptr; const KFileItemListProperties& selectedItemsProps = selectedItemsProperties(); if (m_selectedItems.count() == 1) { - if (m_fileInfo.isDir()) { + if (m_fileInfo.isLink()) { + addAction(m_mainWindow->actionCollection()->action(QStringLiteral("open_symlink_destination_folder"))); + addSeparator(); + } else if (m_fileInfo.isDir()) { // setup 'Create New' menu DolphinNewFileMenu* newFileMenu = new DolphinNewFileMenu(m_mainWindow->actionCollection(), m_mainWindow); const DolphinView* view = m_mainWindow->activeViewContainer()->view(); @@ -305,6 +309,8 @@ const QString text = selectedUrl.fileName(); model.createPlacesItem(text, selectedUrl, KIO::iconNameForUrl(selectedUrl)); } + } else if (activatedAction == openSymlinkDestinationFolder) { + } else if (activatedAction == openParentAction) { m_command = OpenParentFolder; } else if (activatedAction == openParentInNewWindowAction) { diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -51,6 +51,7 @@ #include #include #include +#include #include #include #include @@ -69,6 +70,7 @@ #include #include #include +#include #include #include #include @@ -1212,6 +1214,23 @@ actionCollection()->setDefaultShortcuts(activatePrevTab, prevTabKeys); // for context menu + QAction* openSymlinkDestinationFolder = actionCollection()->addAction(QStringLiteral("open_symlink_destination_folder")); + openSymlinkDestinationFolder->setText(i18nc("@action:inmenu", "Show Original")); + openSymlinkDestinationFolder->setIcon(QIcon::fromTheme(QStringLiteral("document-open-folder"))); + connect(openSymlinkDestinationFolder, &QAction::triggered, [this]() { + const auto link = m_activeViewContainer->view()->selectedItems().at(0); + const auto linkLocationDir = QFileInfo(link.localPath()).absoluteDir(); + auto linkDestination = link.linkDest(); + if (QFileInfo(linkDestination).isRelative()) + linkDestination = linkLocationDir.filePath(linkDestination); + if (QFileInfo(linkDestination).exists()) { + KIO::highlightInFileManager({QUrl::fromLocalFile(linkDestination).adjusted(QUrl::StripTrailingSlash)}); + } else { + m_activeViewContainer->showMessage( + i18n("Could not access \"%1\".").arg(linkDestination), DolphinViewContainer::Warning); + } + }); + QAction* openInNewTab = actionCollection()->addAction(QStringLiteral("open_in_new_tab")); openInNewTab->setText(i18nc("@action:inmenu", "Open in New Tab")); openInNewTab->setIcon(QIcon::fromTheme(QStringLiteral("tab-new")));