OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/views/frame/browser_view.h" | 5 #include "chrome/browser/ui/views/frame/browser_view.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
241 bool ShouldSaveOrRestoreWindowPos() { | 241 bool ShouldSaveOrRestoreWindowPos() { |
242 #if defined(OS_WIN) | 242 #if defined(OS_WIN) |
243 // In Windows 8's single window Metro mode the window is always maximized | 243 // In Windows 8's single window Metro mode the window is always maximized |
244 // (without the WS_MAXIMIZE style). | 244 // (without the WS_MAXIMIZE style). |
245 if (win8::IsSingleWindowMetroMode()) | 245 if (win8::IsSingleWindowMetroMode()) |
246 return false; | 246 return false; |
247 #endif | 247 #endif |
248 return true; | 248 return true; |
249 } | 249 } |
250 | 250 |
251 // Returns whether immersive mode should replace fullscreen, which should only | |
252 // occur for "browser-fullscreen" and not for "tab-fullscreen" (which has a URL | |
253 // for the tab entering fullscreen). | |
254 bool UseImmersiveFullscreenForUrl(const GURL& url) { | |
255 bool is_browser_fullscreen = url.is_empty(); | |
256 return is_browser_fullscreen && | |
257 ImmersiveFullscreenConfiguration::UseImmersiveFullscreen(); | |
258 } | |
259 | |
260 } // namespace | 251 } // namespace |
261 | 252 |
262 /////////////////////////////////////////////////////////////////////////////// | 253 /////////////////////////////////////////////////////////////////////////////// |
263 | 254 |
264 // Delegate implementation for BrowserViewLayout. Usually just forwards calls | 255 // Delegate implementation for BrowserViewLayout. Usually just forwards calls |
265 // into BrowserView. | 256 // into BrowserView. |
266 class BrowserViewLayoutDelegateImpl : public BrowserViewLayoutDelegate { | 257 class BrowserViewLayoutDelegateImpl : public BrowserViewLayoutDelegate { |
267 public: | 258 public: |
268 explicit BrowserViewLayoutDelegateImpl(BrowserView* browser_view) | 259 explicit BrowserViewLayoutDelegateImpl(BrowserView* browser_view) |
269 : browser_view_(browser_view) {} | 260 : browser_view_(browser_view) {} |
(...skipping 609 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
879 | 870 |
880 ProcessFullscreen(false, FOR_DESKTOP, GURL(), FEB_TYPE_NONE); | 871 ProcessFullscreen(false, FOR_DESKTOP, GURL(), FEB_TYPE_NONE); |
881 } | 872 } |
882 | 873 |
883 void BrowserView::UpdateFullscreenExitBubbleContent( | 874 void BrowserView::UpdateFullscreenExitBubbleContent( |
884 const GURL& url, | 875 const GURL& url, |
885 FullscreenExitBubbleType bubble_type) { | 876 FullscreenExitBubbleType bubble_type) { |
886 // Immersive mode has no exit bubble because it has a visible strip at the | 877 // Immersive mode has no exit bubble because it has a visible strip at the |
887 // top that gives the user a hover target. | 878 // top that gives the user a hover target. |
888 // TODO(jamescook): Figure out what to do with mouse-lock. | 879 // TODO(jamescook): Figure out what to do with mouse-lock. |
889 if (bubble_type == FEB_TYPE_NONE || UseImmersiveFullscreenForUrl(url)) { | 880 if (bubble_type == FEB_TYPE_NONE || ShouldUseImmersiveFullscreenForUrl(url)) { |
890 fullscreen_bubble_.reset(); | 881 fullscreen_bubble_.reset(); |
891 } else if (fullscreen_bubble_.get()) { | 882 } else if (fullscreen_bubble_.get()) { |
892 fullscreen_bubble_->UpdateContent(url, bubble_type); | 883 fullscreen_bubble_->UpdateContent(url, bubble_type); |
893 } else { | 884 } else { |
894 fullscreen_bubble_.reset(new FullscreenExitBubbleViews( | 885 fullscreen_bubble_.reset(new FullscreenExitBubbleViews( |
895 this, url, bubble_type)); | 886 this, url, bubble_type)); |
896 } | 887 } |
897 } | 888 } |
898 | 889 |
899 bool BrowserView::ShouldHideUIForFullscreen() const { | 890 bool BrowserView::ShouldHideUIForFullscreen() const { |
(...skipping 1482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2382 // Enter metro snap mode. | 2373 // Enter metro snap mode. |
2383 static_cast<views::NativeWidgetWin*>( | 2374 static_cast<views::NativeWidgetWin*>( |
2384 frame_->native_widget())->SetMetroSnapFullscreen(fullscreen); | 2375 frame_->native_widget())->SetMetroSnapFullscreen(fullscreen); |
2385 #endif | 2376 #endif |
2386 } else { | 2377 } else { |
2387 // Toggle fullscreen mode. | 2378 // Toggle fullscreen mode. |
2388 frame_->SetFullscreen(fullscreen); | 2379 frame_->SetFullscreen(fullscreen); |
2389 } | 2380 } |
2390 | 2381 |
2391 // Enable immersive before the browser refreshes its list of enabled commands. | 2382 // Enable immersive before the browser refreshes its list of enabled commands. |
2392 if (UseImmersiveFullscreenForUrl(url)) | 2383 if (ShouldUseImmersiveFullscreenForUrl(url)) |
2393 immersive_mode_controller_->SetEnabled(fullscreen); | 2384 immersive_mode_controller_->SetEnabled(fullscreen); |
2394 | 2385 |
2395 browser_->WindowFullscreenStateChanged(); | 2386 browser_->WindowFullscreenStateChanged(); |
2396 | 2387 |
2397 if (fullscreen) { | 2388 if (fullscreen) { |
2398 if (!chrome::IsRunningInAppMode() && | 2389 if (!chrome::IsRunningInAppMode() && |
2399 type != FOR_METRO && | 2390 type != FOR_METRO && |
2400 !UseImmersiveFullscreenForUrl(url)) { | 2391 !ShouldUseImmersiveFullscreenForUrl(url)) { |
2401 fullscreen_bubble_.reset(new FullscreenExitBubbleViews( | 2392 fullscreen_bubble_.reset(new FullscreenExitBubbleViews( |
2402 this, url, bubble_type)); | 2393 this, url, bubble_type)); |
2403 } | 2394 } |
2404 } else { | 2395 } else { |
2405 #if defined(OS_WIN) && !defined(USE_AURA) | 2396 #if defined(OS_WIN) && !defined(USE_AURA) |
2406 if (omnibox_win) { | 2397 if (omnibox_win) { |
2407 // Show the edit again since we're no longer in fullscreen mode. | 2398 // Show the edit again since we're no longer in fullscreen mode. |
2408 omnibox_win->set_force_hidden(false); | 2399 omnibox_win->set_force_hidden(false); |
2409 ShowWindow(omnibox_win->m_hWnd, SW_SHOW); | 2400 ShowWindow(omnibox_win->m_hWnd, SW_SHOW); |
2410 } | 2401 } |
2411 #endif | 2402 #endif |
2412 } | 2403 } |
2413 | 2404 |
2414 // Undo our anti-jankiness hacks and force a re-layout. We also need to | 2405 // Undo our anti-jankiness hacks and force a re-layout. We also need to |
2415 // recompute the height of the infobar top arrow because toggling in and out | 2406 // recompute the height of the infobar top arrow because toggling in and out |
2416 // of fullscreen changes it. Calling ToolbarSizeChanged() will do both these | 2407 // of fullscreen changes it. Calling ToolbarSizeChanged() will do both these |
2417 // things since it computes the arrow height directly and forces a layout | 2408 // things since it computes the arrow height directly and forces a layout |
2418 // indirectly via UpdateUIForContents(). | 2409 // indirectly via UpdateUIForContents(). |
2419 ignore_layout_ = false; | 2410 ignore_layout_ = false; |
2420 ToolbarSizeChanged(false); | 2411 ToolbarSizeChanged(false); |
2421 } | 2412 } |
2422 | 2413 |
| 2414 bool BrowserView::ShouldUseImmersiveFullscreenForUrl(const GURL& url) const { |
| 2415 bool is_browser_fullscreen = url.is_empty(); |
| 2416 return ImmersiveFullscreenConfiguration::UseImmersiveFullscreen() && |
| 2417 is_browser_fullscreen && IsBrowserTypeNormal(); |
| 2418 } |
| 2419 |
2423 void BrowserView::LoadAccelerators() { | 2420 void BrowserView::LoadAccelerators() { |
2424 #if defined(OS_WIN) && !defined(USE_AURA) | 2421 #if defined(OS_WIN) && !defined(USE_AURA) |
2425 HACCEL accelerator_table = AtlLoadAccelerators(IDR_MAINFRAME); | 2422 HACCEL accelerator_table = AtlLoadAccelerators(IDR_MAINFRAME); |
2426 DCHECK(accelerator_table); | 2423 DCHECK(accelerator_table); |
2427 | 2424 |
2428 // We have to copy the table to access its contents. | 2425 // We have to copy the table to access its contents. |
2429 int count = CopyAcceleratorTable(accelerator_table, 0, 0); | 2426 int count = CopyAcceleratorTable(accelerator_table, 0, 0); |
2430 if (count == 0) { | 2427 if (count == 0) { |
2431 // Nothing to do in that case. | 2428 // Nothing to do in that case. |
2432 return; | 2429 return; |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2769 // The +1 in the next line creates a 1-px gap between icon and arrow tip. | 2766 // The +1 in the next line creates a 1-px gap between icon and arrow tip. |
2770 gfx::Point icon_bottom(0, location_icon_view->GetImageBounds().bottom() - | 2767 gfx::Point icon_bottom(0, location_icon_view->GetImageBounds().bottom() - |
2771 LocationBarView::kIconInternalPadding + 1); | 2768 LocationBarView::kIconInternalPadding + 1); |
2772 ConvertPointToTarget(location_icon_view, this, &icon_bottom); | 2769 ConvertPointToTarget(location_icon_view, this, &icon_bottom); |
2773 gfx::Point infobar_top(0, infobar_container_->GetVerticalOverlap(NULL)); | 2770 gfx::Point infobar_top(0, infobar_container_->GetVerticalOverlap(NULL)); |
2774 ConvertPointToTarget(infobar_container_, this, &infobar_top); | 2771 ConvertPointToTarget(infobar_container_, this, &infobar_top); |
2775 top_arrow_height = infobar_top.y() - icon_bottom.y(); | 2772 top_arrow_height = infobar_top.y() - icon_bottom.y(); |
2776 } | 2773 } |
2777 return top_arrow_height; | 2774 return top_arrow_height; |
2778 } | 2775 } |
OLD | NEW |