diff options
| author | Sami Jaktholm <sjakthol@outlook.com> | 2014-04-11 09:00:35 +0000 |
|---|---|---|
| committer | CI bot <ps-jenkins@lists.canonical.com> | 2014-04-11 09:00:35 +0000 |
| commit | 47da832d47fa51ae45e5417385011083d567dac4 (patch) | |
| tree | f7784e8f549a2ce1de72e5fa25dd4a6de8528871 | |
| parent | 8e6caf4e94e382b43c5dc4720235d7acca02265f (diff) | |
| parent | 962c3e7bbe8e5a68aa0eed330539ca40f43ceeae (diff) | |
Lockscreen: Give proper grabs to the shield before releasing blank_window_. Fixes: 1306417
(bzr r3780)
| -rw-r--r-- | lockscreen/LockScreenController.cpp | 3 | ||||
| -rw-r--r-- | tests/test_lockscreen_controller.cpp | 23 |
2 files changed, 25 insertions, 1 deletions
diff --git a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp index 07db7acb9..ef03be97f 100644 --- a/lockscreen/LockScreenController.cpp +++ b/lockscreen/LockScreenController.cpp @@ -242,8 +242,9 @@ void Controller::HideBlankWindow() return; blank_window_->ShowWindow(false); - blank_window_.Release(); animation::SetValue(blank_window_animator_, animation::Direction::BACKWARD); + + blank_window_.Release(); lockscreen_delay_timeout_.reset(); } diff --git a/tests/test_lockscreen_controller.cpp b/tests/test_lockscreen_controller.cpp index fa01a0a61..55add06bc 100644 --- a/tests/test_lockscreen_controller.cpp +++ b/tests/test_lockscreen_controller.cpp @@ -43,6 +43,7 @@ namespace { const unsigned ANIMATION_DURATION = 400 * 1000; // in microseconds +const unsigned BLANK_ANIMATION_DURATION = 10000 * 1000; const unsigned TICK_DURATION = 10 * 1000; } @@ -87,6 +88,7 @@ struct TestLockScreenController : Test {} using Controller::shields_; + using Controller::blank_window_; }; nux::NuxTimerTickSource tick_source; @@ -227,5 +229,26 @@ TEST_F(TestLockScreenController, UnlockScreenOnMultiMonitor) EXPECT_TRUE(controller.shields_.empty()); } +TEST_F(TestLockScreenController, ShieldHasGrabAfterBlank) +{ + + // Lock... + session_manager->lock_requested.emit(); + Utils::WaitUntilMSec([this]{ return controller.shields_.size() == 1; }); + ASSERT_EQ(1, controller.shields_.size()); + + // ...and let the screen blank. + session_manager->presence_status_changed.emit(true); + tick_source.tick(BLANK_ANIMATION_DURATION); + + ASSERT_TRUE(controller.blank_window_->GetOpacity() == 1.0); + ASSERT_TRUE(controller.blank_window_->OwnsPointerGrab()); + + // Wake the screen + dbus_manager->simulate_activity.emit(); + + EXPECT_TRUE(controller.shields_.at(0)->OwnsPointerGrab()); +} + } // lockscreen } // unity |
