| Index: chrome/browser/views/frame/browser_view.cc
|
| ===================================================================
|
| --- chrome/browser/views/frame/browser_view.cc (revision 13761)
|
| +++ chrome/browser/views/frame/browser_view.cc (working copy)
|
| @@ -59,7 +59,7 @@
|
| #include "chrome/views/widget/hwnd_notification_source.h"
|
| #include "chrome/views/widget/root_view.h"
|
| #include "chrome/views/window/non_client_view.h"
|
| -#include "chrome/views/window/window.h"
|
| +#include "chrome/views/window/window_win.h"
|
| #include "grit/chromium_strings.h"
|
| #include "grit/generated_resources.h"
|
| #include "grit/theme_resources.h"
|
| @@ -136,8 +136,8 @@
|
| ResizeCorner() { }
|
|
|
| virtual void Paint(ChromeCanvas* canvas) {
|
| - BrowserView* browser = GetBrowserView();
|
| - if (browser && !browser->CanCurrentlyResize())
|
| + views::WindowWin* window = GetWindow();
|
| + if (!window || (window->IsMaximized() || window->IsFullscreen()))
|
| return;
|
|
|
| SkBitmap* bitmap = ResourceBundle::GetSharedInstance().GetBitmapNamed(
|
| @@ -164,8 +164,8 @@
|
| }
|
|
|
| virtual gfx::Size GetPreferredSize() {
|
| - BrowserView* browser = GetBrowserView();
|
| - return (browser && !browser->CanCurrentlyResize()) ?
|
| + views::WindowWin* window = GetWindow();
|
| + return (!window || window->IsMaximized() || window->IsFullscreen()) ?
|
| gfx::Size() : GetSize();
|
| }
|
|
|
| @@ -181,11 +181,11 @@
|
| }
|
|
|
| private:
|
| - // Returns the BrowserView we're displayed in. Returns NULL if we're not
|
| - // currently in a browser view.
|
| - BrowserView* GetBrowserView() {
|
| - View* browser = GetAncestorWithClassName(kBrowserViewClassName);
|
| - return browser ? static_cast<BrowserView*>(browser) : NULL;
|
| + // Returns the WindowWin we're displayed in. Returns NULL if we're not
|
| + // currently in a window.
|
| + views::WindowWin* GetWindow() {
|
| + views::Widget* widget = GetWidget();
|
| + return widget ? static_cast<views::WindowWin*>(widget) : NULL;
|
| }
|
|
|
| DISALLOW_COPY_AND_ASSIGN(ResizeCorner);
|
| @@ -277,7 +277,6 @@
|
| find_bar_y_(0),
|
| contents_container_(NULL),
|
| initialized_(false),
|
| - fullscreen_(false),
|
| ignore_layout_(false),
|
| hung_window_detector_(&hung_plugin_action_),
|
| ticker_(0)
|
| @@ -340,10 +339,6 @@
|
| tab_contents->AsWebContents()->WindowMoveOrResizeStarted();
|
| }
|
|
|
| -bool BrowserView::CanCurrentlyResize() const {
|
| - return !IsMaximized() && !IsFullscreen();
|
| -}
|
| -
|
| gfx::Rect BrowserView::GetToolbarBounds() const {
|
| return toolbar_->bounds();
|
| }
|
| @@ -603,16 +598,7 @@
|
| }
|
|
|
| gfx::Rect BrowserView::GetNormalBounds() const {
|
| - // If we're in fullscreen mode, we've changed the normal bounds to the monitor
|
| - // rect, so return the saved bounds instead.
|
| - if (fullscreen_)
|
| - return gfx::Rect(saved_window_info_.window_rect);
|
| -
|
| - WINDOWPLACEMENT wp;
|
| - wp.length = sizeof(wp);
|
| - const bool ret = !!GetWindowPlacement(frame_->GetNativeView(), &wp);
|
| - DCHECK(ret);
|
| - return gfx::Rect(wp.rcNormalPosition);
|
| + return frame_->GetNormalBounds();
|
| }
|
|
|
| bool BrowserView::IsMaximized() const {
|
| @@ -620,30 +606,28 @@
|
| }
|
|
|
| void BrowserView::SetFullscreen(bool fullscreen) {
|
| - if (fullscreen_ == fullscreen)
|
| + if (IsFullscreen() == fullscreen)
|
| return; // Nothing to do.
|
|
|
| - // Move focus out of the location bar if necessary.
|
| + // Reduce jankiness during the following position changes by:
|
| + // * Hiding the window until it's in the final position
|
| + // * Ignoring all intervening Layout() calls, which resize the webpage and
|
| + // thus are slow and look ugly
|
| + ignore_layout_ = true;
|
| LocationBarView* location_bar = toolbar_->GetLocationBarView();
|
| - if (!fullscreen_) {
|
| + AutocompleteEditViewWin* edit_view =
|
| + static_cast<AutocompleteEditViewWin*>(location_bar->location_entry());
|
| + if (IsFullscreen()) {
|
| + // Hide the fullscreen bubble as soon as possible, since the mode toggle can
|
| + // take enough time for the user to notice.
|
| + fullscreen_bubble_.reset();
|
| + } else {
|
| + // Move focus out of the location bar if necessary.
|
| views::FocusManager* focus_manager = GetFocusManager();
|
| DCHECK(focus_manager);
|
| if (focus_manager->GetFocusedView() == location_bar)
|
| focus_manager->ClearFocus();
|
| - }
|
| - AutocompleteEditViewWin* edit_view =
|
| - static_cast<AutocompleteEditViewWin*>(location_bar->location_entry());
|
|
|
| - // Toggle fullscreen mode.
|
| - fullscreen_ = fullscreen;
|
| -
|
| - // Reduce jankiness during the following position changes by:
|
| - // * Hiding the window until it's in the final position
|
| - // * Ignoring all intervening Layout() calls, which resize the webpage and
|
| - // thus are slow and look ugly
|
| - ignore_layout_ = true;
|
| - frame_->set_force_hidden(true);
|
| - if (fullscreen_) {
|
| // If we don't hide the edit and force it to not show until we come out of
|
| // fullscreen, then if the user was on the New Tab Page, the edit contents
|
| // will appear atop the web contents once we go into fullscreen mode. This
|
| @@ -652,59 +636,18 @@
|
| edit_view->set_force_hidden(true);
|
| ShowWindow(edit_view->m_hWnd, SW_HIDE);
|
| }
|
| - frame_->Hide();
|
| + frame_->PushForceHidden();
|
|
|
| // Notify bookmark bar, so it can set itself to the appropriate drawing state.
|
| if (bookmark_bar_view_.get())
|
| - bookmark_bar_view_->OnFullscreenToggled(fullscreen_);
|
| + bookmark_bar_view_->OnFullscreenToggled(fullscreen);
|
|
|
| - // Size/position/style window appropriately.
|
| - views::Widget* widget = GetWidget();
|
| - HWND hwnd = widget->GetNativeView();
|
| - MONITORINFO monitor_info;
|
| - monitor_info.cbSize = sizeof(monitor_info);
|
| - GetMonitorInfo(MonitorFromWindow(hwnd, MONITOR_DEFAULTTOPRIMARY),
|
| - &monitor_info);
|
| - gfx::Rect monitor_rect(monitor_info.rcMonitor);
|
| - if (fullscreen_) {
|
| - // Save current window information. We force the window into restored mode
|
| - // before going fullscreen because Windows doesn't seem to hide the
|
| - // taskbar if the window is in the maximized state.
|
| - saved_window_info_.maximized = IsMaximized();
|
| - if (saved_window_info_.maximized)
|
| - frame_->ExecuteSystemMenuCommand(SC_RESTORE);
|
| - saved_window_info_.style = GetWindowLong(hwnd, GWL_STYLE);
|
| - saved_window_info_.ex_style = GetWindowLong(hwnd, GWL_EXSTYLE);
|
| - GetWindowRect(hwnd, &saved_window_info_.window_rect);
|
| + // Toggle fullscreen mode.
|
| + frame_->SetFullscreen(fullscreen);
|
|
|
| - // Set new window style and size.
|
| - SetWindowLong(hwnd, GWL_STYLE,
|
| - saved_window_info_.style & ~(WS_CAPTION | WS_THICKFRAME));
|
| - SetWindowLong(hwnd, GWL_EXSTYLE,
|
| - saved_window_info_.ex_style & ~(WS_EX_DLGMODALFRAME |
|
| - WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE | WS_EX_STATICEDGE));
|
| - SetWindowPos(hwnd, NULL, monitor_rect.x(), monitor_rect.y(),
|
| - monitor_rect.width(), monitor_rect.height(),
|
| - SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED);
|
| -
|
| - fullscreen_bubble_.reset(new FullscreenExitBubble(widget, browser_.get()));
|
| + if (IsFullscreen()) {
|
| + fullscreen_bubble_.reset(new FullscreenExitBubble(frame_, browser_.get()));
|
| } else {
|
| - // Hide the fullscreen bubble as soon as possible, since the calls below can
|
| - // take enough time for the user to notice.
|
| - fullscreen_bubble_.reset();
|
| -
|
| - // Reset original window style and size. The multiple window size/moves
|
| - // here are ugly, but if SetWindowPos() doesn't redraw, the taskbar won't be
|
| - // repainted. Better-looking methods welcome.
|
| - gfx::Rect new_rect(saved_window_info_.window_rect);
|
| - SetWindowLong(hwnd, GWL_STYLE, saved_window_info_.style);
|
| - SetWindowLong(hwnd, GWL_EXSTYLE, saved_window_info_.ex_style);
|
| - SetWindowPos(hwnd, NULL, new_rect.x(), new_rect.y(), new_rect.width(),
|
| - new_rect.height(),
|
| - SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED);
|
| - if (saved_window_info_.maximized)
|
| - frame_->ExecuteSystemMenuCommand(SC_MAXIMIZE);
|
| -
|
| // Show the edit again since we're no longer in fullscreen mode.
|
| edit_view->set_force_hidden(false);
|
| ShowWindow(edit_view->m_hWnd, SW_SHOW);
|
| @@ -714,12 +657,11 @@
|
| // it's in its final position.
|
| ignore_layout_ = false;
|
| Layout();
|
| - frame_->set_force_hidden(false);
|
| - ShowWindow(hwnd, SW_SHOW);
|
| + frame_->PopForceHidden();
|
| }
|
|
|
| bool BrowserView::IsFullscreen() const {
|
| - return fullscreen_;
|
| + return frame_->IsFullscreen();
|
| }
|
|
|
| LocationBar* BrowserView::GetLocationBar() const {
|
| @@ -772,7 +714,7 @@
|
| }
|
|
|
| gfx::Rect BrowserView::GetRootWindowResizerRect() const {
|
| - if (!CanCurrentlyResize())
|
| + if (frame_->IsMaximized() || frame_->IsFullscreen())
|
| return gfx::Rect();
|
|
|
| // We don't specify a resize corner size if we have a bottom shelf either.
|
| @@ -1053,10 +995,10 @@
|
| void BrowserView::SaveWindowPlacement(const gfx::Rect& bounds,
|
| bool maximized,
|
| bool always_on_top) {
|
| - // If fullscreen_ is true, we've just changed into fullscreen mode, and we're
|
| - // catching the going-into-fullscreen sizing and positioning calls, which we
|
| - // want to ignore.
|
| - if (!fullscreen_ && browser_->ShouldSaveWindowPlacement()) {
|
| + // If IsFullscreen() is true, we've just changed into fullscreen mode, and
|
| + // we're catching the going-into-fullscreen sizing and positioning calls,
|
| + // which we want to ignore.
|
| + if (!IsFullscreen() && browser_->ShouldSaveWindowPlacement()) {
|
| WindowDelegate::SaveWindowPlacement(bounds, maximized, always_on_top);
|
| browser_->SaveWindowPlacement(bounds, maximized);
|
| }
|
| @@ -1152,7 +1094,7 @@
|
| // area of the window. So we need to treat hit-tests in these regions as
|
| // hit-tests of the titlebar.
|
|
|
| - if (CanCurrentlyResize()) {
|
| + if (!frame_->IsMaximized() && !frame_->IsFullscreen()) {
|
| CRect client_rect;
|
| ::GetClientRect(frame_->GetNativeView(), &client_rect);
|
| gfx::Size resize_corner_size = ResizeCorner::GetSize();
|
|
|