Index: chrome/browser/cocoa/preferences_window_controller.mm |
diff --git a/chrome/browser/cocoa/preferences_window_controller.mm b/chrome/browser/cocoa/preferences_window_controller.mm |
index 48f4b9bc9a62c49b7d0d5ecef17a968c4de614c9..e3243f475e715a9e116042218e59cacb43791441 100644 |
--- a/chrome/browser/cocoa/preferences_window_controller.mm |
+++ b/chrome/browser/cocoa/preferences_window_controller.mm |
@@ -21,6 +21,7 @@ |
#include "chrome/browser/metrics/user_metrics.h" |
#include "chrome/browser/net/dns_global.h" |
#include "chrome/browser/net/url_fixer_upper.h" |
+#include "chrome/browser/options_window.h" |
#include "chrome/browser/profile.h" |
#include "chrome/browser/safe_browsing/safe_browsing_service.h" |
#include "chrome/browser/session_startup_pref.h" |
@@ -207,11 +208,15 @@ class PrefObserverBridge : public NotificationObserver { |
CenterViewForWidth(personalStuffView_, widest); |
CenterViewForWidth(underTheHoodView_, widest); |
- // Ensure the "basics" is selected. |
- // TODO: change this to remember what's selected in a preference and restore |
- // it. |
+ // Get the last visited page from local state. |
+ OptionsPage page = static_cast<OptionsPage>(lastSelectedPage_.GetValue()); |
+ if (page == OPTIONS_PAGE_DEFAULT) |
+ page = OPTIONS_PAGE_GENERAL; |
- NSToolbarItem* firstItem = [[toolbar_ items] objectAtIndex:0]; |
+ NSUInteger pageIndex = (NSUInteger)page; |
+ if (pageIndex >= [[toolbar_ items] count]) |
+ pageIndex = 0; |
+ NSToolbarItem* firstItem = [[toolbar_ items] objectAtIndex:pageIndex]; |
[self displayPreferenceViewForToolbarItem:firstItem animate:NO]; |
[toolbar_ setSelectedItemIdentifier:[firstItem itemIdentifier]]; |
@@ -275,6 +280,9 @@ class PrefObserverBridge : public NotificationObserver { |
defaultDownloadLocation_.Init(prefs::kDownloadDefaultDirectory, prefs_, |
observer_.get()); |
askForSaveLocation_.Init(prefs::kPromptForDownload, prefs_, observer_.get()); |
+ |
+ // We don't need to observe changes in this value. |
+ lastSelectedPage_.Init(prefs::kOptionsWindowLastTabIndex, local, NULL); |
} |
// Clean up what was registered in -registerPrefObservers. We only have to |
@@ -851,16 +859,20 @@ const int kDisabledIndex = 1; |
- (void)displayPreferenceViewForToolbarItem:(NSToolbarItem*)toolbarItem |
animate:(BOOL)animate { |
NSView* prefsView = NULL; |
+ OptionsPage page = OPTIONS_PAGE_DEFAULT; |
// Tags are set in the nib file. |
switch ([toolbarItem tag]) { |
case 0: // Basics |
prefsView = basicsView_; |
+ page = OPTIONS_PAGE_GENERAL; |
break; |
case 1: // Personal Stuff |
prefsView = personalStuffView_; |
+ page = OPTIONS_PAGE_CONTENT; |
break; |
case 2: // Under the Hood |
prefsView = underTheHoodView_; |
+ page = OPTIONS_PAGE_ADVANCED; |
break; |
default: |
NOTIMPLEMENTED(); |
@@ -883,6 +895,10 @@ const int kDisabledIndex = 1; |
return; |
} |
+ // Remember new options page as current page. |
+ if (page != OPTIONS_PAGE_DEFAULT) |
+ lastSelectedPage_.SetValue(page); |
+ |
// Stop any running animation, and remove any past views that were on the way |
// out. |
[animation_ stopAnimation]; |