@@ -136,7 +136,7 @@ FocusScope {
137 objectName: "dash"
137 objectName: "dash"
139− available: !greeter.shown && !lockscreen.shown
139+ available: !LightDM.Greeter.active
140 hides: [stages, launcher, panel.indicators]
140 hides: [stages, launcher, panel.indicators]
141 shown: disappearingAnimationProgress !== 1.0 && greeterWrapper.showProgress !== 1.0
141 shown: disappearingAnimationProgress !== 1.0 && greeterWrapper.showProgress !== 1.0
142 enabled: disappearingAnimationProgress === 0.0 && greeterWrapper.showProgress === 0.0 && edgeDemo.dashEnabled
142 enabled: disappearingAnimationProgress === 0.0 && greeterWrapper.showProgress === 0.0 && edgeDemo.dashEnabled
@@ -199,7 +199,7 @@ FocusScope {
201 if (shown) {
201 if (shown) {
202− if (overlayMode || locked) {
202+ if (overlayMode || locked || greeter.fakeActiveForApp !== "") {
203 return 0;
203 return 0;
205 return launcher.progress
205 return launcher.progress
@@ -244,10 +244,17 @@ FocusScope {
244 target: ApplicationManager
244 target: ApplicationManager
246 onFocusRequested: {
246 onFocusRequested: {
247+ if (greeter.fakeActiveForApp !== "" && greeter.fakeActiveForApp !== appId) {
247 stages.show(true);
251 stages.show(true);
250 onFocusedApplicationIdChanged: {
254 onFocusedApplicationIdChanged: {
255+ if (greeter.fakeActiveForApp !== "" && greeter.fakeActiveForApp !== ApplicationManager.focusedApplicationId) {
251 if (ApplicationManager.focusedApplicationId.length > 0) {
258 if (ApplicationManager.focusedApplicationId.length > 0) {
252 stages.show(false);
259 stages.show(false);
@@ -298,6 +305,11 @@ FocusScope {
299 source: shell.sideStageEnabled ? "Stages/StageWithSideStage.qml" : "Stages/PhoneStage.qml"
306 source: shell.sideStageEnabled ? "Stages/StageWithSideStage.qml" : "Stages/PhoneStage.qml"
309+ target: applicationsDisplayLoader.item
310+ property: "objectName"
301 Binding {
313 Binding {
302 target: applicationsDisplayLoader.item
314 target: applicationsDisplayLoader.item
303 property: "moving"
315 property: "moving"
@@ -313,6 +325,11 @@ FocusScope {
313 property: "dragAreaWidth"
325 property: "dragAreaWidth"
314 value: shell.edgeSize
326 value: shell.edgeSize
329+ target: applicationsDisplayLoader.item
330+ property: "spreadEnabled"
331+ value: greeter.fakeActiveForApp === "" // to support emergency dialer hack
@@ -337,6 +354,13 @@ FocusScope {
338 onEntered: LightDM.Greeter.respond(passphrase);
355 onEntered: LightDM.Greeter.respond(passphrase);
339 onCancel: greeter.show()
356 onCancel: greeter.show()
358+ greeter.fakeActiveForApp = "dialer-app"
359+ shell.activateApplication("dialer-app")
363+ onShownChanged: if (shown) greeter.fakeActiveForApp = ""
341 Component.onCompleted: {
365 Component.onCompleted: {
342 if (LightDM.Users.count == 1) {
366 if (LightDM.Users.count == 1) {
@@ -348,6 +372,8 @@ FocusScope {
348 Connections {
372 Connections {
349 target: LightDM.Greeter
373 target: LightDM.Greeter
375+ onShowGreeter: greeter.show()
351 onShowPrompt: {
377 onShowPrompt: {
352 if (LightDM.Users.count == 1) {
378 if (LightDM.Users.count == 1) {
353 // TODO: There's no better way for now to determine if its a PIN or a passphrase.
379 // TODO: There's no better way for now to determine if its a PIN or a passphrase.
@@ -367,12 +393,19 @@ FocusScope {
368 if (LightDM.Greeter.authenticated) {
394 if (LightDM.Greeter.authenticated) {
369 lockscreen.hide();
395 lockscreen.hide();
371 lockscreen.clear(true);
398 lockscreen.clear(true);
404+ target: LightDM.Greeter
406+ value: greeter.shown || lockscreen.shown || greeter.fakeActiveForApp != ""
376 Rectangle {
409 Rectangle {
377 anchors.fill: parent
410 anchors.fill: parent
378 color: "black"
411 color: "black"
@@ -393,11 +426,16 @@ FocusScope {
395 readonly property real showProgress: MathUtils.clamp((1 - x/width) + greeter.showProgress - 1, 0, 1)
428 readonly property real showProgress: MathUtils.clamp((1 - x/width) + greeter.showProgress - 1, 0, 1)
429+ onShowProgressChanged: if (LightDM.Greeter.promptless && showProgress === 0) greeter.login()
397 Greeter {
431 Greeter {
398 id: greeter
432 id: greeter
399 objectName: "greeter"
433 objectName: "greeter"
435+ signal sessionStarted() // helpful for tests
437+ property string fakeActiveForApp: ""
401 available: true
439 available: true
402 hides: [launcher, panel.indicators]
440 hides: [launcher, panel.indicators]
403 shown: true
441 shown: true
@@ -409,14 +447,28 @@ FocusScope {
410 dragHandleWidth: shell.edgeSize
448 dragHandleWidth: shell.edgeSize
452+ LightDM.Greeter.startSessionSync();
412 onShownChanged: {
460 onShownChanged: {
413 if (shown) {
461 if (shown) {
414 lockscreen.reset();
462 lockscreen.reset();
463+ if (!LightDM.Greeter.promptless) {
415 // If there is only one user, we start authenticating with that one here.
466 // If there is only one user, we start authenticating with that one here.
416 // If there are more users, the Greeter will handle that
467 // If there are more users, the Greeter will handle that
417 if (LightDM.Users.count == 1) {
468 if (LightDM.Users.count == 1) {
418 LightDM.Greeter.authenticate(LightDM.Users.data(0, LightDM.UserRoles.NameRole));
469 LightDM.Greeter.authenticate(LightDM.Users.data(0, LightDM.UserRoles.NameRole));
471+ greeter.fakeActiveForApp = "";
420 greeter.forceActiveFocus();
472 greeter.forceActiveFocus();
@@ -452,7 +504,7 @@ FocusScope {
452 onDisplayPowerStateChange: {
504 onDisplayPowerStateChange: {
453 // We ignore any display-off signals when the proximity sensor
505 // We ignore any display-off signals when the proximity sensor
454 // is active. This usually indicates something like a phone call.
506 // is active. This usually indicates something like a phone call.
455− if (status == Powerd.Off && (flags & Powerd.UseProximity) == 0) {
507+ if (status == Powerd.Off && reason != Powerd.Proximity) {
456 greeter.showNow();
508 greeter.showNow();
@@ -466,12 +518,36 @@ FocusScope {
468 function showHome() {
520 function showHome() {
521+ if (edgeDemo.running)
524+ if (LightDM.Greeter.active) {
525+ if (!LightDM.Greeter.promptless)
469− var animate = !greeter.shown && !stages.shown
530+ var animate = !LightDM.Greeter.active && !stages.shown
471 dash.setCurrentScope("clickscope", animate, false)
531 dash.setCurrentScope("clickscope", animate, false)
472 stages.hide()
532 stages.hide()
535+ function showDash() {
536+ if (LightDM.Greeter.active && !LightDM.Greeter.promptless)
539+ if (stages.shown && !stages.overlayMode) {
540+ if (!stages.locked) {
545+ if (greeter.shown) {
546+ greeter.hideRight();
475 function hideIndicatorMenu(delay) {
551 function hideIndicatorMenu(delay) {
476 panel.hideIndicatorMenu(delay);
552 panel.hideIndicatorMenu(delay);
@@ -483,17 +559,18 @@ FocusScope {
485 id: panel
561 id: panel
486 anchors.fill: parent //because this draws indicator menus
563 anchors.fill: parent //because this draws indicator menus
487 indicatorsMenuWidth: parent.width > units.gu(60) ? units.gu(40) : parent.width
564 indicatorsMenuWidth: parent.width > units.gu(60) ? units.gu(40) : parent.width
488 indicators {
565 indicators {
489 hides: [launcher]
566 hides: [launcher]
490− available: edgeDemo.panelEnabled
567+ available: edgeDemo.panelEnabled && greeter.fakeActiveForApp === ""
491 contentEnabled: edgeDemo.panelContentEnabled
568 contentEnabled: edgeDemo.panelContentEnabled
493 property string focusedAppId: ApplicationManager.focusedApplicationId
570 property string focusedAppId: ApplicationManager.focusedApplicationId
494 property var focusedApplication: ApplicationManager.findApplication(focusedAppId)
571 property var focusedApplication: ApplicationManager.findApplication(focusedAppId)
495− fullscreenMode: focusedApplication && stages.fullscreen && !greeter.shown && !lockscreen.shown
572+ fullscreenMode: (focusedApplication && stages.fullscreen && !LightDM.Greeter.active) || greeter.fakeActiveForApp !== ""
496− searchVisible: !greeter.shown && !lockscreen.shown && dash.shown && dash.searchable
573+ searchVisible: !LightDM.Greeter.active && dash.shown && dash.searchable
498 InputFilterArea {
575 InputFilterArea {
499 anchors {
576 anchors {
@@ -518,6 +595,7 @@ FocusScope {
519 Launcher {
596 Launcher {
520 id: launcher
597 id: launcher
598+ objectName: "launcher"
522 readonly property bool dashSwipe: progress > 0
600 readonly property bool dashSwipe: progress > 0
@@ -525,28 +603,14 @@ FocusScope {
525 anchors.bottom: parent.bottom
603 anchors.bottom: parent.bottom
526 width: parent.width
604 width: parent.width
527 dragAreaWidth: shell.edgeSize
605 dragAreaWidth: shell.edgeSize
528− available: edgeDemo.launcherEnabled
606+ available: edgeDemo.launcherEnabled && greeter.fakeActiveForApp === ""
531− if (edgeDemo.running)
534− showHome()
608+ onShowDashHome: showHome()
536− onDash: {
609+ onDash: showDash()
537− if (stages.shown && !stages.overlayMode) {
538− if (!stages.locked) {
543− if (greeter.shown) {
544− greeter.hideRight();
548 onDashSwipeChanged: if (dashSwipe && stages.shown) dash.setCurrentScope("clickscope", false, true)
610 onDashSwipeChanged: if (dashSwipe && stages.shown) dash.setCurrentScope("clickscope", false, true)
549 onLauncherApplicationSelected: {
611 onLauncherApplicationSelected: {
612+ if (greeter.fakeActiveForApp !== "")
550 if (!edgeDemo.running)
614 if (!edgeDemo.running)
551 shell.activateApplication(appId)
615 shell.activateApplication(appId)