| 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..d108863fe2025da6010742864d53c19c9f28a837 100644
|
| --- a/chrome/browser/ui/views/frame/browser_frame_ash.cc
|
| +++ b/chrome/browser/ui/views/frame/browser_frame_ash.cc
|
| @@ -5,7 +5,10 @@
|
| #include "chrome/browser/ui/views/frame/browser_frame_ash.h"
|
|
|
| #include "ash/wm/window_state.h"
|
| +#include "ash/wm/window_state_delegate.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 +17,64 @@
|
|
|
| using aura::Window;
|
|
|
| +namespace {
|
| +
|
| +// BrowserWindowStateDelegate classe handles a user's fullscreen
|
| +// request (Shift+F4/F4) for browser (tabbed/popup) windows.
|
| +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);
|
| +};
|
| +
|
| +// AppNonClientFrameViewAsh shows only the window controls and no
|
| +// other 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. This is used for V1 apps.
|
| +class AppWindowStateDelegate : public ash::wm::WindowStateDelegate {
|
| + 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());
|
| + 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 +147,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)
|
| }
|
|
|
|
|