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

Unified Diff: ash/wm/maximize_mode/maximize_mode_controller.cc

Issue 303723003: Lock Rotation on user settings changes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 7 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
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

Powered by Google App Engine
This is Rietveld 408576698