Chromium Code Reviews| Index: chrome/browser/ui/views/frame/browser_frame_ash.cc |
| diff --git a/chrome/browser/ui/views/frame/browser_frame_ash.cc b/chrome/browser/ui/views/frame/browser_frame_ash.cc |
| index 07f4e332ebbf953b1a7b1912b59e0d2153efdc9b..b9f018df2828e1cfa580f621288050608c2b897b 100644 |
| --- a/chrome/browser/ui/views/frame/browser_frame_ash.cc |
| +++ b/chrome/browser/ui/views/frame/browser_frame_ash.cc |
| @@ -6,6 +6,8 @@ |
| #include "ash/wm/window_state.h" |
| #include "ash/wm/window_util.h" |
| +#include "chrome/browser/ui/browser_commands.h" |
| +#include "chrome/browser/ui/browser_finder.h" |
| #include "chrome/browser/ui/views/frame/browser_view.h" |
| #include "ui/aura/client/aura_constants.h" |
| #include "ui/aura/window.h" |
| @@ -14,6 +16,62 @@ |
| using aura::Window; |
| +namespace { |
| + |
| +class BrowserWindowStateDelegate : public ash::wm::WindowStateDelegate { |
| + public: |
| + explicit BrowserWindowStateDelegate(Browser* browser) |
| + : browser_(browser) { |
| + DCHECK(browser_); |
| + } |
| + virtual ~BrowserWindowStateDelegate(){} |
| + |
| + // Overridden from ash::wm::WindowStateDelegate. |
| + virtual bool ToggleFullscreen(ash::wm::WindowState* window_state) OVERRIDE { |
| + DCHECK(window_state->IsFullscreen() || window_state->CanMaximize()); |
| + // Windows which cannot be maximized should not be fullscreened. |
| + if (!window_state->IsFullscreen() && !window_state->CanMaximize()) |
| + return true; |
| + chrome::ToggleFullscreenMode(browser_); |
| + return true; |
| + } |
| + private: |
| + Browser* browser_; // not owned. |
| + |
| + DISALLOW_COPY_AND_ASSIGN(BrowserWindowStateDelegate); |
| +}; |
| + |
| +class AppWindowStateDelegate : public ash::wm::WindowStateDelegate { |
|
James Cook
2013/10/29 16:13:04
nit: A class comment mentioning which type of app
oshima
2013/10/29 17:45:54
Done.
|
| + public: |
| + explicit AppWindowStateDelegate(Browser* browser) |
| + : browser_(browser) { |
| + DCHECK(browser_); |
| + } |
| + virtual ~AppWindowStateDelegate(){} |
| + |
| + // Overridden from ash::wm::WindowStateDelegate. |
| + virtual bool ToggleFullscreen(ash::wm::WindowState* window_state) OVERRIDE { |
| + DCHECK(window_state->IsFullscreen() || window_state->CanMaximize()); |
| + // AppNonClientFrameViewAsh shows only the window controls and no other |
|
pkotwicz
2013/10/29 16:45:14
This comment should probably probably be moved so
oshima
2013/10/29 17:45:54
Done.
|
| + // window decorations which is pretty close to fullscreen. Put v1 apps |
| + // into maximized mode instead of fullscreen to avoid showing the ugly |
| + // fullscreen exit bubble. |
| + if (window_state->IsFullscreen()) |
| + chrome::ToggleFullscreenMode(browser_); |
| + else |
| + window_state->ToggleMaximized(); |
| + return true; |
| + } |
| + |
| + private: |
| + Browser* browser_; // not owned. |
| + |
| + DISALLOW_COPY_AND_ASSIGN(AppWindowStateDelegate); |
| +}; |
| + |
| + |
| +} // namespace |
| + |
| //////////////////////////////////////////////////////////////////////////////// |
| // BrowserFrameAsh::WindowPropertyWatcher |
| @@ -86,22 +144,24 @@ BrowserFrameAsh::BrowserFrameAsh(BrowserFrame* browser_frame, |
| window_property_watcher_(new WindowPropertyWatcher(this, browser_frame)) { |
| GetNativeWindow()->SetName(kWindowName); |
| GetNativeWindow()->AddObserver(window_property_watcher_.get()); |
| - if (browser_view->browser()->is_type_tabbed()) |
| - ash::wm::SetAnimateToFullscreen(GetNativeWindow(), false); |
| + Browser* browser = browser_view->browser(); |
| + ash::wm::WindowState* window_state = |
| + ash::wm::GetWindowState(GetNativeWindow()); |
| + if (browser->is_app() && browser->app_type() != Browser::APP_TYPE_CHILD) |
| + window_state->SetDelegate(new AppWindowStateDelegate(browser)); |
| + else |
| + window_state->SetDelegate(new BrowserWindowStateDelegate(browser)); |
| + window_state->set_animate_to_fullscreen(!browser->is_type_tabbed()); |
| // Turn on auto window management if we don't need an explicit bounds. |
| // This way the requested bounds are honored. |
| - if (!browser_view->browser()->bounds_overridden() && |
| - !browser_view->browser()->is_session_restore()) |
| + if (!browser->bounds_overridden() && !browser->is_session_restore()) |
| SetWindowAutoManaged(); |
| #if defined(OS_CHROMEOS) |
| // For legacy reasons v1 apps (like Secure Shell) are allowed to consume keys |
| // like brightness, volume, etc. Otherwise these keys are handled by the |
| // Ash window manager. |
| - if (browser_view->browser()->is_app()) { |
| - ash::wm::GetWindowState(GetNativeWindow())-> |
| - set_can_consume_system_keys(true); |
| - } |
| + window_state->set_can_consume_system_keys(browser->is_app()); |
| #endif // defined(OS_CHROMEOS) |
| } |