on xenial help sign in
Fix focus on greeter and various other bugs
commitbe423659cbd48574008d22eeb8e964c581ee88bc authorMichael Terry <michael.terry@canonical.com> dateMon 27 Jun 2016, 14:32 (10 years ago) parente5bce7d
16 files changed+324−219
po/hu.po+46−45 po/pt.po+47−45 qml/Greeter/Greeter.qml+27−24 qml/Greeter/GreeterPrompt.qml+60−11 qml/Greeter/LoginList.qml+27−16 qml/Greeter/NarrowView.qml+2−4 qml/Greeter/WideView.qml+4−7 qml/Shell.qml+5−3 tests/qmltests/Greeter/TestView.qml−6 tests/qmltests/Greeter/tst_Greeter.qml−8 tests/qmltests/Greeter/tst_NarrowView.qml+2−14 tests/qmltests/Greeter/tst_WideView.qml+92−26 tests/qmltests/Tutorial/tst_Tutorial.qml+1−1 tests/qmltests/tst_OrientedShell.qml+2−2 tests/qmltests/tst_Shell.qml+3−3 tests/qmltests/tst_ShellWithPin.qml+6−4
po/hu.po+46−45
@@ -8,14 +8,14 @@ msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2016-06-17 01:22+0000\n"
11−"PO-Revision-Date: 2016-03-24 09:19+0000\n"
11+"PO-Revision-Date: 2016-06-20 07:28+0000\n"
1212"Last-Translator: Richard Somlói <ricsipontaz@gmail.com>\n"
1313"Language-Team: Hungarian <hu@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-06-19 05:55+0000\n"
18+"X-Launchpad-Export-Date: 2016-06-21 05:59+0000\n"
1919"X-Generator: Launchpad (build 18097)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
@@ -121,163 +121,163 @@ msgstr "Újraindítás"
121121
122122#: qml/Components/KeyboardShortcutsOverlay.qml:41
123123msgid "Keyboard Shortcuts"
124−msgstr ""
124+msgstr "Gyorsbillentyűk"
125125
126126#: qml/Components/KeyboardShortcutsOverlay.qml:55
127127msgid "Unity 8"
128−msgstr ""
128+msgstr "Unity 8"
129129
130130#: qml/Components/KeyboardShortcutsOverlay.qml:62
131131msgid "PrtScr"
132−msgstr ""
132+msgstr "PrtScr"
133133
134134#: qml/Components/KeyboardShortcutsOverlay.qml:67
135135msgid "Takes a screenshot."
136−msgstr ""
136+msgstr "Képernyő képkészítése."
137137
138138#: qml/Components/KeyboardShortcutsOverlay.qml:75
139139msgid "Alt + PrtScr"
140−msgstr ""
140+msgstr "Alt + PrtScr"
141141
142142#: qml/Components/KeyboardShortcutsOverlay.qml:80
143143msgid "Takes a screenshot of a window."
144−msgstr ""
144+msgstr "Képernyőkép készítése az ablakról."
145145
146146#: qml/Components/KeyboardShortcutsOverlay.qml:88
147147msgid "Super + Space"
148−msgstr ""
148+msgstr "Szuper + Szóköz"
149149
150150#: qml/Components/KeyboardShortcutsOverlay.qml:93
151151msgid "Switches to next keyboard layout."
152−msgstr ""
152+msgstr "A következő billentyűzetkiosztására váltás."
153153
154154#: qml/Components/KeyboardShortcutsOverlay.qml:101
155155msgid "Super + Shift + Space"
156−msgstr ""
156+msgstr "Szuper + Shift + Szóköz"
157157
158158#: qml/Components/KeyboardShortcutsOverlay.qml:106
159159msgid "Switches to previous keyboard layout."
160−msgstr ""
160+msgstr "Az előző billentyűzetkiosztására váltás."
161161
162162#: qml/Components/KeyboardShortcutsOverlay.qml:118
163163msgid "Launcher"
164−msgstr ""
164+msgstr "Indító"
165165
166166#: qml/Components/KeyboardShortcutsOverlay.qml:125
167167msgid "Super (Hold)"
168−msgstr ""
168+msgstr "Szuper (nyomva tartva)"
169169
170170#: qml/Components/KeyboardShortcutsOverlay.qml:130
171171msgid "Opens the launcher, displays shortcuts."
172−msgstr ""
172+msgstr "Indító megnyitása és gyorsindítók megjelenítése."
173173
174174#: qml/Components/KeyboardShortcutsOverlay.qml:138
175175msgid "Alt + F1"
176−msgstr ""
176+msgstr "Alt + F1"
177177
178178#: qml/Components/KeyboardShortcutsOverlay.qml:143
179179msgid "Opens launcher keyboard navigation mode."
180−msgstr ""
180+msgstr "Indító megnyitása billentyűzettel navigáláshoz."
181181
182182#: qml/Components/KeyboardShortcutsOverlay.qml:151
183183msgid "Super + Tab"
184−msgstr ""
184+msgstr "Super + Tab"
185185
186186#: qml/Components/KeyboardShortcutsOverlay.qml:156
187187msgid "Switches applications via the launcher."
188−msgstr ""
188+msgstr "Alkalmazás váltás az indítóval"
189189
190190#: qml/Components/KeyboardShortcutsOverlay.qml:164
191191msgid "Super + 0 to 9"
192−msgstr ""
192+msgstr "Super + 0-9"
193193
194194#: qml/Components/KeyboardShortcutsOverlay.qml:169
195195msgid "Same as clicking on a launcher icon."
196−msgstr ""
196+msgstr "Az adott számú alkalmazás indítása."
197197
198198#: qml/Components/KeyboardShortcutsOverlay.qml:181
199199msgid "Scopes"
200−msgstr ""
200+msgstr "Lencsék"
201201
202202#: qml/Components/KeyboardShortcutsOverlay.qml:188
203203msgid "Super (Tap)"
204−msgstr ""
204+msgstr "Super (Tap)"
205205
206206#: qml/Components/KeyboardShortcutsOverlay.qml:193
207207msgid "Opens the Scopes home."
208−msgstr ""
208+msgstr "Lencsék kezdőlapjának megnyitása"
209209
210210#: qml/Components/KeyboardShortcutsOverlay.qml:209
211211msgid "Switching"
212−msgstr ""
212+msgstr "Váltás"
213213
214214#: qml/Components/KeyboardShortcutsOverlay.qml:216
215215msgid "Alt + Tab"
216−msgstr ""
216+msgstr "Alt + Tab"
217217
218218#: qml/Components/KeyboardShortcutsOverlay.qml:221
219219msgid "Switches between applications."
220−msgstr ""
220+msgstr "Váltás az alkalmazások között."
221221
222222#: qml/Components/KeyboardShortcutsOverlay.qml:229
223223msgid "Super + W"
224−msgstr ""
224+msgstr "Super + W"
225225
226226#: qml/Components/KeyboardShortcutsOverlay.qml:234
227227msgid "Opens the desktop spread."
228−msgstr ""
228+msgstr "Az asztal ablakainak szétterítése."
229229
230230#: qml/Components/KeyboardShortcutsOverlay.qml:242
231231msgid "Cursor Left or Right"
232−msgstr ""
232+msgstr "Balra/jobbra nyíl"
233233
234234#: qml/Components/KeyboardShortcutsOverlay.qml:247
235235msgid "Moves the focus."
236−msgstr ""
236+msgstr "Fókusz mozgatása."
237237
238238#: qml/Components/KeyboardShortcutsOverlay.qml:259
239239msgid "Windows"
240−msgstr ""
240+msgstr "Ablakok"
241241
242242#: qml/Components/KeyboardShortcutsOverlay.qml:266
243243msgid "Ctrl + Super + D"
244−msgstr ""
244+msgstr "Ctrl + Szuper + D"
245245
246246#: qml/Components/KeyboardShortcutsOverlay.qml:271
247247msgid "Minimizes all windows."
248−msgstr ""
248+msgstr "Minden ablak minimalizálása."
249249
250250#: qml/Components/KeyboardShortcutsOverlay.qml:279
251251msgid "Ctrl + Super + Up"
252−msgstr ""
252+msgstr "Ctrl + Szuper + Fel"
253253
254254#: qml/Components/KeyboardShortcutsOverlay.qml:284
255255msgid "Maximizes the current window."
256−msgstr ""
256+msgstr "Aktuális ablak maximalizálása."
257257
258258#: qml/Components/KeyboardShortcutsOverlay.qml:292
259259msgid "Ctrl + Super + Down"
260−msgstr ""
260+msgstr "Ctrl + Szuper + Le"
261261
262262#: qml/Components/KeyboardShortcutsOverlay.qml:297
263263msgid "Minimizes or restores the current window."
264−msgstr ""
264+msgstr "Az aktuális ablak visszaállítása vagy minimalizálása."
265265
266266#: qml/Components/KeyboardShortcutsOverlay.qml:305
267267msgid "Ctrl + Super + Left or Right"
268−msgstr ""
268+msgstr "Ctrl + Szuper + Bal vagy Jobb"
269269
270270#: qml/Components/KeyboardShortcutsOverlay.qml:310
271271msgid "Semi-maximizes the current window."
272−msgstr ""
272+msgstr "Az aktuális ablak balra vagy jobbra igazítása."
273273
274274#: qml/Components/KeyboardShortcutsOverlay.qml:318
275275msgid "Alt + F4"
276−msgstr ""
276+msgstr "Alt + F4"
277277
278278#: qml/Components/KeyboardShortcutsOverlay.qml:323
279279msgid "Closes the current window."
280−msgstr ""
280+msgstr "Az aktuális ablak bezárása."
281281
282282#: qml/Components/Lockscreen.qml:231
283283msgid "Return to Call"
@@ -438,7 +438,7 @@ msgstr "Újra"
438438
439439#: qml/Greeter/LoginList.qml:260
440440msgid "Log In"
441−msgstr ""
441+msgstr "Bejelentkezés"
442442
443443#: qml/Greeter/NarrowView.qml:54
444444msgid "Sorry, incorrect passphrase."
@@ -597,7 +597,7 @@ msgstr "Hosszan csúsztasson balról a Ma lencse eléréséhez"
597597
598598#: qml/Tutorial/TutorialLeft.qml:47
599599msgid "Short swipe from the left edge to open the launcher"
600−msgstr ""
600+msgstr "Balról röviden csúsztatva nyithatja meg az indítót"
601601
602602#: qml/Tutorial/TutorialRight.qml:55
603603msgid "Push your mouse against the right edge to view your open apps"
@@ -606,11 +606,12 @@ msgstr ""
606606
607607#: qml/Tutorial/TutorialRight.qml:56
608608msgid "Swipe from the right edge to view your open apps"
609−msgstr ""
609+msgstr "Jobbról csúsztatva tekintheti meg a nyitott alkalmazásokat"
610610
611611#: qml/Tutorial/TutorialTop.qml:53
612612msgid "Swipe from the top edge to access notifications and quick settings"
613613msgstr ""
614+"Fentről csúsztatva érheti el az értesítéseket és a gyors-beállításokat"
614615
615616#: qml/Wizard/Page.qml:54
616617msgctxt "Button: Go back one page in the Wizard"
po/pt.po+47−45
@@ -8,14 +8,14 @@ msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2016-06-17 01:22+0000\n"
11−"PO-Revision-Date: 2016-02-18 01:11+0000\n"
11+"PO-Revision-Date: 2016-06-20 11:37+0000\n"
1212"Last-Translator: Ivo Xavier <ivoxavier.8@gmail.com>\n"
1313"Language-Team: Portuguese <pt@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-06-19 05:55+0000\n"
18+"X-Launchpad-Export-Date: 2016-06-21 05:59+0000\n"
1919"X-Generator: Launchpad (build 18097)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
@@ -125,163 +125,163 @@ msgstr "Reiniciar"
125125
126126#: qml/Components/KeyboardShortcutsOverlay.qml:41
127127msgid "Keyboard Shortcuts"
128−msgstr ""
128+msgstr "Atalhos do teclado"
129129
130130#: qml/Components/KeyboardShortcutsOverlay.qml:55
131131msgid "Unity 8"
132−msgstr ""
132+msgstr "Unity 8"
133133
134134#: qml/Components/KeyboardShortcutsOverlay.qml:62
135135msgid "PrtScr"
136−msgstr ""
136+msgstr "PrtScr"
137137
138138#: qml/Components/KeyboardShortcutsOverlay.qml:67
139139msgid "Takes a screenshot."
140−msgstr ""
140+msgstr "Tira uma captura de ecrã."
141141
142142#: qml/Components/KeyboardShortcutsOverlay.qml:75
143143msgid "Alt + PrtScr"
144−msgstr ""
144+msgstr "Alt + PrtScr"
145145
146146#: qml/Components/KeyboardShortcutsOverlay.qml:80
147147msgid "Takes a screenshot of a window."
148−msgstr ""
148+msgstr "Tira uma captura de uma janela."
149149
150150#: qml/Components/KeyboardShortcutsOverlay.qml:88
151151msgid "Super + Space"
152−msgstr ""
152+msgstr "Super + Space"
153153
154154#: qml/Components/KeyboardShortcutsOverlay.qml:93
155155msgid "Switches to next keyboard layout."
156−msgstr ""
156+msgstr "Troca para o próximo layout do teclado."
157157
158158#: qml/Components/KeyboardShortcutsOverlay.qml:101
159159msgid "Super + Shift + Space"
160−msgstr ""
160+msgstr "Super + Shift + Space"
161161
162162#: qml/Components/KeyboardShortcutsOverlay.qml:106
163163msgid "Switches to previous keyboard layout."
164−msgstr ""
164+msgstr "Troca para o anterior layout do teclado."
165165
166166#: qml/Components/KeyboardShortcutsOverlay.qml:118
167167msgid "Launcher"
168−msgstr ""
168+msgstr "Launcher"
169169
170170#: qml/Components/KeyboardShortcutsOverlay.qml:125
171171msgid "Super (Hold)"
172−msgstr ""
172+msgstr "Super (Pressionar)"
173173
174174#: qml/Components/KeyboardShortcutsOverlay.qml:130
175175msgid "Opens the launcher, displays shortcuts."
176−msgstr ""
176+msgstr "Abre o Launcher, mostra os atalhos."
177177
178178#: qml/Components/KeyboardShortcutsOverlay.qml:138
179179msgid "Alt + F1"
180−msgstr ""
180+msgstr "Alt + F1"
181181
182182#: qml/Components/KeyboardShortcutsOverlay.qml:143
183183msgid "Opens launcher keyboard navigation mode."
184−msgstr ""
184+msgstr "Abre o teclado do modo de navegação do Launcher."
185185
186186#: qml/Components/KeyboardShortcutsOverlay.qml:151
187187msgid "Super + Tab"
188−msgstr ""
188+msgstr "Super + Tab"
189189
190190#: qml/Components/KeyboardShortcutsOverlay.qml:156
191191msgid "Switches applications via the launcher."
192−msgstr ""
192+msgstr "Trocas de aplicações através do Launcher."
193193
194194#: qml/Components/KeyboardShortcutsOverlay.qml:164
195195msgid "Super + 0 to 9"
196−msgstr ""
196+msgstr "Super + 0 a 9"
197197
198198#: qml/Components/KeyboardShortcutsOverlay.qml:169
199199msgid "Same as clicking on a launcher icon."
200−msgstr ""
200+msgstr "O mesmo que clicar no ícone do Launcher."
201201
202202#: qml/Components/KeyboardShortcutsOverlay.qml:181
203203msgid "Scopes"
204−msgstr ""
204+msgstr "Scopes"
205205
206206#: qml/Components/KeyboardShortcutsOverlay.qml:188
207207msgid "Super (Tap)"
208−msgstr ""
208+msgstr "Super (Toque)"
209209
210210#: qml/Components/KeyboardShortcutsOverlay.qml:193
211211msgid "Opens the Scopes home."
212−msgstr ""
212+msgstr "Abre a home Scopes."
213213
214214#: qml/Components/KeyboardShortcutsOverlay.qml:209
215215msgid "Switching"
216−msgstr ""
216+msgstr "Trocar"
217217
218218#: qml/Components/KeyboardShortcutsOverlay.qml:216
219219msgid "Alt + Tab"
220−msgstr ""
220+msgstr "Alt + Tab"
221221
222222#: qml/Components/KeyboardShortcutsOverlay.qml:221
223223msgid "Switches between applications."
224−msgstr ""
224+msgstr "Alternar entre apps."
225225
226226#: qml/Components/KeyboardShortcutsOverlay.qml:229
227227msgid "Super + W"
228−msgstr ""
228+msgstr "Super + W"
229229
230230#: qml/Components/KeyboardShortcutsOverlay.qml:234
231231msgid "Opens the desktop spread."
232−msgstr ""
232+msgstr "Abre o espalhamento do desktop."
233233
234234#: qml/Components/KeyboardShortcutsOverlay.qml:242
235235msgid "Cursor Left or Right"
236−msgstr ""
236+msgstr "Cursor esquerdo ou direito"
237237
238238#: qml/Components/KeyboardShortcutsOverlay.qml:247
239239msgid "Moves the focus."
240−msgstr ""
240+msgstr "Move o foco."
241241
242242#: qml/Components/KeyboardShortcutsOverlay.qml:259
243243msgid "Windows"
244−msgstr ""
244+msgstr "Janelas"
245245
246246#: qml/Components/KeyboardShortcutsOverlay.qml:266
247247msgid "Ctrl + Super + D"
248−msgstr ""
248+msgstr "Ctrl + Super + D"
249249
250250#: qml/Components/KeyboardShortcutsOverlay.qml:271
251251msgid "Minimizes all windows."
252−msgstr ""
252+msgstr "Minimiza todas as janelas."
253253
254254#: qml/Components/KeyboardShortcutsOverlay.qml:279
255255msgid "Ctrl + Super + Up"
256−msgstr ""
256+msgstr "Ctrl + Super + Up"
257257
258258#: qml/Components/KeyboardShortcutsOverlay.qml:284
259259msgid "Maximizes the current window."
260−msgstr ""
260+msgstr "Maximiza a janela atual."
261261
262262#: qml/Components/KeyboardShortcutsOverlay.qml:292
263263msgid "Ctrl + Super + Down"
264−msgstr ""
264+msgstr "Ctrl + Super + Down"
265265
266266#: qml/Components/KeyboardShortcutsOverlay.qml:297
267267msgid "Minimizes or restores the current window."
268−msgstr ""
268+msgstr "Minimiza ou restaura a janela atual."
269269
270270#: qml/Components/KeyboardShortcutsOverlay.qml:305
271271msgid "Ctrl + Super + Left or Right"
272−msgstr ""
272+msgstr "Ctrl + Super + Esquerdo ou Direito"
273273
274274#: qml/Components/KeyboardShortcutsOverlay.qml:310
275275msgid "Semi-maximizes the current window."
276−msgstr ""
276+msgstr "Semi-maximiza a janela atual."
277277
278278#: qml/Components/KeyboardShortcutsOverlay.qml:318
279279msgid "Alt + F4"
280−msgstr ""
280+msgstr "Alt + F4"
281281
282282#: qml/Components/KeyboardShortcutsOverlay.qml:323
283283msgid "Closes the current window."
284−msgstr ""
284+msgstr "Fecha a janela atual."
285285
286286#: qml/Components/Lockscreen.qml:231
287287msgid "Return to Call"
@@ -441,7 +441,7 @@ msgstr "Tentar novamente"
441441
442442#: qml/Greeter/LoginList.qml:260
443443msgid "Log In"
444−msgstr ""
444+msgstr "Iniciar a sessão"
445445
446446#: qml/Greeter/NarrowView.qml:54
447447msgid "Sorry, incorrect passphrase."
@@ -599,7 +599,7 @@ msgstr "Deslize longo da margem esquerda para abrir a scope Hoje"
599599
600600#: qml/Tutorial/TutorialLeft.qml:47
601601msgid "Short swipe from the left edge to open the launcher"
602−msgstr ""
602+msgstr "Deslize curto da margem esquerda para abrir o Launcher."
603603
604604#: qml/Tutorial/TutorialRight.qml:55
605605msgid "Push your mouse against the right edge to view your open apps"
@@ -607,11 +607,13 @@ msgstr "Deslize o rato contra para a margem direita para ver as apps abertas"
607607
608608#: qml/Tutorial/TutorialRight.qml:56
609609msgid "Swipe from the right edge to view your open apps"
610−msgstr ""
610+msgstr "Deslize da margem direita para ver as apps abertas."
611611
612612#: qml/Tutorial/TutorialTop.qml:53
613613msgid "Swipe from the top edge to access notifications and quick settings"
614614msgstr ""
615+"Deslize da margem superior para aceder às notificações e às definições "
616+"rápidas."
615617
616618#: qml/Wizard/Page.qml:54
617619msgctxt "Button: Go back one page in the Wizard"
qml/Greeter/Greeter.qml+27−24
@@ -150,35 +150,40 @@ Showable {
150150 return -1;
151151 }
152152
153− function selectUser(uid, reset) {
154− if (uid < 0)
153+ function selectUser(index, reset) {
154+ if (index < 0 || index >= LightDMService.users.count)
155155 return;
156156 d.waiting = true;
157157 if (reset) {
158158 loader.item.reset();
159159 }
160− currentIndex = uid;
161− var user = LightDMService.users.data(uid, LightDMService.userRoles.NameRole);
160+ currentIndex = index;
161+ var user = LightDMService.users.data(index, LightDMService.userRoles.NameRole);
162162 AccountsService.user = user;
163163 LauncherModel.setUser(user);
164164 LightDMService.greeter.authenticate(user); // always resets auth state
165165 }
166166
167+ function hideView() {
168+ if (loader.item) {
169+ loader.item.enabled = false; // drop OSK and prevent interaction
170+ loader.item.hide();
171+ }
172+ }
173+
167174 function login() {
168− enabled = false;
175+ d.waiting = true;
169176 if (LightDMService.greeter.startSessionSync()) {
170177 sessionStarted();
171− if (loader.item) {
172− loader.item.notifyAuthenticationSucceeded();
173− }
178+ hideView();
174179 } else if (loader.item) {
175180 loader.item.notifyAuthenticationFailed();
176181 }
177− enabled = true;
182+ d.waiting = false;
178183 }
179184
180185 function startUnlock(toTheRight) {
181− if (loader.item) {
186+ if (loader.item && !d.waiting) {
182187 return loader.item.tryToUnlock(toTheRight);
183188 } else {
184189 return false;
@@ -186,10 +191,8 @@ Showable {
186191 }
187192
188193 function checkForcedUnlock(hideNow) {
189− if (forcedUnlock && shown && loader.item) {
190− // pretend we were just authenticated
191− loader.item.notifyAuthenticationSucceeded();
192− loader.item.hide();
194+ if (forcedUnlock && shown) {
195+ hideView();
193196 if (hideNow) {
194197 root.hideNow(); // skip hide animation
195198 }
@@ -299,7 +302,7 @@ Showable {
299302
300303 onLoaded: {
301304 root.lockedApp = "";
302− root.forceActiveFocus();
305+ item.forceActiveFocus();
303306 d.selectUser(d.currentIndex, true);
304307 LightDMService.infographic.readyForDataChange();
305308 }
@@ -309,13 +312,11 @@ Showable {
309312 onSelected: {
310313 d.selectUser(index, true);
311314 }
312− onPromptlessLogin: d.login();
313315 onResponded: {
314316 if (root.locked) {
315317 LightDMService.greeter.respond(response);
316318 } else {
317319 d.login();
318− loader.item.hide();
319320 }
320321 }
321322 onTease: root.tease()
@@ -363,6 +364,12 @@ Showable {
363364 value: root.locked
364365 }
365366
367+ Binding {
368+ target: loader.item
369+ property: "waiting"
370+ value: d.waiting
371+ }
372+
366373 Binding {
367374 target: loader.item
368375 property: "alphanumeric"
@@ -393,10 +400,7 @@ Showable {
393400
394401 onShowGreeter: root.forceShow()
395402
396− onHideGreeter: {
397− d.login();
398− loader.item.hide();
399− }
403+ onHideGreeter: d.login()
400404
401405 onShowMessage: {
402406 // inefficient, but we only rarely deal with messages
@@ -414,11 +418,11 @@ Showable {
414418 }
415419
416420 onShowPrompt: {
417− d.waiting = false;
418−
419421 if (loader.item) {
420422 loader.item.showPrompt(text, isSecret, isDefaultPrompt);
421423 }
424+
425+ d.waiting = false;
422426 }
423427
424428 onAuthenticationComplete: {
@@ -428,7 +432,6 @@ Showable {
428432 AccountsService.failedLogins = 0;
429433 if (!LightDMService.greeter.promptless) {
430434 d.login();
431− loader.item.hide();
432435 }
433436 } else {
434437 if (!LightDMService.greeter.promptless) {
qml/Greeter/GreeterPrompt.qml+60−11
@@ -16,6 +16,7 @@
1616
1717import QtQuick 2.4
1818import Ubuntu.Components 1.3
19+import "../Components"
1920
2021FocusScope {
2122 id: root
@@ -33,6 +34,7 @@ FocusScope {
3334
3435 function reset() {
3536 passwordInput.text = "";
37+ fakeLabel.text = "";
3638 d.enabled = true;
3739 }
3840
@@ -62,10 +64,14 @@ FocusScope {
6264 objectName: "promptButton"
6365 anchors.fill: parent
6466 visible: !root.isPrompt
65− enabled: d.enabled
6667 focus: visible
6768
68− onClicked: root.clicked()
69+ onClicked: {
70+ if (d.enabled) {
71+ d.enabled = false;
72+ root.clicked();
73+ }
74+ }
6975
7076 Label {
7177 anchors.centerIn: parent
@@ -79,10 +85,22 @@ FocusScope {
7985 objectName: "promptField"
8086 anchors.fill: parent
8187 visible: root.isPrompt
82− enabled: d.enabled
83− focus: visible
88+ opacity: fakeLabel.visible ? 0 : 1
89+
90+ // Oddly, a simple "focus: visible" does not stick -- the binding
91+ // gets lost when switching between buttons and prompts. But this
92+ // explicit binding does work.
93+ Binding on focus {
94+ value: passwordInput.visible
95+ }
96+
97+ validator: RegExpValidator {
98+ regExp: root.isAlphanumeric ? /^.*$/ : /^\d{4}$/
99+ }
84100
85− inputMethodHints: root.isAlphanumeric ? Qt.ImhNone : Qt.ImhDigitsOnly
101+ inputMethodHints: Qt.ImhSensitiveData | Qt.ImhNoPredictiveText |
102+ Qt.ImhMultiLine | // so OSK doesn't close on Enter
103+ (root.isAlphanumeric ? Qt.ImhNone : Qt.ImhDigitsOnly)
86104 echoMode: root.isSecret ? TextInput.Password : TextInput.Normal
87105 hasClearButton: false
88106
@@ -107,17 +125,32 @@ FocusScope {
107125 width: units.gu(3)
108126 color: d.textColor
109127 visible: root.isSecret && false // TODO: detect when caps lock is on
128+ readonly property real visibleWidth: visible ? width + passwordInput.frameSpacing : 0
110129 }
111130 ]
112131
132+ onTextChanged: {
133+ if (!isAlphanumeric && text.length >= 4) {
134+ // hard limit of 4 for passcodes right now
135+ respond();
136+ }
137+ }
138+
113139 onAccepted: {
114− if (!enabled)
115− return;
140+ if (d.enabled)
141+ respond();
142+ }
143+
144+ function respond() {
116145 d.enabled = false;
146+ fakeLabel.text = displayText;
117147 root.responded(text);
118148 }
119149
120− Keys.onEscapePressed: root.canceled()
150+ Keys.onEscapePressed: {
151+ root.canceled();
152+ event.accepted = true;
153+ }
121154
122155 // We use our own custom placeholder label instead of the standard
123156 // TextField one because the standard one hardcodes baseText as the
@@ -129,9 +162,7 @@ FocusScope {
129162 right: parent.right
130163 verticalCenter: parent.verticalCenter
131164 leftMargin: units.gu(1.5)
132− rightMargin: anchors.leftMargin +
133− (capsIcon.visible ? capsIcon.width + passwordInput.frameSpacing
134− : 0)
165+ rightMargin: anchors.leftMargin + capsIcon.visibleWidth
135166 }
136167 text: root.text
137168 visible: passwordInput.text == "" && !passwordInput.inputMethodComposing
@@ -139,4 +170,22 @@ FocusScope {
139170 elide: Text.ElideRight
140171 }
141172 }
173+
174+ // Have a fake label that covers the text field after the user presses
175+ // enter. What we *really* want is a disabled mode that doesn't lose
176+ // focus. Because our goal here is simply to keep the OSK up while
177+ // we wait for PAM to get back to us, and while waiting, we don't want
178+ // the user to be able to edit the field (simply because it would look
179+ // weird if we allowed that). But until we have such a disabled mode,
180+ // we'll fake it by covering the real text field with a label.
181+ FadingLabel {
182+ id: fakeLabel
183+ anchors.verticalCenter: parent.verticalCenter
184+ anchors.left: parent.left
185+ anchors.right: parent.right
186+ anchors.leftMargin: passwordInput.frameSpacing * 2
187+ anchors.rightMargin: passwordInput.frameSpacing * 2 + capsIcon.visibleWidth
188+ color: d.drawColor
189+ visible: root.isPrompt && !d.enabled
190+ }
142191}
qml/Greeter/LoginList.qml+27−16
@@ -21,11 +21,13 @@ import "../Components"
2121
2222StyledItem {
2323 id: root
24+ focus: true
2425
2526 property alias model: userList.model
2627 property bool alphanumeric: true
2728 property int currentIndex
2829 property bool locked
30+ property bool waiting
2931
3032 readonly property int numAboveBelow: 4
3133 readonly property int cellHeight: units.gu(5)
@@ -36,7 +38,6 @@ StyledItem {
3638
3739 signal selected(int index)
3840 signal responded(string response)
39− signal promptlessLogin()
4041
4142 function tryToUnlock() {
4243 if (wasPrompted) {
@@ -45,7 +46,6 @@ StyledItem {
4546 if (root.locked) {
4647 root.selected(currentIndex);
4748 } else {
48− promptlessLogin();
4949 root.responded("");
5050 }
5151 }
@@ -60,20 +60,18 @@ StyledItem {
6060 }
6161
6262 function showPrompt(text, isSecret, isDefaultPrompt) {
63− d.promptText = text;
64− passwordInput.reset();
63+ passwordInput.text = isDefaultPrompt ? alphanumeric ? i18n.tr("Passphrase")
64+ : i18n.tr("Passcode")
65+ : text;
66+ passwordInput.isPrompt = true;
6567 passwordInput.isSecret = isSecret;
66− if (wasPrompted) // stay in text field if second prompt
67− passwordInput.focus = true;
68+ passwordInput.reset();
6869 wasPrompted = true;
6970 }
7071
7172 function showError() {
7273 wrongPasswordAnimation.start();
7374 root.resetAuthentication();
74− if (wasPrompted) {
75− passwordInput.focus = true;
76− }
7775 }
7876
7977 function reset() {
@@ -83,15 +81,33 @@ StyledItem {
8381 QtObject {
8482 id: d
8583
86− property string promptText
84+ function checkIfPromptless() {
85+ if (!waiting && !wasPrompted) {
86+ passwordInput.isPrompt = false;
87+ passwordInput.text = root.locked ? i18n.tr("Retry")
88+ : i18n.tr("Log In")
89+ }
90+ }
8791 }
8892
93+ onWaitingChanged: d.checkIfPromptless()
94+ onLockedChanged: d.checkIfPromptless()
95+
8996 theme: ThemeSettings {
9097 name: "Ubuntu.Components.Themes.Ambiance"
9198 }
9299
100+ Keys.onUpPressed: {
101+ selected(currentIndex - 1);
102+ event.accepted = true;
103+ }
104+ Keys.onDownPressed: {
105+ selected(currentIndex + 1);
106+ event.accepted = true;
107+ }
93108 Keys.onEscapePressed: {
94109 selected(currentIndex);
110+ event.accepted = true;
95111 }
96112
97113 onCurrentIndexChanged: {
@@ -137,6 +153,7 @@ StyledItem {
137153 highlightRangeMode: ListView.StrictlyEnforceRange
138154 highlightMoveDuration: root.moveDuration
139155 flickDeceleration: 10000
156+ interactive: count > 1
140157
141158 readonly property bool movingInternally: moveTimer.running || userList.moving
142159 onMovingInternallyChanged: {
@@ -254,13 +271,8 @@ StyledItem {
254271 width: highlightItem.width - anchors.margins * 2
255272 opacity: userList.movingInternally ? 0 : 1
256273
257− isPrompt: root.wasPrompted
258274 isAlphanumeric: root.alphanumeric
259275
260− text: root.wasPrompted ? d.promptText
261− : (root.locked ? i18n.tr("Retry")
262− : i18n.tr("Log In"))
263−
264276 onClicked: root.tryToUnlock()
265277 onResponded: root.responded(text)
266278 onCanceled: root.selected(currentIndex)
@@ -280,7 +292,6 @@ StyledItem {
280292 return;
281293 }
282294 infoLabel.text = "";
283− d.promptText = "";
284295 passwordInput.reset();
285296 root.wasPrompted = false;
286297 }
qml/Greeter/NarrowView.qml+2−4
@@ -31,6 +31,7 @@ FocusScope {
3131 property bool alphanumeric
3232 property var userModel // unused
3333 property alias infographicModel: coverPage.infographicModel
34+ property bool waiting
3435 readonly property bool fullyShown: coverPage.showProgress === 1 || lockscreen.shown
3536 readonly property bool required: coverPage.required || lockscreen.required
3637 readonly property bool animating: coverPage.showAnimation.running || coverPage.hideAnimation.running
@@ -65,10 +66,6 @@ FocusScope {
6566 coverPage.hide();
6667 }
6768
68− function notifyAuthenticationSucceeded() {
69− lockscreen.hide();
70− }
71−
7269 function notifyAuthenticationFailed() {
7370 lockscreen.clear(true);
7471 }
@@ -156,6 +153,7 @@ FocusScope {
156153 height: parent.height
157154 width: parent.width
158155 background: root.background
156+ draggable: !root.waiting
159157 onTease: root.tease()
160158 onClicked: hide()
161159
qml/Greeter/WideView.qml+4−7
@@ -19,6 +19,7 @@ import Ubuntu.Components 1.3
1919
2020FocusScope {
2121 id: root
22+ focus: true
2223
2324 property alias dragHandleLeftMargin: coverPage.dragHandleLeftMargin
2425 property alias launcherOffset: coverPage.launcherOffset
@@ -30,6 +31,7 @@ FocusScope {
3031 property alias alphanumeric: loginList.alphanumeric
3132 property alias userModel: loginList.model
3233 property alias infographicModel: coverPage.infographicModel
34+ property bool waiting
3335 readonly property bool fullyShown: coverPage.showProgress === 1
3436 readonly property bool required: coverPage.required
3537 readonly property bool animating: coverPage.showAnimation.running || coverPage.hideAnimation.running
@@ -37,7 +39,6 @@ FocusScope {
3739 // so that it can be replaced in tests with a mock object
3840 property var inputMethod: Qt.inputMethod
3941
40− signal promptlessLogin()
4142 signal selected(int index)
4243 signal responded(string response)
4344 signal tease()
@@ -59,10 +60,6 @@ FocusScope {
5960 coverPage.hide();
6061 }
6162
62− function notifyAuthenticationSucceeded() {
63− // Nothing needed
64− }
65−
6663 function notifyAuthenticationFailed() {
6764 loginList.showError();
6865 }
@@ -98,7 +95,7 @@ FocusScope {
9895 objectName: "coverPage"
9996 height: parent.height
10097 width: parent.width
101− draggable: !root.locked
98+ draggable: !root.locked && !root.waiting
10299
103100 infographics {
104101 height: 0.75 * parent.height
@@ -128,8 +125,8 @@ FocusScope {
128125 Behavior on height { UbuntuNumberAnimation {} }
129126
130127 locked: root.locked
128+ waiting: root.waiting
131129
132− onPromptlessLogin: root.promptlessLogin()
133130 onSelected: root.selected(index)
134131 onResponded: root.responded(response)
135132 }
qml/Shell.qml+5−3
@@ -137,9 +137,9 @@ StyledItem {
137137 // For autopilot consumption
138138 readonly property string focusedApplicationId: ApplicationManager.focusedApplicationId
139139
140− // Disable everything while greeter is waiting, so that the user can't swipe
141− // the greeter or launcher until we know whether the session is locked.
142− enabled: greeter && !greeter.waiting
140+ // Note when greeter is waiting on PAM, so that we can disable edges until
141+ // we know which user data to show and whether the session is locked.
142+ readonly property bool waitingOnGreeter: greeter && greeter.waiting
143143
144144 property real edgeSize: units.gu(settings.edgeDragWidth)
145145
@@ -525,6 +525,7 @@ StyledItem {
525525 available: tutorial.panelEnabled
526526 && ((!greeter || !greeter.locked) || AccountsService.enableIndicatorsWhileLocked)
527527 && (!greeter || !greeter.hasLockedApp)
528+ && !shell.waitingOnGreeter
528529 width: parent.width > units.gu(60) ? units.gu(40) : parent.width
529530
530531 minimizedPanelHeight: units.gu(3)
@@ -575,6 +576,7 @@ StyledItem {
575576 available: tutorial.launcherEnabled
576577 && (!greeter.locked || AccountsService.enableLauncherWhileLocked)
577578 && !greeter.hasLockedApp
579+ && !shell.waitingOnGreeter
578580 inverted: shell.usageScenario !== "desktop"
579581 superPressed: physicalKeysMapper.superPressed
580582 superTabPressed: physicalKeysMapper.superTabPressed
tests/qmltests/Greeter/TestView.qml−6
@@ -42,13 +42,11 @@ Item {
4242 signal responded(string response)
4343 signal tease()
4444 signal emergencyCall()
45− signal promptlessLogin()
4645
4746 signal _showMessageCalled(string html)
4847 signal _showPromptCalled(string text, bool isSecret, bool isDefaultPrompt)
4948 signal _showLastChanceCalled()
5049 signal _hideCalled()
51− signal _notifyAuthenticationSucceededCalled()
5250 signal _notifyAuthenticationFailedCalled()
5351 signal _resetCalled()
5452 signal _tryToUnlockCalled(bool toTheRight)
@@ -71,10 +69,6 @@ Item {
7169 _fullyShown = false;
7270 }
7371
74− function notifyAuthenticationSucceeded() {
75− _notifyAuthenticationSucceededCalled();
76− }
77−
7872 function notifyAuthenticationFailed() {
7973 _notifyAuthenticationFailedCalled();
8074 }
tests/qmltests/Greeter/tst_Greeter.qml−8
@@ -113,12 +113,6 @@ Item {
113113 signalName: "_hideCalled"
114114 }
115115
116− SignalSpy {
117− id: viewAuthenticationSucceededSpy
118− target: testCase.view
119− signalName: "_notifyAuthenticationSucceededCalled"
120− }
121−
122116 SignalSpy {
123117 id: viewAuthenticationFailedSpy
124118 target: testCase.view
@@ -149,7 +143,6 @@ Item {
149143 viewShowPromptSpy.clear();
150144 viewShowLastChanceSpy.clear();
151145 viewHideSpy.clear();
152− viewAuthenticationSucceededSpy.clear();
153146 viewAuthenticationFailedSpy.clear();
154147 viewResetSpy.clear();
155148 viewTryToUnlockSpy.clear();
@@ -196,7 +189,6 @@ Item {
196189
197190 function verifyLoggedIn() {
198191 tryCompare(sessionStartedSpy, "count", 1);
199− verify(viewAuthenticationSucceededSpy.count > 0);
200192 compare(LightDM.Greeter.authenticated, true);
201193 compare(greeter.shown, false);
202194 }
tests/qmltests/Greeter/tst_NarrowView.qml+2−14
@@ -125,20 +125,8 @@ Item {
125125 }
126126 Row {
127127 Button {
128− text: "Authenticated"
129− onClicked: {
130− if (successCheckBox.checked) {
131− loader.item.notifyAuthenticationSucceeded();
132− } else {
133− loader.item.notifyAuthenticationFailed();
134− }
135− }
136− }
137− CheckBox {
138− id: successCheckBox
139− }
140− Label {
141− text: "success"
128+ text: "Auth Failed"
129+ onClicked: loader.item.notifyAuthenticationFailed()
142130 }
143131 }
144132 Row {
tests/qmltests/Greeter/tst_WideView.qml+92−26
@@ -63,7 +63,8 @@ StyledItem {
6363 }
6464
6565 onSelected: {
66− currentIndexField.text = index;
66+ if (index >= 0)
67+ currentIndexField.text = index;
6768 }
6869
6970 QtObject {
@@ -167,20 +168,8 @@ StyledItem {
167168 }
168169 Row {
169170 Button {
170− text: "Authenticated"
171− onClicked: {
172− if (successCheckBox.checked) {
173− loader.item.notifyAuthenticationSucceeded();
174− } else {
175− loader.item.notifyAuthenticationFailed();
176− }
177− }
178− }
179− CheckBox {
180− id: successCheckBox
181− }
182− Label {
183− text: "success"
171+ text: "Auth Failed"
172+ onClicked: loader.item.notifyAuthenticationFailed()
184173 }
185174 }
186175 Row {
@@ -392,7 +381,7 @@ StyledItem {
392381
393382 function test_respondedWithPassword() {
394383 view.locked = true;
395− view.showPrompt("Prompt", true, true);
384+ view.showPrompt("Prompt", true, false);
396385 var passwordInput = findChild(view, "passwordInput");
397386 compare(passwordInput.text, "Prompt");
398387 verify(passwordInput.isSecret);
@@ -454,13 +443,13 @@ StyledItem {
454443 view.showPrompt("Prompt", true, true);
455444 var promptField = findChild(view, "promptField");
456445 tap(promptField);
457− compare(promptField.focus, true);
458− compare(promptField.enabled, true);
446+ verify(promptField.activeFocus);
447+ compare(promptField.opacity, 1);
459448
460449 typeString("password");
461450 keyClick(Qt.Key_Enter);
462− compare(promptField.focus, true);
463− compare(promptField.enabled, false);
451+ verify(promptField.activeFocus);
452+ compare(promptField.opacity, 0); // hidden by fakeLabel
464453
465454 compare(selectedSpy.count, 0);
466455 keyClick(Qt.Key_Escape);
@@ -468,8 +457,8 @@ StyledItem {
468457 compare(selectedSpy.signalArguments[0][0], 1);
469458
470459 view.reset();
471− compare(promptField.focus, false);
472− compare(promptField.enabled, true);
460+ verify(promptField.activeFocus);
461+ compare(promptField.opacity, 1);
473462 }
474463
475464 function test_unicode() {
@@ -489,6 +478,7 @@ StyledItem {
489478 compare(selectedSpy.signalArguments[0][0], 0);
490479 selectedSpy.clear();
491480
481+ view.reset();
492482 view.locked = false;
493483 compare(passwordInput.text, "Log In");
494484 tap(passwordInput);
@@ -518,13 +508,89 @@ StyledItem {
518508 tryCompare(loginList, "height", view.height);
519509 }
520510
521− function test_alphanumeric() {
522− var passwordInput = findChild(view, "passwordInput");
511+ function test_passphrase() {
512+ var promptField = findChild(view, "promptField");
513+ view.showPrompt("", true, true);
523514
524515 verify(view.alphanumeric);
525− verify(passwordInput.isAlphanumeric);
516+ compare(promptField.inputMethodHints & Qt.ImhDigitsOnly, 0);
517+
518+ keyClick(Qt.Key_D);
519+ compare(promptField.text, "d");
520+ }
521+
522+ function test_passcode() {
523+ var promptField = findChild(view, "promptField");
524+ view.showPrompt("", true, true);
525+
526526 view.alphanumeric = false;
527− verify(!passwordInput.isAlphanumeric);
527+ compare(promptField.inputMethodHints & Qt.ImhDigitsOnly, Qt.ImhDigitsOnly);
528+
529+ keyClick(Qt.Key_D);
530+ compare(promptField.text, "");
531+
532+ keyClick(Qt.Key_0);
533+ keyClick(Qt.Key_0);
534+ keyClick(Qt.Key_0);
535+ keyClick(Qt.Key_0);
536+ compare(promptField.text, "0000");
537+
538+ compare(respondedSpy.count, 1);
539+ compare(respondedSpy.signalArguments[0][0], "0000");
540+
541+ compare(promptField.opacity, 0);
542+ }
543+
544+ function test_loginListMovement_data() {
545+ return [
546+ {tag: "up", key: Qt.Key_Up, result: -1},
547+ {tag: "down", key: Qt.Key_Down, result: 1},
548+ ]
549+ }
550+
551+ function test_loginListMovement(data) {
552+ keyClick(data.key);
553+ compare(selectedSpy.count, 1);
554+ compare(selectedSpy.signalArguments[0][0], data.result);
555+ }
556+
557+ function test_focusStaysActive() {
558+ var promptField = findChild(view, "promptField");
559+ var promptButton = findChild(view, "promptButton");
560+
561+ verify(promptButton.activeFocus);
562+ keyClick(Qt.Key_Enter);
563+ compare(selectedSpy.count, 0);
564+ compare(respondedSpy.count, 1);
565+ compare(respondedSpy.signalArguments[0][0], "");
566+ verify(promptButton.activeFocus);
567+ keyClick(Qt.Key_Enter);
568+ compare(respondedSpy.count, 1);
569+
570+ view.showPrompt("", true, true);
571+ verify(promptField.activeFocus);
572+ keyClick(Qt.Key_D);
573+ keyClick(Qt.Key_Enter);
574+ compare(selectedSpy.count, 0);
575+ compare(respondedSpy.count, 2);
576+ compare(respondedSpy.signalArguments[1][0], "d");
577+ verify(promptField.activeFocus);
578+ keyClick(Qt.Key_Enter);
579+ compare(respondedSpy.count, 2);
580+
581+ view.reset();
582+ view.locked = true;
583+ verify(promptButton.activeFocus);
584+ keyClick(Qt.Key_Enter);
585+ compare(respondedSpy.count, 2);
586+ compare(selectedSpy.count, 1);
587+ compare(selectedSpy.signalArguments[0][0], 0);
588+ verify(promptButton.activeFocus);
589+ keyClick(Qt.Key_Enter);
590+ compare(selectedSpy.count, 1);
591+
592+ view.showPrompt("", true, true);
593+ verify(promptField.activeFocus);
528594 }
529595 }
530596}
tests/qmltests/Tutorial/tst_Tutorial.qml+1−1
@@ -296,7 +296,7 @@ Rectangle {
296296 }
297297
298298 function prepareShell() {
299− tryCompare(shell, "enabled", true); // enabled by greeter when ready
299+ tryCompare(shell, "waitingOnGreeter", false); // reset by greeter when ready
300300
301301 WindowStateStorage.clear();
302302 SurfaceManager.inputMethodSurface.setState(Mir.MinimizedState);
tests/qmltests/tst_OrientedShell.qml+2−2
@@ -493,7 +493,7 @@ Rectangle {
493493 }
494494
495495 function cleanup() {
496− tryCompare(shell, "enabled", true); // make sure greeter didn't leave us in disabled state
496+ tryCompare(shell, "waitingOnGreeter", false); // make sure greeter didn't leave us in disabled state
497497 shell = null;
498498 topLevelSurfaceList = null;
499499
@@ -1574,7 +1574,7 @@ Rectangle {
15741574 var stageLoader = findChild(shell, "applicationsDisplayLoader");
15751575 verify(stageLoader);
15761576
1577− tryCompare(shell, "enabled", true); // enabled by greeter when ready
1577+ tryCompare(shell, "waitingOnGreeter", false); // reset by greeter when ready
15781578
15791579 waitUntilShellIsInOrientation(root.physicalOrientation0);
15801580
tests/qmltests/tst_Shell.qml+3−3
@@ -429,7 +429,7 @@ Rectangle {
429429 function cleanup() {
430430 waitForRendering(shell);
431431 mouseEmulation.checked = true;
432− tryCompare(shell, "enabled", true); // make sure greeter didn't leave us in disabled state
432+ tryCompare(shell, "waitingOnGreeter", false); // make sure greeter didn't leave us in disabled state
433433 tearDown();
434434 WindowStateStorage.clear();
435435 }
@@ -439,7 +439,7 @@ Rectangle {
439439 shellLoader.active = true;
440440 tryCompare(shellLoader, "status", Loader.Ready);
441441 removeTimeConstraintsFromSwipeAreas(shellLoader.item);
442− tryCompare(shell, "enabled", true); // enabled by greeter when ready
442+ tryCompare(shell, "waitingOnGreeter", false); // reset by greeter when ready
443443
444444 sessionSpy.target = findChild(shell, "greeter")
445445 dashCommunicatorSpy.target = findInvisibleChild(shell, "dashCommunicator");
@@ -791,7 +791,7 @@ Rectangle {
791791 tryCompare(userlist, "currentIndex", next)
792792 tryCompare(userlist, "movingInternally", false)
793793 }
794− tryCompare(shell, "enabled", true); // wait for PAM to settle
794+ tryCompare(shell, "waitingOnGreeter", false); // wait for PAM to settle
795795 }
796796
797797 function selectUser(name) {
tests/qmltests/tst_ShellWithPin.qml+6−4
@@ -150,7 +150,7 @@ Item {
150150 property Item shell: shellLoader.status === Loader.Ready ? shellLoader.item : null
151151
152152 function init() {
153− tryCompare(shell, "enabled", true); // will be enabled when greeter is all ready
153+ tryCompare(shell, "waitingOnGreeter", false); // will be set when greeter is all ready
154154 var greeter = findChild(shell, "greeter");
155155 sessionSpy.target = greeter;
156156 swipeAwayGreeter(true);
@@ -165,7 +165,7 @@ Item {
165165 }
166166
167167 function cleanup() {
168− tryCompare(shell, "enabled", true); // make sure greeter didn't leave us in disabled state
168+ tryCompare(shell, "waitingOnGreeter", false); // make sure greeter didn't leave us in disabled state
169169
170170 shellLoader.itemDestroyed = false
171171
@@ -533,10 +533,12 @@ Item {
533533
534534 // Confirm that we start disabled
535535 compare(promptSpy.count, 0);
536− verify(!shell.enabled);
536+ verify(shell.waitingOnGreeter);
537+ var coverPageDragHandle = findChild(shell, "coverPageDragHandle");
538+ verify(!coverPageDragHandle.enabled);
537539
538540 // And that we only become enabled once the lockscreen is up
539− tryCompare(shell, "enabled", true);
541+ tryCompare(shell, "waitingOnGreeter", false);
540542 verify(promptSpy.count > 0);
541543 var lockscreen = findChild(shell, "lockscreen");
542544 verify(lockscreen.shown);