┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/dolphinviewcontainer.cpp21
-rw-r--r--src/dolphinviewcontainer.h2
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;