@@ -135,7 +135,7 @@ FocusScope {
135135 id: dash
136136 objectName: "dash"
137137
138− available: !greeter.shown && !lockscreen.shown
138+ available: !LightDM.Greeter.active
139139 hides: [stages, launcher, panel.indicators]
140140 shown: disappearingAnimationProgress !== 1.0 && greeterWrapper.showProgress !== 1.0
141141 enabled: disappearingAnimationProgress === 0.0 && greeterWrapper.showProgress === 0.0 && edgeDemo.dashEnabled
@@ -198,7 +198,7 @@ FocusScope {
198198
199199 x: {
200200 if (shown) {
201− if (overlayMode || locked) {
201+ if (overlayMode || locked || greeter.fakeActiveForApp !== "") {
202202 return 0;
203203 }
204204 return launcher.progress
@@ -243,10 +243,17 @@ FocusScope {
243243 target: ApplicationManager
244244
245245 onFocusRequested: {
246+ if (greeter.fakeActiveForApp !== "" && greeter.fakeActiveForApp !== appId) {
247+ lockscreen.show();
248+ }
249+ greeter.hide();
246250 stages.show(true);
247251 }
248252
249253 onFocusedApplicationIdChanged: {
254+ if (greeter.fakeActiveForApp !== "" && greeter.fakeActiveForApp !== ApplicationManager.focusedApplicationId) {
255+ lockscreen.show();
256+ }
250257 if (ApplicationManager.focusedApplicationId.length > 0) {
251258 stages.show(false);
252259 } else {
@@ -288,6 +295,11 @@ FocusScope {
288295 property: "dragAreaWidth"
289296 value: shell.edgeSize
290297 }
298+ Binding {
299+ target: applicationsDisplayLoader.item
300+ property: "spreadEnabled"
301+ value: greeter.fakeActiveForApp === "" // to support emergency dialer hack
302+ }
291303 }
292304 }
293305
@@ -312,6 +324,13 @@ FocusScope {
312324
313325 onEntered: LightDM.Greeter.respond(passphrase);
314326 onCancel: greeter.show()
327+ onEmergencyCall: {
328+ greeter.fakeActiveForApp = "dialer-app"
329+ shell.activateApplication("dialer-app")
330+ lockscreen.hide()
331+ }
332+
333+ onShownChanged: if (shown) greeter.fakeActiveForApp = ""
315334
316335 Component.onCompleted: {
317336 if (LightDM.Users.count == 1) {
@@ -342,6 +361,7 @@ FocusScope {
342361 }
343362 if (LightDM.Greeter.authenticated) {
344363 lockscreen.hide();
364+ greeter.login();
345365 } else {
346366 lockscreen.clear(true);
347367 }
@@ -351,7 +371,7 @@ FocusScope {
351371 Binding {
352372 target: LightDM.Greeter
353373 property: "active"
354− value: greeter.shown || lockscreen.shown
374+ value: greeter.shown || lockscreen.shown || greeter.fakeActiveForApp != ""
355375 }
356376
357377 Rectangle {
@@ -374,11 +394,16 @@ FocusScope {
374394 }
375395
376396 readonly property real showProgress: MathUtils.clamp((1 - x/width) + greeter.showProgress - 1, 0, 1)
397+ onShowProgressChanged: if (LightDM.Greeter.promptless && showProgress === 0) greeter.login()
377398
378399 Greeter {
379400 id: greeter
380401 objectName: "greeter"
381402
403+ signal sessionStarted() // helpful for tests
404+
405+ property string fakeActiveForApp: ""
406+
382407 available: true
383408 hides: [launcher, panel.indicators]
384409 shown: true
@@ -390,6 +415,16 @@ FocusScope {
390415
391416 dragHandleWidth: shell.edgeSize
392417
418+ function login() {
419+ enabled = false;
420+ LightDM.Greeter.startSessionSync();
421+ sessionStarted();
422+ greeter.hide();
423+ lockscreen.hide();
424+ launcher.hide();
425+ enabled = true;
426+ }
427+
393428 onShownChanged: {
394429 if (shown) {
395430 lockscreen.reset();
@@ -398,6 +433,7 @@ FocusScope {
398433 if (LightDM.Users.count == 1) {
399434 LightDM.Greeter.authenticate(LightDM.Users.data(0, LightDM.UserRoles.NameRole));
400435 }
436+ greeter.fakeActiveForApp = "";
401437 greeter.forceActiveFocus();
402438 }
403439 }
@@ -447,12 +483,36 @@ FocusScope {
447483 }
448484
449485 function showHome() {
450− var animate = !greeter.shown && !stages.shown
451− greeter.hide()
486+ if (edgeDemo.running)
487+ return
488+
489+ if (LightDM.Greeter.active) {
490+ if (!LightDM.Greeter.promptless)
491+ lockscreen.show()
492+ greeter.hide()
493+ }
494+
495+ var animate = !LightDM.Greeter.active && !stages.shown
452496 dash.setCurrentScope("clickscope", animate, false)
453497 stages.hide()
454498 }
455499
500+ function showDash() {
501+ if (LightDM.Greeter.active && !LightDM.Greeter.promptless)
502+ return;
503+
504+ if (stages.shown && !stages.overlayMode) {
505+ if (!stages.locked) {
506+ stages.hide();
507+ launcher.hide();
508+ }
509+ }
510+ if (greeter.shown) {
511+ greeter.hideRight();
512+ launcher.hide();
513+ }
514+ }
515+
456516 function hideIndicatorMenu(delay) {
457517 panel.hideIndicatorMenu(delay);
458518 }
@@ -473,8 +533,8 @@ FocusScope {
473533 }
474534 property string focusedAppId: ApplicationManager.focusedApplicationId
475535 property var focusedApplication: ApplicationManager.findApplication(focusedAppId)
476− fullscreenMode: focusedApplication && stages.fullscreen && !greeter.shown && !lockscreen.shown
477− searchVisible: !greeter.shown && !lockscreen.shown && dash.shown && dash.searchable
536+ fullscreenMode: focusedApplication && stages.fullscreen && !LightDM.Greeter.active
537+ searchVisible: !LightDM.Greeter.active && dash.shown && dash.searchable
478538
479539 InputFilterArea {
480540 anchors {
@@ -508,24 +568,8 @@ FocusScope {
508568 dragAreaWidth: shell.edgeSize
509569 available: edgeDemo.launcherEnabled
510570
511− onShowDashHome: {
512− if (edgeDemo.running)
513− return;
514−
515− showHome()
516− }
517− onDash: {
518− if (stages.shown && !stages.overlayMode) {
519− if (!stages.locked) {
520− stages.hide();
521− launcher.hide();
522− }
523− }
524− if (greeter.shown) {
525− greeter.hideRight();
526− launcher.hide();
527− }
528− }
571+ onShowDashHome: showHome()
572+ onDash: showDash()
529573 onDashSwipeChanged: if (dashSwipe && stages.shown) dash.setCurrentScope("clickscope", false, true)
530574 onLauncherApplicationSelected: {
531575 if (!edgeDemo.running)