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

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

Issue 13942011: Fix bugs wrt to immrsive mode being disabled (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 8 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
« no previous file with comments | « no previous file | chrome/browser/ui/views/frame/immersive_mode_controller_ash_browsertest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 1be5add1046cbe803938af82b1f27dc596bb4626..40f4c01aa769dfda99049b72bd9bb2891b1bfb01 100644
--- a/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc
+++ b/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc
@@ -122,9 +122,12 @@ class ImmersiveModeControllerAsh::AnchoredWidgetManager
// keeping the top-of-window views revealed.
void RemoveAnchoredWidget(views::Widget* widget);
- // Adjusts the y positions of the anchored widgets for the new top container
- // bounds.
- void OnTopContainerBoundsChanged();
+ // Repositions the anchored widgets for the current top container bounds if
+ // immersive mode is enabled.
+ void MaybeRepositionAnchoredWidgets();
+
+ // Called when immersive mode has been enabled.
+ void OnImmersiveModeEnabled();
const std::set<views::Widget*>& visible_anchored_widgets() const {
return visible_;
@@ -203,7 +206,7 @@ void ImmersiveModeControllerAsh::AnchoredWidgetManager::RemoveAnchoredWidget(
}
void ImmersiveModeControllerAsh::AnchoredWidgetManager::
- OnTopContainerBoundsChanged() {
+ MaybeRepositionAnchoredWidgets() {
for (std::map<views::Widget*, int>::iterator it = widgets_.begin();
it != widgets_.end(); ++it) {
UpdateWidgetBounds(it->first, it->second);
@@ -212,6 +215,14 @@ void ImmersiveModeControllerAsh::AnchoredWidgetManager::
UpdateRevealedLock();
}
+void ImmersiveModeControllerAsh::AnchoredWidgetManager::
+ OnImmersiveModeEnabled() {
+ UpdateRevealedLock();
+ // The top container bounds may have changed while immersive mode was
+ // disabled.
+ MaybeRepositionAnchoredWidgets();
+}
+
void ImmersiveModeControllerAsh::AnchoredWidgetManager::UpdateRevealedLock() {
if (visible_.empty()) {
revealed_lock_.reset();
@@ -238,7 +249,7 @@ void ImmersiveModeControllerAsh::AnchoredWidgetManager::UpdateRevealedLock() {
void ImmersiveModeControllerAsh::AnchoredWidgetManager::UpdateWidgetBounds(
views::Widget* widget,
int y_offset) {
- if (!widget->IsVisible())
+ if (!controller_->IsEnabled() || !widget->IsVisible())
return;
gfx::Rect top_container_target_bounds =
@@ -382,22 +393,19 @@ void ImmersiveModeControllerAsh::SetEnabled(bool enabled) {
MaybeStartReveal(ANIMATE_NO);
// Reset the mouse and the focus revealed locks so that they do not affect
- // whether the top-of-window views are hidden. Reacquire the locks if ending
- // the reveal is unsuccessful.
- bool had_mouse_revealed_lock = (mouse_revealed_lock_.get() != NULL);
- bool had_focus_revealed_lock = (focus_revealed_lock_.get() != NULL);
+ // whether the top-of-window views are hidden.
mouse_revealed_lock_.reset();
focus_revealed_lock_.reset();
// Try doing the animation.
MaybeEndReveal(ANIMATE_SLOW);
- if (IsRevealed()) {
- if (had_mouse_revealed_lock)
- mouse_revealed_lock_.reset(GetRevealedLock());
- if (had_focus_revealed_lock)
- focus_revealed_lock_.reset(GetRevealedLock());
+ if (reveal_state_ == REVEALED) {
+ // Reveal was unsuccessful. Reacquire the revealed locks if appropriate.
+ UpdateMouseRevealedLock(true);
+ UpdateFocusRevealedLock();
}
+ anchored_widget_manager_->OnImmersiveModeEnabled();
} else {
// Stop cursor-at-top tracking.
top_timer_.Stop();
@@ -461,7 +469,7 @@ void ImmersiveModeControllerAsh::UnanchorWidgetFromTopContainer(
}
void ImmersiveModeControllerAsh::OnTopContainerBoundsChanged() {
- anchored_widget_manager_->OnTopContainerBoundsChanged();
+ anchored_widget_manager_->MaybeRepositionAnchoredWidgets();
}
////////////////////////////////////////////////////////////////////////////////
« no previous file with comments | « no previous file | chrome/browser/ui/views/frame/immersive_mode_controller_ash_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698