Chromium Code Reviews| Index: ash/wm/maximize_mode/maximize_mode_controller.cc |
| diff --git a/ash/wm/maximize_mode/maximize_mode_controller.cc b/ash/wm/maximize_mode/maximize_mode_controller.cc |
| index 0b42e240af2e68cfd72cf5988083503f90a3a410..d87aab395bb15b15953d672b05c2aa4b9cffbc87 100644 |
| --- a/ash/wm/maximize_mode/maximize_mode_controller.cc |
| +++ b/ash/wm/maximize_mode/maximize_mode_controller.cc |
| @@ -145,6 +145,21 @@ MaximizeModeController::~MaximizeModeController() { |
| Shell::GetInstance()->accelerometer_controller()->RemoveObserver(this); |
| } |
| +void MaximizeModeController::SetRotationLocked(bool rotation_locked) { |
| + if (rotation_locked_ == rotation_locked) |
| + return; |
| + rotation_locked_ = rotation_locked; |
| + FOR_EACH_OBSERVER(Observer, observers_, OnRotationLockChanged()); |
| +} |
| + |
| +void MaximizeModeController::AddObserver(Observer* observer) { |
| + observers_.AddObserver(observer); |
| +} |
| + |
| +void MaximizeModeController::RemoveObserver(Observer* observer) { |
| + observers_.RemoveObserver(observer); |
| +} |
| + |
| bool MaximizeModeController::CanEnterMaximizeMode() { |
| // If we have ever seen accelerometer data, then HandleHingeRotation may |
| // trigger maximize mode at some point in the future. |
| @@ -177,6 +192,16 @@ void MaximizeModeController::OnAccelerometerUpdated( |
| HandleScreenRotation(lid); |
| } |
| +void MaximizeModeController::OnDisplayConfigurationChanged() { |
| + if (rotation_locked_ || in_set_screen_rotation_) |
| + return; |
| + DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
| + user_rotation_ = display_manager-> |
|
flackr
2014/05/28 14:48:04
Updating the user_rotation_ might be an unexpected
jonross
2014/05/28 19:13:33
Done.
|
| + GetDisplayInfo(gfx::Display::InternalDisplayId()).rotation(); |
| + if (user_rotation_ != current_rotation_) |
|
flackr
2014/05/28 14:48:04
nit: It would be helpful to have a comment here. P
jonross
2014/05/28 19:13:33
Done.
|
| + SetRotationLocked(true); |
| +} |
| + |
| void MaximizeModeController::HandleHingeRotation(const gfx::Vector3dF& base, |
| const gfx::Vector3dF& lid) { |
| static const gfx::Vector3dF hinge_vector(0.0f, 1.0f, 0.0f); |
| @@ -281,35 +306,35 @@ void MaximizeModeController::SetDisplayRotation( |
| gfx::Display::Rotation rotation) { |
| base::AutoReset<bool> auto_in_set_screen_rotation( |
| &in_set_screen_rotation_, true); |
| + current_rotation_ = rotation; |
| display_manager->SetDisplayRotation(gfx::Display::InternalDisplayId(), |
| rotation); |
| } |
| void MaximizeModeController::EnterMaximizeMode() { |
| - // TODO(jonross): Listen for display configuration changes. If the user |
| - // causes a rotation change a rotation lock should be applied. |
| - // https://crbug.com/369505 |
| DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
| user_rotation_ = display_manager-> |
|
flackr
2014/05/28 14:48:04
nit: Just use current_rotation_ = user_rotation_ =
jonross
2014/05/28 19:13:33
Done.
|
| GetDisplayInfo(gfx::Display::InternalDisplayId()).rotation(); |
| + current_rotation_ = user_rotation_; |
| Shell::GetInstance()->EnableMaximizeModeWindowManager(true); |
| event_blocker_.reset(new MaximizeModeEventBlocker); |
| #if defined(OS_CHROMEOS) |
| event_handler_.reset(new ScreenshotActionHandler); |
| #endif |
| + Shell::GetInstance()->display_controller()->AddObserver(this); |
| } |
| void MaximizeModeController::LeaveMaximizeMode() { |
| DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
| - DisplayInfo info = display_manager-> |
| - GetDisplayInfo(gfx::Display::InternalDisplayId()); |
| - gfx::Display::Rotation current_rotation = info.rotation(); |
| + gfx::Display::Rotation current_rotation = display_manager-> |
| + GetDisplayInfo(gfx::Display::InternalDisplayId()).rotation(); |
| if (current_rotation != user_rotation_) |
| SetDisplayRotation(display_manager, user_rotation_); |
| rotation_locked_ = false; |
| Shell::GetInstance()->EnableMaximizeModeWindowManager(false); |
| event_blocker_.reset(); |
| event_handler_.reset(); |
| + Shell::GetInstance()->display_controller()->RemoveObserver(this); |
| } |
| } // namespace ash |