OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ash/shelf/shelf_layout_manager.h" | 5 #include "ash/shelf/shelf_layout_manager.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 #include <cstring> | 9 #include <cstring> |
10 #include <string> | 10 #include <string> |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 mouse_over_shelf_when_auto_hide_timer_started_(false), | 198 mouse_over_shelf_when_auto_hide_timer_started_(false), |
199 bezel_event_filter_(new ShelfBezelEventFilter(this)), | 199 bezel_event_filter_(new ShelfBezelEventFilter(this)), |
200 gesture_drag_status_(GESTURE_DRAG_NONE), | 200 gesture_drag_status_(GESTURE_DRAG_NONE), |
201 gesture_drag_amount_(0.f), | 201 gesture_drag_amount_(0.f), |
202 gesture_drag_auto_hide_state_(SHELF_AUTO_HIDE_SHOWN), | 202 gesture_drag_auto_hide_state_(SHELF_AUTO_HIDE_SHOWN), |
203 update_shelf_observer_(NULL), | 203 update_shelf_observer_(NULL), |
204 duration_override_in_ms_(0) { | 204 duration_override_in_ms_(0) { |
205 Shell::GetInstance()->AddShellObserver(this); | 205 Shell::GetInstance()->AddShellObserver(this); |
206 Shell::GetInstance()->lock_state_controller()->AddObserver(this); | 206 Shell::GetInstance()->lock_state_controller()->AddObserver(this); |
207 aura::client::GetActivationClient(root_window_)->AddObserver(this); | 207 aura::client::GetActivationClient(root_window_)->AddObserver(this); |
| 208 Shell::GetInstance()->session_state_delegate()->AddSessionStateObserver(this); |
208 } | 209 } |
209 | 210 |
210 ShelfLayoutManager::~ShelfLayoutManager() { | 211 ShelfLayoutManager::~ShelfLayoutManager() { |
211 if (update_shelf_observer_) | 212 if (update_shelf_observer_) |
212 update_shelf_observer_->Detach(); | 213 update_shelf_observer_->Detach(); |
213 | 214 |
214 FOR_EACH_OBSERVER(ShelfLayoutManagerObserver, observers_, WillDeleteShelf()); | 215 FOR_EACH_OBSERVER(ShelfLayoutManagerObserver, observers_, WillDeleteShelf()); |
215 Shell::GetInstance()->RemoveShellObserver(this); | 216 Shell::GetInstance()->RemoveShellObserver(this); |
216 Shell::GetInstance()->lock_state_controller()->RemoveObserver(this); | 217 Shell::GetInstance()->lock_state_controller()->RemoveObserver(this); |
217 aura::client::GetActivationClient(root_window_)->RemoveObserver(this); | 218 aura::client::GetActivationClient(root_window_)->RemoveObserver(this); |
| 219 Shell::GetInstance()-> |
| 220 session_state_delegate()->RemoveSessionStateObserver(this); |
218 } | 221 } |
219 | 222 |
220 void ShelfLayoutManager::SetAutoHideBehavior(ShelfAutoHideBehavior behavior) { | 223 void ShelfLayoutManager::SetAutoHideBehavior(ShelfAutoHideBehavior behavior) { |
221 if (auto_hide_behavior_ == behavior) | 224 if (auto_hide_behavior_ == behavior) |
222 return; | 225 return; |
223 auto_hide_behavior_ = behavior; | 226 auto_hide_behavior_ = behavior; |
224 UpdateVisibilityState(); | 227 UpdateVisibilityState(); |
225 FOR_EACH_OBSERVER(ShelfLayoutManagerObserver, observers_, | 228 FOR_EACH_OBSERVER(ShelfLayoutManagerObserver, observers_, |
226 OnAutoHideBehaviorChanged(root_window_, | 229 OnAutoHideBehaviorChanged(root_window_, |
227 auto_hide_behavior_)); | 230 auto_hide_behavior_)); |
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
725 status_bounds.set_x(status_bounds.x() + | 728 status_bounds.set_x(status_bounds.x() + |
726 target_bounds.shelf_bounds_in_root.x()); | 729 target_bounds.shelf_bounds_in_root.x()); |
727 status_bounds.set_y(status_bounds.y() + | 730 status_bounds.set_y(status_bounds.y() + |
728 target_bounds.shelf_bounds_in_root.y()); | 731 target_bounds.shelf_bounds_in_root.y()); |
729 shelf_->status_area_widget()->SetBounds( | 732 shelf_->status_area_widget()->SetBounds( |
730 ScreenUtil::ConvertRectToScreen( | 733 ScreenUtil::ConvertRectToScreen( |
731 shelf_->status_area_widget()->GetNativeView()->parent(), | 734 shelf_->status_area_widget()->GetNativeView()->parent(), |
732 status_bounds)); | 735 status_bounds)); |
733 SessionStateDelegate* session_state_delegate = | 736 SessionStateDelegate* session_state_delegate = |
734 Shell::GetInstance()->session_state_delegate(); | 737 Shell::GetInstance()->session_state_delegate(); |
735 if (!state_.is_screen_locked && | 738 if (!state_.is_screen_locked) { |
736 (session_state_delegate->IsActiveUserSessionStarted() || | 739 gfx::Insets insets; |
737 !keyboard_bounds_.IsEmpty())) { | 740 // If user session is blocked (login to new user session or add user to |
738 Shell::GetInstance()->SetDisplayWorkAreaInsets( | 741 // the existing session - multi-profile) then give 100% of work area only if |
739 root_window_, target_bounds.work_area_insets); | 742 // keyboard is not shown. |
| 743 if (!session_state_delegate->IsUserSessionBlocked() || |
| 744 !keyboard_bounds_.IsEmpty()) { |
| 745 insets = target_bounds.work_area_insets; |
| 746 } |
| 747 Shell::GetInstance()->SetDisplayWorkAreaInsets(root_window_, insets); |
740 } | 748 } |
741 } | 749 } |
742 | 750 |
743 void ShelfLayoutManager::StopAnimating() { | 751 void ShelfLayoutManager::StopAnimating() { |
744 GetLayer(shelf_)->GetAnimator()->StopAnimating(); | 752 GetLayer(shelf_)->GetAnimator()->StopAnimating(); |
745 GetLayer(shelf_->status_area_widget())->GetAnimator()->StopAnimating(); | 753 GetLayer(shelf_->status_area_widget())->GetAnimator()->StopAnimating(); |
746 } | 754 } |
747 | 755 |
748 void ShelfLayoutManager::GetShelfSize(int* width, int* height) { | 756 void ShelfLayoutManager::GetShelfSize(int* width, int* height) { |
749 *width = *height = 0; | 757 *width = *height = 0; |
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1126 | 1134 |
1127 keyboard_bounds_ = new_bounds; | 1135 keyboard_bounds_ = new_bounds; |
1128 OnWindowResized(); | 1136 OnWindowResized(); |
1129 | 1137 |
1130 SessionStateDelegate* session_state_delegate = | 1138 SessionStateDelegate* session_state_delegate = |
1131 Shell::GetInstance()->session_state_delegate(); | 1139 Shell::GetInstance()->session_state_delegate(); |
1132 | 1140 |
1133 // On login screen if keyboard has been just hidden, update bounds just once | 1141 // On login screen if keyboard has been just hidden, update bounds just once |
1134 // but ignore target_bounds.work_area_insets since shelf overlaps with login | 1142 // but ignore target_bounds.work_area_insets since shelf overlaps with login |
1135 // window. | 1143 // window. |
1136 if (!session_state_delegate->IsActiveUserSessionStarted() && | 1144 if (session_state_delegate->IsUserSessionBlocked() && |
1137 keyboard_is_about_to_hide) { | 1145 keyboard_is_about_to_hide) { |
1138 Shell::GetInstance()->SetDisplayWorkAreaInsets(root_window_, gfx::Insets()); | 1146 Shell::GetInstance()->SetDisplayWorkAreaInsets(root_window_, gfx::Insets()); |
1139 } | 1147 } |
1140 } | 1148 } |
1141 | 1149 |
1142 void ShelfLayoutManager::OnDockBoundsChanging( | 1150 void ShelfLayoutManager::OnDockBoundsChanging( |
1143 const gfx::Rect& dock_bounds, | 1151 const gfx::Rect& dock_bounds, |
1144 DockedWindowLayoutManagerObserver::Reason reason) { | 1152 DockedWindowLayoutManagerObserver::Reason reason) { |
1145 // Skip shelf layout in case docked notification originates from this class. | 1153 // Skip shelf layout in case docked notification originates from this class. |
1146 if (reason == DISPLAY_INSETS_CHANGED) | 1154 if (reason == DISPLAY_INSETS_CHANGED) |
(...skipping 14 matching lines...) Expand all Loading... |
1161 // Hide the status area widget (using auto hide animation). | 1169 // Hide the status area widget (using auto hide animation). |
1162 base::AutoReset<ShelfVisibilityState> state(&state_.visibility_state, | 1170 base::AutoReset<ShelfVisibilityState> state(&state_.visibility_state, |
1163 SHELF_HIDDEN); | 1171 SHELF_HIDDEN); |
1164 TargetBounds target_bounds; | 1172 TargetBounds target_bounds; |
1165 CalculateTargetBounds(state_, &target_bounds); | 1173 CalculateTargetBounds(state_, &target_bounds); |
1166 UpdateBoundsAndOpacity(target_bounds, true, NULL); | 1174 UpdateBoundsAndOpacity(target_bounds, true, NULL); |
1167 UpdateVisibilityState(); | 1175 UpdateVisibilityState(); |
1168 } | 1176 } |
1169 } | 1177 } |
1170 | 1178 |
| 1179 void ShelfLayoutManager::SessionStateChanged( |
| 1180 SessionStateDelegate::SessionState state) { |
| 1181 TargetBounds target_bounds; |
| 1182 CalculateTargetBounds(state_, &target_bounds); |
| 1183 UpdateBoundsAndOpacity(target_bounds, true, NULL); |
| 1184 UpdateVisibilityState(); |
| 1185 } |
| 1186 |
1171 } // namespace ash | 1187 } // namespace ash |
OLD | NEW |