on xenial help sign in
Merge
commit0773ca81dd78e1dbdfa1048c048d2416e7b04256 authorAlbert Astals Cid <albert.astals@canonical.com> dateMon 17 Aug 2015, 10:37 (11 years ago) parent55708f1ae9d4d8
134 files changed+1262−556
CMakeLists.txt+1−1 debian/changelog+56 debian/control+2−2 plugins/Greeter/Unity/Launcher/CMakeLists.txt−1 plugins/Ubuntu/Payments/Payments.cpp−2 plugins/Unity/InputInfo/linux/qinputdeviceinfo_linux.cpp+2−11 plugins/Unity/Launcher/CMakeLists.txt−1 plugins/Unity/Launcher/launchermodel.cpp−1 po/am.po+2−2 po/ar.po+2−2 po/ast.po+2−2 po/az.po+2−2 po/be.po+2−2 po/bg.po+2−2 po/br.po+2−2 po/bs.po+2−2 po/ca.po+3−3 po/ca@valencia.po+2−2 po/ce.po+2−2 po/ckb.po+2−2 po/cs.po+2−2 po/cy.po+2−2 po/da.po+2−2 po/de.po+2−2 po/el.po+2−2 po/en_AU.po+2−2 po/en_GB.po+3−3 po/eo.po+2−2 po/es.po+2−2 po/eu.po+2−2 po/fa.po+2−2 po/fi.po+2−2 po/fo.po+2−2 po/fr.po+2−2 po/ga.po+2−2 po/gd.po+2−2 po/gl.po+2−2 po/gv.po+2−2 po/he.po+2−2 po/hi.po+2−2 po/hr.po+2−2 po/hu.po+2−2 po/hy.po+2−2 po/ia.po+2−2 po/id.po+2−2 po/is.po+2−2 po/it.po+2−2 po/ja.po+2−2 po/km.po+40−40 po/kn.po+2−2 po/ko.po+2−2 po/ku.po+2−2 po/ky.po+2−2 po/lo.po+2−2 po/lt.po+2−2 po/lv.po+2−2 po/ml.po+2−2 po/mr.po+12−12 po/ms.po+81−73 po/my.po+2−2 po/nb.po+2−2 po/nl.po+2−2 po/nn.po+2−2 po/oc.po+2−2 po/or.po+2−2 po/pa.po+2−2 po/pl.po+2−2 po/pt.po+2−2 po/pt_BR.po+12−12 po/ro.po+2−2 po/ru.po+2−2 po/shn.po+2−2 po/si.po+75−13 po/sk.po+2−2 po/sl.po+2−2 po/sq.po+2−2 po/sr.po+2−2 po/sv.po+2−2 po/sw.po+2−2 po/ta.po+2−2 po/te.po+2−2 po/th.po+2−2 po/tr.po+40−40 po/ug.po+2−2 po/uk.po+3−3 po/ur.po+2−2 po/uz.po+2−2 po/vi.po+2−2 po/xh.po+2−2 po/zh_CN.po+2−2 po/zh_HK.po+2−2 po/zh_TW.po+2−2 qml/Components/Unity8Settings.qml+50 qml/Components/UnityInputInfo/UnityInputInfo.qml+2 qml/Dash/GenericScopeView.qml+45−21 qml/Dash/PreviewListView.qml+2−1 qml/Dash/Previews/PreviewActions.qml+1−1 qml/Dash/Previews/PreviewAudioPlayback.qml+1−1 qml/Dash/Previews/PreviewHeader.qml+1−1 qml/Dash/Previews/PreviewRatingDisplay.qml+1−1 qml/Dash/ScopesList.qml+1−1 qml/Launcher/Launcher.qml+2−1 qml/Launcher/LauncherDelegate.qml+12 qml/Launcher/LauncherPanel.qml+1 qml/OrientedShell.qml+6−3 qml/Panel/IndicatorItem.qml+3−3 qml/Panel/IndicatorItemRow.qml+1−1 qml/Panel/IndicatorsBar.qml+1−1 qml/Shell.qml+10−12 qml/Stages/DesktopStage.qml+13 qml/Stages/PhoneStage.qml+10 qml/Stages/TabletStage.qml+14 tests/mocks/Unity/Application/ApplicationInfo.cpp+40−6 tests/mocks/Unity/Application/ApplicationInfo.h+7 tests/mocks/Unity/Application/ApplicationManager.cpp+2−49 tests/mocks/Unity/Application/ApplicationManager.h−7 tests/mocks/Unity/CMakeLists.txt+1−1 tests/mocks/Unity/fake_scope.cpp+5−3 tests/mocks/Unity/fake_scope.h+2−2 tests/mocks/Unity/fake_scopesoverview.cpp+1−1 tests/mocks/Unity/fake_scopesoverview.h+1−1 tests/plugins/Greeter/Unity/Launcher/CMakeLists.txt−1 tests/plugins/Unity/Launcher/launchermodeltest.cpp+19−4 tests/qmltests/Dash/Previews/tst_PreviewExpandable.qml+147−6 tests/qmltests/Launcher/tst_Launcher.qml+36−5 tests/qmltests/Panel/tst_IndicatorItem.qml+12−12 tests/qmltests/Stages/ApplicationCheckBox.qml+21 tests/qmltests/Stages/tst_DesktopStage.qml+2−2 tests/qmltests/Stages/tst_PhoneStage.qml+76−3 tests/qmltests/Stages/tst_TabletStage.qml+161−1 tests/qmltests/tst_OrientedShell.qml+3−3 tests/qmltests/tst_Shell.qml+55−29 tests/qmltests/tst_ShellWithPin.qml+5−4 tests/utils/modules/Unity/Test/UnityTestCase.qml+9
CMakeLists.txt+1−1
@@ -57,7 +57,7 @@ find_package(Qt5DBus 5.2 REQUIRED)
5757find_package(Qt5Concurrent 5.2 REQUIRED)
5858find_package(Qt5Sql 5.2 REQUIRED)
5959
60−pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=6)
60+pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=7)
6161
6262# Standard install paths
6363include(GNUInstallDirs)
debian/changelog+56
@@ -1,3 +1,59 @@
1+unity8 (8.11+15.04.20150814-0ubuntu1) vivid; urgency=medium
2+
3+ [ Albert Astals Cid ]
4+ * Make the test pass again after rework of appmanager
5+ * fix testPhoneStage
6+
7+ [ CI Train Bot ]
8+ * New rebuild forced.
9+
10+ [ Daniel d'Andrada ]
11+ * Fix and clean up InputInfo plugin
12+
13+ [ Rodney Dawes ]
14+ * Do not call verify in the payments button code. (LP: #1468038)
15+
16+ -- CI Train Bot <ci-train-bot@canonical.com> Fri, 14 Aug 2015 09:53:11 +0000
17+
18+unity8 (8.11+15.04.20150812-0ubuntu1) vivid; urgency=medium
19+
20+ [ Albert Astals Cid ]
21+ * Add a test that checks that items in an expandable are the correct
22+ size after expanding the expandable
23+ * Fix the expandable test
24+ * Replace some waitForRendering with wait(0)
25+ * Workaround for bug 1473471 (LP: #1473471)
26+
27+ [ Gary.Wzl ]
28+ * Fix layout issue when adding audio track widget in expandable widget
29+
30+ [ handsome_feng ]
31+ * Added indication for running apps. (LP: #1471577)
32+ * Adjust the color to highlighting indicator. (LP: #1457098)
33+ * Convert the MouseArea to MultiPointTouchArea to track multiple touch
34+ points. (LP: #1445472)
35+
36+ [ handsome_feng<445865575@qq.com> ]
37+ * Convert the MouseArea to MultiPointTouchArea to track multiple touch
38+ points. (LP: #1445472)
39+
40+ -- CI Train Bot <ci-train-bot@canonical.com> Wed, 12 Aug 2015 08:41:24 +0000
41+
42+unity8 (8.10+15.10.20150804-0ubuntu1) wily; urgency=medium
43+
44+ [ Kevin Gunn ]
45+ * No change, rebuild for gcc5
46+
47+ [ CI Train Bot ]
48+ * Resync trunk. added: po/cy.po
49+ * Resync trunk. added: po/cy.po
50+
51+ [ Daniel d'Andrada ]
52+ * Stages now control the "requestedState" property of applications
53+ * Stages now control the "requestedState" property of applications
54+
55+ -- CI Train Bot <ci-train-bot@canonical.com> Tue, 04 Aug 2015 20:56:05 +0000
56+
157unity8 (8.10+15.10.20150729-0ubuntu1) wily; urgency=medium
258
359 [ CI Train Bot ]
debian/control+2−2
@@ -28,7 +28,7 @@ Build-Depends: cmake,
2828 libqt5xmlpatterns5-dev,
2929 libsystemsettings-dev,
3030 libudev-dev,
31− libunity-api-dev (>= 7.98),
31+ libunity-api-dev (>= 7.99),
3232 libusermetricsoutput1-dev,
3333 libxcb1-dev,
3434 pkg-config,
@@ -129,7 +129,7 @@ Depends: qml-module-qtquick-layouts,
129129 unity-application-impl-6,
130130 unity-notifications-impl-3,
131131 unity-plugin-scopes | unity-scopes-impl,
132− unity-scopes-impl-6,
132+ unity-scopes-impl-7,
133133 unity8-fake-env | unity-application-impl,
134134 ${misc:Depends},
135135Breaks: unity8 (<< 7.86),
plugins/Greeter/Unity/Launcher/CMakeLists.txt−1
@@ -1,5 +1,4 @@
11pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=7)
2−pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=6)
32pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
43
54add_definitions(-DSM_BUSNAME=systemBus)
plugins/Ubuntu/Payments/Payments.cpp−2
@@ -123,8 +123,6 @@ void Payments::setStoreItemId(const QString &store_item_id)
123123 if (m_store_item_id.isEmpty()) {
124124 return;
125125 }
126−
127− pay_package_item_start_verification(m_package, m_store_item_id.toLocal8Bit().data());
128126}
129127
130128void Payments::setPurchasing(bool is_purchasing)
plugins/Unity/InputInfo/linux/qinputdeviceinfo_linux.cpp+2−11
@@ -101,8 +101,6 @@ void QInputDeviceInfoPrivate::init()
101101 if (!iDevice)
102102 continue;
103103
104− qDebug() << "*** ADDING DEVICE" << eventPath;
105−
106104 iDevice->setTypes(getInputTypes(dev));
107105
108106 if (iDevice->switches().count() > 0 && iDevice->buttons().count() == 0)
@@ -125,12 +123,6 @@ void QInputDeviceInfoPrivate::init()
125123
126124QInputDeviceInfo::InputTypes QInputDeviceInfoPrivate::getInputTypes( struct udev_device *dev)
127125{
128− qDebug() << "******* have input type Keyboard" << udev_device_get_property_value(dev, "ID_INPUT_KEYBOARD");
129− qDebug() << "******* have input type Mouse" << udev_device_get_property_value(dev, "ID_INPUT_MOUSE");
130− qDebug() << "******* have input type Touchpad" << udev_device_get_property_value(dev, "ID_INPUT_TOUCHPAD");
131− qDebug() << "******* have input type Touchscreen" << udev_device_get_property_value(dev, "ID_INPUT_TOUCHSCREEN");
132− qDebug() << "******* have input type Tablet" << udev_device_get_property_value(dev, "ID_INPUT_TABLET");
133− qDebug() << "******* have input type joystick" << udev_device_get_property_value(dev, "ID_INPUT_JOYSTICK");
134126 QInputDeviceInfo::InputTypes types = QInputDeviceInfo::Unknown;
135127 if (qstrcmp(udev_device_get_property_value(dev, "ID_INPUT_KEYBOARD"), "1") == 0 )
136128 types |= QInputDeviceInfo::Keyboard;
@@ -151,6 +143,7 @@ QInputDeviceInfo::InputTypes QInputDeviceInfoPrivate::getInputTypes( struct udev
151143QInputDevice *QInputDeviceInfoPrivate::addDevice(const QString &path)
152144{
153145 QInputDevice *inputDevice = new QInputDevice(this);
146+ inputDevice->setDevicePath(path);
154147
155148 struct libevdev *dev = NULL;
156149 int fd;
@@ -158,17 +151,15 @@ QInputDevice *QInputDeviceInfoPrivate::addDevice(const QString &path)
158151 fd = open(path.toLatin1(), O_RDONLY|O_NONBLOCK);
159152
160153 if (fd == -1) {
161− qDebug() << "Failed to open";
162154 return inputDevice;
163155 }
164156 rc = libevdev_new_from_fd(fd, &dev);
165157 if (rc < 0) {
166− qDebug() << "Failed to init libevdev ("<< strerror(-rc) << ")";
158+ qWarning() << "Failed to init libevdev ("<< strerror(-rc) << ")";
167159 return inputDevice;
168160 }
169161
170162 inputDevice->setName(QString::fromLatin1(libevdev_get_name(dev)));
171− inputDevice->setDevicePath(path);
172163 for (int i = 0; i < EV_MAX; i++) {
173164 if (i == EV_KEY || i == EV_SW || i == EV_REL
174165 || i == EV_REL || i == EV_ABS) {
plugins/Unity/Launcher/CMakeLists.txt−1
@@ -1,5 +1,4 @@
11pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=7)
2−pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=6)
32pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
43
54add_definitions(-DSM_BUSNAME=systemBus)
plugins/Unity/Launcher/launchermodel.cpp−1
@@ -516,7 +516,6 @@ void LauncherModel::applicationAdded(const QModelIndex &parent, int row)
516516 Q_EMIT dataChanged(index(itemIndex), index(itemIndex), {RoleRecent});
517517 }
518518 item->setRunning(true);
519− // TODO Shall we paint some running/recent app highlight? If yes, do it here.
520519 } else {
521520 LauncherItem *item = new LauncherItem(app->appId(), app->name(), app->icon().toString(), this);
522521 item->setRecent(true);
po/am.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:38+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/ar.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
1818"3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
19−"X-Launchpad-Export-Date: 2015-07-30 06:14+0000\n"
20−"X-Generator: Launchpad (build 17646)\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
20+"X-Generator: Launchpad (build 17686)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:112
2323msgid "Password: "
po/ast.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:38+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/az.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:38+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/be.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
19−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
20−"X-Generator: Launchpad (build 17628)\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
20+"X-Generator: Launchpad (build 17686)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:112
2323msgid "Password: "
po/bg.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:38+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/br.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:38+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/bs.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
20−"X-Generator: Launchpad (build 17628)\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
20+"X-Generator: Launchpad (build 17686)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:112
2323msgid "Password: "
po/ca.po+3−3
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:38+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -376,7 +376,7 @@ msgstr "La contrasenya no és correcta"
376376#: qml/Greeter/NarrowView.qml:121
377377msgctxt "passphrase"
378378msgid "Please re-enter"
379−msgstr ""
379+msgstr "Torneu-ho a introduir"
380380
381381#: qml/Greeter/NarrowView.qml:122
382382msgid "Sorry, incorrect passcode"
po/ca@valencia.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/ce.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:38+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/ckb.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/cs.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020"Language: cs\n"
2121
2222#: plugins/LightDM/Greeter.cpp:112
po/cy.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==2 ? 1 : (n != 8 && n != 11) ? "
1818"2 : 3;\n"
19−"X-Launchpad-Export-Date: 2015-08-01 05:45+0000\n"
20−"X-Generator: Launchpad (build 17656)\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
20+"X-Generator: Launchpad (build 17686)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:112
2323msgid "Password: "
po/da.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Type: text/plain; charset=UTF-8\n"
1717"Content-Transfer-Encoding: 8bit\n"
1818"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
20−"X-Generator: Launchpad (build 17628)\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
20+"X-Generator: Launchpad (build 17686)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:112
2323msgid "Password: "
po/de.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:38+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/el.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/en_AU.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/en_GB.po+3−3
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -370,7 +370,7 @@ msgstr "Sorry, incorrect passphrase"
370370#: qml/Greeter/NarrowView.qml:121
371371msgctxt "passphrase"
372372msgid "Please re-enter"
373−msgstr ""
373+msgstr "Please re-enter"
374374
375375#: qml/Greeter/NarrowView.qml:122
376376msgid "Sorry, incorrect passcode"
po/eo.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:38+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/es.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/eu.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:38+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/fa.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/fi.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:38+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/fo.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:38+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/fr.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-28 05:40+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/ga.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/gd.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
1818"(n > 2 && n < 20) ? 2 : 3;\n"
19−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
20−"X-Generator: Launchpad (build 17628)\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
20+"X-Generator: Launchpad (build 17686)\n"
2121"Language: gd\n"
2222
2323#: plugins/LightDM/Greeter.cpp:112
po/gl.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-08-02 05:36+0000\n"
19−"X-Generator: Launchpad (build 17656)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/gv.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : (n == 2 ? 1 : 2);\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/he.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/hi.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/hr.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
20−"X-Generator: Launchpad (build 17628)\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
20+"X-Generator: Launchpad (build 17686)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:112
2323msgid "Password: "
po/hu.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-08-02 05:36+0000\n"
19−"X-Generator: Launchpad (build 17656)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/hy.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/ia.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/id.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/is.po+2−2
@@ -17,8 +17,8 @@ msgstr ""
1717"Content-Type: text/plain; charset=UTF-8\n"
1818"Content-Transfer-Encoding: 8bit\n"
1919"Plural-Forms: nplurals=2; plural=n != 1;\n"
20−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
21−"X-Generator: Launchpad (build 17628)\n"
20+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
21+"X-Generator: Launchpad (build 17686)\n"
2222"Language: is\n"
2323
2424#: plugins/LightDM/Greeter.cpp:112
po/it.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/ja.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/km.po+40−40
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -133,7 +133,7 @@ msgstr[1] ""
133133#: qml/Components/Dialogs.qml:69
134134msgctxt "Title: Lock/Log out dialog"
135135msgid "Log out"
136−msgstr ""
136+msgstr "ចេញ"
137137
138138#: qml/Components/Dialogs.qml:70
139139msgid "Are you sure you want to log out?"
@@ -142,12 +142,12 @@ msgstr "តើ​អ្នក​ពិតជា​ចង់​ចេញ​មែ
142142#: qml/Components/Dialogs.qml:72
143143msgctxt "Button: Lock the system"
144144msgid "Lock"
145−msgstr ""
145+msgstr "ចាក់សោ"
146146
147147#: qml/Components/Dialogs.qml:79
148148msgctxt "Button: Log out from the system"
149149msgid "Log Out"
150−msgstr ""
150+msgstr "ចេញ"
151151
152152#: qml/Components/Dialogs.qml:86 qml/Components/Dialogs.qml:117
153153#: qml/Components/Dialogs.qml:173
@@ -157,7 +157,7 @@ msgstr "បោះបង់"
157157#: qml/Components/Dialogs.qml:98
158158msgctxt "Title: Reboot/Shut down dialog"
159159msgid "Shut down"
160−msgstr ""
160+msgstr "បិទ"
161161
162162#: qml/Components/Dialogs.qml:99
163163msgid "Are you sure you want to shut down?"
@@ -166,17 +166,17 @@ msgstr "តើ​អ្នក​ពិតជា​ចង់​បិទ​មែ
166166#: qml/Components/Dialogs.qml:101
167167msgctxt "Button: Reboot the system"
168168msgid "Reboot"
169−msgstr ""
169+msgstr "ចាប់ផ្ដើម​ឡើងវិញ"
170170
171171#: qml/Components/Dialogs.qml:109
172172msgctxt "Button: Shut down the system"
173173msgid "Shut down"
174−msgstr ""
174+msgstr "បិទ"
175175
176176#: qml/Components/Dialogs.qml:129
177177msgctxt "Title: Reboot dialog"
178178msgid "Reboot"
179−msgstr ""
179+msgstr "ចាប់ផ្ដើម​ឡើងវិញ"
180180
181181#: qml/Components/Dialogs.qml:130
182182msgid "Are you sure you want to reboot?"
@@ -193,7 +193,7 @@ msgstr "បាទ/ចាស"
193193#: qml/Components/Dialogs.qml:152
194194msgctxt "Title: Power off/Restart dialog"
195195msgid "Power"
196−msgstr ""
196+msgstr "ថាមពល"
197197
198198#: qml/Components/Dialogs.qml:153
199199msgid ""
@@ -206,12 +206,12 @@ msgstr ""
206206#: qml/Components/Dialogs.qml:155
207207msgctxt "Button: Power off the system"
208208msgid "Power off"
209−msgstr ""
209+msgstr "បិទ"
210210
211211#: qml/Components/Dialogs.qml:164
212212msgctxt "Button: Restart the system"
213213msgid "Restart"
214−msgstr ""
214+msgstr "ចាប់ផ្ដើម​ឡើងវិញ"
215215
216216#: qml/Components/Lockscreen.qml:245
217217msgid "Return to Call"
@@ -236,22 +236,22 @@ msgstr "មើល​ទាំងអស់"
236236#: qml/Dash/GenericScopeView.qml:601
237237msgctxt "Label: Hint for dash search line edit"
238238msgid "Search"
239−msgstr ""
239+msgstr "ស្វែងរក"
240240
241241#: qml/Dash/PageHeader.qml:269
242242msgctxt "Button: Open the Ubuntu Store"
243243msgid "Store"
244−msgstr ""
244+msgstr "រក្សាទុក"
245245
246246#: qml/Dash/PageHeader.qml:276
247247msgctxt "Button: Start a search in the current dash scope"
248248msgid "Search"
249−msgstr ""
249+msgstr "ស្វែងរក"
250250
251251#: qml/Dash/PageHeader.qml:286
252252msgctxt "Button: Show the current dash scope settings"
253253msgid "Settings"
254−msgstr ""
254+msgstr "ការ​កំណត់"
255255
256256#: qml/Dash/PageHeader.qml:293
257257msgid "Remove from Favorites"
@@ -295,11 +295,11 @@ msgstr ""
295295
296296#: qml/Dash/ScopesList.qml:67
297297msgid "Manage"
298−msgstr ""
298+msgstr "គ្រប់គ្រង"
299299
300300#: qml/Dash/ScopesList.qml:113
301301msgid "Home"
302−msgstr ""
302+msgstr "ផ្ទះ"
303303
304304#: qml/Dash/ScopesList.qml:114
305305msgid "Also installed"
@@ -307,11 +307,11 @@ msgstr ""
307307
308308#: qml/Greeter/CoverPage.qml:107
309309msgid "Unlock"
310−msgstr ""
310+msgstr "ដោះ​សោ"
311311
312312#: qml/Greeter/LoginList.qml:236
313313msgid "Retry"
314−msgstr ""
314+msgstr "ព្យាយាម​ម្ដងទៀត"
315315
316316#: qml/Greeter/LoginList.qml:237
317317msgid "Tap to unlock"
@@ -452,7 +452,7 @@ msgstr "បាន​បរាជ័យ ប៉ះ​ ដើម្បី​ព្
452452#: qml/Panel/Indicators/MessageMenuItemFactory.qml:149
453453msgctxt "Label: Hint in message indicator line edit"
454454msgid "Reply"
455−msgstr ""
455+msgstr "ឆ្លើយតប"
456456
457457#: qml/Panel/Indicators/ModemInfoItem.qml:105
458458msgid "Unlock SIM"
@@ -522,26 +522,26 @@ msgstr ""
522522#: qml/Wizard/Page.qml:89
523523msgctxt "Button: Go back one page in the Wizard"
524524msgid "Back"
525−msgstr ""
525+msgstr "ថយក្រោយ"
526526
527527#: qml/Wizard/Pages/10-welcome.qml:27
528528msgid "Hi!"
529−msgstr ""
529+msgstr "សួស្ដី!"
530530
531531#: qml/Wizard/Pages/10-welcome.qml:44
532532msgid "Welcome to your Ubuntu phone."
533−msgstr ""
533+msgstr "សូម​ស្វាគមន៍​មកកាន់​ទូរស័ព្ទ Ubuntu ។"
534534
535535#: qml/Wizard/Pages/10-welcome.qml:52
536536msgid "Let’s get started."
537−msgstr ""
537+msgstr "តោះ​ចាប់ផ្ដើម។"
538538
539539#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:128
540540#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
541541#: qml/Wizard/Pages/60-reporting.qml:50 qml/Wizard/Pages/passwd-confirm.qml:82
542542#: qml/Wizard/Pages/passwd-set.qml:90
543543msgid "Continue"
544−msgstr ""
544+msgstr "បន្ត"
545545
546546#: qml/Wizard/Pages/20-sim.qml:25
547547msgid "Add a SIM card and restart your device"
@@ -553,11 +553,11 @@ msgstr ""
553553
554554#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
555555msgid "Skip"
556−msgstr ""
556+msgstr "រំលង"
557557
558558#: qml/Wizard/Pages/30-passwd-type.qml:39
559559msgid "Lock security"
560−msgstr ""
560+msgstr "ចាក់សោ​សុវត្ថិភាព"
561561
562562#: qml/Wizard/Pages/30-passwd-type.qml:74
563563msgid "Please select how you’d like to unlock your phone."
@@ -566,7 +566,7 @@ msgstr ""
566566#: qml/Wizard/Pages/30-passwd-type.qml:97
567567msgctxt "Label: Type of security method"
568568msgid "Swipe"
569−msgstr ""
569+msgstr "រុញ"
570570
571571#: qml/Wizard/Pages/30-passwd-type.qml:98
572572msgctxt "Label: Description of security method"
@@ -586,7 +586,7 @@ msgstr ""
586586#: qml/Wizard/Pages/30-passwd-type.qml:103
587587msgctxt "Label: Type of security method"
588588msgid "Passphrase"
589−msgstr ""
589+msgstr "ឃ្លាសម្ងាត់"
590590
591591#: qml/Wizard/Pages/30-passwd-type.qml:104
592592msgctxt "Label: Description of security method"
@@ -607,7 +607,7 @@ msgstr ""
607607
608608#: qml/Wizard/Pages/50-location.qml:27
609609msgid "Location"
610−msgstr ""
610+msgstr "ទីតាំង"
611611
612612#: qml/Wizard/Pages/50-location.qml:62
613613msgid "Let the phone detect your location:"
@@ -654,27 +654,27 @@ msgstr ""
654654
655655#: qml/Wizard/Pages/80-finished.qml:24
656656msgid "All done"
657−msgstr ""
657+msgstr "ធ្វើ​រួច​ទាំងអស់"
658658
659659#: qml/Wizard/Pages/80-finished.qml:39
660660msgid "Nice work!"
661−msgstr ""
661+msgstr "ដំណើរការ​ល្អ!"
662662
663663#: qml/Wizard/Pages/80-finished.qml:46
664664msgid "Your phone is now ready to use."
665−msgstr ""
665+msgstr "ទូរស័ព្ទ​របស់​អ្នក​ឥឡូវ​អាច​ប្រើ​បាន។"
666666
667667#: qml/Wizard/Pages/80-finished.qml:53
668668msgid "Finish"
669−msgstr ""
669+msgstr "បញ្ចប់"
670670
671671#: qml/Wizard/Pages/here-terms.qml:27
672672msgid "Terms & Conditions"
673−msgstr ""
673+msgstr "លក្ខខណ្ឌ​ប្រើប្រាស់"
674674
675675#: qml/Wizard/Pages/passwd-confirm.qml:49
676676msgid "Confirm passphrase"
677−msgstr ""
677+msgstr "បញ្ជាក់​ឃ្លា​សម្ងាត់"
678678
679679#: qml/Wizard/Pages/passwd-confirm.qml:50
680680msgid "Confirm passcode"
@@ -683,7 +683,7 @@ msgstr ""
683683#: qml/Wizard/Pages/passwd-confirm.qml:53
684684#: qml/Wizard/Pages/passwd-confirm.qml:54
685685msgid "Please try again."
686−msgstr ""
686+msgstr "សូម​ព្យាយាម​ម្ដងទៀត។"
687687
688688#: qml/Wizard/Pages/passwd-set.qml:61
689689msgid "Choose your passcode"
@@ -697,13 +697,13 @@ msgstr ""
697697#: qml/Wizard/StackButton.qml:39
698698#, qt-format
699699msgid "〈 %1"
700−msgstr ""
700+msgstr "〈 %1"
701701
702702#. Translators: This is the arrow for "Forward" buttons
703703#: qml/Wizard/StackButton.qml:42
704704#, qt-format
705705msgid "%1 〉"
706−msgstr ""
706+msgstr "%1 〉"
707707
708708#~ msgid "Try swiping from the right edge to unlock the phone"
709709#~ msgstr "សាកល្បង​​អូស​ពី​គែម​ស្ដាំ​ ដើម្បី​ដោះ​សោ​ទូរស័ព្ទ"
po/kn.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/ko.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/ku.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/ky.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/lo.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/lt.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"(n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
20−"X-Generator: Launchpad (build 17628)\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
20+"X-Generator: Launchpad (build 17686)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:112
2323msgid "Password: "
po/lv.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/ml.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/mr.po+12−12
@@ -15,12 +15,12 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
23−msgstr ""
23+msgstr "पासवर्ड: "
2424
2525#: plugins/Unity/Launcher/launcheritem.cpp:45
2626#: plugins/Unity/Launcher/launcheritem.cpp:100
@@ -142,7 +142,7 @@ msgstr ""
142142#: qml/Components/Dialogs.qml:72
143143msgctxt "Button: Lock the system"
144144msgid "Lock"
145−msgstr ""
145+msgstr "लॉक करा"
146146
147147#: qml/Components/Dialogs.qml:79
148148msgctxt "Button: Log out from the system"
@@ -152,7 +152,7 @@ msgstr ""
152152#: qml/Components/Dialogs.qml:86 qml/Components/Dialogs.qml:117
153153#: qml/Components/Dialogs.qml:173
154154msgid "Cancel"
155−msgstr ""
155+msgstr "रद्द"
156156
157157#: qml/Components/Dialogs.qml:98
158158msgctxt "Title: Reboot/Shut down dialog"
@@ -184,11 +184,11 @@ msgstr ""
184184
185185#: qml/Components/Dialogs.qml:132
186186msgid "No"
187−msgstr ""
187+msgstr "नाही"
188188
189189#: qml/Components/Dialogs.qml:138
190190msgid "Yes"
191−msgstr ""
191+msgstr "हो"
192192
193193#: qml/Components/Dialogs.qml:152
194194msgctxt "Title: Power off/Restart dialog"
@@ -234,7 +234,7 @@ msgstr ""
234234#: qml/Dash/GenericScopeView.qml:601
235235msgctxt "Label: Hint for dash search line edit"
236236msgid "Search"
237−msgstr ""
237+msgstr "शोध"
238238
239239#: qml/Dash/PageHeader.qml:269
240240msgctxt "Button: Open the Ubuntu Store"
@@ -244,7 +244,7 @@ msgstr ""
244244#: qml/Dash/PageHeader.qml:276
245245msgctxt "Button: Start a search in the current dash scope"
246246msgid "Search"
247−msgstr ""
247+msgstr "शोध"
248248
249249#: qml/Dash/PageHeader.qml:286
250250msgctxt "Button: Show the current dash scope settings"
@@ -253,11 +253,11 @@ msgstr ""
253253
254254#: qml/Dash/PageHeader.qml:293
255255msgid "Remove from Favorites"
256−msgstr ""
256+msgstr "आवड पासून काढूण टाका"
257257
258258#: qml/Dash/PageHeader.qml:293
259259msgid "Add to Favorites"
260−msgstr ""
260+msgstr "आवड मध्ये जोडा"
261261
262262#: qml/Dash/Previews/PreviewActionCombo.qml:35
263263msgid "More..."
@@ -277,7 +277,7 @@ msgstr ""
277277
278278#: qml/Dash/Previews/PreviewRatingInput.qml:169
279279msgid "Send"
280−msgstr ""
280+msgstr "पाठवा"
281281
282282#: qml/Dash/PullToRefreshScopeStyle.qml:55
283283msgid "Pull to refresh…"
po/ms.po+81−73
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -135,7 +135,7 @@ msgstr[1] "Sila tunggu %1 minit kemudian cuba lagi..."
135135#: qml/Components/Dialogs.qml:69
136136msgctxt "Title: Lock/Log out dialog"
137137msgid "Log out"
138−msgstr ""
138+msgstr "Daftar keluar"
139139
140140#: qml/Components/Dialogs.qml:70
141141msgid "Are you sure you want to log out?"
@@ -144,12 +144,12 @@ msgstr "Anda pasti mahu mendaftar keluar?"
144144#: qml/Components/Dialogs.qml:72
145145msgctxt "Button: Lock the system"
146146msgid "Lock"
147−msgstr ""
147+msgstr "Kunci"
148148
149149#: qml/Components/Dialogs.qml:79
150150msgctxt "Button: Log out from the system"
151151msgid "Log Out"
152−msgstr ""
152+msgstr "Daftar Keluar"
153153
154154#: qml/Components/Dialogs.qml:86 qml/Components/Dialogs.qml:117
155155#: qml/Components/Dialogs.qml:173
@@ -159,7 +159,7 @@ msgstr "Batal"
159159#: qml/Components/Dialogs.qml:98
160160msgctxt "Title: Reboot/Shut down dialog"
161161msgid "Shut down"
162−msgstr ""
162+msgstr "Matikan"
163163
164164#: qml/Components/Dialogs.qml:99
165165msgid "Are you sure you want to shut down?"
@@ -168,17 +168,17 @@ msgstr "Anda pasti mahu matikan?"
168168#: qml/Components/Dialogs.qml:101
169169msgctxt "Button: Reboot the system"
170170msgid "Reboot"
171−msgstr ""
171+msgstr "But Semula"
172172
173173#: qml/Components/Dialogs.qml:109
174174msgctxt "Button: Shut down the system"
175175msgid "Shut down"
176−msgstr ""
176+msgstr "Matikan"
177177
178178#: qml/Components/Dialogs.qml:129
179179msgctxt "Title: Reboot dialog"
180180msgid "Reboot"
181−msgstr ""
181+msgstr "But Semula"
182182
183183#: qml/Components/Dialogs.qml:130
184184msgid "Are you sure you want to reboot?"
@@ -195,7 +195,7 @@ msgstr "Ya"
195195#: qml/Components/Dialogs.qml:152
196196msgctxt "Title: Power off/Restart dialog"
197197msgid "Power"
198−msgstr ""
198+msgstr "Kuasa"
199199
200200#: qml/Components/Dialogs.qml:153
201201msgid ""
@@ -206,16 +206,16 @@ msgstr "Anda pasti mahu tutup?"
206206#: qml/Components/Dialogs.qml:155
207207msgctxt "Button: Power off the system"
208208msgid "Power off"
209−msgstr ""
209+msgstr "Padam"
210210
211211#: qml/Components/Dialogs.qml:164
212212msgctxt "Button: Restart the system"
213213msgid "Restart"
214−msgstr ""
214+msgstr "Mula Semula"
215215
216216#: qml/Components/Lockscreen.qml:245
217217msgid "Return to Call"
218−msgstr ""
218+msgstr "Kembali ke Panggilan"
219219
220220#: qml/Components/Lockscreen.qml:245
221221msgid "Emergency Call"
@@ -236,22 +236,22 @@ msgstr "Lihat semua"
236236#: qml/Dash/GenericScopeView.qml:601
237237msgctxt "Label: Hint for dash search line edit"
238238msgid "Search"
239−msgstr ""
239+msgstr "Gelintar"
240240
241241#: qml/Dash/PageHeader.qml:269
242242msgctxt "Button: Open the Ubuntu Store"
243243msgid "Store"
244−msgstr ""
244+msgstr "Kedai"
245245
246246#: qml/Dash/PageHeader.qml:276
247247msgctxt "Button: Start a search in the current dash scope"
248248msgid "Search"
249−msgstr ""
249+msgstr "Gelintar"
250250
251251#: qml/Dash/PageHeader.qml:286
252252msgctxt "Button: Show the current dash scope settings"
253253msgid "Settings"
254−msgstr ""
254+msgstr "Tetapan"
255255
256256#: qml/Dash/PageHeader.qml:293
257257msgid "Remove from Favorites"
@@ -291,19 +291,19 @@ msgstr "Lepas untuk segar semula..."
291291
292292#: qml/Dash/ScopeSettings/ScopeSettingBoolean.qml:43
293293msgid "Enable location data"
294−msgstr ""
294+msgstr "Benarkan data lokasi"
295295
296296#: qml/Dash/ScopesList.qml:67
297297msgid "Manage"
298−msgstr ""
298+msgstr "Urus"
299299
300300#: qml/Dash/ScopesList.qml:113
301301msgid "Home"
302−msgstr ""
302+msgstr "Rumah"
303303
304304#: qml/Dash/ScopesList.qml:114
305305msgid "Also installed"
306−msgstr ""
306+msgstr "Juga dipasang"
307307
308308#: qml/Greeter/CoverPage.qml:107
309309msgid "Unlock"
@@ -311,11 +311,11 @@ msgstr "Buka"
311311
312312#: qml/Greeter/LoginList.qml:236
313313msgid "Retry"
314−msgstr ""
314+msgstr "Cuba Lagi"
315315
316316#: qml/Greeter/LoginList.qml:237
317317msgid "Tap to unlock"
318−msgstr ""
318+msgstr "Ketik untuk buka"
319319
320320#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:53
321321msgid "Sorry, incorrect passphrase."
@@ -450,7 +450,7 @@ msgstr "Gagal, ketuk untuk cuba lagi"
450450#: qml/Panel/Indicators/MessageMenuItemFactory.qml:149
451451msgctxt "Label: Hint in message indicator line edit"
452452msgid "Reply"
453−msgstr ""
453+msgstr "Balas"
454454
455455#: qml/Panel/Indicators/ModemInfoItem.qml:105
456456msgid "Unlock SIM"
@@ -462,24 +462,24 @@ msgstr "Perayauan"
462462
463463#: qml/Tutorial/TutorialBottomFinish.qml:24
464464msgid "This action does different things for different apps"
465−msgstr ""
465+msgstr "Tindakan ini melakukan perkara yang berlainan untuk apl berbeza"
466466
467467#: qml/Tutorial/TutorialBottomFinish.qml:25
468468msgid "Tap here to finish."
469−msgstr ""
469+msgstr "Ketik di sini untuk selesaikan."
470470
471471#: qml/Tutorial/TutorialBottom.qml:28
472472msgid "Open special menus"
473−msgstr ""
473+msgstr "Buka menu khas"
474474
475475#: qml/Tutorial/TutorialBottom.qml:29
476476msgid "Swipe up from the bottom edge."
477−msgstr ""
477+msgstr "Leret ke ata dari pinggir bawah."
478478
479479#: qml/Tutorial/TutorialContent.qml:81 qml/Tutorial/TutorialLeftFinish.qml:25
480480#: qml/Tutorial/TutorialRight.qml:144
481481msgid "Tap here to continue."
482−msgstr ""
482+msgstr "Ketik di sini untuk teruskan."
483483
484484#: qml/Tutorial/TutorialContent.qml:81
485485msgid "Click here to finish."
@@ -487,137 +487,139 @@ msgstr ""
487487
488488#: qml/Tutorial/TutorialLeftFinish.qml:24
489489msgid "These are the shortcuts to favorite apps"
490−msgstr ""
490+msgstr "Ini adalah pintasan ke apl kegemaran"
491491
492492#: qml/Tutorial/TutorialLeft.qml:26
493493msgid "Open the launcher"
494−msgstr ""
494+msgstr "Buka pelancar"
495495
496496#: qml/Tutorial/TutorialLeft.qml:27
497497msgid "Short swipe from the left edge."
498−msgstr ""
498+msgstr "Leret pendek dari pinggir kiri."
499499
500500#: qml/Tutorial/TutorialPage.qml:178
501501msgid "You almost got it!"
502−msgstr ""
502+msgstr "Anda hampir berjaya!"
503503
504504#: qml/Tutorial/TutorialPage.qml:195
505505msgid "Try again."
506−msgstr ""
506+msgstr "Cuba lagi."
507507
508508#: qml/Tutorial/TutorialRight.qml:31
509509msgid "To view open apps"
510−msgstr ""
510+msgstr "Untuk melihat apl dibuka"
511511
512512#: qml/Tutorial/TutorialRight.qml:32
513513msgid "Long swipe from the right edge."
514−msgstr ""
514+msgstr "Leret panjang dari pinggir kanan."
515515
516516#: qml/Tutorial/TutorialRight.qml:122
517517msgid "View all your running tasks."
518−msgstr ""
518+msgstr "Lihat semua tugas yang berjalan."
519519
520520#: qml/Wizard/Page.qml:89
521521msgctxt "Button: Go back one page in the Wizard"
522522msgid "Back"
523−msgstr ""
523+msgstr "Kembali"
524524
525525#: qml/Wizard/Pages/10-welcome.qml:27
526526msgid "Hi!"
527−msgstr ""
527+msgstr "Hai"
528528
529529#: qml/Wizard/Pages/10-welcome.qml:44
530530msgid "Welcome to your Ubuntu phone."
531−msgstr ""
531+msgstr "Selamat datang ke telefon Ubuntu anda."
532532
533533#: qml/Wizard/Pages/10-welcome.qml:52
534534msgid "Let’s get started."
535−msgstr ""
535+msgstr "Mari mulakan."
536536
537537#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:128
538538#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
539539#: qml/Wizard/Pages/60-reporting.qml:50 qml/Wizard/Pages/passwd-confirm.qml:82
540540#: qml/Wizard/Pages/passwd-set.qml:90
541541msgid "Continue"
542−msgstr ""
542+msgstr "Teruskan"
543543
544544#: qml/Wizard/Pages/20-sim.qml:25
545545msgid "Add a SIM card and restart your device"
546−msgstr ""
546+msgstr "Tambah kad SIM dan mulakan semula peranti anda"
547547
548548#: qml/Wizard/Pages/20-sim.qml:59
549549msgid "Without it, you won’t be able to make calls or use text messaging."
550550msgstr ""
551+"Tanpanya, anda tidak boleh membuat panggilan atau guna pemesejan teks."
551552
552553#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
553554msgid "Skip"
554−msgstr ""
555+msgstr "Langkau"
555556
556557#: qml/Wizard/Pages/30-passwd-type.qml:39
557558msgid "Lock security"
558−msgstr ""
559+msgstr "Kunci keselamatan"
559560
560561#: qml/Wizard/Pages/30-passwd-type.qml:74
561562msgid "Please select how you’d like to unlock your phone."
562−msgstr ""
563+msgstr "Sila pilih bagaimana anda mahu membuka telefon anda."
563564
564565#: qml/Wizard/Pages/30-passwd-type.qml:97
565566msgctxt "Label: Type of security method"
566567msgid "Swipe"
567−msgstr ""
568+msgstr "Leret"
568569
569570#: qml/Wizard/Pages/30-passwd-type.qml:98
570571msgctxt "Label: Description of security method"
571572msgid "No security"
572−msgstr ""
573+msgstr "Tanpa keselamatan"
573574
574575#: qml/Wizard/Pages/30-passwd-type.qml:100
575576msgctxt "Label: Type of security method"
576577msgid "Passcode"
577−msgstr ""
578+msgstr "Kod laluan"
578579
579580#: qml/Wizard/Pages/30-passwd-type.qml:101
580581msgctxt "Label: Description of security method"
581582msgid "4 digits only"
582−msgstr ""
583+msgstr "4 digit sahaja"
583584
584585#: qml/Wizard/Pages/30-passwd-type.qml:103
585586msgctxt "Label: Type of security method"
586587msgid "Passphrase"
587−msgstr ""
588+msgstr "Frasa laluan"
588589
589590#: qml/Wizard/Pages/30-passwd-type.qml:104
590591msgctxt "Label: Description of security method"
591592msgid "Numbers and letters"
592−msgstr ""
593+msgstr "Nombor dan abjad"
593594
594595#: qml/Wizard/Pages/40-wifi.qml:29
595596msgid "Connect to Wi‑Fi"
596−msgstr ""
597+msgstr "Sambung ke Wi-Fi"
597598
598599#: qml/Wizard/Pages/40-wifi.qml:168
599600msgid "Available networks…"
600−msgstr ""
601+msgstr "Rangkaian tersedia..."
601602
602603#: qml/Wizard/Pages/40-wifi.qml:169
603604msgid "No available networks."
604−msgstr ""
605+msgstr "Tiada rangkaian tersedia."
605606
606607#: qml/Wizard/Pages/50-location.qml:27
607608msgid "Location"
608−msgstr ""
609+msgstr "Lokasi"
609610
610611#: qml/Wizard/Pages/50-location.qml:62
611612msgid "Let the phone detect your location:"
612−msgstr ""
613+msgstr "Biarkan telefon mengesan lokasi anda:"
613614
614615#: qml/Wizard/Pages/50-location.qml:69
615616msgid "Using GPS only (less accurate)"
616−msgstr ""
617+msgstr "Hanya gunakan GPS (kurang tepat)"
617618
618619#: qml/Wizard/Pages/50-location.qml:86
619620msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
620621msgstr ""
622+"Gunakan GPS, Wi-Fi awanama dan maklumat rangkaian selular (disarankan)"
621623
622624#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
623625#: qml/Wizard/Pages/50-location.qml:103
@@ -625,83 +627,89 @@ msgid ""
625627"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
626628"conditions</a>."
627629msgstr ""
630+"Dengan memilih pilihan ini anda menyetujui <a href='#'>terma dan syarat</a> "
631+"Nokia HERE."
628632
629633#: qml/Wizard/Pages/50-location.qml:112
630634msgid "Not at all"
631−msgstr ""
635+msgstr "Tidak sama sekali"
632636
633637#: qml/Wizard/Pages/50-location.qml:124
634638msgid "You can change your mind later in <b>System Settings</b>."
635−msgstr ""
639+msgstr "Anda boleh mengubahnya kemudian di dalam <b>Tetapan Sistem</b>."
636640
637641#: qml/Wizard/Pages/60-reporting.qml:24
638642msgid "Improving your experience"
639−msgstr ""
643+msgstr "Menambahbaik pengalaman anda"
640644
641645#: qml/Wizard/Pages/60-reporting.qml:36
642646msgid ""
643647"Your phone is set up to automatically report errors to Canonical and its "
644648"partners, the makers of the operating system."
645649msgstr ""
650+"Telefon anda ditetapkan secara automatik melaporkan ralat kepada Canonical "
651+"dan rakannya, pencipta sistem pengoperasian ini."
646652
647653#: qml/Wizard/Pages/60-reporting.qml:43
648654msgid ""
649655"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
650656"Privacy</b>"
651657msgstr ""
658+"Ia boleh dilumpuhkan di dalam <b>Tetapan Sistem</b> di bawah <b>Keselamatan "
659+"&amp; Kerahsiaan</b>"
652660
653661#: qml/Wizard/Pages/80-finished.qml:24
654662msgid "All done"
655−msgstr ""
663+msgstr "Semua selesai"
656664
657665#: qml/Wizard/Pages/80-finished.qml:39
658666msgid "Nice work!"
659−msgstr ""
667+msgstr "Selesai!"
660668
661669#: qml/Wizard/Pages/80-finished.qml:46
662670msgid "Your phone is now ready to use."
663−msgstr ""
671+msgstr "Telefon anda kini boleh digunakan."
664672
665673#: qml/Wizard/Pages/80-finished.qml:53
666674msgid "Finish"
667−msgstr ""
675+msgstr "Selesai"
668676
669677#: qml/Wizard/Pages/here-terms.qml:27
670678msgid "Terms & Conditions"
671−msgstr ""
679+msgstr "Terma & Syarat"
672680
673681#: qml/Wizard/Pages/passwd-confirm.qml:49
674682msgid "Confirm passphrase"
675−msgstr ""
683+msgstr "Sahkan frasa laluan"
676684
677685#: qml/Wizard/Pages/passwd-confirm.qml:50
678686msgid "Confirm passcode"
679−msgstr ""
687+msgstr "Sahkan kod laluan"
680688
681689#: qml/Wizard/Pages/passwd-confirm.qml:53
682690#: qml/Wizard/Pages/passwd-confirm.qml:54
683691msgid "Please try again."
684−msgstr ""
692+msgstr "Sila cuba lagi."
685693
686694#: qml/Wizard/Pages/passwd-set.qml:61
687695msgid "Choose your passcode"
688−msgstr ""
696+msgstr "Pilih kod laluan anda"
689697
690698#: qml/Wizard/Pages/passwd-set.qml:68
691699msgid "Passphrase must be 4 characters long"
692−msgstr ""
700+msgstr "Frasa laluan mestilah sebanyak 4 aksara"
693701
694702#. Translators: This is the arrow for "Back" buttons
695703#: qml/Wizard/StackButton.qml:39
696704#, qt-format
697705msgid "〈 %1"
698−msgstr ""
706+msgstr "〈 %1"
699707
700708#. Translators: This is the arrow for "Forward" buttons
701709#: qml/Wizard/StackButton.qml:42
702710#, qt-format
703711msgid "%1 〉"
704−msgstr ""
712+msgstr "%1 〉"
705713
706714#~ msgid "Top edge"
707715#~ msgstr "Pinggir atas"
po/my.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/nb.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/nl.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:38+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/nn.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/oc.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/or.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/pa.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/pl.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
1818"|| n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
20−"X-Generator: Launchpad (build 17628)\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
20+"X-Generator: Launchpad (build 17686)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:112
2323msgid "Password: "
po/pt.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-30 06:14+0000\n"
19−"X-Generator: Launchpad (build 17646)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/pt_BR.po+12−12
@@ -8,15 +8,15 @@ msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-07-17 10:10+0200\n"
11−"PO-Revision-Date: 2015-05-04 21:50+0000\n"
12−"Last-Translator: Tiago Hillebrandt <tiagohillebrandt@gmail.com>\n"
11+"PO-Revision-Date: 2015-08-05 04:40+0000\n"
12+"Last-Translator: Julio Alexander Sieg <julio.sieg@gmail.com>\n"
1313"Language-Team: Brazilian Portuguese <pt_BR@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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -398,32 +398,32 @@ msgstr "Nada está tocando"
398398#, qt-format
399399msgid "%1 hour"
400400msgid_plural "%1 hours"
401−msgstr[0] ""
402−msgstr[1] ""
401+msgstr[0] "%1 hora"
402+msgstr[1] "%1 horas"
403403
404404#: qml/Panel/Indicators/MenuItemFactory.qml:772
405405#, qt-format
406406msgid "%1 minute"
407407msgid_plural "%1 minutes"
408−msgstr[0] ""
409−msgstr[1] ""
408+msgstr[0] "%1 minuto"
409+msgstr[1] "%1 minutos"
410410
411411#: qml/Panel/Indicators/MenuItemFactory.qml:777
412412#, qt-format
413413msgid "%1 second"
414414msgid_plural "%1 seconds"
415−msgstr[0] ""
416−msgstr[1] ""
415+msgstr[0] "%1 segundo"
416+msgstr[1] "%1 segundos"
417417
418418#: qml/Panel/Indicators/MenuItemFactory.qml:780
419419msgid "0 seconds"
420−msgstr ""
420+msgstr "0 segundo"
421421
422422#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
423423#: qml/Panel/Indicators/MenuItemFactory.qml:782
424424#, qt-format
425425msgid "%1 remaining"
426−msgstr ""
426+msgstr "%1 restantes"
427427
428428#: qml/Panel/Indicators/MenuItemFactory.qml:788
429429msgid "In queue…"
po/ro.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
1818"== 0) && (n != 0))) ? 2: 1));\n"
19−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
20−"X-Generator: Launchpad (build 17628)\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
20+"X-Generator: Launchpad (build 17686)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:112
2323msgid "Password: "
po/ru.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
20−"X-Generator: Launchpad (build 17628)\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
20+"X-Generator: Launchpad (build 17686)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:112
2323msgid "Password: "
po/shn.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=(n == 1) ? 0 : 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/si.po+75−13
@@ -15,12 +15,12 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
23−msgstr ""
23+msgstr "මුරපදය: "
2424
2525#: plugins/Unity/Launcher/launcheritem.cpp:45
2626#: plugins/Unity/Launcher/launcheritem.cpp:100
@@ -152,7 +152,7 @@ msgstr ""
152152#: qml/Components/Dialogs.qml:86 qml/Components/Dialogs.qml:117
153153#: qml/Components/Dialogs.qml:173
154154msgid "Cancel"
155−msgstr ""
155+msgstr "අවලංගු කරන්න"
156156
157157#: qml/Components/Dialogs.qml:98
158158msgctxt "Title: Reboot/Shut down dialog"
@@ -161,7 +161,7 @@ msgstr ""
161161
162162#: qml/Components/Dialogs.qml:99
163163msgid "Are you sure you want to shut down?"
164−msgstr ""
164+msgstr "නිවාදැමිම තහවුරු කරන්න"
165165
166166#: qml/Components/Dialogs.qml:101
167167msgctxt "Button: Reboot the system"
@@ -180,15 +180,15 @@ msgstr ""
180180
181181#: qml/Components/Dialogs.qml:130
182182msgid "Are you sure you want to reboot?"
183−msgstr ""
183+msgstr "යළි පණගැන්වීම තහවුරු කරන්න"
184184
185185#: qml/Components/Dialogs.qml:132
186186msgid "No"
187−msgstr ""
187+msgstr "නැත"
188188
189189#: qml/Components/Dialogs.qml:138
190190msgid "Yes"
191−msgstr ""
191+msgstr "ඔව්"
192192
193193#: qml/Components/Dialogs.qml:152
194194msgctxt "Title: Power off/Restart dialog"
@@ -200,6 +200,8 @@ msgid ""
200200"Are you sure you would like\n"
201201"to power off?"
202202msgstr ""
203+"පරිගණකය වසාදැමිම\n"
204+"ඔබ තහවුරු කරන්නේද?"
203205
204206#: qml/Components/Dialogs.qml:155
205207msgctxt "Button: Power off the system"
@@ -217,7 +219,7 @@ msgstr ""
217219
218220#: qml/Components/Lockscreen.qml:245
219221msgid "Emergency Call"
220−msgstr ""
222+msgstr "හදිසි ඇමතුම"
221223
222224#: qml/Components/Lockscreen.qml:277
223225msgid "OK"
@@ -269,15 +271,15 @@ msgstr ""
269271
270272#: qml/Dash/Previews/PreviewRatingInput.qml:84
271273msgid "Rate this"
272−msgstr ""
274+msgstr "මෙය අගය කරන්න"
273275
274276#: qml/Dash/Previews/PreviewRatingInput.qml:129
275277msgid "Add a review"
276−msgstr ""
278+msgstr "විචාරයක් ලියන්න"
277279
278280#: qml/Dash/Previews/PreviewRatingInput.qml:169
279281msgid "Send"
280−msgstr ""
282+msgstr "යවන්න"
281283
282284#: qml/Dash/PullToRefreshScopeStyle.qml:55
283285msgid "Pull to refresh…"
@@ -372,7 +374,7 @@ msgstr ""
372374
373375#: qml/Notifications/NotificationMenuItemFactory.qml:128
374376msgid "Show password"
375−msgstr ""
377+msgstr "මුරපදය පෙන්වන්න"
376378
377379#: qml/Panel/ActiveCallHint.qml:79
378380msgid "Tap to return to call..."
@@ -696,3 +698,63 @@ msgstr ""
696698#, qt-format
697699msgid "%1 〉"
698700msgstr ""
701+
702+#~ msgid "Left edge"
703+#~ msgstr "වම් අන්තය"
704+
705+#~ msgid "Try swiping from the right edge to unlock the phone"
706+#~ msgstr "දුරකථනය අගුලුහරින්න දකුණු අන්තයේ සිට අදින්න"
707+
708+#~ msgid "Right edge"
709+#~ msgstr "දකුණු අන්තය"
710+
711+#~ msgid "Close"
712+#~ msgstr "වසන්න"
713+
714+#~ msgid "Skip intro"
715+#~ msgstr "හැඳින්වීම මඟහරින්න"
716+
717+#~ msgid "Loading. Please Wait..."
718+#~ msgstr "පූරණය වෙමින්. මඳක් රැඳෙන්න..."
719+
720+#~ msgid "Speaking..."
721+#~ msgstr "කතාකරමින්..."
722+
723+#~ msgid "Speak Now..."
724+#~ msgstr "දැන් කථා කරන්න..."
725+
726+#~ msgid "Confirm"
727+#~ msgstr "ස්ථීර කරන්න"
728+
729+#~ msgid "Top edge"
730+#~ msgstr "ඉහළ අන්තය"
731+
732+#~ msgid "Try swiping from the top edge to access the indicators"
733+#~ msgstr "දර්ශකවලට ප්‍රවේශවන්න ඉහළ අන්තයේ සිට අදින්න"
734+
735+#~ msgid "Well done"
736+#~ msgstr "කදිමයි"
737+
738+#~ msgid "Search"
739+#~ msgstr "සෙවුම"
740+
741+#~ msgid "Type or say a command"
742+#~ msgstr "විධානයක් ඇතුල්කරන්න හෝ කියන්න"
743+
744+#~ msgid "Log out"
745+#~ msgstr "ඉවත් වන්න"
746+
747+#~ msgid "Reboot"
748+#~ msgstr "යළි පණගන්වන්න"
749+
750+#~ msgid "Shut down"
751+#~ msgstr "පරිගණකය නිවා දමන්න"
752+
753+#~ msgid "Power"
754+#~ msgstr "බලය"
755+
756+#~ msgid "Restart"
757+#~ msgstr "පරිගණකය යළි පණගන්වන්න"
758+
759+#~ msgid "Power off"
760+#~ msgstr "පරිගණකය නිවා දමන්න"
po/sk.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/sl.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
1818"n%100==4 ? 3 : 0);\n"
19−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
20−"X-Generator: Launchpad (build 17628)\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
20+"X-Generator: Launchpad (build 17686)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:112
2323msgid "Password: "
po/sq.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:38+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/sr.po+2−2
@@ -17,8 +17,8 @@ msgstr ""
1717"Content-Transfer-Encoding: 8bit\n"
1818"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1919"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
20−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
21−"X-Generator: Launchpad (build 17628)\n"
20+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
21+"X-Generator: Launchpad (build 17686)\n"
2222"Language: sr\n"
2323
2424#: plugins/LightDM/Greeter.cpp:112
po/sv.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020"Language: sv\n"
2121
2222#: plugins/LightDM/Greeter.cpp:112
po/sw.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/ta.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020"Language: ta\n"
2121
2222#: plugins/LightDM/Greeter.cpp:112
po/te.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/th.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/tr.po+40−40
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -37,14 +37,14 @@ msgstr "Kısayol iğnesini kaldır"
3737#. en_US example: "Yesterday\u2003%l:%M %p" --> "Yesterday 1:00 PM"
3838#: plugins/Utils/relativetimeformatter.cpp:157
3939msgid "Yesterday %l:%M %p"
40−msgstr ""
40+msgstr "Dün %l:%M %p"
4141
4242#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
4343#. This format string is used for showing, on a 12-hour clock, times that happened today.
4444#. en_US example: "%l:%M %p" --> "1:00 PM"
4545#: plugins/Utils/relativetimeformatter.cpp:164
4646msgid "%l:%M %p"
47−msgstr ""
47+msgstr "%l:%M %p"
4848
4949#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
5050#. This format string is used for showing, on a 12-hour clock, events/appointments that happen tomorrow.
@@ -52,7 +52,7 @@ msgstr ""
5252#. en_US example: "Tomorrow\u2003%l:%M %p" --> "Tomorrow 1:00 PM"
5353#: plugins/Utils/relativetimeformatter.cpp:172
5454msgid "Tomorrow %l:%M %p"
55−msgstr ""
55+msgstr "Yarın %l:%M %p"
5656
5757#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
5858#. This format string is used for showing, on a 12-hour clock, times that happened in the last week.
@@ -60,7 +60,7 @@ msgstr ""
6060#. en_US example: "%a\u2003%l:%M %p" --> "Fri 1:00 PM"
6161#: plugins/Utils/relativetimeformatter.cpp:181
6262msgid "%a %l:%M %p"
63−msgstr ""
63+msgstr "%l:%M %p %a"
6464
6565#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
6666#. This format string is used for showing, on a 12-hour clock, times that happened before a week from now.
@@ -69,7 +69,7 @@ msgstr ""
6969#. en_GB example: "%a %b %d\u2003%l:%M %p" --> "Fri 31 Oct 1:00 PM"
7070#: plugins/Utils/relativetimeformatter.cpp:190
7171msgid "%a %d %b %l:%M %p"
72−msgstr ""
72+msgstr "%a %d %b %l:%M %p"
7373
7474#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
7575#. This format string is used for showing, on a 24-hour clock, times that happen yesterday.
@@ -77,14 +77,14 @@ msgstr ""
7777#. en_US example: "Yesterday\u2003%l:%M %p" --> "Yesterday 13:00"
7878#: plugins/Utils/relativetimeformatter.cpp:201
7979msgid "Yesterday %H:%M"
80−msgstr ""
80+msgstr "Dün %H:%M"
8181
8282#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
8383#. This format string is used for showing, on a 24-hour clock, times that happened today.
8484#. en_US example: "%H:%M" --> "13:00"
8585#: plugins/Utils/relativetimeformatter.cpp:208
8686msgid "%H:%M"
87−msgstr ""
87+msgstr "%H:%M"
8888
8989#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
9090#. This format string is used for showing, on a 24-hour clock, events/appointments that happen tomorrow.
@@ -92,7 +92,7 @@ msgstr ""
9292#. en_US example: "Tomorrow\u2003%l:%M %p" --> "Tomorrow 13:00"
9393#: plugins/Utils/relativetimeformatter.cpp:216
9494msgid "Tomorrow %H:%M"
95−msgstr ""
95+msgstr "Yarın %H:%M"
9696
9797#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
9898#. This format string is used for showing, on a 24-hour clock, times that happened in the last week.
@@ -100,7 +100,7 @@ msgstr ""
100100#. en_US example: "%a\u2003%H:%M" --> "Fri 13:00"
101101#: plugins/Utils/relativetimeformatter.cpp:225
102102msgid "%a %H:%M"
103−msgstr ""
103+msgstr "%H:%M %a"
104104
105105#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
106106#. This format string is used for showing, on a 24-hour clock, times that happened before a week from now.
@@ -109,7 +109,7 @@ msgstr ""
109109#. en_GB example: "%a %b %d\u2003%H:%M" --> "Fri 31 Oct 13:00"
110110#: plugins/Utils/relativetimeformatter.cpp:234
111111msgid "%a %d %b %H:%M"
112−msgstr ""
112+msgstr "%a %b %d\\u2003%H:%M"
113113
114114#: qml/Components/DelayedLockscreen.qml:49
115115msgid "Device Locked"
@@ -133,7 +133,7 @@ msgstr[1] "Lütfen %1 dakika bekleyin ve yeniden deneyin..."
133133#: qml/Components/Dialogs.qml:69
134134msgctxt "Title: Lock/Log out dialog"
135135msgid "Log out"
136−msgstr ""
136+msgstr "Oturumu kapat"
137137
138138#: qml/Components/Dialogs.qml:70
139139msgid "Are you sure you want to log out?"
@@ -142,12 +142,12 @@ msgstr "Oturumu kapatmak istediğinize emin misiniz?"
142142#: qml/Components/Dialogs.qml:72
143143msgctxt "Button: Lock the system"
144144msgid "Lock"
145−msgstr ""
145+msgstr "Kilitle"
146146
147147#: qml/Components/Dialogs.qml:79
148148msgctxt "Button: Log out from the system"
149149msgid "Log Out"
150−msgstr ""
150+msgstr "Oturumu Kapat"
151151
152152#: qml/Components/Dialogs.qml:86 qml/Components/Dialogs.qml:117
153153#: qml/Components/Dialogs.qml:173
@@ -157,7 +157,7 @@ msgstr "İptal"
157157#: qml/Components/Dialogs.qml:98
158158msgctxt "Title: Reboot/Shut down dialog"
159159msgid "Shut down"
160−msgstr ""
160+msgstr "Kapat"
161161
162162#: qml/Components/Dialogs.qml:99
163163msgid "Are you sure you want to shut down?"
@@ -171,7 +171,7 @@ msgstr "Yeniden başlat"
171171#: qml/Components/Dialogs.qml:109
172172msgctxt "Button: Shut down the system"
173173msgid "Shut down"
174−msgstr ""
174+msgstr "Kapat"
175175
176176#: qml/Components/Dialogs.qml:129
177177msgctxt "Title: Reboot dialog"
@@ -204,7 +204,7 @@ msgstr "Bilgisayarı kapatmak istediğinize emin misiniz?"
204204#: qml/Components/Dialogs.qml:155
205205msgctxt "Button: Power off the system"
206206msgid "Power off"
207−msgstr ""
207+msgstr "Sistemi Kapat"
208208
209209#: qml/Components/Dialogs.qml:164
210210msgctxt "Button: Restart the system"
@@ -309,7 +309,7 @@ msgstr "Kilidi Aç"
309309
310310#: qml/Greeter/LoginList.qml:236
311311msgid "Retry"
312−msgstr ""
312+msgstr "Tekrar Dene"
313313
314314#: qml/Greeter/LoginList.qml:237
315315msgid "Tap to unlock"
@@ -368,7 +368,7 @@ msgstr "Üzgünüm, hatalı parola"
368368#: qml/Greeter/NarrowView.qml:121
369369msgctxt "passphrase"
370370msgid "Please re-enter"
371−msgstr ""
371+msgstr "Lütfen yeniden girin"
372372
373373#: qml/Greeter/NarrowView.qml:122
374374msgid "Sorry, incorrect passcode"
@@ -394,32 +394,32 @@ msgstr "Hiçbir şey çalmıyor"
394394#, qt-format
395395msgid "%1 hour"
396396msgid_plural "%1 hours"
397−msgstr[0] ""
398−msgstr[1] ""
397+msgstr[0] "%1 saat"
398+msgstr[1] "%1 saat"
399399
400400#: qml/Panel/Indicators/MenuItemFactory.qml:772
401401#, qt-format
402402msgid "%1 minute"
403403msgid_plural "%1 minutes"
404−msgstr[0] ""
405−msgstr[1] ""
404+msgstr[0] "%1 dakika"
405+msgstr[1] "%1 dakika"
406406
407407#: qml/Panel/Indicators/MenuItemFactory.qml:777
408408#, qt-format
409409msgid "%1 second"
410410msgid_plural "%1 seconds"
411−msgstr[0] ""
412−msgstr[1] ""
411+msgstr[0] "%1 saniye"
412+msgstr[1] "%1 saniye"
413413
414414#: qml/Panel/Indicators/MenuItemFactory.qml:780
415415msgid "0 seconds"
416−msgstr ""
416+msgstr "0 saniye"
417417
418418#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
419419#: qml/Panel/Indicators/MenuItemFactory.qml:782
420420#, qt-format
421421msgid "%1 remaining"
422−msgstr ""
422+msgstr "%1 kaldı"
423423
424424#: qml/Panel/Indicators/MenuItemFactory.qml:788
425425msgid "In queue…"
@@ -481,23 +481,23 @@ msgstr "Devam etmek için buraya dokunun."
481481
482482#: qml/Tutorial/TutorialContent.qml:81
483483msgid "Click here to finish."
484−msgstr ""
484+msgstr "Bitirmek için buraya tıklayın."
485485
486486#: qml/Tutorial/TutorialLeftFinish.qml:24
487487msgid "These are the shortcuts to favorite apps"
488−msgstr ""
488+msgstr "Bunlar gözde uygulamalarınız için kısayollardır"
489489
490490#: qml/Tutorial/TutorialLeft.qml:26
491491msgid "Open the launcher"
492−msgstr ""
492+msgstr "Başlatıcıyı aç"
493493
494494#: qml/Tutorial/TutorialLeft.qml:27
495495msgid "Short swipe from the left edge."
496−msgstr ""
496+msgstr "Sol kenardan kısa kaydırma"
497497
498498#: qml/Tutorial/TutorialPage.qml:178
499499msgid "You almost got it!"
500−msgstr ""
500+msgstr "Neredeyse yaptınız!"
501501
502502#: qml/Tutorial/TutorialPage.qml:195
503503msgid "Try again."
@@ -509,7 +509,7 @@ msgstr "Açık uygulamaları görmek için"
509509
510510#: qml/Tutorial/TutorialRight.qml:32
511511msgid "Long swipe from the right edge."
512−msgstr ""
512+msgstr "Sağ kenardan uzan kaydırma"
513513
514514#: qml/Tutorial/TutorialRight.qml:122
515515msgid "View all your running tasks."
@@ -518,7 +518,7 @@ msgstr "Çalışan tüm görevleri incele."
518518#: qml/Wizard/Page.qml:89
519519msgctxt "Button: Go back one page in the Wizard"
520520msgid "Back"
521−msgstr ""
521+msgstr "Geri"
522522
523523#: qml/Wizard/Pages/10-welcome.qml:27
524524msgid "Hi!"
@@ -563,27 +563,27 @@ msgstr "Lütfen telefonunuzun kilidini nasıl açmak istediğinizi seçin."
563563#: qml/Wizard/Pages/30-passwd-type.qml:97
564564msgctxt "Label: Type of security method"
565565msgid "Swipe"
566−msgstr ""
566+msgstr "Kaydır"
567567
568568#: qml/Wizard/Pages/30-passwd-type.qml:98
569569msgctxt "Label: Description of security method"
570570msgid "No security"
571−msgstr ""
571+msgstr "Güvenlik yok"
572572
573573#: qml/Wizard/Pages/30-passwd-type.qml:100
574574msgctxt "Label: Type of security method"
575575msgid "Passcode"
576−msgstr ""
576+msgstr "Parola"
577577
578578#: qml/Wizard/Pages/30-passwd-type.qml:101
579579msgctxt "Label: Description of security method"
580580msgid "4 digits only"
581−msgstr ""
581+msgstr "Yalnızca 4 rakam"
582582
583583#: qml/Wizard/Pages/30-passwd-type.qml:103
584584msgctxt "Label: Type of security method"
585585msgid "Passphrase"
586−msgstr ""
586+msgstr "Parola Metni"
587587
588588#: qml/Wizard/Pages/30-passwd-type.qml:104
589589msgctxt "Label: Description of security method"
po/ug.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/uk.po+3−3
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
20−"X-Generator: Launchpad (build 17628)\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
20+"X-Generator: Launchpad (build 17686)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:112
2323msgid "Password: "
@@ -376,7 +376,7 @@ msgstr "Вибачте, помилковий пароль"
376376#: qml/Greeter/NarrowView.qml:121
377377msgctxt "passphrase"
378378msgid "Please re-enter"
379−msgstr ""
379+msgstr "Введіть ще раз"
380380
381381#: qml/Greeter/NarrowView.qml:122
382382msgid "Sorry, incorrect passcode"
po/ur.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/uz.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/vi.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/xh.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
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: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/zh_CN.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-28 05:40+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/zh_HK.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/zh_TW.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-08-01 05:45+0000\n"
19−"X-Generator: Launchpad (build 17656)\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19+"X-Generator: Launchpad (build 17686)\n"
2020"Language: zh_TW\n"
2121
2222#: plugins/LightDM/Greeter.cpp:112
qml/Components/Unity8Settings.qmlnew file+50
@@ -0,0 +1,50 @@
1+/*
2+ * Copyright (C) 2015 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 GSettings 1.0
19+
20+QtObject {
21+ id: root
22+
23+ property string usageMode: "Staged"
24+
25+ // FIXME: Works around a bug where if we change a Loader's source in response to a GSettings
26+ // property change in the same event loop, the Loader's previously loaded component does not
27+ // get destroyed and its bindings continue to operate!
28+ //
29+ // Shouldn't be needed after
30+ // https://code.launchpad.net/~lukas-kde/gsettings-qt/queued-processing/+merge/259883 gets
31+ // merged.
32+ property var timer: Timer {
33+ interval: 1
34+ onTriggered: { root.usageMode = root.wrapped.usageMode; }
35+ }
36+ property var wrappedConnections: Connections {
37+ target: root.wrapped
38+ ignoreUnknownSignals: true // don't spam us
39+ onUsageModeChanged: { root.timer.start(); }
40+ }
41+ property var wrapped: GSettings {
42+ schema.id: "com.canonical.Unity8"
43+ Component.onCompleted: {
44+ // init the value. it's a dynamic prop, so we have to check first
45+ if (root.usageMode) {
46+ root.usageMode = root.wrapped.usageMode;
47+ }
48+ }
49+ }
50+}
qml/Components/UnityInputInfo/UnityInputInfo.qml+2
@@ -18,6 +18,8 @@ pragma Singleton
1818
1919import QtQuick 2.3
2020import Unity.InputInfo 0.1
21+// Workaround https://bugs.launchpad.net/ubuntu/+source/unity8/+bug/1473471
22+import Ubuntu.Components 1.2
2123
2224Item {
2325 id: root
qml/Dash/GenericScopeView.qml+45−21
@@ -72,28 +72,39 @@ FocusScope {
7272 pageHeaderLoader.item.resetSearch()
7373 }
7474
75− function itemClicked(index, result, item, itemModel, resultsModel, limitedCategoryItemCount, categoryId) {
76− if (itemModel.uri.indexOf("scope://") === 0 || scope.id === "clickscope" || (scope.id === "videoaggregator" && categoryId === "myvideos-getstarted")) {
77− // TODO Technically it is possible that calling activate() will make the scope emit
78− // previewRequested so that we show a preview but there's no scope that does that yet
79− // so it's not implemented
80− scope.activate(result)
81− } else {
82− if (scope.preview(result)) {
83− openPreview(index, resultsModel, limitedCategoryItemCount);
84− }
85− }
75+ property var maybePreviewResult;
76+ property int maybePreviewIndex;
77+ property var maybePreviewResultsModel;
78+ property int maybePreviewLimitedCategoryItemCount;
79+ property string maybePreviewCategoryId;
80+
81+ function clearMaybePreviewData() {
82+ scopeView.maybePreviewResult = undefined;
83+ scopeView.maybePreviewIndex = -1;
84+ scopeView.maybePreviewResultsModel = undefined;
85+ scopeView.maybePreviewLimitedCategoryItemCount = -1;
86+ scopeView.maybePreviewCategoryId = "";
8687 }
8788
88− function itemPressedAndHeld(index, result, itemModel, resultsModel, limitedCategoryItemCount, categoryId) {
89− if (itemModel.uri.indexOf("scope://") !== 0 && !(scope.id === "videoaggregator" && categoryId === "myvideos-getstarted")) {
90− if (scope.preview(result)) {
91− openPreview(index, resultsModel, limitedCategoryItemCount);
92− }
89+ function itemClicked(index, result, itemModel, resultsModel, limitedCategoryItemCount, categoryId) {
90+ scopeView.maybePreviewResult = result;
91+ scopeView.maybePreviewIndex = index;
92+ scopeView.maybePreviewResultsModel = resultsModel;
93+ scopeView.maybePreviewLimitedCategoryItemCount = limitedCategoryItemCount;
94+ scopeView.maybePreviewCategoryId = categoryId;
95+
96+ scope.activate(result, categoryId);
97+ }
98+
99+ function itemPressedAndHeld(index, result, resultsModel, limitedCategoryItemCount, categoryId) {
100+ clearMaybePreviewData();
101+
102+ if (scope.preview(result, categoryId)) {
103+ openPreview(index, resultsModel, limitedCategoryItemCount, categoryId);
93104 }
94105 }
95106
96− function openPreview(index, resultsModel, limitedCategoryItemCount) {
107+ function openPreview(index, resultsModel, limitedCategoryItemCount, categoryId) {
97108 if (limitedCategoryItemCount > 0) {
98109 previewLimitModel.model = resultsModel;
99110 previewLimitModel.limit = limitedCategoryItemCount;
@@ -103,6 +114,7 @@ FocusScope {
103114 }
104115 subPageLoader.initialIndex = -1;
105116 subPageLoader.initialIndex = index;
117+ subPageLoader.categoryId = categoryId;
106118 subPageLoader.openSubPage("preview");
107119 }
108120
@@ -149,6 +161,16 @@ FocusScope {
149161 target: scopeView.scope
150162 onShowDash: subPageLoader.closeSubPage()
151163 onHideDash: subPageLoader.closeSubPage()
164+ onPreviewRequested: { // (QVariant const& result)
165+ if (result === scopeView.maybePreviewResult) {
166+ openPreview(scopeView.maybePreviewIndex,
167+ scopeView.maybePreviewResultsModel,
168+ scopeView.maybePreviewLimitedCategoryItemCount,
169+ scopeView.maybePreviewCategoryId);
170+
171+ clearMaybePreviewData();
172+ }
173+ }
152174 }
153175
154176 Connections {
@@ -357,12 +379,12 @@ FocusScope {
357379
358380 Connections {
359381 target: rendererLoader.item
360− onClicked: {
361− scopeView.itemClicked(index, result, item, itemModel, target.model, categoryItemCount(), baseItem.category);
382+ onClicked: { // (int index, var result, var item, var itemModel)
383+ scopeView.itemClicked(index, result, itemModel, target.model, categoryItemCount(), baseItem.category);
362384 }
363385
364− onPressAndHold: {
365− scopeView.itemPressedAndHeld(index, result, itemModel, target.model, categoryItemCount(), baseItem.category);
386+ onPressAndHold: { // (int index, var result, var itemModel)
387+ scopeView.itemPressedAndHeld(index, result, target.model, categoryItemCount(), baseItem.category);
366388 }
367389
368390 function categoryItemCount() {
@@ -736,6 +758,7 @@ FocusScope {
736758 property var scope: scopeView.scope
737759 property var scopeStyle: scopeView.scopeStyle
738760 property int initialIndex: -1
761+ property string categoryId
739762 property var model: null
740763
741764 readonly property bool processing: item && item.processing || false
@@ -767,6 +790,7 @@ FocusScope {
767790 item.open = Qt.binding(function() { return subPageLoader.open; } )
768791 item.initialIndex = Qt.binding(function() { return subPageLoader.initialIndex; } )
769792 item.model = Qt.binding(function() { return subPageLoader.model; } )
793+ item.categoryId = Qt.binding(function() { return subPageLoader.categoryId; } )
770794 }
771795 open = true;
772796 }
qml/Dash/PreviewListView.qml+2−1
@@ -26,6 +26,7 @@ Item {
2626 property int initialIndex: -1
2727 property var scope: null
2828 property var scopeStyle: null
29+ property string categoryId
2930
3031 property alias showSignatureLine: header.showSignatureLine
3132
@@ -99,7 +100,7 @@ Item {
99100 isCurrent: ListView.isCurrentItem
100101
101102 previewModel: {
102− var previewStack = root.scope.preview(result);
103+ var previewStack = root.scope.preview(result, root.categoryId);
103104 return previewStack.getPreviewModel(0);
104105 }
105106 scopeStyle: root.scopeStyle
qml/Dash/Previews/PreviewActions.qml+1−1
@@ -25,7 +25,7 @@ import Ubuntu.Components 1.1
2525PreviewWidget {
2626 id: root
2727
28− height: row.height + units.gu(1)
28+ implicitHeight: row.height + units.gu(1)
2929
3030 Row {
3131 id: row
qml/Dash/Previews/PreviewAudioPlayback.qml+1−1
@@ -34,7 +34,7 @@ import Ubuntu.Components 0.1
3434
3535PreviewWidget {
3636 id: root
37− height: childrenRect.height
37+ implicitHeight: childrenRect.height
3838
3939 onIsCurrentPreviewChanged: if (!isCurrentPreview) audio.stop()
4040
qml/Dash/Previews/PreviewHeader.qml+1−1
@@ -30,7 +30,7 @@ import "../"
3030PreviewWidget {
3131 id: root
3232
33− height: childrenRect.height
33+ implicitHeight: childrenRect.height
3434
3535 Item {
3636 id: headerRoot
qml/Dash/Previews/PreviewRatingDisplay.qml+1−1
@@ -38,7 +38,7 @@ import "../../Components"
3838
3939PreviewWidget {
4040 id: root
41− height: childrenRect.height
41+ implicitHeight: childrenRect.height
4242
4343 Column {
4444 anchors { left: parent.left; right: parent.right; }
qml/Dash/ScopesList.qml+1−1
@@ -124,7 +124,7 @@ Item {
124124 onRequestFavorite: root.requestFavorite(scopeId, favorite);
125125 onRequestEditMode: root.state = "edit";
126126 onRequestScopeMoveTo: root.requestFavoriteMoveTo(scopeId, index);
127− onRequestActivate: root.scope.activate(result);
127+ onRequestActivate: root.scope.activate(result, categoryId);
128128 onRequestRestore: root.requestRestore(scopeId);
129129 }
130130 }
qml/Launcher/Launcher.qml+2−1
@@ -177,7 +177,8 @@ Item {
177177 }
178178
179179 }
180− MouseArea {
180+
181+ MultiPointTouchArea {
181182 id: closeMouseArea
182183 anchors {
183184 left: launcherDragArea.right
qml/Launcher/LauncherDelegate.qml+12
@@ -24,6 +24,7 @@ Item {
2424 property int count: 0
2525 property bool countVisible: false
2626 property int progress: -1
27+ property bool itemRunning: false
2728 property bool itemFocused: false
2829 property real maxAngle: 0
2930 property bool inverted: false
@@ -216,6 +217,17 @@ Item {
216217 }
217218 }
218219
220+ Image {
221+ objectName: "runningHighlight"
222+ anchors {
223+ left: parent.left
224+ verticalCenter: parent.verticalCenter
225+ }
226+ visible: root.itemRunning
227+ rotation: 180
228+ source: "graphics/focused_app_arrow.png"
229+ }
230+
219231 Image {
220232 objectName: "focusedHighlight"
221233 anchors {
qml/Launcher/LauncherPanel.qml+1
@@ -193,6 +193,7 @@ Rectangle {
193193 count: model.count
194194 countVisible: model.countVisible
195195 progress: model.progress
196+ itemRunning: model.running
196197 itemFocused: model.focused
197198 inverted: root.inverted
198199 alerting: model.alerting
qml/OrientedShell.qml+6−3
@@ -21,6 +21,9 @@ import GSettings 1.0
2121import "Components"
2222import "Components/UnityInputInfo"
2323import "Rotation"
24+// Backup Workaround https://bugs.launchpad.net/ubuntu/+source/unity8/+bug/1473471
25+// in case we remove the UnityInputInfo import
26+import Ubuntu.Components 1.2
2427
2528Rectangle {
2629 id: root
@@ -43,7 +46,7 @@ Rectangle {
4346
4447
4548 // to be overwritten by tests
46− property var usageModeSettings: GSettings { schema.id: "com.canonical.Unity8" }
49+ property var unity8Settings: Unity8Settings {}
4750 property var oskSettings: GSettings { schema.id: "com.canonical.keyboard.maliit" }
4851
4952 property int physicalOrientation: Screen.orientation
@@ -160,9 +163,9 @@ Rectangle {
160163 // TODO: Factor in the connected input devices (eg: physical keyboard, mouse, touchscreen),
161164 // what's the output device (eg: big TV, desktop monitor, phone display), etc.
162165 usageScenario: {
163− if (root.usageModeSettings.usageMode === "Windowed") {
166+ if (root.unity8Settings.usageMode === "Windowed") {
164167 return "desktop";
165− } else if (root.usageModeSettings.usageMode === "Staged") {
168+ } else if (root.unity8Settings.usageMode === "Staged") {
166169 if (deviceConfiguration.category === "phone") {
167170 return "phone";
168171 } else {
qml/Panel/IndicatorItem.qml+3−3
@@ -31,9 +31,9 @@ IndicatorDelegate {
3131 property bool selected: false
3232 property real iconHeight: units.gu(2)
3333 readonly property color color: {
34− if (!expanded) return "#ededed";
35− if (!selected) return "#4c4c4c";
36− return "#ededed";
34+ if (!expanded) return "#ffffff";
35+ if (!selected) return "#888888";
36+ return "#ffffff";
3737 }
3838
3939 signal clicked()
qml/Panel/IndicatorItemRow.qml+1−1
@@ -31,7 +31,7 @@ Item {
3131 property real unitProgress: 0.0
3232 property real selectionChangeBuffer: units.gu(2)
3333 property bool enableLateralChanges: false
34− property color hightlightColor: "#ededed"
34+ property color hightlightColor: "#ffffff"
3535
3636 property real lateralPosition: -1
3737 onLateralPositionChanged: {
qml/Panel/IndicatorsBar.qml+1−1
@@ -123,7 +123,7 @@ Item {
123123 width: parent.width
124124 anchors.bottom: parent.bottom
125125
126− color: "#4c4c4c"
126+ color: "#888888"
127127 opacity: expanded ? 1.0 : 0.0
128128 Behavior on opacity { NumberAnimation { duration: UbuntuAnimation.SnapDuration } }
129129 }
qml/Shell.qml+10−12
@@ -191,12 +191,6 @@ Item {
191191 z: dialogs.z + 10
192192 }
193193
194− Binding {
195− target: ApplicationManager
196− property: "forceDashActive"
197− value: launcher.shown || launcher.dashSwipe
198− }
199−
200194 WindowKeysFilter {
201195 Keys.onPressed: physicalKeysMapper.onKeyPressed(event);
202196 Keys.onReleased: physicalKeysMapper.onKeyReleased(event);
@@ -352,6 +346,16 @@ Item {
352346 property: "beingResized"
353347 value: shell.beingResized
354348 }
349+ Binding {
350+ target: applicationsDisplayLoader.item
351+ property: "keepDashRunning"
352+ value: launcher.shown || launcher.dashSwipe
353+ }
354+ Binding {
355+ target: applicationsDisplayLoader.item
356+ property: "suspended"
357+ value: greeter.shown
358+ }
355359 Binding {
356360 target: applicationsDisplayLoader.item
357361 property: "altTabPressed"
@@ -459,12 +463,6 @@ Item {
459463 }
460464
461465 onEmergencyCall: startLockedApp("dialer-app")
462−
463− Binding {
464− target: ApplicationManager
465− property: "suspended"
466− value: greeter.shown
467− }
468466 }
469467 }
470468
qml/Stages/DesktopStage.qml+13
@@ -39,6 +39,8 @@ Rectangle {
3939 property int shellPrimaryOrientation
4040 property int nativeOrientation
4141 property bool beingResized: false
42+ property bool keepDashRunning: true
43+ property bool suspended: false
4244
4345 // functions to be called from outside
4446 function updateFocusedAppOrientation() { /* TODO */ }
@@ -215,6 +217,17 @@ Rectangle {
215217 }
216218 }
217219
220+ Binding {
221+ target: ApplicationManager.get(index)
222+ property: "requestedState"
223+ // TODO: figure out some lifecycle policy, like suspending minimized apps
224+ // if running on a tablet or something.
225+ // TODO: If the device has a dozen suspended apps because it was running
226+ // in staged mode, when it switches to Windowed mode it will suddenly
227+ // resume all those apps at once. We might want to avoid that.
228+ value: ApplicationInfoInterface.RequestedRunning // Always running for now
229+ }
230+
218231 function maximize() {
219232 minimized = false;
220233 maximized = true;
qml/Stages/PhoneStage.qml+10
@@ -36,6 +36,8 @@ Rectangle {
3636 property bool altTabEnabled: true
3737 property real startScale: 1.1
3838 property real endScale: 0.7
39+ property bool keepDashRunning: true
40+ property bool suspended: false
3941 property int shellOrientationAngle: 0
4042 property int shellOrientation
4143 property int shellPrimaryOrientation
@@ -428,6 +430,14 @@ Rectangle {
428430 dropShadow: spreadView.active || priv.focusedAppDelegateIsDislocated
429431 focusFirstApp: root.focusFirstApp
430432
433+ Binding {
434+ target: appDelegate.application
435+ property: "requestedState"
436+ value: (isDash && root.keepDashRunning) || (!root.suspended && appDelegate.focus)
437+ ? ApplicationInfoInterface.RequestedRunning
438+ : ApplicationInfoInterface.RequestedSuspended
439+ }
440+
431441 readonly property bool isDash: model.appId == "unity8-dash"
432442
433443 z: isDash && !spreadView.active ? -1 : behavioredIndex
qml/Stages/TabletStage.qml+14
@@ -36,6 +36,8 @@ Rectangle {
3636 property bool spreadEnabled: true // If false, animations and right edge will be disabled
3737
3838 property real inverseProgress: 0 // This is the progress for left edge drags, in pixels.
39+ property bool keepDashRunning: true
40+ property bool suspended: false
3941 property int shellOrientationAngle: 0
4042 property int shellOrientation
4143 property int shellPrimaryOrientation
@@ -117,6 +119,7 @@ Rectangle {
117119
118120 QtObject {
119121 id: priv
122+ objectName: "stagesPriv"
120123
121124 property string focusedAppId: ApplicationManager.focusedApplicationId
122125 readonly property var focusedAppDelegate: {
@@ -626,6 +629,17 @@ Rectangle {
626629
627630 readonly property bool isDash: model.appId == "unity8-dash"
628631
632+ Binding {
633+ target: spreadTile.application
634+ property: "requestedState"
635+ value: (spreadTile.isDash && root.keepDashRunning)
636+ ||
637+ (!root.suspended && (model.appId == priv.mainStageAppId
638+ || model.appId == priv.sideStageAppId))
639+ ? ApplicationInfoInterface.RequestedRunning
640+ : ApplicationInfoInterface.RequestedSuspended
641+ }
642+
629643 // FIXME: A regular binding doesn't update any more after closing an app.
630644 // Using a Binding for now.
631645 Binding {
tests/mocks/Unity/Application/ApplicationInfo.cpp+40−6
@@ -30,7 +30,7 @@ ApplicationInfo::ApplicationInfo(const QString &appId, QObject *parent)
3030 : ApplicationInfoInterface(appId, parent)
3131 , m_appId(appId)
3232 , m_stage(MainStage)
33− , m_state(Starting)
33+ , m_state(Stopped)
3434 , m_focused(false)
3535 , m_fullscreen(false)
3636 , m_session(0)
@@ -39,6 +39,7 @@ ApplicationInfo::ApplicationInfo(const QString &appId, QObject *parent)
3939 Qt::InvertedPortraitOrientation |
4040 Qt::InvertedLandscapeOrientation)
4141 , m_rotatesWindowContents(false)
42+ , m_requestedState(RequestedRunning)
4243 , m_manualSurfaceCreation(false)
4344{
4445}
@@ -46,7 +47,7 @@ ApplicationInfo::ApplicationInfo(const QString &appId, QObject *parent)
4647ApplicationInfo::ApplicationInfo(QObject *parent)
4748 : ApplicationInfoInterface(QString(), parent)
4849 , m_stage(MainStage)
49− , m_state(Starting)
50+ , m_state(Stopped)
5051 , m_focused(false)
5152 , m_fullscreen(false)
5253 , m_session(0)
@@ -55,6 +56,7 @@ ApplicationInfo::ApplicationInfo(QObject *parent)
5556 Qt::InvertedPortraitOrientation |
5657 Qt::InvertedLandscapeOrientation)
5758 , m_rotatesWindowContents(false)
59+ , m_requestedState(RequestedRunning)
5860 , m_manualSurfaceCreation(false)
5961{
6062}
@@ -74,7 +76,6 @@ void ApplicationInfo::createSession()
7476
7577void ApplicationInfo::setSession(Session* session)
7678{
77− qDebug() << "Application::setSession - appId=" << appId() << "session=" << session;
7879 if (m_session == session)
7980 return;
8081
@@ -91,6 +92,8 @@ void ApplicationInfo::setSession(Session* session)
9192 m_session->setApplication(this);
9293 m_session->setParent(this);
9394 SessionManager::singleton()->registerSession(m_session);
95+ connect(m_session, &Session::surfaceChanged,
96+ this, &ApplicationInfo::onSessionSurfaceChanged);
9497
9598 if (!m_manualSurfaceCreation) {
9699 QTimer::singleShot(500, m_session, SLOT(createSurface()));
@@ -161,11 +164,12 @@ void ApplicationInfo::setState(State value)
161164 m_state = value;
162165 Q_EMIT stateChanged(value);
163166
164− if (!m_manualSurfaceCreation && m_state == ApplicationInfo::Running) {
167+ if (!m_manualSurfaceCreation && !m_session && m_state == ApplicationInfo::Starting) {
165168 QTimer::singleShot(500, this, SLOT(createSession()));
166169 } else if (m_state == ApplicationInfo::Stopped) {
167− delete m_session;
168− m_session = nullptr;
170+ Session *session = m_session;
171+ setSession(nullptr);
172+ delete session;
169173 }
170174 }
171175}
@@ -213,3 +217,33 @@ void ApplicationInfo::setRotatesWindowContents(bool value)
213217{
214218 m_rotatesWindowContents = value;
215219}
220+
221+ApplicationInfo::RequestedState ApplicationInfo::requestedState() const
222+{
223+ return m_requestedState;
224+}
225+
226+void ApplicationInfo::setRequestedState(RequestedState value)
227+{
228+ if (m_requestedState != value) {
229+ m_requestedState = value;
230+ Q_EMIT requestedStateChanged(m_requestedState);
231+
232+ if (m_requestedState == RequestedRunning && m_state == Suspended) {
233+ setState(Running);
234+ } else if (m_requestedState == RequestedSuspended && m_state == Running) {
235+ setState(Suspended);
236+ }
237+ }
238+}
239+
240+void ApplicationInfo::onSessionSurfaceChanged(MirSurfaceItem* surface)
241+{
242+ if (surface != nullptr && m_state == Starting) {
243+ if (m_requestedState == RequestedRunning) {
244+ setState(Running);
245+ } else {
246+ setState(Suspended);
247+ }
248+ }
249+}
tests/mocks/Unity/Application/ApplicationInfo.h+7
@@ -46,6 +46,9 @@ public:
4646 ApplicationInfo(const QString &appId, QObject *parent = nullptr);
4747 ~ApplicationInfo();
4848
49+ RequestedState requestedState() const override;
50+ void setRequestedState(RequestedState) override;
51+
4952 void setIconId(const QString &iconId);
5053 void setScreenshotId(const QString &screenshotId);
5154
@@ -101,6 +104,9 @@ Q_SIGNALS:
101104public Q_SLOTS:
102105 Q_INVOKABLE void createSession();
103106
107+private Q_SLOTS:
108+ void onSessionSurfaceChanged(MirSurfaceItem*);
109+
104110private:
105111 void setIcon(const QUrl &value);
106112
@@ -116,6 +122,7 @@ private:
116122 Session* m_session;
117123 Qt::ScreenOrientations m_supportedOrientations;
118124 bool m_rotatesWindowContents;
125+ RequestedState m_requestedState;
119126
120127 bool m_manualSurfaceCreation;
121128};
tests/mocks/Unity/Application/ApplicationManager.cpp+2−49
@@ -49,8 +49,6 @@ ApplicationManager *ApplicationManager::singleton()
4949
5050ApplicationManager::ApplicationManager(QObject *parent)
5151 : ApplicationManagerInterface(parent)
52− , m_suspended(false)
53− , m_forceDashActive(false)
5452{
5553 m_roleNames.insert(RoleSession, "session");
5654 m_roleNames.insert(RoleFullscreen, "fullscreen");
@@ -217,7 +215,7 @@ ApplicationInfo* ApplicationManager::startApplication(const QString &appId,
217215 && application->stage() == ApplicationInfo::SideStage) {
218216 application->setStage(ApplicationInfo::MainStage);
219217 }
220− application->setState(ApplicationInfo::Running);
218+ application->setState(ApplicationInfo::Starting);
221219
222220 return application;
223221}
@@ -262,50 +260,6 @@ QString ApplicationManager::focusedApplicationId() const {
262260 return QString();
263261}
264262
265−bool ApplicationManager::suspended() const
266−{
267− return m_suspended;
268−}
269−
270−void ApplicationManager::setSuspended(bool suspended)
271−{
272− ApplicationInfo *focusedApp = findApplication(focusedApplicationId());
273− if (focusedApp) {
274− if (suspended) {
275− focusedApp->setState(ApplicationInfo::Suspended);
276− } else {
277− focusedApp->setState(ApplicationInfo::Running);
278− }
279− }
280− m_suspended = suspended;
281− Q_EMIT suspendedChanged();
282−}
283−
284−bool ApplicationManager::forceDashActive() const
285−{
286− return m_forceDashActive;
287−}
288−
289−void ApplicationManager::setForceDashActive(bool forceDashActive)
290−{
291− if (m_forceDashActive == forceDashActive) {
292− return;
293− }
294−
295− ApplicationInfo *dash = findApplication("unity8-dash");
296− if (dash) {
297− if (forceDashActive) {
298− dash->setState(ApplicationInfo::Running);
299− } else {
300− if (!dash->focused()) {
301− dash->setState(ApplicationInfo::Suspended);
302− }
303− }
304− }
305− m_forceDashActive = forceDashActive;
306− Q_EMIT forceDashActiveChanged();
307−}
308−
309263bool ApplicationManager::focusApplication(const QString &appId)
310264{
311265 ApplicationInfo *application = findApplication(appId);
@@ -316,13 +270,11 @@ bool ApplicationManager::focusApplication(const QString &appId)
316270 for (ApplicationInfo *app : m_runningApplications) {
317271 if (app->focused()) {
318272 app->setFocused(false);
319− app->setState(ApplicationInfo::Suspended);
320273 }
321274 }
322275
323276 // focus this app
324277 application->setFocused(true);
325− application->setState(ApplicationInfo::Running);
326278
327279 // move app to top of stack
328280 move(m_runningApplications.indexOf(application), 0);
@@ -394,6 +346,7 @@ void ApplicationManager::buildListOfAvailableApplications()
394346 application->setScreenshotId("gallery");
395347 application->setIconId("gallery");
396348 application->setFullscreen(true);
349+ application->setStage(ApplicationInfo::MainStage);
397350 m_availableApplications.append(application);
398351
399352 application = new ApplicationInfo(this);
tests/mocks/Unity/Application/ApplicationManager.h−7
@@ -69,11 +69,6 @@ class ApplicationManager : public ApplicationManagerInterface {
6969 Q_INVOKABLE bool stopApplication(const QString &appId) override;
7070
7171 QString focusedApplicationId() const override;
72− bool suspended() const override;
73− void setSuspended(bool suspended) override;
74−
75− bool forceDashActive() const override;
76− void setForceDashActive(bool forceDashActive) override;
7772
7873 // Only for testing
7974 QStringList availableApplications();
@@ -96,8 +91,6 @@ class ApplicationManager : public ApplicationManagerInterface {
9691 void remove(ApplicationInfo* application);
9792 void buildListOfAvailableApplications();
9893 void onWindowCreated();
99− bool m_suspended;
100− bool m_forceDashActive;
10194 QList<ApplicationInfo*> m_runningApplications;
10295 QList<ApplicationInfo*> m_availableApplications;
10396 QTimer m_windowCreatedTimer;
tests/mocks/Unity/CMakeLists.txt+1−1
@@ -7,7 +7,7 @@ add_subdirectory(Notifications)
77add_subdirectory(DashCommunicator)
88
99pkg_search_module(GOBJECT gobject-2.0 REQUIRED)
10−pkg_check_modules(SCOPES_API REQUIRED unity-shell-scopes=6)
10+pkg_check_modules(SCOPES_API REQUIRED unity-shell-scopes=7)
1111
1212include_directories(
1313 ${CMAKE_CURRENT_BINARY_DIR}
tests/mocks/Unity/fake_scope.cpp+5−3
@@ -181,18 +181,20 @@ void Scope::setNoResultsHint(const QString& str)
181181 }
182182}
183183
184−void Scope::activate(QVariant const& result)
184+void Scope::activate(QVariant const& result, QString const& categoryId)
185185{
186− qDebug() << "Called activate on scope" << m_id << "with result" << result;
186+ qDebug() << "Called activate on scope" << m_id << "with result" << result << "and category" << categoryId;
187187 if (result.toString() == "Result.2.2") {
188188 Scopes *scopes = dynamic_cast<Scopes*>(parent());
189189 m_openScope = scopes->getScopeFromAll("MockScope9");
190190 scopes->addTempScope(m_openScope);
191191 Q_EMIT openScope(m_openScope);
192+ } else {
193+ Q_EMIT previewRequested(result);
192194 }
193195}
194196
195−PreviewStack* Scope::preview(QVariant const& result)
197+PreviewStack* Scope::preview(QVariant const& result, QString const& /*categoryId*/)
196198{
197199 Q_UNUSED(result);
198200
tests/mocks/Unity/fake_scope.h+2−2
@@ -60,8 +60,8 @@ public:
6060 Q_INVOKABLE void setName(const QString &name); // This is not invokable in the Interface, here for testing benefits
6161 Q_INVOKABLE void setSearchInProgress(const bool inProg); // This is not invokable in the Interface, here for testing benefits
6262
63− Q_INVOKABLE void activate(QVariant const& result) override;
64− Q_INVOKABLE PreviewStack* preview(QVariant const& result) override;
63+ Q_INVOKABLE void activate(QVariant const& result, QString const& categoryId) override;
64+ Q_INVOKABLE PreviewStack* preview(QVariant const& result, QString const& categoryId) override;
6565 Q_INVOKABLE void cancelActivation() override;
6666 Q_INVOKABLE void closeScope(unity::shell::scopes::ScopeInterface* scope) override;
6767
tests/mocks/Unity/fake_scopesoverview.cpp+1−1
@@ -41,7 +41,7 @@ void ScopesOverview::setSearchQuery(const QString& search_query)
4141 Q_EMIT categoriesChanged();
4242}
4343
44−Q_INVOKABLE void ScopesOverview::activate(QVariant const& result)
44+Q_INVOKABLE void ScopesOverview::activate(QVariant const& result, QString const& /*categoryId*/)
4545{
4646 Scopes *scopes = dynamic_cast<Scopes*>(parent());
4747 if (scopes->getScope(result.toString())) {
tests/mocks/Unity/fake_scopesoverview.h+1−1
@@ -32,7 +32,7 @@ public:
3232 ScopesOverview(Scopes* parent = 0);
3333
3434 void setSearchQuery(const QString& search_query) override;
35− Q_INVOKABLE void activate(QVariant const& result) override;
35+ Q_INVOKABLE void activate(QVariant const& result, QString const& categoryId) override;
3636
3737 // This is implementation detail
3838 void setFavorite(Scope *scope, bool favorite);
tests/plugins/Greeter/Unity/Launcher/CMakeLists.txt−1
@@ -1,5 +1,4 @@
11pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=7)
2−pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=6)
32
43include_directories(
54 ${CMAKE_CURRENT_SOURCE_DIR}
tests/plugins/Unity/Launcher/launchermodeltest.cpp+19−4
@@ -39,6 +39,9 @@ class MockApp: public unity::shell::application::ApplicationInfoInterface
3939 Q_OBJECT
4040public:
4141 MockApp(const QString &appId, QObject *parent = 0): ApplicationInfoInterface(appId, parent), m_appId(appId), m_focused(false) { }
42+
43+ RequestedState requestedState() const override { return RequestedRunning; }
44+ void setRequestedState(RequestedState) override {}
4245 QString appId() const override { return m_appId; }
4346 QString name() const override { return "mock"; }
4447 QString comment() const override { return "this is a mock"; }
@@ -117,10 +120,6 @@ public:
117120 endRemoveRows();
118121 }
119122 bool requestFocusApplication(const QString &appId) override { Q_UNUSED(appId); return true; }
120− bool suspended() const override { return false; }
121− void setSuspended(bool) override {}
122− bool forceDashActive() const override { return false; }
123− void setForceDashActive(bool) override {}
124123
125124private:
126125 QList<MockApp*> m_list;
@@ -299,6 +298,22 @@ private Q_SLOTS:
299298 QCOMPARE(launcherModel->rowCount(QModelIndex()), 1);
300299 }
301300
301+ void testApplicationRunning() {
302+ launcherModel->pin("abs-icon");
303+ launcherModel->pin("no-icon");
304+
305+ QCOMPARE(launcherModel->get(0)->running(), true);
306+ QCOMPARE(launcherModel->get(1)->running(), true);
307+
308+ appManager->stopApplication("abs-icon");
309+ QCOMPARE(launcherModel->get(0)->running(), false);
310+ QCOMPARE(launcherModel->get(1)->running(), true);
311+
312+ appManager->stopApplication("no-icon");
313+ QCOMPARE(launcherModel->get(0)->running(), false);
314+ QCOMPARE(launcherModel->get(1)->running(), false);
315+ }
316+
302317 void testApplicationFocused() {
303318 // all apps unfocused at beginning...
304319 QCOMPARE(launcherModel->get(0)->focused(), false);
tests/qmltests/Dash/Previews/tst_PreviewExpandable.qml+147−6
@@ -34,21 +34,122 @@ Rectangle {
3434 "values": [ [ "Long Label 1", "Value 1"], [ "Label 2", "Long Value 2"], [ "Label 3", "Value 3"], [ "Label 4", "Value 4"], [ "Label 5", "Value 5"] ]
3535 }
3636
37+ property var actionsData: {
38+ "actions": [ {"label": "Some Label", "id": "someid"} ]
39+ }
40+
41+ property var audioData: {
42+ "tracks": [ { title: "Some track name", length: "30", source: "/not/existing/path/testsound1" } ]
43+ }
44+
45+ property var commentData: {
46+ "author": "Claire Thompson",
47+ "comment": "C.",
48+ "source": "../../graphics/avatars/amanda@12.png"
49+ }
50+
51+ property var commentInputData: {
52+ "submit-label": "TestSubmitLabel"
53+ }
54+
55+ property var galleryData: {
56+ "sources": [
57+ "../../graphics/phone_background.jpg",
58+ "../../graphics/tablet_background.jpg",
59+ "../../graphics/clock@18.png",
60+ "../../graphics/borked"
61+ ]
62+ }
63+
64+ property var headerData: {
65+ "title": "THE TITLE",
66+ "subtitle": "Something catchy"
67+ }
68+
69+ property var iconActionsData: {
70+ "actions": [ {"label": "10", "id": "s", "icon": Qt.resolvedUrl("../artwork/avatar@12.png") } ]
71+ }
72+
73+ property var imageData: {
74+ "source": "../../graphics/phone_background.jpg",
75+ "zoomable": false
76+ }
77+
78+ property var paymentsData: {
79+ "source": { "price" : 0.99, "currency": "USD", "store_item_id": "com.example.package" }
80+ }
81+
82+ property var progressData: {
83+ "type": "progress",
84+ "source": { "dbus-name" : "somename", "dbus-object": "somestring" }
85+ }
86+
87+ property var ratingInputData: {
88+ "visible": "both",
89+ "required": "both"
90+ }
91+
92+ property var ratingEditData: {
93+ "visible": "both",
94+ "required": "both",
95+ author: "Some dude",
96+ rating: 4.5,
97+ review: "Very cool app"
98+ }
99+
100+ property var reviewsData: {
101+ "reviews": [ { author: "Some dude", rating: 4.5, review: "Very cool app" } ]
102+ }
103+
104+ property var videoData: {
105+ "source": "",
106+ "screenshot": "../../../tests/qmltests/Components/tst_LazyImage/square.png"
107+ }
108+
37109 ListModel {
38110 id: widgetsModel
39111 }
40112
113+ ListModel {
114+ id: allWidgetsModel
115+ }
116+
41117 property var widgetData: {
42118 "title": "Title here",
43119 "collapsed-widgets": 2,
44120 "widgets": widgetsModel
45121 }
46122
123+ property var allWidgetsData: {
124+ "title": "Title here",
125+ "collapsed-widgets": 0,
126+ "widgets": allWidgetsModel
127+ }
128+
129+
47130 Component.onCompleted: {
48131 widgetsModel.append({"type": "text", "widgetId": "text1", "properties": { "text": longText }});
49− widgetsModel.append({"type": "text", "widgetId": "table1", "properties": { "text": tableData }});
132+ widgetsModel.append({"type": "table", "widgetId": "table1", "properties": tableData });
50133 widgetsModel.append({"type": "text", "widgetId": "text3", "properties": { "text": shortText }});
51− widgetsModel.append({"type": "text", "widgetId": "text4", "properties": { "text": longText }});
134+ widgetsModel.append({"type": "text", "widgetId": "text4", "properties": { "text": longText2 }});
135+
136+ allWidgetsModel.append({"type": "actions", "widgetId": "actions1", "properties": actionsData });
137+ allWidgetsModel.append({"type": "audio", "widgetId": "audio1", "properties": audioData });
138+ allWidgetsModel.append({"type": "comment", "widgetId": "comment1", "properties": commentData });
139+ allWidgetsModel.append({"type": "comment-input", "widgetId": "comment-input1", "properties": commentInputData });
140+ // "expandable" For now we're not testing inception of expandables
141+ allWidgetsModel.append({"type": "gallery", "widgetId": "gallery1", "properties": galleryData });
142+ allWidgetsModel.append({"type": "header", "widgetId": "header1", "properties": headerData });
143+ allWidgetsModel.append({"type": "icon-actions", "widgetId": "icon-actions1", "properties": iconActionsData } );
144+ allWidgetsModel.append({"type": "image", "widgetId": "image1", "properties": imageData });
145+ allWidgetsModel.append({"type": "payments", "widgetId": "payments1", "properties": paymentsData });
146+ allWidgetsModel.append({"type": "progress", "widgetId": "progress1", "properties": progressData });
147+ allWidgetsModel.append({"type": "rating-input", "widgetId": "rating-input1", "properties": ratingInputData });
148+ allWidgetsModel.append({"type": "rating-edit", "widgetId": "rating-edit1", "properties": ratingEditData });
149+ allWidgetsModel.append({"type": "reviews", "widgetId": "reviews1", "properties": reviewsData });
150+ allWidgetsModel.append({"type": "table", "widgetId": "table1", "properties": tableData });
151+ allWidgetsModel.append({"type": "text", "widgetId": "text1", "properties": { "text": longText }});
152+ allWidgetsModel.append({"type": "video", "widgetId": "video1", "properties": videoData });
52153 }
53154
54155 PreviewWidgetFactory {
@@ -58,6 +159,12 @@ Rectangle {
58159 widgetData: root.widgetData
59160 }
60161
162+ PreviewWidgetFactory {
163+ id: previewWidgetFactory
164+ anchors { left: parent.left; right: parent.right; top: previewExpandable.bottom }
165+ opacity: 0
166+ }
167+
61168 UT.UnityTestCase {
62169 name: "PreviewExpandableTest"
63170 when: windowShown
@@ -78,13 +185,10 @@ Rectangle {
78185 }
79186
80187 function init() {
188+ previewExpandable.widgetData = widgetData;
81189 checkInitialState();
82190 }
83191
84− function test_collapsed_by_default() {
85− // Nothing init does this already
86− }
87−
88192 function test_expand_collapse() {
89193 var expandButton = findChild(previewExpandable, "expandButton")
90194 mouseClick(expandButton);
@@ -105,5 +209,42 @@ Rectangle {
105209
106210 checkInitialState();
107211 }
212+
213+ function test_all_widgets_height() {
214+ previewExpandable.widgetData = allWidgetsData;
215+
216+ var repeater = findChild(previewExpandable, "repeater")
217+ for (var i = 0; i < repeater.count; ++i) {
218+ tryCompare(repeater.itemAt(i), "height", 0);
219+ }
220+
221+ var expandButton = findChild(previewExpandable, "expandButton")
222+ mouseClick(expandButton);
223+
224+ var repeater = findChild(previewExpandable, "repeater")
225+ for (var i = 0; i < repeater.count; ++i) {
226+ previewWidgetFactory.active = false;
227+ wait(0); // spin the event loop otherwise we get warnings because the previous item from the
228+ // widget factory has still not been deleted and we change the widgetData
229+ previewWidgetFactory.widgetData = allWidgetsModel.get(i).properties;
230+ previewWidgetFactory.widgetType = allWidgetsModel.get(i).type;
231+ previewWidgetFactory.active = true;
232+
233+ // Wait for the height ot settle by waiting twice the time of the
234+ // longest of the height behaviour animations
235+ wait(UbuntuAnimation.SnapDuration * 2);
236+
237+ // Check the item inside the expandable has the same height
238+ // as the one straight from the factory
239+ verify(repeater.itemAt(i).height > 0);
240+ tryCompare(repeater.itemAt(i), "height", previewWidgetFactory.height);
241+ }
242+
243+ mouseClick(expandButton);
244+ compare(previewExpandable.expanded, false);
245+ for (var i = 0; i < repeater.count; ++i) {
246+ tryCompare(repeater.itemAt(i), "height", 0);
247+ }
248+ }
108249 }
109250}
tests/qmltests/Launcher/tst_Launcher.qml+36−5
@@ -382,6 +382,15 @@ Item {
382382 }
383383 }
384384
385+ function test_runningHighlight() {
386+ dragLauncherIntoView();
387+ var launcherListView = findChild(launcher, "launcherListView");
388+ for (var i = 0; i < launcherListView.count; ++i) {
389+ var delegate = findChild(launcherListView, "launcherDelegate" + i)
390+ compare(findChild(delegate, "runningHighlight").visible, LauncherModel.get(i).running)
391+ }
392+ }
393+
385394 function test_focusedHighlight() {
386395 dragLauncherIntoView();
387396 var launcherListView = findChild(launcher, "launcherListView");
@@ -520,7 +529,14 @@ Item {
520529 waitUntilLauncherDisappears();
521530 }
522531
523− function test_dragndrop_cancel() {
532+ function test_dragndrop_cancel_data() {
533+ return [
534+ {tag: "by mouse", mouse: true},
535+ {tag: "by touch", mouse: false}
536+ ]
537+ }
538+
539+ function test_dragndrop_cancel(data) {
524540 dragLauncherIntoView();
525541 var draggedItem = findChild(launcher, "launcherDelegate4")
526542 var item0 = findChild(launcher, "launcherDelegate0")
@@ -529,22 +545,37 @@ Item {
529545 // Doing longpress
530546 var currentMouseX = draggedItem.width / 2
531547 var currentMouseY = draggedItem.height / 2
532− mousePress(draggedItem, currentMouseX, currentMouseY)
548+
549+ if(data.mouse) {
550+ mousePress(draggedItem, currentMouseX, currentMouseY)
551+ } else {
552+ touchPress(draggedItem, currentMouseX, currentMouseY)
553+ }
554+
533555 // DraggedItem needs to hide and fakeDragItem become visible
534556 tryCompare(draggedItem, "itemOpacity", 0)
535557 tryCompare(fakeDragItem, "visible", true)
536558
537559 // Dragging
538560 currentMouseX -= units.gu(20)
539− mouseMove(draggedItem, currentMouseX, currentMouseY)
561+
562+ if(data.mouse) {
563+ mouseMove(draggedItem, currentMouseX, currentMouseY)
564+ } else {
565+ touchMove(draggedItem, currentMouseX, currentMouseY)
566+ }
540567
541568 // Make sure we're in the dragging state
542569 var dndArea = findChild(launcher, "dndArea");
543570 tryCompare(draggedItem, "dragging", true)
544571 tryCompare(dndArea, "draggedIndex", 4)
545572
546− // Tap somewhere in the middle of the screen to close/hide the launcher
547− tap(root)
573+ // Click/Tap somewhere in the middle of the screen to close/hide the launcher
574+ if(data.mouse) {
575+ mouseClick(root)
576+ } else {
577+ tap(root)
578+ }
548579
549580 // Make sure the dnd operation has been stopped
550581 tryCompare(draggedItem, "dragging", false)
tests/qmltests/Panel/tst_IndicatorItem.qml+12−12
@@ -181,25 +181,25 @@ Rectangle {
181181 }
182182
183183 function test_select() {
184− tryCompare(findChild(indicatorItem, "icon0"), "color", "#ededed");
184+ tryCompare(findChild(indicatorItem, "icon0"), "color", "#ffffff");
185185 tryCompare(findChild(indicatorItem, "icon0"), "opacity", 1.0);
186− tryCompare(findChild(indicatorItem, "leftLabel"), "color", "#ededed");
187− tryCompare(findChild(indicatorItem, "rightLabel"), "color", "#ededed");
188− tryCompare(findChild(indicatorItem, "indicatorName"), "color", "#ededed");
186+ tryCompare(findChild(indicatorItem, "leftLabel"), "color", "#ffffff");
187+ tryCompare(findChild(indicatorItem, "rightLabel"), "color", "#ffffff");
188+ tryCompare(findChild(indicatorItem, "indicatorName"), "color", "#ffffff");
189189
190190 indicatorItem.expanded = true;
191− tryCompare(findChild(indicatorItem, "icon0"), "color", "#4c4c4c");
191+ tryCompare(findChild(indicatorItem, "icon0"), "color", "#888888");
192192 tryCompare(findChild(indicatorItem, "icon0"), "opacity", 0.6);
193− tryCompare(findChild(indicatorItem, "leftLabel"), "color", "#4c4c4c");
194− tryCompare(findChild(indicatorItem, "rightLabel"), "color", "#4c4c4c");
195− tryCompare(findChild(indicatorItem, "indicatorName"), "color", "#4c4c4c");
193+ tryCompare(findChild(indicatorItem, "leftLabel"), "color", "#888888");
194+ tryCompare(findChild(indicatorItem, "rightLabel"), "color", "#888888");
195+ tryCompare(findChild(indicatorItem, "indicatorName"), "color", "#888888");
196196
197197 indicatorItem.selected = true;
198− tryCompare(findChild(indicatorItem, "icon0"), "color", "#ededed");
198+ tryCompare(findChild(indicatorItem, "icon0"), "color", "#ffffff");
199199 tryCompare(findChild(indicatorItem, "icon0"), "opacity", 1.0);
200− tryCompare(findChild(indicatorItem, "leftLabel"), "color", "#ededed");
201− tryCompare(findChild(indicatorItem, "rightLabel"), "color", "#ededed");
202− tryCompare(findChild(indicatorItem, "indicatorName"), "color", "#ededed");
200+ tryCompare(findChild(indicatorItem, "leftLabel"), "color", "#ffffff");
201+ tryCompare(findChild(indicatorItem, "rightLabel"), "color", "#ffffff");
202+ tryCompare(findChild(indicatorItem, "indicatorName"), "color", "#ffffff");
203203 }
204204 }
205205}
tests/qmltests/Stages/ApplicationCheckBox.qml+21
@@ -86,8 +86,29 @@ RowLayout {
8686 }
8787 }
8888 Label {
89+ id: appIdLabel
8990 text: root.appId
9091 color: "white"
9192 anchors.verticalCenter: parent.verticalCenter
9293 }
94+ Rectangle {
95+ color: {
96+ if (d.application) {
97+ if (d.application.state === ApplicationInfoInterface.Starting) {
98+ return "yellow";
99+ } else if (d.application.state === ApplicationInfoInterface.Running) {
100+ return "green";
101+ } else if (d.application.state === ApplicationInfoInterface.Suspended) {
102+ return "blue";
103+ } else {
104+ return "darkred";
105+ }
106+ } else {
107+ return "darkred";
108+ }
109+ }
110+ width: height
111+ height: appIdLabel.height * 0.7
112+ anchors.verticalCenter: parent.verticalCenter
113+ }
93114}
tests/qmltests/Stages/tst_DesktopStage.qml+2−2
@@ -24,9 +24,8 @@ import Utils 0.1
2424
2525import "../../../qml/Stages"
2626
27−Rectangle {
27+Item {
2828 id: root
29− color: "darkblue"
3029 width: desktopStageLoader.width + controls.width
3130 height: desktopStageLoader.height
3231
@@ -57,6 +56,7 @@ Rectangle {
5756 property bool itemDestroyed: false
5857 sourceComponent: Component {
5958 DesktopStage {
59+ color: "darkblue"
6060 anchors.fill: parent
6161 Component.onDestruction: {
6262 desktopStageLoader.itemDestroyed = true;
tests/qmltests/Stages/tst_PhoneStage.qml+76−3
@@ -295,22 +295,23 @@ Item {
295295 tryCompare(ApplicationManager, "count", oldCount - 1)
296296 }
297297 phoneStage.shellOrientationAngle = 0;
298+ phoneStage.select(ApplicationManager.get(0).appId);
298299 }
299300
300301 function test_focusNewTopMostAppAfterFocusedOneClosesItself() {
301302 addApps(2);
302303
303304 var secondApp = ApplicationManager.get(0);
304− tryCompare(secondApp, "state", ApplicationInfoInterface.Running);
305+ tryCompare(secondApp, "requestedState", ApplicationInfoInterface.RequestedRunning);
305306 tryCompare(secondApp, "focused", true);
306307
307308 var firstApp = ApplicationManager.get(1);
308− tryCompare(firstApp, "state", ApplicationInfoInterface.Suspended);
309+ tryCompare(firstApp, "requestedState", ApplicationInfoInterface.RequestedSuspended);
309310 tryCompare(firstApp, "focused", false);
310311
311312 ApplicationManager.stopApplication(secondApp.appId);
312313
313− tryCompare(firstApp, "state", ApplicationInfoInterface.Running);
314+ tryCompare(firstApp, "requestedState", ApplicationInfoInterface.RequestedRunning);
314315 tryCompare(firstApp, "focused", true);
315316 }
316317
@@ -388,5 +389,77 @@ Item {
388389
389390 tryCompare(focusedDelegate, "x", 0);
390391 }
392+
393+ function test_focusedAppIsTheOnlyRunningApp() {
394+ addApps(2);
395+
396+ var delegateA = findChild(phoneStage, "appDelegate0");
397+ verify(delegateA);
398+ var delegateB = findChild(phoneStage, "appDelegate1");
399+ verify(delegateB);
400+
401+ // A is focused and running, B is unfocused and suspended
402+ compare(delegateA.focus, true);
403+ compare(delegateA.application.requestedState, ApplicationInfoInterface.RequestedRunning);
404+ compare(delegateB.focus, false);
405+ compare(delegateB.application.requestedState, ApplicationInfoInterface.RequestedSuspended);
406+
407+ // Switch foreground/focused appp from A to B
408+ goToSpread();
409+ phoneStage.select(delegateB.application.appId);
410+
411+ // Now it's the other way round
412+ // A is unfocused and suspended, B is focused and running
413+ tryCompare(delegateA, "focus", false);
414+ tryCompare(delegateA.application, "requestedState", ApplicationInfoInterface.RequestedSuspended);
415+ tryCompare(delegateB, "focus", true);
416+ tryCompare(delegateB.application, "requestedState", ApplicationInfoInterface.RequestedRunning);
417+ }
418+
419+ function test_dashRemainsRunningIfStageIsToldSo() {
420+ addApps(1);
421+
422+ var delegateDash = findChild(phoneStage, "appDelegate1");
423+ verify(delegateDash);
424+ compare(delegateDash.application.appId, "unity8-dash");
425+
426+ var delegateOther = findChild(phoneStage, "appDelegate0");
427+ verify(delegateOther);
428+
429+ goToSpread();
430+ phoneStage.select("unity8-dash");
431+
432+ tryCompare(delegateDash, "focus", true);
433+ tryCompare(delegateDash.application, "requestedState", ApplicationInfoInterface.RequestedRunning);
434+ compare(delegateOther.focus, false);
435+ compare(delegateOther.application.requestedState, ApplicationInfoInterface.RequestedSuspended);
436+
437+ goToSpread();
438+ phoneStage.select(delegateOther.application.appId);
439+
440+ // The other app gets focused and running but dash is kept running despite being unfocused
441+ tryCompare(delegateDash, "focus", false);
442+ tryCompare(delegateDash.application, "requestedState", ApplicationInfoInterface.RequestedRunning);
443+ compare(delegateOther.focus, true);
444+ compare(delegateOther.application.requestedState, ApplicationInfoInterface.RequestedRunning);
445+ }
446+
447+ function test_foregroundAppIsSuspendedWhenStageIsSuspended() {
448+ addApps(1);
449+
450+ var delegate = findChild(phoneStage, "appDelegate0");
451+ verify(delegate);
452+
453+ compare(delegate.focus, true);
454+ compare(delegate.application.requestedState, ApplicationInfoInterface.RequestedRunning);
455+
456+ phoneStage.suspended = true;
457+
458+ tryCompare(delegate.application, "requestedState", ApplicationInfoInterface.RequestedSuspended);
459+
460+ phoneStage.suspended = false;
461+
462+ tryCompare(delegate.application, "requestedState", ApplicationInfoInterface.RequestedRunning);
463+ }
391464 }
392465}
tests/qmltests/Stages/tst_TabletStage.qml+161−1
@@ -76,10 +76,18 @@ Rectangle {
7676 id: webbrowserCheckBox
7777 appId: "webbrowser-app"
7878 }
79+ ApplicationCheckBox {
80+ id: galleryCheckBox
81+ appId: "gallery-app"
82+ }
7983 ApplicationCheckBox {
8084 id: dialerCheckBox
8185 appId: "dialer-app"
8286 }
87+ ApplicationCheckBox {
88+ id: facebookCheckBox
89+ appId: "facebook-webapp"
90+ }
8391 }
8492 }
8593
@@ -93,6 +101,19 @@ Rectangle {
93101 function init() {
94102 tabletStageLoader.active = true;
95103 tryCompare(tabletStageLoader, "status", Loader.Ready);
104+
105+ // this is very strange, but sometimes the test starts without
106+ // TabletStage components having finished loading themselves
107+ var appWindow = null;
108+ while (!appWindow) {
109+ appWindow = findChild(tabletStage, "appWindow_unity8-dash");
110+ if (!appWindow) {
111+ console.log("didn't find appWindow_unity8-dash in " + tabletStage + ". Trying again...");
112+ wait(50);
113+ }
114+ }
115+
116+ waitUntilAppSurfaceShowsUp("unity8-dash");
96117 }
97118
98119 function cleanup() {
@@ -109,7 +130,9 @@ Rectangle {
109130
110131 // kill all (fake) running apps
111132 webbrowserCheckBox.checked = false;
133+ galleryCheckBox.checked = false;
112134 dialerCheckBox.checked = false;
135+ facebookCheckBox.checked = false;
113136 }
114137
115138 function waitUntilAppSurfaceShowsUp(appId) {
@@ -120,6 +143,34 @@ Rectangle {
120143 tryCompare(appWindowStates, "state", "surface");
121144 }
122145
146+ function switchToApp(targetAppId) {
147+ touchFlick(tabletStage,
148+ tabletStage.width - (tabletStage.dragAreaWidth / 2), tabletStage.height / 2,
149+ tabletStage.x + 1, tabletStage.height / 2);
150+
151+ var spreadView = findChild(tabletStage, "spreadView");
152+ verify(spreadView);
153+ tryCompare(spreadView, "phase", 2);
154+ tryCompare(spreadView, "flicking", false);
155+ tryCompare(spreadView, "moving", false);
156+
157+ waitUntilAppDelegateStopsMoving(targetAppId);
158+
159+ var targetAppWindow = findChild(tabletStage, "appWindow_" + targetAppId);
160+ tap(targetAppWindow, 10, 10);
161+ }
162+
163+ function waitUntilAppDelegateStopsMoving(targetAppId)
164+ {
165+ var targetAppDelegate = findChild(tabletStage, "tabletSpreadDelegate_" + targetAppId);
166+ verify(targetAppDelegate);
167+ var lastValue = undefined;
168+ do {
169+ lastValue = targetAppDelegate.animatedProgress;
170+ wait(30);
171+ } while (lastValue != targetAppDelegate.animatedProgress);
172+ }
173+
123174 function test_tappingSwitchesFocusBetweenStages() {
124175 webbrowserCheckBox.checked = true;
125176 waitUntilAppSurfaceShowsUp(webbrowserCheckBox.appId);
@@ -155,7 +206,6 @@ Rectangle {
155206 tryCompare(webbrowserApp.session.surface, "activeFocus", false);
156207 }
157208
158−
159209 function test_closeAppInSideStage() {
160210 dialerCheckBox.checked = true;
161211 waitUntilAppSurfaceShowsUp(dialerCheckBox.appId);
@@ -200,6 +250,116 @@ Rectangle {
200250 appWindow.width / 2, appWindow.height / 2,
201251 appWindow.width / 2, -appWindow.height / 2);
202252 }
253+
254+ function test_suspendsAndResumesAppsInMainStage() {
255+ webbrowserCheckBox.checked = true;
256+ var webbrowserApp = ApplicationManager.findApplication(webbrowserCheckBox.appId);
257+ compare(webbrowserApp.stage, ApplicationInfoInterface.MainStage);
258+
259+ tryCompare(webbrowserApp, "state", ApplicationInfoInterface.Running);
260+
261+ galleryCheckBox.checked = true;
262+ var galleryApp = ApplicationManager.findApplication(galleryCheckBox.appId);
263+ compare(galleryApp.stage, ApplicationInfoInterface.MainStage);
264+
265+ tryCompare(galleryApp, "state", ApplicationInfoInterface.Running);
266+ tryCompare(webbrowserApp, "state", ApplicationInfoInterface.Suspended);
267+
268+ switchToApp(webbrowserApp.appId);
269+
270+ tryCompare(galleryApp, "state", ApplicationInfoInterface.Suspended);
271+ tryCompare(webbrowserApp, "state", ApplicationInfoInterface.Running);
272+
273+ switchToApp(galleryApp.appId);
274+
275+ tryCompare(galleryApp, "state", ApplicationInfoInterface.Running);
276+ tryCompare(webbrowserApp, "state", ApplicationInfoInterface.Suspended);
277+ }
278+
279+
280+ function test_foregroundMainAndSideStageAppsAreKeptRunning() {
281+
282+ var stagesPriv = findInvisibleChild(tabletStage, "stagesPriv");
283+ verify(stagesPriv);
284+
285+ // launch two main stage apps
286+ // gallery will be on foreground and webbrowser on background
287+
288+ webbrowserCheckBox.checked = true;
289+ waitUntilAppSurfaceShowsUp(webbrowserCheckBox.appId)
290+ var webbrowserApp = ApplicationManager.findApplication(webbrowserCheckBox.appId);
291+ compare(webbrowserApp.stage, ApplicationInfoInterface.MainStage);
292+
293+ galleryCheckBox.checked = true;
294+ waitUntilAppSurfaceShowsUp(galleryCheckBox.appId)
295+ var galleryApp = ApplicationManager.findApplication(galleryCheckBox.appId);
296+ compare(galleryApp.stage, ApplicationInfoInterface.MainStage);
297+
298+ compare(stagesPriv.mainStageAppId, galleryCheckBox.appId);
299+
300+ // then launch two side stage apps
301+ // facebook will be on foreground and dialer on background
302+
303+ dialerCheckBox.checked = true;
304+ waitUntilAppSurfaceShowsUp(dialerCheckBox.appId)
305+ var dialerApp = ApplicationManager.findApplication(dialerCheckBox.appId);
306+ compare(dialerApp.stage, ApplicationInfoInterface.SideStage);
307+
308+ facebookCheckBox.checked = true;
309+ waitUntilAppSurfaceShowsUp(facebookCheckBox.appId)
310+ var facebookApp = ApplicationManager.findApplication(facebookCheckBox.appId);
311+ compare(facebookApp.stage, ApplicationInfoInterface.SideStage);
312+
313+ compare(stagesPriv.sideStageAppId, facebookCheckBox.appId);
314+
315+ // Now check that the foreground apps are running and that the background ones
316+ // are suspended
317+
318+ tryCompare(galleryApp, "state", ApplicationInfoInterface.Running);
319+ tryCompare(webbrowserApp, "state", ApplicationInfoInterface.Suspended);
320+ tryCompare(facebookApp, "state", ApplicationInfoInterface.Running);
321+ tryCompare(dialerApp, "state", ApplicationInfoInterface.Suspended);
322+
323+ switchToApp(dialerCheckBox.appId);
324+
325+ tryCompare(galleryApp, "state", ApplicationInfoInterface.Running);
326+ tryCompare(webbrowserApp, "state", ApplicationInfoInterface.Suspended);
327+ tryCompare(facebookApp, "state", ApplicationInfoInterface.Suspended);
328+ tryCompare(dialerApp, "state", ApplicationInfoInterface.Running);
329+
330+ switchToApp(webbrowserCheckBox.appId);
331+
332+ tryCompare(galleryApp, "state", ApplicationInfoInterface.Suspended);
333+ tryCompare(webbrowserApp, "state", ApplicationInfoInterface.Running);
334+ tryCompare(facebookApp, "state", ApplicationInfoInterface.Suspended);
335+ tryCompare(dialerApp, "state", ApplicationInfoInterface.Running);
336+ }
337+
338+ function test_foregroundAppsAreSuspendedWhenStageIsSuspended() {
339+ webbrowserCheckBox.checked = true;
340+ waitUntilAppSurfaceShowsUp(webbrowserCheckBox.appId)
341+ var webbrowserApp = ApplicationManager.findApplication(webbrowserCheckBox.appId);
342+ compare(webbrowserApp.stage, ApplicationInfoInterface.MainStage);
343+
344+ dialerCheckBox.checked = true;
345+ waitUntilAppSurfaceShowsUp(dialerCheckBox.appId)
346+ var dialerApp = ApplicationManager.findApplication(dialerCheckBox.appId);
347+ compare(dialerApp.stage, ApplicationInfoInterface.SideStage);
348+
349+
350+ compare(webbrowserApp.requestedState, ApplicationInfoInterface.RequestedRunning);
351+ compare(dialerApp.requestedState, ApplicationInfoInterface.RequestedRunning);
352+
353+ tabletStage.suspended = true;
354+
355+ tryCompare(webbrowserApp, "requestedState", ApplicationInfoInterface.RequestedSuspended);
356+ tryCompare(dialerApp, "requestedState", ApplicationInfoInterface.RequestedSuspended);
357+
358+ tabletStage.suspended = false;
359+
360+ tryCompare(webbrowserApp, "requestedState", ApplicationInfoInterface.RequestedRunning);
361+ tryCompare(dialerApp, "requestedState", ApplicationInfoInterface.RequestedRunning);
362+ }
203363 }
204364
205365}
tests/qmltests/tst_OrientedShell.qml+3−3
@@ -46,7 +46,7 @@ Rectangle {
4646 }
4747
4848 QtObject {
49− id: mockUsageModeSettings
49+ id: mockUnity8Settings
5050 property string usageMode: usageModeSelector.model[usageModeSelector.selectedIndex]
5151 }
5252
@@ -125,7 +125,7 @@ Rectangle {
125125 sourceComponent: Component {
126126 OrientedShell {
127127 anchors.fill: parent
128− usageModeSettings: mockUsageModeSettings
128+ unity8Settings: mockUnity8Settings
129129 oskSettings: mockOskSettings
130130 physicalOrientation: root.physicalOrientation0
131131 orientationLocked: orientationLockedCheckBox.checked
@@ -926,7 +926,7 @@ Rectangle {
926926
927927 function test_attachRemoveInputDevices() {
928928 usageModeSelector.selectedIndex = 2;
929− tryCompare(mockUsageModeSettings, "usageMode", "Automatic")
929+ tryCompare(mockUnity8Settings, "usageMode", "Automatic")
930930
931931 loadShell("mako")
932932 var shell = findChild(orientedShell, "shell");
tests/qmltests/tst_Shell.qml+55−29
@@ -67,11 +67,6 @@ Rectangle {
6767 width: units.gu(40)
6868 height: units.gu(71)
6969 }
70− StateChangeScript {
71− script: {
72− GSettingsController.setUsageMode("Staged")
73− }
74− }
7570 },
7671 State {
7772 name: "tablet"
@@ -80,11 +75,6 @@ Rectangle {
8075 width: units.gu(100)
8176 height: units.gu(71)
8277 }
83− StateChangeScript {
84− script: {
85− GSettingsController.setUsageMode("Staged")
86− }
87− }
8878 },
8979 State {
9080 name: "desktop"
@@ -97,11 +87,6 @@ Rectangle {
9787 target: mouseEmulation
9888 checked: false
9989 }
100− StateChangeScript {
101− script: {
102− GSettingsController.setUsageMode("Windowed")
103− }
104− }
10590 }
10691 ]
10792
@@ -317,7 +302,6 @@ Rectangle {
317302 mouseEmulation.checked = true;
318303 tryCompare(shell, "enabled", true); // make sure greeter didn't leave us in disabled state
319304 tearDown();
320− GSettingsController.setUsageMode("Staged");
321305 }
322306
323307 function loadShell(formFactor) {
@@ -602,9 +586,9 @@ Rectangle {
602586 verify(mainAppId != "");
603587 var mainApp = ApplicationManager.findApplication(mainAppId);
604588 verify(mainApp);
605− tryCompare(mainApp, "state", ApplicationInfoInterface.Running);
589+ tryCompare(mainApp, "requestedState", ApplicationInfoInterface.RequestedRunning);
606590
607− // Suspend while call is active...
591+ // Display off while call is active...
608592 callManager.foregroundCall = phoneCall;
609593 Powerd.status = Powerd.Off;
610594 tryCompare(greeter, "shown", false);
@@ -615,8 +599,7 @@ Rectangle {
615599 Powerd.status = Powerd.Off;
616600 tryCompare(greeter, "fullyShown", true);
617601
618− tryCompare(ApplicationManager, "suspended", true);
619− compare(mainApp.state, ApplicationInfoInterface.Suspended);
602+ compare(mainApp.requestedState, ApplicationInfoInterface.RequestedSuspended);
620603
621604 // And wake up
622605 Powerd.status = Powerd.On;
@@ -632,8 +615,7 @@ Rectangle {
632615 removeTimeConstraintsFromDirectionalDragAreas(greeter);
633616 swipeAwayGreeter();
634617
635− tryCompare(ApplicationManager, "suspended", false);
636− compare(mainApp.state, ApplicationInfoInterface.Running);
618+ compare(mainApp.requestedState, ApplicationInfoInterface.RequestedRunning);
637619 tryCompare(ApplicationManager, "focusedApplicationId", mainAppId);
638620 }
639621
@@ -804,15 +786,15 @@ Rectangle {
804786
805787 function test_launchedAppHasActiveFocus_data() {
806788 return [
807− {tag: "phone", formFactor: "phone", usageMode: "Staged"},
808− {tag: "tablet", formFactor: "tablet", usageMode: "Staged"},
809− {tag: "desktop", formFactor: "tablet", usageMode: "Windowed"}
789+ {tag: "phone", formFactor: "phone", usageScenario: "phone"},
790+ {tag: "tablet", formFactor: "tablet", usageScenario: "tablet"},
791+ {tag: "desktop", formFactor: "tablet", usageScenario: "desktop"}
810792 ]
811793 }
812794
813795 function test_launchedAppHasActiveFocus(data) {
814− GSettingsController.setUsageMode(data.usageMode);
815796 loadShell(data.formFactor);
797+ shell.usageScenario = data.usageScenario;
816798 swipeAwayGreeter();
817799
818800 var webApp = ApplicationManager.startApplication("webbrowser-app");
@@ -1347,6 +1329,50 @@ Rectangle {
13471329 compare(launcher.inverted, data.launcherInverted);
13481330 }
13491331
1332+ function test_unfocusedAppsGetSuspendedAfterEnteringStagedMode() {
1333+ loadShell("tablet");
1334+ shell.usageScenario = "desktop";
1335+
1336+ var webBrowserApp = ApplicationManager.startApplication("webbrowser-app");
1337+ waitUntilAppWindowIsFullyLoaded(webBrowserApp);
1338+
1339+ var galleryApp = ApplicationManager.startApplication("gallery-app");
1340+ waitUntilAppWindowIsFullyLoaded(galleryApp);
1341+
1342+ ApplicationManager.requestFocusApplication("unity8-dash");
1343+ tryCompare(ApplicationManager, "focusedApplicationId", "unity8-dash");
1344+
1345+ compare(webBrowserApp.requestedState, ApplicationInfoInterface.RequestedRunning);
1346+ compare(galleryApp.requestedState, ApplicationInfoInterface.RequestedRunning);
1347+
1348+ shell.usageScenario = "tablet";
1349+
1350+ tryCompare(webBrowserApp, "requestedState", ApplicationInfoInterface.RequestedSuspended);
1351+ tryCompare(galleryApp, "requestedState", ApplicationInfoInterface.RequestedSuspended);
1352+ }
1353+
1354+ function test_unfocusedAppsAreResumedWhenEnteringWindowedMode() {
1355+ loadShell("tablet");
1356+ shell.usageScenario = "tablet";
1357+
1358+ var webBrowserApp = ApplicationManager.startApplication("webbrowser-app");
1359+ waitUntilAppWindowIsFullyLoaded(webBrowserApp);
1360+
1361+ var galleryApp = ApplicationManager.startApplication("gallery-app");
1362+ waitUntilAppWindowIsFullyLoaded(galleryApp);
1363+
1364+ ApplicationManager.requestFocusApplication("unity8-dash");
1365+ tryCompare(ApplicationManager, "focusedApplicationId", "unity8-dash");
1366+
1367+ compare(webBrowserApp.requestedState, ApplicationInfoInterface.RequestedSuspended);
1368+ compare(galleryApp.requestedState, ApplicationInfoInterface.RequestedSuspended);
1369+
1370+ shell.usageScenario = "desktop";
1371+
1372+ tryCompare(webBrowserApp, "requestedState", ApplicationInfoInterface.RequestedRunning);
1373+ tryCompare(galleryApp, "requestedState", ApplicationInfoInterface.RequestedRunning);
1374+ }
1375+
13501376 function test_altTabSwitchesFocus() {
13511377 loadShell("desktop");
13521378 shell.usageScenario = "desktop"
@@ -1479,7 +1505,7 @@ Rectangle {
14791505 while (appRepeater.highlightedIndex != i && x <= 4000) {
14801506 x+=10;
14811507 mouseMove(shell, x, y)
1482− waitForRendering(shell)
1508+ wait(0); // spin the loop so bindings get evaluated
14831509 }
14841510 }
14851511
@@ -1510,7 +1536,7 @@ Rectangle {
15101536 while (appRepeater.highlightedIndex !== 2 && x <= 4000) {
15111537 x+=10;
15121538 mouseMove(shell, x, y)
1513− waitForRendering(shell)
1539+ wait(0); // spin the loop so bindings get evaluated
15141540 }
15151541 tryCompare(closeMouseArea, "enabled", true)
15161542
@@ -1556,7 +1582,7 @@ Rectangle {
15561582 while (appRepeater.highlightedIndex !== 2 && x <= 4000) {
15571583 x+=10;
15581584 mouseMove(shell, x, y)
1559− waitForRendering(shell)
1585+ wait(0); // spin the loop so bindings get evaluated
15601586 }
15611587 tryCompare(decoratedWindow, "highlightShown", true);
15621588
tests/qmltests/tst_ShellWithPin.qml+5−4
@@ -498,12 +498,13 @@ Item {
498498
499499 function test_suspend() {
500500 var greeter = findChild(shell, "greeter");
501+ var applicationsDisplayLoader = findChild(shell, "applicationsDisplayLoader")
501502
502503 // Put it to sleep
503504 Powerd.status = Powerd.Off;
504505
505− // If locked, ApplicationManager.suspended should be true
506− tryCompare(ApplicationManager, "suspended", true);
506+ // If locked, applicationsDisplayLoader.item.suspended should be true
507+ tryCompare(applicationsDisplayLoader.item, "suspended", true);
507508
508509 // And wake up
509510 Powerd.status = Powerd.On;
@@ -513,12 +514,12 @@ Item {
513514 swipeAwayGreeter(true);
514515
515516 // We have a lockscreen, make sure we're still suspended
516− tryCompare(ApplicationManager, "suspended", true);
517+ tryCompare(applicationsDisplayLoader.item, "suspended", true);
517518
518519 enterPin("1234")
519520
520521 // Now that the lockscreen has gone too, make sure we're waking up
521− tryCompare(ApplicationManager, "suspended", false);
522+ tryCompare(applicationsDisplayLoader.item, "suspended", false);
522523
523524 }
524525
tests/utils/modules/Unity/Test/UnityTestCase.qml+9
@@ -351,6 +351,15 @@ TestCase {
351351 event.commit()
352352 }
353353
354+ function touchMove(item, tox, toy) {
355+ var root = fetchRootItem(item)
356+ var rootPoint = item.mapToItem(root, tox, toy)
357+
358+ var event = touchEvent(item);
359+ event.move(0 /* touchId */, rootPoint.x, rootPoint.y);
360+ event.commit();
361+ }
362+
354363 function touchPinch(item, x1Start, y1Start, x1End, y1End, x2Start, y2Start, x2End, y2End) {
355364 // Make sure the item is rendered
356365 waitForRendering(item);