From 9238fa05fec32394b07769462ec759983b18c455 Mon Sep 17 00:00:00 2001 From: "nick.kreeger%park.edu" Date: Mon, 21 Aug 2006 23:09:11 +0000 Subject: [PATCH] Fixing bug 346782, bookmark toggle behavior is broken. Patch by froodian (stridey@gmail.com) r=smorgan, sr=pink. git-svn-id: svn://10.0.0.236/branches/MOZILLA_1_8_BRANCH@208060 18797224-902f-48f8-a5cc-f745e15eee43 --- .../src/browser/BrowserWindowController.mm | 51 +++++++++++++++++-- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/mozilla/camino/src/browser/BrowserWindowController.mm b/mozilla/camino/src/browser/BrowserWindowController.mm index e49c526d54e..3e801f40490 100644 --- a/mozilla/camino/src/browser/BrowserWindowController.mm +++ b/mozilla/camino/src/browser/BrowserWindowController.mm @@ -466,6 +466,7 @@ enum BWCOpenDest { - (void)openNewTabWithDescriptor:(nsISupports*)aDesc displayType:(PRUint32)aDisplayType loadInBackground:(BOOL)aLoadInBG; - (BOOL)isPageTextFieldFocused; - (void)performSearch:(SearchTextField *)inSearchField inView:(BWCOpenDest)inDest inBackground:(BOOL)inLoadInBG; +- (int)historyIndexOfPageBeforeBookmarkManager; - (void)goToLocationFromToolbarURLField:(AutoCompleteTextField *)inURLField inView:(BWCOpenDest)inDest inBackground:(BOOL)inLoadInBG; - (BrowserTabViewItem*)tabForBrowser:(BrowserWrapper*)inWrapper; @@ -1413,7 +1414,7 @@ enum BWCOpenDest { return enable; } else if (action == @selector(manageBookmarks:)) - return [[mBrowserView getBrowserView] canGoBack] || (![self bookmarkManagerIsVisible]); + return ![self bookmarkManagerIsVisible] || [self canHideBookmarks]; else if (action == @selector(reload:)) return [[self getBrowserWrapper] canReload]; else if (action == @selector(stop:)) @@ -1974,8 +1975,11 @@ enum BWCOpenDest { // -(IBAction)manageBookmarks:(id)aSender { - if ([self bookmarkManagerIsVisible]) - [self back:aSender]; + if ([self bookmarkManagerIsVisible]) { + int previousPage = [self historyIndexOfPageBeforeBookmarkManager]; + if (previousPage != -1) + [[[self getBrowserWrapper] getBrowserView] goToSessionHistoryIndex:previousPage]; + } else [self loadURL:@"about:bookmarks"]; @@ -2008,6 +2012,45 @@ enum BWCOpenDest { // to reveal... } +// +// historyIndexOfPageBeforeBookmarkManager +// +// Returns the index in session history of the last page visited before viewing the bookmarks manager +// +- (int)historyIndexOfPageBeforeBookmarkManager +{ + if (![self bookmarkManagerIsVisible]) + return -1; + + nsIWebNavigation* webNav = [self currentWebNavigation]; + if (!webNav) + return -1; + + nsCOMPtr sessionHistory; + webNav->GetSessionHistory(getter_AddRefs(sessionHistory)); + if (!sessionHistory) + return -1; + + PRInt32 curEntryIndex; + sessionHistory->GetIndex(&curEntryIndex); + + for (int i = curEntryIndex - 1; i >= 0; --i) { + nsCOMPtr entry; + sessionHistory->GetEntryAtIndex(i, PR_FALSE, getter_AddRefs(entry)); + + nsCAutoString uriSpec; + nsCOMPtr entryURI; + entry->GetURI(getter_AddRefs(entryURI)); + if (entryURI) + entryURI->GetSpec(uriSpec); + + if (!(uriSpec.EqualsLiteral("about:bookmarks") || uriSpec.EqualsLiteral("about:history"))) + return i; + } + + return -1; +} + - (IBAction)goToLocationFromToolbarURLField:(id)sender { if ([sender isKindOfClass:[AutoCompleteTextField class]]) @@ -2416,7 +2459,7 @@ enum BWCOpenDest { - (BOOL)canHideBookmarks { - return [self bookmarkManagerIsVisible] && [[mBrowserView getBrowserView] canGoBack]; + return [self historyIndexOfPageBeforeBookmarkManager] != -1; } - (BOOL)singleBookmarkIsSelected