summaryrefslogtreecommitdiff
diff options
authorSami Jaktholm <sjakthol@outlook.com>2014-04-11 09:00:35 +0000
committerCI bot <ps-jenkins@lists.canonical.com>2014-04-11 09:00:35 +0000
commit47da832d47fa51ae45e5417385011083d567dac4 (patch)
treef7784e8f549a2ce1de72e5fa25dd4a6de8528871
parent8e6caf4e94e382b43c5dc4720235d7acca02265f (diff)
parent962c3e7bbe8e5a68aa0eed330539ca40f43ceeae (diff)
Lockscreen: Give proper grabs to the shield before releasing blank_window_. Fixes: 1306417
(bzr r3780)
-rw-r--r--lockscreen/LockScreenController.cpp3
-rw-r--r--tests/test_lockscreen_controller.cpp23
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