Merge lp:~azzar1/unity/lockscreen-grab-fixes into lp:unity

Proposed by Andrea Azzarone
Status: Merged
Approved by: Stephen M. Webb
Approved revision: no longer in the source branch.
Merged at revision: 3734
Proposed branch: lp:~azzar1/unity/lockscreen-grab-fixes
Merge into: lp:unity
Diff against target: 242 lines (+66/-31)
4 files modified
lockscreen/LockScreenController.cpp (+37/-20)
lockscreen/LockScreenController.h (+3/-0)
plugins/unityshell/src/unityshell.cpp (+4/-0)
tests/test_lockscreen_controller.cpp (+22/-11)
To merge this branch: bzr merge lp:~azzar1/unity/lockscreen-grab-fixes
Reviewer Review Type Date Requested Status
PS Jenkins bot (community) continuous-integration Needs Fixing
Stephen M. Webb (community) Approve
Brandon Schaefer (community) Approve
Review via email: mp+211654@code.launchpad.net

Commit message

Wait for the grab before showing the lockscreen.

To post a comment you must log in.
Revision history for this message
Brandon Schaefer (brandontschaefer) wrote :

LGTM! Nice!

review: Approve
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Stephen M. Webb (bregma) wrote :

This has conflicts when merged into current trunk. Please resynch to trunk.

review: Needs Fixing
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Andrea Azzarone (azzar1) wrote :

Conflicts fixed.

Revision history for this message
Stephen M. Webb (bregma) wrote :

OK

review: Approve
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lockscreen/LockScreenController.cpp'
--- lockscreen/LockScreenController.cpp 2014-03-10 16:43:51 +0000
+++ lockscreen/LockScreenController.cpp 2014-03-20 15:15:09 +0000
@@ -20,6 +20,8 @@
20#include "LockScreenController.h"20#include "LockScreenController.h"
2121
22#include <UnityCore/DBusIndicators.h>22#include <UnityCore/DBusIndicators.h>
23#include <NuxCore/Logger.h>
24
23#include "LockScreenShield.h"25#include "LockScreenShield.h"
24#include "LockScreenSettings.h"26#include "LockScreenSettings.h"
25#include "unity-shared/AnimationUtils.h"27#include "unity-shared/AnimationUtils.h"
@@ -40,6 +42,8 @@
40const std::string DBUS_NAME = "com.canonical.Unity.Test.DisplayManager";42const std::string DBUS_NAME = "com.canonical.Unity.Test.DisplayManager";
41}43}
4244
45DECLARE_LOGGER(logger, "unity.locksreen");
46
43Controller::Controller(session::Manager::Ptr const& session_manager,47Controller::Controller(session::Manager::Ptr const& session_manager,
44 UpstartWrapper::Ptr const& upstart_wrapper,48 UpstartWrapper::Ptr const& upstart_wrapper,
45 ShieldFactoryInterface::Ptr const& shield_factory,49 ShieldFactoryInterface::Ptr const& shield_factory,
@@ -145,26 +149,39 @@
145void Controller::OnLockRequested()149void Controller::OnLockRequested()
146{150{
147 if (IsLocked())151 if (IsLocked())
148 return;152 {
149153 LOG_DEBUG(logger) << "Failed to lock screen: the screen is already locked.";
150 auto lockscreen_type = Settings::Instance().lockscreen_type();154 return;
151155 }
152 if (lockscreen_type == Type::NONE)156
153 {157 lockscreen_timeout_.reset(new glib::Timeout(10, [this](){
154 session_manager_->unlocked.emit();158 if (WindowManager::Default().IsScreenGrabbed())
155 return;159 {
156 }160 LOG_DEBUG(logger) << "Failed to lock the screen: the screen is already grabbed.";
157161 return true; // keep trying
158 if (lockscreen_type == Type::LIGHTDM)162 }
159 {163
160 LockScreenUsingDisplayManager();164 auto lockscreen_type = Settings::Instance().lockscreen_type();
161 }165
162 else if (lockscreen_type == Type::UNITY)166 if (lockscreen_type == Type::NONE)
163 {167 {
164 LockScreenUsingUnity();168 session_manager_->unlocked.emit();
165 }169 return false;
166170 }
167 session_manager_->locked.emit();171
172 if (lockscreen_type == Type::LIGHTDM)
173 {
174 LockScreenUsingDisplayManager();
175 }
176 else if (lockscreen_type == Type::UNITY)
177 {
178 LockScreenUsingUnity();
179 }
180
181 session_manager_->locked.emit();
182
183 return false;
184 }));
168}185}
169186
170void Controller::LockScreenUsingDisplayManager()187void Controller::LockScreenUsingDisplayManager()
171188
=== modified file 'lockscreen/LockScreenController.h'
--- lockscreen/LockScreenController.h 2014-03-07 19:17:35 +0000
+++ lockscreen/LockScreenController.h 2014-03-20 15:15:09 +0000
@@ -22,6 +22,7 @@
2222
23#include <NuxCore/Animation.h>23#include <NuxCore/Animation.h>
24#include <UnityCore/ConnectionManager.h>24#include <UnityCore/ConnectionManager.h>
25#include <UnityCore/GLibSource.h>
2526
26#include "LockScreenShieldFactory.h"27#include "LockScreenShieldFactory.h"
27#include "unity-shared/BackgroundEffectHelper.h"28#include "unity-shared/BackgroundEffectHelper.h"
@@ -68,6 +69,8 @@
68 connection::Wrapper motion_connection_;69 connection::Wrapper motion_connection_;
69 bool test_mode_;70 bool test_mode_;
70 BlurType old_blur_type_;71 BlurType old_blur_type_;
72
73 glib::Source::UniquePtr lockscreen_timeout_;
71};74};
7275
73}76}
7477
=== modified file 'plugins/unityshell/src/unityshell.cpp'
--- plugins/unityshell/src/unityshell.cpp 2014-03-18 23:53:41 +0000
+++ plugins/unityshell/src/unityshell.cpp 2014-03-20 15:15:09 +0000
@@ -3736,6 +3736,10 @@
37363736
3737 launcher_controller_->ClearTooltips();3737 launcher_controller_->ClearTooltips();
37383738
3739 auto& adapter = PluginAdapter::Default();
3740 if (adapter.IsScaleActive())
3741 adapter.TerminateScale();
3742
3739 RaiseOSK();3743 RaiseOSK();
3740}3744}
37413745
37423746
=== modified file 'tests/test_lockscreen_controller.cpp'
--- tests/test_lockscreen_controller.cpp 2014-03-07 19:17:35 +0000
+++ tests/test_lockscreen_controller.cpp 2014-03-20 15:15:09 +0000
@@ -180,8 +180,8 @@
180 lockscreen_settings.lockscreen_type = Type::LIGHTDM;180 lockscreen_settings.lockscreen_type = Type::LIGHTDM;
181 session_manager->lock_requested.emit();181 session_manager->lock_requested.emit();
182182
183 ASSERT_EQ(1, controller.shields_.size());183 Utils::WaitUntilMSec([this]{ return controller.shields_.size() == 1; });
184 EXPECT_FALSE(controller.shields_.at(0)->primary());184 Utils::WaitUntilMSec([this]{ return controller.shields_.at(0)->primary() == false; });
185 Utils::WaitUntilMSec(lock_called);185 Utils::WaitUntilMSec(lock_called);
186}186}
187187
@@ -202,10 +202,10 @@
202 uscreen.SetupFakeMultiMonitor(/*primary*/ 0, /*emit_change*/ true);202 uscreen.SetupFakeMultiMonitor(/*primary*/ 0, /*emit_change*/ true);
203 session_manager->lock_requested.emit();203 session_manager->lock_requested.emit();
204204
205 ASSERT_EQ(monitors::MAX, controller.shields_.size());205 Utils::WaitUntilMSec([this]{ return controller.shields_.size() == monitors::MAX; });
206206
207 for (unsigned int i=0; i < monitors::MAX; ++i)207 for (unsigned int i=0; i < monitors::MAX; ++i)
208 EXPECT_FALSE(controller.shields_.at(i)->primary());208 Utils::WaitUntilMSec([this, i]{ return controller.shields_.at(i)->primary() == false; });
209209
210 Utils::WaitUntilMSec(lock_called);210 Utils::WaitUntilMSec(lock_called);
211}211}
@@ -226,7 +226,7 @@
226 lockscreen_settings.lockscreen_type = Type::LIGHTDM;226 lockscreen_settings.lockscreen_type = Type::LIGHTDM;
227 session_manager->lock_requested.emit();227 session_manager->lock_requested.emit();
228228
229 ASSERT_EQ(1, controller.shields_.size());229 Utils::WaitUntilMSec([this]{ return controller.shields_.size() == 1; });
230 Utils::WaitUntilMSec(lock_called);230 Utils::WaitUntilMSec(lock_called);
231231
232 session_manager->unlock_requested.emit();232 session_manager->unlock_requested.emit();
@@ -252,7 +252,7 @@
252 uscreen.SetupFakeMultiMonitor(/*primary*/ 0, /*emit_change*/ true);252 uscreen.SetupFakeMultiMonitor(/*primary*/ 0, /*emit_change*/ true);
253 session_manager->lock_requested.emit();253 session_manager->lock_requested.emit();
254254
255 ASSERT_EQ(monitors::MAX, controller.shields_.size());255 Utils::WaitUntilMSec([this]{ return controller.shields_.size() == monitors::MAX; });
256 Utils::WaitUntilMSec(lock_called);256 Utils::WaitUntilMSec(lock_called);
257257
258 session_manager->unlock_requested.emit();258 session_manager->unlock_requested.emit();
@@ -265,8 +265,8 @@
265{265{
266 session_manager->lock_requested.emit();266 session_manager->lock_requested.emit();
267267
268 ASSERT_EQ(1, controller.shields_.size());268 Utils::WaitUntilMSec([this]{ return controller.shields_.size() == 1; });
269 EXPECT_EQ(uscreen.GetMonitors().at(0), controller.shields_.at(0)->GetGeometry());269 Utils::WaitUntilMSec([this]{ return uscreen.GetMonitors().at(0) == controller.shields_.at(0)->GetGeometry(); });
270}270}
271271
272TEST_F(TestLockScreenController, LockScreenOnMultiMonitor)272TEST_F(TestLockScreenController, LockScreenOnMultiMonitor)
@@ -274,28 +274,33 @@
274 uscreen.SetupFakeMultiMonitor();274 uscreen.SetupFakeMultiMonitor();
275275
276 session_manager->lock_requested.emit();276 session_manager->lock_requested.emit();
277
278 Utils::WaitUntilMSec([this]{ return controller.shields_.size() == monitors::MAX; });
277 ASSERT_EQ(monitors::MAX, controller.shields_.size());279 ASSERT_EQ(monitors::MAX, controller.shields_.size());
278280
279 for (unsigned int i=0; i < monitors::MAX; ++i)281 for (unsigned int i=0; i < monitors::MAX; ++i)
282 {
283 Utils::WaitUntilMSec([this, i]{ return uscreen.GetMonitors().at(i) == controller.shields_.at(i)->GetGeometry(); });
280 EXPECT_EQ(uscreen.GetMonitors().at(i), controller.shields_.at(i)->GetAbsoluteGeometry());284 EXPECT_EQ(uscreen.GetMonitors().at(i), controller.shields_.at(i)->GetAbsoluteGeometry());
285 }
281}286}
282287
283TEST_F(TestLockScreenController, SwitchToMultiMonitor)288TEST_F(TestLockScreenController, SwitchToMultiMonitor)
284{289{
285 session_manager->lock_requested.emit();290 session_manager->lock_requested.emit();
286 tick_source.tick(ANIMATION_DURATION);
287291
292 Utils::WaitUntilMSec([this]{ return controller.shields_.size() == 1; });
288 ASSERT_EQ(1, controller.shields_.size());293 ASSERT_EQ(1, controller.shields_.size());
294
295 Utils::WaitUntilMSec([this]{ return uscreen.GetMonitors().at(0) == controller.shields_.at(0)->GetGeometry(); });
289 EXPECT_EQ(uscreen.GetMonitors().at(0), controller.shields_.at(0)->GetGeometry());296 EXPECT_EQ(uscreen.GetMonitors().at(0), controller.shields_.at(0)->GetGeometry());
290297
291 uscreen.SetupFakeMultiMonitor(/* primary */ 0, /* emit_change */ true);298 uscreen.SetupFakeMultiMonitor(/* primary */ 0, /* emit_change */ true);
292
293 ASSERT_EQ(monitors::MAX, controller.shields_.size());299 ASSERT_EQ(monitors::MAX, controller.shields_.size());
294300
295 for (unsigned int i=0; i < monitors::MAX; ++i)301 for (unsigned int i=0; i < monitors::MAX; ++i)
296 {302 {
297 ASSERT_EQ(uscreen.GetMonitors().at(i), controller.shields_.at(i)->GetAbsoluteGeometry());303 ASSERT_EQ(uscreen.GetMonitors().at(i), controller.shields_.at(i)->GetAbsoluteGeometry());
298 ASSERT_TRUE(controller.shields_.at(i)->IsVisible());
299 }304 }
300}305}
301306
@@ -304,10 +309,14 @@
304 uscreen.SetupFakeMultiMonitor(/* primary */ 0, /* emit_change */ true);309 uscreen.SetupFakeMultiMonitor(/* primary */ 0, /* emit_change */ true);
305 session_manager->lock_requested.emit();310 session_manager->lock_requested.emit();
306311
312 Utils::WaitUntilMSec([this]{ return controller.shields_.size() == monitors::MAX; });
307 ASSERT_EQ(monitors::MAX, controller.shields_.size());313 ASSERT_EQ(monitors::MAX, controller.shields_.size());
308314
309 for (unsigned int i=0; i < monitors::MAX; ++i)315 for (unsigned int i=0; i < monitors::MAX; ++i)
316 {
317 Utils::WaitUntilMSec([this, i]{ return uscreen.GetMonitors().at(i) == controller.shields_.at(i)->GetGeometry(); });
310 ASSERT_EQ(uscreen.GetMonitors().at(i), controller.shields_.at(i)->GetAbsoluteGeometry());318 ASSERT_EQ(uscreen.GetMonitors().at(i), controller.shields_.at(i)->GetAbsoluteGeometry());
319 }
311320
312 uscreen.Reset(/* emit_change */ true);321 uscreen.Reset(/* emit_change */ true);
313322
@@ -319,6 +328,7 @@
319{328{
320 session_manager->lock_requested.emit();329 session_manager->lock_requested.emit();
321330
331 Utils::WaitUntilMSec([this]{ return controller.shields_.size() == 1; });
322 ASSERT_EQ(1, controller.shields_.size());332 ASSERT_EQ(1, controller.shields_.size());
323333
324 session_manager->unlock_requested.emit();334 session_manager->unlock_requested.emit();
@@ -332,6 +342,7 @@
332 uscreen.SetupFakeMultiMonitor(/* primary */ 0, /* emit_change */ true);342 uscreen.SetupFakeMultiMonitor(/* primary */ 0, /* emit_change */ true);
333 session_manager->lock_requested.emit();343 session_manager->lock_requested.emit();
334344
345 Utils::WaitUntilMSec([this]{ return controller.shields_.size() == monitors::MAX; });
335 ASSERT_EQ(monitors::MAX, controller.shields_.size());346 ASSERT_EQ(monitors::MAX, controller.shields_.size());
336347
337 session_manager->unlock_requested.emit();348 session_manager->unlock_requested.emit();