From: David Faure Date: Wed, 28 May 2008 23:07:09 +0000 (+0000) Subject: Handle redirections (e.g. from fish://localhost) without breaking the column view... X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/707f9a940973128933b183e7ce36a807ea44e941?ds=inline Handle redirections (e.g. from fish://localhost) without breaking the column view -- thanks Peter for the advice on how to separate the two cleanly. svn path=/trunk/KDE/kdebase/apps/; revision=813954 --- diff --git a/src/dolphinpart.cpp b/src/dolphinpart.cpp index 296e101d6..46867dbad 100644 --- a/src/dolphinpart.cpp +++ b/src/dolphinpart.cpp @@ -100,6 +100,8 @@ DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QVariantL this, SLOT(slotRequestItemInfo(KFileItem))); connect(m_view, SIGNAL(urlChanged(KUrl)), this, SLOT(slotUrlChanged(KUrl))); + connect(m_view, SIGNAL(requestUrlChange(KUrl)), + this, SLOT(slotRequestUrlChange(KUrl))); connect(m_view, SIGNAL(modeChanged()), this, SIGNAL(viewModeChanged())); // relay signal @@ -356,6 +358,12 @@ void DolphinPart::slotOpenContextMenu(const KFileItem& _item, const KUrl&) } void DolphinPart::slotUrlChanged(const KUrl& url) +{ + QString prettyUrl = url.pathOrUrl(); + emit m_extension->setLocationBarUrl(prettyUrl); +} + +void DolphinPart::slotRequestUrlChange(const KUrl& url) { if (m_view->url() != url) { // If the view URL is not equal to 'url', then an inner URL change has diff --git a/src/dolphinpart.h b/src/dolphinpart.h index cca1d7135..612c22aa7 100644 --- a/src/dolphinpart.h +++ b/src/dolphinpart.h @@ -138,6 +138,11 @@ private Q_SLOTS: * Asks the host to open the URL \a url if the current view has * a different URL. */ + void slotRequestUrlChange(const KUrl& url); + + /** + * Informs the host that we are opening \a url (e.g. after a redirection). + */ void slotUrlChanged(const KUrl& url); /** diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index ae6ea5ec7..afd1e522d 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -102,7 +102,7 @@ DolphinView::DolphinView(QWidget* parent, connect(m_controller, SIGNAL(urlChanged(const KUrl&)), this, SIGNAL(urlChanged(const KUrl&))); connect(m_controller, SIGNAL(requestUrlChange(const KUrl&)), - this, SIGNAL(urlChanged(const KUrl&))); + this, SIGNAL(slotRequestUrlChange(const KUrl&))); connect(m_controller, SIGNAL(requestContextMenu(const QPoint&)), this, SLOT(openContextMenu(const QPoint&))); @@ -125,6 +125,8 @@ DolphinView::DolphinView(QWidget* parent, connect(m_controller, SIGNAL(viewportEntered()), this, SLOT(clearHoverInformation())); + connect(m_dirLister, SIGNAL(redirection(KUrl, KUrl)), + this, SLOT(slotRedirection(KUrl, KUrl))); connect(m_dirLister, SIGNAL(completed()), this, SLOT(restoreCurrentItem())); @@ -1203,4 +1205,16 @@ void DolphinView::pasteToUrl(const KUrl& url) } } +void DolphinView::slotRequestUrlChange(const KUrl& url) +{ + emit requestUrlChange(url); + m_controller->setUrl(url); +} + +void DolphinView::slotRedirection(const KUrl& oldUrl, const KUrl& newUrl) +{ + if (oldUrl == m_controller->url()) + m_controller->setUrl(newUrl); +} + #include "dolphinview.moc" diff --git a/src/dolphinview.h b/src/dolphinview.h index 121a7f6da..0936b06a3 100644 --- a/src/dolphinview.h +++ b/src/dolphinview.h @@ -420,6 +420,12 @@ signals: /** Is emitted if URL of the view has been changed to \a url. */ void urlChanged(const KUrl& url); + /** + * Is emitted if the view requests a changing of the current + * URL to \a url (see DolphinController::triggerUrlChangeRequest()). + */ + void requestUrlChange(const KUrl& url); + /** * Is emitted when clicking on an item with the left mouse button. */ @@ -595,6 +601,18 @@ private slots: */ void slotDeleteFileFinished(KJob* job); + /** + * Called when KDirLister emits redirection. + * Testcase: fish://localhost + */ + void slotRedirection(const KUrl& oldUrl, const KUrl& newUrl); + + /** + * Is emitted if the controller requests a changing of the current + * URL to \a url + */ + void slotRequestUrlChange(const KUrl& url); + /** * Restores the current item (= item that has the keyboard focus) * to m_currentItemUrl.