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

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..bc61ff71f3d23aec4826d7f2701b5ef2d1c5a83e 100644
--- a/ash/wm/maximize_mode/maximize_mode_controller.cc
+++ b/ash/wm/maximize_mode/maximize_mode_controller.cc
@@ -145,6 +145,22 @@ 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(rotation_locked_));
+}
+
+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 +193,21 @@ void MaximizeModeController::OnAccelerometerUpdated(
HandleScreenRotation(lid);
}
+void MaximizeModeController::OnDisplayConfigurationChanged() {
+ if (rotation_locked_ || in_set_screen_rotation_)
flackr 2014/05/30 00:47:24 If rotation is locked you should still track updat
jonross 2014/05/30 14:52:44 Done.
flackr 2014/05/30 18:58:59 Not exactly, if the rotation changes to current_ro
flackr 2014/06/02 15:11:11 Not changed yet?
jonross 2014/06/02 18:01:12 Apparently this is listed in the Diff from Patch #
+ return;
+ DisplayManager* display_manager = Shell::GetInstance()->display_manager();
+ gfx::Display::Rotation user_rotation = display_manager->
+ GetDisplayInfo(gfx::Display::InternalDisplayId()).rotation();
+ if (user_rotation != current_rotation_) {
+ // A user may change other display configuration settings. When the user
+ // does change the rotation setting, then lock rotation to prevent the
+ // accelerometer from erasing their change.
+ SetRotationLocked(true);
+ user_rotation_ = user_rotation;
+ }
+}
+
void MaximizeModeController::HandleHingeRotation(const gfx::Vector3dF& base,
const gfx::Vector3dF& lid) {
static const gfx::Vector3dF hinge_vector(0.0f, 1.0f, 0.0f);
@@ -219,6 +250,9 @@ void MaximizeModeController::HandleScreenRotation(const gfx::Vector3dF& lid) {
bool maximize_mode_engaged =
Shell::GetInstance()->IsMaximizeModeWindowManagerEnabled();
+ // TODO(jonross): track the updated rotation angle even when locked. So that
+ // when rotation lock is removed the accelerometer rotation can be applied
+ // without waiting for the next update.
if (!maximize_mode_engaged || rotation_locked_)
return;
@@ -281,35 +315,34 @@ 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->
+ current_rotation_ = user_rotation_ = display_manager->
GetDisplayInfo(gfx::Display::InternalDisplayId()).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