From: Peter Penz Date: Tue, 17 Apr 2012 20:19:18 +0000 (+0200) Subject: Ensure authentication data is cached properly X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/beeb9078f543af84e6364f1f5fe214453388f1b9 Ensure authentication data is cached properly The attached patch sets the main window on the main directory lister in DolphinView and KIO jobs in DolphinMainWindow to ensure that login data for remote protocols such as sftp, ftp are cached properly for the duration of the application. Otherwise, the end user is going to end up being unnecessarily re-prompted to enter password login information. Thanks to Dawit Alemayehu for the patch! REVIEW: 104614 FIXED-IN: 4.9.0 --- diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index dc413dcbf..6800daefb 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -67,6 +67,7 @@ #include #include #include +#include #include #include #include @@ -1284,6 +1285,9 @@ void DolphinMainWindow::handleUrl(const KUrl& 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); + if (m_lastHandleUrlStatJob->ui()) { + m_lastHandleUrlStatJob->ui()->setWindow(this); + } connect(m_lastHandleUrlStatJob, SIGNAL(result(KJob*)), this, SLOT(slotHandleUrlStatFinished(KJob*))); diff --git a/src/dolphinmainwindow.h b/src/dolphinmainwindow.h index d4ca11adf..7e143f720 100644 --- a/src/dolphinmainwindow.h +++ b/src/dolphinmainwindow.h @@ -587,7 +587,7 @@ private: QToolButton* m_controlButton; QTimer* m_updateToolBarTimer; - KJob* m_lastHandleUrlStatJob; + KIO::Job* m_lastHandleUrlStatJob; /** * Set to true, if the filter dock visibility is only temporary set diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index 8b6522c07..8710f4440 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -28,6 +28,7 @@ #include "private/kfileitemmodelsortalgorithm.h" #include "private/kfileitemmodeldirlister.h" +#include #include #include @@ -58,6 +59,7 @@ KFileItemModel::KFileItemModel(QObject* parent) : m_dirLister = new KFileItemModelDirLister(this); m_dirLister->setAutoUpdate(true); m_dirLister->setDelayedMimeTypes(true); + m_dirLister->setMainWindow(qApp->activeWindow()); connect(m_dirLister, SIGNAL(started(KUrl)), this, SIGNAL(directoryLoadingStarted())); connect(m_dirLister, SIGNAL(canceled()), this, SLOT(slotCanceled())); diff --git a/src/kitemviews/kfileitemmodelrolesupdater.cpp b/src/kitemviews/kfileitemmodelrolesupdater.cpp index 942db2bbd..e2e348f79 100644 --- a/src/kitemviews/kfileitemmodelrolesupdater.cpp +++ b/src/kitemviews/kfileitemmodelrolesupdater.cpp @@ -26,10 +26,12 @@ #include #include #include +#include #include #include "private/kpixmapmodifier.h" +#include #include #include #include @@ -655,6 +657,9 @@ void KFileItemModelRolesUpdater::startPreviewJob(const KFileItemList& items) } KIO::PreviewJob* job = new KIO::PreviewJob(itemSubSet, cacheSize, &m_enabledPlugins); job->setIgnoreMaximumSize(items.first().isLocalFile()); + if (job->ui()) { + job->ui()->setWindow(qApp->activeWindow()); + } connect(job, SIGNAL(gotPreview(KFileItem,QPixmap)), this, SLOT(slotGotPreview(KFileItem,QPixmap))); diff --git a/src/panels/information/informationpanel.cpp b/src/panels/information/informationpanel.cpp index 3b4747b77..eda74f3b5 100644 --- a/src/panels/information/informationpanel.cpp +++ b/src/panels/information/informationpanel.cpp @@ -21,6 +21,7 @@ #include "informationpanelcontent.h" #include +#include #include #include #include @@ -182,6 +183,9 @@ void InformationPanel::showItemInfo() // No item is hovered and no selection has been done: provide // an item for the currently shown directory. m_folderStatJob = KIO::stat(url(), KIO::HideProgressInfo); + if (m_folderStatJob->ui()) { + m_folderStatJob->ui()->setWindow(this); + } connect(m_folderStatJob, SIGNAL(result(KJob*)), this, SLOT(slotFolderStatFinished(KJob*))); } else { diff --git a/src/panels/information/informationpanel.h b/src/panels/information/informationpanel.h index 8a7ad6bb7..c68b66ee1 100644 --- a/src/panels/information/informationpanel.h +++ b/src/panels/information/informationpanel.h @@ -23,6 +23,10 @@ #include class InformationPanelContent; +namespace KIO +{ + class Job; +} /** * @brief Panel for showing meta information of one ore more selected items. @@ -147,7 +151,7 @@ private: KFileItem m_fileItem; // file item for m_shownUrl if available (otherwise null) KFileItemList m_selection; - KJob* m_folderStatJob; + KIO::Job* m_folderStatJob; InformationPanelContent* m_content; }; diff --git a/src/panels/information/informationpanelcontent.cpp b/src/panels/information/informationpanelcontent.cpp index a82319ef9..4a96bd1b6 100644 --- a/src/panels/information/informationpanelcontent.cpp +++ b/src/panels/information/informationpanelcontent.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -176,6 +177,9 @@ void InformationPanelContent::showItem(const KFileItem& item) KIO::PreviewJob* job = new KIO::PreviewJob(KFileItemList() << item, QSize(m_preview->width(), m_preview->height())); job->setScaleType(KIO::PreviewJob::Unscaled); job->setIgnoreMaximumSize(item.isLocalFile()); + if (job->ui()) { + job->ui()->setWindow(this); + } connect(job, SIGNAL(gotPreview(KFileItem,QPixmap)), this, SLOT(showPreview(KFileItem,QPixmap))); diff --git a/src/panels/search/searchpanel.cpp b/src/panels/search/searchpanel.cpp index a78828e0d..fd4195f54 100644 --- a/src/panels/search/searchpanel.cpp +++ b/src/panels/search/searchpanel.cpp @@ -38,8 +38,9 @@ #include #include -#include #include +#include +#include #include #include @@ -101,6 +102,9 @@ bool SearchPanel::urlChanged() // Reset the current query and disable the facet-widget until // the new query has been determined by KIO::stat(): m_lastSetUrlStatJob = KIO::stat(url(), KIO::HideProgressInfo); + if (m_lastSetUrlStatJob->ui()) { + m_lastSetUrlStatJob->ui()->setWindow(this); + } connect(m_lastSetUrlStatJob, SIGNAL(result(KJob*)), this, SLOT(slotSetUrlStatFinished(KJob*))); } else { diff --git a/src/panels/search/searchpanel.h b/src/panels/search/searchpanel.h index ae34b20c6..4ea7e121e 100644 --- a/src/panels/search/searchpanel.h +++ b/src/panels/search/searchpanel.h @@ -23,10 +23,15 @@ #include #include -class KJob; +namespace KIO +{ + class Job; +}; -namespace Nepomuk { - namespace Utils { +namespace Nepomuk +{ + namespace Utils + { class FacetWidget; } } @@ -92,7 +97,7 @@ private: private: bool m_initialized; SearchLocation m_searchLocation; - KJob* m_lastSetUrlStatJob; + KIO::Job* m_lastSetUrlStatJob; KUrl m_startedFromDir; Nepomuk::Utils::FacetWidget* m_facetWidget; diff --git a/src/panels/terminal/terminalpanel.cpp b/src/panels/terminal/terminalpanel.cpp index 19c6cb1b7..51df81806 100644 --- a/src/panels/terminal/terminalpanel.cpp +++ b/src/panels/terminal/terminalpanel.cpp @@ -115,7 +115,9 @@ void TerminalPanel::changeDir(const KUrl& url) sendCdToTerminal(url.toLocalFile()); } else { m_mostLocalUrlJob = KIO::mostLocalUrl(url, KIO::HideProgressInfo); - m_mostLocalUrlJob->ui()->setWindow(this); + if (m_mostLocalUrlJob->ui()) { + m_mostLocalUrlJob->ui()->setWindow(this); + } connect(m_mostLocalUrlJob, SIGNAL(result(KJob*)), this, SLOT(slotMostLocalUrlResult(KJob*))); } } diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index 3e1ed34ec..7494ac5e6 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -47,6 +47,7 @@ #include #include #include +#include #include #include #include @@ -638,6 +639,9 @@ void DolphinView::deleteSelectedItems() if (del) { KIO::Job* job = KIO::del(list); + if (job->ui()) { + job->ui()->setWindow(this); + } connect(job, SIGNAL(result(KJob*)), this, SLOT(slotDeleteFileFinished(KJob*))); } diff --git a/src/views/tooltips/tooltipmanager.cpp b/src/views/tooltips/tooltipmanager.cpp index 8b2e98dae..d948bfd86 100644 --- a/src/views/tooltips/tooltipmanager.cpp +++ b/src/views/tooltips/tooltipmanager.cpp @@ -21,6 +21,7 @@ #include "filemetadatatooltip.h" #include +#include #include #include @@ -128,6 +129,9 @@ void ToolTipManager::startContentRetrieval() KIO::PreviewJob* job = new KIO::PreviewJob(KFileItemList() << m_item, QSize(256, 256)); job->setIgnoreMaximumSize(m_item.isLocalFile()); + if (job->ui()) { + job->ui()->setWindow(qApp->activeWindow()); + } connect(job, SIGNAL(gotPreview(KFileItem,QPixmap)), this, SLOT(setPreviewPix(KFileItem,QPixmap)));