From: Peter Penz Date: Tue, 20 May 2008 21:21:48 +0000 (+0000) Subject: when going back in history apply the keyboard focus to the the previously shown directory X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/ed5b2e54736b04d551eae01d976038fb7d5aac35 when going back in history apply the keyboard focus to the the previously shown directory BUG: 156550 BUG: 158590 svn path=/trunk/KDE/kdebase/apps/; revision=810493 --- diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 2618dea27..f0a4487c9 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -347,6 +347,20 @@ QPoint DolphinView::contentsPosition() const return QPoint(x, y); } +void DolphinView::setCurrentItem(const KUrl& url) +{ + const QModelIndex dirIndex = m_dolphinModel->indexForUrl(url); + if (dirIndex.isValid()) { + const QModelIndex proxyIndex = m_proxyModel->mapFromSource(dirIndex); + QAbstractItemView* view = itemView(); + const bool clearSelection = !hasSelection(); + view->setCurrentIndex(proxyIndex); + if (clearSelection) { + view->clearSelection(); + } + } +} + void DolphinView::zoomIn() { m_controller->triggerZoomIn(); diff --git a/src/dolphinview.h b/src/dolphinview.h index 5d88e4f54..708535567 100644 --- a/src/dolphinview.h +++ b/src/dolphinview.h @@ -233,6 +233,12 @@ public: /** Returns the upper left position of the view content. */ QPoint contentsPosition() const; + /** + * Sets the current item (= item that has the keyboard focus) to + * the item with the URL \a url. + */ + void setCurrentItem(const KUrl& url); + /** Increases the size of the current set view mode. */ void zoomIn(); diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index ae9defc1a..6bc620ee2 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -68,7 +68,9 @@ DolphinViewContainer::DolphinViewContainer(DolphinMainWindow* mainWindow, m_filterBar(0), m_statusBar(0), m_dirLister(0), - m_proxyModel(0) + m_proxyModel(0), + m_previousUrl(), + m_currentUrl() { hide(); @@ -167,14 +169,18 @@ DolphinViewContainer::~DolphinViewContainer() m_dirLister = 0; // deleted by m_dolphinModel } -void DolphinViewContainer::setUrl(const KUrl& url) +void DolphinViewContainer::setUrl(const KUrl& newUrl) { - m_urlNavigator->setUrl(url); + if (newUrl != m_currentUrl) { + m_previousUrl = m_currentUrl; + m_currentUrl = newUrl; + m_urlNavigator->setUrl(newUrl); + } } const KUrl& DolphinViewContainer::url() const { - return m_urlNavigator->url(); + return m_currentUrl; } void DolphinViewContainer::setActive(bool active) @@ -228,7 +234,7 @@ void DolphinViewContainer::slotDirListerCompleted() } updateStatusBar(); - + m_view->setCurrentItem(m_previousUrl); QTimer::singleShot(100, this, SLOT(restoreContentsPos())); } diff --git a/src/dolphinviewcontainer.h b/src/dolphinviewcontainer.h index b4f799cb1..a0ddcb711 100644 --- a/src/dolphinviewcontainer.h +++ b/src/dolphinviewcontainer.h @@ -230,6 +230,9 @@ private: DolphinModel* m_dolphinModel; DolphinDirLister* m_dirLister; DolphinSortFilterProxyModel* m_proxyModel; + + KUrl m_previousUrl; + KUrl m_currentUrl; }; inline const DolphinStatusBar* DolphinViewContainer::statusBar() const