Chromium Code Reviews| 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..ea5e9a1fbd829a681f2200800d410ad37ad78340 100644 |
| --- a/ash/wm/shelf_layout_manager.cc |
| +++ b/ash/wm/shelf_layout_manager.cc |
| @@ -247,15 +247,40 @@ 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); |
| + SetState(CalculateShelfVisibilityWhileDragging()); |
|
sky
2013/01/31 00:58:13
Should we instead ignore gestures when hidden.
zel
2013/01/31 01:07:27
I've added TODO here, there will me many quirks li
|
| } 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 +290,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; |