diff options
Diffstat (limited to 'chrome/browser/ui/views/chrome_views_delegate.cc')
-rw-r--r-- | chrome/browser/ui/views/chrome_views_delegate.cc | 43 |
1 files changed, 34 insertions, 9 deletions
diff --git a/chrome/browser/ui/views/chrome_views_delegate.cc b/chrome/browser/ui/views/chrome_views_delegate.cc index 86faf4c..2d0a95e 100644 --- a/chrome/browser/ui/views/chrome_views_delegate.cc +++ b/chrome/browser/ui/views/chrome_views_delegate.cc @@ -5,11 +5,14 @@ #include "chrome/browser/ui/views/chrome_views_delegate.h" #include "base/scoped_ptr.h" +#include "base/string_util.h" #include "base/utf_string_conversions.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/prefs/pref_service.h" +#include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/ui/views/accessibility_event_router_views.h" #include "chrome/browser/ui/window_sizer.h" +#include "chrome/common/pref_names.h" #include "gfx/rect.h" #include "ui/base/clipboard/clipboard.h" @@ -17,6 +20,27 @@ #include "chrome/browser/app_icon_win.h" #endif +namespace { + +// Some window data should be stored in local state, instead of by profile; use +// the window_name to differentiate between storage types. This function may +// return NULL if the necessary PrefService has not yet been initialized. +// TODO(mirandac): This function will also serve to separate windows by profile +// in a multiprofile environment. +PrefService* GetPrefsForWindow(const std::wstring& window_name) { + if (LowerCaseEqualsASCII(window_name, prefs::kTaskManagerWindowPlacement)) { + return g_browser_process->local_state(); + } else { + if (!g_browser_process->profile_manager()) { + return NULL; + } + return g_browser_process->profile_manager()->GetDefaultProfile()-> + GetPrefs(); + } +} + +} // namespace + /////////////////////////////////////////////////////////////////////////////// // ChromeViewsDelegate, views::ViewsDelegate implementation: @@ -27,12 +51,12 @@ ui::Clipboard* ChromeViewsDelegate::GetClipboard() const { void ChromeViewsDelegate::SaveWindowPlacement(const std::wstring& window_name, const gfx::Rect& bounds, bool maximized) { - if (!g_browser_process->local_state()) + PrefService* prefs = GetPrefsForWindow(window_name); + if (!prefs) return; DictionaryValue* window_preferences = - g_browser_process->local_state()->GetMutableDictionary( - WideToUTF8(window_name).c_str()); + prefs->GetMutableDictionary(WideToUTF8(window_name).c_str()); window_preferences->SetInteger("left", bounds.x()); window_preferences->SetInteger("top", bounds.y()); window_preferences->SetInteger("right", bounds.right()); @@ -51,12 +75,12 @@ void ChromeViewsDelegate::SaveWindowPlacement(const std::wstring& window_name, bool ChromeViewsDelegate::GetSavedWindowBounds(const std::wstring& window_name, gfx::Rect* bounds) const { - if (!g_browser_process->local_state()) + PrefService* prefs = GetPrefsForWindow(window_name); + if (!prefs) return false; const DictionaryValue* dictionary = - g_browser_process->local_state()->GetDictionary( - WideToUTF8(window_name).c_str()); + prefs->GetDictionary(WideToUTF8(window_name).c_str()); int left, top, right, bottom; if (!dictionary || !dictionary->GetInteger("left", &left) || !dictionary->GetInteger("top", &top) || @@ -71,12 +95,13 @@ bool ChromeViewsDelegate::GetSavedWindowBounds(const std::wstring& window_name, bool ChromeViewsDelegate::GetSavedMaximizedState( const std::wstring& window_name, bool* maximized) const { - if (!g_browser_process->local_state()) + PrefService* prefs = GetPrefsForWindow(window_name); + if (!prefs) return false; const DictionaryValue* dictionary = - g_browser_process->local_state()->GetDictionary( - WideToUTF8(window_name).c_str()); + prefs->GetDictionary(WideToUTF8(window_name).c_str()); + return dictionary && dictionary->GetBoolean("maximized", maximized) && maximized; } |