on xenial help sign in
Make tablet greeter work correctly when apps request focus and have it reset itself every show
commit42b94b69eda1234ab9ad788b95847f56c5126f1d authorMichael Terry <michael.terry@canonical.com> dateWed 10 Sep 2014, 18:20 (12 years ago) parent9916cad
5 files changed+83−30
qml/Greeter/Greeter.qml+12 qml/Greeter/GreeterContent.qml+12 qml/Greeter/LoginList.qml+17−6 qml/Launcher/Launcher.qml+1−2 qml/Shell.qml+41−22
qml/Greeter/Greeter.qml+12
@@ -57,6 +57,18 @@ Showable {
5757 }
5858 }
5959
60+ function tryToUnlock() {
61+ if (created) {
62+ greeterContentLoader.item.tryToUnlock()
63+ }
64+ }
65+
66+ function reset() {
67+ if (created) {
68+ greeterContentLoader.item.reset()
69+ }
70+ }
71+
6072 onRequiredChanged: {
6173 // Reset hide animation to default once we're finished with it
6274 if (required) {
qml/Greeter/GreeterContent.qml+12
@@ -29,6 +29,18 @@ Item {
2929 signal selected(int uid)
3030 signal unlocked(int uid)
3131
32+ function tryToUnlock() {
33+ if (loginLoader.item) {
34+ loginLoader.item.tryToUnlock()
35+ }
36+ }
37+
38+ function reset() {
39+ if (loginLoader.item) {
40+ loginLoader.item.reset()
41+ }
42+ }
43+
3244 Rectangle {
3345 // In case background fails to load
3446 id: backgroundBackup
qml/Greeter/LoginList.qml+17−6
@@ -35,6 +35,22 @@ Item {
3535 signal selected(int uid)
3636 signal unlocked(int uid)
3737
38+ function tryToUnlock() {
39+ if (LightDM.Greeter.promptless) {
40+ if (LightDM.Greeter.authenticated) {
41+ root.unlocked(userList.currentIndex)
42+ } else {
43+ root.resetAuthentication()
44+ }
45+ } else {
46+ passwordInput.forceActiveFocus()
47+ }
48+ }
49+
50+ function reset() {
51+ root.resetAuthentication()
52+ }
53+
3854 Keys.onEscapePressed: root.resetAuthentication()
3955
4056 Rectangle {
@@ -231,12 +247,7 @@ Item {
231247 MouseArea {
232248 anchors.fill: passwordInput
233249 enabled: LightDM.Greeter.promptless
234− onClicked: {
235− if (LightDM.Greeter.authenticated)
236− root.unlocked(userList.currentIndex);
237− else
238− root.resetAuthentication();
239− }
250+ onClicked: root.tryToUnlock()
240251 }
241252
242253 function resetAuthentication() {
qml/Launcher/Launcher.qml+1−2
@@ -243,10 +243,9 @@ Item {
243243 onDraggingChanged: {
244244 if (!dragging) {
245245 if (distance > panel.width / 2) {
246+ root.switchToNextState("visible")
246247 if (distance > minimizeDistance) {
247248 root.dash();
248− } else {
249− root.switchToNextState("visible")
250249 }
251250 } else {
252251 root.switchToNextState("")
qml/Shell.qml+41−22
@@ -139,29 +139,35 @@ Item {
139139 Connections {
140140 target: ApplicationManager
141141 onFocusRequested: {
142− if (appId === "dialer-app") {
143− // Always let the dialer-app through. Either user asked
144− // for an emergency call or accepted an incoming call.
145− setLockedApp(appId)
146− } else if (greeter.hasLockedApp && greeter.lockedApp !== appId) {
147− lockscreen.show();
142+ if (greeter.narrowMode) {
143+ if (appId === "dialer-app") {
144+ // Always let the dialer-app through. Either user asked
145+ // for an emergency call or accepted an incoming call.
146+ setLockedApp(appId)
147+ } else if (greeter.hasLockedApp && greeter.lockedApp !== appId) {
148+ greeter.startUnlock()
149+ }
150+ greeter.hide();
151+ launcher.hide();
152+ } else {
153+ if (LightDM.Greeter.active) {
154+ greeter.startUnlock()
155+ }
148156 }
149− greeter.hide();
150− launcher.hide();
151157 }
152158
153159 onFocusedApplicationIdChanged: {
154160 if (greeter.hasLockedApp && greeter.lockedApp !== ApplicationManager.focusedApplicationId) {
155− lockscreen.show();
161+ greeter.startUnlock()
156162 }
157163 panel.indicators.hide();
158164 }
159165
160166 onApplicationAdded: {
161167 if (greeter.shown && appId != "unity8-dash") {
162− greeter.hide();
168+ greeter.startUnlock()
163169 }
164− if (appId === "dialer-app") {
170+ if (greeter.narrowMode && appId === "dialer-app") {
165171 // Always let the dialer-app through. Either user asked
166172 // for an emergency call or accepted an incoming call.
167173 setLockedApp(appId)
@@ -306,11 +312,13 @@ Item {
306312 }
307313
308314 onPromptlessChanged: {
309− if (LightDM.Greeter.promptless && LightDM.Greeter.authenticated) {
310− lockscreen.hide()
311− } else {
312− lockscreen.reset();
313− lockscreen.show();
315+ if (greeter.narrowMode) {
316+ if (LightDM.Greeter.promptless && LightDM.Greeter.authenticated) {
317+ lockscreen.hide()
318+ } else {
319+ lockscreen.reset();
320+ lockscreen.show();
321+ }
314322 }
315323 }
316324
@@ -384,7 +392,7 @@ Item {
384392 property bool fullyShown: showProgress === 1.0
385393 onFullyShownChanged: {
386394 // Wait until the greeter is completely covering lockscreen before resetting it.
387− if (fullyShown && !LightDM.Greeter.authenticated) {
395+ if (greeter.narrowMode && fullyShown && !LightDM.Greeter.authenticated) {
388396 lockscreen.reset();
389397 lockscreen.show();
390398 }
@@ -414,6 +422,18 @@ Item {
414422
415423 dragHandleWidth: shell.edgeSize
416424
425+ function startUnlock() {
426+ if (narrowMode) {
427+ if (!LightDM.Greeter.authenticated) {
428+ lockscreen.show()
429+ }
430+ hide()
431+ } else {
432+ show()
433+ tryToUnlock()
434+ }
435+ }
436+
417437 function login() {
418438 enabled = false;
419439 if (LightDM.Greeter.startSessionSync()) {
@@ -429,6 +449,8 @@ Item {
429449 if (shown) {
430450 if (greeter.narrowMode) {
431451 LightDM.Greeter.authenticate(LightDM.Users.data(0, LightDM.UserRoles.NameRole));
452+ } else {
453+ reset()
432454 }
433455 greeter.lockedApp = "";
434456 greeter.forceActiveFocus();
@@ -475,10 +497,7 @@ Item {
475497 }
476498
477499 if (LightDM.Greeter.active) {
478− if (!LightDM.Greeter.authenticated) {
479− lockscreen.show()
480− }
481− greeter.hide()
500+ greeter.startUnlock()
482501 }
483502
484503 var animate = !LightDM.Greeter.active && !stages.shown
@@ -546,7 +565,7 @@ Item {
546565 }
547566 onLauncherApplicationSelected: {
548567 if (greeter.hasLockedApp) {
549− lockscreen.show()
568+ greeter.startUnlock()
550569 }
551570 if (!edgeDemo.running)
552571 shell.activateApplication(appId)