From: Peter Penz Date: Sat, 3 Mar 2007 13:03:15 +0000 (+0000) Subject: Assure that the root of the tree view always matchs to the bookmark shown in the... X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/e26ba53471ea902d18e59a4a8fc52ccdf4c7b4ea Assure that the root of the tree view always matchs to the bookmark shown in the URL navigator. svn path=/trunk/KDE/kdebase/apps/; revision=638825 --- diff --git a/src/bookmarkselector.cpp b/src/bookmarkselector.cpp index aefb30d74..73950434d 100644 --- a/src/bookmarkselector.cpp +++ b/src/bookmarkselector.cpp @@ -73,31 +73,12 @@ BookmarkSelector::~BookmarkSelector() void BookmarkSelector::updateSelection(const KUrl& url) { - KBookmarkGroup root = DolphinSettings::instance().bookmarkManager()->root(); - KBookmark bookmark = root.first(); - - int maxLength = 0; - m_selectedIndex = -1; - - // Search the bookmark which is equal to the Url or at least is a parent Url. - // If there are more than one possible parent Url candidates, choose the bookmark - // which covers the bigger range of the Url. - int i = 0; - while (!bookmark.isNull()) { - const KUrl bookmarkUrl = bookmark.url(); - if (bookmarkUrl.isParentOf(url)) { - const int length = bookmarkUrl.prettyUrl().length(); - if (length > maxLength) { - m_selectedIndex = i; - setIcon(SmallIcon(bookmark.icon())); - maxLength = length; - } - } - bookmark = root.next(bookmark); - ++i; + m_selectedIndex = baseBookmarkIndex(url); + if (m_selectedIndex >= 0) { + KBookmark bookmark = DolphinSettings::instance().bookmark(m_selectedIndex); + setIcon(SmallIcon(bookmark.icon())); } - - if (m_selectedIndex < 0) { + else { // No bookmark has been found which matches to the given Url. Show // a generic folder icon as pixmap for indication: setIcon(SmallIcon("folder")); @@ -115,6 +96,12 @@ QSize BookmarkSelector::sizeHint() const return QSize(height, height); } +KBookmark BookmarkSelector::baseBookmark(const KUrl& url) +{ + const int index = baseBookmarkIndex(url); + return DolphinSettings::instance().bookmark(index); +} + void BookmarkSelector::paintEvent(QPaintEvent* /*event*/) { QPainter painter(this); @@ -173,5 +160,34 @@ void BookmarkSelector::activateBookmark(QAction* action) emit bookmarkActivated(bookmark.url()); } +int BookmarkSelector::baseBookmarkIndex(const KUrl& url) +{ + int index = -1; // return value + + KBookmarkGroup root = DolphinSettings::instance().bookmarkManager()->root(); + KBookmark bookmark = root.first(); + + int maxLength = 0; + + // Search the bookmark which is equal to the Url or at least is a parent Url. + // If there are more than one possible parent Url candidates, choose the bookmark + // which covers the bigger range of the Url. + int i = 0; + while (!bookmark.isNull()) { + const KUrl bookmarkUrl = bookmark.url(); + if (bookmarkUrl.isParentOf(url)) { + const int length = bookmarkUrl.prettyUrl().length(); + if (length > maxLength) { + index = i; + maxLength = length; + } + } + bookmark = root.next(bookmark); + ++i; + } + + return index; +} + #include "bookmarkselector.moc" diff --git a/src/bookmarkselector.h b/src/bookmarkselector.h index b904a0d57..334f25ba3 100644 --- a/src/bookmarkselector.h +++ b/src/bookmarkselector.h @@ -49,11 +49,11 @@ public: virtual ~BookmarkSelector(); /** - * Updates the selection dependent from the given Url \a url. The - * Url must not match exactly to one of the available bookmarks: - * The bookmark which is equal to the Url or at least is a parent Url - * is selected. If there are more than one possible parent Url candidates, - * the bookmark which covers the bigger range of the Url is selected. + * Updates the selection dependent from the given URL \a url. The + * URL must not match exactly to one of the available bookmarks: + * The bookmark which is equal to the URL or at least is a parent URL + * is selected. If there are more than one possible parent URL candidates, + * the bookmark which covers the bigger range of the URL is selected. */ void updateSelection(const KUrl& url); @@ -69,6 +69,22 @@ public: /** @see QWidget::sizeHint() */ virtual QSize sizeHint() const; + /** + * Returns the base bookmark for the URL \a url. + * The base bookmark is defined as bookmark which is equal to + * the URL or at least is a parent URL. If there are more than + * one possible parent URL candidates, the bookmark which covers + * the bigger range of the URL is returned. + * + * Example: the url is '/home/peter/Documents/Music. Available + * bookmarks are: + * - /home/peter + * - /home/peter/Documents + * + * The base URL will be '/home/peter/Documents'. + */ + static KBookmark baseBookmark(const KUrl& url); + signals: /** * Is send when a bookmark has been activated by the user. @@ -90,6 +106,9 @@ private slots: */ void activateBookmark(QAction* action); +private: + static int baseBookmarkIndex(const KUrl& url); + private: int m_selectedIndex; UrlNavigator* m_urlNavigator; diff --git a/src/treeviewsidebarpage.cpp b/src/treeviewsidebarpage.cpp index f57146684..32edef05e 100644 --- a/src/treeviewsidebarpage.cpp +++ b/src/treeviewsidebarpage.cpp @@ -19,6 +19,7 @@ #include "treeviewsidebarpage.h" +#include "bookmarkselector.h" #include "dolphinmainwindow.h" #include "dolphinview.h" @@ -76,12 +77,20 @@ void TreeViewSidebarPage::activeViewChanged() void TreeViewSidebarPage::updatePosition(const KUrl& url) { + KUrl baseUrl = BookmarkSelector::baseBookmark(url).url(); + if (m_dirLister->url() != baseUrl) { + m_dirLister->stop(); + m_dirLister->openUrl(baseUrl); + } + + // TODO: open sub folders to be synchronous to 'url' } void TreeViewSidebarPage::connectToActiveView() { DolphinView* view = mainWindow()->activeView(); - m_dirLister->openUrl(view->url(), true); + m_dirLister->stop(); + m_dirLister->openUrl(view->url()); connect(view, SIGNAL(urlChanged(const KUrl&)), this, SLOT(updatePosition(const KUrl&))); }