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

Unified Diff: chrome/browser/views/frame/browser_view.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/browser/views/frame/browser_view.cc
===================================================================
--- chrome/browser/views/frame/browser_view.cc (revision 5374)
+++ chrome/browser/views/frame/browser_view.cc (working copy)
@@ -123,6 +123,14 @@
ticker_.UnregisterTickHandler(&hung_window_detector_);
}
+int BrowserView::GetShowState() const {
+ STARTUPINFO si = {0};
+ si.cb = sizeof(si);
+ si.dwFlags = STARTF_USESHOWWINDOW;
+ GetStartupInfo(&si);
+ return si.wShowWindow;
+}
+
void BrowserView::WindowMoved() {
// Cancel any tabstrip animations, some of them may be invalidated by the
// window being repositioned.
@@ -320,8 +328,31 @@
InitSystemMenu();
}
-void BrowserView::Show(int command, bool adjust_to_fit) {
- frame_->GetWindow()->Show(command);
+void BrowserView::Show() {
+ // If the window is already visible, just activate it.
+ if (frame_->GetWindow()->IsVisible()) {
+ frame_->GetWindow()->Activate();
+ return;
+ }
+
+ // Setting the focus doesn't work when the window is invisible, so any focus
+ // initialization that happened before this will be lost.
+ //
+ // We really "should" restore the focus whenever the window becomes unhidden,
+ // but I think initializing is the only time where this can happen where
+ // there is some focus change we need to pick up, and this is easier than
+ // plumbing through an un-hide message all the way from the frame.
+ //
+ // If we do find there are cases where we need to restore the focus on show,
+ // that should be added and this should be removed.
+ TabContents* selected_tab_contents = GetSelectedTabContents();
+ if (selected_tab_contents)
+ selected_tab_contents->RestoreFocus();
+
+ frame_->GetWindow()->Show();
+ int show_state = frame_->GetWindow()->GetShowState();
+ if (show_state == SW_SHOWNORMAL || show_state == SW_SHOWMAXIMIZED)
+ frame_->GetWindow()->Activate();
}
void BrowserView::Close() {
@@ -378,7 +409,7 @@
}
}
-gfx::Rect BrowserView::GetNormalBounds() {
+gfx::Rect BrowserView::GetNormalBounds() const {
WINDOWPLACEMENT wp;
wp.length = sizeof(wp);
const bool ret = !!GetWindowPlacement(frame_->GetWindow()->GetHWND(), &wp);
@@ -562,18 +593,13 @@
return false;
}
-void BrowserView::SaveWindowPosition(const CRect& bounds,
- bool maximized,
- bool always_on_top) {
- browser_->SaveWindowPosition(gfx::Rect(bounds), maximized);
+void BrowserView::SaveWindowPlacement(const gfx::Rect& bounds,
+ bool maximized,
+ bool always_on_top) {
+ browser_->SaveWindowPlacement(bounds, maximized);
}
-bool BrowserView::RestoreWindowPosition(CRect* bounds,
- bool* maximized,
- bool* always_on_top) {
- DCHECK(bounds && maximized && always_on_top);
- *always_on_top = false;
-
+bool BrowserView::GetSavedWindowBounds(gfx::Rect* bounds) const {
if (browser_->type() == BrowserType::BROWSER) {
// We are a popup window. The value passed in |bounds| represents two
// pieces of information:
@@ -587,12 +613,12 @@
// its desired height, since the toolbar is considered part of the
// window's client area as far as GetWindowBoundsForClientBounds is
// concerned...
- bounds->bottom += toolbar_->GetPreferredSize().height();
+ bounds->set_height(
+ bounds->height() + toolbar_->GetPreferredSize().height());
}
- gfx::Rect window_rect =
- frame_->GetWindowBoundsForClientBounds(gfx::Rect(*bounds));
- window_rect.set_origin(gfx::Point(bounds->left, bounds->top));
+ gfx::Rect window_rect = frame_->GetWindowBoundsForClientBounds(*bounds);
+ window_rect.set_origin(gfx::Point(bounds->x(), bounds->y()));
// When we are given x/y coordinates of 0 on a created popup window,
// assume none were given by the window.open() command.
@@ -603,13 +629,9 @@
window_rect.set_origin(origin);
}
- *bounds = window_rect.ToRECT();
- *maximized = false;
+ *bounds = window_rect;
} else {
- // TODO(beng): (http://b/1317622) Make these functions take gfx::Rects.
- gfx::Rect b(*bounds);
- browser_->RestoreWindowPosition(&b, maximized);
- *bounds = b.ToRECT();
+ *bounds = browser_->GetSavedWindowBounds();
}
// We return true because we can _always_ locate reasonable bounds using the
@@ -619,6 +641,11 @@
return true;
}
+bool BrowserView::GetSavedMaximizedState(bool* maximized) const {
+ *maximized = browser_->GetSavedMaximizedState();
+ return true;
+}
+
void BrowserView::WindowClosing() {
}

Powered by Google App Engine
This is Rietveld 408576698