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

Unified Diff: ash/shelf/shelf_layout_manager.cc

Issue 18637004: Sets the background color of shelf is opaque black when maximized (2nd) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove log Created 7 years, 5 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 | « ash/shelf/shelf_layout_manager.h ('k') | ash/shelf/shelf_layout_manager_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/shelf/shelf_layout_manager.cc
diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc
index c53da27f4d13fc86d1826c8f4571a21077edb44c..b0dab2fa6b0c742c1b128eb0afef4c4c3df73f07 100644
--- a/ash/shelf/shelf_layout_manager.cc
+++ b/ash/shelf/shelf_layout_manager.cc
@@ -216,8 +216,18 @@ void ShelfLayoutManager::SetAutoHideBehavior(ShelfAutoHideBehavior behavior) {
OnAutoHideBehaviorChanged(auto_hide_behavior_));
}
+void ShelfLayoutManager::PrepareForShutdown() {
+ // Clear all event filters, otherwise sometimes those filters may catch
+ // synthesized mouse event and cause crashes during the shutdown.
+ set_workspace_controller(NULL);
+ auto_hide_event_filter_.reset();
+ bezel_event_filter_.reset();
+}
+
bool ShelfLayoutManager::IsVisible() const {
- return shelf_->status_area_widget()->IsVisible() &&
+ // status_area_widget() may be NULL during the shutdown.
+ return shelf_->status_area_widget() &&
+ shelf_->status_area_widget()->IsVisible() &&
(state_.visibility_state == SHELF_VISIBLE ||
(state_.visibility_state == SHELF_AUTO_HIDE &&
state_.auto_hide_state == SHELF_AUTO_HIDE_SHOWN));
@@ -547,15 +557,14 @@ void ShelfLayoutManager::SetState(ShelfVisibilityState visibility_state) {
state.auto_hide_state = CalculateAutoHideState(visibility_state);
state.is_screen_locked =
Shell::GetInstance()->session_state_delegate()->IsScreenLocked();
+ state.window_state = workspace_controller_ ?
+ workspace_controller_->GetWindowState() : WORKSPACE_WINDOW_STATE_DEFAULT;
// It's possible for SetState() when a window becomes maximized but the state
// won't have changed value. Do the dimming check before the early exit.
- if (workspace_controller_) {
- shelf_->SetDimsShelf(
- (state.visibility_state == SHELF_VISIBLE) &&
- workspace_controller_->GetWindowState() ==
- WORKSPACE_WINDOW_STATE_MAXIMIZED);
- }
+ shelf_->SetDimsShelf(
+ (state.visibility_state == SHELF_VISIBLE) &&
+ state.window_state == WORKSPACE_WINDOW_STATE_MAXIMIZED);
if (state_.Equals(state))
return; // Nothing changed.
@@ -574,12 +583,18 @@ void ShelfLayoutManager::SetState(ShelfVisibilityState visibility_state) {
auto_hide_timer_.Stop();
- // Animating the background when transitioning from auto-hide & hidden to
- // visible is janky. Update the background immediately in this case.
+ // The transition of background from auto-hide to visible is janky if the
+ // transition also cause the shelf's slide animation from the bottom edge.
+ // This happens if:
+ // - shelf is hidden
+ // - or, shelf is visible but workspace state is maximized
+ bool keep_maximized = state_.window_state == state.window_state &&
+ state_.window_state == WORKSPACE_WINDOW_STATE_MAXIMIZED;
BackgroundAnimator::ChangeType change_type =
(state_.visibility_state == SHELF_AUTO_HIDE &&
- state_.auto_hide_state == SHELF_AUTO_HIDE_HIDDEN &&
- state.visibility_state == SHELF_VISIBLE) ?
+ state.visibility_state == SHELF_VISIBLE &&
+ (state_.auto_hide_state == SHELF_AUTO_HIDE_HIDDEN ||
+ keep_maximized)) ?
BackgroundAnimator::CHANGE_IMMEDIATE : BackgroundAnimator::CHANGE_ANIMATE;
State old_state = state_;
@@ -610,12 +625,13 @@ void ShelfLayoutManager::SetState(ShelfVisibilityState visibility_state) {
// animation you see the background change.
// Also delay the animation when the shelf was hidden, and has just been made
// visible (e.g. using a gesture-drag).
+ // But do not delay if the transition happens when a window is maximized.
bool delay_shelf_update =
state.visibility_state == SHELF_AUTO_HIDE &&
state.auto_hide_state == SHELF_AUTO_HIDE_HIDDEN &&
old_state.visibility_state == SHELF_AUTO_HIDE;
- if (state.visibility_state == SHELF_VISIBLE &&
+ if (!keep_maximized && state.visibility_state == SHELF_VISIBLE &&
old_state.visibility_state == SHELF_AUTO_HIDE &&
old_state.auto_hide_state == SHELF_AUTO_HIDE_HIDDEN)
delay_shelf_update = true;
@@ -840,14 +856,22 @@ void ShelfLayoutManager::UpdateTargetBoundsForGesture(
void ShelfLayoutManager::UpdateShelfBackground(
BackgroundAnimator::ChangeType type) {
- bool launcher_paints = GetLauncherPaintsBackground();
- shelf_->SetPaintsBackground(launcher_paints, type);
+ shelf_->SetPaintsBackground(GetShelfBackgroundType(), type);
}
-bool ShelfLayoutManager::GetLauncherPaintsBackground() const {
- return gesture_drag_status_ == GESTURE_DRAG_IN_PROGRESS ||
+ShelfBackgroundType ShelfLayoutManager::GetShelfBackgroundType() const {
+ if (state_.visibility_state != SHELF_AUTO_HIDE &&
+ state_.window_state == WORKSPACE_WINDOW_STATE_MAXIMIZED) {
+ return SHELF_BACKGROUND_MAXIMIZED;
+ }
+
+ if (gesture_drag_status_ == GESTURE_DRAG_IN_PROGRESS ||
(!state_.is_screen_locked && window_overlaps_shelf_) ||
- (state_.visibility_state == SHELF_AUTO_HIDE);
+ (state_.visibility_state == SHELF_AUTO_HIDE)) {
+ return SHELF_BACKGROUND_OVERLAP;
+ }
+
+ return SHELF_BACKGROUND_DEFAULT;
}
void ShelfLayoutManager::UpdateAutoHideStateNow() {
« no previous file with comments | « ash/shelf/shelf_layout_manager.h ('k') | ash/shelf/shelf_layout_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698