on xenial help sign in
Merge
0773ca8Albert Astals Cid
CMakeLists.txt+1−1
@@ -57,7 +57,7 @@ find_package(Qt5DBus 5.2 REQUIRED)
57find_package(Qt5Concurrent 5.2 REQUIRED)
57find_package(Qt5Concurrent 5.2 REQUIRED)
58find_package(Qt5Sql 5.2 REQUIRED)
58find_package(Qt5Sql 5.2 REQUIRED)
59
59
60−pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=6)
60+pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=7)
61
61
62# Standard install paths
62# Standard install paths
63include(GNUInstallDirs)
63include(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+
1unity8 (8.10+15.10.20150729-0ubuntu1) wily; urgency=medium
57unity8 (8.10+15.10.20150729-0ubuntu1) wily; urgency=medium
2
58
3 [ CI Train Bot ]
59 [ CI Train Bot ]
debian/control+2−2
@@ -28,7 +28,7 @@ Build-Depends: cmake,
28 libqt5xmlpatterns5-dev,
28 libqt5xmlpatterns5-dev,
29 libsystemsettings-dev,
29 libsystemsettings-dev,
30 libudev-dev,
30 libudev-dev,
31− libunity-api-dev (>= 7.98),
31+ libunity-api-dev (>= 7.99),
32 libusermetricsoutput1-dev,
32 libusermetricsoutput1-dev,
33 libxcb1-dev,
33 libxcb1-dev,
34 pkg-config,
34 pkg-config,
@@ -129,7 +129,7 @@ Depends: qml-module-qtquick-layouts,
129 unity-application-impl-6,
129 unity-application-impl-6,
130 unity-notifications-impl-3,
130 unity-notifications-impl-3,
131 unity-plugin-scopes | unity-scopes-impl,
131 unity-plugin-scopes | unity-scopes-impl,
132− unity-scopes-impl-6,
132+ unity-scopes-impl-7,
133 unity8-fake-env | unity-application-impl,
133 unity8-fake-env | unity-application-impl,
134 ${misc:Depends},
134 ${misc:Depends},
135Breaks: unity8 (<< 7.86),
135Breaks: unity8 (<< 7.86),
plugins/Greeter/Unity/Launcher/CMakeLists.txt−1
@@ -1,5 +1,4 @@
1pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=7)
1pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=7)
2−pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=6)
3pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
2pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
4
3
5add_definitions(-DSM_BUSNAME=systemBus)
4add_definitions(-DSM_BUSNAME=systemBus)
plugins/Ubuntu/Payments/Payments.cpp−2
@@ -123,8 +123,6 @@ void Payments::setStoreItemId(const QString &store_item_id)
123 if (m_store_item_id.isEmpty()) {
123 if (m_store_item_id.isEmpty()) {
124 return;
124 return;
125 }
125 }
126−
127− pay_package_item_start_verification(m_package, m_store_item_id.toLocal8Bit().data());
128}
126}
129
127
130void Payments::setPurchasing(bool is_purchasing)
128void Payments::setPurchasing(bool is_purchasing)
plugins/Unity/InputInfo/linux/qinputdeviceinfo_linux.cpp+2−11
@@ -101,8 +101,6 @@ void QInputDeviceInfoPrivate::init()
101 if (!iDevice)
101 if (!iDevice)
102 continue;
102 continue;
103
103
104− qDebug() << "*** ADDING DEVICE" << eventPath;
105−
106 iDevice->setTypes(getInputTypes(dev));
104 iDevice->setTypes(getInputTypes(dev));
107
105
108 if (iDevice->switches().count() > 0 && iDevice->buttons().count() == 0)
106 if (iDevice->switches().count() > 0 && iDevice->buttons().count() == 0)
@@ -125,12 +123,6 @@ void QInputDeviceInfoPrivate::init()
125
123
126QInputDeviceInfo::InputTypes QInputDeviceInfoPrivate::getInputTypes( struct udev_device *dev)
124QInputDeviceInfo::InputTypes QInputDeviceInfoPrivate::getInputTypes( struct udev_device *dev)
127{
125{
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");
134 QInputDeviceInfo::InputTypes types = QInputDeviceInfo::Unknown;
126 QInputDeviceInfo::InputTypes types = QInputDeviceInfo::Unknown;
135 if (qstrcmp(udev_device_get_property_value(dev, "ID_INPUT_KEYBOARD"), "1") == 0 )
127 if (qstrcmp(udev_device_get_property_value(dev, "ID_INPUT_KEYBOARD"), "1") == 0 )
136 types |= QInputDeviceInfo::Keyboard;
128 types |= QInputDeviceInfo::Keyboard;
@@ -151,6 +143,7 @@ QInputDeviceInfo::InputTypes QInputDeviceInfoPrivate::getInputTypes( struct udev
151QInputDevice *QInputDeviceInfoPrivate::addDevice(const QString &path)
143QInputDevice *QInputDeviceInfoPrivate::addDevice(const QString &path)
152{
144{
153 QInputDevice *inputDevice = new QInputDevice(this);
145 QInputDevice *inputDevice = new QInputDevice(this);
146+ inputDevice->setDevicePath(path);
154
147
155 struct libevdev *dev = NULL;
148 struct libevdev *dev = NULL;
156 int fd;
149 int fd;
@@ -158,17 +151,15 @@ QInputDevice *QInputDeviceInfoPrivate::addDevice(const QString &path)
158 fd = open(path.toLatin1(), O_RDONLY|O_NONBLOCK);
151 fd = open(path.toLatin1(), O_RDONLY|O_NONBLOCK);
159
152
160 if (fd == -1) {
153 if (fd == -1) {
161− qDebug() << "Failed to open";
162 return inputDevice;
154 return inputDevice;
163 }
155 }
164 rc = libevdev_new_from_fd(fd, &dev);
156 rc = libevdev_new_from_fd(fd, &dev);
165 if (rc < 0) {
157 if (rc < 0) {
166− qDebug() << "Failed to init libevdev ("<< strerror(-rc) << ")";
158+ qWarning() << "Failed to init libevdev ("<< strerror(-rc) << ")";
167 return inputDevice;
159 return inputDevice;
168 }
160 }
169
161
170 inputDevice->setName(QString::fromLatin1(libevdev_get_name(dev)));
162 inputDevice->setName(QString::fromLatin1(libevdev_get_name(dev)));
171− inputDevice->setDevicePath(path);
172 for (int i = 0; i < EV_MAX; i++) {
163 for (int i = 0; i < EV_MAX; i++) {
173 if (i == EV_KEY || i == EV_SW || i == EV_REL
164 if (i == EV_KEY || i == EV_SW || i == EV_REL
174 || i == EV_REL || i == EV_ABS) {
165 || i == EV_REL || i == EV_ABS) {
plugins/Unity/Launcher/CMakeLists.txt−1
@@ -1,5 +1,4 @@
1pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=7)
1pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=7)
2−pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=6)
3pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
2pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
4
3
5add_definitions(-DSM_BUSNAME=systemBus)
4add_definitions(-DSM_BUSNAME=systemBus)
plugins/Unity/Launcher/launchermodel.cpp−1
@@ -516,7 +516,6 @@ void LauncherModel::applicationAdded(const QModelIndex &parent, int row)
516 Q_EMIT dataChanged(index(itemIndex), index(itemIndex), {RoleRecent});
516 Q_EMIT dataChanged(index(itemIndex), index(itemIndex), {RoleRecent});
517 }
517 }
518 item->setRunning(true);
518 item->setRunning(true);
519− // TODO Shall we paint some running/recent app highlight? If yes, do it here.
520 } else {
519 } else {
521 LauncherItem *item = new LauncherItem(app->appId(), app->name(), app->icon().toString(), this);
520 LauncherItem *item = new LauncherItem(app->appId(), app->name(), app->icon().toString(), this);
522 item->setRecent(true);
521 item->setRecent(true);
po/am.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/ar.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
17"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
18"3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
18"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"
19+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
20−"X-Generator: Launchpad (build 17646)\n"
20+"X-Generator: Launchpad (build 17686)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
po/ast.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/az.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/be.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
19−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
20−"X-Generator: Launchpad (build 17628)\n"
20+"X-Generator: Launchpad (build 17686)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
po/bg.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/br.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/bs.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
20−"X-Generator: Launchpad (build 17628)\n"
20+"X-Generator: Launchpad (build 17686)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
po/ca.po+3−3
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -376,7 +376,7 @@ msgstr "La contrasenya no és correcta"
376#: qml/Greeter/NarrowView.qml:121
376#: qml/Greeter/NarrowView.qml:121
377msgctxt "passphrase"
377msgctxt "passphrase"
378msgid "Please re-enter"
378msgid "Please re-enter"
379−msgstr ""
379+msgstr "Torneu-ho a introduir"
380
380
381#: qml/Greeter/NarrowView.qml:122
381#: qml/Greeter/NarrowView.qml:122
382msgid "Sorry, incorrect passcode"
382msgid "Sorry, incorrect passcode"
po/ca@valencia.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/ce.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/ckb.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/cs.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
17"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"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20"Language: cs\n"
20"Language: cs\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
po/cy.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==2 ? 1 : (n != 8 && n != 11) ? "
17"Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==2 ? 1 : (n != 8 && n != 11) ? "
18"2 : 3;\n"
18"2 : 3;\n"
19−"X-Launchpad-Export-Date: 2015-08-01 05:45+0000\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
20−"X-Generator: Launchpad (build 17656)\n"
20+"X-Generator: Launchpad (build 17686)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
po/da.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
17"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
20−"X-Generator: Launchpad (build 17628)\n"
20+"X-Generator: Launchpad (build 17686)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
po/de.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/el.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/en_AU.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/en_GB.po+3−3
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -370,7 +370,7 @@ msgstr "Sorry, incorrect passphrase"
370#: qml/Greeter/NarrowView.qml:121
370#: qml/Greeter/NarrowView.qml:121
371msgctxt "passphrase"
371msgctxt "passphrase"
372msgid "Please re-enter"
372msgid "Please re-enter"
373−msgstr ""
373+msgstr "Please re-enter"
374
374
375#: qml/Greeter/NarrowView.qml:122
375#: qml/Greeter/NarrowView.qml:122
376msgid "Sorry, incorrect passcode"
376msgid "Sorry, incorrect passcode"
po/eo.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/es.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/eu.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/fa.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/fi.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/fo.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/fr.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-28 05:40+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/ga.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;\n"
17"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"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/gd.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
17"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
18"(n > 2 && n < 20) ? 2 : 3;\n"
18"(n > 2 && n < 20) ? 2 : 3;\n"
19−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
20−"X-Generator: Launchpad (build 17628)\n"
20+"X-Generator: Launchpad (build 17686)\n"
21"Language: gd\n"
21"Language: gd\n"
22
22
23#: plugins/LightDM/Greeter.cpp:112
23#: plugins/LightDM/Greeter.cpp:112
po/gl.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-08-02 05:36+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17656)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/gv.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : (n == 2 ? 1 : 2);\n"
17"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"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/he.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/hi.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/hr.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
20−"X-Generator: Launchpad (build 17628)\n"
20+"X-Generator: Launchpad (build 17686)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
po/hu.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-08-02 05:36+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17656)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/hy.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/ia.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/id.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/is.po+2−2
@@ -17,8 +17,8 @@ msgstr ""
17"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Type: text/plain; charset=UTF-8\n"
18"Content-Transfer-Encoding: 8bit\n"
18"Content-Transfer-Encoding: 8bit\n"
19"Plural-Forms: nplurals=2; plural=n != 1;\n"
19"Plural-Forms: nplurals=2; plural=n != 1;\n"
20−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
20+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
21−"X-Generator: Launchpad (build 17628)\n"
21+"X-Generator: Launchpad (build 17686)\n"
22"Language: is\n"
22"Language: is\n"
23
23
24#: plugins/LightDM/Greeter.cpp:112
24#: plugins/LightDM/Greeter.cpp:112
po/it.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/ja.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/km.po+40−40
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -133,7 +133,7 @@ msgstr[1] ""
133#: qml/Components/Dialogs.qml:69
133#: qml/Components/Dialogs.qml:69
134msgctxt "Title: Lock/Log out dialog"
134msgctxt "Title: Lock/Log out dialog"
135msgid "Log out"
135msgid "Log out"
136−msgstr ""
136+msgstr "ចេញ"
137
137
138#: qml/Components/Dialogs.qml:70
138#: qml/Components/Dialogs.qml:70
139msgid "Are you sure you want to log out?"
139msgid "Are you sure you want to log out?"
@@ -142,12 +142,12 @@ msgstr "តើ​អ្នក​ពិតជា​ចង់​ចេញ​មែ
142#: qml/Components/Dialogs.qml:72
142#: qml/Components/Dialogs.qml:72
143msgctxt "Button: Lock the system"
143msgctxt "Button: Lock the system"
144msgid "Lock"
144msgid "Lock"
145−msgstr ""
145+msgstr "ចាក់សោ"
146
146
147#: qml/Components/Dialogs.qml:79
147#: qml/Components/Dialogs.qml:79
148msgctxt "Button: Log out from the system"
148msgctxt "Button: Log out from the system"
149msgid "Log Out"
149msgid "Log Out"
150−msgstr ""
150+msgstr "ចេញ"
151
151
152#: qml/Components/Dialogs.qml:86 qml/Components/Dialogs.qml:117
152#: qml/Components/Dialogs.qml:86 qml/Components/Dialogs.qml:117
153#: qml/Components/Dialogs.qml:173
153#: qml/Components/Dialogs.qml:173
@@ -157,7 +157,7 @@ msgstr "បោះបង់"
157#: qml/Components/Dialogs.qml:98
157#: qml/Components/Dialogs.qml:98
158msgctxt "Title: Reboot/Shut down dialog"
158msgctxt "Title: Reboot/Shut down dialog"
159msgid "Shut down"
159msgid "Shut down"
160−msgstr ""
160+msgstr "បិទ"
161
161
162#: qml/Components/Dialogs.qml:99
162#: qml/Components/Dialogs.qml:99
163msgid "Are you sure you want to shut down?"
163msgid "Are you sure you want to shut down?"
@@ -166,17 +166,17 @@ msgstr "តើ​អ្នក​ពិតជា​ចង់​បិទ​មែ
166#: qml/Components/Dialogs.qml:101
166#: qml/Components/Dialogs.qml:101
167msgctxt "Button: Reboot the system"
167msgctxt "Button: Reboot the system"
168msgid "Reboot"
168msgid "Reboot"
169−msgstr ""
169+msgstr "ចាប់ផ្ដើម​ឡើងវិញ"
170
170
171#: qml/Components/Dialogs.qml:109
171#: qml/Components/Dialogs.qml:109
172msgctxt "Button: Shut down the system"
172msgctxt "Button: Shut down the system"
173msgid "Shut down"
173msgid "Shut down"
174−msgstr ""
174+msgstr "បិទ"
175
175
176#: qml/Components/Dialogs.qml:129
176#: qml/Components/Dialogs.qml:129
177msgctxt "Title: Reboot dialog"
177msgctxt "Title: Reboot dialog"
178msgid "Reboot"
178msgid "Reboot"
179−msgstr ""
179+msgstr "ចាប់ផ្ដើម​ឡើងវិញ"
180
180
181#: qml/Components/Dialogs.qml:130
181#: qml/Components/Dialogs.qml:130
182msgid "Are you sure you want to reboot?"
182msgid "Are you sure you want to reboot?"
@@ -193,7 +193,7 @@ msgstr "បាទ/ចាស"
193#: qml/Components/Dialogs.qml:152
193#: qml/Components/Dialogs.qml:152
194msgctxt "Title: Power off/Restart dialog"
194msgctxt "Title: Power off/Restart dialog"
195msgid "Power"
195msgid "Power"
196−msgstr ""
196+msgstr "ថាមពល"
197
197
198#: qml/Components/Dialogs.qml:153
198#: qml/Components/Dialogs.qml:153
199msgid ""
199msgid ""
@@ -206,12 +206,12 @@ msgstr ""
206#: qml/Components/Dialogs.qml:155
206#: qml/Components/Dialogs.qml:155
207msgctxt "Button: Power off the system"
207msgctxt "Button: Power off the system"
208msgid "Power off"
208msgid "Power off"
209−msgstr ""
209+msgstr "បិទ"
210
210
211#: qml/Components/Dialogs.qml:164
211#: qml/Components/Dialogs.qml:164
212msgctxt "Button: Restart the system"
212msgctxt "Button: Restart the system"
213msgid "Restart"
213msgid "Restart"
214−msgstr ""
214+msgstr "ចាប់ផ្ដើម​ឡើងវិញ"
215
215
216#: qml/Components/Lockscreen.qml:245
216#: qml/Components/Lockscreen.qml:245
217msgid "Return to Call"
217msgid "Return to Call"
@@ -236,22 +236,22 @@ msgstr "មើល​ទាំងអស់"
236#: qml/Dash/GenericScopeView.qml:601
236#: qml/Dash/GenericScopeView.qml:601
237msgctxt "Label: Hint for dash search line edit"
237msgctxt "Label: Hint for dash search line edit"
238msgid "Search"
238msgid "Search"
239−msgstr ""
239+msgstr "ស្វែងរក"
240
240
241#: qml/Dash/PageHeader.qml:269
241#: qml/Dash/PageHeader.qml:269
242msgctxt "Button: Open the Ubuntu Store"
242msgctxt "Button: Open the Ubuntu Store"
243msgid "Store"
243msgid "Store"
244−msgstr ""
244+msgstr "រក្សាទុក"
245
245
246#: qml/Dash/PageHeader.qml:276
246#: qml/Dash/PageHeader.qml:276
247msgctxt "Button: Start a search in the current dash scope"
247msgctxt "Button: Start a search in the current dash scope"
248msgid "Search"
248msgid "Search"
249−msgstr ""
249+msgstr "ស្វែងរក"
250
250
251#: qml/Dash/PageHeader.qml:286
251#: qml/Dash/PageHeader.qml:286
252msgctxt "Button: Show the current dash scope settings"
252msgctxt "Button: Show the current dash scope settings"
253msgid "Settings"
253msgid "Settings"
254−msgstr ""
254+msgstr "ការ​កំណត់"
255
255
256#: qml/Dash/PageHeader.qml:293
256#: qml/Dash/PageHeader.qml:293
257msgid "Remove from Favorites"
257msgid "Remove from Favorites"
@@ -295,11 +295,11 @@ msgstr ""
295
295
296#: qml/Dash/ScopesList.qml:67
296#: qml/Dash/ScopesList.qml:67
297msgid "Manage"
297msgid "Manage"
298−msgstr ""
298+msgstr "គ្រប់គ្រង"
299
299
300#: qml/Dash/ScopesList.qml:113
300#: qml/Dash/ScopesList.qml:113
301msgid "Home"
301msgid "Home"
302−msgstr ""
302+msgstr "ផ្ទះ"
303
303
304#: qml/Dash/ScopesList.qml:114
304#: qml/Dash/ScopesList.qml:114
305msgid "Also installed"
305msgid "Also installed"
@@ -307,11 +307,11 @@ msgstr ""
307
307
308#: qml/Greeter/CoverPage.qml:107
308#: qml/Greeter/CoverPage.qml:107
309msgid "Unlock"
309msgid "Unlock"
310−msgstr ""
310+msgstr "ដោះ​សោ"
311
311
312#: qml/Greeter/LoginList.qml:236
312#: qml/Greeter/LoginList.qml:236
313msgid "Retry"
313msgid "Retry"
314−msgstr ""
314+msgstr "ព្យាយាម​ម្ដងទៀត"
315
315
316#: qml/Greeter/LoginList.qml:237
316#: qml/Greeter/LoginList.qml:237
317msgid "Tap to unlock"
317msgid "Tap to unlock"
@@ -452,7 +452,7 @@ msgstr "បាន​បរាជ័យ ប៉ះ​ ដើម្បី​ព្
452#: qml/Panel/Indicators/MessageMenuItemFactory.qml:149
452#: qml/Panel/Indicators/MessageMenuItemFactory.qml:149
453msgctxt "Label: Hint in message indicator line edit"
453msgctxt "Label: Hint in message indicator line edit"
454msgid "Reply"
454msgid "Reply"
455−msgstr ""
455+msgstr "ឆ្លើយតប"
456
456
457#: qml/Panel/Indicators/ModemInfoItem.qml:105
457#: qml/Panel/Indicators/ModemInfoItem.qml:105
458msgid "Unlock SIM"
458msgid "Unlock SIM"
@@ -522,26 +522,26 @@ msgstr ""
522#: qml/Wizard/Page.qml:89
522#: qml/Wizard/Page.qml:89
523msgctxt "Button: Go back one page in the Wizard"
523msgctxt "Button: Go back one page in the Wizard"
524msgid "Back"
524msgid "Back"
525−msgstr ""
525+msgstr "ថយក្រោយ"
526
526
527#: qml/Wizard/Pages/10-welcome.qml:27
527#: qml/Wizard/Pages/10-welcome.qml:27
528msgid "Hi!"
528msgid "Hi!"
529−msgstr ""
529+msgstr "សួស្ដី!"
530
530
531#: qml/Wizard/Pages/10-welcome.qml:44
531#: qml/Wizard/Pages/10-welcome.qml:44
532msgid "Welcome to your Ubuntu phone."
532msgid "Welcome to your Ubuntu phone."
533−msgstr ""
533+msgstr "សូម​ស្វាគមន៍​មកកាន់​ទូរស័ព្ទ Ubuntu ។"
534
534
535#: qml/Wizard/Pages/10-welcome.qml:52
535#: qml/Wizard/Pages/10-welcome.qml:52
536msgid "Let’s get started."
536msgid "Let’s get started."
537−msgstr ""
537+msgstr "តោះ​ចាប់ផ្ដើម។"
538
538
539#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:128
539#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:128
540#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
540#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
541#: qml/Wizard/Pages/60-reporting.qml:50 qml/Wizard/Pages/passwd-confirm.qml:82
541#: qml/Wizard/Pages/60-reporting.qml:50 qml/Wizard/Pages/passwd-confirm.qml:82
542#: qml/Wizard/Pages/passwd-set.qml:90
542#: qml/Wizard/Pages/passwd-set.qml:90
543msgid "Continue"
543msgid "Continue"
544−msgstr ""
544+msgstr "បន្ត"
545
545
546#: qml/Wizard/Pages/20-sim.qml:25
546#: qml/Wizard/Pages/20-sim.qml:25
547msgid "Add a SIM card and restart your device"
547msgid "Add a SIM card and restart your device"
@@ -553,11 +553,11 @@ msgstr ""
553
553
554#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
554#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
555msgid "Skip"
555msgid "Skip"
556−msgstr ""
556+msgstr "រំលង"
557
557
558#: qml/Wizard/Pages/30-passwd-type.qml:39
558#: qml/Wizard/Pages/30-passwd-type.qml:39
559msgid "Lock security"
559msgid "Lock security"
560−msgstr ""
560+msgstr "ចាក់សោ​សុវត្ថិភាព"
561
561
562#: qml/Wizard/Pages/30-passwd-type.qml:74
562#: qml/Wizard/Pages/30-passwd-type.qml:74
563msgid "Please select how you’d like to unlock your phone."
563msgid "Please select how you’d like to unlock your phone."
@@ -566,7 +566,7 @@ msgstr ""
566#: qml/Wizard/Pages/30-passwd-type.qml:97
566#: qml/Wizard/Pages/30-passwd-type.qml:97
567msgctxt "Label: Type of security method"
567msgctxt "Label: Type of security method"
568msgid "Swipe"
568msgid "Swipe"
569−msgstr ""
569+msgstr "រុញ"
570
570
571#: qml/Wizard/Pages/30-passwd-type.qml:98
571#: qml/Wizard/Pages/30-passwd-type.qml:98
572msgctxt "Label: Description of security method"
572msgctxt "Label: Description of security method"
@@ -586,7 +586,7 @@ msgstr ""
586#: qml/Wizard/Pages/30-passwd-type.qml:103
586#: qml/Wizard/Pages/30-passwd-type.qml:103
587msgctxt "Label: Type of security method"
587msgctxt "Label: Type of security method"
588msgid "Passphrase"
588msgid "Passphrase"
589−msgstr ""
589+msgstr "ឃ្លាសម្ងាត់"
590
590
591#: qml/Wizard/Pages/30-passwd-type.qml:104
591#: qml/Wizard/Pages/30-passwd-type.qml:104
592msgctxt "Label: Description of security method"
592msgctxt "Label: Description of security method"
@@ -607,7 +607,7 @@ msgstr ""
607
607
608#: qml/Wizard/Pages/50-location.qml:27
608#: qml/Wizard/Pages/50-location.qml:27
609msgid "Location"
609msgid "Location"
610−msgstr ""
610+msgstr "ទីតាំង"
611
611
612#: qml/Wizard/Pages/50-location.qml:62
612#: qml/Wizard/Pages/50-location.qml:62
613msgid "Let the phone detect your location:"
613msgid "Let the phone detect your location:"
@@ -654,27 +654,27 @@ msgstr ""
654
654
655#: qml/Wizard/Pages/80-finished.qml:24
655#: qml/Wizard/Pages/80-finished.qml:24
656msgid "All done"
656msgid "All done"
657−msgstr ""
657+msgstr "ធ្វើ​រួច​ទាំងអស់"
658
658
659#: qml/Wizard/Pages/80-finished.qml:39
659#: qml/Wizard/Pages/80-finished.qml:39
660msgid "Nice work!"
660msgid "Nice work!"
661−msgstr ""
661+msgstr "ដំណើរការ​ល្អ!"
662
662
663#: qml/Wizard/Pages/80-finished.qml:46
663#: qml/Wizard/Pages/80-finished.qml:46
664msgid "Your phone is now ready to use."
664msgid "Your phone is now ready to use."
665−msgstr ""
665+msgstr "ទូរស័ព្ទ​របស់​អ្នក​ឥឡូវ​អាច​ប្រើ​បាន។"
666
666
667#: qml/Wizard/Pages/80-finished.qml:53
667#: qml/Wizard/Pages/80-finished.qml:53
668msgid "Finish"
668msgid "Finish"
669−msgstr ""
669+msgstr "បញ្ចប់"
670
670
671#: qml/Wizard/Pages/here-terms.qml:27
671#: qml/Wizard/Pages/here-terms.qml:27
672msgid "Terms & Conditions"
672msgid "Terms & Conditions"
673−msgstr ""
673+msgstr "លក្ខខណ្ឌ​ប្រើប្រាស់"
674
674
675#: qml/Wizard/Pages/passwd-confirm.qml:49
675#: qml/Wizard/Pages/passwd-confirm.qml:49
676msgid "Confirm passphrase"
676msgid "Confirm passphrase"
677−msgstr ""
677+msgstr "បញ្ជាក់​ឃ្លា​សម្ងាត់"
678
678
679#: qml/Wizard/Pages/passwd-confirm.qml:50
679#: qml/Wizard/Pages/passwd-confirm.qml:50
680msgid "Confirm passcode"
680msgid "Confirm passcode"
@@ -683,7 +683,7 @@ msgstr ""
683#: qml/Wizard/Pages/passwd-confirm.qml:53
683#: qml/Wizard/Pages/passwd-confirm.qml:53
684#: qml/Wizard/Pages/passwd-confirm.qml:54
684#: qml/Wizard/Pages/passwd-confirm.qml:54
685msgid "Please try again."
685msgid "Please try again."
686−msgstr ""
686+msgstr "សូម​ព្យាយាម​ម្ដងទៀត។"
687
687
688#: qml/Wizard/Pages/passwd-set.qml:61
688#: qml/Wizard/Pages/passwd-set.qml:61
689msgid "Choose your passcode"
689msgid "Choose your passcode"
@@ -697,13 +697,13 @@ msgstr ""
697#: qml/Wizard/StackButton.qml:39
697#: qml/Wizard/StackButton.qml:39
698#, qt-format
698#, qt-format
699msgid "〈 %1"
699msgid "〈 %1"
700−msgstr ""
700+msgstr "〈 %1"
701
701
702#. Translators: This is the arrow for "Forward" buttons
702#. Translators: This is the arrow for "Forward" buttons
703#: qml/Wizard/StackButton.qml:42
703#: qml/Wizard/StackButton.qml:42
704#, qt-format
704#, qt-format
705msgid "%1 〉"
705msgid "%1 〉"
706−msgstr ""
706+msgstr "%1 〉"
707
707
708#~ msgid "Try swiping from the right edge to unlock the phone"
708#~ msgid "Try swiping from the right edge to unlock the phone"
709#~ msgstr "សាកល្បង​​អូស​ពី​គែម​ស្ដាំ​ ដើម្បី​ដោះ​សោ​ទូរស័ព្ទ"
709#~ msgstr "សាកល្បង​​អូស​ពី​គែម​ស្ដាំ​ ដើម្បី​ដោះ​សោ​ទូរស័ព្ទ"
po/kn.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/ko.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/ku.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/ky.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/lo.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/lt.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"(n%100<10 || n%100>=20) ? 1 : 2;\n"
18"(n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
20−"X-Generator: Launchpad (build 17628)\n"
20+"X-Generator: Launchpad (build 17686)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
po/lv.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
17"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"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/ml.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/mr.po+12−12
@@ -15,12 +15,12 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
23−msgstr ""
23+msgstr "पासवर्ड: "
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:45
25#: plugins/Unity/Launcher/launcheritem.cpp:45
26#: plugins/Unity/Launcher/launcheritem.cpp:100
26#: plugins/Unity/Launcher/launcheritem.cpp:100
@@ -142,7 +142,7 @@ msgstr ""
142#: qml/Components/Dialogs.qml:72
142#: qml/Components/Dialogs.qml:72
143msgctxt "Button: Lock the system"
143msgctxt "Button: Lock the system"
144msgid "Lock"
144msgid "Lock"
145−msgstr ""
145+msgstr "लॉक करा"
146
146
147#: qml/Components/Dialogs.qml:79
147#: qml/Components/Dialogs.qml:79
148msgctxt "Button: Log out from the system"
148msgctxt "Button: Log out from the system"
@@ -152,7 +152,7 @@ msgstr ""
152#: qml/Components/Dialogs.qml:86 qml/Components/Dialogs.qml:117
152#: qml/Components/Dialogs.qml:86 qml/Components/Dialogs.qml:117
153#: qml/Components/Dialogs.qml:173
153#: qml/Components/Dialogs.qml:173
154msgid "Cancel"
154msgid "Cancel"
155−msgstr ""
155+msgstr "रद्द"
156
156
157#: qml/Components/Dialogs.qml:98
157#: qml/Components/Dialogs.qml:98
158msgctxt "Title: Reboot/Shut down dialog"
158msgctxt "Title: Reboot/Shut down dialog"
@@ -184,11 +184,11 @@ msgstr ""
184
184
185#: qml/Components/Dialogs.qml:132
185#: qml/Components/Dialogs.qml:132
186msgid "No"
186msgid "No"
187−msgstr ""
187+msgstr "नाही"
188
188
189#: qml/Components/Dialogs.qml:138
189#: qml/Components/Dialogs.qml:138
190msgid "Yes"
190msgid "Yes"
191−msgstr ""
191+msgstr "हो"
192
192
193#: qml/Components/Dialogs.qml:152
193#: qml/Components/Dialogs.qml:152
194msgctxt "Title: Power off/Restart dialog"
194msgctxt "Title: Power off/Restart dialog"
@@ -234,7 +234,7 @@ msgstr ""
234#: qml/Dash/GenericScopeView.qml:601
234#: qml/Dash/GenericScopeView.qml:601
235msgctxt "Label: Hint for dash search line edit"
235msgctxt "Label: Hint for dash search line edit"
236msgid "Search"
236msgid "Search"
237−msgstr ""
237+msgstr "शोध"
238
238
239#: qml/Dash/PageHeader.qml:269
239#: qml/Dash/PageHeader.qml:269
240msgctxt "Button: Open the Ubuntu Store"
240msgctxt "Button: Open the Ubuntu Store"
@@ -244,7 +244,7 @@ msgstr ""
244#: qml/Dash/PageHeader.qml:276
244#: qml/Dash/PageHeader.qml:276
245msgctxt "Button: Start a search in the current dash scope"
245msgctxt "Button: Start a search in the current dash scope"
246msgid "Search"
246msgid "Search"
247−msgstr ""
247+msgstr "शोध"
248
248
249#: qml/Dash/PageHeader.qml:286
249#: qml/Dash/PageHeader.qml:286
250msgctxt "Button: Show the current dash scope settings"
250msgctxt "Button: Show the current dash scope settings"
@@ -253,11 +253,11 @@ msgstr ""
253
253
254#: qml/Dash/PageHeader.qml:293
254#: qml/Dash/PageHeader.qml:293
255msgid "Remove from Favorites"
255msgid "Remove from Favorites"
256−msgstr ""
256+msgstr "आवड पासून काढूण टाका"
257
257
258#: qml/Dash/PageHeader.qml:293
258#: qml/Dash/PageHeader.qml:293
259msgid "Add to Favorites"
259msgid "Add to Favorites"
260−msgstr ""
260+msgstr "आवड मध्ये जोडा"
261
261
262#: qml/Dash/Previews/PreviewActionCombo.qml:35
262#: qml/Dash/Previews/PreviewActionCombo.qml:35
263msgid "More..."
263msgid "More..."
@@ -277,7 +277,7 @@ msgstr ""
277
277
278#: qml/Dash/Previews/PreviewRatingInput.qml:169
278#: qml/Dash/Previews/PreviewRatingInput.qml:169
279msgid "Send"
279msgid "Send"
280−msgstr ""
280+msgstr "पाठवा"
281
281
282#: qml/Dash/PullToRefreshScopeStyle.qml:55
282#: qml/Dash/PullToRefreshScopeStyle.qml:55
283msgid "Pull to refresh…"
283msgid "Pull to refresh…"
po/ms.po+81−73
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -135,7 +135,7 @@ msgstr[1] "Sila tunggu %1 minit kemudian cuba lagi..."
135#: qml/Components/Dialogs.qml:69
135#: qml/Components/Dialogs.qml:69
136msgctxt "Title: Lock/Log out dialog"
136msgctxt "Title: Lock/Log out dialog"
137msgid "Log out"
137msgid "Log out"
138−msgstr ""
138+msgstr "Daftar keluar"
139
139
140#: qml/Components/Dialogs.qml:70
140#: qml/Components/Dialogs.qml:70
141msgid "Are you sure you want to log out?"
141msgid "Are you sure you want to log out?"
@@ -144,12 +144,12 @@ msgstr "Anda pasti mahu mendaftar keluar?"
144#: qml/Components/Dialogs.qml:72
144#: qml/Components/Dialogs.qml:72
145msgctxt "Button: Lock the system"
145msgctxt "Button: Lock the system"
146msgid "Lock"
146msgid "Lock"
147−msgstr ""
147+msgstr "Kunci"
148
148
149#: qml/Components/Dialogs.qml:79
149#: qml/Components/Dialogs.qml:79
150msgctxt "Button: Log out from the system"
150msgctxt "Button: Log out from the system"
151msgid "Log Out"
151msgid "Log Out"
152−msgstr ""
152+msgstr "Daftar Keluar"
153
153
154#: qml/Components/Dialogs.qml:86 qml/Components/Dialogs.qml:117
154#: qml/Components/Dialogs.qml:86 qml/Components/Dialogs.qml:117
155#: qml/Components/Dialogs.qml:173
155#: qml/Components/Dialogs.qml:173
@@ -159,7 +159,7 @@ msgstr "Batal"
159#: qml/Components/Dialogs.qml:98
159#: qml/Components/Dialogs.qml:98
160msgctxt "Title: Reboot/Shut down dialog"
160msgctxt "Title: Reboot/Shut down dialog"
161msgid "Shut down"
161msgid "Shut down"
162−msgstr ""
162+msgstr "Matikan"
163
163
164#: qml/Components/Dialogs.qml:99
164#: qml/Components/Dialogs.qml:99
165msgid "Are you sure you want to shut down?"
165msgid "Are you sure you want to shut down?"
@@ -168,17 +168,17 @@ msgstr "Anda pasti mahu matikan?"
168#: qml/Components/Dialogs.qml:101
168#: qml/Components/Dialogs.qml:101
169msgctxt "Button: Reboot the system"
169msgctxt "Button: Reboot the system"
170msgid "Reboot"
170msgid "Reboot"
171−msgstr ""
171+msgstr "But Semula"
172
172
173#: qml/Components/Dialogs.qml:109
173#: qml/Components/Dialogs.qml:109
174msgctxt "Button: Shut down the system"
174msgctxt "Button: Shut down the system"
175msgid "Shut down"
175msgid "Shut down"
176−msgstr ""
176+msgstr "Matikan"
177
177
178#: qml/Components/Dialogs.qml:129
178#: qml/Components/Dialogs.qml:129
179msgctxt "Title: Reboot dialog"
179msgctxt "Title: Reboot dialog"
180msgid "Reboot"
180msgid "Reboot"
181−msgstr ""
181+msgstr "But Semula"
182
182
183#: qml/Components/Dialogs.qml:130
183#: qml/Components/Dialogs.qml:130
184msgid "Are you sure you want to reboot?"
184msgid "Are you sure you want to reboot?"
@@ -195,7 +195,7 @@ msgstr "Ya"
195#: qml/Components/Dialogs.qml:152
195#: qml/Components/Dialogs.qml:152
196msgctxt "Title: Power off/Restart dialog"
196msgctxt "Title: Power off/Restart dialog"
197msgid "Power"
197msgid "Power"
198−msgstr ""
198+msgstr "Kuasa"
199
199
200#: qml/Components/Dialogs.qml:153
200#: qml/Components/Dialogs.qml:153
201msgid ""
201msgid ""
@@ -206,16 +206,16 @@ msgstr "Anda pasti mahu tutup?"
206#: qml/Components/Dialogs.qml:155
206#: qml/Components/Dialogs.qml:155
207msgctxt "Button: Power off the system"
207msgctxt "Button: Power off the system"
208msgid "Power off"
208msgid "Power off"
209−msgstr ""
209+msgstr "Padam"
210
210
211#: qml/Components/Dialogs.qml:164
211#: qml/Components/Dialogs.qml:164
212msgctxt "Button: Restart the system"
212msgctxt "Button: Restart the system"
213msgid "Restart"
213msgid "Restart"
214−msgstr ""
214+msgstr "Mula Semula"
215
215
216#: qml/Components/Lockscreen.qml:245
216#: qml/Components/Lockscreen.qml:245
217msgid "Return to Call"
217msgid "Return to Call"
218−msgstr ""
218+msgstr "Kembali ke Panggilan"
219
219
220#: qml/Components/Lockscreen.qml:245
220#: qml/Components/Lockscreen.qml:245
221msgid "Emergency Call"
221msgid "Emergency Call"
@@ -236,22 +236,22 @@ msgstr "Lihat semua"
236#: qml/Dash/GenericScopeView.qml:601
236#: qml/Dash/GenericScopeView.qml:601
237msgctxt "Label: Hint for dash search line edit"
237msgctxt "Label: Hint for dash search line edit"
238msgid "Search"
238msgid "Search"
239−msgstr ""
239+msgstr "Gelintar"
240
240
241#: qml/Dash/PageHeader.qml:269
241#: qml/Dash/PageHeader.qml:269
242msgctxt "Button: Open the Ubuntu Store"
242msgctxt "Button: Open the Ubuntu Store"
243msgid "Store"
243msgid "Store"
244−msgstr ""
244+msgstr "Kedai"
245
245
246#: qml/Dash/PageHeader.qml:276
246#: qml/Dash/PageHeader.qml:276
247msgctxt "Button: Start a search in the current dash scope"
247msgctxt "Button: Start a search in the current dash scope"
248msgid "Search"
248msgid "Search"
249−msgstr ""
249+msgstr "Gelintar"
250
250
251#: qml/Dash/PageHeader.qml:286
251#: qml/Dash/PageHeader.qml:286
252msgctxt "Button: Show the current dash scope settings"
252msgctxt "Button: Show the current dash scope settings"
253msgid "Settings"
253msgid "Settings"
254−msgstr ""
254+msgstr "Tetapan"
255
255
256#: qml/Dash/PageHeader.qml:293
256#: qml/Dash/PageHeader.qml:293
257msgid "Remove from Favorites"
257msgid "Remove from Favorites"
@@ -291,19 +291,19 @@ msgstr "Lepas untuk segar semula..."
291
291
292#: qml/Dash/ScopeSettings/ScopeSettingBoolean.qml:43
292#: qml/Dash/ScopeSettings/ScopeSettingBoolean.qml:43
293msgid "Enable location data"
293msgid "Enable location data"
294−msgstr ""
294+msgstr "Benarkan data lokasi"
295
295
296#: qml/Dash/ScopesList.qml:67
296#: qml/Dash/ScopesList.qml:67
297msgid "Manage"
297msgid "Manage"
298−msgstr ""
298+msgstr "Urus"
299
299
300#: qml/Dash/ScopesList.qml:113
300#: qml/Dash/ScopesList.qml:113
301msgid "Home"
301msgid "Home"
302−msgstr ""
302+msgstr "Rumah"
303
303
304#: qml/Dash/ScopesList.qml:114
304#: qml/Dash/ScopesList.qml:114
305msgid "Also installed"
305msgid "Also installed"
306−msgstr ""
306+msgstr "Juga dipasang"
307
307
308#: qml/Greeter/CoverPage.qml:107
308#: qml/Greeter/CoverPage.qml:107
309msgid "Unlock"
309msgid "Unlock"
@@ -311,11 +311,11 @@ msgstr "Buka"
311
311
312#: qml/Greeter/LoginList.qml:236
312#: qml/Greeter/LoginList.qml:236
313msgid "Retry"
313msgid "Retry"
314−msgstr ""
314+msgstr "Cuba Lagi"
315
315
316#: qml/Greeter/LoginList.qml:237
316#: qml/Greeter/LoginList.qml:237
317msgid "Tap to unlock"
317msgid "Tap to unlock"
318−msgstr ""
318+msgstr "Ketik untuk buka"
319
319
320#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:53
320#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:53
321msgid "Sorry, incorrect passphrase."
321msgid "Sorry, incorrect passphrase."
@@ -450,7 +450,7 @@ msgstr "Gagal, ketuk untuk cuba lagi"
450#: qml/Panel/Indicators/MessageMenuItemFactory.qml:149
450#: qml/Panel/Indicators/MessageMenuItemFactory.qml:149
451msgctxt "Label: Hint in message indicator line edit"
451msgctxt "Label: Hint in message indicator line edit"
452msgid "Reply"
452msgid "Reply"
453−msgstr ""
453+msgstr "Balas"
454
454
455#: qml/Panel/Indicators/ModemInfoItem.qml:105
455#: qml/Panel/Indicators/ModemInfoItem.qml:105
456msgid "Unlock SIM"
456msgid "Unlock SIM"
@@ -462,24 +462,24 @@ msgstr "Perayauan"
462
462
463#: qml/Tutorial/TutorialBottomFinish.qml:24
463#: qml/Tutorial/TutorialBottomFinish.qml:24
464msgid "This action does different things for different apps"
464msgid "This action does different things for different apps"
465−msgstr ""
465+msgstr "Tindakan ini melakukan perkara yang berlainan untuk apl berbeza"
466
466
467#: qml/Tutorial/TutorialBottomFinish.qml:25
467#: qml/Tutorial/TutorialBottomFinish.qml:25
468msgid "Tap here to finish."
468msgid "Tap here to finish."
469−msgstr ""
469+msgstr "Ketik di sini untuk selesaikan."
470
470
471#: qml/Tutorial/TutorialBottom.qml:28
471#: qml/Tutorial/TutorialBottom.qml:28
472msgid "Open special menus"
472msgid "Open special menus"
473−msgstr ""
473+msgstr "Buka menu khas"
474
474
475#: qml/Tutorial/TutorialBottom.qml:29
475#: qml/Tutorial/TutorialBottom.qml:29
476msgid "Swipe up from the bottom edge."
476msgid "Swipe up from the bottom edge."
477−msgstr ""
477+msgstr "Leret ke ata dari pinggir bawah."
478
478
479#: qml/Tutorial/TutorialContent.qml:81 qml/Tutorial/TutorialLeftFinish.qml:25
479#: qml/Tutorial/TutorialContent.qml:81 qml/Tutorial/TutorialLeftFinish.qml:25
480#: qml/Tutorial/TutorialRight.qml:144
480#: qml/Tutorial/TutorialRight.qml:144
481msgid "Tap here to continue."
481msgid "Tap here to continue."
482−msgstr ""
482+msgstr "Ketik di sini untuk teruskan."
483
483
484#: qml/Tutorial/TutorialContent.qml:81
484#: qml/Tutorial/TutorialContent.qml:81
485msgid "Click here to finish."
485msgid "Click here to finish."
@@ -487,137 +487,139 @@ msgstr ""
487
487
488#: qml/Tutorial/TutorialLeftFinish.qml:24
488#: qml/Tutorial/TutorialLeftFinish.qml:24
489msgid "These are the shortcuts to favorite apps"
489msgid "These are the shortcuts to favorite apps"
490−msgstr ""
490+msgstr "Ini adalah pintasan ke apl kegemaran"
491
491
492#: qml/Tutorial/TutorialLeft.qml:26
492#: qml/Tutorial/TutorialLeft.qml:26
493msgid "Open the launcher"
493msgid "Open the launcher"
494−msgstr ""
494+msgstr "Buka pelancar"
495
495
496#: qml/Tutorial/TutorialLeft.qml:27
496#: qml/Tutorial/TutorialLeft.qml:27
497msgid "Short swipe from the left edge."
497msgid "Short swipe from the left edge."
498−msgstr ""
498+msgstr "Leret pendek dari pinggir kiri."
499
499
500#: qml/Tutorial/TutorialPage.qml:178
500#: qml/Tutorial/TutorialPage.qml:178
501msgid "You almost got it!"
501msgid "You almost got it!"
502−msgstr ""
502+msgstr "Anda hampir berjaya!"
503
503
504#: qml/Tutorial/TutorialPage.qml:195
504#: qml/Tutorial/TutorialPage.qml:195
505msgid "Try again."
505msgid "Try again."
506−msgstr ""
506+msgstr "Cuba lagi."
507
507
508#: qml/Tutorial/TutorialRight.qml:31
508#: qml/Tutorial/TutorialRight.qml:31
509msgid "To view open apps"
509msgid "To view open apps"
510−msgstr ""
510+msgstr "Untuk melihat apl dibuka"
511
511
512#: qml/Tutorial/TutorialRight.qml:32
512#: qml/Tutorial/TutorialRight.qml:32
513msgid "Long swipe from the right edge."
513msgid "Long swipe from the right edge."
514−msgstr ""
514+msgstr "Leret panjang dari pinggir kanan."
515
515
516#: qml/Tutorial/TutorialRight.qml:122
516#: qml/Tutorial/TutorialRight.qml:122
517msgid "View all your running tasks."
517msgid "View all your running tasks."
518−msgstr ""
518+msgstr "Lihat semua tugas yang berjalan."
519
519
520#: qml/Wizard/Page.qml:89
520#: qml/Wizard/Page.qml:89
521msgctxt "Button: Go back one page in the Wizard"
521msgctxt "Button: Go back one page in the Wizard"
522msgid "Back"
522msgid "Back"
523−msgstr ""
523+msgstr "Kembali"
524
524
525#: qml/Wizard/Pages/10-welcome.qml:27
525#: qml/Wizard/Pages/10-welcome.qml:27
526msgid "Hi!"
526msgid "Hi!"
527−msgstr ""
527+msgstr "Hai"
528
528
529#: qml/Wizard/Pages/10-welcome.qml:44
529#: qml/Wizard/Pages/10-welcome.qml:44
530msgid "Welcome to your Ubuntu phone."
530msgid "Welcome to your Ubuntu phone."
531−msgstr ""
531+msgstr "Selamat datang ke telefon Ubuntu anda."
532
532
533#: qml/Wizard/Pages/10-welcome.qml:52
533#: qml/Wizard/Pages/10-welcome.qml:52
534msgid "Let’s get started."
534msgid "Let’s get started."
535−msgstr ""
535+msgstr "Mari mulakan."
536
536
537#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:128
537#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:128
538#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
538#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
539#: qml/Wizard/Pages/60-reporting.qml:50 qml/Wizard/Pages/passwd-confirm.qml:82
539#: qml/Wizard/Pages/60-reporting.qml:50 qml/Wizard/Pages/passwd-confirm.qml:82
540#: qml/Wizard/Pages/passwd-set.qml:90
540#: qml/Wizard/Pages/passwd-set.qml:90
541msgid "Continue"
541msgid "Continue"
542−msgstr ""
542+msgstr "Teruskan"
543
543
544#: qml/Wizard/Pages/20-sim.qml:25
544#: qml/Wizard/Pages/20-sim.qml:25
545msgid "Add a SIM card and restart your device"
545msgid "Add a SIM card and restart your device"
546−msgstr ""
546+msgstr "Tambah kad SIM dan mulakan semula peranti anda"
547
547
548#: qml/Wizard/Pages/20-sim.qml:59
548#: qml/Wizard/Pages/20-sim.qml:59
549msgid "Without it, you won’t be able to make calls or use text messaging."
549msgid "Without it, you won’t be able to make calls or use text messaging."
550msgstr ""
550msgstr ""
551+"Tanpanya, anda tidak boleh membuat panggilan atau guna pemesejan teks."
551
552
552#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
553#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
553msgid "Skip"
554msgid "Skip"
554−msgstr ""
555+msgstr "Langkau"
555
556
556#: qml/Wizard/Pages/30-passwd-type.qml:39
557#: qml/Wizard/Pages/30-passwd-type.qml:39
557msgid "Lock security"
558msgid "Lock security"
558−msgstr ""
559+msgstr "Kunci keselamatan"
559
560
560#: qml/Wizard/Pages/30-passwd-type.qml:74
561#: qml/Wizard/Pages/30-passwd-type.qml:74
561msgid "Please select how you’d like to unlock your phone."
562msgid "Please select how you’d like to unlock your phone."
562−msgstr ""
563+msgstr "Sila pilih bagaimana anda mahu membuka telefon anda."
563
564
564#: qml/Wizard/Pages/30-passwd-type.qml:97
565#: qml/Wizard/Pages/30-passwd-type.qml:97
565msgctxt "Label: Type of security method"
566msgctxt "Label: Type of security method"
566msgid "Swipe"
567msgid "Swipe"
567−msgstr ""
568+msgstr "Leret"
568
569
569#: qml/Wizard/Pages/30-passwd-type.qml:98
570#: qml/Wizard/Pages/30-passwd-type.qml:98
570msgctxt "Label: Description of security method"
571msgctxt "Label: Description of security method"
571msgid "No security"
572msgid "No security"
572−msgstr ""
573+msgstr "Tanpa keselamatan"
573
574
574#: qml/Wizard/Pages/30-passwd-type.qml:100
575#: qml/Wizard/Pages/30-passwd-type.qml:100
575msgctxt "Label: Type of security method"
576msgctxt "Label: Type of security method"
576msgid "Passcode"
577msgid "Passcode"
577−msgstr ""
578+msgstr "Kod laluan"
578
579
579#: qml/Wizard/Pages/30-passwd-type.qml:101
580#: qml/Wizard/Pages/30-passwd-type.qml:101
580msgctxt "Label: Description of security method"
581msgctxt "Label: Description of security method"
581msgid "4 digits only"
582msgid "4 digits only"
582−msgstr ""
583+msgstr "4 digit sahaja"
583
584
584#: qml/Wizard/Pages/30-passwd-type.qml:103
585#: qml/Wizard/Pages/30-passwd-type.qml:103
585msgctxt "Label: Type of security method"
586msgctxt "Label: Type of security method"
586msgid "Passphrase"
587msgid "Passphrase"
587−msgstr ""
588+msgstr "Frasa laluan"
588
589
589#: qml/Wizard/Pages/30-passwd-type.qml:104
590#: qml/Wizard/Pages/30-passwd-type.qml:104
590msgctxt "Label: Description of security method"
591msgctxt "Label: Description of security method"
591msgid "Numbers and letters"
592msgid "Numbers and letters"
592−msgstr ""
593+msgstr "Nombor dan abjad"
593
594
594#: qml/Wizard/Pages/40-wifi.qml:29
595#: qml/Wizard/Pages/40-wifi.qml:29
595msgid "Connect to Wi‑Fi"
596msgid "Connect to Wi‑Fi"
596−msgstr ""
597+msgstr "Sambung ke Wi-Fi"
597
598
598#: qml/Wizard/Pages/40-wifi.qml:168
599#: qml/Wizard/Pages/40-wifi.qml:168
599msgid "Available networks…"
600msgid "Available networks…"
600−msgstr ""
601+msgstr "Rangkaian tersedia..."
601
602
602#: qml/Wizard/Pages/40-wifi.qml:169
603#: qml/Wizard/Pages/40-wifi.qml:169
603msgid "No available networks."
604msgid "No available networks."
604−msgstr ""
605+msgstr "Tiada rangkaian tersedia."
605
606
606#: qml/Wizard/Pages/50-location.qml:27
607#: qml/Wizard/Pages/50-location.qml:27
607msgid "Location"
608msgid "Location"
608−msgstr ""
609+msgstr "Lokasi"
609
610
610#: qml/Wizard/Pages/50-location.qml:62
611#: qml/Wizard/Pages/50-location.qml:62
611msgid "Let the phone detect your location:"
612msgid "Let the phone detect your location:"
612−msgstr ""
613+msgstr "Biarkan telefon mengesan lokasi anda:"
613
614
614#: qml/Wizard/Pages/50-location.qml:69
615#: qml/Wizard/Pages/50-location.qml:69
615msgid "Using GPS only (less accurate)"
616msgid "Using GPS only (less accurate)"
616−msgstr ""
617+msgstr "Hanya gunakan GPS (kurang tepat)"
617
618
618#: qml/Wizard/Pages/50-location.qml:86
619#: qml/Wizard/Pages/50-location.qml:86
619msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
620msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
620msgstr ""
621msgstr ""
622+"Gunakan GPS, Wi-Fi awanama dan maklumat rangkaian selular (disarankan)"
621
623
622#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
624#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
623#: qml/Wizard/Pages/50-location.qml:103
625#: qml/Wizard/Pages/50-location.qml:103
@@ -625,83 +627,89 @@ msgid ""
625"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
627"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
626"conditions</a>."
628"conditions</a>."
627msgstr ""
629msgstr ""
630+"Dengan memilih pilihan ini anda menyetujui <a href='#'>terma dan syarat</a> "
631+"Nokia HERE."
628
632
629#: qml/Wizard/Pages/50-location.qml:112
633#: qml/Wizard/Pages/50-location.qml:112
630msgid "Not at all"
634msgid "Not at all"
631−msgstr ""
635+msgstr "Tidak sama sekali"
632
636
633#: qml/Wizard/Pages/50-location.qml:124
637#: qml/Wizard/Pages/50-location.qml:124
634msgid "You can change your mind later in <b>System Settings</b>."
638msgid "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>."
636
640
637#: qml/Wizard/Pages/60-reporting.qml:24
641#: qml/Wizard/Pages/60-reporting.qml:24
638msgid "Improving your experience"
642msgid "Improving your experience"
639−msgstr ""
643+msgstr "Menambahbaik pengalaman anda"
640
644
641#: qml/Wizard/Pages/60-reporting.qml:36
645#: qml/Wizard/Pages/60-reporting.qml:36
642msgid ""
646msgid ""
643"Your phone is set up to automatically report errors to Canonical and its "
647"Your phone is set up to automatically report errors to Canonical and its "
644"partners, the makers of the operating system."
648"partners, the makers of the operating system."
645msgstr ""
649msgstr ""
650+"Telefon anda ditetapkan secara automatik melaporkan ralat kepada Canonical "
651+"dan rakannya, pencipta sistem pengoperasian ini."
646
652
647#: qml/Wizard/Pages/60-reporting.qml:43
653#: qml/Wizard/Pages/60-reporting.qml:43
648msgid ""
654msgid ""
649"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
655"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
650"Privacy</b>"
656"Privacy</b>"
651msgstr ""
657msgstr ""
658+"Ia boleh dilumpuhkan di dalam <b>Tetapan Sistem</b> di bawah <b>Keselamatan "
659+"&amp; Kerahsiaan</b>"
652
660
653#: qml/Wizard/Pages/80-finished.qml:24
661#: qml/Wizard/Pages/80-finished.qml:24
654msgid "All done"
662msgid "All done"
655−msgstr ""
663+msgstr "Semua selesai"
656
664
657#: qml/Wizard/Pages/80-finished.qml:39
665#: qml/Wizard/Pages/80-finished.qml:39
658msgid "Nice work!"
666msgid "Nice work!"
659−msgstr ""
667+msgstr "Selesai!"
660
668
661#: qml/Wizard/Pages/80-finished.qml:46
669#: qml/Wizard/Pages/80-finished.qml:46
662msgid "Your phone is now ready to use."
670msgid "Your phone is now ready to use."
663−msgstr ""
671+msgstr "Telefon anda kini boleh digunakan."
664
672
665#: qml/Wizard/Pages/80-finished.qml:53
673#: qml/Wizard/Pages/80-finished.qml:53
666msgid "Finish"
674msgid "Finish"
667−msgstr ""
675+msgstr "Selesai"
668
676
669#: qml/Wizard/Pages/here-terms.qml:27
677#: qml/Wizard/Pages/here-terms.qml:27
670msgid "Terms & Conditions"
678msgid "Terms & Conditions"
671−msgstr ""
679+msgstr "Terma & Syarat"
672
680
673#: qml/Wizard/Pages/passwd-confirm.qml:49
681#: qml/Wizard/Pages/passwd-confirm.qml:49
674msgid "Confirm passphrase"
682msgid "Confirm passphrase"
675−msgstr ""
683+msgstr "Sahkan frasa laluan"
676
684
677#: qml/Wizard/Pages/passwd-confirm.qml:50
685#: qml/Wizard/Pages/passwd-confirm.qml:50
678msgid "Confirm passcode"
686msgid "Confirm passcode"
679−msgstr ""
687+msgstr "Sahkan kod laluan"
680
688
681#: qml/Wizard/Pages/passwd-confirm.qml:53
689#: qml/Wizard/Pages/passwd-confirm.qml:53
682#: qml/Wizard/Pages/passwd-confirm.qml:54
690#: qml/Wizard/Pages/passwd-confirm.qml:54
683msgid "Please try again."
691msgid "Please try again."
684−msgstr ""
692+msgstr "Sila cuba lagi."
685
693
686#: qml/Wizard/Pages/passwd-set.qml:61
694#: qml/Wizard/Pages/passwd-set.qml:61
687msgid "Choose your passcode"
695msgid "Choose your passcode"
688−msgstr ""
696+msgstr "Pilih kod laluan anda"
689
697
690#: qml/Wizard/Pages/passwd-set.qml:68
698#: qml/Wizard/Pages/passwd-set.qml:68
691msgid "Passphrase must be 4 characters long"
699msgid "Passphrase must be 4 characters long"
692−msgstr ""
700+msgstr "Frasa laluan mestilah sebanyak 4 aksara"
693
701
694#. Translators: This is the arrow for "Back" buttons
702#. Translators: This is the arrow for "Back" buttons
695#: qml/Wizard/StackButton.qml:39
703#: qml/Wizard/StackButton.qml:39
696#, qt-format
704#, qt-format
697msgid "〈 %1"
705msgid "〈 %1"
698−msgstr ""
706+msgstr "〈 %1"
699
707
700#. Translators: This is the arrow for "Forward" buttons
708#. Translators: This is the arrow for "Forward" buttons
701#: qml/Wizard/StackButton.qml:42
709#: qml/Wizard/StackButton.qml:42
702#, qt-format
710#, qt-format
703msgid "%1 〉"
711msgid "%1 〉"
704−msgstr ""
712+msgstr "%1 〉"
705
713
706#~ msgid "Top edge"
714#~ msgid "Top edge"
707#~ msgstr "Pinggir atas"
715#~ msgstr "Pinggir atas"
po/my.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/nb.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/nl.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/nn.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/oc.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/or.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n!=1;\n"
17"Plural-Forms: nplurals=2; plural=n!=1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/pa.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/pl.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
17"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
18"|| n%100>=20) ? 1 : 2;\n"
18"|| n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
20−"X-Generator: Launchpad (build 17628)\n"
20+"X-Generator: Launchpad (build 17686)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
po/pt.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-30 06:14+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17646)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/pt_BR.po+12−12
@@ -8,15 +8,15 @@ msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-07-17 10:10+0200\n"
10"POT-Creation-Date: 2015-07-17 10:10+0200\n"
11−"PO-Revision-Date: 2015-05-04 21:50+0000\n"
11+"PO-Revision-Date: 2015-08-05 04:40+0000\n"
12−"Last-Translator: Tiago Hillebrandt <tiagohillebrandt@gmail.com>\n"
12+"Last-Translator: Julio Alexander Sieg <julio.sieg@gmail.com>\n"
13"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
13"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -398,32 +398,32 @@ msgstr "Nada está tocando"
398#, qt-format
398#, qt-format
399msgid "%1 hour"
399msgid "%1 hour"
400msgid_plural "%1 hours"
400msgid_plural "%1 hours"
401−msgstr[0] ""
401+msgstr[0] "%1 hora"
402−msgstr[1] ""
402+msgstr[1] "%1 horas"
403
403
404#: qml/Panel/Indicators/MenuItemFactory.qml:772
404#: qml/Panel/Indicators/MenuItemFactory.qml:772
405#, qt-format
405#, qt-format
406msgid "%1 minute"
406msgid "%1 minute"
407msgid_plural "%1 minutes"
407msgid_plural "%1 minutes"
408−msgstr[0] ""
408+msgstr[0] "%1 minuto"
409−msgstr[1] ""
409+msgstr[1] "%1 minutos"
410
410
411#: qml/Panel/Indicators/MenuItemFactory.qml:777
411#: qml/Panel/Indicators/MenuItemFactory.qml:777
412#, qt-format
412#, qt-format
413msgid "%1 second"
413msgid "%1 second"
414msgid_plural "%1 seconds"
414msgid_plural "%1 seconds"
415−msgstr[0] ""
415+msgstr[0] "%1 segundo"
416−msgstr[1] ""
416+msgstr[1] "%1 segundos"
417
417
418#: qml/Panel/Indicators/MenuItemFactory.qml:780
418#: qml/Panel/Indicators/MenuItemFactory.qml:780
419msgid "0 seconds"
419msgid "0 seconds"
420−msgstr ""
420+msgstr "0 segundo"
421
421
422#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
422#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
423#: qml/Panel/Indicators/MenuItemFactory.qml:782
423#: qml/Panel/Indicators/MenuItemFactory.qml:782
424#, qt-format
424#, qt-format
425msgid "%1 remaining"
425msgid "%1 remaining"
426−msgstr ""
426+msgstr "%1 restantes"
427
427
428#: qml/Panel/Indicators/MenuItemFactory.qml:788
428#: qml/Panel/Indicators/MenuItemFactory.qml:788
429msgid "In queue…"
429msgid "In queue…"
po/ro.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
17"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
18"== 0) && (n != 0))) ? 2: 1));\n"
18"== 0) && (n != 0))) ? 2: 1));\n"
19−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
20−"X-Generator: Launchpad (build 17628)\n"
20+"X-Generator: Launchpad (build 17686)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
po/ru.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
20−"X-Generator: Launchpad (build 17628)\n"
20+"X-Generator: Launchpad (build 17686)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
po/shn.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=(n == 1) ? 0 : 1;\n"
17"Plural-Forms: nplurals=2; plural=(n == 1) ? 0 : 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/si.po+75−13
@@ -15,12 +15,12 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
23−msgstr ""
23+msgstr "මුරපදය: "
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:45
25#: plugins/Unity/Launcher/launcheritem.cpp:45
26#: plugins/Unity/Launcher/launcheritem.cpp:100
26#: plugins/Unity/Launcher/launcheritem.cpp:100
@@ -152,7 +152,7 @@ msgstr ""
152#: qml/Components/Dialogs.qml:86 qml/Components/Dialogs.qml:117
152#: qml/Components/Dialogs.qml:86 qml/Components/Dialogs.qml:117
153#: qml/Components/Dialogs.qml:173
153#: qml/Components/Dialogs.qml:173
154msgid "Cancel"
154msgid "Cancel"
155−msgstr ""
155+msgstr "අවලංගු කරන්න"
156
156
157#: qml/Components/Dialogs.qml:98
157#: qml/Components/Dialogs.qml:98
158msgctxt "Title: Reboot/Shut down dialog"
158msgctxt "Title: Reboot/Shut down dialog"
@@ -161,7 +161,7 @@ msgstr ""
161
161
162#: qml/Components/Dialogs.qml:99
162#: qml/Components/Dialogs.qml:99
163msgid "Are you sure you want to shut down?"
163msgid "Are you sure you want to shut down?"
164−msgstr ""
164+msgstr "නිවාදැමිම තහවුරු කරන්න"
165
165
166#: qml/Components/Dialogs.qml:101
166#: qml/Components/Dialogs.qml:101
167msgctxt "Button: Reboot the system"
167msgctxt "Button: Reboot the system"
@@ -180,15 +180,15 @@ msgstr ""
180
180
181#: qml/Components/Dialogs.qml:130
181#: qml/Components/Dialogs.qml:130
182msgid "Are you sure you want to reboot?"
182msgid "Are you sure you want to reboot?"
183−msgstr ""
183+msgstr "යළි පණගැන්වීම තහවුරු කරන්න"
184
184
185#: qml/Components/Dialogs.qml:132
185#: qml/Components/Dialogs.qml:132
186msgid "No"
186msgid "No"
187−msgstr ""
187+msgstr "නැත"
188
188
189#: qml/Components/Dialogs.qml:138
189#: qml/Components/Dialogs.qml:138
190msgid "Yes"
190msgid "Yes"
191−msgstr ""
191+msgstr "ඔව්"
192
192
193#: qml/Components/Dialogs.qml:152
193#: qml/Components/Dialogs.qml:152
194msgctxt "Title: Power off/Restart dialog"
194msgctxt "Title: Power off/Restart dialog"
@@ -200,6 +200,8 @@ msgid ""
200"Are you sure you would like\n"
200"Are you sure you would like\n"
201"to power off?"
201"to power off?"
202msgstr ""
202msgstr ""
203+"පරිගණකය වසාදැමිම\n"
204+"ඔබ තහවුරු කරන්නේද?"
203
205
204#: qml/Components/Dialogs.qml:155
206#: qml/Components/Dialogs.qml:155
205msgctxt "Button: Power off the system"
207msgctxt "Button: Power off the system"
@@ -217,7 +219,7 @@ msgstr ""
217
219
218#: qml/Components/Lockscreen.qml:245
220#: qml/Components/Lockscreen.qml:245
219msgid "Emergency Call"
221msgid "Emergency Call"
220−msgstr ""
222+msgstr "හදිසි ඇමතුම"
221
223
222#: qml/Components/Lockscreen.qml:277
224#: qml/Components/Lockscreen.qml:277
223msgid "OK"
225msgid "OK"
@@ -269,15 +271,15 @@ msgstr ""
269
271
270#: qml/Dash/Previews/PreviewRatingInput.qml:84
272#: qml/Dash/Previews/PreviewRatingInput.qml:84
271msgid "Rate this"
273msgid "Rate this"
272−msgstr ""
274+msgstr "මෙය අගය කරන්න"
273
275
274#: qml/Dash/Previews/PreviewRatingInput.qml:129
276#: qml/Dash/Previews/PreviewRatingInput.qml:129
275msgid "Add a review"
277msgid "Add a review"
276−msgstr ""
278+msgstr "විචාරයක් ලියන්න"
277
279
278#: qml/Dash/Previews/PreviewRatingInput.qml:169
280#: qml/Dash/Previews/PreviewRatingInput.qml:169
279msgid "Send"
281msgid "Send"
280−msgstr ""
282+msgstr "යවන්න"
281
283
282#: qml/Dash/PullToRefreshScopeStyle.qml:55
284#: qml/Dash/PullToRefreshScopeStyle.qml:55
283msgid "Pull to refresh…"
285msgid "Pull to refresh…"
@@ -372,7 +374,7 @@ msgstr ""
372
374
373#: qml/Notifications/NotificationMenuItemFactory.qml:128
375#: qml/Notifications/NotificationMenuItemFactory.qml:128
374msgid "Show password"
376msgid "Show password"
375−msgstr ""
377+msgstr "මුරපදය පෙන්වන්න"
376
378
377#: qml/Panel/ActiveCallHint.qml:79
379#: qml/Panel/ActiveCallHint.qml:79
378msgid "Tap to return to call..."
380msgid "Tap to return to call..."
@@ -696,3 +698,63 @@ msgstr ""
696#, qt-format
698#, qt-format
697msgid "%1 〉"
699msgid "%1 〉"
698msgstr ""
700msgstr ""
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 ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
17"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"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/sl.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
17"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
18"n%100==4 ? 3 : 0);\n"
18"n%100==4 ? 3 : 0);\n"
19−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
20−"X-Generator: Launchpad (build 17628)\n"
20+"X-Generator: Launchpad (build 17686)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
po/sq.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:38+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:29+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/sr.po+2−2
@@ -17,8 +17,8 @@ msgstr ""
17"Content-Transfer-Encoding: 8bit\n"
17"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
19"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
20−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
20+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
21−"X-Generator: Launchpad (build 17628)\n"
21+"X-Generator: Launchpad (build 17686)\n"
22"Language: sr\n"
22"Language: sr\n"
23
23
24#: plugins/LightDM/Greeter.cpp:112
24#: plugins/LightDM/Greeter.cpp:112
po/sv.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20"Language: sv\n"
20"Language: sv\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
po/sw.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/ta.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20"Language: ta\n"
20"Language: ta\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
po/te.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/th.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/tr.po+40−40
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -37,14 +37,14 @@ msgstr "Kısayol iğnesini kaldır"
37#. en_US example: "Yesterday\u2003%l:%M %p" --> "Yesterday 1:00 PM"
37#. en_US example: "Yesterday\u2003%l:%M %p" --> "Yesterday 1:00 PM"
38#: plugins/Utils/relativetimeformatter.cpp:157
38#: plugins/Utils/relativetimeformatter.cpp:157
39msgid "Yesterday %l:%M %p"
39msgid "Yesterday %l:%M %p"
40−msgstr ""
40+msgstr "Dün %l:%M %p"
41
41
42#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
42#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
43#. This format string is used for showing, on a 12-hour clock, times that happened today.
43#. This format string is used for showing, on a 12-hour clock, times that happened today.
44#. en_US example: "%l:%M %p" --> "1:00 PM"
44#. en_US example: "%l:%M %p" --> "1:00 PM"
45#: plugins/Utils/relativetimeformatter.cpp:164
45#: plugins/Utils/relativetimeformatter.cpp:164
46msgid "%l:%M %p"
46msgid "%l:%M %p"
47−msgstr ""
47+msgstr "%l:%M %p"
48
48
49#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
49#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
50#. This format string is used for showing, on a 12-hour clock, events/appointments that happen tomorrow.
50#. This format string is used for showing, on a 12-hour clock, events/appointments that happen tomorrow.
@@ -52,7 +52,7 @@ msgstr ""
52#. en_US example: "Tomorrow\u2003%l:%M %p" --> "Tomorrow 1:00 PM"
52#. en_US example: "Tomorrow\u2003%l:%M %p" --> "Tomorrow 1:00 PM"
53#: plugins/Utils/relativetimeformatter.cpp:172
53#: plugins/Utils/relativetimeformatter.cpp:172
54msgid "Tomorrow %l:%M %p"
54msgid "Tomorrow %l:%M %p"
55−msgstr ""
55+msgstr "Yarın %l:%M %p"
56
56
57#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
57#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
58#. This format string is used for showing, on a 12-hour clock, times that happened in the last week.
58#. This format string is used for showing, on a 12-hour clock, times that happened in the last week.
@@ -60,7 +60,7 @@ msgstr ""
60#. en_US example: "%a\u2003%l:%M %p" --> "Fri 1:00 PM"
60#. en_US example: "%a\u2003%l:%M %p" --> "Fri 1:00 PM"
61#: plugins/Utils/relativetimeformatter.cpp:181
61#: plugins/Utils/relativetimeformatter.cpp:181
62msgid "%a %l:%M %p"
62msgid "%a %l:%M %p"
63−msgstr ""
63+msgstr "%l:%M %p %a"
64
64
65#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
65#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
66#. This format string is used for showing, on a 12-hour clock, times that happened before a week from now.
66#. 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 ""
69#. en_GB example: "%a %b %d\u2003%l:%M %p" --> "Fri 31 Oct 1:00 PM"
69#. en_GB example: "%a %b %d\u2003%l:%M %p" --> "Fri 31 Oct 1:00 PM"
70#: plugins/Utils/relativetimeformatter.cpp:190
70#: plugins/Utils/relativetimeformatter.cpp:190
71msgid "%a %d %b %l:%M %p"
71msgid "%a %d %b %l:%M %p"
72−msgstr ""
72+msgstr "%a %d %b %l:%M %p"
73
73
74#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
74#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
75#. This format string is used for showing, on a 24-hour clock, times that happen yesterday.
75#. This format string is used for showing, on a 24-hour clock, times that happen yesterday.
@@ -77,14 +77,14 @@ msgstr ""
77#. en_US example: "Yesterday\u2003%l:%M %p" --> "Yesterday 13:00"
77#. en_US example: "Yesterday\u2003%l:%M %p" --> "Yesterday 13:00"
78#: plugins/Utils/relativetimeformatter.cpp:201
78#: plugins/Utils/relativetimeformatter.cpp:201
79msgid "Yesterday %H:%M"
79msgid "Yesterday %H:%M"
80−msgstr ""
80+msgstr "Dün %H:%M"
81
81
82#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
82#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
83#. This format string is used for showing, on a 24-hour clock, times that happened today.
83#. This format string is used for showing, on a 24-hour clock, times that happened today.
84#. en_US example: "%H:%M" --> "13:00"
84#. en_US example: "%H:%M" --> "13:00"
85#: plugins/Utils/relativetimeformatter.cpp:208
85#: plugins/Utils/relativetimeformatter.cpp:208
86msgid "%H:%M"
86msgid "%H:%M"
87−msgstr ""
87+msgstr "%H:%M"
88
88
89#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
89#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
90#. This format string is used for showing, on a 24-hour clock, events/appointments that happen tomorrow.
90#. This format string is used for showing, on a 24-hour clock, events/appointments that happen tomorrow.
@@ -92,7 +92,7 @@ msgstr ""
92#. en_US example: "Tomorrow\u2003%l:%M %p" --> "Tomorrow 13:00"
92#. en_US example: "Tomorrow\u2003%l:%M %p" --> "Tomorrow 13:00"
93#: plugins/Utils/relativetimeformatter.cpp:216
93#: plugins/Utils/relativetimeformatter.cpp:216
94msgid "Tomorrow %H:%M"
94msgid "Tomorrow %H:%M"
95−msgstr ""
95+msgstr "Yarın %H:%M"
96
96
97#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
97#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
98#. This format string is used for showing, on a 24-hour clock, times that happened in the last week.
98#. This format string is used for showing, on a 24-hour clock, times that happened in the last week.
@@ -100,7 +100,7 @@ msgstr ""
100#. en_US example: "%a\u2003%H:%M" --> "Fri 13:00"
100#. en_US example: "%a\u2003%H:%M" --> "Fri 13:00"
101#: plugins/Utils/relativetimeformatter.cpp:225
101#: plugins/Utils/relativetimeformatter.cpp:225
102msgid "%a %H:%M"
102msgid "%a %H:%M"
103−msgstr ""
103+msgstr "%H:%M %a"
104
104
105#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
105#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
106#. This format string is used for showing, on a 24-hour clock, times that happened before a week from now.
106#. 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 ""
109#. en_GB example: "%a %b %d\u2003%H:%M" --> "Fri 31 Oct 13:00"
109#. en_GB example: "%a %b %d\u2003%H:%M" --> "Fri 31 Oct 13:00"
110#: plugins/Utils/relativetimeformatter.cpp:234
110#: plugins/Utils/relativetimeformatter.cpp:234
111msgid "%a %d %b %H:%M"
111msgid "%a %d %b %H:%M"
112−msgstr ""
112+msgstr "%a %b %d\\u2003%H:%M"
113
113
114#: qml/Components/DelayedLockscreen.qml:49
114#: qml/Components/DelayedLockscreen.qml:49
115msgid "Device Locked"
115msgid "Device Locked"
@@ -133,7 +133,7 @@ msgstr[1] "Lütfen %1 dakika bekleyin ve yeniden deneyin..."
133#: qml/Components/Dialogs.qml:69
133#: qml/Components/Dialogs.qml:69
134msgctxt "Title: Lock/Log out dialog"
134msgctxt "Title: Lock/Log out dialog"
135msgid "Log out"
135msgid "Log out"
136−msgstr ""
136+msgstr "Oturumu kapat"
137
137
138#: qml/Components/Dialogs.qml:70
138#: qml/Components/Dialogs.qml:70
139msgid "Are you sure you want to log out?"
139msgid "Are you sure you want to log out?"
@@ -142,12 +142,12 @@ msgstr "Oturumu kapatmak istediğinize emin misiniz?"
142#: qml/Components/Dialogs.qml:72
142#: qml/Components/Dialogs.qml:72
143msgctxt "Button: Lock the system"
143msgctxt "Button: Lock the system"
144msgid "Lock"
144msgid "Lock"
145−msgstr ""
145+msgstr "Kilitle"
146
146
147#: qml/Components/Dialogs.qml:79
147#: qml/Components/Dialogs.qml:79
148msgctxt "Button: Log out from the system"
148msgctxt "Button: Log out from the system"
149msgid "Log Out"
149msgid "Log Out"
150−msgstr ""
150+msgstr "Oturumu Kapat"
151
151
152#: qml/Components/Dialogs.qml:86 qml/Components/Dialogs.qml:117
152#: qml/Components/Dialogs.qml:86 qml/Components/Dialogs.qml:117
153#: qml/Components/Dialogs.qml:173
153#: qml/Components/Dialogs.qml:173
@@ -157,7 +157,7 @@ msgstr "İptal"
157#: qml/Components/Dialogs.qml:98
157#: qml/Components/Dialogs.qml:98
158msgctxt "Title: Reboot/Shut down dialog"
158msgctxt "Title: Reboot/Shut down dialog"
159msgid "Shut down"
159msgid "Shut down"
160−msgstr ""
160+msgstr "Kapat"
161
161
162#: qml/Components/Dialogs.qml:99
162#: qml/Components/Dialogs.qml:99
163msgid "Are you sure you want to shut down?"
163msgid "Are you sure you want to shut down?"
@@ -171,7 +171,7 @@ msgstr "Yeniden başlat"
171#: qml/Components/Dialogs.qml:109
171#: qml/Components/Dialogs.qml:109
172msgctxt "Button: Shut down the system"
172msgctxt "Button: Shut down the system"
173msgid "Shut down"
173msgid "Shut down"
174−msgstr ""
174+msgstr "Kapat"
175
175
176#: qml/Components/Dialogs.qml:129
176#: qml/Components/Dialogs.qml:129
177msgctxt "Title: Reboot dialog"
177msgctxt "Title: Reboot dialog"
@@ -204,7 +204,7 @@ msgstr "Bilgisayarı kapatmak istediğinize emin misiniz?"
204#: qml/Components/Dialogs.qml:155
204#: qml/Components/Dialogs.qml:155
205msgctxt "Button: Power off the system"
205msgctxt "Button: Power off the system"
206msgid "Power off"
206msgid "Power off"
207−msgstr ""
207+msgstr "Sistemi Kapat"
208
208
209#: qml/Components/Dialogs.qml:164
209#: qml/Components/Dialogs.qml:164
210msgctxt "Button: Restart the system"
210msgctxt "Button: Restart the system"
@@ -309,7 +309,7 @@ msgstr "Kilidi Aç"
309
309
310#: qml/Greeter/LoginList.qml:236
310#: qml/Greeter/LoginList.qml:236
311msgid "Retry"
311msgid "Retry"
312−msgstr ""
312+msgstr "Tekrar Dene"
313
313
314#: qml/Greeter/LoginList.qml:237
314#: qml/Greeter/LoginList.qml:237
315msgid "Tap to unlock"
315msgid "Tap to unlock"
@@ -368,7 +368,7 @@ msgstr "Üzgünüm, hatalı parola"
368#: qml/Greeter/NarrowView.qml:121
368#: qml/Greeter/NarrowView.qml:121
369msgctxt "passphrase"
369msgctxt "passphrase"
370msgid "Please re-enter"
370msgid "Please re-enter"
371−msgstr ""
371+msgstr "Lütfen yeniden girin"
372
372
373#: qml/Greeter/NarrowView.qml:122
373#: qml/Greeter/NarrowView.qml:122
374msgid "Sorry, incorrect passcode"
374msgid "Sorry, incorrect passcode"
@@ -394,32 +394,32 @@ msgstr "Hiçbir şey çalmıyor"
394#, qt-format
394#, qt-format
395msgid "%1 hour"
395msgid "%1 hour"
396msgid_plural "%1 hours"
396msgid_plural "%1 hours"
397−msgstr[0] ""
397+msgstr[0] "%1 saat"
398−msgstr[1] ""
398+msgstr[1] "%1 saat"
399
399
400#: qml/Panel/Indicators/MenuItemFactory.qml:772
400#: qml/Panel/Indicators/MenuItemFactory.qml:772
401#, qt-format
401#, qt-format
402msgid "%1 minute"
402msgid "%1 minute"
403msgid_plural "%1 minutes"
403msgid_plural "%1 minutes"
404−msgstr[0] ""
404+msgstr[0] "%1 dakika"
405−msgstr[1] ""
405+msgstr[1] "%1 dakika"
406
406
407#: qml/Panel/Indicators/MenuItemFactory.qml:777
407#: qml/Panel/Indicators/MenuItemFactory.qml:777
408#, qt-format
408#, qt-format
409msgid "%1 second"
409msgid "%1 second"
410msgid_plural "%1 seconds"
410msgid_plural "%1 seconds"
411−msgstr[0] ""
411+msgstr[0] "%1 saniye"
412−msgstr[1] ""
412+msgstr[1] "%1 saniye"
413
413
414#: qml/Panel/Indicators/MenuItemFactory.qml:780
414#: qml/Panel/Indicators/MenuItemFactory.qml:780
415msgid "0 seconds"
415msgid "0 seconds"
416−msgstr ""
416+msgstr "0 saniye"
417
417
418#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
418#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
419#: qml/Panel/Indicators/MenuItemFactory.qml:782
419#: qml/Panel/Indicators/MenuItemFactory.qml:782
420#, qt-format
420#, qt-format
421msgid "%1 remaining"
421msgid "%1 remaining"
422−msgstr ""
422+msgstr "%1 kaldı"
423
423
424#: qml/Panel/Indicators/MenuItemFactory.qml:788
424#: qml/Panel/Indicators/MenuItemFactory.qml:788
425msgid "In queue…"
425msgid "In queue…"
@@ -481,23 +481,23 @@ msgstr "Devam etmek için buraya dokunun."
481
481
482#: qml/Tutorial/TutorialContent.qml:81
482#: qml/Tutorial/TutorialContent.qml:81
483msgid "Click here to finish."
483msgid "Click here to finish."
484−msgstr ""
484+msgstr "Bitirmek için buraya tıklayın."
485
485
486#: qml/Tutorial/TutorialLeftFinish.qml:24
486#: qml/Tutorial/TutorialLeftFinish.qml:24
487msgid "These are the shortcuts to favorite apps"
487msgid "These are the shortcuts to favorite apps"
488−msgstr ""
488+msgstr "Bunlar gözde uygulamalarınız için kısayollardır"
489
489
490#: qml/Tutorial/TutorialLeft.qml:26
490#: qml/Tutorial/TutorialLeft.qml:26
491msgid "Open the launcher"
491msgid "Open the launcher"
492−msgstr ""
492+msgstr "Başlatıcıyı aç"
493
493
494#: qml/Tutorial/TutorialLeft.qml:27
494#: qml/Tutorial/TutorialLeft.qml:27
495msgid "Short swipe from the left edge."
495msgid "Short swipe from the left edge."
496−msgstr ""
496+msgstr "Sol kenardan kısa kaydırma"
497
497
498#: qml/Tutorial/TutorialPage.qml:178
498#: qml/Tutorial/TutorialPage.qml:178
499msgid "You almost got it!"
499msgid "You almost got it!"
500−msgstr ""
500+msgstr "Neredeyse yaptınız!"
501
501
502#: qml/Tutorial/TutorialPage.qml:195
502#: qml/Tutorial/TutorialPage.qml:195
503msgid "Try again."
503msgid "Try again."
@@ -509,7 +509,7 @@ msgstr "Açık uygulamaları görmek için"
509
509
510#: qml/Tutorial/TutorialRight.qml:32
510#: qml/Tutorial/TutorialRight.qml:32
511msgid "Long swipe from the right edge."
511msgid "Long swipe from the right edge."
512−msgstr ""
512+msgstr "Sağ kenardan uzan kaydırma"
513
513
514#: qml/Tutorial/TutorialRight.qml:122
514#: qml/Tutorial/TutorialRight.qml:122
515msgid "View all your running tasks."
515msgid "View all your running tasks."
@@ -518,7 +518,7 @@ msgstr "Çalışan tüm görevleri incele."
518#: qml/Wizard/Page.qml:89
518#: qml/Wizard/Page.qml:89
519msgctxt "Button: Go back one page in the Wizard"
519msgctxt "Button: Go back one page in the Wizard"
520msgid "Back"
520msgid "Back"
521−msgstr ""
521+msgstr "Geri"
522
522
523#: qml/Wizard/Pages/10-welcome.qml:27
523#: qml/Wizard/Pages/10-welcome.qml:27
524msgid "Hi!"
524msgid "Hi!"
@@ -563,27 +563,27 @@ msgstr "Lütfen telefonunuzun kilidini nasıl açmak istediğinizi seçin."
563#: qml/Wizard/Pages/30-passwd-type.qml:97
563#: qml/Wizard/Pages/30-passwd-type.qml:97
564msgctxt "Label: Type of security method"
564msgctxt "Label: Type of security method"
565msgid "Swipe"
565msgid "Swipe"
566−msgstr ""
566+msgstr "Kaydır"
567
567
568#: qml/Wizard/Pages/30-passwd-type.qml:98
568#: qml/Wizard/Pages/30-passwd-type.qml:98
569msgctxt "Label: Description of security method"
569msgctxt "Label: Description of security method"
570msgid "No security"
570msgid "No security"
571−msgstr ""
571+msgstr "Güvenlik yok"
572
572
573#: qml/Wizard/Pages/30-passwd-type.qml:100
573#: qml/Wizard/Pages/30-passwd-type.qml:100
574msgctxt "Label: Type of security method"
574msgctxt "Label: Type of security method"
575msgid "Passcode"
575msgid "Passcode"
576−msgstr ""
576+msgstr "Parola"
577
577
578#: qml/Wizard/Pages/30-passwd-type.qml:101
578#: qml/Wizard/Pages/30-passwd-type.qml:101
579msgctxt "Label: Description of security method"
579msgctxt "Label: Description of security method"
580msgid "4 digits only"
580msgid "4 digits only"
581−msgstr ""
581+msgstr "Yalnızca 4 rakam"
582
582
583#: qml/Wizard/Pages/30-passwd-type.qml:103
583#: qml/Wizard/Pages/30-passwd-type.qml:103
584msgctxt "Label: Type of security method"
584msgctxt "Label: Type of security method"
585msgid "Passphrase"
585msgid "Passphrase"
586−msgstr ""
586+msgstr "Parola Metni"
587
587
588#: qml/Wizard/Pages/30-passwd-type.qml:104
588#: qml/Wizard/Pages/30-passwd-type.qml:104
589msgctxt "Label: Description of security method"
589msgctxt "Label: Description of security method"
po/ug.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/uk.po+3−3
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
19+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
20−"X-Generator: Launchpad (build 17628)\n"
20+"X-Generator: Launchpad (build 17686)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
@@ -376,7 +376,7 @@ msgstr "Вибачте, помилковий пароль"
376#: qml/Greeter/NarrowView.qml:121
376#: qml/Greeter/NarrowView.qml:121
377msgctxt "passphrase"
377msgctxt "passphrase"
378msgid "Please re-enter"
378msgid "Please re-enter"
379−msgstr ""
379+msgstr "Введіть ще раз"
380
380
381#: qml/Greeter/NarrowView.qml:122
381#: qml/Greeter/NarrowView.qml:122
382msgid "Sorry, incorrect passcode"
382msgid "Sorry, incorrect passcode"
po/ur.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/uz.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/vi.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/xh.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/zh_CN.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-28 05:40+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/zh_HK.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-07-25 05:39+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17628)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/zh_TW.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-08-01 05:45+0000\n"
18+"X-Launchpad-Export-Date: 2015-08-12 06:30+0000\n"
19−"X-Generator: Launchpad (build 17656)\n"
19+"X-Generator: Launchpad (build 17686)\n"
20"Language: zh_TW\n"
20"Language: zh_TW\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: 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
18
18
19import QtQuick 2.3
19import QtQuick 2.3
20import Unity.InputInfo 0.1
20import Unity.InputInfo 0.1
21+// Workaround https://bugs.launchpad.net/ubuntu/+source/unity8/+bug/1473471
22+import Ubuntu.Components 1.2
21
23
22Item {
24Item {
23 id: root
25 id: root
qml/Dash/GenericScopeView.qml+45−21
@@ -72,28 +72,39 @@ FocusScope {
72 pageHeaderLoader.item.resetSearch()
72 pageHeaderLoader.item.resetSearch()
73 }
73 }
74
74
75− function itemClicked(index, result, item, itemModel, resultsModel, limitedCategoryItemCount, categoryId) {
75+ property var maybePreviewResult;
76− if (itemModel.uri.indexOf("scope://") === 0 || scope.id === "clickscope" || (scope.id === "videoaggregator" && categoryId === "myvideos-getstarted")) {
76+ property int maybePreviewIndex;
77− // TODO Technically it is possible that calling activate() will make the scope emit
77+ property var maybePreviewResultsModel;
78− // previewRequested so that we show a preview but there's no scope that does that yet
78+ property int maybePreviewLimitedCategoryItemCount;
79− // so it's not implemented
79+ property string maybePreviewCategoryId;
80− scope.activate(result)
80+
81− } else {
81+ function clearMaybePreviewData() {
82− if (scope.preview(result)) {
82+ scopeView.maybePreviewResult = undefined;
83− openPreview(index, resultsModel, limitedCategoryItemCount);
83+ scopeView.maybePreviewIndex = -1;
84− }
84+ scopeView.maybePreviewResultsModel = undefined;
85− }
85+ scopeView.maybePreviewLimitedCategoryItemCount = -1;
86+ scopeView.maybePreviewCategoryId = "";
86 }
87 }
87
88
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+
88− function itemPressedAndHeld(index, result, itemModel, resultsModel, limitedCategoryItemCount, categoryId) {
99+ function itemPressedAndHeld(index, result, resultsModel, limitedCategoryItemCount, categoryId) {
89− if (itemModel.uri.indexOf("scope://") !== 0 && !(scope.id === "videoaggregator" && categoryId === "myvideos-getstarted")) {
100+ clearMaybePreviewData();
101+
90− if (scope.preview(result)) {
102+ if (scope.preview(result, categoryId)) {
91− openPreview(index, resultsModel, limitedCategoryItemCount);
103+ openPreview(index, resultsModel, limitedCategoryItemCount, categoryId);
92− }
93 }
104 }
94 }
105 }
95
106
96− function openPreview(index, resultsModel, limitedCategoryItemCount) {
107+ function openPreview(index, resultsModel, limitedCategoryItemCount, categoryId) {
97 if (limitedCategoryItemCount > 0) {
108 if (limitedCategoryItemCount > 0) {
98 previewLimitModel.model = resultsModel;
109 previewLimitModel.model = resultsModel;
99 previewLimitModel.limit = limitedCategoryItemCount;
110 previewLimitModel.limit = limitedCategoryItemCount;
@@ -103,6 +114,7 @@ FocusScope {
103 }
114 }
104 subPageLoader.initialIndex = -1;
115 subPageLoader.initialIndex = -1;
105 subPageLoader.initialIndex = index;
116 subPageLoader.initialIndex = index;
117+ subPageLoader.categoryId = categoryId;
106 subPageLoader.openSubPage("preview");
118 subPageLoader.openSubPage("preview");
107 }
119 }
108
120
@@ -149,6 +161,16 @@ FocusScope {
149 target: scopeView.scope
161 target: scopeView.scope
150 onShowDash: subPageLoader.closeSubPage()
162 onShowDash: subPageLoader.closeSubPage()
151 onHideDash: subPageLoader.closeSubPage()
163 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+ }
152 }
174 }
153
175
154 Connections {
176 Connections {
@@ -357,12 +379,12 @@ FocusScope {
357
379
358 Connections {
380 Connections {
359 target: rendererLoader.item
381 target: rendererLoader.item
360− onClicked: {
382+ onClicked: { // (int index, var result, var item, var itemModel)
361− scopeView.itemClicked(index, result, item, itemModel, target.model, categoryItemCount(), baseItem.category);
383+ scopeView.itemClicked(index, result, itemModel, target.model, categoryItemCount(), baseItem.category);
362 }
384 }
363
385
364− onPressAndHold: {
386+ onPressAndHold: { // (int index, var result, var itemModel)
365− scopeView.itemPressedAndHeld(index, result, itemModel, target.model, categoryItemCount(), baseItem.category);
387+ scopeView.itemPressedAndHeld(index, result, target.model, categoryItemCount(), baseItem.category);
366 }
388 }
367
389
368 function categoryItemCount() {
390 function categoryItemCount() {
@@ -736,6 +758,7 @@ FocusScope {
736 property var scope: scopeView.scope
758 property var scope: scopeView.scope
737 property var scopeStyle: scopeView.scopeStyle
759 property var scopeStyle: scopeView.scopeStyle
738 property int initialIndex: -1
760 property int initialIndex: -1
761+ property string categoryId
739 property var model: null
762 property var model: null
740
763
741 readonly property bool processing: item && item.processing || false
764 readonly property bool processing: item && item.processing || false
@@ -767,6 +790,7 @@ FocusScope {
767 item.open = Qt.binding(function() { return subPageLoader.open; } )
790 item.open = Qt.binding(function() { return subPageLoader.open; } )
768 item.initialIndex = Qt.binding(function() { return subPageLoader.initialIndex; } )
791 item.initialIndex = Qt.binding(function() { return subPageLoader.initialIndex; } )
769 item.model = Qt.binding(function() { return subPageLoader.model; } )
792 item.model = Qt.binding(function() { return subPageLoader.model; } )
793+ item.categoryId = Qt.binding(function() { return subPageLoader.categoryId; } )
770 }
794 }
771 open = true;
795 open = true;
772 }
796 }
qml/Dash/PreviewListView.qml+2−1
@@ -26,6 +26,7 @@ Item {
26 property int initialIndex: -1
26 property int initialIndex: -1
27 property var scope: null
27 property var scope: null
28 property var scopeStyle: null
28 property var scopeStyle: null
29+ property string categoryId
29
30
30 property alias showSignatureLine: header.showSignatureLine
31 property alias showSignatureLine: header.showSignatureLine
31
32
@@ -99,7 +100,7 @@ Item {
99 isCurrent: ListView.isCurrentItem
100 isCurrent: ListView.isCurrentItem
100
101
101 previewModel: {
102 previewModel: {
102− var previewStack = root.scope.preview(result);
103+ var previewStack = root.scope.preview(result, root.categoryId);
103 return previewStack.getPreviewModel(0);
104 return previewStack.getPreviewModel(0);
104 }
105 }
105 scopeStyle: root.scopeStyle
106 scopeStyle: root.scopeStyle
qml/Dash/Previews/PreviewActions.qml+1−1
@@ -25,7 +25,7 @@ import Ubuntu.Components 1.1
25PreviewWidget {
25PreviewWidget {
26 id: root
26 id: root
27
27
28− height: row.height + units.gu(1)
28+ implicitHeight: row.height + units.gu(1)
29
29
30 Row {
30 Row {
31 id: row
31 id: row
qml/Dash/Previews/PreviewAudioPlayback.qml+1−1
@@ -34,7 +34,7 @@ import Ubuntu.Components 0.1
34
34
35PreviewWidget {
35PreviewWidget {
36 id: root
36 id: root
37− height: childrenRect.height
37+ implicitHeight: childrenRect.height
38
38
39 onIsCurrentPreviewChanged: if (!isCurrentPreview) audio.stop()
39 onIsCurrentPreviewChanged: if (!isCurrentPreview) audio.stop()
40
40
qml/Dash/Previews/PreviewHeader.qml+1−1
@@ -30,7 +30,7 @@ import "../"
30PreviewWidget {
30PreviewWidget {
31 id: root
31 id: root
32
32
33− height: childrenRect.height
33+ implicitHeight: childrenRect.height
34
34
35 Item {
35 Item {
36 id: headerRoot
36 id: headerRoot
qml/Dash/Previews/PreviewRatingDisplay.qml+1−1
@@ -38,7 +38,7 @@ import "../../Components"
38
38
39PreviewWidget {
39PreviewWidget {
40 id: root
40 id: root
41− height: childrenRect.height
41+ implicitHeight: childrenRect.height
42
42
43 Column {
43 Column {
44 anchors { left: parent.left; right: parent.right; }
44 anchors { left: parent.left; right: parent.right; }
qml/Dash/ScopesList.qml+1−1
@@ -124,7 +124,7 @@ Item {
124 onRequestFavorite: root.requestFavorite(scopeId, favorite);
124 onRequestFavorite: root.requestFavorite(scopeId, favorite);
125 onRequestEditMode: root.state = "edit";
125 onRequestEditMode: root.state = "edit";
126 onRequestScopeMoveTo: root.requestFavoriteMoveTo(scopeId, index);
126 onRequestScopeMoveTo: root.requestFavoriteMoveTo(scopeId, index);
127− onRequestActivate: root.scope.activate(result);
127+ onRequestActivate: root.scope.activate(result, categoryId);
128 onRequestRestore: root.requestRestore(scopeId);
128 onRequestRestore: root.requestRestore(scopeId);
129 }
129 }
130 }
130 }
qml/Launcher/Launcher.qml+2−1
@@ -177,7 +177,8 @@ Item {
177 }
177 }
178
178
179 }
179 }
180− MouseArea {
180+
181+ MultiPointTouchArea {
181 id: closeMouseArea
182 id: closeMouseArea
182 anchors {
183 anchors {
183 left: launcherDragArea.right
184 left: launcherDragArea.right
qml/Launcher/LauncherDelegate.qml+12
@@ -24,6 +24,7 @@ Item {
24 property int count: 0
24 property int count: 0
25 property bool countVisible: false
25 property bool countVisible: false
26 property int progress: -1
26 property int progress: -1
27+ property bool itemRunning: false
27 property bool itemFocused: false
28 property bool itemFocused: false
28 property real maxAngle: 0
29 property real maxAngle: 0
29 property bool inverted: false
30 property bool inverted: false
@@ -216,6 +217,17 @@ Item {
216 }
217 }
217 }
218 }
218
219
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+
219 Image {
231 Image {
220 objectName: "focusedHighlight"
232 objectName: "focusedHighlight"
221 anchors {
233 anchors {
qml/Launcher/LauncherPanel.qml+1
@@ -193,6 +193,7 @@ Rectangle {
193 count: model.count
193 count: model.count
194 countVisible: model.countVisible
194 countVisible: model.countVisible
195 progress: model.progress
195 progress: model.progress
196+ itemRunning: model.running
196 itemFocused: model.focused
197 itemFocused: model.focused
197 inverted: root.inverted
198 inverted: root.inverted
198 alerting: model.alerting
199 alerting: model.alerting
qml/OrientedShell.qml+6−3
@@ -21,6 +21,9 @@ import GSettings 1.0
21import "Components"
21import "Components"
22import "Components/UnityInputInfo"
22import "Components/UnityInputInfo"
23import "Rotation"
23import "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
24
27
25Rectangle {
28Rectangle {
26 id: root
29 id: root
@@ -43,7 +46,7 @@ Rectangle {
43
46
44
47
45 // to be overwritten by tests
48 // to be overwritten by tests
46− property var usageModeSettings: GSettings { schema.id: "com.canonical.Unity8" }
49+ property var unity8Settings: Unity8Settings {}
47 property var oskSettings: GSettings { schema.id: "com.canonical.keyboard.maliit" }
50 property var oskSettings: GSettings { schema.id: "com.canonical.keyboard.maliit" }
48
51
49 property int physicalOrientation: Screen.orientation
52 property int physicalOrientation: Screen.orientation
@@ -160,9 +163,9 @@ Rectangle {
160 // TODO: Factor in the connected input devices (eg: physical keyboard, mouse, touchscreen),
163 // TODO: Factor in the connected input devices (eg: physical keyboard, mouse, touchscreen),
161 // what's the output device (eg: big TV, desktop monitor, phone display), etc.
164 // what's the output device (eg: big TV, desktop monitor, phone display), etc.
162 usageScenario: {
165 usageScenario: {
163− if (root.usageModeSettings.usageMode === "Windowed") {
166+ if (root.unity8Settings.usageMode === "Windowed") {
164 return "desktop";
167 return "desktop";
165− } else if (root.usageModeSettings.usageMode === "Staged") {
168+ } else if (root.unity8Settings.usageMode === "Staged") {
166 if (deviceConfiguration.category === "phone") {
169 if (deviceConfiguration.category === "phone") {
167 return "phone";
170 return "phone";
168 } else {
171 } else {
qml/Panel/IndicatorItem.qml+3−3
@@ -31,9 +31,9 @@ IndicatorDelegate {
31 property bool selected: false
31 property bool selected: false
32 property real iconHeight: units.gu(2)
32 property real iconHeight: units.gu(2)
33 readonly property color color: {
33 readonly property color color: {
34− if (!expanded) return "#ededed";
34+ if (!expanded) return "#ffffff";
35− if (!selected) return "#4c4c4c";
35+ if (!selected) return "#888888";
36− return "#ededed";
36+ return "#ffffff";
37 }
37 }
38
38
39 signal clicked()
39 signal clicked()
qml/Panel/IndicatorItemRow.qml+1−1
@@ -31,7 +31,7 @@ Item {
31 property real unitProgress: 0.0
31 property real unitProgress: 0.0
32 property real selectionChangeBuffer: units.gu(2)
32 property real selectionChangeBuffer: units.gu(2)
33 property bool enableLateralChanges: false
33 property bool enableLateralChanges: false
34− property color hightlightColor: "#ededed"
34+ property color hightlightColor: "#ffffff"
35
35
36 property real lateralPosition: -1
36 property real lateralPosition: -1
37 onLateralPositionChanged: {
37 onLateralPositionChanged: {
qml/Panel/IndicatorsBar.qml+1−1
@@ -123,7 +123,7 @@ Item {
123 width: parent.width
123 width: parent.width
124 anchors.bottom: parent.bottom
124 anchors.bottom: parent.bottom
125
125
126− color: "#4c4c4c"
126+ color: "#888888"
127 opacity: expanded ? 1.0 : 0.0
127 opacity: expanded ? 1.0 : 0.0
128 Behavior on opacity { NumberAnimation { duration: UbuntuAnimation.SnapDuration } }
128 Behavior on opacity { NumberAnimation { duration: UbuntuAnimation.SnapDuration } }
129 }
129 }
qml/Shell.qml+10−12
@@ -191,12 +191,6 @@ Item {
191 z: dialogs.z + 10
191 z: dialogs.z + 10
192 }
192 }
193
193
194− Binding {
195− target: ApplicationManager
196− property: "forceDashActive"
197− value: launcher.shown || launcher.dashSwipe
198− }
199−
200 WindowKeysFilter {
194 WindowKeysFilter {
201 Keys.onPressed: physicalKeysMapper.onKeyPressed(event);
195 Keys.onPressed: physicalKeysMapper.onKeyPressed(event);
202 Keys.onReleased: physicalKeysMapper.onKeyReleased(event);
196 Keys.onReleased: physicalKeysMapper.onKeyReleased(event);
@@ -352,6 +346,16 @@ Item {
352 property: "beingResized"
346 property: "beingResized"
353 value: shell.beingResized
347 value: shell.beingResized
354 }
348 }
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+ }
355 Binding {
359 Binding {
356 target: applicationsDisplayLoader.item
360 target: applicationsDisplayLoader.item
357 property: "altTabPressed"
361 property: "altTabPressed"
@@ -459,12 +463,6 @@ Item {
459 }
463 }
460
464
461 onEmergencyCall: startLockedApp("dialer-app")
465 onEmergencyCall: startLockedApp("dialer-app")
462−
463− Binding {
464− target: ApplicationManager
465− property: "suspended"
466− value: greeter.shown
467− }
468 }
466 }
469 }
467 }
470
468
qml/Stages/DesktopStage.qml+13
@@ -39,6 +39,8 @@ Rectangle {
39 property int shellPrimaryOrientation
39 property int shellPrimaryOrientation
40 property int nativeOrientation
40 property int nativeOrientation
41 property bool beingResized: false
41 property bool beingResized: false
42+ property bool keepDashRunning: true
43+ property bool suspended: false
42
44
43 // functions to be called from outside
45 // functions to be called from outside
44 function updateFocusedAppOrientation() { /* TODO */ }
46 function updateFocusedAppOrientation() { /* TODO */ }
@@ -215,6 +217,17 @@ Rectangle {
215 }
217 }
216 }
218 }
217
219
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+
218 function maximize() {
231 function maximize() {
219 minimized = false;
232 minimized = false;
220 maximized = true;
233 maximized = true;
qml/Stages/PhoneStage.qml+10
@@ -36,6 +36,8 @@ Rectangle {
36 property bool altTabEnabled: true
36 property bool altTabEnabled: true
37 property real startScale: 1.1
37 property real startScale: 1.1
38 property real endScale: 0.7
38 property real endScale: 0.7
39+ property bool keepDashRunning: true
40+ property bool suspended: false
39 property int shellOrientationAngle: 0
41 property int shellOrientationAngle: 0
40 property int shellOrientation
42 property int shellOrientation
41 property int shellPrimaryOrientation
43 property int shellPrimaryOrientation
@@ -428,6 +430,14 @@ Rectangle {
428 dropShadow: spreadView.active || priv.focusedAppDelegateIsDislocated
430 dropShadow: spreadView.active || priv.focusedAppDelegateIsDislocated
429 focusFirstApp: root.focusFirstApp
431 focusFirstApp: root.focusFirstApp
430
432
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+
431 readonly property bool isDash: model.appId == "unity8-dash"
441 readonly property bool isDash: model.appId == "unity8-dash"
432
442
433 z: isDash && !spreadView.active ? -1 : behavioredIndex
443 z: isDash && !spreadView.active ? -1 : behavioredIndex
qml/Stages/TabletStage.qml+14
@@ -36,6 +36,8 @@ Rectangle {
36 property bool spreadEnabled: true // If false, animations and right edge will be disabled
36 property bool spreadEnabled: true // If false, animations and right edge will be disabled
37
37
38 property real inverseProgress: 0 // This is the progress for left edge drags, in pixels.
38 property real inverseProgress: 0 // This is the progress for left edge drags, in pixels.
39+ property bool keepDashRunning: true
40+ property bool suspended: false
39 property int shellOrientationAngle: 0
41 property int shellOrientationAngle: 0
40 property int shellOrientation
42 property int shellOrientation
41 property int shellPrimaryOrientation
43 property int shellPrimaryOrientation
@@ -117,6 +119,7 @@ Rectangle {
117
119
118 QtObject {
120 QtObject {
119 id: priv
121 id: priv
122+ objectName: "stagesPriv"
120
123
121 property string focusedAppId: ApplicationManager.focusedApplicationId
124 property string focusedAppId: ApplicationManager.focusedApplicationId
122 readonly property var focusedAppDelegate: {
125 readonly property var focusedAppDelegate: {
@@ -626,6 +629,17 @@ Rectangle {
626
629
627 readonly property bool isDash: model.appId == "unity8-dash"
630 readonly property bool isDash: model.appId == "unity8-dash"
628
631
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+
629 // FIXME: A regular binding doesn't update any more after closing an app.
643 // FIXME: A regular binding doesn't update any more after closing an app.
630 // Using a Binding for now.
644 // Using a Binding for now.
631 Binding {
645 Binding {
tests/mocks/Unity/Application/ApplicationInfo.cpp+40−6
@@ -30,7 +30,7 @@ ApplicationInfo::ApplicationInfo(const QString &appId, QObject *parent)
30 : ApplicationInfoInterface(appId, parent)
30 : ApplicationInfoInterface(appId, parent)
31 , m_appId(appId)
31 , m_appId(appId)
32 , m_stage(MainStage)
32 , m_stage(MainStage)
33− , m_state(Starting)
33+ , m_state(Stopped)
34 , m_focused(false)
34 , m_focused(false)
35 , m_fullscreen(false)
35 , m_fullscreen(false)
36 , m_session(0)
36 , m_session(0)
@@ -39,6 +39,7 @@ ApplicationInfo::ApplicationInfo(const QString &appId, QObject *parent)
39 Qt::InvertedPortraitOrientation |
39 Qt::InvertedPortraitOrientation |
40 Qt::InvertedLandscapeOrientation)
40 Qt::InvertedLandscapeOrientation)
41 , m_rotatesWindowContents(false)
41 , m_rotatesWindowContents(false)
42+ , m_requestedState(RequestedRunning)
42 , m_manualSurfaceCreation(false)
43 , m_manualSurfaceCreation(false)
43{
44{
44}
45}
@@ -46,7 +47,7 @@ ApplicationInfo::ApplicationInfo(const QString &appId, QObject *parent)
46ApplicationInfo::ApplicationInfo(QObject *parent)
47ApplicationInfo::ApplicationInfo(QObject *parent)
47 : ApplicationInfoInterface(QString(), parent)
48 : ApplicationInfoInterface(QString(), parent)
48 , m_stage(MainStage)
49 , m_stage(MainStage)
49− , m_state(Starting)
50+ , m_state(Stopped)
50 , m_focused(false)
51 , m_focused(false)
51 , m_fullscreen(false)
52 , m_fullscreen(false)
52 , m_session(0)
53 , m_session(0)
@@ -55,6 +56,7 @@ ApplicationInfo::ApplicationInfo(QObject *parent)
55 Qt::InvertedPortraitOrientation |
56 Qt::InvertedPortraitOrientation |
56 Qt::InvertedLandscapeOrientation)
57 Qt::InvertedLandscapeOrientation)
57 , m_rotatesWindowContents(false)
58 , m_rotatesWindowContents(false)
59+ , m_requestedState(RequestedRunning)
58 , m_manualSurfaceCreation(false)
60 , m_manualSurfaceCreation(false)
59{
61{
60}
62}
@@ -74,7 +76,6 @@ void ApplicationInfo::createSession()
74
76
75void ApplicationInfo::setSession(Session* session)
77void ApplicationInfo::setSession(Session* session)
76{
78{
77− qDebug() << "Application::setSession - appId=" << appId() << "session=" << session;
78 if (m_session == session)
79 if (m_session == session)
79 return;
80 return;
80
81
@@ -91,6 +92,8 @@ void ApplicationInfo::setSession(Session* session)
91 m_session->setApplication(this);
92 m_session->setApplication(this);
92 m_session->setParent(this);
93 m_session->setParent(this);
93 SessionManager::singleton()->registerSession(m_session);
94 SessionManager::singleton()->registerSession(m_session);
95+ connect(m_session, &Session::surfaceChanged,
96+ this, &ApplicationInfo::onSessionSurfaceChanged);
94
97
95 if (!m_manualSurfaceCreation) {
98 if (!m_manualSurfaceCreation) {
96 QTimer::singleShot(500, m_session, SLOT(createSurface()));
99 QTimer::singleShot(500, m_session, SLOT(createSurface()));
@@ -161,11 +164,12 @@ void ApplicationInfo::setState(State value)
161 m_state = value;
164 m_state = value;
162 Q_EMIT stateChanged(value);
165 Q_EMIT stateChanged(value);
163
166
164− if (!m_manualSurfaceCreation && m_state == ApplicationInfo::Running) {
167+ if (!m_manualSurfaceCreation && !m_session && m_state == ApplicationInfo::Starting) {
165 QTimer::singleShot(500, this, SLOT(createSession()));
168 QTimer::singleShot(500, this, SLOT(createSession()));
166 } else if (m_state == ApplicationInfo::Stopped) {
169 } else if (m_state == ApplicationInfo::Stopped) {
167− delete m_session;
170+ Session *session = m_session;
168− m_session = nullptr;
171+ setSession(nullptr);
172+ delete session;
169 }
173 }
170 }
174 }
171}
175}
@@ -213,3 +217,33 @@ void ApplicationInfo::setRotatesWindowContents(bool value)
213{
217{
214 m_rotatesWindowContents = value;
218 m_rotatesWindowContents = value;
215}
219}
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:
46 ApplicationInfo(const QString &appId, QObject *parent = nullptr);
46 ApplicationInfo(const QString &appId, QObject *parent = nullptr);
47 ~ApplicationInfo();
47 ~ApplicationInfo();
48
48
49+ RequestedState requestedState() const override;
50+ void setRequestedState(RequestedState) override;
51+
49 void setIconId(const QString &iconId);
52 void setIconId(const QString &iconId);
50 void setScreenshotId(const QString &screenshotId);
53 void setScreenshotId(const QString &screenshotId);
51
54
@@ -101,6 +104,9 @@ Q_SIGNALS:
101public Q_SLOTS:
104public Q_SLOTS:
102 Q_INVOKABLE void createSession();
105 Q_INVOKABLE void createSession();
103
106
107+private Q_SLOTS:
108+ void onSessionSurfaceChanged(MirSurfaceItem*);
109+
104private:
110private:
105 void setIcon(const QUrl &value);
111 void setIcon(const QUrl &value);
106
112
@@ -116,6 +122,7 @@ private:
116 Session* m_session;
122 Session* m_session;
117 Qt::ScreenOrientations m_supportedOrientations;
123 Qt::ScreenOrientations m_supportedOrientations;
118 bool m_rotatesWindowContents;
124 bool m_rotatesWindowContents;
125+ RequestedState m_requestedState;
119
126
120 bool m_manualSurfaceCreation;
127 bool m_manualSurfaceCreation;
121};
128};
tests/mocks/Unity/Application/ApplicationManager.cpp+2−49
@@ -49,8 +49,6 @@ ApplicationManager *ApplicationManager::singleton()
49
49
50ApplicationManager::ApplicationManager(QObject *parent)
50ApplicationManager::ApplicationManager(QObject *parent)
51 : ApplicationManagerInterface(parent)
51 : ApplicationManagerInterface(parent)
52− , m_suspended(false)
53− , m_forceDashActive(false)
54{
52{
55 m_roleNames.insert(RoleSession, "session");
53 m_roleNames.insert(RoleSession, "session");
56 m_roleNames.insert(RoleFullscreen, "fullscreen");
54 m_roleNames.insert(RoleFullscreen, "fullscreen");
@@ -217,7 +215,7 @@ ApplicationInfo* ApplicationManager::startApplication(const QString &appId,
217 && application->stage() == ApplicationInfo::SideStage) {
215 && application->stage() == ApplicationInfo::SideStage) {
218 application->setStage(ApplicationInfo::MainStage);
216 application->setStage(ApplicationInfo::MainStage);
219 }
217 }
220− application->setState(ApplicationInfo::Running);
218+ application->setState(ApplicationInfo::Starting);
221
219
222 return application;
220 return application;
223}
221}
@@ -262,50 +260,6 @@ QString ApplicationManager::focusedApplicationId() const {
262 return QString();
260 return QString();
263}
261}
264
262
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−
309bool ApplicationManager::focusApplication(const QString &appId)
263bool ApplicationManager::focusApplication(const QString &appId)
310{
264{
311 ApplicationInfo *application = findApplication(appId);
265 ApplicationInfo *application = findApplication(appId);
@@ -316,13 +270,11 @@ bool ApplicationManager::focusApplication(const QString &appId)
316 for (ApplicationInfo *app : m_runningApplications) {
270 for (ApplicationInfo *app : m_runningApplications) {
317 if (app->focused()) {
271 if (app->focused()) {
318 app->setFocused(false);
272 app->setFocused(false);
319− app->setState(ApplicationInfo::Suspended);
320 }
273 }
321 }
274 }
322
275
323 // focus this app
276 // focus this app
324 application->setFocused(true);
277 application->setFocused(true);
325− application->setState(ApplicationInfo::Running);
326
278
327 // move app to top of stack
279 // move app to top of stack
328 move(m_runningApplications.indexOf(application), 0);
280 move(m_runningApplications.indexOf(application), 0);
@@ -394,6 +346,7 @@ void ApplicationManager::buildListOfAvailableApplications()
394 application->setScreenshotId("gallery");
346 application->setScreenshotId("gallery");
395 application->setIconId("gallery");
347 application->setIconId("gallery");
396 application->setFullscreen(true);
348 application->setFullscreen(true);
349+ application->setStage(ApplicationInfo::MainStage);
397 m_availableApplications.append(application);
350 m_availableApplications.append(application);
398
351
399 application = new ApplicationInfo(this);
352 application = new ApplicationInfo(this);
tests/mocks/Unity/Application/ApplicationManager.h−7
@@ -69,11 +69,6 @@ class ApplicationManager : public ApplicationManagerInterface {
69 Q_INVOKABLE bool stopApplication(const QString &appId) override;
69 Q_INVOKABLE bool stopApplication(const QString &appId) override;
70
70
71 QString focusedApplicationId() const override;
71 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;
77
72
78 // Only for testing
73 // Only for testing
79 QStringList availableApplications();
74 QStringList availableApplications();
@@ -96,8 +91,6 @@ class ApplicationManager : public ApplicationManagerInterface {
96 void remove(ApplicationInfo* application);
91 void remove(ApplicationInfo* application);
97 void buildListOfAvailableApplications();
92 void buildListOfAvailableApplications();
98 void onWindowCreated();
93 void onWindowCreated();
99− bool m_suspended;
100− bool m_forceDashActive;
101 QList<ApplicationInfo*> m_runningApplications;
94 QList<ApplicationInfo*> m_runningApplications;
102 QList<ApplicationInfo*> m_availableApplications;
95 QList<ApplicationInfo*> m_availableApplications;
103 QTimer m_windowCreatedTimer;
96 QTimer m_windowCreatedTimer;
tests/mocks/Unity/CMakeLists.txt+1−1
@@ -7,7 +7,7 @@ add_subdirectory(Notifications)
7add_subdirectory(DashCommunicator)
7add_subdirectory(DashCommunicator)
8
8
9pkg_search_module(GOBJECT gobject-2.0 REQUIRED)
9pkg_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)
11
11
12include_directories(
12include_directories(
13 ${CMAKE_CURRENT_BINARY_DIR}
13 ${CMAKE_CURRENT_BINARY_DIR}
tests/mocks/Unity/fake_scope.cpp+5−3
@@ -181,18 +181,20 @@ void Scope::setNoResultsHint(const QString& str)
181 }
181 }
182}
182}
183
183
184−void Scope::activate(QVariant const& result)
184+void Scope::activate(QVariant const& result, QString const& categoryId)
185{
185{
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;
187 if (result.toString() == "Result.2.2") {
187 if (result.toString() == "Result.2.2") {
188 Scopes *scopes = dynamic_cast<Scopes*>(parent());
188 Scopes *scopes = dynamic_cast<Scopes*>(parent());
189 m_openScope = scopes->getScopeFromAll("MockScope9");
189 m_openScope = scopes->getScopeFromAll("MockScope9");
190 scopes->addTempScope(m_openScope);
190 scopes->addTempScope(m_openScope);
191 Q_EMIT openScope(m_openScope);
191 Q_EMIT openScope(m_openScope);
192+ } else {
193+ Q_EMIT previewRequested(result);
192 }
194 }
193}
195}
194
196
195−PreviewStack* Scope::preview(QVariant const& result)
197+PreviewStack* Scope::preview(QVariant const& result, QString const& /*categoryId*/)
196{
198{
197 Q_UNUSED(result);
199 Q_UNUSED(result);
198
200
tests/mocks/Unity/fake_scope.h+2−2
@@ -60,8 +60,8 @@ public:
60 Q_INVOKABLE void setName(const QString &name); // This is not invokable in the Interface, here for testing benefits
60 Q_INVOKABLE void setName(const QString &name); // This is not invokable in the Interface, here for testing benefits
61 Q_INVOKABLE void setSearchInProgress(const bool inProg); // This is not invokable in the Interface, here for testing benefits
61 Q_INVOKABLE void setSearchInProgress(const bool inProg); // This is not invokable in the Interface, here for testing benefits
62
62
63− Q_INVOKABLE void activate(QVariant const& result) override;
63+ Q_INVOKABLE void activate(QVariant const& result, QString const& categoryId) override;
64− Q_INVOKABLE PreviewStack* preview(QVariant const& result) override;
64+ Q_INVOKABLE PreviewStack* preview(QVariant const& result, QString const& categoryId) override;
65 Q_INVOKABLE void cancelActivation() override;
65 Q_INVOKABLE void cancelActivation() override;
66 Q_INVOKABLE void closeScope(unity::shell::scopes::ScopeInterface* scope) override;
66 Q_INVOKABLE void closeScope(unity::shell::scopes::ScopeInterface* scope) override;
67
67
tests/mocks/Unity/fake_scopesoverview.cpp+1−1
@@ -41,7 +41,7 @@ void ScopesOverview::setSearchQuery(const QString& search_query)
41 Q_EMIT categoriesChanged();
41 Q_EMIT categoriesChanged();
42}
42}
43
43
44−Q_INVOKABLE void ScopesOverview::activate(QVariant const& result)
44+Q_INVOKABLE void ScopesOverview::activate(QVariant const& result, QString const& /*categoryId*/)
45{
45{
46 Scopes *scopes = dynamic_cast<Scopes*>(parent());
46 Scopes *scopes = dynamic_cast<Scopes*>(parent());
47 if (scopes->getScope(result.toString())) {
47 if (scopes->getScope(result.toString())) {
tests/mocks/Unity/fake_scopesoverview.h+1−1
@@ -32,7 +32,7 @@ public:
32 ScopesOverview(Scopes* parent = 0);
32 ScopesOverview(Scopes* parent = 0);
33
33
34 void setSearchQuery(const QString& search_query) override;
34 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;
36
36
37 // This is implementation detail
37 // This is implementation detail
38 void setFavorite(Scope *scope, bool favorite);
38 void setFavorite(Scope *scope, bool favorite);
tests/plugins/Greeter/Unity/Launcher/CMakeLists.txt−1
@@ -1,5 +1,4 @@
1pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=7)
1pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=7)
2−pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=6)
3
2
4include_directories(
3include_directories(
5 ${CMAKE_CURRENT_SOURCE_DIR}
4 ${CMAKE_CURRENT_SOURCE_DIR}
tests/plugins/Unity/Launcher/launchermodeltest.cpp+19−4
@@ -39,6 +39,9 @@ class MockApp: public unity::shell::application::ApplicationInfoInterface
39 Q_OBJECT
39 Q_OBJECT
40public:
40public:
41 MockApp(const QString &appId, QObject *parent = 0): ApplicationInfoInterface(appId, parent), m_appId(appId), m_focused(false) { }
41 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 {}
42 QString appId() const override { return m_appId; }
45 QString appId() const override { return m_appId; }
43 QString name() const override { return "mock"; }
46 QString name() const override { return "mock"; }
44 QString comment() const override { return "this is a mock"; }
47 QString comment() const override { return "this is a mock"; }
@@ -117,10 +120,6 @@ public:
117 endRemoveRows();
120 endRemoveRows();
118 }
121 }
119 bool requestFocusApplication(const QString &appId) override { Q_UNUSED(appId); return true; }
122 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 {}
124
123
125private:
124private:
126 QList<MockApp*> m_list;
125 QList<MockApp*> m_list;
@@ -299,6 +298,22 @@ private Q_SLOTS:
299 QCOMPARE(launcherModel->rowCount(QModelIndex()), 1);
298 QCOMPARE(launcherModel->rowCount(QModelIndex()), 1);
300 }
299 }
301
300
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+
302 void testApplicationFocused() {
317 void testApplicationFocused() {
303 // all apps unfocused at beginning...
318 // all apps unfocused at beginning...
304 QCOMPARE(launcherModel->get(0)->focused(), false);
319 QCOMPARE(launcherModel->get(0)->focused(), false);
tests/qmltests/Dash/Previews/tst_PreviewExpandable.qml+147−6
@@ -34,21 +34,122 @@ Rectangle {
34 "values": [ [ "Long Label 1", "Value 1"], [ "Label 2", "Long Value 2"], [ "Label 3", "Value 3"], [ "Label 4", "Value 4"], [ "Label 5", "Value 5"] ]
34 "values": [ [ "Long Label 1", "Value 1"], [ "Label 2", "Long Value 2"], [ "Label 3", "Value 3"], [ "Label 4", "Value 4"], [ "Label 5", "Value 5"] ]
35 }
35 }
36
36
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+
37 ListModel {
109 ListModel {
38 id: widgetsModel
110 id: widgetsModel
39 }
111 }
40
112
113+ ListModel {
114+ id: allWidgetsModel
115+ }
116+
41 property var widgetData: {
117 property var widgetData: {
42 "title": "Title here",
118 "title": "Title here",
43 "collapsed-widgets": 2,
119 "collapsed-widgets": 2,
44 "widgets": widgetsModel
120 "widgets": widgetsModel
45 }
121 }
46
122
123+ property var allWidgetsData: {
124+ "title": "Title here",
125+ "collapsed-widgets": 0,
126+ "widgets": allWidgetsModel
127+ }
128+
129+
47 Component.onCompleted: {
130 Component.onCompleted: {
48 widgetsModel.append({"type": "text", "widgetId": "text1", "properties": { "text": longText }});
131 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 });
50 widgetsModel.append({"type": "text", "widgetId": "text3", "properties": { "text": shortText }});
133 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 });
52 }
153 }
53
154
54 PreviewWidgetFactory {
155 PreviewWidgetFactory {
@@ -58,6 +159,12 @@ Rectangle {
58 widgetData: root.widgetData
159 widgetData: root.widgetData
59 }
160 }
60
161
162+ PreviewWidgetFactory {
163+ id: previewWidgetFactory
164+ anchors { left: parent.left; right: parent.right; top: previewExpandable.bottom }
165+ opacity: 0
166+ }
167+
61 UT.UnityTestCase {
168 UT.UnityTestCase {
62 name: "PreviewExpandableTest"
169 name: "PreviewExpandableTest"
63 when: windowShown
170 when: windowShown
@@ -78,13 +185,10 @@ Rectangle {
78 }
185 }
79
186
80 function init() {
187 function init() {
188+ previewExpandable.widgetData = widgetData;
81 checkInitialState();
189 checkInitialState();
82 }
190 }
83
191
84− function test_collapsed_by_default() {
85− // Nothing init does this already
86− }
87−
88 function test_expand_collapse() {
192 function test_expand_collapse() {
89 var expandButton = findChild(previewExpandable, "expandButton")
193 var expandButton = findChild(previewExpandable, "expandButton")
90 mouseClick(expandButton);
194 mouseClick(expandButton);
@@ -105,5 +209,42 @@ Rectangle {
105
209
106 checkInitialState();
210 checkInitialState();
107 }
211 }
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+ }
108 }
249 }
109}
250}
tests/qmltests/Launcher/tst_Launcher.qml+36−5
@@ -382,6 +382,15 @@ Item {
382 }
382 }
383 }
383 }
384
384
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+
385 function test_focusedHighlight() {
394 function test_focusedHighlight() {
386 dragLauncherIntoView();
395 dragLauncherIntoView();
387 var launcherListView = findChild(launcher, "launcherListView");
396 var launcherListView = findChild(launcher, "launcherListView");
@@ -520,7 +529,14 @@ Item {
520 waitUntilLauncherDisappears();
529 waitUntilLauncherDisappears();
521 }
530 }
522
531
532+ function test_dragndrop_cancel_data() {
533+ return [
534+ {tag: "by mouse", mouse: true},
535+ {tag: "by touch", mouse: false}
536+ ]
537+ }
538+
523− function test_dragndrop_cancel() {
539+ function test_dragndrop_cancel(data) {
524 dragLauncherIntoView();
540 dragLauncherIntoView();
525 var draggedItem = findChild(launcher, "launcherDelegate4")
541 var draggedItem = findChild(launcher, "launcherDelegate4")
526 var item0 = findChild(launcher, "launcherDelegate0")
542 var item0 = findChild(launcher, "launcherDelegate0")
@@ -529,22 +545,37 @@ Item {
529 // Doing longpress
545 // Doing longpress
530 var currentMouseX = draggedItem.width / 2
546 var currentMouseX = draggedItem.width / 2
531 var currentMouseY = draggedItem.height / 2
547 var currentMouseY = draggedItem.height / 2
548+
549+ if(data.mouse) {
532− mousePress(draggedItem, currentMouseX, currentMouseY)
550+ mousePress(draggedItem, currentMouseX, currentMouseY)
551+ } else {
552+ touchPress(draggedItem, currentMouseX, currentMouseY)
553+ }
554+
533 // DraggedItem needs to hide and fakeDragItem become visible
555 // DraggedItem needs to hide and fakeDragItem become visible
534 tryCompare(draggedItem, "itemOpacity", 0)
556 tryCompare(draggedItem, "itemOpacity", 0)
535 tryCompare(fakeDragItem, "visible", true)
557 tryCompare(fakeDragItem, "visible", true)
536
558
537 // Dragging
559 // Dragging
538 currentMouseX -= units.gu(20)
560 currentMouseX -= units.gu(20)
561+
562+ if(data.mouse) {
539− mouseMove(draggedItem, currentMouseX, currentMouseY)
563+ mouseMove(draggedItem, currentMouseX, currentMouseY)
564+ } else {
565+ touchMove(draggedItem, currentMouseX, currentMouseY)
566+ }
540
567
541 // Make sure we're in the dragging state
568 // Make sure we're in the dragging state
542 var dndArea = findChild(launcher, "dndArea");
569 var dndArea = findChild(launcher, "dndArea");
543 tryCompare(draggedItem, "dragging", true)
570 tryCompare(draggedItem, "dragging", true)
544 tryCompare(dndArea, "draggedIndex", 4)
571 tryCompare(dndArea, "draggedIndex", 4)
545
572
546− // Tap somewhere in the middle of the screen to close/hide the launcher
573+ // Click/Tap somewhere in the middle of the screen to close/hide the launcher
574+ if(data.mouse) {
575+ mouseClick(root)
576+ } else {
547− tap(root)
577+ tap(root)
578+ }
548
579
549 // Make sure the dnd operation has been stopped
580 // Make sure the dnd operation has been stopped
550 tryCompare(draggedItem, "dragging", false)
581 tryCompare(draggedItem, "dragging", false)
tests/qmltests/Panel/tst_IndicatorItem.qml+12−12
@@ -181,25 +181,25 @@ Rectangle {
181 }
181 }
182
182
183 function test_select() {
183 function test_select() {
184− tryCompare(findChild(indicatorItem, "icon0"), "color", "#ededed");
184+ tryCompare(findChild(indicatorItem, "icon0"), "color", "#ffffff");
185 tryCompare(findChild(indicatorItem, "icon0"), "opacity", 1.0);
185 tryCompare(findChild(indicatorItem, "icon0"), "opacity", 1.0);
186− tryCompare(findChild(indicatorItem, "leftLabel"), "color", "#ededed");
186+ tryCompare(findChild(indicatorItem, "leftLabel"), "color", "#ffffff");
187− tryCompare(findChild(indicatorItem, "rightLabel"), "color", "#ededed");
187+ tryCompare(findChild(indicatorItem, "rightLabel"), "color", "#ffffff");
188− tryCompare(findChild(indicatorItem, "indicatorName"), "color", "#ededed");
188+ tryCompare(findChild(indicatorItem, "indicatorName"), "color", "#ffffff");
189
189
190 indicatorItem.expanded = true;
190 indicatorItem.expanded = true;
191− tryCompare(findChild(indicatorItem, "icon0"), "color", "#4c4c4c");
191+ tryCompare(findChild(indicatorItem, "icon0"), "color", "#888888");
192 tryCompare(findChild(indicatorItem, "icon0"), "opacity", 0.6);
192 tryCompare(findChild(indicatorItem, "icon0"), "opacity", 0.6);
193− tryCompare(findChild(indicatorItem, "leftLabel"), "color", "#4c4c4c");
193+ tryCompare(findChild(indicatorItem, "leftLabel"), "color", "#888888");
194− tryCompare(findChild(indicatorItem, "rightLabel"), "color", "#4c4c4c");
194+ tryCompare(findChild(indicatorItem, "rightLabel"), "color", "#888888");
195− tryCompare(findChild(indicatorItem, "indicatorName"), "color", "#4c4c4c");
195+ tryCompare(findChild(indicatorItem, "indicatorName"), "color", "#888888");
196
196
197 indicatorItem.selected = true;
197 indicatorItem.selected = true;
198− tryCompare(findChild(indicatorItem, "icon0"), "color", "#ededed");
198+ tryCompare(findChild(indicatorItem, "icon0"), "color", "#ffffff");
199 tryCompare(findChild(indicatorItem, "icon0"), "opacity", 1.0);
199 tryCompare(findChild(indicatorItem, "icon0"), "opacity", 1.0);
200− tryCompare(findChild(indicatorItem, "leftLabel"), "color", "#ededed");
200+ tryCompare(findChild(indicatorItem, "leftLabel"), "color", "#ffffff");
201− tryCompare(findChild(indicatorItem, "rightLabel"), "color", "#ededed");
201+ tryCompare(findChild(indicatorItem, "rightLabel"), "color", "#ffffff");
202− tryCompare(findChild(indicatorItem, "indicatorName"), "color", "#ededed");
202+ tryCompare(findChild(indicatorItem, "indicatorName"), "color", "#ffffff");
203 }
203 }
204 }
204 }
205}
205}
tests/qmltests/Stages/ApplicationCheckBox.qml+21
@@ -86,8 +86,29 @@ RowLayout {
86 }
86 }
87 }
87 }
88 Label {
88 Label {
89+ id: appIdLabel
89 text: root.appId
90 text: root.appId
90 color: "white"
91 color: "white"
91 anchors.verticalCenter: parent.verticalCenter
92 anchors.verticalCenter: parent.verticalCenter
92 }
93 }
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+ }
93}
114}
tests/qmltests/Stages/tst_DesktopStage.qml+2−2
@@ -24,9 +24,8 @@ import Utils 0.1
24
24
25import "../../../qml/Stages"
25import "../../../qml/Stages"
26
26
27−Rectangle {
27+Item {
28 id: root
28 id: root
29− color: "darkblue"
30 width: desktopStageLoader.width + controls.width
29 width: desktopStageLoader.width + controls.width
31 height: desktopStageLoader.height
30 height: desktopStageLoader.height
32
31
@@ -57,6 +56,7 @@ Rectangle {
57 property bool itemDestroyed: false
56 property bool itemDestroyed: false
58 sourceComponent: Component {
57 sourceComponent: Component {
59 DesktopStage {
58 DesktopStage {
59+ color: "darkblue"
60 anchors.fill: parent
60 anchors.fill: parent
61 Component.onDestruction: {
61 Component.onDestruction: {
62 desktopStageLoader.itemDestroyed = true;
62 desktopStageLoader.itemDestroyed = true;
tests/qmltests/Stages/tst_PhoneStage.qml+76−3
@@ -295,22 +295,23 @@ Item {
295 tryCompare(ApplicationManager, "count", oldCount - 1)
295 tryCompare(ApplicationManager, "count", oldCount - 1)
296 }
296 }
297 phoneStage.shellOrientationAngle = 0;
297 phoneStage.shellOrientationAngle = 0;
298+ phoneStage.select(ApplicationManager.get(0).appId);
298 }
299 }
299
300
300 function test_focusNewTopMostAppAfterFocusedOneClosesItself() {
301 function test_focusNewTopMostAppAfterFocusedOneClosesItself() {
301 addApps(2);
302 addApps(2);
302
303
303 var secondApp = ApplicationManager.get(0);
304 var secondApp = ApplicationManager.get(0);
304− tryCompare(secondApp, "state", ApplicationInfoInterface.Running);
305+ tryCompare(secondApp, "requestedState", ApplicationInfoInterface.RequestedRunning);
305 tryCompare(secondApp, "focused", true);
306 tryCompare(secondApp, "focused", true);
306
307
307 var firstApp = ApplicationManager.get(1);
308 var firstApp = ApplicationManager.get(1);
308− tryCompare(firstApp, "state", ApplicationInfoInterface.Suspended);
309+ tryCompare(firstApp, "requestedState", ApplicationInfoInterface.RequestedSuspended);
309 tryCompare(firstApp, "focused", false);
310 tryCompare(firstApp, "focused", false);
310
311
311 ApplicationManager.stopApplication(secondApp.appId);
312 ApplicationManager.stopApplication(secondApp.appId);
312
313
313− tryCompare(firstApp, "state", ApplicationInfoInterface.Running);
314+ tryCompare(firstApp, "requestedState", ApplicationInfoInterface.RequestedRunning);
314 tryCompare(firstApp, "focused", true);
315 tryCompare(firstApp, "focused", true);
315 }
316 }
316
317
@@ -388,5 +389,77 @@ Item {
388
389
389 tryCompare(focusedDelegate, "x", 0);
390 tryCompare(focusedDelegate, "x", 0);
390 }
391 }
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+ }
391 }
464 }
392}
465}
tests/qmltests/Stages/tst_TabletStage.qml+161−1
@@ -76,10 +76,18 @@ Rectangle {
76 id: webbrowserCheckBox
76 id: webbrowserCheckBox
77 appId: "webbrowser-app"
77 appId: "webbrowser-app"
78 }
78 }
79+ ApplicationCheckBox {
80+ id: galleryCheckBox
81+ appId: "gallery-app"
82+ }
79 ApplicationCheckBox {
83 ApplicationCheckBox {
80 id: dialerCheckBox
84 id: dialerCheckBox
81 appId: "dialer-app"
85 appId: "dialer-app"
82 }
86 }
87+ ApplicationCheckBox {
88+ id: facebookCheckBox
89+ appId: "facebook-webapp"
90+ }
83 }
91 }
84 }
92 }
85
93
@@ -93,6 +101,19 @@ Rectangle {
93 function init() {
101 function init() {
94 tabletStageLoader.active = true;
102 tabletStageLoader.active = true;
95 tryCompare(tabletStageLoader, "status", Loader.Ready);
103 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");
96 }
117 }
97
118
98 function cleanup() {
119 function cleanup() {
@@ -109,7 +130,9 @@ Rectangle {
109
130
110 // kill all (fake) running apps
131 // kill all (fake) running apps
111 webbrowserCheckBox.checked = false;
132 webbrowserCheckBox.checked = false;
133+ galleryCheckBox.checked = false;
112 dialerCheckBox.checked = false;
134 dialerCheckBox.checked = false;
135+ facebookCheckBox.checked = false;
113 }
136 }
114
137
115 function waitUntilAppSurfaceShowsUp(appId) {
138 function waitUntilAppSurfaceShowsUp(appId) {
@@ -120,6 +143,34 @@ Rectangle {
120 tryCompare(appWindowStates, "state", "surface");
143 tryCompare(appWindowStates, "state", "surface");
121 }
144 }
122
145
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+
123 function test_tappingSwitchesFocusBetweenStages() {
174 function test_tappingSwitchesFocusBetweenStages() {
124 webbrowserCheckBox.checked = true;
175 webbrowserCheckBox.checked = true;
125 waitUntilAppSurfaceShowsUp(webbrowserCheckBox.appId);
176 waitUntilAppSurfaceShowsUp(webbrowserCheckBox.appId);
@@ -155,7 +206,6 @@ Rectangle {
155 tryCompare(webbrowserApp.session.surface, "activeFocus", false);
206 tryCompare(webbrowserApp.session.surface, "activeFocus", false);
156 }
207 }
157
208
158−
159 function test_closeAppInSideStage() {
209 function test_closeAppInSideStage() {
160 dialerCheckBox.checked = true;
210 dialerCheckBox.checked = true;
161 waitUntilAppSurfaceShowsUp(dialerCheckBox.appId);
211 waitUntilAppSurfaceShowsUp(dialerCheckBox.appId);
@@ -200,6 +250,116 @@ Rectangle {
200 appWindow.width / 2, appWindow.height / 2,
250 appWindow.width / 2, appWindow.height / 2,
201 appWindow.width / 2, -appWindow.height / 2);
251 appWindow.width / 2, -appWindow.height / 2);
202 }
252 }
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+ }
203 }
363 }
204
364
205}
365}
tests/qmltests/tst_OrientedShell.qml+3−3
@@ -46,7 +46,7 @@ Rectangle {
46 }
46 }
47
47
48 QtObject {
48 QtObject {
49− id: mockUsageModeSettings
49+ id: mockUnity8Settings
50 property string usageMode: usageModeSelector.model[usageModeSelector.selectedIndex]
50 property string usageMode: usageModeSelector.model[usageModeSelector.selectedIndex]
51 }
51 }
52
52
@@ -125,7 +125,7 @@ Rectangle {
125 sourceComponent: Component {
125 sourceComponent: Component {
126 OrientedShell {
126 OrientedShell {
127 anchors.fill: parent
127 anchors.fill: parent
128− usageModeSettings: mockUsageModeSettings
128+ unity8Settings: mockUnity8Settings
129 oskSettings: mockOskSettings
129 oskSettings: mockOskSettings
130 physicalOrientation: root.physicalOrientation0
130 physicalOrientation: root.physicalOrientation0
131 orientationLocked: orientationLockedCheckBox.checked
131 orientationLocked: orientationLockedCheckBox.checked
@@ -926,7 +926,7 @@ Rectangle {
926
926
927 function test_attachRemoveInputDevices() {
927 function test_attachRemoveInputDevices() {
928 usageModeSelector.selectedIndex = 2;
928 usageModeSelector.selectedIndex = 2;
929− tryCompare(mockUsageModeSettings, "usageMode", "Automatic")
929+ tryCompare(mockUnity8Settings, "usageMode", "Automatic")
930
930
931 loadShell("mako")
931 loadShell("mako")
932 var shell = findChild(orientedShell, "shell");
932 var shell = findChild(orientedShell, "shell");
tests/qmltests/tst_Shell.qml+55−29
@@ -67,11 +67,6 @@ Rectangle {
67 width: units.gu(40)
67 width: units.gu(40)
68 height: units.gu(71)
68 height: units.gu(71)
69 }
69 }
70− StateChangeScript {
71− script: {
72− GSettingsController.setUsageMode("Staged")
73− }
74− }
75 },
70 },
76 State {
71 State {
77 name: "tablet"
72 name: "tablet"
@@ -80,11 +75,6 @@ Rectangle {
80 width: units.gu(100)
75 width: units.gu(100)
81 height: units.gu(71)
76 height: units.gu(71)
82 }
77 }
83− StateChangeScript {
84− script: {
85− GSettingsController.setUsageMode("Staged")
86− }
87− }
88 },
78 },
89 State {
79 State {
90 name: "desktop"
80 name: "desktop"
@@ -97,11 +87,6 @@ Rectangle {
97 target: mouseEmulation
87 target: mouseEmulation
98 checked: false
88 checked: false
99 }
89 }
100− StateChangeScript {
101− script: {
102− GSettingsController.setUsageMode("Windowed")
103− }
104− }
105 }
90 }
106 ]
91 ]
107
92
@@ -317,7 +302,6 @@ Rectangle {
317 mouseEmulation.checked = true;
302 mouseEmulation.checked = true;
318 tryCompare(shell, "enabled", true); // make sure greeter didn't leave us in disabled state
303 tryCompare(shell, "enabled", true); // make sure greeter didn't leave us in disabled state
319 tearDown();
304 tearDown();
320− GSettingsController.setUsageMode("Staged");
321 }
305 }
322
306
323 function loadShell(formFactor) {
307 function loadShell(formFactor) {
@@ -602,9 +586,9 @@ Rectangle {
602 verify(mainAppId != "");
586 verify(mainAppId != "");
603 var mainApp = ApplicationManager.findApplication(mainAppId);
587 var mainApp = ApplicationManager.findApplication(mainAppId);
604 verify(mainApp);
588 verify(mainApp);
605− tryCompare(mainApp, "state", ApplicationInfoInterface.Running);
589+ tryCompare(mainApp, "requestedState", ApplicationInfoInterface.RequestedRunning);
606
590
607− // Suspend while call is active...
591+ // Display off while call is active...
608 callManager.foregroundCall = phoneCall;
592 callManager.foregroundCall = phoneCall;
609 Powerd.status = Powerd.Off;
593 Powerd.status = Powerd.Off;
610 tryCompare(greeter, "shown", false);
594 tryCompare(greeter, "shown", false);
@@ -615,8 +599,7 @@ Rectangle {
615 Powerd.status = Powerd.Off;
599 Powerd.status = Powerd.Off;
616 tryCompare(greeter, "fullyShown", true);
600 tryCompare(greeter, "fullyShown", true);
617
601
618− tryCompare(ApplicationManager, "suspended", true);
619− compare(mainApp.state, ApplicationInfoInterface.Suspended);
602+ compare(mainApp.requestedState, ApplicationInfoInterface.RequestedSuspended);
620
603
621 // And wake up
604 // And wake up
622 Powerd.status = Powerd.On;
605 Powerd.status = Powerd.On;
@@ -632,8 +615,7 @@ Rectangle {
632 removeTimeConstraintsFromDirectionalDragAreas(greeter);
615 removeTimeConstraintsFromDirectionalDragAreas(greeter);
633 swipeAwayGreeter();
616 swipeAwayGreeter();
634
617
635− tryCompare(ApplicationManager, "suspended", false);
636− compare(mainApp.state, ApplicationInfoInterface.Running);
618+ compare(mainApp.requestedState, ApplicationInfoInterface.RequestedRunning);
637 tryCompare(ApplicationManager, "focusedApplicationId", mainAppId);
619 tryCompare(ApplicationManager, "focusedApplicationId", mainAppId);
638 }
620 }
639
621
@@ -804,15 +786,15 @@ Rectangle {
804
786
805 function test_launchedAppHasActiveFocus_data() {
787 function test_launchedAppHasActiveFocus_data() {
806 return [
788 return [
807− {tag: "phone", formFactor: "phone", usageMode: "Staged"},
789+ {tag: "phone", formFactor: "phone", usageScenario: "phone"},
808− {tag: "tablet", formFactor: "tablet", usageMode: "Staged"},
790+ {tag: "tablet", formFactor: "tablet", usageScenario: "tablet"},
809− {tag: "desktop", formFactor: "tablet", usageMode: "Windowed"}
791+ {tag: "desktop", formFactor: "tablet", usageScenario: "desktop"}
810 ]
792 ]
811 }
793 }
812
794
813 function test_launchedAppHasActiveFocus(data) {
795 function test_launchedAppHasActiveFocus(data) {
814− GSettingsController.setUsageMode(data.usageMode);
815 loadShell(data.formFactor);
796 loadShell(data.formFactor);
797+ shell.usageScenario = data.usageScenario;
816 swipeAwayGreeter();
798 swipeAwayGreeter();
817
799
818 var webApp = ApplicationManager.startApplication("webbrowser-app");
800 var webApp = ApplicationManager.startApplication("webbrowser-app");
@@ -1347,6 +1329,50 @@ Rectangle {
1347 compare(launcher.inverted, data.launcherInverted);
1329 compare(launcher.inverted, data.launcherInverted);
1348 }
1330 }
1349
1331
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+
1350 function test_altTabSwitchesFocus() {
1376 function test_altTabSwitchesFocus() {
1351 loadShell("desktop");
1377 loadShell("desktop");
1352 shell.usageScenario = "desktop"
1378 shell.usageScenario = "desktop"
@@ -1479,7 +1505,7 @@ Rectangle {
1479 while (appRepeater.highlightedIndex != i && x <= 4000) {
1505 while (appRepeater.highlightedIndex != i && x <= 4000) {
1480 x+=10;
1506 x+=10;
1481 mouseMove(shell, x, y)
1507 mouseMove(shell, x, y)
1482− waitForRendering(shell)
1508+ wait(0); // spin the loop so bindings get evaluated
1483 }
1509 }
1484 }
1510 }
1485
1511
@@ -1510,7 +1536,7 @@ Rectangle {
1510 while (appRepeater.highlightedIndex !== 2 && x <= 4000) {
1536 while (appRepeater.highlightedIndex !== 2 && x <= 4000) {
1511 x+=10;
1537 x+=10;
1512 mouseMove(shell, x, y)
1538 mouseMove(shell, x, y)
1513− waitForRendering(shell)
1539+ wait(0); // spin the loop so bindings get evaluated
1514 }
1540 }
1515 tryCompare(closeMouseArea, "enabled", true)
1541 tryCompare(closeMouseArea, "enabled", true)
1516
1542
@@ -1556,7 +1582,7 @@ Rectangle {
1556 while (appRepeater.highlightedIndex !== 2 && x <= 4000) {
1582 while (appRepeater.highlightedIndex !== 2 && x <= 4000) {
1557 x+=10;
1583 x+=10;
1558 mouseMove(shell, x, y)
1584 mouseMove(shell, x, y)
1559− waitForRendering(shell)
1585+ wait(0); // spin the loop so bindings get evaluated
1560 }
1586 }
1561 tryCompare(decoratedWindow, "highlightShown", true);
1587 tryCompare(decoratedWindow, "highlightShown", true);
1562
1588
tests/qmltests/tst_ShellWithPin.qml+5−4
@@ -498,12 +498,13 @@ Item {
498
498
499 function test_suspend() {
499 function test_suspend() {
500 var greeter = findChild(shell, "greeter");
500 var greeter = findChild(shell, "greeter");
501+ var applicationsDisplayLoader = findChild(shell, "applicationsDisplayLoader")
501
502
502 // Put it to sleep
503 // Put it to sleep
503 Powerd.status = Powerd.Off;
504 Powerd.status = Powerd.Off;
504
505
505− // If locked, ApplicationManager.suspended should be true
506+ // If locked, applicationsDisplayLoader.item.suspended should be true
506− tryCompare(ApplicationManager, "suspended", true);
507+ tryCompare(applicationsDisplayLoader.item, "suspended", true);
507
508
508 // And wake up
509 // And wake up
509 Powerd.status = Powerd.On;
510 Powerd.status = Powerd.On;
@@ -513,12 +514,12 @@ Item {
513 swipeAwayGreeter(true);
514 swipeAwayGreeter(true);
514
515
515 // We have a lockscreen, make sure we're still suspended
516 // We have a lockscreen, make sure we're still suspended
516− tryCompare(ApplicationManager, "suspended", true);
517+ tryCompare(applicationsDisplayLoader.item, "suspended", true);
517
518
518 enterPin("1234")
519 enterPin("1234")
519
520
520 // Now that the lockscreen has gone too, make sure we're waking up
521 // Now that the lockscreen has gone too, make sure we're waking up
521− tryCompare(ApplicationManager, "suspended", false);
522+ tryCompare(applicationsDisplayLoader.item, "suspended", false);
522
523
523 }
524 }
524
525
tests/utils/modules/Unity/Test/UnityTestCase.qml+9
@@ -351,6 +351,15 @@ TestCase {
351 event.commit()
351 event.commit()
352 }
352 }
353
353
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+
354 function touchPinch(item, x1Start, y1Start, x1End, y1End, x2Start, y2Start, x2End, y2End) {
363 function touchPinch(item, x1Start, y1Start, x1End, y1End, x2Start, y2Start, x2End, y2End) {
355 // Make sure the item is rendered
364 // Make sure the item is rendered
356 waitForRendering(item);
365 waitForRendering(item);