Index: chrome/browser/ui/views/frame/app_non_client_frame_view_ash.cc |
diff --git a/chrome/browser/ui/views/frame/app_non_client_frame_view_ash.cc b/chrome/browser/ui/views/frame/app_non_client_frame_view_ash.cc |
index 89f4dabf4f07605c3e9dafbcc65b3f8b06a90f19..5781ec192f04787009bfb7387ee96082f8ac6bcd 100644 |
--- a/chrome/browser/ui/views/frame/app_non_client_frame_view_ash.cc |
+++ b/chrome/browser/ui/views/frame/app_non_client_frame_view_ash.cc |
@@ -5,7 +5,12 @@ |
#include "chrome/browser/ui/views/frame/app_non_client_frame_view_ash.h" |
#include "ash/wm/caption_buttons/frame_caption_button_container_view.h" |
+#include "ash/wm/window_state.h" |
+#include "ash/wm/window_state_delegate.h" |
#include "base/i18n/rtl.h" |
+#include "chrome/browser/ui/browser_commands.h" |
+#include "chrome/browser/ui/browser_finder.h" |
+#include "chrome/browser/ui/browser_window.h" |
#include "chrome/browser/ui/views/frame/browser_frame.h" |
#include "chrome/browser/ui/views/frame/browser_view.h" |
#include "grit/ash_resources.h" |
@@ -85,6 +90,40 @@ class ControlViewBackground : public views::Background { |
DISALLOW_COPY_AND_ASSIGN(ControlViewBackground); |
}; |
+class FrameWindowStateDelegate : public ash::wm::WindowStateDelegate { |
+ public: |
+ FrameWindowStateDelegate() {} |
+ virtual ~FrameWindowStateDelegate(){} |
+ |
+ // Invoked when the user uses Shift+F4/F4 to toggle the window |
+ // fullscreen state. |
+ virtual bool ToggleFullscreen(ash::wm::WindowState* window_state) OVERRIDE { |
+ bool is_fullscreen = window_state->IsFullscreen(); |
+ |
+ // Windows which cannot be maximized should not be fullscreened. |
+ if (!is_fullscreen && !window_state->CanMaximize()) |
+ return true; |
+ |
+ Browser* browser = chrome::FindBrowserWithWindow(window_state->window()); |
+ CHECK(browser); |
+ if (is_fullscreen) { |
+ chrome::ToggleFullscreenMode(browser); |
+ return true; |
+ } |
+ // 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. |
+ if (browser->is_app() && browser->app_type() != Browser::APP_TYPE_CHILD) |
+ window_state->ToggleMaximized(); |
+ else |
+ chrome::ToggleFullscreenMode(browser); |
+ return true; |
+ } |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(FrameWindowStateDelegate); |
+}; |
+ |
} // namespace |
// Observer to detect when the browser frame widget closes so we can clean |
@@ -153,6 +192,9 @@ AppNonClientFrameViewAsh::AppNonClientFrameViewAsh( |
} |
window->SetHitTestBoundsOverrideOuter(hit_test_insets, hit_test_insets); |
+ |
+ ash::wm::GetWindowState(window)->SetDelegate(new FrameWindowStateDelegate()); |
+ |
gfx::Rect control_bounds = GetControlBounds(); |
window->SetBounds(control_bounds); |
control_widget_->Show(); |