diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/dolphinviewcontainer.cpp | 21 | ||||
| -rw-r--r-- | src/dolphinviewcontainer.h | 2 |
2 files changed, 23 insertions, 0 deletions
diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index 1126b992d..379c55649 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -731,6 +731,27 @@ void DolphinViewContainer::slotUrlIsFileError(const QUrl &url) const KFileItem item(url); setUrl(KIO::upUrl(item.url())); + + if (!m_openAsFile) { + m_openAsFile = [this, item] { + auto action = new QAction(i18nc("@action", "Open as File"), this); + connect(action, &QAction::triggered, this, [this, item]() { + m_messageWidget->animatedHide(); + + // Find out if the file can be opened in the view (for example, this is the + // case if the file is an archive). The mime type must be known for that. + item.determineMimeType(); + const QUrl &folderUrl = DolphinView::openItemAsFolderUrl(item, true); + if (!folderUrl.isEmpty()) { + setUrl(folderUrl); + } else { + slotItemActivated(item); + } + }); + return action; + }(); + } + showMessage(xi18nc("@info", "Trying to open a file as a folder: <filename>%1</filename>", item.url().toString()), KMessageWidget::Error, {m_openAsFile}); } void DolphinViewContainer::slotItemActivated(const KFileItem &item) diff --git a/src/dolphinviewcontainer.h b/src/dolphinviewcontainer.h index 09413ba55..8ff1c59e0 100644 --- a/src/dolphinviewcontainer.h +++ b/src/dolphinviewcontainer.h @@ -497,6 +497,8 @@ private: QAction *m_authorizeToEnterFolderAction; /// An action to create new folder in case user enters a nonexistent URL in the location bar. QAction *m_createFolderAction; + /// An action to open the url as file instead of as directory. Lazily initialized. + QAction *m_openAsFile = nullptr; KMessageWidget *m_messageWidget; |
