From: Peter Penz Date: Fri, 12 Dec 2008 19:44:28 +0000 (+0000) Subject: If the users enters an URL that represents a file, open the file by the corresponding... X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/37c5fc08133ff32941c7215c71084d6cdb7c6c6a If the users enters an URL that represents a file, open the file by the corresponding application instead of showing an error message. BUG: 165877 svn path=/trunk/KDE/kdebase/apps/; revision=896189 --- diff --git a/src/dolphindirlister.cpp b/src/dolphindirlister.cpp index 8da962b18..63320b528 100644 --- a/src/dolphindirlister.cpp +++ b/src/dolphindirlister.cpp @@ -32,7 +32,11 @@ DolphinDirLister::~DolphinDirLister() void DolphinDirLister::handleError(KIO::Job* job) { - emit errorMessage(job->errorString()); + if (job->error() == KIO::ERR_IS_FILE) { + emit urlIsFileError(url()); + } else { + emit errorMessage(job->errorString()); + } } #include "dolphindirlister.moc" diff --git a/src/dolphindirlister.h b/src/dolphindirlister.h index 26eb76018..b615f63ba 100644 --- a/src/dolphindirlister.h +++ b/src/dolphindirlister.h @@ -41,6 +41,9 @@ signals: /** Is emitted whenever an error has occurred. */ void errorMessage(const QString& msg); + /** Is emitted when the URL of the directory lister represents a file. */ + void urlIsFileError(const KUrl& url); + protected: virtual void handleError(KIO::Job* job); }; diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index c75553c4b..371eef654 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -117,6 +117,8 @@ DolphinViewContainer::DolphinViewContainer(DolphinMainWindow* mainWindow, this, SLOT(showInfoMessage(const QString&))); connect(m_dirLister, SIGNAL(errorMessage(const QString&)), this, SLOT(showErrorMessage(const QString&))); + connect(m_dirLister, SIGNAL(urlIsFileError(const KUrl&)), + this, SLOT(openFile(const KUrl&))); m_view = new DolphinView(this, url, @@ -425,4 +427,13 @@ void DolphinViewContainer::slotItemTriggered(const KFileItem& item) item.run(); } +void DolphinViewContainer::openFile(const KUrl& url) +{ + // Using m_dolphinModel for getting the file item instance is not possible + // here: openFile() is triggered by an error of the directory lister + // job, so the file item must be received "manually". + const KFileItem item(KFileItem::Unknown, KFileItem::Unknown, url); + slotItemTriggered(item); +} + #include "dolphinviewcontainer.moc" diff --git a/src/dolphinviewcontainer.h b/src/dolphinviewcontainer.h index 15a0ae6a8..d2adb5ed7 100644 --- a/src/dolphinviewcontainer.h +++ b/src/dolphinviewcontainer.h @@ -142,10 +142,19 @@ private slots: void slotDirListerCompleted(); /** - * Handles clicking on an item + * Handles clicking on an item. If the item is a directory, the + * directory is opened in the view. If the item is a file, the file + * gets started by the corresponding application. */ void slotItemTriggered(const KFileItem& item); + /** + * Opens a the file \a url by opening the corresponding application. + * Is connected with the signal urlIsFile() from DolphinDirLister and will + * get invoked if the user manually has entered a file into the URL navigator. + */ + void openFile(const KUrl& url); + /** * Shows the information for the item \a item inside the statusbar. If the * item is null, the default statusbar information is shown.