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

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

Issue 27458002: Allow setting different hit test bounds overrides for mouse and touch (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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/immersive_mode_controller_ash.cc
diff --git a/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc b/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc
index ed830082ce75f81419e6a7086272f891506ece0f..61ebbe667a7f22085bda98726c2ef9c9d1e696dd 100644
--- a/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc
+++ b/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc
@@ -9,16 +9,13 @@
#include "ash/ash_switches.h"
#include "ash/shell.h"
-#include "ash/wm/window_properties.h"
-#include "base/command_line.h"
+#include "ash/wm/window_state.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/ui/fullscreen/fullscreen_controller.h"
#include "chrome/browser/ui/immersive_fullscreen_configuration.h"
#include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h"
#include "chrome/browser/ui/views/frame/top_container_view.h"
#include "content/public/browser/notification_service.h"
-#include "content/public/browser/web_contents.h"
-#include "content/public/browser/web_contents_view.h"
#include "ui/aura/client/activation_client.h"
#include "ui/aura/client/aura_constants.h"
#include "ui/aura/client/capture_client.h"
@@ -267,7 +264,6 @@ ImmersiveModeControllerAsh::ImmersiveModeControllerAsh()
enabled_(false),
reveal_state_(CLOSED),
revealed_lock_count_(0),
- tab_indicator_visibility_(TAB_INDICATORS_HIDE),
mouse_x_when_hit_top_in_screen_(-1),
gesture_begun_(false),
native_window_(NULL),
@@ -315,12 +311,6 @@ void ImmersiveModeControllerAsh::Init(
// window pointer so |this| can stop observing during destruction.
native_window_ = widget_->GetNativeWindow();
top_container_ = top_container;
-
- // Optionally allow the tab indicators to be hidden.
- if (CommandLine::ForCurrentProcess()->
- HasSwitch(ash::switches::kAshImmersiveHideTabIndicators)) {
- tab_indicator_visibility_ = TAB_INDICATORS_FORCE_HIDE;
- }
}
void ImmersiveModeControllerAsh::SetEnabled(bool enabled) {
@@ -331,9 +321,9 @@ void ImmersiveModeControllerAsh::SetEnabled(bool enabled) {
EnableWindowObservers(enabled_);
- UpdateUseMinimalChrome(LAYOUT_NO);
-
if (enabled_) {
+ UpdateUseMinimalChrome(LAYOUT_NO);
+
// Animate enabling immersive mode by sliding out the top-of-window views.
// No animation occurs if a lock is holding the top-of-window views open.
@@ -363,7 +353,6 @@ void ImmersiveModeControllerAsh::SetEnabled(bool enabled) {
reveal_state_ = CLOSED;
EnablePaintToLayer(false);
delegate_->SetImmersiveStyle(false);
- SetRenderWindowTopInsetsForTouch(0);
// Layout the root view so that incognito avatar icon, if any, gets laid
// out.
@@ -376,7 +365,8 @@ bool ImmersiveModeControllerAsh::IsEnabled() const {
}
bool ImmersiveModeControllerAsh::ShouldHideTabIndicators() const {
- return tab_indicator_visibility_ != TAB_INDICATORS_SHOW;
+ return ash::wm::GetWindowState(native_window_)->fullscreen_type() !=
+ ash::wm::FULLSCREEN_TYPE_IMMERSIVE_MINIMAL_CHROME;
}
bool ImmersiveModeControllerAsh::ShouldHideTopViews() const {
@@ -604,14 +594,6 @@ void ImmersiveModeControllerAsh::OnRemoveTransientChild(
////////////////////////////////////////////////////////////////////////////////
// Testing interface:
-void ImmersiveModeControllerAsh::SetForceHideTabIndicatorsForTest(bool force) {
- if (force)
- tab_indicator_visibility_ = TAB_INDICATORS_FORCE_HIDE;
- else if (tab_indicator_visibility_ == TAB_INDICATORS_FORCE_HIDE)
- tab_indicator_visibility_ = TAB_INDICATORS_HIDE;
- UpdateUseMinimalChrome(LAYOUT_YES);
-}
-
void ImmersiveModeControllerAsh::StartRevealForTest(bool hovered) {
MaybeStartReveal(ANIMATE_NO);
MoveMouse(top_container_, hovered);
@@ -902,21 +884,24 @@ bool ImmersiveModeControllerAsh::UpdateRevealedLocksForSwipe(
}
void ImmersiveModeControllerAsh::UpdateUseMinimalChrome(Layout layout) {
+ if (!enabled_)
+ return;
+
+ ash::wm::FullscreenType previous_fullscreen_type =
+ ash::wm::GetWindowState(native_window_)->fullscreen_type();
+
// May be NULL in tests.
FullscreenController* fullscreen_controller =
delegate_->GetFullscreenController();
bool in_tab_fullscreen = fullscreen_controller ?
fullscreen_controller->IsFullscreenForTabOrPending() : false;
- bool use_minimal_chrome = !in_tab_fullscreen && enabled_;
- native_window_->SetProperty(ash::internal::kFullscreenUsesMinimalChromeKey,
- use_minimal_chrome);
-
- TabIndicatorVisibility previous_tab_indicator_visibility =
- tab_indicator_visibility_;
- if (tab_indicator_visibility_ != TAB_INDICATORS_FORCE_HIDE) {
- tab_indicator_visibility_ = use_minimal_chrome ?
- TAB_INDICATORS_SHOW : TAB_INDICATORS_HIDE;
- }
+ ash::wm::FullscreenType fullscreen_type = in_tab_fullscreen ?
+ ash::wm::FULLSCREEN_TYPE_IMMERSIVE_NO_CHROME :
+ ash::wm::FULLSCREEN_TYPE_IMMERSIVE_MINIMAL_CHROME;
+
+ if (fullscreen_type == previous_fullscreen_type)
+ return;
+ ash::wm::GetWindowState(native_window_)->SetFullscreenType(fullscreen_type);
// Ash on Windows may not have a shell.
if (ash::Shell::HasInstance()) {
@@ -925,12 +910,10 @@ void ImmersiveModeControllerAsh::UpdateUseMinimalChrome(Layout layout) {
ash::Shell::GetInstance()->UpdateShelfVisibility();
}
- if (tab_indicator_visibility_ != previous_tab_indicator_visibility) {
- // If the top-of-window views are revealed or animating, the change will
- // take effect with the layout once the top-of-window views are closed.
- if (layout == LAYOUT_YES && reveal_state_ == CLOSED)
- LayoutBrowserRootView();
- }
+ // If the top-of-window views are revealed or animating, the change will take
+ // effect with the layout once the top-of-window views are closed.
+ if (layout == LAYOUT_YES && reveal_state_ == CLOSED)
+ LayoutBrowserRootView();
}
int ImmersiveModeControllerAsh::GetAnimationDuration(Animate animate) const {
@@ -971,7 +954,6 @@ void ImmersiveModeControllerAsh::MaybeStartReveal(Animate animate) {
// top-of-window views to their initial offscreen position for the
// animation.
delegate_->SetImmersiveStyle(false);
- SetRenderWindowTopInsetsForTouch(0);
LayoutBrowserRootView();
// Do not do any more processing if LayoutBrowserView() changed
@@ -1069,7 +1051,6 @@ void ImmersiveModeControllerAsh::OnSlideClosedAnimationCompleted() {
EnablePaintToLayer(false);
// Update tabstrip for closed state.
delegate_->SetImmersiveStyle(true);
- SetRenderWindowTopInsetsForTouch(kNearTopContainerDistance);
LayoutBrowserRootView();
}
@@ -1149,21 +1130,6 @@ bool ImmersiveModeControllerAsh::ShouldHandleGestureEvent(
location.x() < top_container_bounds_in_screen.right());
}
-void ImmersiveModeControllerAsh::SetRenderWindowTopInsetsForTouch(
- int top_inset) {
- content::WebContents* contents = delegate_->GetWebContents();
- if (contents) {
- aura::Window* window = contents->GetView()->GetContentNativeView();
- // |window| is NULL if the renderer crashed.
- if (window) {
- gfx::Insets inset(top_inset, 0, 0, 0);
- window->SetHitTestBoundsOverrideOuter(
- window->hit_test_bounds_override_outer_mouse(),
- inset);
- }
- }
-}
-
void ImmersiveModeControllerAsh::RecreateBubbleManager() {
bubble_manager_.reset(new BubbleManager(this));
const std::vector<aura::Window*> transient_children =

Powered by Google App Engine
This is Rietveld 408576698