diff options
Diffstat (limited to 'chrome/browser/ui/views')
-rw-r--r-- | chrome/browser/ui/views/frame/browser_view.cc | 40 | ||||
-rw-r--r-- | chrome/browser/ui/views/frame/browser_view.h | 10 |
2 files changed, 41 insertions, 9 deletions
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc index e840de3..c6c0de1 100644 --- a/chrome/browser/ui/views/frame/browser_view.cc +++ b/chrome/browser/ui/views/frame/browser_view.cc @@ -770,14 +770,14 @@ void BrowserView::EnterFullscreen( if (IsFullscreen()) return; // Nothing to do. - ProcessFullscreen(true, url, bubble_type); + ProcessFullscreen(true, FOR_DESKTOP, url, bubble_type); } void BrowserView::ExitFullscreen() { if (!IsFullscreen()) return; // Nothing to do. - ProcessFullscreen(false, GURL(), FEB_TYPE_NONE); + ProcessFullscreen(false, FOR_DESKTOP, GURL(), FEB_TYPE_NONE); } void BrowserView::UpdateFullscreenExitBubbleContent( @@ -805,17 +805,29 @@ void BrowserView::FullScreenStateChanged() { if (IsFullscreen()) { if (fullscreen_request_.pending) { fullscreen_request_.pending = false; - ProcessFullscreen(true, fullscreen_request_.url, + ProcessFullscreen(true, FOR_DESKTOP, + fullscreen_request_.url, fullscreen_request_.bubble_type); } else { - ProcessFullscreen(true, GURL(), + ProcessFullscreen(true, FOR_DESKTOP, GURL(), FEB_TYPE_BROWSER_FULLSCREEN_EXIT_INSTRUCTION); } } else { - ProcessFullscreen(false, GURL(), FEB_TYPE_NONE); + ProcessFullscreen(false, FOR_DESKTOP, GURL(), FEB_TYPE_NONE); } } +#if defined(OS_WIN) +void BrowserView::SetMetroSnapMode(bool enable) { + ProcessFullscreen(enable, FOR_METRO, GURL(), FEB_TYPE_NONE); +} + +bool BrowserView::IsInMetroSnapMode() const { + return static_cast<views::NativeWidgetWin*>( + frame_->native_widget())->IsInMetroSnapMode(); +} +#endif // defined(OS_WIN) + void BrowserView::RestoreFocus() { WebContents* selected_web_contents = GetActiveWebContents(); if (selected_web_contents) @@ -2086,6 +2098,7 @@ bool BrowserView::UpdateChildViewAndLayout(views::View* new_view, } void BrowserView::ProcessFullscreen(bool fullscreen, + FullscreenType type, const GURL& url, FullscreenExitBubbleType bubble_type) { // Reduce jankiness during the following position changes by: @@ -2098,7 +2111,8 @@ void BrowserView::ProcessFullscreen(bool fullscreen, OmniboxViewWin* omnibox_view = static_cast<OmniboxViewWin*>(location_bar->GetLocationEntry()); #endif - if (!fullscreen) { + + if (!fullscreen && type != FOR_METRO) { // Hide the fullscreen bubble as soon as possible, since the mode toggle can // take enough time for the user to notice. fullscreen_bubble_.reset(); @@ -2125,15 +2139,23 @@ void BrowserView::ProcessFullscreen(bool fullscreen, PushForceHidden(); #endif - // Toggle fullscreen mode. - frame_->SetFullscreen(fullscreen); + if (type == FOR_METRO) { +#if defined(OS_WIN) + // Enter metro snap mode. + static_cast<views::NativeWidgetWin*>( + frame_->native_widget())->SetMetroSnapFullscreen(fullscreen); +#endif + } else { + // Toggle fullscreen mode. + frame_->SetFullscreen(fullscreen); + } browser_->WindowFullscreenStateChanged(); if (fullscreen) { bool is_kiosk = CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode); - if (!is_kiosk) { + if (!is_kiosk && type != FOR_METRO) { fullscreen_bubble_.reset(new FullscreenExitBubbleViews( GetWidget(), browser_.get(), url, bubble_type)); } diff --git a/chrome/browser/ui/views/frame/browser_view.h b/chrome/browser/ui/views/frame/browser_view.h index 8c00ef0..d25c96b 100644 --- a/chrome/browser/ui/views/frame/browser_view.h +++ b/chrome/browser/ui/views/frame/browser_view.h @@ -254,6 +254,10 @@ class BrowserView : public BrowserWindow, const GURL& url, FullscreenExitBubbleType bubble_type) OVERRIDE; virtual bool IsFullscreen() const OVERRIDE; +#if defined(OS_WIN) + virtual void SetMetroSnapMode(bool enable) OVERRIDE; + virtual bool IsInMetroSnapMode() const OVERRIDE; +#endif virtual LocationBar* GetLocationBar() const OVERRIDE; virtual void SetFocusToLocationBar(bool select_all) OVERRIDE; virtual void UpdateReloadStopState(bool is_loading, bool force) OVERRIDE; @@ -443,6 +447,11 @@ class BrowserView : public BrowserWindow, FRIEND_TEST_ALL_PREFIXES(BrowserViewsAccessibilityTest, TestAboutChromeViewAccObj); + enum FullscreenType { + FOR_DESKTOP, + FOR_METRO + }; + // We store this on linux because we must call ProcessFullscreen() // asynchronously from FullScreenStateChanged() instead of directly from // EnterFullscreen(). @@ -506,6 +515,7 @@ class BrowserView : public BrowserWindow, // |bubble_type| determines what should be shown in the fullscreen exit // bubble. void ProcessFullscreen(bool fullscreen, + FullscreenType fullscreen_type, const GURL& url, FullscreenExitBubbleType bubble_type); |