| Index: chrome/browser/ui/views/immersive_mode_controller.cc
|
| diff --git a/chrome/browser/ui/views/immersive_mode_controller.cc b/chrome/browser/ui/views/immersive_mode_controller.cc
|
| index 99f505e073a9a8a027bb0186a10237d64d441219..a532c5529ceaa108287f2055ad36225646540d4c 100644
|
| --- a/chrome/browser/ui/views/immersive_mode_controller.cc
|
| +++ b/chrome/browser/ui/views/immersive_mode_controller.cc
|
| @@ -244,11 +244,20 @@ class ImmersiveModeController::WindowObserver : public aura::WindowObserver {
|
| const void* key,
|
| intptr_t old) OVERRIDE {
|
| using aura::client::kShowStateKey;
|
| - if (key != kShowStateKey)
|
| - return;
|
| - // Disable immersive mode when leaving the maximized state.
|
| - if (window->GetProperty(kShowStateKey) != ui::SHOW_STATE_MAXIMIZED)
|
| - controller_->SetEnabled(false);
|
| + if (key == kShowStateKey) {
|
| + // Disable immersive mode when leaving the maximized state.
|
| + if (window->GetProperty(kShowStateKey) != ui::SHOW_STATE_MAXIMIZED)
|
| + controller_->SetEnabled(false);
|
| + return;
|
| + }
|
| +#if defined(USE_ASH)
|
| + using ash::internal::kImmersiveModeKey;
|
| + if (key == kImmersiveModeKey) {
|
| + // Another component has toggled immersive mode.
|
| + controller_->SetEnabled(window->GetProperty(kImmersiveModeKey));
|
| + return;
|
| + }
|
| +#endif
|
| }
|
|
|
| private:
|
| @@ -280,6 +289,7 @@ void ImmersiveModeController::Init() {
|
| // window pointer so |this| can stop observing during destruction.
|
| native_window_ = browser_view_->GetNativeWindow();
|
| DCHECK(native_window_);
|
| + EnableWindowObservers(true);
|
|
|
| #if defined(USE_ASH)
|
| // Optionally allow the tab indicators to be hidden.
|
| @@ -302,6 +312,7 @@ void ImmersiveModeController::SetEnabled(bool enabled) {
|
| }
|
|
|
| #if defined(USE_ASH)
|
| + // This causes a no-op call to SetEnabled() since enabled_ is already set.
|
| native_window_->SetProperty(ash::internal::kImmersiveModeKey, enabled_);
|
| // Ash on Windows may not have a shell.
|
| if (ash::Shell::HasInstance()) {
|
| @@ -317,8 +328,6 @@ void ImmersiveModeController::SetEnabled(bool enabled) {
|
| // Always ensure tab strip is in correct state.
|
| browser_view_->tabstrip()->SetImmersiveStyle(enabled_);
|
| browser_view_->Layout();
|
| -
|
| - EnableWindowObservers(enabled_);
|
| }
|
|
|
| views::View* ImmersiveModeController::reveal_view() {
|
| @@ -347,7 +356,7 @@ void ImmersiveModeController::CancelReveal() {
|
|
|
| // ui::EventHandler overrides:
|
| void ImmersiveModeController::OnMouseEvent(ui::MouseEvent* event) {
|
| - if (event->type() != ui::ET_MOUSE_MOVED)
|
| + if (!enabled_ || event->type() != ui::ET_MOUSE_MOVED)
|
| return;
|
| if (event->location().y() == 0) {
|
| // Start a reveal if the mouse touches the top of the screen and then stops
|
|
|