Stat URLs before opening them to make sure they are actually dirs we can list. Otherwise use KRun.

svn path=/trunk/KDE/kdebase/apps/; revision=1103520
This commit is contained in:
Sebastian Trueg 2010-03-15 09:55:51 +00:00
parent a80da4153a
commit fa24cc8e11
2 changed files with 31 additions and 2 deletions

View file

@ -121,7 +121,8 @@ DolphinMainWindow::DolphinMainWindow(int id) :
m_actionHandler(0),
m_remoteEncoding(0),
m_settingsDialog(0),
m_captionStatJob(0)
m_captionStatJob(0),
m_lastHandleUrlStatJob(0)
{
setObjectName("Dolphin#");
@ -1132,7 +1133,28 @@ void DolphinMainWindow::showSearchOptions()
void DolphinMainWindow::handleUrl(const KUrl& url)
{
if (KProtocolManager::supportsListing(url)) {
delete m_lastHandleUrlStatJob;
m_lastHandleUrlStatJob = 0;
if (url.isLocalFile() && QFileInfo(url.toLocalFile()).isDir()) {
activeViewContainer()->setUrl(url);
} else if (KProtocolManager::supportsListing(url)) {
// stat the URL to see if it is a dir or not
m_lastHandleUrlStatJob = KIO::stat(url, KIO::HideProgressInfo);
connect(m_lastHandleUrlStatJob, SIGNAL(result(KJob*)),
this, SLOT(slotHandleUrlStatFinished(KJob*)));
} else {
new KRun(url, this);
}
}
void DolphinMainWindow::slotHandleUrlStatFinished(KJob* job)
{
m_lastHandleUrlStatJob = 0;
const KIO::UDSEntry entry = static_cast<KIO::StatJob*>(job)->statResult();
const KUrl url = static_cast<KIO::StatJob*>(job)->url();
if ( entry.isDir() ) {
activeViewContainer()->setUrl(url);
} else {
new KRun(url, this);

View file

@ -423,6 +423,12 @@ private slots:
*/
void handleUrl(const KUrl& url);
/**
* handleUrl() can trigger a stat job to see if the url can actually
* be listed.
*/
void slotHandleUrlStatFinished(KJob* job);
/**
* setUrlAsCaption() will trigger a stat job which reports its result in
* this slot.
@ -555,6 +561,7 @@ private:
QPointer<DolphinSettingsDialog> m_settingsDialog;
KJob* m_captionStatJob;
KJob* m_lastHandleUrlStatJob;
};
inline DolphinViewContainer* DolphinMainWindow::activeViewContainer() const