@@ -134,7 +134,7 @@ Item {
135 objectName: "dash"
135 objectName: "dash"
137− available: !greeter.shown && !lockscreen.shown
137+ available: !LightDM.Greeter.active
138 hides: [stages, launcher, panel.indicators]
138 hides: [stages, launcher, panel.indicators]
139 shown: disappearingAnimationProgress !== 1.0 && greeterWrapper.showProgress !== 1.0 &&
139 shown: disappearingAnimationProgress !== 1.0 && greeterWrapper.showProgress !== 1.0 &&
140 !(panel.indicators.fullyOpened && !sideStageEnabled)
140 !(panel.indicators.fullyOpened && !sideStageEnabled)
@@ -193,7 +193,7 @@ Item {
195 if (shown) {
195 if (shown) {
196− if (locked) {
196+ if (locked || greeter.fakeActiveForApp !== "") {
197 return 0;
197 return 0;
199 return launcher.progress;
199 return launcher.progress;
@@ -241,12 +241,19 @@ Item {
241 Connections {
241 Connections {
242 target: ApplicationManager
242 target: ApplicationManager
243 onFocusRequested: {
243 onFocusRequested: {
244− if (greeter.shown) {
244+ if (greeter.fakeActiveForApp !== "" && greeter.fakeActiveForApp !== appId) {
245− greeter.hide();
245+ lockscreen.show();
247 stages.show();
248 stages.show();
251+ onFocusedApplicationIdChanged: {
252+ if (greeter.fakeActiveForApp !== "" && greeter.fakeActiveForApp !== ApplicationManager.focusedApplicationId) {
250 onApplicationAdded: {
257 onApplicationAdded: {
251 if (greeter.shown) {
258 if (greeter.shown) {
252 greeter.hide();
259 greeter.hide();
@@ -433,6 +440,11 @@ Item {
434 source: shell.sideStageEnabled ? "Stages/TabletStage.qml" : "Stages/PhoneStage.qml"
441 source: shell.sideStageEnabled ? "Stages/TabletStage.qml" : "Stages/PhoneStage.qml"
444+ target: applicationsDisplayLoader.item
445+ property: "objectName"
436 Binding {
448 Binding {
437 target: applicationsDisplayLoader.item
449 target: applicationsDisplayLoader.item
438 property: "dragAreaWidth"
450 property: "dragAreaWidth"
@@ -449,6 +461,11 @@ Item {
449 property: "interactive"
461 property: "interactive"
450 value: stages.roughlyFullyShown && !greeter.shown && !lockscreen.shown
462 value: stages.roughlyFullyShown && !greeter.shown && !lockscreen.shown
465+ target: applicationsDisplayLoader.item
466+ property: "spreadEnabled"
467+ value: greeter.fakeActiveForApp === "" // to support emergency dialer hack
@@ -499,6 +516,13 @@ Item {
500 onEntered: LightDM.Greeter.respond(passphrase);
517 onEntered: LightDM.Greeter.respond(passphrase);
501 onCancel: greeter.show()
518 onCancel: greeter.show()
520+ greeter.fakeActiveForApp = "dialer-app"
521+ shell.activateApplication("dialer-app")
525+ onShownChanged: if (shown) greeter.fakeActiveForApp = ""
503 Component.onCompleted: {
527 Component.onCompleted: {
504 if (LightDM.Users.count == 1) {
528 if (LightDM.Users.count == 1) {
@@ -531,6 +555,7 @@ Item {
532 if (LightDM.Greeter.authenticated) {
556 if (LightDM.Greeter.authenticated) {
533 lockscreen.hide();
557 lockscreen.hide();
535 lockscreen.clear(true);
560 lockscreen.clear(true);
@@ -540,7 +565,7 @@ Item {
540 Binding {
565 Binding {
541 target: LightDM.Greeter
566 target: LightDM.Greeter
542 property: "active"
567 property: "active"
543− value: greeter.shown || lockscreen.shown
568+ value: greeter.shown || lockscreen.shown || greeter.fakeActiveForApp != ""
546 Rectangle {
571 Rectangle {
@@ -563,11 +588,16 @@ Item {
565 readonly property real showProgress: MathUtils.clamp((1 - x/width) + greeter.showProgress - 1, 0, 1)
590 readonly property real showProgress: MathUtils.clamp((1 - x/width) + greeter.showProgress - 1, 0, 1)
591+ onShowProgressChanged: if (LightDM.Greeter.promptless && showProgress === 0) greeter.login()
567 Greeter {
593 Greeter {
568 id: greeter
594 id: greeter
569 objectName: "greeter"
595 objectName: "greeter"
597+ signal sessionStarted() // helpful for tests
599+ property string fakeActiveForApp: ""
571 available: true
601 available: true
572 hides: [launcher, panel.indicators]
602 hides: [launcher, panel.indicators]
573 shown: true
603 shown: true
@@ -579,6 +609,16 @@ Item {
580 dragHandleWidth: shell.edgeSize
610 dragHandleWidth: shell.edgeSize
614+ LightDM.Greeter.startSessionSync();
582 onShownChanged: {
622 onShownChanged: {
583 if (shown) {
623 if (shown) {
584 lockscreen.reset();
624 lockscreen.reset();
@@ -590,6 +630,7 @@ Item {
590 if (LightDM.Users.count == 1) {
630 if (LightDM.Users.count == 1) {
591 LightDM.Greeter.authenticate(LightDM.Users.data(0, LightDM.UserRoles.NameRole));
631 LightDM.Greeter.authenticate(LightDM.Users.data(0, LightDM.UserRoles.NameRole));
633+ greeter.fakeActiveForApp = "";
593 greeter.forceActiveFocus();
634 greeter.forceActiveFocus();
@@ -633,12 +674,40 @@ Item {
635 function showHome() {
676 function showHome() {
677+ if (edgeDemo.running) {
681+ if (LightDM.Greeter.active) {
682+ if (!LightDM.Greeter.promptless) {
636− var animate = !greeter.shown && !stages.shown
688+ var animate = !LightDM.Greeter.active && !stages.shown
638 dash.setCurrentScope("clickscope", animate, false)
689 dash.setCurrentScope("clickscope", animate, false)
639 stages.hide()
690 stages.hide()
693+ function showDash() {
694+ if (LightDM.Greeter.active && !LightDM.Greeter.promptless) {
698+ if (!stages.locked) {
702+ launcher.switchToNextState("visible");
705+ if (greeter.shown) {
706+ greeter.hideRight();
643 id: overlay
712 id: overlay
@@ -647,10 +716,11 @@ Item {
649 id: panel
718 id: panel
650 anchors.fill: parent //because this draws indicator menus
720 anchors.fill: parent //because this draws indicator menus
651 indicators {
721 indicators {
652 hides: [launcher]
722 hides: [launcher]
653− available: edgeDemo.panelEnabled
723+ available: edgeDemo.panelEnabled && greeter.fakeActiveForApp === ""
654 contentEnabled: edgeDemo.panelContentEnabled
724 contentEnabled: edgeDemo.panelContentEnabled
655 width: parent.width > units.gu(60) ? units.gu(40) : parent.width
725 width: parent.width > units.gu(60) ? units.gu(40) : parent.width
656 panelHeight: units.gu(3)
726 panelHeight: units.gu(3)
@@ -660,12 +730,13 @@ Item {
660 ApplicationManager.focusedApplicationId &&
730 ApplicationManager.focusedApplicationId &&
661 ApplicationManager.findApplication(ApplicationManager.focusedApplicationId).fullscreen
731 ApplicationManager.findApplication(ApplicationManager.focusedApplicationId).fullscreen
663− fullscreenMode: stages.roughlyFullyShown && topmostApplicationIsFullscreen
733+ fullscreenMode: (stages.roughlyFullyShown && topmostApplicationIsFullscreen
664− && !greeter.shown && !lockscreen.shown
734+ && !LightDM.Greeter.active) || greeter.fakeActiveForApp !== ""
667 Launcher {
737 Launcher {
668 id: launcher
738 id: launcher
739+ objectName: "launcher"
670 readonly property bool dashSwipe: progress > 0
741 readonly property bool dashSwipe: progress > 0
@@ -673,29 +744,15 @@ Item {
673 anchors.bottom: parent.bottom
744 anchors.bottom: parent.bottom
674 width: parent.width
745 width: parent.width
675 dragAreaWidth: shell.edgeSize
746 dragAreaWidth: shell.edgeSize
676− available: edgeDemo.launcherEnabled
747+ available: edgeDemo.launcherEnabled && greeter.fakeActiveForApp === ""
678− onShowDashHome: {
749+ onShowDashHome: showHome()
679− if (edgeDemo.running)
684− onDash: {
750+ onDash: showDash()
685− if (!stages.locked) {
689− launcher.switchToNextState("visible");
692− if (greeter.shown) {
693− greeter.hideRight();
697 onDashSwipeChanged: if (dashSwipe && stages.shown) dash.setCurrentScope("clickscope", false, true)
751 onDashSwipeChanged: if (dashSwipe && stages.shown) dash.setCurrentScope("clickscope", false, true)
698 onLauncherApplicationSelected: {
752 onLauncherApplicationSelected: {
753+ if (greeter.fakeActiveForApp !== "") {
699 if (!edgeDemo.running)
756 if (!edgeDemo.running)
700 shell.activateApplication(appId)
757 shell.activateApplication(appId)