diff --git a/addons/filetree/katefiletree.h b/addons/filetree/katefiletree.h --- a/addons/filetree/katefiletree.h +++ b/addons/filetree/katefiletree.h @@ -48,6 +48,7 @@ void slotCollapseRecursive(); void slotDocumentCloseOther(); void slotDocumentReload(); + void slotOpenContainingFolder(); void slotCopyFilename(); void slotCurrentChanged(const QModelIndex ¤t, const QModelIndex &previous); void slotDocumentFirst(); @@ -94,6 +95,7 @@ QAction *m_filelistCollapseRecursive; QAction *m_filelistCloseOtherDocument; QAction *m_filelistReloadDocument; + QAction *m_filelistOpenContainingFolder; QAction *m_filelistCopyFilename; QAction *m_filelistRenameFile; QAction *m_filelistPrintDocument; diff --git a/addons/filetree/katefiletree.cpp b/addons/filetree/katefiletree.cpp --- a/addons/filetree/katefiletree.cpp +++ b/addons/filetree/katefiletree.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include #include @@ -83,6 +84,10 @@ connect(m_filelistCloseOtherDocument, &QAction::triggered, this, &KateFileTree::slotDocumentCloseOther); m_filelistCloseOtherDocument->setWhatsThis(i18n("Close other documents in this folder.")); + m_filelistOpenContainingFolder = new QAction(QIcon::fromTheme(QStringLiteral("document-open-folder")), i18nc("@action:inmenu", "Open Containing Folder"), this); + connect(m_filelistOpenContainingFolder, &QAction::triggered, this, &KateFileTree::slotOpenContainingFolder); + m_filelistOpenContainingFolder->setWhatsThis(i18n("Open the folder this file is located in.")); + m_filelistCopyFilename = new QAction(QIcon::fromTheme(QStringLiteral("edit-copy")), i18nc("@action:inmenu", "Copy File Path"), this); connect(m_filelistCopyFilename, &QAction::triggered, this, &KateFileTree::slotCopyFilename); m_filelistCopyFilename->setWhatsThis(i18n("Copy path and filename to the clipboard.")); @@ -237,6 +242,7 @@ if (isFile) { menu.addAction(m_filelistCloseOtherDocument); menu.addSeparator(); + menu.addAction(m_filelistOpenContainingFolder); menu.addAction(m_filelistCopyFilename); menu.addAction(m_filelistRenameFile); menu.addAction(m_filelistPrintDocument); @@ -246,6 +252,7 @@ connect(openWithMenu, &QMenu::triggered, this, &KateFileTree::slotOpenWithMenuAction); const bool hasFileName = doc->url().isValid(); + m_filelistOpenContainingFolder->setEnabled(hasFileName); m_filelistCopyFilename->setEnabled(hasFileName); m_filelistRenameFile->setEnabled(hasFileName); m_filelistDeleteDocument->setEnabled(hasFileName); @@ -417,6 +424,14 @@ } } +void KateFileTree::slotOpenContainingFolder() +{ + KTextEditor::Document *doc = model()->data(m_indexContextMenu, KateFileTreeModel::DocumentRole).value(); + if (doc) { + KIO::highlightInFileManager({doc->url()}); + } +} + void KateFileTree::slotCopyFilename() { KTextEditor::Document *doc = model()->data(m_indexContextMenu, KateFileTreeModel::DocumentRole).value();