on xenial help sign in
merge prereq
47169f1Michael Zanetti
CMakeLists.txt+1
@@ -53,6 +53,7 @@ find_package(Qt5Qml 5.2 REQUIRED)
53find_package(Qt5Quick 5.2 REQUIRED)
53find_package(Qt5Quick 5.2 REQUIRED)
54find_package(Qt5Gui 5.2 REQUIRED)
54find_package(Qt5Gui 5.2 REQUIRED)
55find_package(Qt5DBus 5.2 REQUIRED)
55find_package(Qt5DBus 5.2 REQUIRED)
56+find_package(Qt5Concurrent 5.2 REQUIRED)
56
57
57# Standard install paths
58# Standard install paths
58include(GNUInstallDirs)
59include(GNUInstallDirs)
debian/changelog+32
@@ -1,3 +1,35 @@
1+unity8 (8.01+15.04.20141117-0ubuntu1) vivid; urgency=low
2+
3+ [ josharenson ]
4+ * Return focus to the application after a tusted session overlay is
5+ closing. (LP: #1381292)
6+
7+ [ Josh Arenson ]
8+ * Return focus to the application after a tusted session overlay is
9+ closing. (LP: #1381292)
10+
11+ [ Albert Astals ]
12+ * Remove unused ResponsiveFlowView
13+ * Fix a few cmake warnings when running ./build.sh in a clean checkout
14+
15+ [ Mirco Müller ]
16+ * Make sure non-square icons are not cropped. (LP: #1378417)
17+
18+ [ Michael Terry ]
19+ * Drop the "EARLY ALPHA" scare label when running in testing mode.
20+
21+ [ Michael Zanetti ]
22+ * unify Greeter and Lockscreen wallpaper again
23+ * hide quicklist when launcher hides (LP: #1387088)
24+ * Keep applications suspended while lockscreen is shown (LP: #1378126)
25+ * change spread background color to 111111
26+
27+ [ Omer Akram ]
28+ * show password when tapped on the 'Show password' label, not just the
29+ checkbox. (LP: #1389832)
30+
31+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Mon, 17 Nov 2014 13:48:33 +0000
32+
1unity8 (8.01+15.04.20141107.2-0ubuntu2) vivid; urgency=medium
33unity8 (8.01+15.04.20141107.2-0ubuntu2) vivid; urgency=medium
2
34
3 * No-change rebuild against Qt 5.3.2.
35 * No-change rebuild against Qt 5.3.2.
plugins/Utils/CMakeLists.txt+1−1
@@ -33,6 +33,6 @@ target_link_libraries(Utils-qml ${GIO_LDFLAGS})
33# files directly in targets.
33# files directly in targets.
34set_target_properties(Utils-qml PROPERTIES COMPILE_FLAGS -fvisibility=default)
34set_target_properties(Utils-qml PROPERTIES COMPILE_FLAGS -fvisibility=default)
35
35
36−qt5_use_modules(Utils-qml Qml Quick DBus Network XmlPatterns Gui Concurrent)
36+qt5_use_modules(Utils-qml Qml Quick DBus Network Gui)
37
37
38add_unity8_plugin(Utils 0.1 Utils TARGETS Utils-qml)
38add_unity8_plugin(Utils 0.1 Utils TARGETS Utils-qml)
po/ja.po+33−34
@@ -8,15 +8,15 @@ msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2014-11-07 10:59+0100\n"
10"POT-Creation-Date: 2014-11-07 10:59+0100\n"
11−"PO-Revision-Date: 2014-09-18 09:47+0000\n"
11+"PO-Revision-Date: 2014-11-20 05:08+0000\n"
12−"Last-Translator: Mitsuya Shibata <mty.shibata@gmail.com>\n"
12+"Last-Translator: Kentaro Kazuhama <Unknown>\n"
13"Language-Team: Japanese <ja@li.org>\n"
13"Language-Team: Japanese <ja@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-11-20 06:27+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17252)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
@@ -33,22 +33,21 @@ msgstr "ショートカットを削除する"
33
33
34#: qml/Components/DelayedLockscreen.qml:47
34#: qml/Components/DelayedLockscreen.qml:47
35msgid "Device Locked"
35msgid "Device Locked"
36−msgstr ""
36+msgstr "デバイスをロックしました"
37
37
38#: qml/Components/DelayedLockscreen.qml:62
38#: qml/Components/DelayedLockscreen.qml:62
39msgid "You have been locked out due to too many failed passphrase attempts."
39msgid "You have been locked out due to too many failed passphrase attempts."
40−msgstr ""
40+msgstr "パスフレーズの入力失敗が多すぎたため、デバイスをロックしました。"
41
41
42#: qml/Components/DelayedLockscreen.qml:63
42#: qml/Components/DelayedLockscreen.qml:63
43msgid "You have been locked out due to too many failed passcode attempts."
43msgid "You have been locked out due to too many failed passcode attempts."
44−msgstr ""
44+msgstr "パスコードの入力失敗が多すぎたため、デバイスをロックしました。"
45
45
46#: qml/Components/DelayedLockscreen.qml:72
46#: qml/Components/DelayedLockscreen.qml:72
47#, qt-format
47#, qt-format
48msgid "Please wait %1 minute and then try again…"
48msgid "Please wait %1 minute and then try again…"
49msgid_plural "Please wait %1 minutes and then try again…"
49msgid_plural "Please wait %1 minutes and then try again…"
50−msgstr[0] ""
50+msgstr[0] "%1 分待ってからやり直してください…"
51−msgstr[1] ""
52
51
53#: qml/Components/Dialogs.qml:74
52#: qml/Components/Dialogs.qml:74
54msgid "Log out"
53msgid "Log out"
@@ -212,15 +211,15 @@ msgstr "送信"
212
211
213#: qml/Dash/PullToRefreshScopeStyle.qml:55
212#: qml/Dash/PullToRefreshScopeStyle.qml:55
214msgid "Pull to refresh…"
213msgid "Pull to refresh…"
215−msgstr ""
214+msgstr "引いて更新…"
216
215
217#: qml/Dash/PullToRefreshScopeStyle.qml:60
216#: qml/Dash/PullToRefreshScopeStyle.qml:60
218msgid "Release to refresh…"
217msgid "Release to refresh…"
219−msgstr ""
218+msgstr "指を離して更新…"
220
219
221#: qml/Dash/ScopesOverview.qml:215
220#: qml/Dash/ScopesOverview.qml:215
222msgid "Manage Scopes"
221msgid "Manage Scopes"
223−msgstr ""
222+msgstr "Scopeの管理"
224
223
225#: qml/Dash/ScopesOverview.qml:437
224#: qml/Dash/ScopesOverview.qml:437
226msgid "Done"
225msgid "Done"
@@ -254,31 +253,31 @@ msgstr "タップすると通話に戻ります..."
254msgid "Conference"
253msgid "Conference"
255msgstr "グループ通話"
254msgstr "グループ通話"
256
255
257−#: qml/Panel/Indicators/MenuItemFactory.qml:643
256+#: qml/Panel/Indicators/MenuItemFactory.qml:615
258msgid "Nothing is playing"
257msgid "Nothing is playing"
259msgstr ""
258msgstr ""
260
259
261−#: qml/Panel/Indicators/MenuItemFactory.qml:791
260+#: qml/Panel/Indicators/MenuItemFactory.qml:763
262msgid "In queue…"
261msgid "In queue…"
263msgstr "開始待ち..."
262msgstr "開始待ち..."
264
263
265−#: qml/Panel/Indicators/MenuItemFactory.qml:795
264+#: qml/Panel/Indicators/MenuItemFactory.qml:767
266msgid "Downloading"
265msgid "Downloading"
267msgstr "ダウンロード中"
266msgstr "ダウンロード中"
268
267
269−#: qml/Panel/Indicators/MenuItemFactory.qml:797
268+#: qml/Panel/Indicators/MenuItemFactory.qml:769
270msgid "Paused, tap to resume"
269msgid "Paused, tap to resume"
271msgstr "停止中、再開するにはタップしてください"
270msgstr "停止中、再開するにはタップしてください"
272
271
273−#: qml/Panel/Indicators/MenuItemFactory.qml:799
272+#: qml/Panel/Indicators/MenuItemFactory.qml:771
274msgid "Canceled"
273msgid "Canceled"
275msgstr "中止しました"
274msgstr "中止しました"
276
275
277−#: qml/Panel/Indicators/MenuItemFactory.qml:801
276+#: qml/Panel/Indicators/MenuItemFactory.qml:773
278msgid "Finished"
277msgid "Finished"
279msgstr "完了しました"
278msgstr "完了しました"
280
279
281−#: qml/Panel/Indicators/MenuItemFactory.qml:803
280+#: qml/Panel/Indicators/MenuItemFactory.qml:775
282msgid "Failed, tap to retry"
281msgid "Failed, tap to retry"
283msgstr "失敗しました、再試行するにはタップしてください"
282msgstr "失敗しました、再試行するにはタップしてください"
284
283
@@ -290,55 +289,55 @@ msgstr "SIMのアンロック"
290msgid "Roaming"
289msgid "Roaming"
291msgstr "ローミング"
290msgstr "ローミング"
292
291
293−#: qml/Shell.qml:391
292+#: qml/Shell.qml:381
294msgid "Enter passphrase"
293msgid "Enter passphrase"
295msgstr "パスフレーズを入力"
294msgstr "パスフレーズを入力"
296
295
297−#: qml/Shell.qml:392
296+#: qml/Shell.qml:382
298msgid "Sorry, incorrect passphrase"
297msgid "Sorry, incorrect passphrase"
299msgstr "パスフレーズが違います"
298msgstr "パスフレーズが違います"
300
299
301−#: qml/Shell.qml:393
300+#: qml/Shell.qml:383
302msgid "Please re-enter"
301msgid "Please re-enter"
303−msgstr ""
302+msgstr "再入力してください"
304
303
305−#: qml/Shell.qml:395
304+#: qml/Shell.qml:385
306msgid "Enter passcode"
305msgid "Enter passcode"
307−msgstr ""
306+msgstr "パスコードを入力"
308
307
309−#: qml/Shell.qml:396
308+#: qml/Shell.qml:386
310msgid "Sorry, incorrect passcode"
309msgid "Sorry, incorrect passcode"
311msgstr "パスコードが違います"
310msgstr "パスコードが違います"
312
311
313−#: qml/Shell.qml:399
312+#: qml/Shell.qml:389
314#, qt-format
313#, qt-format
315msgid "Enter %1"
314msgid "Enter %1"
316−msgstr ""
315+msgstr "%1 を入力"
317
316
318−#: qml/Shell.qml:400
317+#: qml/Shell.qml:390
319#, qt-format
318#, qt-format
320msgid "Sorry, incorrect %1"
319msgid "Sorry, incorrect %1"
321msgstr "%1が違います"
320msgstr "%1が違います"
322
321
323−#: qml/Shell.qml:441
322+#: qml/Shell.qml:431
324msgid "Sorry, incorrect passphrase."
323msgid "Sorry, incorrect passphrase."
325msgstr "パスフレーズが間違っています。"
324msgstr "パスフレーズが間違っています。"
326
325
327−#: qml/Shell.qml:442
326+#: qml/Shell.qml:432
328msgid "Sorry, incorrect passcode."
327msgid "Sorry, incorrect passcode."
329msgstr "パスコードが間違っています。"
328msgstr "パスコードが間違っています。"
330
329
331−#: qml/Shell.qml:443
330+#: qml/Shell.qml:433
332msgid "This will be your last attempt."
331msgid "This will be your last attempt."
333msgstr "これが最後のチャンスです。"
332msgstr "これが最後のチャンスです。"
334
333
335−#: qml/Shell.qml:445
334+#: qml/Shell.qml:435
336msgid ""
335msgid ""
337"If passphrase is entered incorrectly, your phone will conduct a factory "
336"If passphrase is entered incorrectly, your phone will conduct a factory "
338"reset and all personal data will be deleted."
337"reset and all personal data will be deleted."
339msgstr "パスフレーズが間違っている場合、ファクトリーリセットを実施し、すべての個人データは削除されます。"
338msgstr "パスフレーズが間違っている場合、ファクトリーリセットを実施し、すべての個人データは削除されます。"
340
339
341−#: qml/Shell.qml:446
340+#: qml/Shell.qml:436
342msgid ""
341msgid ""
343"If passcode is entered incorrectly, your phone will conduct a factory reset "
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
344"and all personal data will be deleted."
343"and all personal data will be deleted."
po/ro.po+23−23
@@ -8,7 +8,7 @@ msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2014-11-07 10:59+0100\n"
10"POT-Creation-Date: 2014-11-07 10:59+0100\n"
11−"PO-Revision-Date: 2014-10-07 15:54+0000\n"
11+"PO-Revision-Date: 2014-11-18 12:09+0000\n"
12"Last-Translator: Marian Vasile <marianvasile1972@gmail.com>\n"
12"Last-Translator: Marian Vasile <marianvasile1972@gmail.com>\n"
13"Language-Team: Romanian <ro@li.org>\n"
13"Language-Team: Romanian <ro@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
17"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
18"== 0) && (n != 0))) ? 2: 1));\n"
18"== 0) && (n != 0))) ? 2: 1));\n"
19−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
19+"X-Launchpad-Export-Date: 2014-11-19 06:24+0000\n"
20−"X-Generator: Launchpad (build 17231)\n"
20+"X-Generator: Launchpad (build 17252)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:130
22#: plugins/LightDM/Greeter.cpp:130
23msgid "Password: "
23msgid "Password: "
@@ -166,7 +166,7 @@ msgstr ""
166
166
167#: qml/Components/Lockscreen.qml:223
167#: qml/Components/Lockscreen.qml:223
168msgid "Return to Call"
168msgid "Return to Call"
169−msgstr ""
169+msgstr "Reveniți la funcția de apelare"
170
170
171#: qml/Components/Lockscreen.qml:223
171#: qml/Components/Lockscreen.qml:223
172msgid "Emergency Call"
172msgid "Emergency Call"
@@ -265,31 +265,31 @@ msgstr "Atingeți pentru a vă întoarce la convorbire..."
265msgid "Conference"
265msgid "Conference"
266msgstr "Conferință"
266msgstr "Conferință"
267
267
268−#: qml/Panel/Indicators/MenuItemFactory.qml:643
268+#: qml/Panel/Indicators/MenuItemFactory.qml:615
269msgid "Nothing is playing"
269msgid "Nothing is playing"
270msgstr "Nu se redă nimic"
270msgstr "Nu se redă nimic"
271
271
272−#: qml/Panel/Indicators/MenuItemFactory.qml:791
272+#: qml/Panel/Indicators/MenuItemFactory.qml:763
273msgid "In queue…"
273msgid "In queue…"
274msgstr "În așteptare..."
274msgstr "În așteptare..."
275
275
276−#: qml/Panel/Indicators/MenuItemFactory.qml:795
276+#: qml/Panel/Indicators/MenuItemFactory.qml:767
277msgid "Downloading"
277msgid "Downloading"
278msgstr "Se descarcă"
278msgstr "Se descarcă"
279
279
280−#: qml/Panel/Indicators/MenuItemFactory.qml:797
280+#: qml/Panel/Indicators/MenuItemFactory.qml:769
281msgid "Paused, tap to resume"
281msgid "Paused, tap to resume"
282msgstr "În pauză, atingeți pentru a relua"
282msgstr "În pauză, atingeți pentru a relua"
283
283
284−#: qml/Panel/Indicators/MenuItemFactory.qml:799
284+#: qml/Panel/Indicators/MenuItemFactory.qml:771
285msgid "Canceled"
285msgid "Canceled"
286msgstr "Anulată"
286msgstr "Anulată"
287
287
288−#: qml/Panel/Indicators/MenuItemFactory.qml:801
288+#: qml/Panel/Indicators/MenuItemFactory.qml:773
289msgid "Finished"
289msgid "Finished"
290msgstr "Finalizată"
290msgstr "Finalizată"
291
291
292−#: qml/Panel/Indicators/MenuItemFactory.qml:803
292+#: qml/Panel/Indicators/MenuItemFactory.qml:775
293msgid "Failed, tap to retry"
293msgid "Failed, tap to retry"
294msgstr "Eșec, atingeți pentru a încerca din nou"
294msgstr "Eșec, atingeți pentru a încerca din nou"
295
295
@@ -301,49 +301,49 @@ msgstr "Deblocare SIM"
301msgid "Roaming"
301msgid "Roaming"
302msgstr "Roaming"
302msgstr "Roaming"
303
303
304−#: qml/Shell.qml:391
304+#: qml/Shell.qml:381
305msgid "Enter passphrase"
305msgid "Enter passphrase"
306msgstr "Introduceți fraza parolă"
306msgstr "Introduceți fraza parolă"
307
307
308−#: qml/Shell.qml:392
308+#: qml/Shell.qml:382
309msgid "Sorry, incorrect passphrase"
309msgid "Sorry, incorrect passphrase"
310msgstr "Frază secretă incorectă"
310msgstr "Frază secretă incorectă"
311
311
312−#: qml/Shell.qml:393
312+#: qml/Shell.qml:383
313msgid "Please re-enter"
313msgid "Please re-enter"
314msgstr "Introduceți din nou"
314msgstr "Introduceți din nou"
315
315
316−#: qml/Shell.qml:395
316+#: qml/Shell.qml:385
317msgid "Enter passcode"
317msgid "Enter passcode"
318msgstr "Introduceți parola"
318msgstr "Introduceți parola"
319
319
320−#: qml/Shell.qml:396
320+#: qml/Shell.qml:386
321msgid "Sorry, incorrect passcode"
321msgid "Sorry, incorrect passcode"
322msgstr "Parolă incorectă"
322msgstr "Parolă incorectă"
323
323
324−#: qml/Shell.qml:399
324+#: qml/Shell.qml:389
325#, qt-format
325#, qt-format
326msgid "Enter %1"
326msgid "Enter %1"
327msgstr "Introducere %1"
327msgstr "Introducere %1"
328
328
329−#: qml/Shell.qml:400
329+#: qml/Shell.qml:390
330#, qt-format
330#, qt-format
331msgid "Sorry, incorrect %1"
331msgid "Sorry, incorrect %1"
332msgstr "%1 incorectă"
332msgstr "%1 incorectă"
333
333
334−#: qml/Shell.qml:441
334+#: qml/Shell.qml:431
335msgid "Sorry, incorrect passphrase."
335msgid "Sorry, incorrect passphrase."
336msgstr "Frază parolă greșită"
336msgstr "Frază parolă greșită"
337
337
338−#: qml/Shell.qml:442
338+#: qml/Shell.qml:432
339msgid "Sorry, incorrect passcode."
339msgid "Sorry, incorrect passcode."
340msgstr "Parolă greșită"
340msgstr "Parolă greșită"
341
341
342−#: qml/Shell.qml:443
342+#: qml/Shell.qml:433
343msgid "This will be your last attempt."
343msgid "This will be your last attempt."
344msgstr "Aceasta va fi ultima încercare"
344msgstr "Aceasta va fi ultima încercare"
345
345
346−#: qml/Shell.qml:445
346+#: qml/Shell.qml:435
347msgid ""
347msgid ""
348"If passphrase is entered incorrectly, your phone will conduct a factory "
348"If passphrase is entered incorrectly, your phone will conduct a factory "
349"reset and all personal data will be deleted."
349"reset and all personal data will be deleted."
@@ -352,7 +352,7 @@ msgstr ""
352"configurările inițiale, ale fabricantului, iar toate datele personale vor fi "
352"configurările inițiale, ale fabricantului, iar toate datele personale vor fi "
353"șterse."
353"șterse."
354
354
355−#: qml/Shell.qml:446
355+#: qml/Shell.qml:436
356msgid ""
356msgid ""
357"If passcode is entered incorrectly, your phone will conduct a factory reset "
357"If passcode is entered incorrectly, your phone will conduct a factory reset "
358"and all personal data will be deleted."
358"and all personal data will be deleted."
po/zh_TW.po+26−26
@@ -8,15 +8,15 @@ msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2014-11-07 10:59+0100\n"
10"POT-Creation-Date: 2014-11-07 10:59+0100\n"
11−"PO-Revision-Date: 2014-10-16 14:55+0000\n"
11+"PO-Revision-Date: 2014-11-19 15:05+0000\n"
12−"Last-Translator: Po-Hsu Lin <po-hsu.lin@canonical.com>\n"
12+"Last-Translator: Walter Cheuk <wwycheuk@gmail.com>\n"
13"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
13"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-11-20 06:27+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17252)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
@@ -37,11 +37,11 @@ msgstr "裝置已鎖定"
37
37
38#: qml/Components/DelayedLockscreen.qml:62
38#: qml/Components/DelayedLockscreen.qml:62
39msgid "You have been locked out due to too many failed passphrase attempts."
39msgid "You have been locked out due to too many failed passphrase attempts."
40−msgstr ""
40+msgstr "因為嘗試輸入太多次錯誤的密碼,裝置已經被鎖定。"
41
41
42#: qml/Components/DelayedLockscreen.qml:63
42#: qml/Components/DelayedLockscreen.qml:63
43msgid "You have been locked out due to too many failed passcode attempts."
43msgid "You have been locked out due to too many failed passcode attempts."
44−msgstr ""
44+msgstr "因為嘗試輸入太多次錯誤的密碼,裝置已經被鎖定。"
45
45
46#: qml/Components/DelayedLockscreen.qml:72
46#: qml/Components/DelayedLockscreen.qml:72
47#, qt-format
47#, qt-format
@@ -252,31 +252,31 @@ msgstr "輕觸可返回通話…"
252msgid "Conference"
252msgid "Conference"
253msgstr "會議"
253msgstr "會議"
254
254
255−#: qml/Panel/Indicators/MenuItemFactory.qml:643
255+#: qml/Panel/Indicators/MenuItemFactory.qml:615
256msgid "Nothing is playing"
256msgid "Nothing is playing"
257−msgstr ""
257+msgstr "無影音播放中"
258
258
259−#: qml/Panel/Indicators/MenuItemFactory.qml:791
259+#: qml/Panel/Indicators/MenuItemFactory.qml:763
260msgid "In queue…"
260msgid "In queue…"
261msgstr "佇列中…"
261msgstr "佇列中…"
262
262
263−#: qml/Panel/Indicators/MenuItemFactory.qml:795
263+#: qml/Panel/Indicators/MenuItemFactory.qml:767
264msgid "Downloading"
264msgid "Downloading"
265msgstr "下載中"
265msgstr "下載中"
266
266
267−#: qml/Panel/Indicators/MenuItemFactory.qml:797
267+#: qml/Panel/Indicators/MenuItemFactory.qml:769
268msgid "Paused, tap to resume"
268msgid "Paused, tap to resume"
269msgstr "已暫停,輕觸可繼續"
269msgstr "已暫停,輕觸可繼續"
270
270
271−#: qml/Panel/Indicators/MenuItemFactory.qml:799
271+#: qml/Panel/Indicators/MenuItemFactory.qml:771
272msgid "Canceled"
272msgid "Canceled"
273msgstr "已取消"
273msgstr "已取消"
274
274
275−#: qml/Panel/Indicators/MenuItemFactory.qml:801
275+#: qml/Panel/Indicators/MenuItemFactory.qml:773
276msgid "Finished"
276msgid "Finished"
277msgstr "已完成"
277msgstr "已完成"
278
278
279−#: qml/Panel/Indicators/MenuItemFactory.qml:803
279+#: qml/Panel/Indicators/MenuItemFactory.qml:775
280msgid "Failed, tap to retry"
280msgid "Failed, tap to retry"
281msgstr "失敗,輕觸可重試"
281msgstr "失敗,輕觸可重試"
282
282
@@ -288,55 +288,55 @@ msgstr "為 SIM 卡解鎖"
288msgid "Roaming"
288msgid "Roaming"
289msgstr "漫遊"
289msgstr "漫遊"
290
290
291−#: qml/Shell.qml:391
291+#: qml/Shell.qml:381
292msgid "Enter passphrase"
292msgid "Enter passphrase"
293msgstr "輸入密語"
293msgstr "輸入密語"
294
294
295−#: qml/Shell.qml:392
295+#: qml/Shell.qml:382
296msgid "Sorry, incorrect passphrase"
296msgid "Sorry, incorrect passphrase"
297msgstr "抱歉,密語不對"
297msgstr "抱歉,密語不對"
298
298
299−#: qml/Shell.qml:393
299+#: qml/Shell.qml:383
300msgid "Please re-enter"
300msgid "Please re-enter"
301msgstr "請再輸入"
301msgstr "請再輸入"
302
302
303−#: qml/Shell.qml:395
303+#: qml/Shell.qml:385
304msgid "Enter passcode"
304msgid "Enter passcode"
305msgstr "輸入 passcode"
305msgstr "輸入 passcode"
306
306
307−#: qml/Shell.qml:396
307+#: qml/Shell.qml:386
308msgid "Sorry, incorrect passcode"
308msgid "Sorry, incorrect passcode"
309msgstr "抱歉,passcode 不對"
309msgstr "抱歉,passcode 不對"
310
310
311−#: qml/Shell.qml:399
311+#: qml/Shell.qml:389
312#, qt-format
312#, qt-format
313msgid "Enter %1"
313msgid "Enter %1"
314msgstr "輸入 %1"
314msgstr "輸入 %1"
315
315
316−#: qml/Shell.qml:400
316+#: qml/Shell.qml:390
317#, qt-format
317#, qt-format
318msgid "Sorry, incorrect %1"
318msgid "Sorry, incorrect %1"
319msgstr "抱歉,%1不對"
319msgstr "抱歉,%1不對"
320
320
321−#: qml/Shell.qml:441
321+#: qml/Shell.qml:431
322msgid "Sorry, incorrect passphrase."
322msgid "Sorry, incorrect passphrase."
323msgstr "抱歉,密語不對"
323msgstr "抱歉,密語不對"
324
324
325−#: qml/Shell.qml:442
325+#: qml/Shell.qml:432
326msgid "Sorry, incorrect passcode."
326msgid "Sorry, incorrect passcode."
327msgstr "抱歉,passcode 不對。"
327msgstr "抱歉,passcode 不對。"
328
328
329−#: qml/Shell.qml:443
329+#: qml/Shell.qml:433
330msgid "This will be your last attempt."
330msgid "This will be your last attempt."
331msgstr "這將會是您最後一次嘗試的機會。"
331msgstr "這將會是您最後一次嘗試的機會。"
332
332
333−#: qml/Shell.qml:445
333+#: qml/Shell.qml:435
334msgid ""
334msgid ""
335"If passphrase is entered incorrectly, your phone will conduct a factory "
335"If passphrase is entered incorrectly, your phone will conduct a factory "
336"reset and all personal data will be deleted."
336"reset and all personal data will be deleted."
337msgstr "如輸入的密語不對,本電話會進行重設,所有個人資料都會刪除。"
337msgstr "如輸入的密語不對,本電話會進行重設,所有個人資料都會刪除。"
338
338
339−#: qml/Shell.qml:446
339+#: qml/Shell.qml:436
340msgid ""
340msgid ""
341"If passcode is entered incorrectly, your phone will conduct a factory reset "
341"If passcode is entered incorrectly, your phone will conduct a factory reset "
342"and all personal data will be deleted."
342"and all personal data will be deleted."
qml/Components/Lockscreen.qml+15
@@ -56,6 +56,9 @@ Showable {
56 property int maxPinLength: -1
56 property int maxPinLength: -1
57
57
58 property url background: ""
58 property url background: ""
59+ // Use this to put a black overlay above the background
60+ // 0: normal background, 1: black background
61+ property real darkenBackground: 0
59
62
60 readonly property string passphrase: (pinPadLoader.item && pinPadLoader.item.passphrase) ? pinPadLoader.item.passphrase : ""
63 readonly property string passphrase: (pinPadLoader.item && pinPadLoader.item.passphrase) ? pinPadLoader.item.passphrase : ""
61
64
@@ -100,10 +103,22 @@ Showable {
100 anchors {
103 anchors {
101 fill: parent
104 fill: parent
102 }
105 }
106+ // Limit how much memory we'll reserve for this image
107+ sourceSize.height: height
108+ sourceSize.width: width
103 source: root.required ? root.background : ""
109 source: root.required ? root.background : ""
104 fillMode: Image.PreserveAspectCrop
110 fillMode: Image.PreserveAspectCrop
105 }
111 }
106
112
113+ // This is to
114+ // a) align it with the greeter and
115+ // b) keep the white fonts readable on bright backgrounds
116+ Rectangle {
117+ anchors.fill: parent
118+ color: "black"
119+ opacity: root.darkenBackground
120+ }
121+
107 MouseArea {
122 MouseArea {
108 anchors.fill: root
123 anchors.fill: root
109 onClicked: {
124 onClicked: {
qml/Components/ResponsiveFlowView.qmldeleted−74
@@ -1,74 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−
20−Item {
21− id: root
22−
23− property int minimumHorizontalSpacing: units.gu(0.5)
24− // property int minimumNumberOfColumns: 2 // FIXME: not implemented
25− property int maximumNumberOfColumns: 6
26− readonly property int columns: flow.columns
27− property alias verticalSpacing: flow.verticalSpacing
28− property alias horizontalSpacing: flow.horizontalSpacing
29− property int referenceDelegateWidth
30− property alias model: repeater.model
31− property alias delegate: repeater.delegate
32− readonly property int cellWidth: referenceDelegateWidth + horizontalSpacing
33− readonly property int cellHeight: referenceDelegateWidth + verticalSpacing
34− property alias move: flow.move
35−
36− height: flow.height + flow.anchors.topMargin
37−
38− Flow {
39− id: flow
40− anchors {
41− left: parent.left
42− right: parent.right
43− top: parent.top
44− leftMargin: margin/2
45− rightMargin: margin/2
46− topMargin: verticalSpacing
47− }
48−
49− function pixelToGU(value) {
50− return Math.floor(value / units.gu(1));
51− }
52−
53− function spacingForColumns(columns) {
54− // spacing between columns as an integer number of GU, the remainder goes in the margins
55− var spacingGU = pixelToGU(allocatableVerticalSpace / columns);
56− return units.gu(spacingGU);
57− }
58−
59− function columnsForSpacing(space) {
60− // minimum margin is half of the spacing
61− return Math.floor((parent.width - space/2) / (referenceDelegateWidth + space));
62− }
63−
64− property real allocatableVerticalSpace: parent.width - columns * referenceDelegateWidth
65− property int columns: Math.min(columnsForSpacing(minimumHorizontalSpacing), maximumNumberOfColumns)
66− property real horizontalSpacing: spacingForColumns(columns)
67− property real verticalSpacing: horizontalSpacing
68− property int margin: allocatableVerticalSpace - columns * horizontalSpacing
69−
70− Repeater {
71− id: repeater
72− }
73− }
74−}
qml/Greeter/Greeter.qml+1−1
@@ -25,7 +25,7 @@ Showable {
25 enabled: shown
25 enabled: shown
26 created: greeterContentLoader.status == Loader.Ready && greeterContentLoader.item.ready
26 created: greeterContentLoader.status == Loader.Ready && greeterContentLoader.item.ready
27
27
28− property url defaultBackground
28+ property url background
29 property bool loadContent: required
29 property bool loadContent: required
30
30
31 // 1 when fully shown and 0 when fully hidden
31 // 1 when fully shown and 0 when fully hidden
qml/Greeter/GreeterContent.qml+1−18
@@ -48,9 +48,6 @@ Item {
48 color: "black"
48 color: "black"
49 }
49 }
50
50
51− property url backgroundValue: AccountsService.backgroundFile != undefined && AccountsService.backgroundFile.length > 0 ? AccountsService.backgroundFile : greeter.defaultBackground
52− onBackgroundValueChanged: background.source = backgroundValue
53−
54 CrossFadeImage {
51 CrossFadeImage {
55 id: background
52 id: background
56 objectName: "greeterBackground"
53 objectName: "greeterBackground"
@@ -62,21 +59,7 @@ Item {
62 // Limit how much memory we'll reserve for this image
59 // Limit how much memory we'll reserve for this image
63 sourceSize.height: height
60 sourceSize.height: height
64 sourceSize.width: width
61 sourceSize.width: width
65− }
62+ source: greeter.background
66−
67− // See Shell.qml's backgroundSettings treatment for why we need a separate
68− // Image, but it boils down to avoiding binding loop detection.
69− Image {
70− source: background.source
71− height: 0
72− width: 0
73− sourceSize.height: 0
74− sourceSize.width: 0
75− onStatusChanged: {
76− if (status == Image.Error && source != greeter.defaultBackground) {
77− background.source = greeter.defaultBackground
78− }
79− }
80 }
63 }
81
64
82 Rectangle {
65 Rectangle {
qml/Launcher/LauncherPanel.qml+6
@@ -38,6 +38,12 @@ Rectangle {
38 signal applicationSelected(string appId)
38 signal applicationSelected(string appId)
39 signal showDashHome()
39 signal showDashHome()
40
40
41+ onXChanged: {
42+ if (quickList.state == "open") {
43+ quickList.state = ""
44+ }
45+ }
46+
41 Column {
47 Column {
42 id: mainColumn
48 id: mainColumn
43 anchors {
49 anchors {
qml/Notifications/NotificationMenuItemFactory.qml+6
@@ -127,6 +127,11 @@ Loader {
127 anchors.verticalCenter: checkBox.verticalCenter
127 anchors.verticalCenter: checkBox.verticalCenter
128 text: i18n.tr("Show password")
128 text: i18n.tr("Show password")
129 color: notification.sdFontColor
129 color: notification.sdFontColor
130+
131+ MouseArea {
132+ anchors.fill: parent
133+ onClicked: { checkBox.checked = !checkBox.checked }
134+ }
130 }
135 }
131 }
136 }
132 }
137 }
@@ -145,6 +150,7 @@ Loader {
145 errorText: errorAction.valid ? errorAction.state : ""
150 errorText: errorAction.valid ? errorAction.state : ""
146 retryText: notification.body
151 retryText: notification.body
147 background: shell.background
152 background: shell.background
153+ darkenBackground: 0.4
148
154
149 onEntered: {
155 onEntered: {
150 menuModel.changeState(menuIndex, passphrase);
156 menuModel.changeState(menuIndex, passphrase);
qml/Notifications/ShapedIcon.qml+1−1
@@ -35,6 +35,6 @@ Item {
35 anchors.fill: parent
35 anchors.fill: parent
36 visible: !shaped
36 visible: !shaped
37 source: fileSource
37 source: fileSource
38− fillMode: Image.PreserveAspectCrop
38+ fillMode: Image.PreserveAspectFit
39 }
39 }
40}
40}
qml/Shell.qml+31−29
@@ -51,7 +51,8 @@ Item {
51
51
52 property real edgeSize: units.gu(2)
52 property real edgeSize: units.gu(2)
53 property url defaultBackground: Qt.resolvedUrl(shell.width >= units.gu(60) ? "graphics/tablet_background.jpg" : "graphics/phone_background.jpg")
53 property url defaultBackground: Qt.resolvedUrl(shell.width >= units.gu(60) ? "graphics/tablet_background.jpg" : "graphics/phone_background.jpg")
54− property url background
54+ property url background: asImageTester.status == Image.Ready ? asImageTester.source
55+ : gsImageTester.status == Image.Ready ? gsImageTester.source : defaultBackground
55 readonly property real panelHeight: panel.panelHeight
56 readonly property real panelHeight: panel.panelHeight
56
57
57 readonly property bool locked: LightDM.Greeter.active && !LightDM.Greeter.authenticated && !forcedUnlock
58 readonly property bool locked: LightDM.Greeter.active && !LightDM.Greeter.authenticated && !forcedUnlock
@@ -98,6 +99,31 @@ Item {
98 shell.activateApplication(app);
99 shell.activateApplication(app);
99 }
100 }
100
101
102+ // This is a dummy image to detect if the custom AS set wallpaper loads successfully.
103+ Image {
104+ id: asImageTester
105+ source: AccountsService.backgroundFile != undefined && AccountsService.backgroundFile.length > 0 ? AccountsService.backgroundFile : ""
106+ height: 0
107+ width: 0
108+ sourceSize.height: 0
109+ sourceSize.width: 0
110+ }
111+
112+ GSettings {
113+ id: backgroundSettings
114+ schema.id: "org.gnome.desktop.background"
115+ }
116+
117+ // This is a dummy image to detect if the custom GSettings set wallpaper loads successfully.
118+ Image {
119+ id: gsImageTester
120+ source: backgroundSettings.pictureUri != undefined && backgroundSettings.pictureUri.length > 0 ? backgroundSettings.pictureUri : ""
121+ height: 0
122+ width: 0
123+ sourceSize.height: 0
124+ sourceSize.width: 0
125+ }
126+
101 Binding {
127 Binding {
102 target: LauncherModel
128 target: LauncherModel
103 property: "applicationManager"
129 property: "applicationManager"
@@ -114,15 +140,6 @@ Item {
114 }
140 }
115 }
141 }
116
142
117− GSettings {
118− id: backgroundSettings
119− schema.id: "org.gnome.desktop.background"
120− }
121− property url gSettingsPicture: backgroundSettings.pictureUri != undefined && backgroundSettings.pictureUri.length > 0 ? backgroundSettings.pictureUri : shell.defaultBackground
122− onGSettingsPictureChanged: {
123− shell.background = gSettingsPicture
124− }
125−
126 VolumeControl {
143 VolumeControl {
127 id: volumeControl
144 id: volumeControl
128 }
145 }
@@ -328,6 +345,7 @@ Item {
328 width: parent.width
345 width: parent.width
329 height: parent.height - panel.panelHeight
346 height: parent.height - panel.panelHeight
330 background: shell.background
347 background: shell.background
348+ darkenBackground: 0.4
331 alphaNumeric: AccountsService.passwordDisplayHint === AccountsService.Keyboard
349 alphaNumeric: AccountsService.passwordDisplayHint === AccountsService.Keyboard
332 minPinLength: 4
350 minPinLength: 4
333 maxPinLength: 4
351 maxPinLength: 4
@@ -523,7 +541,7 @@ Item {
523
541
524 locked: shell.locked
542 locked: shell.locked
525
543
526− defaultBackground: shell.background
544+ background: shell.background
527
545
528 width: parent.width
546 width: parent.width
529 height: parent.height
547 height: parent.height
@@ -587,7 +605,7 @@ Item {
587 Binding {
605 Binding {
588 target: ApplicationManager
606 target: ApplicationManager
589 property: "suspended"
607 property: "suspended"
590− value: greeter.shown && greeterWrapper.showProgress == 1
608+ value: (greeter.shown && greeterWrapper.showProgress == 1) || lockscreen.shown
591 }
609 }
592 }
610 }
593 }
611 }
@@ -776,26 +794,10 @@ Item {
776 }
794 }
777 }
795 }
778
796
779− Label {
780− id: alphaDisclaimerLabel
781− anchors.centerIn: parent
782− visible: ApplicationManager.fake ? ApplicationManager.fake : false
783− z: dialogs.z + 10
784− text: "EARLY ALPHA\nNOT READY FOR USE"
785− color: "lightgrey"
786− opacity: 0.2
787− font.weight: Font.Black
788− horizontalAlignment: Text.AlignHCenter
789− verticalAlignment: Text.AlignVCenter
790− fontSizeMode: Text.Fit
791− rotation: -45
792− scale: Math.min(parent.width, parent.height) / width
793− }
794−
795 EdgeDemo {
797 EdgeDemo {
796 id: edgeDemo
798 id: edgeDemo
797 objectName: "edgeDemo"
799 objectName: "edgeDemo"
798− z: alphaDisclaimerLabel.z + 10
800+ z: dialogs.z + 10
799 paused: Powerd.status === Powerd.Off // Saves power
801 paused: Powerd.status === Powerd.Off // Saves power
800 greeter: greeter
802 greeter: greeter
801 launcher: launcher
803 launcher: launcher
qml/Stages/PhoneStage.qml+1−1
@@ -33,7 +33,7 @@ Rectangle {
33 property real inverseProgress: 0 // This is the progress for left edge drags, in pixels.
33 property real inverseProgress: 0 // This is the progress for left edge drags, in pixels.
34 property int orientation: Qt.PortraitOrientation
34 property int orientation: Qt.PortraitOrientation
35
35
36− color: "black"
36+ color: "#111111"
37
37
38 function select(appId) {
38 function select(appId) {
39 spreadView.snapTo(priv.indexOf(appId));
39 spreadView.snapTo(priv.indexOf(appId));
qml/Stages/SessionContainer.qml+4
@@ -69,6 +69,10 @@ Item {
69 target: item; when: item
69 target: item; when: item
70 property: "orientation"; value: root.orientation
70 property: "orientation"; value: root.orientation
71 }
71 }
72+
73+ Component.onDestruction: {
74+ root.session.surface.forceActiveFocus();
75+ }
72 }
76 }
73 }
77 }
74
78
qml/Stages/TabletStage.qml+1−1
@@ -25,7 +25,7 @@ Rectangle {
25 id: root
25 id: root
26 objectName: "stages"
26 objectName: "stages"
27 anchors.fill: parent
27 anchors.fill: parent
28− color: "black"
28+ color: "#111111"
29
29
30 // Controls to be set from outside
30 // Controls to be set from outside
31 property bool shown: false
31 property bool shown: false
tests/mocks/Unity/Application/Session.h+1−1
@@ -56,7 +56,7 @@ public:
56
56
57 Q_INVOKABLE void addChildSession(Session* session);
57 Q_INVOKABLE void addChildSession(Session* session);
58 void insertChildSession(uint index, Session* session);
58 void insertChildSession(uint index, Session* session);
59− void removeChildSession(Session* session);
59+ Q_INVOKABLE void removeChildSession(Session* session);
60
60
61Q_SIGNALS:
61Q_SIGNALS:
62 void applicationChanged(ApplicationInfo*);
62 void applicationChanged(ApplicationInfo*);
tests/qmltests/CMakeLists.txt−1
@@ -28,7 +28,6 @@ add_qml_test(Components EdgeDemoOverlay)
28add_qml_test(Components LazyImage)
28add_qml_test(Components LazyImage)
29add_qml_test(Components Lockscreen)
29add_qml_test(Components Lockscreen)
30add_qml_test(Components Rating)
30add_qml_test(Components Rating)
31−add_qml_test(Components ResponsiveFlowView)
32add_qml_test(Components ResponsiveGridView)
31add_qml_test(Components ResponsiveGridView)
33add_qml_test(Components ResponsiveVerticalJournal IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins)
32add_qml_test(Components ResponsiveVerticalJournal IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins)
34add_qml_test(Components Showable)
33add_qml_test(Components Showable)
tests/qmltests/Components/tst_ResponsiveFlowView.qmldeleted−191
@@ -1,191 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import QtTest 1.0
19−import ".."
20−import "../../../qml/Components"
21−import Ubuntu.Components.ListItems 0.1 as ListItem
22−import Ubuntu.Components 0.1
23−import Unity.Test 0.1 as UT
24−
25−Item {
26− width: flowRect.width + controls.width
27− height: units.gu(80)
28−
29− Column {
30− id: controls
31− width: units.gu(40)
32− height: parent.height
33− anchors.top: parent.top
34− anchors.right: parent.right
35− ListItem.ValueSelector {
36− id: maxColumnsSelector
37− text: "maximumNumberOfColumns"
38− values: [2,4,8,13,1000]
39− selectedIndex: 1
40− }
41− ListItem.ValueSelector {
42− id: minHSpacingSelector
43− text: "minHorizontalSpacing"
44− values: [0,units.gu(2),units.gu(8),units.gu(25)]
45− selectedIndex: 0
46− }
47− }
48−
49− ListModel {
50− id: fakeModel
51− ListElement { name: "A" }
52− ListElement { name: "B" }
53− ListElement { name: "C" }
54− ListElement { name: "D" }
55− ListElement { name: "E" }
56− ListElement { name: "F" }
57− ListElement { name: "G" }
58− ListElement { name: "H" }
59− ListElement { name: "I" }
60− ListElement { name: "J" }
61− ListElement { name: "K" }
62− ListElement { name: "L" }
63− ListElement { name: "M" }
64− ListElement { name: "N" }
65− ListElement { name: "O" }
66− ListElement { name: "P" }
67− ListElement { name: "Q" }
68− ListElement { name: "R" }
69− ListElement { name: "S" }
70− ListElement { name: "T" }
71− ListElement { name: "U" }
72− }
73−
74− Rectangle {
75− id: flowRect
76− width: units.gu(80)
77− height: parent.height
78− color: "grey"
79− anchors.top: parent.top
80− anchors.left: parent.left
81−
82− ResponsiveFlowView {
83− id: flow
84− anchors.fill: parent
85− model: fakeModel
86− minimumHorizontalSpacing:
87− minHSpacingSelector.values[minHSpacingSelector.selectedIndex]
88− verticalSpacing: units.gu(2)
89− maximumNumberOfColumns:
90− maxColumnsSelector.values[maxColumnsSelector.selectedIndex]
91− referenceDelegateWidth: units.gu(6)
92−
93− delegate: Rectangle {
94− // So that it can be identified by test code
95− property bool isFlowDelegate: true
96− color: "grey"
97− border.color: "red"
98− border.width: 1
99−
100− // IMPORTANT: always use flow's cellWidth and cellHeight here to get
101− // ResponsiveFlowView's intended result
102− width: flow.cellWidth
103− height: flow.cellHeight
104−
105− Rectangle {
106− color: "green"
107− anchors.centerIn: parent
108− width: units.gu(6)
109− height: units.gu(6)
110− Text {
111− anchors.centerIn: parent
112− text: name
113− }
114− }
115−
116− Text { x:0; y:0; text:"(" + parent.x + ", " + parent.y + ")"}
117− }
118− }
119− }
120−
121− UT.UnityTestCase {
122− name: "ResponsiveFlowView"
123− when: windowShown
124−
125− function test_maximumNumberOfColumns_data() {
126− var data = new Array()
127−
128− data.push({selectedIndex: 0, maxColumnCount:2, columnCount: 2})
129− data.push({selectedIndex: 1, maxColumnCount:4, columnCount: 4})
130− data.push({selectedIndex: 2, maxColumnCount:8, columnCount: 8})
131− data.push({selectedIndex: 4, maxColumnCount:1000, columnCount: 13})
132−
133− return data
134− }
135−
136− /* Change ResponsiveFlowView's maximumNumberOfColumns property and check
137− that the resulting number of columns matches expectations */
138− function test_maximumNumberOfColumns(data) {
139− minHSpacingSelector.selectedIndex = 0
140−
141− // sanity checks
142− compare(maxColumnsSelector.values[data.selectedIndex], data.maxColumnCount)
143− compare(minHSpacingSelector.values[0], 0)
144−
145− maxColumnsSelector.selectedIndex = data.selectedIndex
146− tryCompareFunction(countFlowDelegatesOnFirstRow, data.columnCount);
147− compare(flow.columns, data.columnCount)
148− }
149−
150− function test_minimumHorizontalSpacing_data() {
151− var data = new Array()
152−
153− data.push({selectedIndex: 0, minHSpacing:0, columnCount: 13})
154− data.push({selectedIndex: 1, minHSpacing:units.gu(2), columnCount: 9})
155− data.push({selectedIndex: 2, minHSpacing:units.gu(8), columnCount: 5})
156− data.push({selectedIndex: 3, minHSpacing:units.gu(25), columnCount: 2})
157−
158− return data
159− }
160−
161− /* Change ResponsiveFlowView's minimumHorizontalSpacing property and check
162− that the resulting number of columns matches expectations */
163− function test_minimumHorizontalSpacing(data) {
164− maxColumnsSelector.selectedIndex = 4
165−
166− // sanity checks
167− compare(maxColumnsSelector.values[4], 1000)
168− compare(minHSpacingSelector.values[data.selectedIndex], data.minHSpacing)
169−
170− minHSpacingSelector.selectedIndex = data.selectedIndex
171− tryCompareFunction(countFlowDelegatesOnFirstRow, data.columnCount);
172− compare(flow.columns, data.columnCount)
173− }
174−
175− function countFlowDelegatesOnFirstRow() {
176− return __countFlowDelegatesOnFirstRow(flow.visibleChildren, 0)
177− }
178−
179− function __countFlowDelegatesOnFirstRow(objList, total) {
180− for (var i = 0; i < objList.length; ++i) {
181− var child = objList[i];
182− if (child.isFlowDelegate !== undefined && child.y === 0) {
183− ++total;
184− } else {
185− total = __countFlowDelegatesOnFirstRow(child.visibleChildren, total)
186− }
187− }
188− return total
189− }
190− }
191−}
tests/qmltests/Launcher/tst_Launcher.qml+18
@@ -519,5 +519,23 @@ Item {
519 tryCompare(quickListShape, "visible", false)
519 tryCompare(quickListShape, "visible", false)
520 }
520 }
521 }
521 }
522+
523+ function test_quicklistHideOnLauncherHide() {
524+ dragLauncherIntoView();
525+ var clickedItem = findChild(launcher, "launcherDelegate5")
526+ var quickList = findChild(launcher, "quickList")
527+
528+ // Initial state
529+ tryCompare(quickList, "state", "")
530+
531+ // Doing longpress
532+ mousePress(clickedItem, clickedItem.width / 2, clickedItem.height / 2)
533+ tryCompare(clickedItem, "itemOpacity", 0) // Wait for longpress to happen
534+ verify(quickList, "state", "open")
535+
536+ launcher.hide();
537+
538+ tryCompare(quickList, "state", "");
539+ }
522 }
540 }
523}
541}
tests/qmltests/Stages/tst_SessionContainer.qml+35
@@ -185,6 +185,41 @@ Rectangle {
185 tryCompare(sessionSpy, "count", data.count);
185 tryCompare(sessionSpy, "count", data.count);
186 }
186 }
187
187
188+ function test_childSessionDestructionReturnsFocusToSiblingOrParent() {
189+ sessionCheckbox.checked = true;
190+ var sessionContainer = sessionContainerLoader.item;
191+ compare(sessionContainer.childSessions.count(), 0);
192+
193+ sessionContainer.interactive = true;
194+
195+ var i;
196+ var sessions = [];
197+ // 3 sessions should cover all edge cases
198+ for(i = 0; i < 3; i++) {
199+ var a_session = ApplicationTest.addChildSession(
200+ sessionContainer.session, "gallery"
201+ )
202+
203+ a_session.createSurface();
204+ sessionContainer.session.addChildSession(a_session);
205+ compare(sessionContainer.childSessions.count(), i + 1);
206+
207+ sessions.push(a_session);
208+ }
209+
210+ var a_session;
211+ while(a_session = sessions.pop()) {
212+ a_session.surface.forceActiveFocus();
213+ compare(a_session.surface.activeFocus, true);
214+
215+ var parentSession = a_session.parentSession;
216+ sessionContainer.session.removeChildSession(a_session);
217+ compare(a_session.surface.activeFocus, false);
218+
219+ compare(parentSession.surface.activeFocus, true);
220+ }
221+ }
222+
188 function test_nestedChildSessions_data() {
223 function test_nestedChildSessions_data() {
189 return [ { tag: "depth=2", depth: 2 },
224 return [ { tag: "depth=2", depth: 2 },
190 { tag: "depth=8", depth: 8 }
225 { tag: "depth=8", depth: 8 }
tests/qmltests/tst_ShellWithPin.qml+27
@@ -444,5 +444,32 @@ Item {
444 tryCompare(lockscreen, "shown", false);
444 tryCompare(lockscreen, "shown", false);
445 tryCompare(LightDM.Greeter, "active", false);
445 tryCompare(LightDM.Greeter, "active", false);
446 }
446 }
447+
448+ function test_suspend() {
449+ var greeter = findChild(shell, "greeter");
450+
451+ // Put it to sleep
452+ Powerd.status = Powerd.Off;
453+
454+ // If locked, ApplicationManager.suspended should be true
455+ tryCompare(ApplicationManager, "suspended", true);
456+
457+ // And wake up
458+ Powerd.status = Powerd.On;
459+ tryCompare(greeter, "showProgress", 1);
460+
461+ // Swipe away greeter to focus app
462+ swipeAwayGreeter();
463+
464+ // We have a lockscreen, make sure we're still suspended
465+ tryCompare(ApplicationManager, "suspended", true);
466+
467+ enterPin("1234")
468+
469+ // Now that the lockscreen has gone too, make sure we're waking up
470+ tryCompare(ApplicationManager, "suspended", false);
471+
472+ }
473+
447 }
474 }
448}
475}