| Index: ash/wm/shelf_layout_manager.cc
|
| diff --git a/ash/wm/shelf_layout_manager.cc b/ash/wm/shelf_layout_manager.cc
|
| index 52f6b03fcedac4705922301067e4a51044a7d48d..ec62865651e0901c675e8019789fbd11abe5f127 100644
|
| --- a/ash/wm/shelf_layout_manager.cc
|
| +++ b/ash/wm/shelf_layout_manager.cc
|
| @@ -247,15 +247,42 @@ void ShelfLayoutManager::LayoutShelf() {
|
| UpdateHitTestBounds();
|
| }
|
|
|
| +ShelfVisibilityState ShelfLayoutManager::CalculateShelfVisibility() {
|
| + switch(auto_hide_behavior_) {
|
| + case SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS:
|
| + return SHELF_AUTO_HIDE;
|
| + case SHELF_AUTO_HIDE_BEHAVIOR_NEVER:
|
| + return SHELF_VISIBLE;
|
| + case SHELF_AUTO_HIDE_ALWAYS_HIDDEN:
|
| + return SHELF_HIDDEN;
|
| + }
|
| + return SHELF_VISIBLE;
|
| +}
|
| +
|
| +ShelfVisibilityState
|
| +ShelfLayoutManager::CalculateShelfVisibilityWhileDragging() {
|
| + switch(auto_hide_behavior_) {
|
| + case SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS:
|
| + case SHELF_AUTO_HIDE_BEHAVIOR_NEVER:
|
| + return SHELF_AUTO_HIDE;
|
| + case SHELF_AUTO_HIDE_ALWAYS_HIDDEN:
|
| + return SHELF_HIDDEN;
|
| + }
|
| + return SHELF_VISIBLE;
|
| +}
|
| +
|
| void ShelfLayoutManager::UpdateVisibilityState() {
|
| ShellDelegate* delegate = Shell::GetInstance()->delegate();
|
| if (delegate && delegate->IsScreenLocked()) {
|
| SetState(SHELF_VISIBLE);
|
| } else if (gesture_drag_status_ == GESTURE_DRAG_COMPLETE_IN_PROGRESS) {
|
| - SetState(SHELF_AUTO_HIDE);
|
| + // TODO(zelidrag): Verify shelf drag animation still shows on the device
|
| + // when we are in SHELF_AUTO_HIDE_ALWAYS_HIDDEN.
|
| + SetState(CalculateShelfVisibilityWhileDragging());
|
| } else if (GetRootWindowController(root_window_)->IsImmersiveMode()) {
|
| // The user choosing immersive mode indicates he or she wants to maximize
|
| // screen real-estate for content, so always auto-hide the shelf.
|
| + DCHECK_NE(auto_hide_behavior_, SHELF_AUTO_HIDE_ALWAYS_HIDDEN);
|
| SetState(SHELF_AUTO_HIDE);
|
| } else {
|
| WorkspaceWindowState window_state(workspace_controller_->GetWindowState());
|
| @@ -265,14 +292,12 @@ void ShelfLayoutManager::UpdateVisibilityState() {
|
| break;
|
|
|
| case WORKSPACE_WINDOW_STATE_MAXIMIZED:
|
| - SetState(auto_hide_behavior_ == SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS ?
|
| - SHELF_AUTO_HIDE : SHELF_VISIBLE);
|
| + SetState(CalculateShelfVisibility());
|
| break;
|
|
|
| case WORKSPACE_WINDOW_STATE_WINDOW_OVERLAPS_SHELF:
|
| case WORKSPACE_WINDOW_STATE_DEFAULT:
|
| - SetState(auto_hide_behavior_ == SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS ?
|
| - SHELF_AUTO_HIDE : SHELF_VISIBLE);
|
| + SetState(CalculateShelfVisibility());
|
| SetWindowOverlapsShelf(window_state ==
|
| WORKSPACE_WINDOW_STATE_WINDOW_OVERLAPS_SHELF);
|
| break;
|
|
|