Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8036)

Unified Diff: chrome/views/window.cc

Issue 10896: Re-do the way browser windows are shown:... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/views/window.cc
===================================================================
--- chrome/views/window.cc (revision 5374)
+++ chrome/views/window.cc (working copy)
@@ -85,14 +85,22 @@
}
void Window::Show() {
- Show(SW_SHOW);
+ int show_state = GetShowState();
+ bool maximized = false;
+ if (window_delegate_->GetSavedMaximizedState(&maximized) && maximized)
+ show_state = SW_SHOWMAXIMIZED;
+ Show(show_state);
}
-void Window::Show(int show_style) {
- ShowWindow(show_style);
+void Window::Show(int show_state) {
+ ShowWindow(show_state);
SetInitialFocus();
}
+int Window::GetShowState() const {
+ return SW_SHOWNORMAL;
+}
+
void Window::Activate() {
if (IsMinimized())
::ShowWindow(GetHWND(), SW_RESTORE);
@@ -193,56 +201,6 @@
}
// static
-bool Window::SaveWindowPositionToPrefService(PrefService* pref_service,
- const std::wstring& entry,
- const CRect& bounds,
- bool maximized,
- bool always_on_top) {
- DCHECK(pref_service);
- DictionaryValue* win_pref = pref_service->GetMutableDictionary(entry.c_str());
- DCHECK(win_pref);
-
- win_pref->SetInteger(L"left", bounds.left);
- win_pref->SetInteger(L"top", bounds.top);
- win_pref->SetInteger(L"right", bounds.right);
- win_pref->SetInteger(L"bottom", bounds.bottom);
- win_pref->SetBoolean(L"maximized", maximized);
- win_pref->SetBoolean(L"always_on_top", always_on_top);
- return true;
-}
-
-// static
-bool Window::RestoreWindowPositionFromPrefService(PrefService* pref_service,
- const std::wstring& entry,
- CRect* bounds,
- bool* maximized,
- bool* always_on_top) {
- DCHECK(pref_service);
- DCHECK(bounds);
- DCHECK(maximized);
- DCHECK(always_on_top);
-
- const DictionaryValue* dictionary = pref_service->GetDictionary(entry.c_str());
- if (!dictionary)
- return false;
-
- int left, top, right, bottom;
- bool temp_maximized, temp_always_on_top;
- if (!dictionary || !dictionary->GetInteger(L"left", &left) ||
- !dictionary->GetInteger(L"top", &top) ||
- !dictionary->GetInteger(L"right", &right) ||
- !dictionary->GetInteger(L"bottom", &bottom) ||
- !dictionary->GetBoolean(L"maximized", &temp_maximized) ||
- !dictionary->GetBoolean(L"always_on_top", &temp_always_on_top))
- return false;
-
- bounds->SetRect(left, top, right, bottom);
- *maximized = temp_maximized;
- *always_on_top = temp_always_on_top;
- return true;
-}
-
-// static
gfx::Size Window::GetLocalizedContentsSize(int col_resource_id,
int row_resource_id) {
ResourceBundle& rb = ResourceBundle::GetSharedInstance();
@@ -312,9 +270,7 @@
SetClientView(window_delegate_->CreateClientView(this));
SetInitialBounds(bounds);
-
- if (window_delegate_->HasAlwaysOnTopMenu())
- AddAlwaysOnTopSystemMenuItem();
+ InitAlwaysOnTopState();
}
void Window::SetClientView(ClientView* client_view) {
@@ -513,35 +469,25 @@
void Window::SetInitialBounds(const gfx::Rect& create_bounds) {
// Restore the window's placement from the controller.
- CRect saved_bounds(create_bounds.ToRECT());
- bool maximized = false;
- if (window_delegate_->RestoreWindowPosition(&saved_bounds,
- &maximized,
- &is_always_on_top_)) {
+ gfx::Rect saved_bounds(create_bounds.ToRECT());
+ if (window_delegate_->GetSavedWindowBounds(&saved_bounds)) {
// Make sure the bounds are at least the minimum size.
- if (saved_bounds.Width() < minimum_size_.cx) {
- saved_bounds.SetRect(saved_bounds.left, saved_bounds.top,
- saved_bounds.right + minimum_size_.cx -
- saved_bounds.Width(),
- saved_bounds.bottom);
+ if (saved_bounds.width() < minimum_size_.cx) {
+ saved_bounds.SetRect(saved_bounds.x(), saved_bounds.y(),
+ saved_bounds.right() + minimum_size_.cx -
+ saved_bounds.width(),
+ saved_bounds.bottom());
}
- if (saved_bounds.Height() < minimum_size_.cy) {
- saved_bounds.SetRect(saved_bounds.left, saved_bounds.top,
- saved_bounds.right,
- saved_bounds.bottom + minimum_size_.cy -
- saved_bounds.Height());
+ if (saved_bounds.height() < minimum_size_.cy) {
+ saved_bounds.SetRect(saved_bounds.x(), saved_bounds.y(),
+ saved_bounds.right(),
+ saved_bounds.bottom() + minimum_size_.cy -
+ saved_bounds.height());
}
- WINDOWPLACEMENT placement = {0};
- placement.length = sizeof(WINDOWPLACEMENT);
- placement.rcNormalPosition = saved_bounds;
- if (maximized)
- placement.showCmd = SW_SHOWMAXIMIZED;
- ::SetWindowPlacement(GetHWND(), &placement);
-
- if (is_always_on_top_ != window_delegate_->IsAlwaysOnTop())
- AlwaysOnTopChanged();
+ // "Show state" (maximized, minimized, etc) is handled by Show().
+ SetBounds(saved_bounds, NULL);
} else {
if (create_bounds.IsEmpty()) {
// No initial bounds supplied, so size the window to its content and
@@ -554,6 +500,17 @@
}
}
+void Window::InitAlwaysOnTopState() {
+ is_always_on_top_ = false;
+ if (window_delegate_->GetSavedAlwaysOnTopState(&is_always_on_top_) &&
+ is_always_on_top_ != window_delegate_->IsAlwaysOnTop()) {
+ AlwaysOnTopChanged();
+ }
+
+ if (window_delegate_->HasAlwaysOnTopMenu())
+ AddAlwaysOnTopSystemMenuItem();
+}
+
void Window::AddAlwaysOnTopSystemMenuItem() {
// The Win32 API requires that we own the text.
always_on_top_menu_text_ = l10n_util::GetString(IDS_ALWAYS_ON_TOP);
@@ -643,9 +600,8 @@
bool maximized = (win_placement.showCmd == SW_SHOWMAXIMIZED);
CRect window_bounds(win_placement.rcNormalPosition);
- window_delegate_->SaveWindowPosition(window_bounds,
- maximized,
- is_always_on_top_);
+ window_delegate_->SaveWindowPlacement(
+ gfx::Rect(win_placement.rcNormalPosition), maximized, is_always_on_top_);
}
void Window::InitClass() {

Powered by Google App Engine
This is Rietveld 408576698