summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/views
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui/views')
-rw-r--r--chrome/browser/ui/views/frame/browser_view.cc40
-rw-r--r--chrome/browser/ui/views/frame/browser_view.h10
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);