X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/2523442d4d67ac5a801728394653f38e0ee8a09a..94ba6a0978fe03bcd51a37cd252b1ff2a9efe090:/src/dolphinmainwindow.cpp diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 762e21f94..d112007bc 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -25,6 +25,7 @@ #include "dolphindockwidget.h" #include "dolphincontextmenu.h" #include "dolphinnewfilemenu.h" +#include "dolphinplacesmodelsingleton.h" #include "dolphinrecenttabsmenu.h" #include "dolphintabwidget.h" #include "dolphinviewcontainer.h" @@ -51,6 +52,7 @@ #include #include #include +#include #include #include #include @@ -69,6 +71,7 @@ #include #include #include +#include #include #include #include @@ -355,6 +358,22 @@ void DolphinMainWindow::openInNewWindow() } } +void DolphinMainWindow::showTarget() +{ + 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::exists(linkDestination)) { + KIO::highlightInFileManager({QUrl::fromLocalFile(linkDestination).adjusted(QUrl::StripTrailingSlash)}); + } else { + m_activeViewContainer->showMessage(xi18nc("@info", "Could not access %1.", linkDestination), + DolphinViewContainer::Warning); + } +} + void DolphinMainWindow::showEvent(QShowEvent* event) { KXmlGuiWindow::showEvent(event); @@ -410,6 +429,7 @@ void DolphinMainWindow::closeEvent(QCloseEvent* event) case QDialogButtonBox::No: // Close only the current tab m_tabWidget->closeTab(); + Q_FALLTHROUGH(); default: event->ignore(); return; @@ -974,8 +994,6 @@ void DolphinMainWindow::tabCountChanged(int count) void DolphinMainWindow::setUrlAsCaption(const QUrl& url) { - static KFilePlacesModel s_placesModel; - QString schemePrefix; if (!url.isLocalFile()) { schemePrefix.append(url.scheme() + " - "); @@ -990,10 +1008,11 @@ void DolphinMainWindow::setUrlAsCaption(const QUrl& url) return; } - const auto& matchedPlaces = s_placesModel.match(s_placesModel.index(0,0), KFilePlacesModel::UrlRole, url, 1, Qt::MatchExactly); + KFilePlacesModel *placesModel = DolphinPlacesModelSingleton::instance().placesModel(); + const auto& matchedPlaces = placesModel->match(placesModel->index(0,0), KFilePlacesModel::UrlRole, url, 1, Qt::MatchExactly); if (!matchedPlaces.isEmpty()) { - setWindowTitle(s_placesModel.text(matchedPlaces.first())); + setWindowTitle(placesModel->text(matchedPlaces.first())); return; } @@ -1212,6 +1231,12 @@ void DolphinMainWindow::setupActions() actionCollection()->setDefaultShortcuts(activatePrevTab, prevTabKeys); // for context menu + QAction* showTarget = actionCollection()->addAction(QStringLiteral("show_target")); + showTarget->setText(i18nc("@action:inmenu", "Show Target")); + showTarget->setIcon(QIcon::fromTheme(QStringLiteral("document-open-folder"))); + showTarget->setEnabled(false); + connect(showTarget, &QAction::triggered, this, &DolphinMainWindow::showTarget); + 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"))); @@ -1372,11 +1397,12 @@ void DolphinMainWindow::updateEditActions() stateChanged(QStringLiteral("has_selection")); KActionCollection* col = actionCollection(); - QAction* renameAction = col->action(KStandardAction::name(KStandardAction::RenameFile)); - QAction* moveToTrashAction = col->action(KStandardAction::name(KStandardAction::MoveToTrash)); - QAction* deleteAction = col->action(KStandardAction::name(KStandardAction::DeleteFile)); - QAction* cutAction = col->action(KStandardAction::name(KStandardAction::Cut)); + QAction* renameAction = col->action(KStandardAction::name(KStandardAction::RenameFile)); + QAction* moveToTrashAction = col->action(KStandardAction::name(KStandardAction::MoveToTrash)); + QAction* deleteAction = col->action(KStandardAction::name(KStandardAction::DeleteFile)); + QAction* cutAction = col->action(KStandardAction::name(KStandardAction::Cut)); QAction* deleteWithTrashShortcut = col->action(QStringLiteral("delete_shortcut")); // see DolphinViewActionHandler + QAction* showTarget = col->action(QStringLiteral("show_target")); KFileItemListProperties capabilities(list); const bool enableMoveToTrash = capabilities.isLocal() && capabilities.supportsMoving(); @@ -1386,6 +1412,7 @@ void DolphinMainWindow::updateEditActions() deleteAction->setEnabled(capabilities.supportsDeleting()); deleteWithTrashShortcut->setEnabled(capabilities.supportsDeleting() && !enableMoveToTrash); cutAction->setEnabled(capabilities.supportsMoving()); + showTarget->setEnabled(list.length() == 1 && list.at(0).isLink()); } }