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

Unified Diff: chrome/browser/ui/views/frame/browser_frame_ash.cc

Issue 42353002: Introduce WindowStateDelegate::ToggleFullscreen (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: exclude accelerator_commands_browsertest on win Created 7 years, 2 months 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/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..d457dcea390a9829277841976d4dc121166a361f 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,29 @@ 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(
+ scoped_ptr<ash::wm::WindowStateDelegate>(
+ new AppWindowStateDelegate(browser)).Pass());
+ } else {
+ window_state->SetDelegate(
+ scoped_ptr<ash::wm::WindowStateDelegate>(
+ new BrowserWindowStateDelegate(browser)).Pass());
+ }
+ 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)
}
« no previous file with comments | « chrome/browser/ui/views/apps/native_app_window_views.cc ('k') | chrome/browser/ui/views/tabs/tab_drag_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698