on xenial help sign in
Merge trunk
5809e2dDaniel d'Andrada
CODING+5−5
@@ -24,7 +24,7 @@ $ ./build.sh --setup
24
24
25 this will:
25 this will:
26 - install the required dependencies to build, as well as run on the desktop
26 - install the required dependencies to build, as well as run on the desktop
27− - it should also install unity-scope-home and unity-lens-application which
27+ - it should also install unity-scope-home and unity-lens-application which
28 are technically "recommends", not strict dependencies
28 are technically "recommends", not strict dependencies
29
29
30build Unity 8
30build Unity 8
@@ -104,8 +104,8 @@ Notes
104 - it's unsafe - anyone can connect to your device
104 - it's unsafe - anyone can connect to your device
105 - with TCP the Nexus 10 doesn't drop the adb connection when locking
105 - with TCP the Nexus 10 doesn't drop the adb connection when locking
106 the screen
106 the screen
107−- exporting ANDROID_SERIAL=$your_device_serial or
107+- exporting ANDROID_SERIAL=$your_device_serial or
108− ANDROID_SERIAL=$your_device_ip:5555 will make adb not complain about
108+ ANDROID_SERIAL=$your_device_ip:5555 will make adb not complain about
109 multiple devices
109 multiple devices
110- you can export TARGET_IP=$your_device_ip TARGET_SSH_PORT=22 for run_on_device.sh
110- you can export TARGET_IP=$your_device_ip TARGET_SSH_PORT=22 for run_on_device.sh
111 to not use adb forwarding - useful if you use multiple devices
111 to not use adb forwarding - useful if you use multiple devices
@@ -190,8 +190,8 @@ $ PYTHONPATH=../tests/autopilot autopilot list unity8
190
190
191And then run a single test with
191And then run a single test with
192
192
193−$ PYTHONPATH=../tests/autopilot autopilot run unity8.some.very.long.test.name
193+$ PYTHONPATH=../tests/autopilot autopilot3 run unity8.some.very.long.test.name
194
194
195or run them all with
195or run them all with
196
196
197−$ PYTHONPATH=../tests/autopilot autopilot run unity8
197+$ PYTHONPATH=../tests/autopilot autopilot3 run unity8
cmake/modules/autopilot.cmake−8
@@ -13,12 +13,4 @@ function(declare_autopilot_test TEST_NAME TEST_SUITE WORKING_DIR)
13
13
14 add_dependencies(autopilot autopilot-${TEST_NAME})
14 add_dependencies(autopilot autopilot-${TEST_NAME})
15
15
16− add_custom_target(autopilot2-${TEST_NAME}
17− COMMAND UNITY_TESTING=1 LANG=C QML2_IMPORT_PATH=${SHELL_INSTALL_QML}/mocks python2 -m autopilot.run run ${TEST_SUITE}
18− WORKING_DIRECTORY ${WORKING_DIR}
19− DEPENDS fake_install
20− )
21−
22− add_dependencies(autopilot autopilot2-${TEST_NAME})
23−
24endfunction()
16endfunction()
debian/changelog+72
@@ -1,3 +1,75 @@
1+unity8 (8.02+15.04.20150318-0ubuntu1) vivid; urgency=medium
2+
3+ [ Albert Astals Cid ]
4+ * Add some context to tr calls (LP: #1431497)
5+ * Require binaries and .pc files we call from code
6+ * Test: More stubborn flick to the end
7+
8+ [ Andrea Cimitan ]
9+ * Refactor PreviewOverlay to fix weird zoom out/in animations when
10+ previewing images from the Previews
11+
12+ [ CI Train Bot ]
13+ * Resync trunk.
14+
15+ [ Charles Kerr ]
16+ * Re-enable a rotation lock test now that the bug that broke that test
17+ has been fixed. (LP: #1410915)
18+
19+ [ Daniel d'Andrada ]
20+ * Darkened area behind indicators menu should eat input until it fully
21+ disappears (LP: #1417967)
22+ * DesktopStage - fix focus switch when user taps on window (LP:
23+ #1431325)
24+ * Fix warnings when launching tutorial
25+ * Make MouseTouchAdaptor controllable from within QML
26+ * Make tst_Shell absorb tst_TabletShell
27+
28+ [ Leo Arias ]
29+ * Changed the autopilot dependencies so they do not require qt4. (LP:
30+ #1429158)
31+ * Drop the support for python2 in autopilot tests. (LP: #1429163)
32+ * Stop using the deprecated toolkit emulators namespace in autopilot
33+ tests. (LP: #1341681)
34+
35+ [ Michael Terry ]
36+ * Don't close wizard & edge tutorial when the unity8-dash closes (LP:
37+ #1425484)
38+ * Don't let the wizard sit indefinitely, waiting for a wizard page to
39+ finish preparing itself. (LP: #1425737)
40+ * Fix two broken qmluitest files by waiting for everything to settle
41+ before starting the tests.
42+ * Only call unlockAllModems once the wizard is done. (LP: #1425161)
43+ (LP: #1425161)
44+ * When we are locking the user out from too many login failures,
45+ notice when time passes even if the device is suspended. (LP:
46+ #1396817) (LP: #1396817)
47+
48+ [ Michael Zanetti ]
49+ * Add a mouse area to the indicators panel so we can open them by
50+ clicking. (LP: #1417650)
51+ * fix launcher not reacting to first click when revealed by mouse
52+ hover, add tests
53+ * performance improvements (LP: #1430233, #1425087)
54+
55+ [ Michał Sawicz ]
56+ * Remove the activity indicator from tests
57+ * Use targets instead of custom ld arguments for linking
58+
59+ [ Mirco Müller ]
60+ * Updated the visuals of the SwipeToAct-widget for incoming-call snap-
61+ decision notifications according to new design-spec.
62+ * Updated the visuals of the SwipeToAct-widget for incoming-call snap-
63+ decision notifications according to new design-spec.
64+
65+ -- CI Train Bot <ci-train-bot@canonical.com> Wed, 18 Mar 2015 10:19:06 +0000
66+
67+unity8 (8.02+15.04.20150302-0ubuntu2) vivid; urgency=medium
68+
69+ * No-change rebuild against Qt 5.4.1.
70+
71+ -- Timo Jyrinki <timo-jyrinki@ubuntu.com> Wed, 11 Mar 2015 10:27:23 +0200
72+
1unity8 (8.02+15.04.20150302-0ubuntu1) vivid; urgency=medium
73unity8 (8.02+15.04.20150302-0ubuntu1) vivid; urgency=medium
2
74
3 [ Albert Astals ]
75 [ Albert Astals ]
debian/control+6−10
@@ -31,10 +31,8 @@ Build-Depends: cmake,
31 libusermetricsoutput1-dev,
31 libusermetricsoutput1-dev,
32 libxcb1-dev,
32 libxcb1-dev,
33 pkg-config,
33 pkg-config,
34− python-setuptools,
35 python3-all:any,
34 python3-all:any,
36 python3-setuptools,
35 python3-setuptools,
37− python:any (>= 2.7),
38 qml-module-qt-labs-folderlistmodel,
36 qml-module-qt-labs-folderlistmodel,
39 qml-module-qtquick-layouts,
37 qml-module-qtquick-layouts,
40 qml-module-qtquick-xmllistmodel,
38 qml-module-qtquick-xmllistmodel,
@@ -78,6 +76,9 @@ Depends: unity8-common (= ${source:Version}),
78 unity8-private (= ${binary:Version}),
76 unity8-private (= ${binary:Version}),
79 ${misc:Depends},
77 ${misc:Depends},
80 ${shlibs:Depends},
78 ${shlibs:Depends},
79+# We do call pkg-config libunity-scopes from the code
80+ pkg-config,
81+ libunity-scopes-dev,
81Description: Development tool for Unity scopes
82Description: Development tool for Unity scopes
82 This package contains the development tool for new generation Unity scopes, based
83 This package contains the development tool for new generation Unity scopes, based
83 on Unity8.
84 on Unity8.
@@ -139,20 +140,16 @@ Description: Unity 8 shell (common files)
139
140
140Package: unity8-autopilot
141Package: unity8-autopilot
141Architecture: all
142Architecture: all
143+Depends: autopilot-qt5 (>= 1.4),
142−Depends: gir1.2-glib-2.0,
144+ gir1.2-glib-2.0,
143 gir1.2-notify-0.7,
145 gir1.2-notify-0.7,
144− libautopilot-qt (>= 1.4),
145 libqt5test5,
146 libqt5test5,
146 libqt5widgets5,
147 libqt5widgets5,
147− python-autopilot,
148− python-evdev,
149− python-fixtures,
150− python-gi,
151− python-mock,
152 python3-autopilot,
148 python3-autopilot,
153 python3-evdev,
149 python3-evdev,
154 python3-fixtures,
150 python3-fixtures,
155 python3-gi,
151 python3-gi,
152+ qttestability-autopilot (>= 1.4),
156 ubuntu-ui-toolkit-autopilot,
153 ubuntu-ui-toolkit-autopilot,
157 unity-scope-click,
154 unity-scope-click,
158 unity8 (= ${source:Version}),
155 unity8 (= ${source:Version}),
@@ -160,7 +157,6 @@ Depends: gir1.2-glib-2.0,
160 url-dispatcher-tools,
157 url-dispatcher-tools,
161 ${misc:Depends},
158 ${misc:Depends},
162 ${python3:Depends},
159 ${python3:Depends},
163− ${python:Depends},
164 ${shlibs:Depends},
160 ${shlibs:Depends},
165Description: Test package for Unity 8 shell
161Description: Test package for Unity 8 shell
166 Autopilot tests for the unity8 package
162 Autopilot tests for the unity8 package
debian/rules+2−2
@@ -14,7 +14,7 @@ export CC=$(DEB_HOST_GNU_TYPE)-gcc-4.9
14export CXX=$(DEB_HOST_GNU_TYPE)-g++-4.9
14export CXX=$(DEB_HOST_GNU_TYPE)-g++-4.9
15
15
16%:
16%:
17− dh $@ --parallel --fail-missing --with python2,python3
17+ dh $@ --parallel --fail-missing --with python3
18
18
19override_dh_auto_clean:
19override_dh_auto_clean:
20 dh_auto_clean
20 dh_auto_clean
@@ -32,7 +32,7 @@ override_dh_auto_build:
32override_dh_install:
32override_dh_install:
33 # install autopilot tests
33 # install autopilot tests
34 cd tests/autopilot; \
34 cd tests/autopilot; \
35− set -ex; for python in $(shell pyversions -r) $(shell py3versions -r); do \
35+ set -ex; for python in $(shell py3versions -r); do \
36 $$python setup.py install --root=$(CURDIR)/debian/tmp --install-layout=deb; \
36 $$python setup.py install --root=$(CURDIR)/debian/tmp --install-layout=deb; \
37 done; \
37 done; \
38 cd $(CURDIR)
38 cd $(CURDIR)
plugins/AccountsService/AccountsService.cpp+1−1
@@ -152,7 +152,7 @@ void AccountsService::updateEnableIndicatorsWhileLocked()
152
152
153void AccountsService::updateBackgroundFile()
153void AccountsService::updateBackgroundFile()
154{
154{
155− auto backgroundFile = m_service->getUserProperty(m_user, "org.freedesktop.Accounts.User", "BackgroundFile").toString();
155+ QString backgroundFile = m_service->getUserProperty(m_user, "org.freedesktop.Accounts.User", "BackgroundFile").toString();
156 if (m_backgroundFile != backgroundFile) {
156 if (m_backgroundFile != backgroundFile) {
157 m_backgroundFile = backgroundFile;
157 m_backgroundFile = backgroundFile;
158 Q_EMIT backgroundFileChanged();
158 Q_EMIT backgroundFileChanged();
plugins/AccountsService/AccountsServiceDBusAdaptor.cpp+11−2
@@ -25,7 +25,8 @@
25AccountsServiceDBusAdaptor::AccountsServiceDBusAdaptor(QObject* parent)
25AccountsServiceDBusAdaptor::AccountsServiceDBusAdaptor(QObject* parent)
26 : QObject(parent),
26 : QObject(parent),
27 m_accountsManager(nullptr),
27 m_accountsManager(nullptr),
28− m_users()
28+ m_users(),
29+ m_ignoreNextChanged(false)
29{
30{
30 QDBusConnection connection = QDBusConnection::SM_BUSNAME();
31 QDBusConnection connection = QDBusConnection::SM_BUSNAME();
31 QDBusConnectionInterface *interface = connection.interface();
32 QDBusConnectionInterface *interface = connection.interface();
@@ -75,11 +76,19 @@ void AccountsServiceDBusAdaptor::propertiesChangedSlot(const QString &interface,
75 combined.removeDuplicates();
76 combined.removeDuplicates();
76
77
77 Q_EMIT propertiesChanged(getUserForPath(message().path()), interface, combined);
78 Q_EMIT propertiesChanged(getUserForPath(message().path()), interface, combined);
79+
80+ // In case a non-builtin property changes, we're getting propertiesChanged *and* changed
81+ // As the generic changed requires asking back over DBus, it's quite slow to process.
82+ // We don't want to trigger that when we know it's not a built-in property change.
83+ m_ignoreNextChanged = true;
78}
84}
79
85
80void AccountsServiceDBusAdaptor::maybeChangedSlot()
86void AccountsServiceDBusAdaptor::maybeChangedSlot()
81{
87{
88+ if (!m_ignoreNextChanged) {
82− Q_EMIT maybeChanged(getUserForPath(message().path()));
89+ Q_EMIT maybeChanged(getUserForPath(message().path()));
90+ }
91+ m_ignoreNextChanged = false;
83}
92}
84
93
85QString AccountsServiceDBusAdaptor::getUserForPath(const QString &path)
94QString AccountsServiceDBusAdaptor::getUserForPath(const QString &path)
plugins/AccountsService/AccountsServiceDBusAdaptor.h+2
@@ -61,6 +61,8 @@ private:
61
61
62 QDBusInterface *m_accountsManager;
62 QDBusInterface *m_accountsManager;
63 QMap<QString, QDBusInterface *> m_users;
63 QMap<QString, QDBusInterface *> m_users;
64+
65+ bool m_ignoreNextChanged;
64};
66};
65
67
66#endif
68#endif
plugins/Unity/Launcher/gsettings.cpp+8−1
@@ -59,12 +59,19 @@ void GSettings::setStoredApplications(const QStringList &storedApplications)
59 Q_FOREACH(const QString &entry, storedApplications) {
59 Q_FOREACH(const QString &entry, storedApplications) {
60 gSettingsList << QString("appid://%1").arg(entry);
60 gSettingsList << QString("appid://%1").arg(entry);
61 }
61 }
62+ // GSettings will emit a changed signal to ourselves. Let's cache the items
63+ // and only forward the changed signal when the list did actually change.
64+ m_cachedItems = gSettingsList;
62 m_gSettings->set("items", gSettingsList);
65 m_gSettings->set("items", gSettingsList);
63}
66}
64
67
65void GSettings::onSettingsChanged(const QString &key)
68void GSettings::onSettingsChanged(const QString &key)
66{
69{
67 if (key == "items") {
70 if (key == "items") {
71+ QStringList cachedItems = m_gSettings->get("items").toStringList();
72+ if (m_cachedItems != cachedItems) {
73+ m_cachedItems = cachedItems;
68− Q_EMIT changed();
74+ Q_EMIT changed();
75+ }
69 }
76 }
70}
77}
plugins/Unity/Launcher/gsettings.h+1
@@ -41,6 +41,7 @@ private Q_SLOTS:
41
41
42private:
42private:
43 QGSettings *m_gSettings;
43 QGSettings *m_gSettings;
44+ QStringList m_cachedItems;
44};
45};
45
46
46#endif
47#endif
plugins/Utils/windowstatestorage.cpp+22−1
@@ -18,6 +18,7 @@
18
18
19#include <QtConcurrent>
19#include <QtConcurrent>
20#include <QDebug>
20#include <QDebug>
21+#include <QFutureSynchronizer>
21#include <QSqlQuery>
22#include <QSqlQuery>
22#include <QSqlError>
23#include <QSqlError>
23#include <QSqlResult>
24#include <QSqlResult>
@@ -36,8 +37,20 @@ WindowStateStorage::WindowStateStorage(QObject *parent):
36 initdb();
37 initdb();
37}
38}
38
39
40+WindowStateStorage::~WindowStateStorage()
41+{
42+ QFutureSynchronizer<void> futureSync;
43+ for (int i = 0; i < m_asyncQueries.count(); ++i) {
44+ futureSync.addFuture(m_asyncQueries[i]);
45+ }
46+ futureSync.waitForFinished();
47+ m_db.close();
48+}
49+
39void WindowStateStorage::saveGeometry(const QString &windowId, const QRect &rect)
50void WindowStateStorage::saveGeometry(const QString &windowId, const QRect &rect)
40{
51{
52+ QMutexLocker mutexLocker(&s_mutex);
53+
41 QString queryString = QString("INSERT OR REPLACE INTO geometry (windowId, x, y, width, height) values ('%1', '%2', '%3', '%4', '%5');")
54 QString queryString = QString("INSERT OR REPLACE INTO geometry (windowId, x, y, width, height) values ('%1', '%2', '%3', '%4', '%5');")
42 .arg(windowId)
55 .arg(windowId)
43 .arg(rect.x())
56 .arg(rect.x())
@@ -45,7 +58,15 @@ void WindowStateStorage::saveGeometry(const QString &windowId, const QRect &rect
45 .arg(rect.width())
58 .arg(rect.width())
46 .arg(rect.height());
59 .arg(rect.height());
47
60
48− QtConcurrent::run(executeAsyncQuery, queryString);
61+ QFuture<void> future = QtConcurrent::run(executeAsyncQuery, queryString);
62+ m_asyncQueries.append(future);
63+
64+ QFutureWatcher<void> *futureWatcher = new QFutureWatcher<void>();
65+ futureWatcher->setFuture(future);
66+ connect(futureWatcher, &QFutureWatcher<void>::finished,
67+ this,
68+ [=](){ m_asyncQueries.removeAll(futureWatcher->future());
69+ futureWatcher->deleteLater(); });
49}
70}
50
71
51void WindowStateStorage::executeAsyncQuery(const QString &queryString)
72void WindowStateStorage::executeAsyncQuery(const QString &queryString)
plugins/Utils/windowstatestorage.h+4
@@ -17,12 +17,14 @@
17#include <QObject>
17#include <QObject>
18#include <QSqlDatabase>
18#include <QSqlDatabase>
19#include <QMutex>
19#include <QMutex>
20+#include <QFuture>
20
21
21class WindowStateStorage: public QObject
22class WindowStateStorage: public QObject
22{
23{
23 Q_OBJECT
24 Q_OBJECT
24public:
25public:
25 WindowStateStorage(QObject *parent = 0);
26 WindowStateStorage(QObject *parent = 0);
27+ virtual ~WindowStateStorage();
26
28
27 Q_INVOKABLE void saveGeometry(const QString &windowId, const QRect &rect);
29 Q_INVOKABLE void saveGeometry(const QString &windowId, const QRect &rect);
28 Q_INVOKABLE QRect getGeometry(const QString &windowId, const QRect &defaultValue);
30 Q_INVOKABLE QRect getGeometry(const QString &windowId, const QRect &defaultValue);
@@ -35,4 +37,6 @@ private:
35
37
36 // NB: This is accessed from threads. Make sure to mutex it.
38 // NB: This is accessed from threads. Make sure to mutex it.
37 QSqlDatabase m_db;
39 QSqlDatabase m_db;
40+
41+ QList< QFuture<void> > m_asyncQueries;
38};
42};
po/br.po+71−70
@@ -8,106 +8,107 @@ msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\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-02-25 08:57-0500\n"
10"POT-Creation-Date: 2015-02-25 08:57-0500\n"
11−"PO-Revision-Date: 2014-12-16 07:27+0000\n"
11+"PO-Revision-Date: 2015-03-13 13:01+0000\n"
12"Last-Translator: Fohanno Thierry <thierry.fohanno@ofis-bzh.org>\n"
12"Last-Translator: Fohanno Thierry <thierry.fohanno@ofis-bzh.org>\n"
13"Language-Team: Breton <br@li.org>\n"
13"Language-Team: Breton <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-03-04 05:56+0000\n"
18+"X-Launchpad-Export-Date: 2015-03-14 05:32+0000\n"
19−"X-Generator: Launchpad (build 17361)\n"
19+"X-Generator: Launchpad (build 17389)\n"
20
20
21−#: plugins/LightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
23msgstr "Ger-tremen : "
23msgstr "Ger-tremen : "
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:91
27msgid "Pin shortcut"
27msgid "Pin shortcut"
28msgstr "Spilhennañ ar verradenn"
28msgstr "Spilhennañ ar verradenn"
29
29
30−#: plugins/Unity/Launcher/launcheritem.cpp:100
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
31msgid "Unpin shortcut"
31msgid "Unpin shortcut"
32msgstr "Dispilhennañ ar verradenn"
32msgstr "Dispilhennañ ar verradenn"
33
33
34−#: qml/Components/DelayedLockscreen.qml:49
34+#: qml/Components/DelayedLockscreen.qml:47
35msgid "Device Locked"
35msgid "Device Locked"
36msgstr "Benveg prennet"
36msgstr "Benveg prennet"
37
37
38−#: qml/Components/DelayedLockscreen.qml:64
38+#: qml/Components/DelayedLockscreen.qml:62
39msgid "You have been locked out due to too many failed passphrase attempts."
39msgid "You have been locked out due to too many failed passphrase attempts."
40msgstr ""
40msgstr ""
41"Prennet eo bet ho penveg abalamour da re a daolioù-esae c'hwitet evit merkañ "
41"Prennet eo bet ho penveg abalamour da re a daolioù-esae c'hwitet evit merkañ "
42"ho frazenn-dremen."
42"ho frazenn-dremen."
43
43
44−#: qml/Components/DelayedLockscreen.qml:65
44+#: qml/Components/DelayedLockscreen.qml:63
45msgid "You have been locked out due to too many failed passcode attempts."
45msgid "You have been locked out due to too many failed passcode attempts."
46msgstr ""
46msgstr ""
47"Prennet eo bet ho penveg abalamour da re a daolioù-esae evit merkañ ho kod-"
47"Prennet eo bet ho penveg abalamour da re a daolioù-esae evit merkañ ho kod-"
48"tremen."
48"tremen."
49
49
50−#: qml/Components/DelayedLockscreen.qml:74
50+#: qml/Components/DelayedLockscreen.qml:72
51#, qt-format
51#, qt-format
52msgid "Please wait %1 minute and then try again…"
52msgid "Please wait %1 minute and then try again…"
53msgid_plural "Please wait %1 minutes and then try again…"
53msgid_plural "Please wait %1 minutes and then try again…"
54msgstr[0] "Gortozit %1 vunutenn, mar plij, hag esaeit en-dro..."
54msgstr[0] "Gortozit %1 vunutenn, mar plij, hag esaeit en-dro..."
55msgstr[1] "Gortozit %1 a vunutoù, mar plij, hag esaeit en-dro..."
55msgstr[1] "Gortozit %1 a vunutoù, mar plij, hag esaeit en-dro..."
56
56
57−#: qml/Components/Dialogs.qml:87
57+#: qml/Components/Dialogs.qml:74
58msgid "Log out"
58msgid "Log out"
59msgstr "Digevreañ"
59msgstr "Digevreañ"
60
60
61−#: qml/Components/Dialogs.qml:88
61+#: qml/Components/Dialogs.qml:75
62msgid "Are you sure you want to log out?"
62msgid "Are you sure you want to log out?"
63msgstr "Ha sur oc'h e fell deoc'h digevreañ ?"
63msgstr "Ha sur oc'h e fell deoc'h digevreañ ?"
64
64
65#: qml/Components/Dialogs.qml:90
65#: qml/Components/Dialogs.qml:90
66msgid "Lock"
66msgid "Lock"
67−msgstr ""
67+msgstr "Prennañ"
68
68
69#: qml/Components/Dialogs.qml:97
69#: qml/Components/Dialogs.qml:97
70msgid "Log Out"
70msgid "Log Out"
71−msgstr ""
71+msgstr "Digevreañ"
72
72
73−#: qml/Components/Dialogs.qml:104 qml/Components/Dialogs.qml:135
73+#: qml/Components/Dialogs.qml:171
74−#: qml/Components/Dialogs.qml:191
75msgid "Cancel"
74msgid "Cancel"
76msgstr "Nullañ"
75msgstr "Nullañ"
77
76
78−#: qml/Components/Dialogs.qml:116
77+#: qml/Components/Dialogs.qml:98
79msgid "Shut down"
78msgid "Shut down"
80msgstr "Lazhañ ar benveg"
79msgstr "Lazhañ ar benveg"
81
80
82−#: qml/Components/Dialogs.qml:117
81+#: qml/Components/Dialogs.qml:99
83msgid "Are you sure you want to shut down?"
82msgid "Are you sure you want to shut down?"
84msgstr "Ha sur oc'h e fell deoc'h lazhañ ar benveg ?"
83msgstr "Ha sur oc'h e fell deoc'h lazhañ ar benveg ?"
85
84
86−#: qml/Components/Dialogs.qml:119 qml/Components/Dialogs.qml:147
85+#: qml/Components/Dialogs.qml:123
87msgid "Reboot"
86msgid "Reboot"
88msgstr "Adloc'hañ"
87msgstr "Adloc'hañ"
89
88
90#: qml/Components/Dialogs.qml:127
89#: qml/Components/Dialogs.qml:127
91msgid "Shutdown"
90msgid "Shutdown"
92−msgstr ""
91+msgstr "Lazhañ"
93
92
94−#: qml/Components/Dialogs.qml:148
93+#: qml/Components/Dialogs.qml:124
95msgid "Are you sure you want to reboot?"
94msgid "Are you sure you want to reboot?"
96msgstr "Ha sur oc'h e fell deoc'h adloc'hañ ?"
95msgstr "Ha sur oc'h e fell deoc'h adloc'hañ ?"
97
96
98−#: qml/Components/Dialogs.qml:150
97+#: qml/Components/Dialogs.qml:77 qml/Components/Dialogs.qml:101
98+#: qml/Components/Dialogs.qml:126
99msgid "No"
99msgid "No"
100msgstr "N'on ket"
100msgstr "N'on ket"
101
101
102−#: qml/Components/Dialogs.qml:156
102+#: qml/Components/Dialogs.qml:84 qml/Components/Dialogs.qml:108
103+#: qml/Components/Dialogs.qml:133
103msgid "Yes"
104msgid "Yes"
104msgstr "Ya"
105msgstr "Ya"
105
106
106−#: qml/Components/Dialogs.qml:170
107+#: qml/Components/Dialogs.qml:148
107msgid "Power"
108msgid "Power"
108msgstr "Tredan"
109msgstr "Tredan"
109
110
110−#: qml/Components/Dialogs.qml:171
111+#: qml/Components/Dialogs.qml:149
111msgid ""
112msgid ""
112"Are you sure you would like\n"
113"Are you sure you would like\n"
113"to power off?"
114"to power off?"
@@ -115,52 +116,52 @@ msgstr ""
115"Ha sur oc'h e fell deoc'h\n"
116"Ha sur oc'h e fell deoc'h\n"
116"troc'hañ an tredan ?"
117"troc'hañ an tredan ?"
117
118
118−#: qml/Components/Dialogs.qml:173
119+#: qml/Components/Dialogs.qml:151
119msgid "Power off"
120msgid "Power off"
120msgstr "Lazhañ"
121msgstr "Lazhañ"
121
122
122−#: qml/Components/Dialogs.qml:182
123+#: qml/Components/Dialogs.qml:161
123msgid "Restart"
124msgid "Restart"
124msgstr "Adloc'hañ"
125msgstr "Adloc'hañ"
125
126
126−#: qml/Components/Lockscreen.qml:238
127+#: qml/Components/Lockscreen.qml:223
127msgid "Return to Call"
128msgid "Return to Call"
128msgstr "Distreiñ d'ar bellgomzadenn"
129msgstr "Distreiñ d'ar bellgomzadenn"
129
130
130−#: qml/Components/Lockscreen.qml:238
131+#: qml/Components/Lockscreen.qml:223
131msgid "Emergency Call"
132msgid "Emergency Call"
132msgstr "Pellgomzadenn vallus"
133msgstr "Pellgomzadenn vallus"
133
134
134−#: qml/Components/Lockscreen.qml:270
135+#: qml/Components/Lockscreen.qml:255
135msgid "OK"
136msgid "OK"
136msgstr "Mat eo"
137msgstr "Mat eo"
137
138
138−#: qml/Dash/GenericScopeView.qml:528 qml/Dash/GenericScopeView.qml:686
139+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
139msgid "See less"
140msgid "See less"
140msgstr "Gwelet nebeutoc'h"
141msgstr "Gwelet nebeutoc'h"
141
142
142−#: qml/Dash/GenericScopeView.qml:528
143+#: qml/Dash/GenericScopeView.qml:434
143msgid "See all"
144msgid "See all"
144msgstr "Gwelet pep tra"
145msgstr "Gwelet pep tra"
145
146
146−#: qml/Dash/GenericScopeView.qml:590 qml/Dash/PageHeader.qml:276
147+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:268
147#: qml/Panel/SearchIndicator.qml:27
148#: qml/Panel/SearchIndicator.qml:27
148msgid "Search"
149msgid "Search"
149msgstr "Klask"
150msgstr "Klask"
150
151
151−#: qml/Dash/PageHeader.qml:269
152+#: qml/Dash/PageHeader.qml:261
152msgid "Store"
153msgid "Store"
153msgstr "Enrollañ"
154msgstr "Enrollañ"
154
155
155−#: qml/Dash/PageHeader.qml:286
156+#: qml/Dash/PageHeader.qml:278
156msgid "Settings"
157msgid "Settings"
157msgstr "Arventennoù"
158msgstr "Arventennoù"
158
159
159−#: qml/Dash/PageHeader.qml:293
160+#: qml/Dash/PageHeader.qml:285
160msgid "Remove from Favorites"
161msgid "Remove from Favorites"
161msgstr "Lemel eus ar sinedoù"
162msgstr "Lemel eus ar sinedoù"
162
163
163−#: qml/Dash/PageHeader.qml:293
164+#: qml/Dash/PageHeader.qml:285
164msgid "Add to Favorites"
165msgid "Add to Favorites"
165msgstr "Ouzhpennañ d'ar sinedoù"
166msgstr "Ouzhpennañ d'ar sinedoù"
166
167
@@ -194,45 +195,45 @@ msgstr "Lezel da vont evit freskaat..."
194
195
195#: qml/Dash/ScopeSettings/ScopeSettingBoolean.qml:43
196#: qml/Dash/ScopeSettings/ScopeSettingBoolean.qml:43
196msgid "Enable location data"
197msgid "Enable location data"
197−msgstr ""
198+msgstr "Gweredekaat ar roadennoù lec'hiañ"
198
199
199−#: qml/Dash/ScopesList.qml:66
200+#: qml/Dash/ScopesList.qml:63
200msgid "Manage"
201msgid "Manage"
201msgstr "Merañ"
202msgstr "Merañ"
202
203
203−#: qml/Dash/ScopesList.qml:112
204+#: qml/Dash/ScopesList.qml:107
204msgid "Home"
205msgid "Home"
205msgstr "Er gêr"
206msgstr "Er gêr"
206
207
207−#: qml/Dash/ScopesList.qml:113
208+#: qml/Dash/ScopesList.qml:108
208msgid "Also installed"
209msgid "Also installed"
209msgstr "Staliet ivez"
210msgstr "Staliet ivez"
210
211
211−#: qml/Greeter/CoverPage.qml:107
212+#: qml/Greeter/Greeter.qml:174
212msgid "Unlock"
213msgid "Unlock"
213msgstr "Dibrennañ"
214msgstr "Dibrennañ"
214
215
215#: qml/Greeter/LoginList.qml:236
216#: qml/Greeter/LoginList.qml:236
216msgid "Retry"
217msgid "Retry"
217−msgstr ""
218+msgstr "Esaeañ en-dro"
218
219
219#: qml/Greeter/LoginList.qml:237
220#: qml/Greeter/LoginList.qml:237
220msgid "Tap to unlock"
221msgid "Tap to unlock"
221−msgstr ""
222+msgstr "Pouezañ evit dibrennañ"
222
223
223−#: qml/Greeter/NarrowView.qml:53 qml/Wizard/Pages/passwd-confirm.qml:53
224+#: qml/Shell.qml:444
224msgid "Sorry, incorrect passphrase."
225msgid "Sorry, incorrect passphrase."
225msgstr "Siwazh, frazenn-dremen direizh"
226msgstr "Siwazh, frazenn-dremen direizh"
226
227
227−#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:54
228+#: qml/Shell.qml:445
228msgid "Sorry, incorrect passcode."
229msgid "Sorry, incorrect passcode."
229msgstr "Siwazh, kod-tremen direizh"
230msgstr "Siwazh, kod-tremen direizh"
230
231
231−#: qml/Greeter/NarrowView.qml:55
232+#: qml/Shell.qml:446
232msgid "This will be your last attempt."
233msgid "This will be your last attempt."
233msgstr "Ho taol-esae diwezhañ e vo."
234msgstr "Ho taol-esae diwezhañ e vo."
234
235
235−#: qml/Greeter/NarrowView.qml:57
236+#: qml/Shell.qml:448
236msgid ""
237msgid ""
237"If passphrase is entered incorrectly, your phone will conduct a factory "
238"If passphrase is entered incorrectly, your phone will conduct a factory "
238"reset and all personal data will be deleted."
239"reset and all personal data will be deleted."
@@ -240,7 +241,7 @@ msgstr ""
240"Ma vez ebarzhet ur frazenn-dremen direizh, e vo adderaouekaet ho pellgomzer "
241"Ma vez ebarzhet ur frazenn-dremen direizh, e vo adderaouekaet ho pellgomzer "
241"gant arventennoù al labouradeg hag e vo diverket an holl roadennoù personel"
242"gant arventennoù al labouradeg hag e vo diverket an holl roadennoù personel"
242
243
243−#: qml/Greeter/NarrowView.qml:58
244+#: qml/Shell.qml:449
244msgid ""
245msgid ""
245"If passcode is entered incorrectly, your phone will conduct a factory reset "
246"If passcode is entered incorrectly, your phone will conduct a factory reset "
246"and all personal data will be deleted."
247"and all personal data will be deleted."
@@ -248,33 +249,33 @@ msgstr ""
248"Ma vez ebarzhet ur c'hod-tremen direizh, e vo adderaouekaet ho pellgomzer "
249"Ma vez ebarzhet ur c'hod-tremen direizh, e vo adderaouekaet ho pellgomzer "
249"gant arventennoù al labouradeg hag e vo diverket an holl roadennoù personel."
250"gant arventennoù al labouradeg hag e vo diverket an holl roadennoù personel."
250
251
251−#: qml/Greeter/NarrowView.qml:115
252+#: qml/Shell.qml:402
252#, qt-format
253#, qt-format
253msgid "Enter %1"
254msgid "Enter %1"
254msgstr "Merkañ %1"
255msgstr "Merkañ %1"
255
256
256−#: qml/Greeter/NarrowView.qml:116 qml/Wizard/Pages/passwd-set.qml:60
257+#: qml/Shell.qml:394
257msgid "Enter passphrase"
258msgid "Enter passphrase"
258msgstr "Merkañ ar frazenn-dremen"
259msgstr "Merkañ ar frazenn-dremen"
259
260
260−#: qml/Greeter/NarrowView.qml:117
261+#: qml/Shell.qml:398
261msgid "Enter passcode"
262msgid "Enter passcode"
262msgstr "Merkañ ar c'hod-tremen"
263msgstr "Merkañ ar c'hod-tremen"
263
264
264−#: qml/Greeter/NarrowView.qml:118
265+#: qml/Shell.qml:403
265#, qt-format
266#, qt-format
266msgid "Sorry, incorrect %1"
267msgid "Sorry, incorrect %1"
267msgstr "Siwazh, %1 direizh"
268msgstr "Siwazh, %1 direizh"
268
269
269−#: qml/Greeter/NarrowView.qml:119
270+#: qml/Shell.qml:395
270msgid "Sorry, incorrect passphrase"
271msgid "Sorry, incorrect passphrase"
271msgstr "Siwazh, frazenn-dremen direizh"
272msgstr "Siwazh, frazenn-dremen direizh"
272
273
273−#: qml/Greeter/NarrowView.qml:120
274+#: qml/Shell.qml:396
274msgid "Please re-enter"
275msgid "Please re-enter"
275msgstr "Adverkañ, mar plij"
276msgstr "Adverkañ, mar plij"
276
277
277−#: qml/Greeter/NarrowView.qml:121
278+#: qml/Shell.qml:399
278msgid "Sorry, incorrect passcode"
279msgid "Sorry, incorrect passcode"
279msgstr "Digarezit, kod-tremen direizh"
280msgstr "Digarezit, kod-tremen direizh"
280
281
@@ -320,7 +321,7 @@ msgstr "C'hwitet, touchit evit adkregiñ"
320
321
321#: qml/Panel/Indicators/MessageMenuItemFactory.qml:149
322#: qml/Panel/Indicators/MessageMenuItemFactory.qml:149
322msgid "Reply"
323msgid "Reply"
323−msgstr ""
324+msgstr "Respont"
324
325
325#: qml/Panel/Indicators/ModemInfoItem.qml:105
326#: qml/Panel/Indicators/ModemInfoItem.qml:105
326msgid "Unlock SIM"
327msgid "Unlock SIM"
@@ -332,55 +333,55 @@ msgstr "O kantren"
332
333
333#: qml/Tutorial/TutorialBottomFinish.qml:24
334#: qml/Tutorial/TutorialBottomFinish.qml:24
334msgid "This action does different things for different apps"
335msgid "This action does different things for different apps"
335−msgstr ""
336+msgstr "An ober-mañ a ra meur a dra evit meur a arload"
336
337
337#: qml/Tutorial/TutorialBottomFinish.qml:25
338#: qml/Tutorial/TutorialBottomFinish.qml:25
338msgid "Tap here to finish."
339msgid "Tap here to finish."
339−msgstr ""
340+msgstr "Pouezañ amañ evit echuiñ."
340
341
341#: qml/Tutorial/TutorialBottom.qml:28
342#: qml/Tutorial/TutorialBottom.qml:28
342msgid "Open special menus"
343msgid "Open special menus"
343−msgstr ""
344+msgstr "Digeriñ al lañserioù ispisial"
344
345
345#: qml/Tutorial/TutorialBottom.qml:29
346#: qml/Tutorial/TutorialBottom.qml:29
346msgid "Swipe up from the bottom edge."
347msgid "Swipe up from the bottom edge."
347−msgstr ""
348+msgstr "Riklit war-du an nec'h adalek an traoñ"
348
349
349#: qml/Tutorial/TutorialLeftFinish.qml:24
350#: qml/Tutorial/TutorialLeftFinish.qml:24
350msgid "These are the shortcuts to favorite apps"
351msgid "These are the shortcuts to favorite apps"
351−msgstr ""
352+msgstr "Berradennoù war-du hoc'h arloadoù gwellañ-deuet eo ar re-mañ"
352
353
353#: qml/Tutorial/TutorialLeftFinish.qml:25 qml/Tutorial/TutorialRight.qml:144
354#: qml/Tutorial/TutorialLeftFinish.qml:25 qml/Tutorial/TutorialRight.qml:144
354msgid "Tap here to continue."
355msgid "Tap here to continue."
355−msgstr ""
356+msgstr "Pouzañ amañ evit kenderc'hel"
356
357
357#: qml/Tutorial/TutorialLeft.qml:26
358#: qml/Tutorial/TutorialLeft.qml:26
358msgid "Open the launcher"
359msgid "Open the launcher"
359−msgstr ""
360+msgstr "Digeriñ al lañser"
360
361
361#: qml/Tutorial/TutorialLeft.qml:27
362#: qml/Tutorial/TutorialLeft.qml:27
362msgid "Short swipe from the left edge."
363msgid "Short swipe from the left edge."
363−msgstr ""
364+msgstr "Riklik dousik adalek ar bord kleiz."
364
365
365#: qml/Tutorial/TutorialPage.qml:178
366#: qml/Tutorial/TutorialPage.qml:178
366msgid "You almost got it!"
367msgid "You almost got it!"
367−msgstr ""
368+msgstr "Deuet eo ganeoc'h pe dost ?"
368
369
369#: qml/Tutorial/TutorialPage.qml:195
370#: qml/Tutorial/TutorialPage.qml:195
370msgid "Try again."
371msgid "Try again."
371−msgstr ""
372+msgstr "Esaeit en-dro."
372
373
373#: qml/Tutorial/TutorialRight.qml:31
374#: qml/Tutorial/TutorialRight.qml:31
374msgid "To view open apps"
375msgid "To view open apps"
375−msgstr ""
376+msgstr "Evit gwelet an arloadoù digor"
376
377
377#: qml/Tutorial/TutorialRight.qml:32
378#: qml/Tutorial/TutorialRight.qml:32
378msgid "Long swipe from the right edge."
379msgid "Long swipe from the right edge."
379−msgstr ""
380+msgstr "Riklit pell adalek ar bord dehoù."
380
381
381#: qml/Tutorial/TutorialRight.qml:122
382#: qml/Tutorial/TutorialRight.qml:122
382msgid "View all your running tasks."
383msgid "View all your running tasks."
383−msgstr ""
384+msgstr "Gwelet an holl drevelloù a ya en-dro."
384
385
385#: qml/Wizard/Page.qml:89
386#: qml/Wizard/Page.qml:89
386msgid "Back"
387msgid "Back"
po/el.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-02-25 08:57-0500\n"
10"POT-Creation-Date: 2015-02-25 08:57-0500\n"
11−"PO-Revision-Date: 2015-03-08 09:28+0000\n"
11+"PO-Revision-Date: 2015-03-15 22:25+0000\n"
12−"Last-Translator: Aggelos Arnaoutis <angelosarn@hotmail.com>\n"
12+"Last-Translator: Simos Xenitellis <Unknown>\n"
13"Language-Team: Greek <el@li.org>\n"
13"Language-Team: Greek <el@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-03-09 06:00+0000\n"
18+"X-Launchpad-Export-Date: 2015-03-16 06:02+0000\n"
19−"X-Generator: Launchpad (build 17383)\n"
19+"X-Generator: Launchpad (build 17389)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
@@ -88,7 +88,7 @@ msgstr "Επανεκκίνηση"
88
88
89#: qml/Components/Dialogs.qml:127
89#: qml/Components/Dialogs.qml:127
90msgid "Shutdown"
90msgid "Shutdown"
91−msgstr ""
91+msgstr "Τερματισμός"
92
92
93#: qml/Components/Dialogs.qml:124
93#: qml/Components/Dialogs.qml:124
94msgid "Are you sure you want to reboot?"
94msgid "Are you sure you want to reboot?"
@@ -215,11 +215,11 @@ msgstr "Ξεκλείδωμα"
215
215
216#: qml/Greeter/LoginList.qml:236
216#: qml/Greeter/LoginList.qml:236
217msgid "Retry"
217msgid "Retry"
218−msgstr ""
218+msgstr "Επανάληψη"
219
219
220#: qml/Greeter/LoginList.qml:237
220#: qml/Greeter/LoginList.qml:237
221msgid "Tap to unlock"
221msgid "Tap to unlock"
222−msgstr ""
222+msgstr "Ακουμπήστε για να ξεκλειδώσετε"
223
223
224#: qml/Shell.qml:444
224#: qml/Shell.qml:444
225msgid "Sorry, incorrect passphrase."
225msgid "Sorry, incorrect passphrase."
@@ -348,7 +348,7 @@ msgstr "Άνοιγμα ειδικών μενού"
348
348
349#: qml/Tutorial/TutorialBottom.qml:29
349#: qml/Tutorial/TutorialBottom.qml:29
350msgid "Swipe up from the bottom edge."
350msgid "Swipe up from the bottom edge."
351−msgstr ""
351+msgstr "Σύρετε από την κάτω άκρη προς τα πάνω."
352
352
353#: qml/Tutorial/TutorialLeftFinish.qml:24
353#: qml/Tutorial/TutorialLeftFinish.qml:24
354msgid "These are the shortcuts to favorite apps"
354msgid "These are the shortcuts to favorite apps"
@@ -364,15 +364,15 @@ msgstr "Άνοιγμα του εκκινητή"
364
364
365#: qml/Tutorial/TutorialLeft.qml:27
365#: qml/Tutorial/TutorialLeft.qml:27
366msgid "Short swipe from the left edge."
366msgid "Short swipe from the left edge."
367−msgstr ""
367+msgstr "Σύρετε ελάχιστα από την αριστερή άκρη."
368
368
369#: qml/Tutorial/TutorialPage.qml:178
369#: qml/Tutorial/TutorialPage.qml:178
370msgid "You almost got it!"
370msgid "You almost got it!"
371−msgstr ""
371+msgstr "Σχεδόν το είχατε!"
372
372
373#: qml/Tutorial/TutorialPage.qml:195
373#: qml/Tutorial/TutorialPage.qml:195
374msgid "Try again."
374msgid "Try again."
375−msgstr ""
375+msgstr "Δοκιμάστε πάλι."
376
376
377#: qml/Tutorial/TutorialRight.qml:31
377#: qml/Tutorial/TutorialRight.qml:31
378msgid "To view open apps"
378msgid "To view open apps"
@@ -380,7 +380,7 @@ msgstr "Για να δείτε τις ανοιχτές εφαρμογές"
380
380
381#: qml/Tutorial/TutorialRight.qml:32
381#: qml/Tutorial/TutorialRight.qml:32
382msgid "Long swipe from the right edge."
382msgid "Long swipe from the right edge."
383−msgstr ""
383+msgstr "Σύρετε παρατεταμένα από την δεξιά άκρη."
384
384
385#: qml/Tutorial/TutorialRight.qml:122
385#: qml/Tutorial/TutorialRight.qml:122
386msgid "View all your running tasks."
386msgid "View all your running tasks."
po/gd.po+55−54
@@ -8,48 +8,48 @@ msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\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-02-25 08:57-0500\n"
10"POT-Creation-Date: 2015-02-25 08:57-0500\n"
11−"PO-Revision-Date: 2015-02-27 01:01+0000\n"
11+"PO-Revision-Date: 2015-03-12 17:56+0000\n"
12−"Last-Translator: Akerbeltz <fios@akerbeltz.org>\n"
12+"Last-Translator: GunChleoc <Unknown>\n"
13"Language-Team: Fòram na Gàidhlig\n"
13"Language-Team: Fòram na Gàidhlig\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=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-03-04 05:56+0000\n"
19+"X-Launchpad-Export-Date: 2015-03-13 05:34+0000\n"
20−"X-Generator: Launchpad (build 17361)\n"
20+"X-Generator: Launchpad (build 17389)\n"
21"Language: gd\n"
21"Language: gd\n"
22
22
23−#: plugins/LightDM/Greeter.cpp:112
23+#: plugins/LightDM/Greeter.cpp:130
24msgid "Password: "
24msgid "Password: "
25msgstr "Facal-faire: "
25msgstr "Facal-faire: "
26
26
27#: plugins/Unity/Launcher/launcheritem.cpp:45
27#: plugins/Unity/Launcher/launcheritem.cpp:45
28−#: plugins/Unity/Launcher/launcheritem.cpp:100
28+#: plugins/Unity/Launcher/launcheritem.cpp:91
29msgid "Pin shortcut"
29msgid "Pin shortcut"
30msgstr "Prìnich ath-ghoirid"
30msgstr "Prìnich ath-ghoirid"
31
31
32−#: plugins/Unity/Launcher/launcheritem.cpp:100
32+#: plugins/Unity/Launcher/launcheritem.cpp:91
33msgid "Unpin shortcut"
33msgid "Unpin shortcut"
34msgstr "Neo-phrìnich an ath-ghoirid"
34msgstr "Neo-phrìnich an ath-ghoirid"
35
35
36−#: qml/Components/DelayedLockscreen.qml:49
36+#: qml/Components/DelayedLockscreen.qml:47
37msgid "Device Locked"
37msgid "Device Locked"
38msgstr "Tha glas air an uidheam"
38msgstr "Tha glas air an uidheam"
39
39
40−#: qml/Components/DelayedLockscreen.qml:64
40+#: qml/Components/DelayedLockscreen.qml:62
41msgid "You have been locked out due to too many failed passphrase attempts."
41msgid "You have been locked out due to too many failed passphrase attempts."
42msgstr ""
42msgstr ""
43"Chaidh do glasadh a-mach às an uidheam on a chuir thu abairt-fhaire chearr a-"
43"Chaidh do glasadh a-mach às an uidheam on a chuir thu abairt-fhaire chearr a-"
44"steach cus tursan."
44"steach cus tursan."
45
45
46−#: qml/Components/DelayedLockscreen.qml:65
46+#: qml/Components/DelayedLockscreen.qml:63
47msgid "You have been locked out due to too many failed passcode attempts."
47msgid "You have been locked out due to too many failed passcode attempts."
48msgstr ""
48msgstr ""
49"Chaidh do glasadh a-mach às an uidheam on a chuir thu còd-faire cearr a-"
49"Chaidh do glasadh a-mach às an uidheam on a chuir thu còd-faire cearr a-"
50"steach cus tursan."
50"steach cus tursan."
51
51
52−#: qml/Components/DelayedLockscreen.qml:74
52+#: qml/Components/DelayedLockscreen.qml:72
53#, qt-format
53#, qt-format
54msgid "Please wait %1 minute and then try again…"
54msgid "Please wait %1 minute and then try again…"
55msgid_plural "Please wait %1 minutes and then try again…"
55msgid_plural "Please wait %1 minutes and then try again…"
@@ -58,11 +58,11 @@ msgstr[1] "Fuirich ort %1 dhiog 's feuch ris a-rithist an uairsin…"
58msgstr[2] "Fuirich ort %1 diogan 's feuch ris a-rithist an uairsin…"
58msgstr[2] "Fuirich ort %1 diogan 's feuch ris a-rithist an uairsin…"
59msgstr[3] "Fuirich ort %1 diog 's feuch ris a-rithist an uairsin…"
59msgstr[3] "Fuirich ort %1 diog 's feuch ris a-rithist an uairsin…"
60
60
61−#: qml/Components/Dialogs.qml:87
61+#: qml/Components/Dialogs.qml:74
62msgid "Log out"
62msgid "Log out"
63msgstr "Clàraich a-mach"
63msgstr "Clàraich a-mach"
64
64
65−#: qml/Components/Dialogs.qml:88
65+#: qml/Components/Dialogs.qml:75
66msgid "Are you sure you want to log out?"
66msgid "Are you sure you want to log out?"
67msgstr "A bheil thu cinnteach gu bheil thu airson clàradh a-mach?"
67msgstr "A bheil thu cinnteach gu bheil thu airson clàradh a-mach?"
68
68
@@ -72,22 +72,21 @@ msgstr ""
72
72
73#: qml/Components/Dialogs.qml:97
73#: qml/Components/Dialogs.qml:97
74msgid "Log Out"
74msgid "Log Out"
75−msgstr ""
75+msgstr "Clàraich a-mach"
76
76
77−#: qml/Components/Dialogs.qml:104 qml/Components/Dialogs.qml:135
77+#: qml/Components/Dialogs.qml:171
78−#: qml/Components/Dialogs.qml:191
79msgid "Cancel"
78msgid "Cancel"
80msgstr "Sguir dheth"
79msgstr "Sguir dheth"
81
80
82−#: qml/Components/Dialogs.qml:116
81+#: qml/Components/Dialogs.qml:98
83msgid "Shut down"
82msgid "Shut down"
84msgstr "Dùin sìos"
83msgstr "Dùin sìos"
85
84
86−#: qml/Components/Dialogs.qml:117
85+#: qml/Components/Dialogs.qml:99
87msgid "Are you sure you want to shut down?"
86msgid "Are you sure you want to shut down?"
88msgstr "A bheil thu cinnteach gu bheil thu airson a dhùnadh sìos?"
87msgstr "A bheil thu cinnteach gu bheil thu airson a dhùnadh sìos?"
89
88
90−#: qml/Components/Dialogs.qml:119 qml/Components/Dialogs.qml:147
89+#: qml/Components/Dialogs.qml:123
91msgid "Reboot"
90msgid "Reboot"
92msgstr "Ath-thòisich an siostam"
91msgstr "Ath-thòisich an siostam"
93
92
@@ -95,23 +94,25 @@ msgstr "Ath-thòisich an siostam"
95msgid "Shutdown"
94msgid "Shutdown"
96msgstr ""
95msgstr ""
97
96
98−#: qml/Components/Dialogs.qml:148
97+#: qml/Components/Dialogs.qml:124
99msgid "Are you sure you want to reboot?"
98msgid "Are you sure you want to reboot?"
100msgstr "A bheil thu cinnteach gu bheil thu airson tòiseachadh às ùr?"
99msgstr "A bheil thu cinnteach gu bheil thu airson tòiseachadh às ùr?"
101
100
102−#: qml/Components/Dialogs.qml:150
101+#: qml/Components/Dialogs.qml:77 qml/Components/Dialogs.qml:101
102+#: qml/Components/Dialogs.qml:126
103msgid "No"
103msgid "No"
104msgstr "Chan eil"
104msgstr "Chan eil"
105
105
106−#: qml/Components/Dialogs.qml:156
106+#: qml/Components/Dialogs.qml:84 qml/Components/Dialogs.qml:108
107+#: qml/Components/Dialogs.qml:133
107msgid "Yes"
108msgid "Yes"
108msgstr "Tha"
109msgstr "Tha"
109
110
110−#: qml/Components/Dialogs.qml:170
111+#: qml/Components/Dialogs.qml:148
111msgid "Power"
112msgid "Power"
112msgstr "Cumhachd"
113msgstr "Cumhachd"
113
114
114−#: qml/Components/Dialogs.qml:171
115+#: qml/Components/Dialogs.qml:149
115msgid ""
116msgid ""
116"Are you sure you would like\n"
117"Are you sure you would like\n"
117"to power off?"
118"to power off?"
@@ -119,52 +120,52 @@ msgstr ""
119"A bheil thu cinnteach gu bheil thu\n"
120"A bheil thu cinnteach gu bheil thu\n"
120"airson a' chumhachd a chur dheth?"
121"airson a' chumhachd a chur dheth?"
121
122
122−#: qml/Components/Dialogs.qml:173
123+#: qml/Components/Dialogs.qml:151
123msgid "Power off"
124msgid "Power off"
124msgstr "Cuir a' chumhachd dheth"
125msgstr "Cuir a' chumhachd dheth"
125
126
126−#: qml/Components/Dialogs.qml:182
127+#: qml/Components/Dialogs.qml:161
127msgid "Restart"
128msgid "Restart"
128msgstr "Ath-thòisich"
129msgstr "Ath-thòisich"
129
130
130−#: qml/Components/Lockscreen.qml:238
131+#: qml/Components/Lockscreen.qml:223
131msgid "Return to Call"
132msgid "Return to Call"
132msgstr "Till dhan ghairm"
133msgstr "Till dhan ghairm"
133
134
134−#: qml/Components/Lockscreen.qml:238
135+#: qml/Components/Lockscreen.qml:223
135msgid "Emergency Call"
136msgid "Emergency Call"
136msgstr "Gairm èiginn"
137msgstr "Gairm èiginn"
137
138
138−#: qml/Components/Lockscreen.qml:270
139+#: qml/Components/Lockscreen.qml:255
139msgid "OK"
140msgid "OK"
140msgstr "Ceart ma-thà"
141msgstr "Ceart ma-thà"
141
142
142−#: qml/Dash/GenericScopeView.qml:528 qml/Dash/GenericScopeView.qml:686
143+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
143msgid "See less"
144msgid "See less"
144msgstr "Seall nas lugha"
145msgstr "Seall nas lugha"
145
146
146−#: qml/Dash/GenericScopeView.qml:528
147+#: qml/Dash/GenericScopeView.qml:434
147msgid "See all"
148msgid "See all"
148msgstr "Seall na h-uile"
149msgstr "Seall na h-uile"
149
150
150−#: qml/Dash/GenericScopeView.qml:590 qml/Dash/PageHeader.qml:276
151+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:268
151#: qml/Panel/SearchIndicator.qml:27
152#: qml/Panel/SearchIndicator.qml:27
152msgid "Search"
153msgid "Search"
153msgstr "Lorg"
154msgstr "Lorg"
154
155
155−#: qml/Dash/PageHeader.qml:269
156+#: qml/Dash/PageHeader.qml:261
156msgid "Store"
157msgid "Store"
157msgstr "Am bùth"
158msgstr "Am bùth"
158
159
159−#: qml/Dash/PageHeader.qml:286
160+#: qml/Dash/PageHeader.qml:278
160msgid "Settings"
161msgid "Settings"
161msgstr "Roghainnean"
162msgstr "Roghainnean"
162
163
163−#: qml/Dash/PageHeader.qml:293
164+#: qml/Dash/PageHeader.qml:285
164msgid "Remove from Favorites"
165msgid "Remove from Favorites"
165msgstr "Thoir air falbh o na h-annsachdan"
166msgstr "Thoir air falbh o na h-annsachdan"
166
167
167−#: qml/Dash/PageHeader.qml:293
168+#: qml/Dash/PageHeader.qml:285
168msgid "Add to Favorites"
169msgid "Add to Favorites"
169msgstr "Cuir ris na h-annsachdan"
170msgstr "Cuir ris na h-annsachdan"
170
171
@@ -200,43 +201,43 @@ msgstr "Leig às airson ath-nuadhachadh…"
200msgid "Enable location data"
201msgid "Enable location data"
201msgstr "Cuir an comas dàta an ionaid"
202msgstr "Cuir an comas dàta an ionaid"
202
203
203−#: qml/Dash/ScopesList.qml:66
204+#: qml/Dash/ScopesList.qml:63
204msgid "Manage"
205msgid "Manage"
205msgstr "Stiùirich"
206msgstr "Stiùirich"
206
207
207−#: qml/Dash/ScopesList.qml:112
208+#: qml/Dash/ScopesList.qml:107
208msgid "Home"
209msgid "Home"
209msgstr "Dhachaigh"
210msgstr "Dhachaigh"
210
211
211−#: qml/Dash/ScopesList.qml:113
212+#: qml/Dash/ScopesList.qml:108
212msgid "Also installed"
213msgid "Also installed"
213msgstr "Air a stàladh cuideachd"
214msgstr "Air a stàladh cuideachd"
214
215
215−#: qml/Greeter/CoverPage.qml:107
216+#: qml/Greeter/Greeter.qml:174
216msgid "Unlock"
217msgid "Unlock"
217msgstr "Thoir a' ghlas dheth"
218msgstr "Thoir a' ghlas dheth"
218
219
219#: qml/Greeter/LoginList.qml:236
220#: qml/Greeter/LoginList.qml:236
220msgid "Retry"
221msgid "Retry"
221−msgstr ""
222+msgstr "Feuch ris a-rithist"
222
223
223#: qml/Greeter/LoginList.qml:237
224#: qml/Greeter/LoginList.qml:237
224msgid "Tap to unlock"
225msgid "Tap to unlock"
225−msgstr ""
226+msgstr "Gnog gus a' ghlas a thoirt fo bharr"
226
227
227−#: qml/Greeter/NarrowView.qml:53 qml/Wizard/Pages/passwd-confirm.qml:53
228+#: qml/Shell.qml:444
228msgid "Sorry, incorrect passphrase."
229msgid "Sorry, incorrect passphrase."
229msgstr "Duilich ach tha an abairt-fhaire cearr."
230msgstr "Duilich ach tha an abairt-fhaire cearr."
230
231
231−#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:54
232+#: qml/Shell.qml:445
232msgid "Sorry, incorrect passcode."
233msgid "Sorry, incorrect passcode."
233msgstr "Duilich ach tha an còd-faire cearr."
234msgstr "Duilich ach tha an còd-faire cearr."
234
235
235−#: qml/Greeter/NarrowView.qml:55
236+#: qml/Shell.qml:446
236msgid "This will be your last attempt."
237msgid "This will be your last attempt."
237msgstr "Seo an oidhirp mu dheireadh agad."
238msgstr "Seo an oidhirp mu dheireadh agad."
238
239
239−#: qml/Greeter/NarrowView.qml:57
240+#: qml/Shell.qml:448
240msgid ""
241msgid ""
241"If passphrase is entered incorrectly, your phone will conduct a factory "
242"If passphrase is entered incorrectly, your phone will conduct a factory "
242"reset and all personal data will be deleted."
243"reset and all personal data will be deleted."
@@ -245,7 +246,7 @@ msgstr ""
245"ath-shuidheachadh air roghainnean an fhactaraidh agus thèid gach dàta "
246"ath-shuidheachadh air roghainnean an fhactaraidh agus thèid gach dàta "
246"pearsanta a sguabadh às."
247"pearsanta a sguabadh às."
247
248
248−#: qml/Greeter/NarrowView.qml:58
249+#: qml/Shell.qml:449
249msgid ""
250msgid ""
250"If passcode is entered incorrectly, your phone will conduct a factory reset "
251"If passcode is entered incorrectly, your phone will conduct a factory reset "
251"and all personal data will be deleted."
252"and all personal data will be deleted."
@@ -254,33 +255,33 @@ msgstr ""
254"shuidheachadh air roghainnean an fhactaraidh agus thèid gach dàta pearsanta "
255"shuidheachadh air roghainnean an fhactaraidh agus thèid gach dàta pearsanta "
255"a sguabadh às."
256"a sguabadh às."
256
257
257−#: qml/Greeter/NarrowView.qml:115
258+#: qml/Shell.qml:402
258#, qt-format
259#, qt-format
259msgid "Enter %1"
260msgid "Enter %1"
260msgstr "Cuir a-steach %1"
261msgstr "Cuir a-steach %1"
261
262
262−#: qml/Greeter/NarrowView.qml:116 qml/Wizard/Pages/passwd-set.qml:60
263+#: qml/Shell.qml:394
263msgid "Enter passphrase"
264msgid "Enter passphrase"
264msgstr "Cuir abairt-fhaire a-steach"
265msgstr "Cuir abairt-fhaire a-steach"
265
266
266−#: qml/Greeter/NarrowView.qml:117
267+#: qml/Shell.qml:398
267msgid "Enter passcode"
268msgid "Enter passcode"
268msgstr "Cuir còd-faire a-steach"
269msgstr "Cuir còd-faire a-steach"
269
270
270−#: qml/Greeter/NarrowView.qml:118
271+#: qml/Shell.qml:403
271#, qt-format
272#, qt-format
272msgid "Sorry, incorrect %1"
273msgid "Sorry, incorrect %1"
273msgstr "Duilich ach tha a' %1 cearr"
274msgstr "Duilich ach tha a' %1 cearr"
274
275
275−#: qml/Greeter/NarrowView.qml:119
276+#: qml/Shell.qml:395
276msgid "Sorry, incorrect passphrase"
277msgid "Sorry, incorrect passphrase"
277msgstr "Duilich ach tha an abairt-fhaire cearr"
278msgstr "Duilich ach tha an abairt-fhaire cearr"
278
279
279−#: qml/Greeter/NarrowView.qml:120
280+#: qml/Shell.qml:396
280msgid "Please re-enter"
281msgid "Please re-enter"
281msgstr "Cuir a-steach e a-rithist"
282msgstr "Cuir a-steach e a-rithist"
282
283
283−#: qml/Greeter/NarrowView.qml:121
284+#: qml/Shell.qml:399
284msgid "Sorry, incorrect passcode"
285msgid "Sorry, incorrect passcode"
285msgstr "Duilich ach tha an còd-faire cearr"
286msgstr "Duilich ach tha an còd-faire cearr"
286
287
po/pa.po+166−154
@@ -8,102 +8,103 @@ msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\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-02-25 08:57-0500\n"
10"POT-Creation-Date: 2015-02-25 08:57-0500\n"
11−"PO-Revision-Date: 2014-10-16 03:04+0000\n"
11+"PO-Revision-Date: 2015-03-15 04:38+0000\n"
12−"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12+"Last-Translator: Gursharnjit_Singh <ubuntuser13@gmail.com>\n"
13"Language-Team: Punjabi <pa@li.org>\n"
13"Language-Team: Punjabi <pa@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-03-04 05:56+0000\n"
18+"X-Launchpad-Export-Date: 2015-03-16 06:02+0000\n"
19−"X-Generator: Launchpad (build 17361)\n"
19+"X-Generator: Launchpad (build 17389)\n"
20
20
21−#: plugins/LightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
23msgstr "ਗੁਪਤ ਕੋਡ: "
23msgstr "ਗੁਪਤ ਕੋਡ: "
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:91
27msgid "Pin shortcut"
27msgid "Pin shortcut"
28msgstr "ਸ਼ਾਰਟਕੱਟ ਪਿੰਨ ਲਗਾਓ"
28msgstr "ਸ਼ਾਰਟਕੱਟ ਪਿੰਨ ਲਗਾਓ"
29
29
30−#: plugins/Unity/Launcher/launcheritem.cpp:100
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
31msgid "Unpin shortcut"
31msgid "Unpin shortcut"
32msgstr "ਸ਼ਾਰਟਕੱਟ ਪਿੰਨ ਹਟਾਓ"
32msgstr "ਸ਼ਾਰਟਕੱਟ ਪਿੰਨ ਹਟਾਓ"
33
33
34−#: qml/Components/DelayedLockscreen.qml:49
34+#: qml/Components/DelayedLockscreen.qml:47
35msgid "Device Locked"
35msgid "Device Locked"
36msgstr "ਯੰਤਰ ਲਾਕ ਹੈ"
36msgstr "ਯੰਤਰ ਲਾਕ ਹੈ"
37
37
38−#: qml/Components/DelayedLockscreen.qml:64
38+#: qml/Components/DelayedLockscreen.qml:62
39msgid "You have been locked out due to too many failed passphrase attempts."
39msgid "You have been locked out due to too many failed passphrase attempts."
40−msgstr ""
40+msgstr "ਬਹੁਤ ਸਾਰੇ ਗਲਤ ਵਾਕਾਂ ਦੀ ਵਜ੍ਹਾ ਨਾਲ ਤੁਹਾਨੂੰ ਲਾਕ ਕੀਤਾ ਗਿਆ।"
41
41
42−#: qml/Components/DelayedLockscreen.qml:65
42+#: qml/Components/DelayedLockscreen.qml:63
43msgid "You have been locked out due to too many failed passcode attempts."
43msgid "You have been locked out due to too many failed passcode attempts."
44−msgstr ""
44+msgstr "ਬਹੁਤ ਸਾਰੇ ਗਲਤ ਪਾਸਕੋਡਾਂ ਦੀ ਵਜ੍ਹਾ ਨਾਲ ਤੁਹਾਨੂੰ ਲਾਕ ਕੀਤਾ ਗਿਆ।"
45
45
46−#: qml/Components/DelayedLockscreen.qml:74
46+#: qml/Components/DelayedLockscreen.qml:72
47#, qt-format
47#, qt-format
48msgid "Please wait %1 minute and then try again…"
48msgid "Please wait %1 minute and then try again…"
49msgid_plural "Please wait %1 minutes and then try again…"
49msgid_plural "Please wait %1 minutes and then try again…"
50msgstr[0] "%1 ਮਿੰਟ ਲਈ ਉਡੀਕੋ ਤੇ ਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ..."
50msgstr[0] "%1 ਮਿੰਟ ਲਈ ਉਡੀਕੋ ਤੇ ਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ..."
51msgstr[1] "%1 ਮਿੰਟਾਂ ਲਈ ਉਡੀਕੋ ਤੇ ਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ..."
51msgstr[1] "%1 ਮਿੰਟਾਂ ਲਈ ਉਡੀਕੋ ਤੇ ਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ..."
52
52
53−#: qml/Components/Dialogs.qml:87
53+#: qml/Components/Dialogs.qml:74
54msgid "Log out"
54msgid "Log out"
55msgstr "ਲਾਗ-ਆਉਟ"
55msgstr "ਲਾਗ-ਆਉਟ"
56
56
57−#: qml/Components/Dialogs.qml:88
57+#: qml/Components/Dialogs.qml:75
58msgid "Are you sure you want to log out?"
58msgid "Are you sure you want to log out?"
59msgstr "ਕੀ ਤੁਸੀਂ ਲਾਗ ਆਉਟ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?"
59msgstr "ਕੀ ਤੁਸੀਂ ਲਾਗ ਆਉਟ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?"
60
60
61#: qml/Components/Dialogs.qml:90
61#: qml/Components/Dialogs.qml:90
62msgid "Lock"
62msgid "Lock"
63−msgstr ""
63+msgstr "ਲਾਕ ਕਰੋ"
64
64
65#: qml/Components/Dialogs.qml:97
65#: qml/Components/Dialogs.qml:97
66msgid "Log Out"
66msgid "Log Out"
67−msgstr ""
67+msgstr "ਲਾਗ ਆਉਟ"
68
68
69−#: qml/Components/Dialogs.qml:104 qml/Components/Dialogs.qml:135
69+#: qml/Components/Dialogs.qml:171
70−#: qml/Components/Dialogs.qml:191
71msgid "Cancel"
70msgid "Cancel"
72msgstr "ਰੱਦ ਕਰੋ"
71msgstr "ਰੱਦ ਕਰੋ"
73
72
74−#: qml/Components/Dialogs.qml:116
73+#: qml/Components/Dialogs.qml:98
75msgid "Shut down"
74msgid "Shut down"
76msgstr "ਬੰਦ ਕਰੋ"
75msgstr "ਬੰਦ ਕਰੋ"
77
76
78−#: qml/Components/Dialogs.qml:117
77+#: qml/Components/Dialogs.qml:99
79msgid "Are you sure you want to shut down?"
78msgid "Are you sure you want to shut down?"
80msgstr "ਕੀ ਤੁਸੀਂ ਬੰਦ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?"
79msgstr "ਕੀ ਤੁਸੀਂ ਬੰਦ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?"
81
80
82−#: qml/Components/Dialogs.qml:119 qml/Components/Dialogs.qml:147
81+#: qml/Components/Dialogs.qml:123
83msgid "Reboot"
82msgid "Reboot"
84msgstr "ਮੁਡ਼-ਚਾਲੂ"
83msgstr "ਮੁਡ਼-ਚਾਲੂ"
85
84
86#: qml/Components/Dialogs.qml:127
85#: qml/Components/Dialogs.qml:127
87msgid "Shutdown"
86msgid "Shutdown"
88−msgstr ""
87+msgstr "ਬੰਦ ਕਰੋ"
89
88
90−#: qml/Components/Dialogs.qml:148
89+#: qml/Components/Dialogs.qml:124
91msgid "Are you sure you want to reboot?"
90msgid "Are you sure you want to reboot?"
92msgstr "ਕੀ ਤੁਸੀਂ ਮੁੜ-ਚਾਲੂ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?"
91msgstr "ਕੀ ਤੁਸੀਂ ਮੁੜ-ਚਾਲੂ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?"
93
92
94−#: qml/Components/Dialogs.qml:150
93+#: qml/Components/Dialogs.qml:77 qml/Components/Dialogs.qml:101
94+#: qml/Components/Dialogs.qml:126
95msgid "No"
95msgid "No"
96msgstr "ਨਹੀਂ"
96msgstr "ਨਹੀਂ"
97
97
98−#: qml/Components/Dialogs.qml:156
98+#: qml/Components/Dialogs.qml:84 qml/Components/Dialogs.qml:108
99+#: qml/Components/Dialogs.qml:133
99msgid "Yes"
100msgid "Yes"
100msgstr "ਹਾਂ"
101msgstr "ਹਾਂ"
101
102
102−#: qml/Components/Dialogs.qml:170
103+#: qml/Components/Dialogs.qml:148
103msgid "Power"
104msgid "Power"
104msgstr "ਪਾਵਰ"
105msgstr "ਪਾਵਰ"
105
106
106−#: qml/Components/Dialogs.qml:171
107+#: qml/Components/Dialogs.qml:149
107msgid ""
108msgid ""
108"Are you sure you would like\n"
109"Are you sure you would like\n"
109"to power off?"
110"to power off?"
@@ -111,363 +112,368 @@ msgstr ""
111"ਕੀ ਤੁਸੀਂ ਪਾਵਰ-ਆਫ਼ ਕਰਨਾ\n"
112"ਕੀ ਤੁਸੀਂ ਪਾਵਰ-ਆਫ਼ ਕਰਨਾ\n"
112"ਚਾਹੁੰਦੇ ਹੋ?"
113"ਚਾਹੁੰਦੇ ਹੋ?"
113
114
114−#: qml/Components/Dialogs.qml:173
115+#: qml/Components/Dialogs.qml:151
115msgid "Power off"
116msgid "Power off"
116−msgstr ""
117+msgstr "ਬੰਦ ਕਰੋ"
117
118
118−#: qml/Components/Dialogs.qml:182
119+#: qml/Components/Dialogs.qml:161
119msgid "Restart"
120msgid "Restart"
120msgstr "ਮੁੜ ਚਾਲੂ ਕਰੋ"
121msgstr "ਮੁੜ ਚਾਲੂ ਕਰੋ"
121
122
122−#: qml/Components/Lockscreen.qml:238
123+#: qml/Components/Lockscreen.qml:223
123msgid "Return to Call"
124msgid "Return to Call"
124−msgstr ""
125+msgstr "ਕਾਲ ਤੇ ਵਾਪਸ"
125
126
126−#: qml/Components/Lockscreen.qml:238
127+#: qml/Components/Lockscreen.qml:223
127msgid "Emergency Call"
128msgid "Emergency Call"
128−msgstr ""
129+msgstr "ਅਪਾਤਕਾਲੀਨ ਕਾਲ"
129
130
130−#: qml/Components/Lockscreen.qml:270
131+#: qml/Components/Lockscreen.qml:255
131msgid "OK"
132msgid "OK"
132−msgstr ""
133+msgstr "ਠੀਕ"
133
134
134−#: qml/Dash/GenericScopeView.qml:528 qml/Dash/GenericScopeView.qml:686
135+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
135msgid "See less"
136msgid "See less"
136−msgstr ""
137+msgstr "ਘੱਟ ਵੇਖੋ"
137
138
138−#: qml/Dash/GenericScopeView.qml:528
139+#: qml/Dash/GenericScopeView.qml:434
139msgid "See all"
140msgid "See all"
140−msgstr ""
141+msgstr "ਸਾਰਾ ਵੇਖੋ"
141
142
142−#: qml/Dash/GenericScopeView.qml:590 qml/Dash/PageHeader.qml:276
143+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:268
143#: qml/Panel/SearchIndicator.qml:27
144#: qml/Panel/SearchIndicator.qml:27
144msgid "Search"
145msgid "Search"
145−msgstr ""
146+msgstr "ਖੋਜ"
146
147
147−#: qml/Dash/PageHeader.qml:269
148+#: qml/Dash/PageHeader.qml:261
148msgid "Store"
149msgid "Store"
149−msgstr ""
150+msgstr "ਸਟੋਰ"
150
151
151−#: qml/Dash/PageHeader.qml:286
152+#: qml/Dash/PageHeader.qml:278
152msgid "Settings"
153msgid "Settings"
153−msgstr ""
154+msgstr "ਸੈਟਿੰਗ"
154
155
155−#: qml/Dash/PageHeader.qml:293
156+#: qml/Dash/PageHeader.qml:285
156msgid "Remove from Favorites"
157msgid "Remove from Favorites"
157−msgstr ""
158+msgstr "ਪਸੰਦ ਵਿੱਚੋਂ ਹਟਾਓ"
158
159
159−#: qml/Dash/PageHeader.qml:293
160+#: qml/Dash/PageHeader.qml:285
160msgid "Add to Favorites"
161msgid "Add to Favorites"
161−msgstr ""
162+msgstr "ਪਸੰਦ ਵਿੱਚ ਜੋੜੋ"
162
163
163#: qml/Dash/Previews/PreviewActionCombo.qml:35
164#: qml/Dash/Previews/PreviewActionCombo.qml:35
164msgid "More..."
165msgid "More..."
165−msgstr ""
166+msgstr "ਹੋਰ..."
166
167
167#: qml/Dash/Previews/PreviewActionCombo.qml:35
168#: qml/Dash/Previews/PreviewActionCombo.qml:35
168msgid "Less..."
169msgid "Less..."
169−msgstr ""
170+msgstr "ਘੱਟ..."
170
171
171#: qml/Dash/Previews/PreviewRatingInput.qml:81
172#: qml/Dash/Previews/PreviewRatingInput.qml:81
172msgid "Rate this"
173msgid "Rate this"
173−msgstr ""
174+msgstr "ਇਸ ਨੂੰ ਰੇਟ ਕਰੋ"
174
175
175#: qml/Dash/Previews/PreviewRatingInput.qml:126
176#: qml/Dash/Previews/PreviewRatingInput.qml:126
176msgid "Add a review"
177msgid "Add a review"
177−msgstr ""
178+msgstr "ਸਮੀਖਿਆ ਜੋੜੋ"
178
179
179#: qml/Dash/Previews/PreviewRatingInput.qml:166
180#: qml/Dash/Previews/PreviewRatingInput.qml:166
180msgid "Send"
181msgid "Send"
181−msgstr ""
182+msgstr "ਭੇਜੋ"
182
183
183#: qml/Dash/PullToRefreshScopeStyle.qml:55
184#: qml/Dash/PullToRefreshScopeStyle.qml:55
184msgid "Pull to refresh…"
185msgid "Pull to refresh…"
185−msgstr ""
186+msgstr "ਤਾਜ਼ਾ ਕਰਨ ਲਈ ਖਿੱਚੋ..."
186
187
187#: qml/Dash/PullToRefreshScopeStyle.qml:60
188#: qml/Dash/PullToRefreshScopeStyle.qml:60
188msgid "Release to refresh…"
189msgid "Release to refresh…"
189−msgstr ""
190+msgstr "ਤਾਜ਼ਾ ਕਰਨ ਲਈ ਛੱਡੋ..."
190
191
191#: qml/Dash/ScopeSettings/ScopeSettingBoolean.qml:43
192#: qml/Dash/ScopeSettings/ScopeSettingBoolean.qml:43
192msgid "Enable location data"
193msgid "Enable location data"
193−msgstr ""
194+msgstr "ਸਥਿਤੀ ਡਾਟਾ ਚਾਲੂ ਕਰੋ"
194
195
195−#: qml/Dash/ScopesList.qml:66
196+#: qml/Dash/ScopesList.qml:63
196msgid "Manage"
197msgid "Manage"
197−msgstr ""
198+msgstr "ਸਾਂਭ-ਸੰਭਾਲ"
198
199
199−#: qml/Dash/ScopesList.qml:112
200+#: qml/Dash/ScopesList.qml:107
200msgid "Home"
201msgid "Home"
201−msgstr ""
202+msgstr "ਘਰ"
202
203
203−#: qml/Dash/ScopesList.qml:113
204+#: qml/Dash/ScopesList.qml:108
204msgid "Also installed"
205msgid "Also installed"
205−msgstr ""
206+msgstr "ਨਾਲ ਇੰਸਟਾਲ ਹੋਇਆ"
206
207
207−#: qml/Greeter/CoverPage.qml:107
208+#: qml/Greeter/Greeter.qml:174
208msgid "Unlock"
209msgid "Unlock"
209−msgstr ""
210+msgstr "ਅਣ-ਲਾਕ"
210
211
211#: qml/Greeter/LoginList.qml:236
212#: qml/Greeter/LoginList.qml:236
212msgid "Retry"
213msgid "Retry"
213−msgstr ""
214+msgstr "ਮੁੜ-ਕੋਸ਼ਿਸ਼"
214
215
215#: qml/Greeter/LoginList.qml:237
216#: qml/Greeter/LoginList.qml:237
216msgid "Tap to unlock"
217msgid "Tap to unlock"
217−msgstr ""
218+msgstr "ਅਣਲਾਕ ਲਈ ਛੂਹੋ"
218
219
219−#: qml/Greeter/NarrowView.qml:53 qml/Wizard/Pages/passwd-confirm.qml:53
220+#: qml/Shell.qml:444
220msgid "Sorry, incorrect passphrase."
221msgid "Sorry, incorrect passphrase."
221−msgstr ""
222+msgstr "ਮੁਆਫ਼ੀ, ਗਲਤ ਵਾਕ।"
222
223
223−#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:54
224+#: qml/Shell.qml:445
224msgid "Sorry, incorrect passcode."
225msgid "Sorry, incorrect passcode."
225−msgstr ""
226+msgstr "ਮੁਆਫ਼ੀ, ਗਲਤ ਪਾਸਕੋਡ।"
226
227
227−#: qml/Greeter/NarrowView.qml:55
228+#: qml/Shell.qml:446
228msgid "This will be your last attempt."
229msgid "This will be your last attempt."
229−msgstr ""
230+msgstr "ਇਹ ਤੁਹਾਡੀ ਆਖਰੀ ਕੋਸ਼ਿਸ਼ ਹੋਵੇਗੀ।"
230
231
231−#: qml/Greeter/NarrowView.qml:57
232+#: qml/Shell.qml:448
232msgid ""
233msgid ""
233"If passphrase is entered incorrectly, your phone will conduct a factory "
234"If passphrase is entered incorrectly, your phone will conduct a factory "
234"reset and all personal data will be deleted."
235"reset and all personal data will be deleted."
235msgstr ""
236msgstr ""
237+"ਜੇਕਰ ਗਲਤ ਵਾਕ ਦਰਜ ਹੋਇਆ, ਤੁਹਾਡਾ ਫ਼ੋਨ ਇੱਕ ਫ਼ੋਨ ਇੱਕ ਫ਼ੈਕਟਰੀ ਰੀਸੈੱਟ ਚਾਲੂ ਕਰੇਗਾ ਅਤੇ "
238+"ਸਾਰਾ ਨਿੱਜੀ ਡਾਟਾ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।"
236
239
237−#: qml/Greeter/NarrowView.qml:58
240+#: qml/Shell.qml:449
238msgid ""
241msgid ""
239"If passcode is entered incorrectly, your phone will conduct a factory reset "
242"If passcode is entered incorrectly, your phone will conduct a factory reset "
240"and all personal data will be deleted."
243"and all personal data will be deleted."
241msgstr ""
244msgstr ""
245+"ਜੇਕਰ ਗਲਤ ਪਾਸਕੋਡ ਦਰਜ ਹੋਇਆ, ਤੁਹਾਡਾ ਫ਼ੋਨ ਇੱਕ ਫ਼ੋਨ ਇੱਕ ਫ਼ੈਕਟਰੀ ਰੀਸੈੱਟ ਚਾਲੂ ਕਰੇਗਾ "
246+"ਅਤੇ ਸਾਰਾ ਨਿੱਜੀ ਡਾਟਾ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।"
242
247
243−#: qml/Greeter/NarrowView.qml:115
248+#: qml/Shell.qml:402
244#, qt-format
249#, qt-format
245msgid "Enter %1"
250msgid "Enter %1"
246−msgstr ""
251+msgstr "ਦਰਜ %1"
247
252
248−#: qml/Greeter/NarrowView.qml:116 qml/Wizard/Pages/passwd-set.qml:60
253+#: qml/Shell.qml:394
249msgid "Enter passphrase"
254msgid "Enter passphrase"
250−msgstr ""
255+msgstr "ਵਾਕ ਦਿਓ"
251
256
252−#: qml/Greeter/NarrowView.qml:117
257+#: qml/Shell.qml:398
253msgid "Enter passcode"
258msgid "Enter passcode"
254−msgstr ""
259+msgstr "ਪਾਸਕੋਡ ਦਿਓ"
255
260
256−#: qml/Greeter/NarrowView.qml:118
261+#: qml/Shell.qml:403
257#, qt-format
262#, qt-format
258msgid "Sorry, incorrect %1"
263msgid "Sorry, incorrect %1"
259−msgstr ""
264+msgstr "ਮੁਆਫ਼ੀ, ਗਲਤ %1"
260
265
261−#: qml/Greeter/NarrowView.qml:119
266+#: qml/Shell.qml:395
262msgid "Sorry, incorrect passphrase"
267msgid "Sorry, incorrect passphrase"
263−msgstr ""
268+msgstr "ਮੁਆਫ਼ੀ, ਗਲਤ ਵਾਕ"
264
269
265−#: qml/Greeter/NarrowView.qml:120
270+#: qml/Shell.qml:396
266msgid "Please re-enter"
271msgid "Please re-enter"
267−msgstr ""
272+msgstr "ਕਿਰਪਾ ਕਰਕੇ ਮੁੜ-ਦਰਜ ਕਰੋ"
268
273
269−#: qml/Greeter/NarrowView.qml:121
274+#: qml/Shell.qml:399
270msgid "Sorry, incorrect passcode"
275msgid "Sorry, incorrect passcode"
271−msgstr ""
276+msgstr "ਮੁਆਫ਼ੀ, ਗਲਤ ਪਾਸਕੋਡ"
272
277
273#: qml/Notifications/NotificationMenuItemFactory.qml:128
278#: qml/Notifications/NotificationMenuItemFactory.qml:128
274msgid "Show password"
279msgid "Show password"
275−msgstr ""
280+msgstr "ਪਾਸਵਰਡ ਵਿਖਾਓ"
276
281
277#: qml/Panel/ActiveCallHint.qml:79
282#: qml/Panel/ActiveCallHint.qml:79
278msgid "Tap to return to call..."
283msgid "Tap to return to call..."
279−msgstr ""
284+msgstr "ਕਾਲ ਤੇ ਵਾਪਸ ਜਾਣ ਲਈ ਛੁਹੋ..."
280
285
281#: qml/Panel/ActiveCallHint.qml:92
286#: qml/Panel/ActiveCallHint.qml:92
282msgid "Conference"
287msgid "Conference"
283−msgstr ""
288+msgstr "ਕਨਫਰੰਸ"
284
289
285#: qml/Panel/Indicators/MenuItemFactory.qml:643
290#: qml/Panel/Indicators/MenuItemFactory.qml:643
286msgid "Nothing is playing"
291msgid "Nothing is playing"
287−msgstr ""
292+msgstr "ਕੁੱਝ ਨਹੀਂ ਚੱਲ ਰਿਹਾ"
288
293
289#: qml/Panel/Indicators/MenuItemFactory.qml:791
294#: qml/Panel/Indicators/MenuItemFactory.qml:791
290msgid "In queue…"
295msgid "In queue…"
291−msgstr ""
296+msgstr "ਕਤਾਰ ਵਿੱਚ..."
292
297
293#: qml/Panel/Indicators/MenuItemFactory.qml:795
298#: qml/Panel/Indicators/MenuItemFactory.qml:795
294msgid "Downloading"
299msgid "Downloading"
295−msgstr ""
300+msgstr "ਡਾਊਨਲੋਡ ਕਰ ਰਿਹਾ"
296
301
297#: qml/Panel/Indicators/MenuItemFactory.qml:797
302#: qml/Panel/Indicators/MenuItemFactory.qml:797
298msgid "Paused, tap to resume"
303msgid "Paused, tap to resume"
299−msgstr ""
304+msgstr "ਵਿਰਾਮ, ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਛੂਹੋ"
300
305
301#: qml/Panel/Indicators/MenuItemFactory.qml:799
306#: qml/Panel/Indicators/MenuItemFactory.qml:799
302msgid "Canceled"
307msgid "Canceled"
303−msgstr ""
308+msgstr "ਰੱਦ ਕੀਤਾ"
304
309
305#: qml/Panel/Indicators/MenuItemFactory.qml:801
310#: qml/Panel/Indicators/MenuItemFactory.qml:801
306msgid "Finished"
311msgid "Finished"
307−msgstr ""
312+msgstr "ਮੁਕੰਮਲ"
308
313
309#: qml/Panel/Indicators/MenuItemFactory.qml:803
314#: qml/Panel/Indicators/MenuItemFactory.qml:803
310msgid "Failed, tap to retry"
315msgid "Failed, tap to retry"
311−msgstr ""
316+msgstr "ਫ਼ੇਲ੍ਹ ਹੋਇਆ, ਮੁੜ-ਕੋਸ਼ਿਸ ਲਈ ਛੂਹੋ"
312
317
313#: qml/Panel/Indicators/MessageMenuItemFactory.qml:149
318#: qml/Panel/Indicators/MessageMenuItemFactory.qml:149
314msgid "Reply"
319msgid "Reply"
315−msgstr ""
320+msgstr "ਜਵਾਬ"
316
321
317#: qml/Panel/Indicators/ModemInfoItem.qml:105
322#: qml/Panel/Indicators/ModemInfoItem.qml:105
318msgid "Unlock SIM"
323msgid "Unlock SIM"
319−msgstr ""
324+msgstr "ਅਣਲਾਕ SIM"
320
325
321#: qml/Panel/Indicators/RoamingIndication.qml:27
326#: qml/Panel/Indicators/RoamingIndication.qml:27
322msgid "Roaming"
327msgid "Roaming"
323−msgstr ""
328+msgstr "ਰੋਮਿੰਗ"
324
329
325#: qml/Tutorial/TutorialBottomFinish.qml:24
330#: qml/Tutorial/TutorialBottomFinish.qml:24
326msgid "This action does different things for different apps"
331msgid "This action does different things for different apps"
327−msgstr ""
332+msgstr "ਇਹ ਕਾਰਵਾਈ ਵੱਖ ਐਪਾਂ ਲਈ ਵੱਖ ਵੱਖ ਚੀਜ਼ਾਂ ਕਰਦੀ ਹੈ"
328
333
329#: qml/Tutorial/TutorialBottomFinish.qml:25
334#: qml/Tutorial/TutorialBottomFinish.qml:25
330msgid "Tap here to finish."
335msgid "Tap here to finish."
331−msgstr ""
336+msgstr "ਨਬੇੜਣ ਲਈ ਇੱਥੇ ਛੂਹੋ"
332
337
333#: qml/Tutorial/TutorialBottom.qml:28
338#: qml/Tutorial/TutorialBottom.qml:28
334msgid "Open special menus"
339msgid "Open special menus"
335−msgstr ""
340+msgstr "ਖਾਸ਼ ਮੀਨੂੰ ਖੋਲ੍ਹੋ"
336
341
337#: qml/Tutorial/TutorialBottom.qml:29
342#: qml/Tutorial/TutorialBottom.qml:29
338msgid "Swipe up from the bottom edge."
343msgid "Swipe up from the bottom edge."
339−msgstr ""
344+msgstr "ਹੇਠਲੇ ਕਿਨਾਰੇ ਤੋਂ ਉੱਪਰ ਵੱਲੋਂ ਖਿੱਚੋ।"
340
345
341#: qml/Tutorial/TutorialLeftFinish.qml:24
346#: qml/Tutorial/TutorialLeftFinish.qml:24
342msgid "These are the shortcuts to favorite apps"
347msgid "These are the shortcuts to favorite apps"
343−msgstr ""
348+msgstr "ਇੱਥੇ ਤੁਹਾਡੀ ਪਸੰਦੀਦਾ ਐਪਾਂ ਲਈ ਸ਼ਾਰਟਕੱਟ ਹਨ"
344
349
345#: qml/Tutorial/TutorialLeftFinish.qml:25 qml/Tutorial/TutorialRight.qml:144
350#: qml/Tutorial/TutorialLeftFinish.qml:25 qml/Tutorial/TutorialRight.qml:144
346msgid "Tap here to continue."
351msgid "Tap here to continue."
347−msgstr ""
352+msgstr "ਜਾਰੀ ਰੱਖਣ ਲਈ ਇੱਥੇ ਛੂਹੋ।"
348
353
349#: qml/Tutorial/TutorialLeft.qml:26
354#: qml/Tutorial/TutorialLeft.qml:26
350msgid "Open the launcher"
355msgid "Open the launcher"
351−msgstr ""
356+msgstr "ਲਾਂਚਰ ਨੂੰ ਖੋਲੋ"
352
357
353#: qml/Tutorial/TutorialLeft.qml:27
358#: qml/Tutorial/TutorialLeft.qml:27
354msgid "Short swipe from the left edge."
359msgid "Short swipe from the left edge."
355−msgstr ""
360+msgstr "ਖੱਬੇ ਕਿਨਾਰੇ ਤੋਂ ਥੋੜ੍ਹਾ ਖਿੱਚੋ।"
356
361
357#: qml/Tutorial/TutorialPage.qml:178
362#: qml/Tutorial/TutorialPage.qml:178
358msgid "You almost got it!"
363msgid "You almost got it!"
359−msgstr ""
364+msgstr "ਤੁਸੀਂ ਲਗਭਗ ਸਮਝ ਗਏ ਹੋ!"
360
365
361#: qml/Tutorial/TutorialPage.qml:195
366#: qml/Tutorial/TutorialPage.qml:195
362msgid "Try again."
367msgid "Try again."
363−msgstr ""
368+msgstr "ਮੁੜ-ਕੋਸ਼ਿਸ ਕਰੋ।"
364
369
365#: qml/Tutorial/TutorialRight.qml:31
370#: qml/Tutorial/TutorialRight.qml:31
366msgid "To view open apps"
371msgid "To view open apps"
367−msgstr ""
372+msgstr "ਖੁੱਲੀਆਂ ਐਪਾਂ ਵੇਖਣ ਲਈ"
368
373
369#: qml/Tutorial/TutorialRight.qml:32
374#: qml/Tutorial/TutorialRight.qml:32
370msgid "Long swipe from the right edge."
375msgid "Long swipe from the right edge."
371−msgstr ""
376+msgstr "ਸੱਜੇ ਪਾਸੇ ਤੋਂ ਲੰਬਾ ਖਿੱਚੋ।"
372
377
373#: qml/Tutorial/TutorialRight.qml:122
378#: qml/Tutorial/TutorialRight.qml:122
374msgid "View all your running tasks."
379msgid "View all your running tasks."
375−msgstr ""
380+msgstr "ਆਪਣੇ ਸਾਰੇ ਚੱਲਦੇ ਕੰਮ ਵੇਖੋ।"
376
381
377#: qml/Wizard/Page.qml:89
382#: qml/Wizard/Page.qml:89
378msgid "Back"
383msgid "Back"
379−msgstr ""
384+msgstr "ਪਿੱਛੇ"
380
385
381#: qml/Wizard/Pages/10-welcome.qml:27
386#: qml/Wizard/Pages/10-welcome.qml:27
382msgid "Hi!"
387msgid "Hi!"
383−msgstr ""
388+msgstr "ਹੈਲੋ!"
384
389
385#: qml/Wizard/Pages/10-welcome.qml:44
390#: qml/Wizard/Pages/10-welcome.qml:44
386msgid "Welcome to your Ubuntu phone."
391msgid "Welcome to your Ubuntu phone."
387−msgstr ""
392+msgstr "ਉਬੰਤੂ ਫ਼ੋਨ ਵਿੱਚ ਤੁਹਾਨੂੰ ਜੀ ਆਇਆ ਨੂੰ।"
388
393
389#: qml/Wizard/Pages/10-welcome.qml:52
394#: qml/Wizard/Pages/10-welcome.qml:52
390msgid "Let’s get started."
395msgid "Let’s get started."
391−msgstr ""
396+msgstr "ਚਲੋ ਸ਼ੁਰੂ ਕਰੀਏ।"
392
397
393#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:128
398#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:128
394#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
399#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
395#: qml/Wizard/Pages/60-reporting.qml:50 qml/Wizard/Pages/passwd-confirm.qml:82
400#: qml/Wizard/Pages/60-reporting.qml:50 qml/Wizard/Pages/passwd-confirm.qml:82
396#: qml/Wizard/Pages/passwd-set.qml:90
401#: qml/Wizard/Pages/passwd-set.qml:90
397msgid "Continue"
402msgid "Continue"
398−msgstr ""
403+msgstr "ਜਾਰੀ"
399
404
400#: qml/Wizard/Pages/20-sim.qml:25
405#: qml/Wizard/Pages/20-sim.qml:25
401msgid "Add a SIM card and restart your device"
406msgid "Add a SIM card and restart your device"
402−msgstr ""
407+msgstr "ਸਿਮ ਕਾਰਡ ਦਾਖਲ ਕਰੋ ਅਤੇ ਜੰਤਰ ਨੂੰ ਮੁੜ-ਚਾਲੂ ਕਰੋ"
403
408
404#: qml/Wizard/Pages/20-sim.qml:59
409#: qml/Wizard/Pages/20-sim.qml:59
405msgid "Without it, you won’t be able to make calls or use text messaging."
410msgid "Without it, you won’t be able to make calls or use text messaging."
406−msgstr ""
411+msgstr "ਇਸ ਤੋਂ ਬਿਨਾਂ, ਤੁਸੀਂ ਨਾ ਹੀ ਕਾਲਾਂ ਕਰ ਜਾਂ ਸੁਨੇਹੇ ਨਹੀਂ ਭੇਜ ਸਕੋਗੇ।"
407
412
408#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
413#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
409msgid "Skip"
414msgid "Skip"
410−msgstr ""
415+msgstr "ਛੱਡੋ"
411
416
412#: qml/Wizard/Pages/30-passwd-type.qml:39
417#: qml/Wizard/Pages/30-passwd-type.qml:39
413msgid "Lock security"
418msgid "Lock security"
414−msgstr ""
419+msgstr "ਲਾਕ ਸੁਰੱਖਿਆ"
415
420
416#: qml/Wizard/Pages/30-passwd-type.qml:74
421#: qml/Wizard/Pages/30-passwd-type.qml:74
417msgid "Please select how you’d like to unlock your phone."
422msgid "Please select how you’d like to unlock your phone."
418msgstr ""
423msgstr ""
424+"ਕਿਰਪਾ ਕਰਕੇ ਚੁਣੋ ਤੁਸੀਂ ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਕਿਸ ਤਰ੍ਹਾਂ ਅਣ-ਲਾਕ ਕਰਨਾ ਪਸੰਦ ਕਰੋਗੇ।"
419
425
420#: qml/Wizard/Pages/30-passwd-type.qml:97
426#: qml/Wizard/Pages/30-passwd-type.qml:97
421msgid "Swipe"
427msgid "Swipe"
422−msgstr ""
428+msgstr "ਖਿੱਚੋ"
423
429
424#: qml/Wizard/Pages/30-passwd-type.qml:98
430#: qml/Wizard/Pages/30-passwd-type.qml:98
425msgid "No security"
431msgid "No security"
426−msgstr ""
432+msgstr "ਸੁਰੱਖਿਆ ਨਹੀਂ"
427
433
428#: qml/Wizard/Pages/30-passwd-type.qml:100
434#: qml/Wizard/Pages/30-passwd-type.qml:100
429msgid "Passcode"
435msgid "Passcode"
430−msgstr ""
436+msgstr "ਪਾਸਕੋਡ"
431
437
432#: qml/Wizard/Pages/30-passwd-type.qml:101
438#: qml/Wizard/Pages/30-passwd-type.qml:101
433msgid "4 digits only"
439msgid "4 digits only"
434−msgstr ""
440+msgstr "ਕੇਵਲ 4 ਅੰਕ"
435
441
436#: qml/Wizard/Pages/30-passwd-type.qml:103
442#: qml/Wizard/Pages/30-passwd-type.qml:103
437msgid "Passphrase"
443msgid "Passphrase"
438−msgstr ""
444+msgstr "ਵਾਕ"
439
445
440#: qml/Wizard/Pages/30-passwd-type.qml:104
446#: qml/Wizard/Pages/30-passwd-type.qml:104
441msgid "Numbers and letters"
447msgid "Numbers and letters"
442−msgstr ""
448+msgstr "ਨੰਬਰਾਂ ਅਤੇ ਅੱਖਰਾਂ"
443
449
444#: qml/Wizard/Pages/40-wifi.qml:29
450#: qml/Wizard/Pages/40-wifi.qml:29
445msgid "Connect to Wi‑Fi"
451msgid "Connect to Wi‑Fi"
446−msgstr ""
452+msgstr "ਵਾਈ-ਫ਼ਾਈ ਨਾਲ ਕੁਨੇਕਟ ਹੋਵੋ"
447
453
448#: qml/Wizard/Pages/40-wifi.qml:168
454#: qml/Wizard/Pages/40-wifi.qml:168
449msgid "Available networks…"
455msgid "Available networks…"
450−msgstr ""
456+msgstr "ਮੌਜੂਦ ਨੈੱਟਵਰਕ..."
451
457
452#: qml/Wizard/Pages/40-wifi.qml:169
458#: qml/Wizard/Pages/40-wifi.qml:169
453msgid "No available networks."
459msgid "No available networks."
454−msgstr ""
460+msgstr "ਕੋਈ ਨੈੱਟਵਰਕ ਮੌਜੂਦ ਨਹੀਂ।"
455
461
456#: qml/Wizard/Pages/50-location.qml:27
462#: qml/Wizard/Pages/50-location.qml:27
457msgid "Location"
463msgid "Location"
458−msgstr ""
464+msgstr "ਟਿਕਾਣਾ"
459
465
460#: qml/Wizard/Pages/50-location.qml:62
466#: qml/Wizard/Pages/50-location.qml:62
461msgid "Let the phone detect your location:"
467msgid "Let the phone detect your location:"
462−msgstr ""
468+msgstr "ਫ਼ੋਨ ਨੂੰ ਤੁਹਾਡੇ ਟਿਕਾਣੇ ਦਾ ਪਤਾ ਲਗਾਉਣ ਦਿਓ:"
463
469
464#: qml/Wizard/Pages/50-location.qml:69
470#: qml/Wizard/Pages/50-location.qml:69
465msgid "Using GPS only (less accurate)"
471msgid "Using GPS only (less accurate)"
466−msgstr ""
472+msgstr "ਕੇਵਲ GPS ਦੀ ਵਰਤੋਂ (ਘੱਟ ਦਰੁਸਤ)"
467
473
468#: qml/Wizard/Pages/50-location.qml:86
474#: qml/Wizard/Pages/50-location.qml:86
469msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
475msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
470−msgstr ""
476+msgstr "GPS ਦੀ ਵਰਤੋਂ, ਅਣਜਾਣ Wi-Fi ਅਤੇ ਸੈਲੂਲਰ ਨੈੱਟਵਰਕ ਇੰਫ਼ੋ (ਸ਼ਿਫ਼ਾਰਸ)"
471
477
472#. TRANSLATORS: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
478#. TRANSLATORS: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
473#: qml/Wizard/Pages/50-location.qml:103
479#: qml/Wizard/Pages/50-location.qml:103
@@ -475,81 +481,87 @@ msgid ""
475"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
481"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
476"conditions</a>."
482"conditions</a>."
477msgstr ""
483msgstr ""
484+"ਇਸ ਵਿਕਲਪ ਨੂੰ ਚੁਣਨ ਦੁਆਰਾ, ਤੁਸੀਂ ਨੋਕੀਆ HERE <a href='#'>ਨਿਯਮ ਅਤੇ ਸ਼ਰਤਾਂ</a>ਨੂੰ "
485+"ਪ੍ਰਵਾਨ ਕਰਦੇ ਹੋ।"
478
486
479#: qml/Wizard/Pages/50-location.qml:112
487#: qml/Wizard/Pages/50-location.qml:112
480msgid "Not at all"
488msgid "Not at all"
481−msgstr ""
489+msgstr "ਬਿਲਕੁਲ ਨਹੀਂ"
482
490
483#: qml/Wizard/Pages/50-location.qml:124
491#: qml/Wizard/Pages/50-location.qml:124
484msgid "You can change your mind later in <b>System Settings</b>."
492msgid "You can change your mind later in <b>System Settings</b>."
485−msgstr ""
493+msgstr "ਤੁਸੀਂ ਬਾਅਦ ਵਿੱਚ <b>ਸਿਸਟਮ ਸੈਟਿੰਗ</b>ਵਿੱਚ ਆਪਣਾ ਮਨ ਬਦਲ ਸਕਦੇ ਹੋ।"
486
494
487#: qml/Wizard/Pages/60-reporting.qml:24
495#: qml/Wizard/Pages/60-reporting.qml:24
488msgid "Improving your experience"
496msgid "Improving your experience"
489−msgstr ""
497+msgstr "ਤੁਹਾਡਾ ਅਨੁਭਵ ਵਧਾ ਰਿਹਾ"
490
498
491#: qml/Wizard/Pages/60-reporting.qml:36
499#: qml/Wizard/Pages/60-reporting.qml:36
492msgid ""
500msgid ""
493"Your phone is set up to automatically report errors to Canonical and its "
501"Your phone is set up to automatically report errors to Canonical and its "
494"partners, the makers of the operating system."
502"partners, the makers of the operating system."
495msgstr ""
503msgstr ""
504+"ਤੁਹਾਡੇ ਫ਼ੋਨ ਨੂੰ ਕੈਨੋਨੀਕਲ ਅਤੇ ਉਸਦੇ ਸਾਥੀਆਂ, ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਦੇ ਨਿਰਮਾਤਾਵਾਂ ਨੂੰ "
505+"ਆਪਣੇ ਆਪ ਖਾਮੀ ਸੂਚਨਾਵਾਂ ਭੇਜਣ ਲਈ ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਹੈ।"
496
506
497#: qml/Wizard/Pages/60-reporting.qml:43
507#: qml/Wizard/Pages/60-reporting.qml:43
498msgid ""
508msgid ""
499"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
509"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
500"Privacy</b>"
510"Privacy</b>"
501msgstr ""
511msgstr ""
512+"ਇਸ ਨੂੰ <b>ਸਿਸਟਮ ਸੈਟਿੰਗ</b> ਅਧੀਨ <b>ਸੁਰੱਖਿਆ &amp; ਪਰਦੇਦਾਰੀ</b>ਵਿੱਚ ਬੰਦ ਕੀਤਾ "
513+"ਜਾ ਸਕਦਾ"
502
514
503#: qml/Wizard/Pages/80-finished.qml:24
515#: qml/Wizard/Pages/80-finished.qml:24
504msgid "All done"
516msgid "All done"
505−msgstr ""
517+msgstr "ਸੱਭ ਮੁਕੰਮਲ"
506
518
507#: qml/Wizard/Pages/80-finished.qml:39
519#: qml/Wizard/Pages/80-finished.qml:39
508msgid "Nice work!"
520msgid "Nice work!"
509−msgstr ""
521+msgstr "ਚੰਗਾ ਕੰਮ!"
510
522
511#: qml/Wizard/Pages/80-finished.qml:46
523#: qml/Wizard/Pages/80-finished.qml:46
512msgid "Your phone is now ready to use."
524msgid "Your phone is now ready to use."
513−msgstr ""
525+msgstr "ਤੁਹਾਡਾ ਫ਼ੋਨ ਹੁਣ ਵਰਤੋਂ ਲਈ ਤਿਆਰ ਹੈ।"
514
526
515#: qml/Wizard/Pages/80-finished.qml:53
527#: qml/Wizard/Pages/80-finished.qml:53
516msgid "Finish"
528msgid "Finish"
517−msgstr ""
529+msgstr "ਮੁਕੰਮਲ"
518
530
519#: qml/Wizard/Pages/here-terms.qml:27
531#: qml/Wizard/Pages/here-terms.qml:27
520msgid "Terms & Conditions"
532msgid "Terms & Conditions"
521−msgstr ""
533+msgstr "ਨਿਯਮ ਅਤੇ ਸ਼ਰਤਾਂ"
522
534
523#: qml/Wizard/Pages/passwd-confirm.qml:49
535#: qml/Wizard/Pages/passwd-confirm.qml:49
524msgid "Confirm passphrase"
536msgid "Confirm passphrase"
525−msgstr ""
537+msgstr "ਵਾਕ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"
526
538
527#: qml/Wizard/Pages/passwd-confirm.qml:50
539#: qml/Wizard/Pages/passwd-confirm.qml:50
528msgid "Confirm passcode"
540msgid "Confirm passcode"
529−msgstr ""
541+msgstr "ਪਾਸਕੋਡ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"
530
542
531#: qml/Wizard/Pages/passwd-confirm.qml:53
543#: qml/Wizard/Pages/passwd-confirm.qml:53
532#: qml/Wizard/Pages/passwd-confirm.qml:54
544#: qml/Wizard/Pages/passwd-confirm.qml:54
533msgid "Please try again."
545msgid "Please try again."
534−msgstr ""
546+msgstr "ਕਿਰਪਾ ਕਰਕੇ ਮੁੜ ਕੋਸ਼ਿਸ ਕਰੋ।"
535
547
536#: qml/Wizard/Pages/passwd-set.qml:61
548#: qml/Wizard/Pages/passwd-set.qml:61
537msgid "Choose your passcode"
549msgid "Choose your passcode"
538−msgstr ""
550+msgstr "ਆਪਣਾ ਪਾਸਕੋਡ ਚੁਣੋ"
539
551
540#: qml/Wizard/Pages/passwd-set.qml:68
552#: qml/Wizard/Pages/passwd-set.qml:68
541msgid "Passphrase must be 4 characters long"
553msgid "Passphrase must be 4 characters long"
542−msgstr ""
554+msgstr "ਵਾਕ 4 ਅੱਖਰ ਜਿੰਨ੍ਹਾ ਵੱਡਾ ਹੋਣਾ ਚਾਹੀਦਾ"
543
555
544#: qml/Wizard/StackButton.qml:39
556#: qml/Wizard/StackButton.qml:39
545#, qt-format
557#, qt-format
546msgid "〈 %1"
558msgid "〈 %1"
547−msgstr ""
559+msgstr "〈 %1"
548
560
549#: qml/Wizard/StackButton.qml:42
561#: qml/Wizard/StackButton.qml:42
550#, qt-format
562#, qt-format
551msgid "%1 〉"
563msgid "%1 〉"
552−msgstr ""
564+msgstr "%1 〉"
553
565
554#~ msgid "Top edge"
566#~ msgid "Top edge"
555#~ msgstr "ਉੱਪਰੀ ਕੰਢਾ"
567#~ msgstr "ਉੱਪਰੀ ਕੰਢਾ"
po/pt.po+56−55
@@ -8,102 +8,103 @@ msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\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-02-25 08:57-0500\n"
10"POT-Creation-Date: 2015-02-25 08:57-0500\n"
11−"PO-Revision-Date: 2015-02-20 19:06+0000\n"
11+"PO-Revision-Date: 2015-03-11 15:32+0000\n"
12"Last-Translator: António Miranda <Unknown>\n"
12"Last-Translator: António Miranda <Unknown>\n"
13"Language-Team: Portuguese <pt@li.org>\n"
13"Language-Team: Portuguese <pt@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-03-04 05:56+0000\n"
18+"X-Launchpad-Export-Date: 2015-03-12 04:59+0000\n"
19−"X-Generator: Launchpad (build 17361)\n"
19+"X-Generator: Launchpad (build 17389)\n"
20
20
21−#: plugins/LightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
23msgstr "Palavra-passe: "
23msgstr "Palavra-passe: "
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:91
27msgid "Pin shortcut"
27msgid "Pin shortcut"
28msgstr "Afixar atalho"
28msgstr "Afixar atalho"
29
29
30−#: plugins/Unity/Launcher/launcheritem.cpp:100
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
31msgid "Unpin shortcut"
31msgid "Unpin shortcut"
32msgstr "Remover atalho"
32msgstr "Remover atalho"
33
33
34−#: qml/Components/DelayedLockscreen.qml:49
34+#: qml/Components/DelayedLockscreen.qml:47
35msgid "Device Locked"
35msgid "Device Locked"
36msgstr "Dispositivo bloqueado"
36msgstr "Dispositivo bloqueado"
37
37
38−#: qml/Components/DelayedLockscreen.qml:64
38+#: qml/Components/DelayedLockscreen.qml:62
39msgid "You have been locked out due to too many failed passphrase attempts."
39msgid "You have been locked out due to too many failed passphrase attempts."
40msgstr "Foi bloqueado devido a muitas tentativas falhadas da frase-senha."
40msgstr "Foi bloqueado devido a muitas tentativas falhadas da frase-senha."
41
41
42−#: qml/Components/DelayedLockscreen.qml:65
42+#: qml/Components/DelayedLockscreen.qml:63
43msgid "You have been locked out due to too many failed passcode attempts."
43msgid "You have been locked out due to too many failed passcode attempts."
44msgstr "Foi bloqueado devido a muitas tentativas falhadas da senha."
44msgstr "Foi bloqueado devido a muitas tentativas falhadas da senha."
45
45
46−#: qml/Components/DelayedLockscreen.qml:74
46+#: qml/Components/DelayedLockscreen.qml:72
47#, qt-format
47#, qt-format
48msgid "Please wait %1 minute and then try again…"
48msgid "Please wait %1 minute and then try again…"
49msgid_plural "Please wait %1 minutes and then try again…"
49msgid_plural "Please wait %1 minutes and then try again…"
50msgstr[0] "Por favor, aguarde %1 minuto e tente novamente…"
50msgstr[0] "Por favor, aguarde %1 minuto e tente novamente…"
51msgstr[1] "Por favor, aguarde %1 minutos e tente novamente…"
51msgstr[1] "Por favor, aguarde %1 minutos e tente novamente…"
52
52
53−#: qml/Components/Dialogs.qml:87
53+#: qml/Components/Dialogs.qml:74
54msgid "Log out"
54msgid "Log out"
55msgstr "Terminar sessão"
55msgstr "Terminar sessão"
56
56
57−#: qml/Components/Dialogs.qml:88
57+#: qml/Components/Dialogs.qml:75
58msgid "Are you sure you want to log out?"
58msgid "Are you sure you want to log out?"
59msgstr "Tem a certeza de que quer sair?"
59msgstr "Tem a certeza de que quer sair?"
60
60
61#: qml/Components/Dialogs.qml:90
61#: qml/Components/Dialogs.qml:90
62msgid "Lock"
62msgid "Lock"
63−msgstr ""
63+msgstr "Bloquear"
64
64
65#: qml/Components/Dialogs.qml:97
65#: qml/Components/Dialogs.qml:97
66msgid "Log Out"
66msgid "Log Out"
67−msgstr ""
67+msgstr "Terminar sessão"
68
68
69−#: qml/Components/Dialogs.qml:104 qml/Components/Dialogs.qml:135
69+#: qml/Components/Dialogs.qml:171
70−#: qml/Components/Dialogs.qml:191
71msgid "Cancel"
70msgid "Cancel"
72msgstr "Cancelar"
71msgstr "Cancelar"
73
72
74−#: qml/Components/Dialogs.qml:116
73+#: qml/Components/Dialogs.qml:98
75msgid "Shut down"
74msgid "Shut down"
76msgstr "Encerrar"
75msgstr "Encerrar"
77
76
78−#: qml/Components/Dialogs.qml:117
77+#: qml/Components/Dialogs.qml:99
79msgid "Are you sure you want to shut down?"
78msgid "Are you sure you want to shut down?"
80msgstr "Tem a certeza de que quer encerrar?"
79msgstr "Tem a certeza de que quer encerrar?"
81
80
82−#: qml/Components/Dialogs.qml:119 qml/Components/Dialogs.qml:147
81+#: qml/Components/Dialogs.qml:123
83msgid "Reboot"
82msgid "Reboot"
84msgstr "Reiniciar"
83msgstr "Reiniciar"
85
84
86#: qml/Components/Dialogs.qml:127
85#: qml/Components/Dialogs.qml:127
87msgid "Shutdown"
86msgid "Shutdown"
88−msgstr ""
87+msgstr "Encerrar"
89
88
90−#: qml/Components/Dialogs.qml:148
89+#: qml/Components/Dialogs.qml:124
91msgid "Are you sure you want to reboot?"
90msgid "Are you sure you want to reboot?"
92msgstr "Tem a certeza de que quer reiniciar?"
91msgstr "Tem a certeza de que quer reiniciar?"
93
92
94−#: qml/Components/Dialogs.qml:150
93+#: qml/Components/Dialogs.qml:77 qml/Components/Dialogs.qml:101
94+#: qml/Components/Dialogs.qml:126
95msgid "No"
95msgid "No"
96msgstr "Não"
96msgstr "Não"
97
97
98−#: qml/Components/Dialogs.qml:156
98+#: qml/Components/Dialogs.qml:84 qml/Components/Dialogs.qml:108
99+#: qml/Components/Dialogs.qml:133
99msgid "Yes"
100msgid "Yes"
100msgstr "Sim"
101msgstr "Sim"
101
102
102−#: qml/Components/Dialogs.qml:170
103+#: qml/Components/Dialogs.qml:148
103msgid "Power"
104msgid "Power"
104msgstr "Energia"
105msgstr "Energia"
105
106
106−#: qml/Components/Dialogs.qml:171
107+#: qml/Components/Dialogs.qml:149
107msgid ""
108msgid ""
108"Are you sure you would like\n"
109"Are you sure you would like\n"
109"to power off?"
110"to power off?"
@@ -111,52 +112,52 @@ msgstr ""
111"Tem a certeza de quer\n"
112"Tem a certeza de quer\n"
112"desligar?"
113"desligar?"
113
114
114−#: qml/Components/Dialogs.qml:173
115+#: qml/Components/Dialogs.qml:151
115msgid "Power off"
116msgid "Power off"
116msgstr "Desligar"
117msgstr "Desligar"
117
118
118−#: qml/Components/Dialogs.qml:182
119+#: qml/Components/Dialogs.qml:161
119msgid "Restart"
120msgid "Restart"
120msgstr "Reiniciar"
121msgstr "Reiniciar"
121
122
122−#: qml/Components/Lockscreen.qml:238
123+#: qml/Components/Lockscreen.qml:223
123msgid "Return to Call"
124msgid "Return to Call"
124msgstr "Retorne para chamar"
125msgstr "Retorne para chamar"
125
126
126−#: qml/Components/Lockscreen.qml:238
127+#: qml/Components/Lockscreen.qml:223
127msgid "Emergency Call"
128msgid "Emergency Call"
128msgstr "Chamada de emergência"
129msgstr "Chamada de emergência"
129
130
130−#: qml/Components/Lockscreen.qml:270
131+#: qml/Components/Lockscreen.qml:255
131msgid "OK"
132msgid "OK"
132msgstr "OK"
133msgstr "OK"
133
134
134−#: qml/Dash/GenericScopeView.qml:528 qml/Dash/GenericScopeView.qml:686
135+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
135msgid "See less"
136msgid "See less"
136msgstr "Ver menos"
137msgstr "Ver menos"
137
138
138−#: qml/Dash/GenericScopeView.qml:528
139+#: qml/Dash/GenericScopeView.qml:434
139msgid "See all"
140msgid "See all"
140msgstr "Ver todos"
141msgstr "Ver todos"
141
142
142−#: qml/Dash/GenericScopeView.qml:590 qml/Dash/PageHeader.qml:276
143+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:268
143#: qml/Panel/SearchIndicator.qml:27
144#: qml/Panel/SearchIndicator.qml:27
144msgid "Search"
145msgid "Search"
145msgstr "Procurar"
146msgstr "Procurar"
146
147
147−#: qml/Dash/PageHeader.qml:269
148+#: qml/Dash/PageHeader.qml:261
148msgid "Store"
149msgid "Store"
149msgstr "Store"
150msgstr "Store"
150
151
151−#: qml/Dash/PageHeader.qml:286
152+#: qml/Dash/PageHeader.qml:278
152msgid "Settings"
153msgid "Settings"
153msgstr "Definições"
154msgstr "Definições"
154
155
155−#: qml/Dash/PageHeader.qml:293
156+#: qml/Dash/PageHeader.qml:285
156msgid "Remove from Favorites"
157msgid "Remove from Favorites"
157msgstr "Remover dos favoritos"
158msgstr "Remover dos favoritos"
158
159
159−#: qml/Dash/PageHeader.qml:293
160+#: qml/Dash/PageHeader.qml:285
160msgid "Add to Favorites"
161msgid "Add to Favorites"
161msgstr "Adicionar aos favoritos"
162msgstr "Adicionar aos favoritos"
162
163
@@ -192,43 +193,43 @@ msgstr "Solte para atualizar..."
192msgid "Enable location data"
193msgid "Enable location data"
193msgstr "Ativar dados de localização"
194msgstr "Ativar dados de localização"
194
195
195−#: qml/Dash/ScopesList.qml:66
196+#: qml/Dash/ScopesList.qml:63
196msgid "Manage"
197msgid "Manage"
197msgstr "Gerir"
198msgstr "Gerir"
198
199
199−#: qml/Dash/ScopesList.qml:112
200+#: qml/Dash/ScopesList.qml:107
200msgid "Home"
201msgid "Home"
201msgstr "Página inicial"
202msgstr "Página inicial"
202
203
203−#: qml/Dash/ScopesList.qml:113
204+#: qml/Dash/ScopesList.qml:108
204msgid "Also installed"
205msgid "Also installed"
205msgstr "Também instalado"
206msgstr "Também instalado"
206
207
207−#: qml/Greeter/CoverPage.qml:107
208+#: qml/Greeter/Greeter.qml:174
208msgid "Unlock"
209msgid "Unlock"
209msgstr "Desbloquear"
210msgstr "Desbloquear"
210
211
211#: qml/Greeter/LoginList.qml:236
212#: qml/Greeter/LoginList.qml:236
212msgid "Retry"
213msgid "Retry"
213−msgstr ""
214+msgstr "Tentar novamente"
214
215
215#: qml/Greeter/LoginList.qml:237
216#: qml/Greeter/LoginList.qml:237
216msgid "Tap to unlock"
217msgid "Tap to unlock"
217−msgstr ""
218+msgstr "Toque para desbloquear"
218
219
219−#: qml/Greeter/NarrowView.qml:53 qml/Wizard/Pages/passwd-confirm.qml:53
220+#: qml/Shell.qml:444
220msgid "Sorry, incorrect passphrase."
221msgid "Sorry, incorrect passphrase."
221msgstr "Desculpe, frase de acesso incorreta."
222msgstr "Desculpe, frase de acesso incorreta."
222
223
223−#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:54
224+#: qml/Shell.qml:445
224msgid "Sorry, incorrect passcode."
225msgid "Sorry, incorrect passcode."
225msgstr "Desculpe, senha incorreta."
226msgstr "Desculpe, senha incorreta."
226
227
227−#: qml/Greeter/NarrowView.qml:55
228+#: qml/Shell.qml:446
228msgid "This will be your last attempt."
229msgid "This will be your last attempt."
229msgstr "Esta será a sua última tentativa."
230msgstr "Esta será a sua última tentativa."
230
231
231−#: qml/Greeter/NarrowView.qml:57
232+#: qml/Shell.qml:448
232msgid ""
233msgid ""
233"If passphrase is entered incorrectly, your phone will conduct a factory "
234"If passphrase is entered incorrectly, your phone will conduct a factory "
234"reset and all personal data will be deleted."
235"reset and all personal data will be deleted."
@@ -236,7 +237,7 @@ msgstr ""
236"Se a frase de acesso for introduzida incorretamente, o seu telemóvel vai "
237"Se a frase de acesso for introduzida incorretamente, o seu telemóvel vai "
237"proceder ao restauro de fábrica e apagará toda a sua informação pessoal."
238"proceder ao restauro de fábrica e apagará toda a sua informação pessoal."
238
239
239−#: qml/Greeter/NarrowView.qml:58
240+#: qml/Shell.qml:449
240msgid ""
241msgid ""
241"If passcode is entered incorrectly, your phone will conduct a factory reset "
242"If passcode is entered incorrectly, your phone will conduct a factory reset "
242"and all personal data will be deleted."
243"and all personal data will be deleted."
@@ -244,33 +245,33 @@ msgstr ""
244"Se a senha for introduzida incorretamente, o seu telemóvel vai apagar todos "
245"Se a senha for introduzida incorretamente, o seu telemóvel vai apagar todos "
245"os seus dados pessoais."
246"os seus dados pessoais."
246
247
247−#: qml/Greeter/NarrowView.qml:115
248+#: qml/Shell.qml:402
248#, qt-format
249#, qt-format
249msgid "Enter %1"
250msgid "Enter %1"
250msgstr "Introduziu %1"
251msgstr "Introduziu %1"
251
252
252−#: qml/Greeter/NarrowView.qml:116 qml/Wizard/Pages/passwd-set.qml:60
253+#: qml/Shell.qml:394
253msgid "Enter passphrase"
254msgid "Enter passphrase"
254msgstr "Indique a frase-senha"
255msgstr "Indique a frase-senha"
255
256
256−#: qml/Greeter/NarrowView.qml:117
257+#: qml/Shell.qml:398
257msgid "Enter passcode"
258msgid "Enter passcode"
258msgstr "Introduza senha"
259msgstr "Introduza senha"
259
260
260−#: qml/Greeter/NarrowView.qml:118
261+#: qml/Shell.qml:403
261#, qt-format
262#, qt-format
262msgid "Sorry, incorrect %1"
263msgid "Sorry, incorrect %1"
263msgstr "Desculpe, incorreto %1"
264msgstr "Desculpe, incorreto %1"
264
265
265−#: qml/Greeter/NarrowView.qml:119
266+#: qml/Shell.qml:395
266msgid "Sorry, incorrect passphrase"
267msgid "Sorry, incorrect passphrase"
267msgstr "Desculpe, frase-senha incorreta"
268msgstr "Desculpe, frase-senha incorreta"
268
269
269−#: qml/Greeter/NarrowView.qml:120
270+#: qml/Shell.qml:396
270msgid "Please re-enter"
271msgid "Please re-enter"
271msgstr "Por favor, volte a introduzir"
272msgstr "Por favor, volte a introduzir"
272
273
273−#: qml/Greeter/NarrowView.qml:121
274+#: qml/Shell.qml:399
274msgid "Sorry, incorrect passcode"
275msgid "Sorry, incorrect passcode"
275msgstr "Desculpe, senha incorreta"
276msgstr "Desculpe, senha incorreta"
276
277
po/pt_BR.po+4−4
@@ -8,14 +8,14 @@ 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-02-25 08:57-0500\n"
10"POT-Creation-Date: 2015-02-25 08:57-0500\n"
11−"PO-Revision-Date: 2015-03-09 12:47+0000\n"
11+"PO-Revision-Date: 2015-03-13 17:03+0000\n"
12−"Last-Translator: Rafael Neri <Unknown>\n"
12+"Last-Translator: Tiago Hillebrandt <tiagohillebrandt@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-03-10 05:47+0000\n"
18+"X-Launchpad-Export-Date: 2015-03-14 05:32+0000\n"
19"X-Generator: Launchpad (build 17389)\n"
19"X-Generator: Launchpad (build 17389)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
@@ -258,7 +258,7 @@ msgstr "Digite a frase secreta"
258
258
259#: qml/Shell.qml:398
259#: qml/Shell.qml:398
260msgid "Enter passcode"
260msgid "Enter passcode"
261−msgstr "Digite o código de acesso"
261+msgstr "Informe sua senha"
262
262
263#: qml/Shell.qml:403
263#: qml/Shell.qml:403
264#, qt-format
264#, qt-format
po/unity8.pot+50−22
@@ -8,7 +8,7 @@ msgid ""
8msgstr ""
8msgstr ""
9"Project-Id-Version: unity8\n"
9"Project-Id-Version: unity8\n"
10"Report-Msgid-Bugs-To: \n"
10"Report-Msgid-Bugs-To: \n"
11−"POT-Creation-Date: 2015-02-25 08:57-0500\n"
11+"POT-Creation-Date: 2015-03-13 11:06+0100\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -50,70 +50,84 @@ msgid_plural "Please wait %1 minutes and then try again…"
50msgstr[0] ""
50msgstr[0] ""
51msgstr[1] ""
51msgstr[1] ""
52
52
53−#: qml/Components/Dialogs.qml:87
53+#: qml/Components/Dialogs.qml:67
54+msgctxt "Title: Lock/Log out dialog"
54msgid "Log out"
55msgid "Log out"
55msgstr ""
56msgstr ""
56
57
57−#: qml/Components/Dialogs.qml:88
58+#: qml/Components/Dialogs.qml:68
58msgid "Are you sure you want to log out?"
59msgid "Are you sure you want to log out?"
59msgstr ""
60msgstr ""
60
61
61−#: qml/Components/Dialogs.qml:90
62+#: qml/Components/Dialogs.qml:70
63+msgctxt "Button: Lock the system"
62msgid "Lock"
64msgid "Lock"
63msgstr ""
65msgstr ""
64
66
65−#: qml/Components/Dialogs.qml:97
67+#: qml/Components/Dialogs.qml:77
68+msgctxt "Button: Log out from the system"
66msgid "Log Out"
69msgid "Log Out"
67msgstr ""
70msgstr ""
68
71
69−#: qml/Components/Dialogs.qml:104 qml/Components/Dialogs.qml:135
72+#: qml/Components/Dialogs.qml:84 qml/Components/Dialogs.qml:115
70−#: qml/Components/Dialogs.qml:191
73+#: qml/Components/Dialogs.qml:171
71msgid "Cancel"
74msgid "Cancel"
72msgstr ""
75msgstr ""
73
76
74−#: qml/Components/Dialogs.qml:116
77+#: qml/Components/Dialogs.qml:96
78+msgctxt "Title: Reboot/Shut down dialog"
75msgid "Shut down"
79msgid "Shut down"
76msgstr ""
80msgstr ""
77
81
78−#: qml/Components/Dialogs.qml:117
82+#: qml/Components/Dialogs.qml:97
79msgid "Are you sure you want to shut down?"
83msgid "Are you sure you want to shut down?"
80msgstr ""
84msgstr ""
81
85
82−#: qml/Components/Dialogs.qml:119 qml/Components/Dialogs.qml:147
86+#: qml/Components/Dialogs.qml:99
87+msgctxt "Button: Reboot the system"
83msgid "Reboot"
88msgid "Reboot"
84msgstr ""
89msgstr ""
85
90
91+#: qml/Components/Dialogs.qml:107
92+msgctxt "Button: Shut down the system"
93+msgid "Shut down"
94+msgstr ""
95+
86#: qml/Components/Dialogs.qml:127
96#: qml/Components/Dialogs.qml:127
97+msgctxt "Title: Reboot dialog"
87−msgid "Shutdown"
98+msgid "Reboot"
88msgstr ""
99msgstr ""
89
100
90−#: qml/Components/Dialogs.qml:148
101+#: qml/Components/Dialogs.qml:128
91msgid "Are you sure you want to reboot?"
102msgid "Are you sure you want to reboot?"
92msgstr ""
103msgstr ""
93
104
94−#: qml/Components/Dialogs.qml:150
105+#: qml/Components/Dialogs.qml:130
95msgid "No"
106msgid "No"
96msgstr ""
107msgstr ""
97
108
98−#: qml/Components/Dialogs.qml:156
109+#: qml/Components/Dialogs.qml:136
99msgid "Yes"
110msgid "Yes"
100msgstr ""
111msgstr ""
101
112
102−#: qml/Components/Dialogs.qml:170
113+#: qml/Components/Dialogs.qml:150
114+msgctxt "Title: Power off/Restart dialog"
103msgid "Power"
115msgid "Power"
104msgstr ""
116msgstr ""
105
117
106−#: qml/Components/Dialogs.qml:171
118+#: qml/Components/Dialogs.qml:151
107msgid ""
119msgid ""
108"Are you sure you would like\n"
120"Are you sure you would like\n"
109"to power off?"
121"to power off?"
110msgstr ""
122msgstr ""
111
123
112−#: qml/Components/Dialogs.qml:173
124+#: qml/Components/Dialogs.qml:153
125+msgctxt "Button: Power off the system"
113msgid "Power off"
126msgid "Power off"
114msgstr ""
127msgstr ""
115
128
116−#: qml/Components/Dialogs.qml:182
129+#: qml/Components/Dialogs.qml:162
130+msgctxt "Button: Restart the system"
117msgid "Restart"
131msgid "Restart"
118msgstr ""
132msgstr ""
119
133
@@ -129,23 +143,29 @@ msgstr ""
129msgid "OK"
143msgid "OK"
130msgstr ""
144msgstr ""
131
145
132−#: qml/Dash/GenericScopeView.qml:528 qml/Dash/GenericScopeView.qml:686
146+#: qml/Dash/GenericScopeView.qml:533 qml/Dash/GenericScopeView.qml:691
133msgid "See less"
147msgid "See less"
134msgstr ""
148msgstr ""
135
149
136−#: qml/Dash/GenericScopeView.qml:528
150+#: qml/Dash/GenericScopeView.qml:533
137msgid "See all"
151msgid "See all"
138msgstr ""
152msgstr ""
139
153
140−#: qml/Dash/GenericScopeView.qml:590 qml/Dash/PageHeader.qml:276
154+#: qml/Dash/GenericScopeView.qml:595
141−#: qml/Panel/SearchIndicator.qml:27
155+msgctxt "Label: Hint for dash search line edit"
142msgid "Search"
156msgid "Search"
143msgstr ""
157msgstr ""
144
158
145#: qml/Dash/PageHeader.qml:269
159#: qml/Dash/PageHeader.qml:269
160+msgctxt "Button: The Ubuntu Store"
146msgid "Store"
161msgid "Store"
147msgstr ""
162msgstr ""
148
163
164+#: qml/Dash/PageHeader.qml:276
165+msgctxt "Button: Shown in Page Header Menu"
166+msgid "Search"
167+msgstr ""
168+
149#: qml/Dash/PageHeader.qml:286
169#: qml/Dash/PageHeader.qml:286
150msgid "Settings"
170msgid "Settings"
151msgstr ""
171msgstr ""
@@ -309,6 +329,7 @@ msgid "Failed, tap to retry"
309msgstr ""
329msgstr ""
310
330
311#: qml/Panel/Indicators/MessageMenuItemFactory.qml:149
331#: qml/Panel/Indicators/MessageMenuItemFactory.qml:149
332+msgctxt "Label: Hint in message indicator line edit"
312msgid "Reply"
333msgid "Reply"
313msgstr ""
334msgstr ""
314
335
@@ -373,6 +394,7 @@ msgid "View all your running tasks."
373msgstr ""
394msgstr ""
374
395
375#: qml/Wizard/Page.qml:89
396#: qml/Wizard/Page.qml:89
397+msgctxt "Button: Go back one page in the Wizard"
376msgid "Back"
398msgid "Back"
377msgstr ""
399msgstr ""
378
400
@@ -416,26 +438,32 @@ msgid "Please select how you’d like to unlock your phone."
416msgstr ""
438msgstr ""
417
439
418#: qml/Wizard/Pages/30-passwd-type.qml:97
440#: qml/Wizard/Pages/30-passwd-type.qml:97
441+msgctxt "Label: Type of security method"
419msgid "Swipe"
442msgid "Swipe"
420msgstr ""
443msgstr ""
421
444
422#: qml/Wizard/Pages/30-passwd-type.qml:98
445#: qml/Wizard/Pages/30-passwd-type.qml:98
446+msgctxt "Label: Description of security method"
423msgid "No security"
447msgid "No security"
424msgstr ""
448msgstr ""
425
449
426#: qml/Wizard/Pages/30-passwd-type.qml:100
450#: qml/Wizard/Pages/30-passwd-type.qml:100
451+msgctxt "Label: Type of security method"
427msgid "Passcode"
452msgid "Passcode"
428msgstr ""
453msgstr ""
429
454
430#: qml/Wizard/Pages/30-passwd-type.qml:101
455#: qml/Wizard/Pages/30-passwd-type.qml:101
456+msgctxt "Label: Description of security method"
431msgid "4 digits only"
457msgid "4 digits only"
432msgstr ""
458msgstr ""
433
459
434#: qml/Wizard/Pages/30-passwd-type.qml:103
460#: qml/Wizard/Pages/30-passwd-type.qml:103
461+msgctxt "Label: Type of security method"
435msgid "Passphrase"
462msgid "Passphrase"
436msgstr ""
463msgstr ""
437
464
438#: qml/Wizard/Pages/30-passwd-type.qml:104
465#: qml/Wizard/Pages/30-passwd-type.qml:104
466+msgctxt "Label: Description of security method"
439msgid "Numbers and letters"
467msgid "Numbers and letters"
440msgstr ""
468msgstr ""
441
469
po/update-unity-pot+1
@@ -22,6 +22,7 @@ xgettext \
22 --keyword=tr \
22 --keyword=tr \
23 --keyword=tr:1,2 \
23 --keyword=tr:1,2 \
24 --keyword=dtr:2 \
24 --keyword=dtr:2 \
25+ --keyword=ctr:1c,2 \
25 --package-name="unity8" \
26 --package-name="unity8" \
26 --copyright-holder="Canonical Ltd." \
27 --copyright-holder="Canonical Ltd." \
27 --from-code="UTF-8"
28 --from-code="UTF-8"
po/zh_TW.po+126−124
@@ -8,152 +8,154 @@ 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-02-25 08:57-0500\n"
10"POT-Creation-Date: 2015-02-25 08:57-0500\n"
11−"PO-Revision-Date: 2014-11-19 15:05+0000\n"
11+"PO-Revision-Date: 2015-03-15 06:06+0000\n"
12−"Last-Translator: Walter Cheuk <wwycheuk@gmail.com>\n"
12+"Last-Translator: Cheng-Chia Tseng <pswo10680@gmail.com>\n"
13"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
13"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-03-04 05:57+0000\n"
18+"X-Launchpad-Export-Date: 2015-03-16 06:02+0000\n"
19−"X-Generator: Launchpad (build 17361)\n"
19+"X-Generator: Launchpad (build 17389)\n"
20+"Language: zh_TW\n"
20
21
21−#: plugins/LightDM/Greeter.cpp:112
22+#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
23msgid "Password: "
23msgstr "密碼: "
24msgstr "密碼: "
24
25
25#: plugins/Unity/Launcher/launcheritem.cpp:45
26#: plugins/Unity/Launcher/launcheritem.cpp:45
26−#: plugins/Unity/Launcher/launcheritem.cpp:100
27+#: plugins/Unity/Launcher/launcheritem.cpp:91
27msgid "Pin shortcut"
28msgid "Pin shortcut"
28msgstr "釘住捷徑"
29msgstr "釘住捷徑"
29
30
30−#: plugins/Unity/Launcher/launcheritem.cpp:100
31+#: plugins/Unity/Launcher/launcheritem.cpp:91
31msgid "Unpin shortcut"
32msgid "Unpin shortcut"
32msgstr "取消捷徑釘選"
33msgstr "取消捷徑釘選"
33
34
34−#: qml/Components/DelayedLockscreen.qml:49
35+#: qml/Components/DelayedLockscreen.qml:47
35msgid "Device Locked"
36msgid "Device Locked"
36msgstr "裝置已鎖定"
37msgstr "裝置已鎖定"
37
38
38−#: qml/Components/DelayedLockscreen.qml:64
39+#: qml/Components/DelayedLockscreen.qml:62
39msgid "You have been locked out due to too many failed passphrase attempts."
40msgid "You have been locked out due to too many failed passphrase attempts."
40msgstr "因為嘗試輸入太多次錯誤的密碼,裝置已經被鎖定。"
41msgstr "因為嘗試輸入太多次錯誤的密碼,裝置已經被鎖定。"
41
42
42−#: qml/Components/DelayedLockscreen.qml:65
43+#: qml/Components/DelayedLockscreen.qml:63
43msgid "You have been locked out due to too many failed passcode attempts."
44msgid "You have been locked out due to too many failed passcode attempts."
44msgstr "因為嘗試輸入太多次錯誤的密碼,裝置已經被鎖定。"
45msgstr "因為嘗試輸入太多次錯誤的密碼,裝置已經被鎖定。"
45
46
46−#: qml/Components/DelayedLockscreen.qml:74
47+#: qml/Components/DelayedLockscreen.qml:72
47#, qt-format
48#, qt-format
48msgid "Please wait %1 minute and then try again…"
49msgid "Please wait %1 minute and then try again…"
49msgid_plural "Please wait %1 minutes and then try again…"
50msgid_plural "Please wait %1 minutes and then try again…"
50msgstr[0] "請等候 %1 分鐘再試…"
51msgstr[0] "請等候 %1 分鐘再試…"
51
52
52−#: qml/Components/Dialogs.qml:87
53+#: qml/Components/Dialogs.qml:74
53msgid "Log out"
54msgid "Log out"
54msgstr "登出"
55msgstr "登出"
55
56
56−#: qml/Components/Dialogs.qml:88
57+#: qml/Components/Dialogs.qml:75
57msgid "Are you sure you want to log out?"
58msgid "Are you sure you want to log out?"
58msgstr "確定要登出?"
59msgstr "確定要登出?"
59
60
60#: qml/Components/Dialogs.qml:90
61#: qml/Components/Dialogs.qml:90
61msgid "Lock"
62msgid "Lock"
62−msgstr ""
63+msgstr "鎖定"
63
64
64#: qml/Components/Dialogs.qml:97
65#: qml/Components/Dialogs.qml:97
65msgid "Log Out"
66msgid "Log Out"
66−msgstr ""
67+msgstr "登出"
67
68
68−#: qml/Components/Dialogs.qml:104 qml/Components/Dialogs.qml:135
69+#: qml/Components/Dialogs.qml:171
69−#: qml/Components/Dialogs.qml:191
70msgid "Cancel"
70msgid "Cancel"
71msgstr "取消"
71msgstr "取消"
72
72
73−#: qml/Components/Dialogs.qml:116
73+#: qml/Components/Dialogs.qml:98
74msgid "Shut down"
74msgid "Shut down"
75msgstr "關機"
75msgstr "關機"
76
76
77−#: qml/Components/Dialogs.qml:117
77+#: qml/Components/Dialogs.qml:99
78msgid "Are you sure you want to shut down?"
78msgid "Are you sure you want to shut down?"
79msgstr "確定要關機?"
79msgstr "確定要關機?"
80
80
81−#: qml/Components/Dialogs.qml:119 qml/Components/Dialogs.qml:147
81+#: qml/Components/Dialogs.qml:123
82msgid "Reboot"
82msgid "Reboot"
83msgstr "重新開機"
83msgstr "重新開機"
84
84
85#: qml/Components/Dialogs.qml:127
85#: qml/Components/Dialogs.qml:127
86msgid "Shutdown"
86msgid "Shutdown"
87−msgstr ""
87+msgstr "關機"
88
88
89−#: qml/Components/Dialogs.qml:148
89+#: qml/Components/Dialogs.qml:124
90msgid "Are you sure you want to reboot?"
90msgid "Are you sure you want to reboot?"
91msgstr "確定要重新開機?"
91msgstr "確定要重新開機?"
92
92
93−#: qml/Components/Dialogs.qml:150
93+#: qml/Components/Dialogs.qml:77 qml/Components/Dialogs.qml:101
94+#: qml/Components/Dialogs.qml:126
94msgid "No"
95msgid "No"
95msgstr "否"
96msgstr "否"
96
97
97−#: qml/Components/Dialogs.qml:156
98+#: qml/Components/Dialogs.qml:84 qml/Components/Dialogs.qml:108
99+#: qml/Components/Dialogs.qml:133
98msgid "Yes"
100msgid "Yes"
99msgstr "是"
101msgstr "是"
100
102
101−#: qml/Components/Dialogs.qml:170
103+#: qml/Components/Dialogs.qml:148
102msgid "Power"
104msgid "Power"
103msgstr "關閉電源"
105msgstr "關閉電源"
104
106
105−#: qml/Components/Dialogs.qml:171
107+#: qml/Components/Dialogs.qml:149
106msgid ""
108msgid ""
107"Are you sure you would like\n"
109"Are you sure you would like\n"
108"to power off?"
110"to power off?"
109msgstr "確定要關閉電源?"
111msgstr "確定要關閉電源?"
110
112
111−#: qml/Components/Dialogs.qml:173
113+#: qml/Components/Dialogs.qml:151
112msgid "Power off"
114msgid "Power off"
113msgstr "關閉電源"
115msgstr "關閉電源"
114
116
115−#: qml/Components/Dialogs.qml:182
117+#: qml/Components/Dialogs.qml:161
116msgid "Restart"
118msgid "Restart"
117msgstr "重新啟動"
119msgstr "重新啟動"
118
120
119−#: qml/Components/Lockscreen.qml:238
121+#: qml/Components/Lockscreen.qml:223
120msgid "Return to Call"
122msgid "Return to Call"
121−msgstr ""
123+msgstr "返回通話"
122
124
123−#: qml/Components/Lockscreen.qml:238
125+#: qml/Components/Lockscreen.qml:223
124msgid "Emergency Call"
126msgid "Emergency Call"
125msgstr "緊急通話"
127msgstr "緊急通話"
126
128
127−#: qml/Components/Lockscreen.qml:270
129+#: qml/Components/Lockscreen.qml:255
128msgid "OK"
130msgid "OK"
129msgstr "確定"
131msgstr "確定"
130
132
131−#: qml/Dash/GenericScopeView.qml:528 qml/Dash/GenericScopeView.qml:686
133+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
132msgid "See less"
134msgid "See less"
133msgstr "縮減查看"
135msgstr "縮減查看"
134
136
135−#: qml/Dash/GenericScopeView.qml:528
137+#: qml/Dash/GenericScopeView.qml:434
136msgid "See all"
138msgid "See all"
137msgstr "查看全部"
139msgstr "查看全部"
138
140
139−#: qml/Dash/GenericScopeView.qml:590 qml/Dash/PageHeader.qml:276
141+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:268
140#: qml/Panel/SearchIndicator.qml:27
142#: qml/Panel/SearchIndicator.qml:27
141msgid "Search"
143msgid "Search"
142msgstr "搜尋"
144msgstr "搜尋"
143
145
144−#: qml/Dash/PageHeader.qml:269
146+#: qml/Dash/PageHeader.qml:261
145msgid "Store"
147msgid "Store"
146msgstr "商城"
148msgstr "商城"
147
149
148−#: qml/Dash/PageHeader.qml:286
150+#: qml/Dash/PageHeader.qml:278
149msgid "Settings"
151msgid "Settings"
150msgstr "設定"
152msgstr "設定"
151
153
152−#: qml/Dash/PageHeader.qml:293
154+#: qml/Dash/PageHeader.qml:285
153msgid "Remove from Favorites"
155msgid "Remove from Favorites"
154msgstr "自「最愛」移除"
156msgstr "自「最愛」移除"
155
157
156−#: qml/Dash/PageHeader.qml:293
158+#: qml/Dash/PageHeader.qml:285
157msgid "Add to Favorites"
159msgid "Add to Favorites"
158msgstr "加入到「最愛」"
160msgstr "加入到「最愛」"
159
161
@@ -187,85 +189,85 @@ msgstr "放開以重新整理..."
187
189
188#: qml/Dash/ScopeSettings/ScopeSettingBoolean.qml:43
190#: qml/Dash/ScopeSettings/ScopeSettingBoolean.qml:43
189msgid "Enable location data"
191msgid "Enable location data"
190−msgstr ""
192+msgstr "啟用位置資料"
191
193
192−#: qml/Dash/ScopesList.qml:66
194+#: qml/Dash/ScopesList.qml:63
193msgid "Manage"
195msgid "Manage"
194−msgstr ""
196+msgstr "管理"
195
197
196−#: qml/Dash/ScopesList.qml:112
198+#: qml/Dash/ScopesList.qml:107
197msgid "Home"
199msgid "Home"
198−msgstr ""
200+msgstr "家屋"
199
201
200−#: qml/Dash/ScopesList.qml:113
202+#: qml/Dash/ScopesList.qml:108
201msgid "Also installed"
203msgid "Also installed"
202−msgstr ""
204+msgstr "也有安裝"
203
205
204−#: qml/Greeter/CoverPage.qml:107
206+#: qml/Greeter/Greeter.qml:174
205msgid "Unlock"
207msgid "Unlock"
206msgstr "解鎖"
208msgstr "解鎖"
207
209
208#: qml/Greeter/LoginList.qml:236
210#: qml/Greeter/LoginList.qml:236
209msgid "Retry"
211msgid "Retry"
210−msgstr ""
212+msgstr "重試"
211
213
212#: qml/Greeter/LoginList.qml:237
214#: qml/Greeter/LoginList.qml:237
213msgid "Tap to unlock"
215msgid "Tap to unlock"
214−msgstr ""
216+msgstr "點按以解鎖"
215
217
216−#: qml/Greeter/NarrowView.qml:53 qml/Wizard/Pages/passwd-confirm.qml:53
218+#: qml/Shell.qml:444
217msgid "Sorry, incorrect passphrase."
219msgid "Sorry, incorrect passphrase."
218msgstr "抱歉,密語不對"
220msgstr "抱歉,密語不對"
219
221
220−#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:54
222+#: qml/Shell.qml:445
221msgid "Sorry, incorrect passcode."
223msgid "Sorry, incorrect passcode."
222−msgstr "抱歉,passcode 不對。"
224+msgstr "抱歉,通關碼不對。"
223
225
224−#: qml/Greeter/NarrowView.qml:55
226+#: qml/Shell.qml:446
225msgid "This will be your last attempt."
227msgid "This will be your last attempt."
226msgstr "這將會是您最後一次嘗試的機會。"
228msgstr "這將會是您最後一次嘗試的機會。"
227
229
228−#: qml/Greeter/NarrowView.qml:57
230+#: qml/Shell.qml:448
229msgid ""
231msgid ""
230"If passphrase is entered incorrectly, your phone will conduct a factory "
232"If passphrase is entered incorrectly, your phone will conduct a factory "
231"reset and all personal data will be deleted."
233"reset and all personal data will be deleted."
232msgstr "如輸入的密語不對,本電話會進行重設,所有個人資料都會刪除。"
234msgstr "如輸入的密語不對,本電話會進行重設,所有個人資料都會刪除。"
233
235
234−#: qml/Greeter/NarrowView.qml:58
236+#: qml/Shell.qml:449
235msgid ""
237msgid ""
236"If passcode is entered incorrectly, your phone will conduct a factory reset "
238"If passcode is entered incorrectly, your phone will conduct a factory reset "
237"and all personal data will be deleted."
239"and all personal data will be deleted."
238−msgstr "如輸入的 passcode 不對,本電話會進行重設,所有個人資料都會刪除。"
240+msgstr "如輸入的通關碼不對,本電話會進行重設,所有個人資料都會刪除。"
239
241
240−#: qml/Greeter/NarrowView.qml:115
242+#: qml/Shell.qml:402
241#, qt-format
243#, qt-format
242msgid "Enter %1"
244msgid "Enter %1"
243msgstr "輸入 %1"
245msgstr "輸入 %1"
244
246
245−#: qml/Greeter/NarrowView.qml:116 qml/Wizard/Pages/passwd-set.qml:60
247+#: qml/Shell.qml:394
246msgid "Enter passphrase"
248msgid "Enter passphrase"
247msgstr "輸入密語"
249msgstr "輸入密語"
248
250
249−#: qml/Greeter/NarrowView.qml:117
251+#: qml/Shell.qml:398
250msgid "Enter passcode"
252msgid "Enter passcode"
251−msgstr "輸入 passcode"
253+msgstr "輸入通關碼"
252
254
253−#: qml/Greeter/NarrowView.qml:118
255+#: qml/Shell.qml:403
254#, qt-format
256#, qt-format
255msgid "Sorry, incorrect %1"
257msgid "Sorry, incorrect %1"
256msgstr "抱歉,%1不對"
258msgstr "抱歉,%1不對"
257
259
258−#: qml/Greeter/NarrowView.qml:119
260+#: qml/Shell.qml:395
259msgid "Sorry, incorrect passphrase"
261msgid "Sorry, incorrect passphrase"
260msgstr "抱歉,密語不對"
262msgstr "抱歉,密語不對"
261
263
262−#: qml/Greeter/NarrowView.qml:120
264+#: qml/Shell.qml:396
263msgid "Please re-enter"
265msgid "Please re-enter"
264msgstr "請再輸入"
266msgstr "請再輸入"
265
267
266−#: qml/Greeter/NarrowView.qml:121
268+#: qml/Shell.qml:399
267msgid "Sorry, incorrect passcode"
269msgid "Sorry, incorrect passcode"
268−msgstr "抱歉,passcode 不對"
270+msgstr "抱歉,通關碼不對"
269
271
270#: qml/Notifications/NotificationMenuItemFactory.qml:128
272#: qml/Notifications/NotificationMenuItemFactory.qml:128
271msgid "Show password"
273msgid "Show password"
@@ -273,7 +275,7 @@ msgstr "顯示密碼"
273
275
274#: qml/Panel/ActiveCallHint.qml:79
276#: qml/Panel/ActiveCallHint.qml:79
275msgid "Tap to return to call..."
277msgid "Tap to return to call..."
276−msgstr "輕觸可返回通話…"
278+msgstr "點按可返回通話…"
277
279
278#: qml/Panel/ActiveCallHint.qml:92
280#: qml/Panel/ActiveCallHint.qml:92
279msgid "Conference"
281msgid "Conference"
@@ -293,7 +295,7 @@ msgstr "下載中"
293
295
294#: qml/Panel/Indicators/MenuItemFactory.qml:797
296#: qml/Panel/Indicators/MenuItemFactory.qml:797
295msgid "Paused, tap to resume"
297msgid "Paused, tap to resume"
296−msgstr "已暫停,輕觸可繼續"
298+msgstr "已暫停,點按可繼續"
297
299
298#: qml/Panel/Indicators/MenuItemFactory.qml:799
300#: qml/Panel/Indicators/MenuItemFactory.qml:799
299msgid "Canceled"
301msgid "Canceled"
@@ -305,15 +307,15 @@ msgstr "已完成"
305
307
306#: qml/Panel/Indicators/MenuItemFactory.qml:803
308#: qml/Panel/Indicators/MenuItemFactory.qml:803
307msgid "Failed, tap to retry"
309msgid "Failed, tap to retry"
308−msgstr "失敗,輕觸可重試"
310+msgstr "失敗,點按可重試"
309
311
310#: qml/Panel/Indicators/MessageMenuItemFactory.qml:149
312#: qml/Panel/Indicators/MessageMenuItemFactory.qml:149
311msgid "Reply"
313msgid "Reply"
312−msgstr ""
314+msgstr "回覆"
313
315
314#: qml/Panel/Indicators/ModemInfoItem.qml:105
316#: qml/Panel/Indicators/ModemInfoItem.qml:105
315msgid "Unlock SIM"
317msgid "Unlock SIM"
316−msgstr "為 SIM 卡解鎖"
318+msgstr "解鎖 SIM 卡"
317
319
318#: qml/Panel/Indicators/RoamingIndication.qml:27
320#: qml/Panel/Indicators/RoamingIndication.qml:27
319msgid "Roaming"
321msgid "Roaming"
@@ -321,232 +323,232 @@ msgstr "漫遊"
321
323
322#: qml/Tutorial/TutorialBottomFinish.qml:24
324#: qml/Tutorial/TutorialBottomFinish.qml:24
323msgid "This action does different things for different apps"
325msgid "This action does different things for different apps"
324−msgstr ""
326+msgstr "這個動作在不同的程式中有不同的效果"
325
327
326#: qml/Tutorial/TutorialBottomFinish.qml:25
328#: qml/Tutorial/TutorialBottomFinish.qml:25
327msgid "Tap here to finish."
329msgid "Tap here to finish."
328−msgstr ""
330+msgstr "點按這裡完成。"
329
331
330#: qml/Tutorial/TutorialBottom.qml:28
332#: qml/Tutorial/TutorialBottom.qml:28
331msgid "Open special menus"
333msgid "Open special menus"
332−msgstr ""
334+msgstr "開啟特殊選單"
333
335
334#: qml/Tutorial/TutorialBottom.qml:29
336#: qml/Tutorial/TutorialBottom.qml:29
335msgid "Swipe up from the bottom edge."
337msgid "Swipe up from the bottom edge."
336−msgstr ""
338+msgstr "從底部邊緣向上滑動。"
337
339
338#: qml/Tutorial/TutorialLeftFinish.qml:24
340#: qml/Tutorial/TutorialLeftFinish.qml:24
339msgid "These are the shortcuts to favorite apps"
341msgid "These are the shortcuts to favorite apps"
340−msgstr ""
342+msgstr "這些是喜愛程式的捷徑"
341
343
342#: qml/Tutorial/TutorialLeftFinish.qml:25 qml/Tutorial/TutorialRight.qml:144
344#: qml/Tutorial/TutorialLeftFinish.qml:25 qml/Tutorial/TutorialRight.qml:144
343msgid "Tap here to continue."
345msgid "Tap here to continue."
344−msgstr ""
346+msgstr "點按這裡繼續。"
345
347
346#: qml/Tutorial/TutorialLeft.qml:26
348#: qml/Tutorial/TutorialLeft.qml:26
347msgid "Open the launcher"
349msgid "Open the launcher"
348−msgstr ""
350+msgstr "開啟啟動欄"
349
351
350#: qml/Tutorial/TutorialLeft.qml:27
352#: qml/Tutorial/TutorialLeft.qml:27
351msgid "Short swipe from the left edge."
353msgid "Short swipe from the left edge."
352−msgstr ""
354+msgstr "從左側邊緣小幅滑動。"
353
355
354#: qml/Tutorial/TutorialPage.qml:178
356#: qml/Tutorial/TutorialPage.qml:178
355msgid "You almost got it!"
357msgid "You almost got it!"
356−msgstr ""
358+msgstr "您快學會了!"
357
359
358#: qml/Tutorial/TutorialPage.qml:195
360#: qml/Tutorial/TutorialPage.qml:195
359msgid "Try again."
361msgid "Try again."
360−msgstr ""
362+msgstr "重試一次。"
361
363
362#: qml/Tutorial/TutorialRight.qml:31
364#: qml/Tutorial/TutorialRight.qml:31
363msgid "To view open apps"
365msgid "To view open apps"
364−msgstr ""
366+msgstr "檢視開啟的程式"
365
367
366#: qml/Tutorial/TutorialRight.qml:32
368#: qml/Tutorial/TutorialRight.qml:32
367msgid "Long swipe from the right edge."
369msgid "Long swipe from the right edge."
368−msgstr ""
370+msgstr "從右側邊緣大幅滑動。"
369
371
370#: qml/Tutorial/TutorialRight.qml:122
372#: qml/Tutorial/TutorialRight.qml:122
371msgid "View all your running tasks."
373msgid "View all your running tasks."
372−msgstr ""
374+msgstr "檢視您所有執行中的作業項目。"
373
375
374#: qml/Wizard/Page.qml:89
376#: qml/Wizard/Page.qml:89
375msgid "Back"
377msgid "Back"
376−msgstr ""
378+msgstr "返回"
377
379
378#: qml/Wizard/Pages/10-welcome.qml:27
380#: qml/Wizard/Pages/10-welcome.qml:27
379msgid "Hi!"
381msgid "Hi!"
380−msgstr ""
382+msgstr "您好!"
381
383
382#: qml/Wizard/Pages/10-welcome.qml:44
384#: qml/Wizard/Pages/10-welcome.qml:44
383msgid "Welcome to your Ubuntu phone."
385msgid "Welcome to your Ubuntu phone."
384−msgstr ""
386+msgstr "歡迎使用您的 Ubuntu 手機。"
385
387
386#: qml/Wizard/Pages/10-welcome.qml:52
388#: qml/Wizard/Pages/10-welcome.qml:52
387msgid "Let’s get started."
389msgid "Let’s get started."
388−msgstr ""
390+msgstr "讓我們開始吧。"
389
391
390#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:128
392#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:128
391#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
393#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
392#: qml/Wizard/Pages/60-reporting.qml:50 qml/Wizard/Pages/passwd-confirm.qml:82
394#: qml/Wizard/Pages/60-reporting.qml:50 qml/Wizard/Pages/passwd-confirm.qml:82
393#: qml/Wizard/Pages/passwd-set.qml:90
395#: qml/Wizard/Pages/passwd-set.qml:90
394msgid "Continue"
396msgid "Continue"
395−msgstr ""
397+msgstr "繼續"
396
398
397#: qml/Wizard/Pages/20-sim.qml:25
399#: qml/Wizard/Pages/20-sim.qml:25
398msgid "Add a SIM card and restart your device"
400msgid "Add a SIM card and restart your device"
399−msgstr ""
401+msgstr "插入 SIM 卡並重新啟動您的裝置"
400
402
401#: qml/Wizard/Pages/20-sim.qml:59
403#: qml/Wizard/Pages/20-sim.qml:59
402msgid "Without it, you won’t be able to make calls or use text messaging."
404msgid "Without it, you won’t be able to make calls or use text messaging."
403−msgstr ""
405+msgstr "沒有它,您便無法撥打電話,或是傳送文字簡訊。"
404
406
405#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
407#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
406msgid "Skip"
408msgid "Skip"
407−msgstr ""
409+msgstr "略過"
408
410
409#: qml/Wizard/Pages/30-passwd-type.qml:39
411#: qml/Wizard/Pages/30-passwd-type.qml:39
410msgid "Lock security"
412msgid "Lock security"
411−msgstr ""
413+msgstr "安全鎖"
412
414
413#: qml/Wizard/Pages/30-passwd-type.qml:74
415#: qml/Wizard/Pages/30-passwd-type.qml:74
414msgid "Please select how you’d like to unlock your phone."
416msgid "Please select how you’d like to unlock your phone."
415−msgstr ""
417+msgstr "請選取您想要的手機解鎖方式。"
416
418
417#: qml/Wizard/Pages/30-passwd-type.qml:97
419#: qml/Wizard/Pages/30-passwd-type.qml:97
418msgid "Swipe"
420msgid "Swipe"
419−msgstr ""
421+msgstr "滑開"
420
422
421#: qml/Wizard/Pages/30-passwd-type.qml:98
423#: qml/Wizard/Pages/30-passwd-type.qml:98
422msgid "No security"
424msgid "No security"
423−msgstr ""
425+msgstr "不安全"
424
426
425#: qml/Wizard/Pages/30-passwd-type.qml:100
427#: qml/Wizard/Pages/30-passwd-type.qml:100
426msgid "Passcode"
428msgid "Passcode"
427−msgstr ""
429+msgstr "通關碼"
428
430
429#: qml/Wizard/Pages/30-passwd-type.qml:101
431#: qml/Wizard/Pages/30-passwd-type.qml:101
430msgid "4 digits only"
432msgid "4 digits only"
431−msgstr ""
433+msgstr "僅 4 位數"
432
434
433#: qml/Wizard/Pages/30-passwd-type.qml:103
435#: qml/Wizard/Pages/30-passwd-type.qml:103
434msgid "Passphrase"
436msgid "Passphrase"
435−msgstr ""
437+msgstr "密語"
436
438
437#: qml/Wizard/Pages/30-passwd-type.qml:104
439#: qml/Wizard/Pages/30-passwd-type.qml:104
438msgid "Numbers and letters"
440msgid "Numbers and letters"
439−msgstr ""
441+msgstr "數字和字母"
440
442
441#: qml/Wizard/Pages/40-wifi.qml:29
443#: qml/Wizard/Pages/40-wifi.qml:29
442msgid "Connect to Wi‑Fi"
444msgid "Connect to Wi‑Fi"
443−msgstr ""
445+msgstr "連接 Wi-Fi"
444
446
445#: qml/Wizard/Pages/40-wifi.qml:168
447#: qml/Wizard/Pages/40-wifi.qml:168
446msgid "Available networks…"
448msgid "Available networks…"
447−msgstr ""
449+msgstr "可用的網路…"
448
450
449#: qml/Wizard/Pages/40-wifi.qml:169
451#: qml/Wizard/Pages/40-wifi.qml:169
450msgid "No available networks."
452msgid "No available networks."
451−msgstr ""
453+msgstr "無可用網路。"
452
454
453#: qml/Wizard/Pages/50-location.qml:27
455#: qml/Wizard/Pages/50-location.qml:27
454msgid "Location"
456msgid "Location"
455−msgstr ""
457+msgstr "位置"
456
458
457#: qml/Wizard/Pages/50-location.qml:62
459#: qml/Wizard/Pages/50-location.qml:62
458msgid "Let the phone detect your location:"
460msgid "Let the phone detect your location:"
459−msgstr ""
461+msgstr "讓手機偵測您的所在位置:"
460
462
461#: qml/Wizard/Pages/50-location.qml:69
463#: qml/Wizard/Pages/50-location.qml:69
462msgid "Using GPS only (less accurate)"
464msgid "Using GPS only (less accurate)"
463−msgstr ""
465+msgstr "僅使用 GPS (較不精確)"
464
466
465#: qml/Wizard/Pages/50-location.qml:86
467#: qml/Wizard/Pages/50-location.qml:86
466msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
468msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
467−msgstr ""
469+msgstr "使用 GPS、匿名化 Wi-Fi 與巢狀行動網路資訊 (建議)"
468
470
469#. TRANSLATORS: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
471#. TRANSLATORS: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
470#: qml/Wizard/Pages/50-location.qml:103
472#: qml/Wizard/Pages/50-location.qml:103
471msgid ""
473msgid ""
472"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
474"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
473"conditions</a>."
475"conditions</a>."
474−msgstr ""
476+msgstr "選取此項代表您同意 Nokia HERE 的<a href='#'>服務條款與細則</a>。"
475
477
476#: qml/Wizard/Pages/50-location.qml:112
478#: qml/Wizard/Pages/50-location.qml:112
477msgid "Not at all"
479msgid "Not at all"
478−msgstr ""
480+msgstr "一點也不"
479
481
480#: qml/Wizard/Pages/50-location.qml:124
482#: qml/Wizard/Pages/50-location.qml:124
481msgid "You can change your mind later in <b>System Settings</b>."
483msgid "You can change your mind later in <b>System Settings</b>."
482−msgstr ""
484+msgstr "您稍後若改變心意,可以到<b>系統設定</b>中更改。"
483
485
484#: qml/Wizard/Pages/60-reporting.qml:24
486#: qml/Wizard/Pages/60-reporting.qml:24
485msgid "Improving your experience"
487msgid "Improving your experience"
486−msgstr ""
488+msgstr "改善您的使用體驗"
487
489
488#: qml/Wizard/Pages/60-reporting.qml:36
490#: qml/Wizard/Pages/60-reporting.qml:36
489msgid ""
491msgid ""
490"Your phone is set up to automatically report errors to Canonical and its "
492"Your phone is set up to automatically report errors to Canonical and its "
491"partners, the makers of the operating system."
493"partners, the makers of the operating system."
492−msgstr ""
494+msgstr "您的手機已設置為會自動向 Canonical 及其合作夥伴 (作業系統的製作者) 回報錯誤問題。"
493
495
494#: qml/Wizard/Pages/60-reporting.qml:43
496#: qml/Wizard/Pages/60-reporting.qml:43
495msgid ""
497msgid ""
496"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
498"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
497"Privacy</b>"
499"Privacy</b>"
498−msgstr ""
500+msgstr "這可隨時在<b>系統設定</b>的<b>安全與隱私</b>中停用。"
499
501
500#: qml/Wizard/Pages/80-finished.qml:24
502#: qml/Wizard/Pages/80-finished.qml:24
501msgid "All done"
503msgid "All done"
502−msgstr ""
504+msgstr "大功告成"
503
505
504#: qml/Wizard/Pages/80-finished.qml:39
506#: qml/Wizard/Pages/80-finished.qml:39
505msgid "Nice work!"
507msgid "Nice work!"
506−msgstr ""
508+msgstr "做得漂亮!"
507
509
508#: qml/Wizard/Pages/80-finished.qml:46
510#: qml/Wizard/Pages/80-finished.qml:46
509msgid "Your phone is now ready to use."
511msgid "Your phone is now ready to use."
510−msgstr ""
512+msgstr "您的手機現在已準備好使用。"
511
513
512#: qml/Wizard/Pages/80-finished.qml:53
514#: qml/Wizard/Pages/80-finished.qml:53
513msgid "Finish"
515msgid "Finish"
514−msgstr ""
516+msgstr "完成"
515
517
516#: qml/Wizard/Pages/here-terms.qml:27
518#: qml/Wizard/Pages/here-terms.qml:27
517msgid "Terms & Conditions"
519msgid "Terms & Conditions"
518−msgstr ""
520+msgstr "使用條款與細則"
519
521
520#: qml/Wizard/Pages/passwd-confirm.qml:49
522#: qml/Wizard/Pages/passwd-confirm.qml:49
521msgid "Confirm passphrase"
523msgid "Confirm passphrase"
522−msgstr ""
524+msgstr "確認密語"
523
525
524#: qml/Wizard/Pages/passwd-confirm.qml:50
526#: qml/Wizard/Pages/passwd-confirm.qml:50
525msgid "Confirm passcode"
527msgid "Confirm passcode"
526−msgstr ""
528+msgstr "確認通關碼"
527
529
528#: qml/Wizard/Pages/passwd-confirm.qml:53
530#: qml/Wizard/Pages/passwd-confirm.qml:53
529#: qml/Wizard/Pages/passwd-confirm.qml:54
531#: qml/Wizard/Pages/passwd-confirm.qml:54
530msgid "Please try again."
532msgid "Please try again."
531−msgstr ""
533+msgstr "請重試一次。"
532
534
533#: qml/Wizard/Pages/passwd-set.qml:61
535#: qml/Wizard/Pages/passwd-set.qml:61
534msgid "Choose your passcode"
536msgid "Choose your passcode"
535−msgstr ""
537+msgstr "決定您的通關碼"
536
538
537#: qml/Wizard/Pages/passwd-set.qml:68
539#: qml/Wizard/Pages/passwd-set.qml:68
538msgid "Passphrase must be 4 characters long"
540msgid "Passphrase must be 4 characters long"
539−msgstr ""
541+msgstr "密語必須 4 個字元長"
540
542
541#: qml/Wizard/StackButton.qml:39
543#: qml/Wizard/StackButton.qml:39
542#, qt-format
544#, qt-format
543msgid "〈 %1"
545msgid "〈 %1"
544−msgstr ""
546+msgstr "〈 %1"
545
547
546#: qml/Wizard/StackButton.qml:42
548#: qml/Wizard/StackButton.qml:42
547#, qt-format
549#, qt-format
548msgid "%1 〉"
550msgid "%1 〉"
549−msgstr ""
551+msgstr "%1 〉"
550
552
551#~ msgid "Confirm"
553#~ msgid "Confirm"
552#~ msgstr "確認"
554#~ msgstr "確認"
qml/Components/Dialogs.qml+10−10
@@ -64,17 +64,17 @@ Item {
64 id: logoutDialogComponent
64 id: logoutDialogComponent
65 ShellDialog {
65 ShellDialog {
66 id: logoutDialog
66 id: logoutDialog
67− title: i18n.tr("Log out")
67+ title: i18n.ctr("Title: Lock/Log out dialog", "Log out")
68 text: i18n.tr("Are you sure you want to log out?")
68 text: i18n.tr("Are you sure you want to log out?")
69 Button {
69 Button {
70− text: i18n.tr("Lock")
70+ text: i18n.ctr("Button: Lock the system", "Lock")
71 onClicked: {
71 onClicked: {
72 LightDM.Greeter.showGreeter()
72 LightDM.Greeter.showGreeter()
73 logoutDialog.hide();
73 logoutDialog.hide();
74 }
74 }
75 }
75 }
76 Button {
76 Button {
77− text: i18n.tr("Log Out")
77+ text: i18n.ctr("Button: Log out from the system", "Log Out")
78 onClicked: {
78 onClicked: {
79 unitySessionService.logout();
79 unitySessionService.logout();
80 logoutDialog.hide();
80 logoutDialog.hide();
@@ -93,10 +93,10 @@ Item {
93 id: shutdownDialogComponent
93 id: shutdownDialogComponent
94 ShellDialog {
94 ShellDialog {
95 id: shutdownDialog
95 id: shutdownDialog
96− title: i18n.tr("Shut down")
96+ title: i18n.ctr("Title: Reboot/Shut down dialog", "Shut down")
97 text: i18n.tr("Are you sure you want to shut down?")
97 text: i18n.tr("Are you sure you want to shut down?")
98 Button {
98 Button {
99− text: i18n.tr("Reboot")
99+ text: i18n.ctr("Button: Reboot the system", "Reboot")
100 onClicked: {
100 onClicked: {
101 root.closeAllApps();
101 root.closeAllApps();
102 unitySessionService.reboot();
102 unitySessionService.reboot();
@@ -104,7 +104,7 @@ Item {
104 }
104 }
105 }
105 }
106 Button {
106 Button {
107− text: i18n.tr("Shutdown")
107+ text: i18n.ctr("Button: Shut down the system", "Shut down")
108 onClicked: {
108 onClicked: {
109 root.closeAllApps();
109 root.closeAllApps();
110 unitySessionService.shutdown();
110 unitySessionService.shutdown();
@@ -124,7 +124,7 @@ Item {
124 id: rebootDialogComponent
124 id: rebootDialogComponent
125 ShellDialog {
125 ShellDialog {
126 id: rebootDialog
126 id: rebootDialog
127− title: i18n.tr("Reboot")
127+ title: i18n.ctr("Title: Reboot dialog", "Reboot")
128 text: i18n.tr("Are you sure you want to reboot?")
128 text: i18n.tr("Are you sure you want to reboot?")
129 Button {
129 Button {
130 text: i18n.tr("No")
130 text: i18n.tr("No")
@@ -147,10 +147,10 @@ Item {
147 id: powerDialogComponent
147 id: powerDialogComponent
148 ShellDialog {
148 ShellDialog {
149 id: powerDialog
149 id: powerDialog
150− title: i18n.tr("Power")
150+ title: i18n.ctr("Title: Power off/Restart dialog", "Power")
151 text: i18n.tr("Are you sure you would like\nto power off?")
151 text: i18n.tr("Are you sure you would like\nto power off?")
152 Button {
152 Button {
153− text: i18n.tr("Power off")
153+ text: i18n.ctr("Button: Power off the system", "Power off")
154 onClicked: {
154 onClicked: {
155 root.closeAllApps();
155 root.closeAllApps();
156 powerDialog.hide();
156 powerDialog.hide();
@@ -159,7 +159,7 @@ Item {
159 color: UbuntuColors.red
159 color: UbuntuColors.red
160 }
160 }
161 Button {
161 Button {
162− text: i18n.tr("Restart")
162+ text: i18n.ctr("Button: Restart the system", "Restart")
163 onClicked: {
163 onClicked: {
164 root.closeAllApps();
164 root.closeAllApps();
165 unitySessionService.reboot();
165 unitySessionService.reboot();
qml/Dash/GenericScopeView.qml+1−1
@@ -592,7 +592,7 @@ FocusScope {
592 objectName: "scopePageHeader"
592 objectName: "scopePageHeader"
593 width: parent.width
593 width: parent.width
594 title: scopeView.scope ? scopeView.scope.name : ""
594 title: scopeView.scope ? scopeView.scope.name : ""
595− searchHint: scopeView.scope && scopeView.scope.searchHint || i18n.tr("Search")
595+ searchHint: scopeView.scope && scopeView.scope.searchHint || i18n.ctr("Label: Hint for dash search line edit", "Search")
596 showBackButton: scopeView.hasBackAction
596 showBackButton: scopeView.hasBackAction
597 searchEntryEnabled: true
597 searchEntryEnabled: true
598 settingsEnabled: scopeView.scope && scopeView.scope.settings && scopeView.scope.settings.count > 0 || false
598 settingsEnabled: scopeView.scope && scopeView.scope.settings && scopeView.scope.settings.count > 0 || false
qml/Dash/PageHeader.qml+3−3
@@ -266,14 +266,14 @@ Item {
266 actions: [
266 actions: [
267 Action {
267 Action {
268 objectName: "store"
268 objectName: "store"
269− text: i18n.tr("Store")
269+ text: i18n.ctr("Button: Open the Ubuntu Store", "Store")
270 iconName: "ubuntu-store-symbolic"
270 iconName: "ubuntu-store-symbolic"
271 visible: root.storeEntryEnabled
271 visible: root.storeEntryEnabled
272 onTriggered: root.storeClicked();
272 onTriggered: root.storeClicked();
273 },
273 },
274 Action {
274 Action {
275 objectName: "search"
275 objectName: "search"
276− text: i18n.tr("Search")
276+ text: i18n.ctr("Button: Start a search in the current dash scope", "Search")
277 iconName: "search"
277 iconName: "search"
278 visible: root.searchEntryEnabled
278 visible: root.searchEntryEnabled
279 onTriggered: {
279 onTriggered: {
@@ -283,7 +283,7 @@ Item {
283 },
283 },
284 Action {
284 Action {
285 objectName: "settings"
285 objectName: "settings"
286− text: i18n.tr("Settings")
286+ text: i18n.ctr("Button: Show the current dash scope settings", "Settings")
287 iconName: "settings"
287 iconName: "settings"
288 visible: root.settingsEnabled
288 visible: root.settingsEnabled
289 onTriggered: root.settingsClicked()
289 onTriggered: root.settingsClicked()
qml/Dash/Previews/PreviewImageGallery.qml+25−6
@@ -38,6 +38,8 @@ PreviewWidget {
38 model: root.widgetData["sources"]
38 model: root.widgetData["sources"]
39 clip: true
39 clip: true
40
40
41+ onCurrentIndexChanged: overlay.updateInitialItem()
42+
41 LazyImage {
43 LazyImage {
42 objectName: "placeholderScreenshot"
44 objectName: "placeholderScreenshot"
43 anchors {
45 anchors {
@@ -65,9 +67,8 @@ PreviewWidget {
65 id: mouseArea
67 id: mouseArea
66 anchors.fill: parent
68 anchors.fill: parent
67 onClicked: {
69 onClicked: {
68− overlay.delegateItem.currentIndex = index;
70+ previewImageListView.currentIndex = index;
69− overlay.initialX = rootItem.mapFromItem(parent, 0, 0).x;
71+ overlay.updateInitialItem();
70− overlay.initialY = rootItem.mapFromItem(parent, 0, 0).y;
71 overlay.show();
72 overlay.show();
72 }
73 }
73 }
74 }
@@ -78,9 +79,14 @@ PreviewWidget {
78 id: overlay
79 id: overlay
79 objectName: "overlay"
80 objectName: "overlay"
80 parent: rootItem
81 parent: rootItem
81− width: parent.width
82+ anchors.fill: parent
82− height: parent.height
83+
83− initialScale: previewImageListView.height / rootItem.height
84+ function updateInitialItem() {
85+ initialX = rootItem.mapFromItem(previewImageListView.currentItem, 0, 0).x;
86+ initialY = rootItem.mapFromItem(previewImageListView.currentItem, 0, 0).y;
87+ initialWidth = previewImageListView.currentItem.width;
88+ initialHeight = previewImageListView.currentItem.height;
89+ }
84
90
85 delegate: ListView {
91 delegate: ListView {
86 id: overlayListView
92 id: overlayListView
@@ -92,6 +98,19 @@ PreviewWidget {
92 snapMode: ListView.SnapOneItem
98 snapMode: ListView.SnapOneItem
93 boundsBehavior: Flickable.DragAndOvershootBounds
99 boundsBehavior: Flickable.DragAndOvershootBounds
94 model: root.widgetData["sources"]
100 model: root.widgetData["sources"]
101+ currentIndex: previewImageListView.currentIndex
102+
103+ onCurrentIndexChanged: {
104+ // if the index changed while overlay is visible, it was from user interaction,
105+ // let's update the index of the original listview
106+ if (overlay.visible) {
107+ previewImageListView.highlightMoveDuration = 0;
108+ previewImageListView.highlightResizeDuration = 0;
109+ previewImageListView.currentIndex = currentIndex;
110+ previewImageListView.highlightMoveDuration = -1;
111+ previewImageListView.highlightResizeDuration = -1;
112+ }
113+ }
95
114
96 delegate: Image {
115 delegate: Image {
97 id: screenshot
116 id: screenshot
qml/Dash/Previews/PreviewOverlay.qml+77−26
@@ -22,48 +22,99 @@ Rectangle {
22 id: overlay
22 id: overlay
23 objectName: "overlay"
23 objectName: "overlay"
24
24
25− readonly property real scaleProgress: (scale - initialScale) / (1.0 - initialScale)
25+ readonly property real aspectRatio: width / height
26+ readonly property real initialAspectRatio: initialWidth / initialHeight
27+ readonly property real initialXScale: initialWidth / width
28+ readonly property real initialYScale: initialHeight / height
26
29
27 property alias delegate: loader.sourceComponent
30 property alias delegate: loader.sourceComponent
28 property alias delegateItem: loader.item
31 property alias delegateItem: loader.item
29 property alias headerShown: overlayHeader.shown
32 property alias headerShown: overlayHeader.shown
30− property bool shown: false
31− property bool opening: false
32 property real initialX: 0
33 property real initialX: 0
33 property real initialY: 0
34 property real initialY: 0
34− property real initialScale: 0
35+ property real initialWidth: 1
35−
36+ property real initialHeight: 1
36− visible: scale > initialScale
37+
37− clip: visible && scale < 1.0
38+ property real xScale: initialXScale
38− scale: shown ? 1.0 : initialScale
39+ property real yScale: initialYScale
40+ property real progress: 0
41+
42+ implicitWidth: 1
43+ implicitHeight: 1
44+ visible: progress > 0
45+ clip: progress > 0 && progress < 1
46+ color: Qt.rgba(0, 0, 0, progress)
39 transformOrigin: Item.TopLeft
47 transformOrigin: Item.TopLeft
40− transform: Translate {
48+ transform: [
49+ Scale {
50+ origin.x: 0
51+ origin.y: 0
52+ xScale: overlay.xScale
53+ yScale: overlay.yScale
54+ },
55+ Translate {
41− x: overlay.initialX - overlay.initialX * overlay.scaleProgress
56+ x: overlay.initialX - overlay.initialX * overlay.progress
42− y: overlay.initialY - overlay.initialY * overlay.scaleProgress
57+ y: overlay.initialY - overlay.initialY * overlay.progress
43− }
58+ }
44− color: Qt.rgba(0, 0, 0, scaleProgress)
59+ ]
45− radius: units.gu(1) - units.gu(1) * scaleProgress
60+ state: "hidden"
61+ states: [
62+ State {
63+ name: "shown"
64+ PropertyChanges { target: overlay; progress: 1; xScale: 1; yScale: 1 }
65+ },
66+ State {
67+ name: "hidden"
68+ PropertyChanges { target: overlay; progress: 0; xScale: initialXScale; yScale: initialYScale }
69+ }
70+ ]
71+ transitions: [
72+ Transition {
73+ from: "hidden"
74+ to: "shown"
75+ UbuntuNumberAnimation {
76+ target: overlay
77+ properties: "progress,xScale,yScale"
78+ duration: UbuntuAnimation.FastDuration
79+ }
80+ },
81+ Transition {
82+ from: "shown"
83+ to: "hidden"
84+ UbuntuNumberAnimation {
85+ target: overlay
86+ properties: "progress,xScale,yScale"
87+ duration: UbuntuAnimation.FastDuration / 2
88+ }
89+ }
90+ ]
46
91
47 function show() {
92 function show() {
48− opening = true;
49− shown = true;
93+ state = "shown"
50 }
94 }
51
95
52 function hide() {
96 function hide() {
53− opening = false;
97+ state = "hidden"
54− shown = false;
55− }
56−
57− Behavior on scale {
58− UbuntuNumberAnimation {
59− duration: overlay.opening ? UbuntuAnimation.FastDuration :
60− UbuntuAnimation.FastDuration / 2
61− }
62 }
98 }
63
99
64 Loader {
100 Loader {
65 id: loader
101 id: loader
66 anchors.fill: parent
102 anchors.fill: parent
103+
104+ readonly property bool verticalScaling: initialAspectRatio / aspectRatio >= 1
105+ readonly property real initialXScale: verticalScaling ? 1 : aspectRatio / initialAspectRatio
106+ readonly property real initialYScale: verticalScaling ? initialAspectRatio / aspectRatio : 1
107+ readonly property real xScale: verticalScaling ? loader.initialXScale - loader.initialXScale * overlay.progress + overlay.progress :
108+ loader.yScale * overlay.yScale / overlay.xScale
109+ readonly property real yScale: verticalScaling ? loader.xScale * overlay.xScale / overlay.yScale :
110+ loader.initialYScale - loader.initialYScale * overlay.progress + overlay.progress
111+
112+ transform: Scale {
113+ origin.x: parent.width / 2
114+ origin.y: parent.height / 2
115+ xScale: loader.xScale
116+ yScale: loader.yScale
117+ }
67 }
118 }
68
119
69 Rectangle {
120 Rectangle {
@@ -77,7 +128,7 @@ Rectangle {
77 }
128 }
78 height: units.gu(7)
129 height: units.gu(7)
79 visible: opacity > 0
130 visible: opacity > 0
80− opacity: overlay.scaleProgress > 0.6 && shown ? 0.8 : 0
131+ opacity: overlay.state == "shown" && overlay.progress > 0.8 && shown ? 0.8 : 0
81 color: "black"
132 color: "black"
82
133
83 Behavior on opacity {
134 Behavior on opacity {
qml/Dash/Previews/PreviewZoomableImage.qml+3−3
@@ -59,9 +59,9 @@ PreviewWidget {
59 id: overlay
59 id: overlay
60 objectName: "overlay"
60 objectName: "overlay"
61 parent: rootItem
61 parent: rootItem
62− width: parent.width
62+ anchors.fill: parent
63− height: parent.height
63+ initialWidth: lazyImage.width
64− initialScale: lazyImage.height / rootItem.height
64+ initialHeight: lazyImage.height
65
65
66 delegate: ZoomableImage {
66 delegate: ZoomableImage {
67 anchors.fill: parent
67 anchors.fill: parent
qml/Greeter/Greeter.qml+28−17
@@ -19,7 +19,6 @@ import AccountsService 0.1
19import LightDM 0.1 as LightDM
19import LightDM 0.1 as LightDM
20import Ubuntu.Components 1.1
20import Ubuntu.Components 1.1
21import Ubuntu.SystemImage 0.1
21import Ubuntu.SystemImage 0.1
22−import Unity.Connectivity 0.1
23import Unity.Launcher 0.1
22import Unity.Launcher 0.1
24import "../Components"
23import "../Components"
25
24
@@ -51,7 +50,7 @@ Showable {
51
50
52 property int maxFailedLogins: -1 // disabled by default for now, will enable via settings in future
51 property int maxFailedLogins: -1 // disabled by default for now, will enable via settings in future
53 property int failedLoginsDelayAttempts: 7 // number of failed logins
52 property int failedLoginsDelayAttempts: 7 // number of failed logins
54− property int failedLoginsDelayMinutes: 5 // minutes of forced waiting
53+ property real failedLoginsDelayMinutes: 5 // minutes of forced waiting
55
54
56 signal tease()
55 signal tease()
57 signal sessionStarted()
56 signal sessionStarted()
@@ -110,7 +109,6 @@ Showable {
110
109
111 readonly property bool multiUser: LightDM.Users.count > 1
110 readonly property bool multiUser: LightDM.Users.count > 1
112 property int currentIndex
111 property int currentIndex
113− property int delayMinutes
114 property bool waiting
112 property bool waiting
115
113
116 // We want 'launcherOffset' to animate down to zero. But not to animate
114 // We want 'launcherOffset' to animate down to zero. But not to animate
@@ -179,19 +177,31 @@ Showable {
179 }
177 }
180 }
178 }
181
179
182− Component.onCompleted: {
183− Connectivity.unlockAllModems();
184− }
185−
186 Timer {
180 Timer {
187 id: forcedDelayTimer
181 id: forcedDelayTimer
182+
183+ // We use a short interval and check against the system wall clock
184+ // because we have to consider the case that the system is suspended
185+ // for a few minutes. When we wake up, we want to quickly be correct.
188− interval: 1000 * 60
186+ interval: 500
187+
188+ property var delayTarget;
189+ property int delayMinutes;
190+
191+ function forceDelay(delay /* in minutes */) {
192+ delayTarget = new Date();
193+ delayTarget.setTime(delayTarget.getTime() + delay * 60000);
194+ delayMinutes = Math.ceil(delay);
195+ start();
196+ }
197+
189 onTriggered: {
198 onTriggered: {
190− if (d.delayMinutes > 0) {
199+ var diff = delayTarget - new Date();
200+ if (diff > 0) {
191− d.delayMinutes -= 1;
201+ delayMinutes = Math.ceil(diff / 60000);
192− if (d.delayMinutes > 0) {
193− start(); // go again
202+ start(); // go again
194− }
203+ } else {
204+ delayMinutes = 0;
195 }
205 }
196 }
206 }
197 }
207 }
@@ -262,7 +272,7 @@ Showable {
262 Binding {
272 Binding {
263 target: loader.item
273 target: loader.item
264 property: "delayMinutes"
274 property: "delayMinutes"
265− value: d.delayMinutes
275+ value: forcedDelayTimer.delayMinutes
266 }
276 }
267
277
268 Binding {
278 Binding {
@@ -363,9 +373,10 @@ Showable {
363 }
373 }
364
374
365 // Check if we should initiate a forced login delay
375 // Check if we should initiate a forced login delay
376+ if (failedLoginsDelayAttempts > 0
377+ && AccountsService.failedLogins > 0
366− if (failedLoginsDelayAttempts > 0 && AccountsService.failedLogins % failedLoginsDelayAttempts == 0) {
378+ && AccountsService.failedLogins % failedLoginsDelayAttempts == 0) {
367− d.delayMinutes = failedLoginsDelayMinutes;
379+ forcedDelayTimer.forceDelay(failedLoginsDelayMinutes);
368− forcedDelayTimer.start();
369 }
380 }
370
381
371 loader.item.notifyAuthenticationFailed();
382 loader.item.notifyAuthenticationFailed();
qml/Launcher/Launcher.qml+1−1
@@ -203,7 +203,7 @@ Item {
203 LauncherPanel {
203 LauncherPanel {
204 id: panel
204 id: panel
205 objectName: "launcherPanel"
205 objectName: "launcherPanel"
206− enabled: root.available && root.state == "visible"
206+ enabled: root.available && root.state == "visible" || root.state == "visibleTemporary"
207 width: root.panelWidth
207 width: root.panelWidth
208 anchors {
208 anchors {
209 top: parent.top
209 top: parent.top
qml/Notifications/SwipeToAct.qml+178−247
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2014 Canonical, Ltd.
2+ * Copyright (C) 20014-2015 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
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
5 * it under the terms of the GNU General Public License as published by
@@ -16,12 +16,10 @@
16
16
17import QtQuick 2.3
17import QtQuick 2.3
18import Ubuntu.Components 1.1
18import Ubuntu.Components 1.1
19−import QtGraphicalEffects 1.0
20
19
21Item {
20Item {
22 id: swipeToAct
21 id: swipeToAct
23
22
24− width: parent.width
25 height: childrenRect.height
23 height: childrenRect.height
26
24
27 signal leftTriggered()
25 signal leftTriggered()
@@ -29,280 +27,213 @@ Item {
29
27
30 property string leftIconName
28 property string leftIconName
31 property string rightIconName
29 property string rightIconName
32− readonly property double sliderHeight: units.gu(6)
33− readonly property double gap: units.gu(1)
34− readonly property double halfWay: mouseArea.drag.maximumX / 2
35
30
36− Rectangle {
31+ QtObject {
37− id: gradient
32+ id: priv
38− width: parent.width * 5
33+
34+ property double opacityDelta
39− height: sliderHeight
35+ readonly property double sliderHeight: units.gu(8)
40− visible: false
36+ readonly property double gap: units.gu(1)
41− LinearGradient {
37+ readonly property color sliderMainColor: "#b2b2b2"
42− anchors.fill: parent
38+ readonly property color sliderBGColor: "#f4f4f4"
43− start: Qt.point(parent.x, parent.y)
39+ readonly property double halfWay: mouseArea.drag.maximumX / 2
44− end: Qt.point(parent.width, parent.y)
40+
45− gradient: Gradient {
41+ UbuntuNumberAnimation on opacityDelta {
46− GradientStop { position: 0.0; color: UbuntuColors.red }
42+ from: 0
47− GradientStop { position: 0.2; color: UbuntuColors.red }
43+ to: .5
48− GradientStop { position: 0.4; color: "#dddddd" }
44+ loops: Animation.Infinite
49− GradientStop { position: 0.6; color: "#dddddd" }
45+ duration: UbuntuAnimation.SleepyDuration
50− GradientStop { position: 0.8; color: UbuntuColors.green }
46+ easing.type: Easing.Linear
51− GradientStop { position: 1.0; color: UbuntuColors.green }
52− }
53 }
47 }
54− }
55
48
56− ShaderEffectSource {
49+ // linearly interpolate between start- and end-color
57− id: effectSourceGradient
50+ // with a normalized weight-factor
58− sourceItem: gradient
51+ // 0.0 meaning just the start-color being taken into
59− width: gradient.width
52+ // account and 1.0 only taking the end-color into
60− height: gradient.height
53+ // account
61− sourceRect: Qt.rect(0.4 * gradient.width * (slider.x / halfWay), 0, mask.width, mask.height)
54+ function interpolate(start, end, factor) {
62− visible: false
55+ var rdiff = start.r > end.r ? end.r - start.r : end.r - start.r
63− hideSource: true
56+ var gdiff = start.g > end.g ? end.g - start.g : end.g - start.g
57+ var bdiff = start.b > end.b ? end.b - start.b : end.b - start.b
58+ var adiff = start.a > end.a ? end.a - start.a : end.a - start.a
59+ var r = start.r + factor * rdiff
60+ var g = start.g + factor * gdiff
61+ var b = start.b + factor * bdiff
62+ var a = start.a + factor * adiff
63+ return Qt.rgba(r,g,b,a)
64+ }
64 }
65 }
65
66
66 UbuntuShape {
67 UbuntuShape {
67− id: mask
68+ id: row
68− color: "black"
69 width: parent.width
69 width: parent.width
70− height: sliderHeight
70+ height: priv.sliderHeight
71+ color: priv.sliderBGColor
71 borderSource: "none"
72 borderSource: "none"
72− visible: false
73− }
74
73
75− ShaderEffectSource {
74+ UbuntuShape {
76− id: effectSourceMask
75+ id: leftShape
77− sourceItem: mask
76+ anchors.top: parent.top
78− width: mask.width
77+ anchors.left: parent.left
79− height: mask.height
78+ anchors.margins: priv.gap
80− visible: false
79+ color: UbuntuColors.red
81− hideSource: true
80+ borderSource: "none"
82− }
81+
83−
82+ state: "normal"
84− ShaderEffect {
83+ height: units.gu(6)
85− width: parent.width
84+ width: units.gu(6)
86− height: sliderHeight
85+ radius: "medium"
87− property variant mask: effectSourceMask
86+ opacity: slider.x <= priv.halfWay ? 1.0 : 1.0 - ((slider.x - priv.halfWay) / priv.halfWay)
88− property variant gradient: effectSourceGradient
87+
89− vertexShader: "
88+ Icon {
90− uniform highp mat4 qt_Matrix;
89+ anchors.centerIn: parent
91− attribute highp vec4 qt_Vertex;
90+ width: units.gu(3.5)
92− attribute highp vec2 qt_MultiTexCoord0;
91+ height: units.gu(3.5)
93− varying highp vec2 coord;
92+ name: leftIconName
94− void main() {
93+ color: "white"
95− coord = qt_MultiTexCoord0;
96− gl_Position = qt_Matrix * qt_Vertex;
97− }"
98− fragmentShader: "
99− varying highp vec2 coord;
100− uniform sampler2D mask;
101− uniform sampler2D gradient;
102− void main() {
103− lowp vec4 texMask = texture2D(mask, coord);
104− lowp vec4 texGradient = texture2D(gradient, coord);
105− gl_FragColor = texGradient.rgba * texMask.a ;
106− }"
94+ }
95+ }
107
96
108 Row {
97 Row {
109− id: row
98+ anchors.verticalCenter: parent.verticalCenter
110− anchors.fill: parent
99+ anchors.right: slider.left
100+ anchors.rightMargin: units.gu(1.5)
111− spacing: gap
101+ spacing: -units.gu(1)
112− anchors.margins: gap
102+ visible: slider.x === priv.halfWay
113−
114− UbuntuShape {
115− id: leftShape
116− states: [
117− State {
118− name: "normal"
119− PropertyChanges {
120− target: leftShape
121− color: UbuntuColors.red
122− }
123− PropertyChanges {
124− target: innerLeftShape
125− color: UbuntuColors.red
126− visible: false
127− }
128− },
129− State {
130− name: "selected"
131− PropertyChanges {
132− target: leftShape
133− color: "white"
134− }
135− PropertyChanges {
136− target: innerLeftShape
137− color: UbuntuColors.red
138− visible: true
139− }
140− }
141− ]
142− state: "normal"
143− height: units.gu(4)
144− width: units.gu(7)
145− borderSource: "none"
146− opacity: slider.x <= halfWay ? 1.0 : 1.0 - ((slider.x - halfWay) / halfWay)
147− UbuntuShape {
148− id: innerLeftShape
149− anchors.centerIn: parent
150− borderSource: "none"
151− width: parent.width - units.gu(.5)
152− height: parent.height - units.gu(.5)
153− }
154− Icon {
103+ Icon {
155− anchors.centerIn: parent
104+ name: "back"
156− width: units.gu(2)
105+ height: units.gu(2.5)
157− height: units.gu(2)
106+ color: priv.sliderMainColor
158− name: leftIconName
107+ opacity: .5 + priv.opacityDelta
159− color: "white"
160− }
161 }
108 }
162−
109+ Icon {
163− Rectangle {
110+ name: "back"
164− id: leftSpacer
165− width: (row.width - (leftShape.width + slider.width + rightShape.width + 4 * row.spacing)) / 2
166− height: units.gu(4)
111+ height: units.gu(2.5)
112+ color: priv.sliderMainColor
167− opacity: 0
113+ opacity: 1 - priv.opacityDelta
168 }
114 }
115+ }
169
116
170− UbuntuShape {
117+ UbuntuShape {
171− id: slider
118+ id: slider
172− objectName: "slider"
119+ objectName: "slider"
120+ anchors.top: parent.top
121+ anchors.margins: priv.gap
122+ x: priv.halfWay
173
123
174− Behavior on x {
124+ Component.onCompleted: {
175− UbuntuNumberAnimation {
125+ xBehavior.enabled = true
176− duration: UbuntuAnimation.FastDuration
177− easing.type: Easing.OutBounce
178− }
179− }
126+ }
180
127
181− Behavior on opacity {
128+ Behavior on x {
129+ id: xBehavior
130+ enabled: false
182− UbuntuNumberAnimation {
131+ UbuntuNumberAnimation {
183− duration: UbuntuAnimation.FastDuration
132+ duration: UbuntuAnimation.FastDuration
184− }
133+ easing.type: Easing.OutBounce
185 }
134 }
135+ }
186
136
187− onOpacityChanged: {
137+ Behavior on opacity {
188− if (opacity === 0) {
138+ UbuntuNumberAnimation {
189− if (rightShape.state === "selected") {
139+ duration: UbuntuAnimation.FastDuration
190− rightTriggered()
191− }
192− if (leftShape.state === "selected") {
193− leftTriggered()
194− }
195− }
196 }
140 }
141+ }
197
142
198− z: 1
143+ onXChanged: {
199− color: "white"
144+ var factor
200− height: units.gu(4)
145+ if (slider.x <= priv.gap + leftShape.width)
201− width: units.gu(7)
202− borderSource: "none"
203− Row {
146+ {
204− anchors.fill: parent
147+ factor = (slider.x - priv.gap) / leftShape.width
205− spacing: 2 * gap
148+ slider.color = priv.interpolate(leftShape.color, priv.sliderMainColor, factor)
206− anchors.leftMargin: units.gu(.5)
149+ } else if (slider.x >= rightShape.x - slider.width) {
207− anchors.rightMargin: units.gu(.5)
150+ factor = (slider.x - rightShape.x + rightShape.width) / rightShape.width
208− Icon {
151+ slider.color = priv.interpolate(priv.sliderMainColor, rightShape.color, factor)
209− anchors.verticalCenter: parent.verticalCenter
152+ } else {
210− name: "back"
153+ slider.color = priv.sliderMainColor
211− width: units.gu(2)
212− height: units.gu(2)
213− }
214− Icon {
215− anchors.verticalCenter: parent.verticalCenter
216− name: "next"
217− width: units.gu(2)
218− height: units.gu(2)
219− }
220 }
154 }
221 }
155 }
222
156
223− Rectangle {
157+ z: 1
224− id: rightSpacer
158+ color: priv.sliderMainColor
225− width: leftSpacer.width
226− height: units.gu(4)
159+ height: units.gu(6)
227− opacity: 0
160+ width: units.gu(6)
161+ borderSource: "none"
162+ radius: "medium"
163+ Icon {
164+ anchors.fill: parent
165+ anchors.margins: units.gu(1.5)
166+ source: "grip-large.svg"
167+ color: "white"
228 }
168 }
169+ }
170+ Row {
171+ anchors.verticalCenter: parent.verticalCenter
172+ anchors.left: slider.right
173+ anchors.leftMargin: units.gu(1.5)
174+ spacing: -units.gu(1)
175+ visible: slider.x === priv.halfWay
176+ Icon {
177+ name: "next"
178+ height: units.gu(2.5)
179+ color: priv.sliderMainColor
180+ opacity: 1 - priv.opacityDelta
181+ }
182+ Icon {
183+ name: "next"
184+ height: units.gu(2.5)
185+ color: priv.sliderMainColor
186+ opacity: 0.5 + priv.opacityDelta
187+ }
188+ }
229
189
230− UbuntuShape {
190+ UbuntuShape {
231− id: rightShape
191+ id: rightShape
232− states: [
192+ anchors.top: parent.top
233− State {
193+ anchors.right: parent.right
234− name: "normal"
194+ anchors.margins: priv.gap
235− PropertyChanges {
236− target: rightShape
237− color: UbuntuColors.green
238− }
239− PropertyChanges {
240− target: innerRightShape
241− color: UbuntuColors.green
195+ color: UbuntuColors.green
242− visible: false
196+ borderSource: "none"
243− }
197+
244− },
245− State {
246− name: "selected"
247− PropertyChanges {
248− target: rightShape
249− color: "white"
250− }
251− PropertyChanges {
252− target: innerRightShape
253− color: UbuntuColors.green
254− visible: true
255− }
256− }
257− ]
258− state: "normal"
198+ state: "normal"
259− height: units.gu(4)
199+ height: units.gu(6)
260− width: units.gu(7)
200+ width: units.gu(6)
261− borderSource: "none"
201+ radius: "medium"
262− opacity: slider.x >= halfWay ? 1.0 : slider.x / halfWay
202+ opacity: slider.x >= priv.halfWay ? 1.0 : slider.x / priv.halfWay
263− UbuntuShape {
203+
264− id: innerRightShape
265− anchors.centerIn: parent
266− borderSource: "none"
267− width: parent.width - units.gu(.5)
268− height: parent.height - units.gu(.5)
269− }
270− Icon {
204+ Icon {
271− anchors.centerIn: parent
205+ anchors.centerIn: parent
272− width: units.gu(2)
206+ width: units.gu(3.5)
273− height: units.gu(2)
207+ height: units.gu(3.5)
274− name: rightIconName
208+ name: rightIconName
275− color: "white"
209+ color: "white"
276− }
277 }
210 }
278 }
211 }
212+ }
279
213
280− MouseArea {
214+ MouseArea {
281− id: mouseArea
215+ id: mouseArea
282− objectName: "swipeMouseArea"
216+ objectName: "swipeMouseArea"
283
217
284− anchors.fill: row
218+ anchors.fill: row
285− drag.target: slider
219+ drag.target: slider
286− drag.axis: Drag.XAxis
220+ drag.axis: Drag.XAxis
287− drag.minimumX: 0
221+ drag.minimumX: priv.gap
288− drag.maximumX: row.width - slider.width
222+ drag.maximumX: row.width - slider.width - priv.gap
289
223
290− onReleased: {
224+ onReleased: {
291− if (slider.x !== drag.minimumX || slider.x !== drag.maximumX) {
225+ if (slider.x !== drag.minimumX || slider.x !== drag.maximumX) {
292− slider.x = halfWay
226+ slider.x = priv.halfWay
293− }
227+ }
294− if (slider.x === drag.minimumX) {
228+ if (slider.x === drag.minimumX) {
295− slider.x = drag.minimumX
229+ slider.x = drag.minimumX
296− slider.opacity = 0
297− enabled = false
230+ enabled = false
298− leftShape.state = "selected"
231+ leftTriggered()
299− }
232+ }
300− if (slider.x === drag.maximumX) {
233+ if (slider.x === drag.maximumX) {
301− slider.x = drag.maximumX
234+ slider.x = drag.maximumX
302− slider.opacity = 0
303− enabled = false
235+ enabled = false
304− rightShape.state = "selected"
236+ rightTriggered()
305− }
306 }
237 }
307 }
238 }
308 }
239 }
qml/Notifications/grip-large.svgnew file+150
@@ -0,0 +1,150 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="90"
13+ height="90"
14+ id="svg4874"
15+ version="1.1"
16+ inkscape:version="0.91+devel r"
17+ viewBox="0 0 90 90.000001"
18+ sodipodi:docname="grip-large01.svg">
19+ <defs
20+ id="defs4876" />
21+ <sodipodi:namedview
22+ id="base"
23+ pagecolor="#ffffff"
24+ bordercolor="#666666"
25+ borderopacity="1.0"
26+ inkscape:pageopacity="0.0"
27+ inkscape:pageshadow="2"
28+ inkscape:zoom="7.9580786"
29+ inkscape:cx="13.632541"
30+ inkscape:cy="49.591116"
31+ inkscape:document-units="px"
32+ inkscape:current-layer="g1708"
33+ showgrid="true"
34+ showborder="true"
35+ fit-margin-top="0"
36+ fit-margin-left="0"
37+ fit-margin-right="0"
38+ fit-margin-bottom="0"
39+ inkscape:snap-bbox="true"
40+ inkscape:bbox-paths="true"
41+ inkscape:bbox-nodes="true"
42+ inkscape:snap-bbox-edge-midpoints="true"
43+ inkscape:snap-bbox-midpoints="true"
44+ inkscape:object-paths="true"
45+ inkscape:snap-intersection-paths="true"
46+ inkscape:object-nodes="true"
47+ inkscape:snap-smooth-nodes="true"
48+ inkscape:snap-midpoints="true"
49+ inkscape:snap-object-midpoints="true"
50+ inkscape:snap-center="true"
51+ showguides="true"
52+ inkscape:guide-bbox="true">
53+ <inkscape:grid
54+ type="xygrid"
55+ id="grid5451"
56+ empspacing="6" />
57+ <sodipodi:guide
58+ orientation="1,0"
59+ position="6,77"
60+ id="guide4063" />
61+ <sodipodi:guide
62+ orientation="1,0"
63+ position="3,78"
64+ id="guide4065" />
65+ <sodipodi:guide
66+ orientation="0,1"
67+ position="55,84"
68+ id="guide4067" />
69+ <sodipodi:guide
70+ orientation="0,1"
71+ position="53,87"
72+ id="guide4069" />
73+ <sodipodi:guide
74+ orientation="0,1"
75+ position="20,3"
76+ id="guide4071" />
77+ <sodipodi:guide
78+ orientation="0,1"
79+ position="20,6"
80+ id="guide4073" />
81+ <sodipodi:guide
82+ orientation="1,0"
83+ position="87,7"
84+ id="guide4075" />
85+ <sodipodi:guide
86+ orientation="1,0"
87+ position="84,7"
88+ id="guide4077" />
89+ <sodipodi:guide
90+ orientation="0,1"
91+ position="58,81"
92+ id="guide4074" />
93+ <sodipodi:guide
94+ orientation="1,0"
95+ position="9,74"
96+ id="guide4076" />
97+ <sodipodi:guide
98+ orientation="0,1"
99+ position="21,9"
100+ id="guide4078" />
101+ <sodipodi:guide
102+ orientation="1,0"
103+ position="81,4"
104+ id="guide4080" />
105+ </sodipodi:namedview>
106+ <metadata
107+ id="metadata4879">
108+ <rdf:RDF>
109+ <cc:Work
110+ rdf:about="">
111+ <dc:format>image/svg+xml</dc:format>
112+ <dc:type
113+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
114+ <dc:title></dc:title>
115+ </cc:Work>
116+ </rdf:RDF>
117+ </metadata>
118+ <g
119+ inkscape:label="Layer 1"
120+ inkscape:groupmode="layer"
121+ id="layer1"
122+ transform="translate(67.857146,-84.50504)">
123+ <g
124+ transform="matrix(0,-1,-1,0,373.50506,516.50504)"
125+ id="g4845"
126+ style="display:inline">
127+ <g
128+ inkscape:label="Layer 1"
129+ id="g1708"
130+ transform="matrix(0,-1,-1,0,1394.3622,441.36221)"
131+ inkscape:export-filename="add01.png"
132+ inkscape:export-xdpi="90"
133+ inkscape:export-ydpi="90">
134+ <rect
135+ style="color:#000000;fill:none;stroke:none;stroke-width:7.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
136+ id="rect1710"
137+ width="90"
138+ height="90"
139+ x="0"
140+ y="962.36218" />
141+ <path
142+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
143+ d="m 9.000004,971.3622 c -2.209139,0 -4,1.79086 -4,4 0,2.20914 1.790861,4 4,4 2.209139,0 4,-1.79086 4,-4 0,-2.20914 -1.790861,-4 -4,-4 z m 18.199219,0 c -2.209139,0 -4,1.79086 -4,4 0,2.20914 1.790861,4 4,4 2.209139,0 4,-1.79086 4,-4 0,-2.20914 -1.790861,-4 -4,-4 z m 17.800781,0 c -2.209139,0 -4,1.79086 -4,4 0,2.20914 1.790861,4 4,4 2.209139,0 4,-1.79086 4,-4 0,-2.20914 -1.790861,-4 -4,-4 z m 18.199219,0 c -2.209139,0 -4,1.79086 -4,4 0,2.20914 1.790861,4 4,4 2.209139,0 4,-1.79086 4,-4 0,-2.20914 -1.790861,-4 -4,-4 z m 17.800781,0 c -2.209139,0 -4,1.79086 -4,4 0,2.20914 1.790861,4 4,4 2.209139,0 4,-1.79086 4,-4 0,-2.20914 -1.790861,-4 -4,-4 z m -72,16 c -2.209139,0 -4,1.79086 -4,4 0,2.20914 1.790861,4 4,4 2.209139,0 4,-1.79086 4,-4 0,-2.20914 -1.790861,-4 -4,-4 z m 18.199219,0 c -2.209139,0 -4,1.79086 -4,4 0,2.20914 1.790861,4 4,4 2.209139,0 4,-1.79086 4,-4 0,-2.20914 -1.790861,-4 -4,-4 z m 17.800781,0 c -2.209139,0 -4,1.79086 -4,4 0,2.20914 1.790861,4 4,4 2.209139,0 4,-1.79086 4,-4 0,-2.20914 -1.790861,-4 -4,-4 z m 18.199219,0 c -2.209139,0 -4,1.79086 -4,4 0,2.20914 1.790861,4 4,4 2.209139,0 4,-1.79086 4,-4 0,-2.20914 -1.790861,-4 -4,-4 z m 17.800781,0 c -2.209139,0 -4,1.79086 -4,4 0,2.20914 1.790861,4 4,4 2.209139,0 4,-1.79086 4,-4 0,-2.20914 -1.790861,-4 -4,-4 z m -72,16 c -2.209139,0 -4,1.7909 -4,4 0,2.2091 1.790861,4 4,4 2.209139,0 4,-1.7909 4,-4 0,-2.2091 -1.790861,-4 -4,-4 z m 18.199219,0 c -2.209139,0 -4,1.7909 -4,4 0,2.2091 1.790861,4 4,4 2.209139,0 4,-1.7909 4,-4 0,-2.2091 -1.790861,-4 -4,-4 z m 17.800781,0 c -2.209139,0 -4,1.7909 -4,4 0,2.2091 1.790861,4 4,4 2.209139,0 4,-1.7909 4,-4 0,-2.2091 -1.790861,-4 -4,-4 z m 18.199219,0 c -2.209139,0 -4,1.7909 -4,4 0,2.2091 1.790861,4 4,4 2.209139,0 4,-1.7909 4,-4 0,-2.2091 -1.790861,-4 -4,-4 z m 17.800781,0 c -2.209139,0 -4,1.7909 -4,4 0,2.2091 1.790861,4 4,4 2.209139,0 4,-1.7909 4,-4 0,-2.2091 -1.790861,-4 -4,-4 z m -72,16 c -2.209139,0 -4,1.7909 -4,4 0,2.2091 1.790861,4 4,4 2.209139,0 4,-1.7909 4,-4 0,-2.2091 -1.790861,-4 -4,-4 z m 18.199219,0 c -2.209139,0 -4,1.7909 -4,4 0,2.2091 1.790861,4 4,4 2.209139,0 4,-1.7909 4,-4 0,-2.2091 -1.790861,-4 -4,-4 z m 17.800781,0 c -2.209139,0 -4,1.7909 -4,4 0,2.2091 1.790861,4 4,4 2.209139,0 4,-1.7909 4,-4 0,-2.2091 -1.790861,-4 -4,-4 z m 18.199219,0 c -2.209139,0 -4,1.7909 -4,4 0,2.2091 1.790861,4 4,4 2.209139,0 4,-1.7909 4,-4 0,-2.2091 -1.790861,-4 -4,-4 z m 17.800781,0 c -2.209139,0 -4,1.7909 -4,4 0,2.2091 1.790861,4 4,4 2.209139,0 4,-1.7909 4,-4 0,-2.2091 -1.790861,-4 -4,-4 z m -72,16 c -2.209139,0 -4,1.7909 -4,4 0,2.2091 1.790861,4 4,4 2.209139,0 4,-1.7909 4,-4 0,-2.2091 -1.790861,-4 -4,-4 z m 18.199219,0 c -2.209139,0 -4,1.7909 -4,4 0,2.2091 1.790861,4 4,4 2.209139,0 4,-1.7909 4,-4 0,-2.2091 -1.790861,-4 -4,-4 z m 17.800781,0 c -2.209139,0 -4,1.7909 -4,4 0,2.2091 1.790861,4 4,4 2.209139,0 4,-1.7909 4,-4 0,-2.2091 -1.790861,-4 -4,-4 z m 18.199219,0 c -2.209139,0 -4,1.7909 -4,4 0,2.2091 1.790861,4 4,4 2.209139,0 4,-1.7909 4,-4 0,-2.2091 -1.790861,-4 -4,-4 z m 17.800781,0 c -2.209139,0 -4,1.7909 -4,4 0,2.2091 1.790861,4 4,4 2.209139,0 4,-1.7909 4,-4 0,-2.2091 -1.790861,-4 -4,-4 z"
144+ id="path4169"
145+ inkscape:connector-curvature="0"
146+ sodipodi:nodetypes="sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss" />
147+ </g>
148+ </g>
149+ </g>
150+</svg>
qml/Panel/Indicators/MessageMenuItemFactory.qml+1−1
@@ -146,7 +146,7 @@ Loader {
146 time: timeFormatter.timeString
146 time: timeFormatter.timeString
147 body: getExtendedProperty(extendedData, "xCanonicalText", "")
147 body: getExtendedProperty(extendedData, "xCanonicalText", "")
148 replyButtonText: getExtendedProperty(replyActionDescription, "label", "Send")
148 replyButtonText: getExtendedProperty(replyActionDescription, "label", "Send")
149− replyHintText: i18n.tr("Reply")
149+ replyHintText: i18n.ctr("Label: Hint in message indicator line edit", "Reply")
150 // icons
150 // icons
151 avatar: getExtendedProperty(extendedData, "icon", "image://theme/contact")
151 avatar: getExtendedProperty(extendedData, "icon", "image://theme/contact")
152 icon: getExtendedProperty(extendedData, "xCanonicalAppIcon", "image://theme/message")
152 icon: getExtendedProperty(extendedData, "xCanonicalAppIcon", "image://theme/message")
qml/Panel/IndicatorsMenu.qml+16
@@ -162,8 +162,18 @@ Showable {
162 onScroll: bar.addScrollOffset(scrollAmount);
162 onScroll: bar.addScrollOffset(scrollAmount);
163 }
163 }
164
164
165+ MouseArea {
166+ anchors.fill: __showDragHandle
167+ enabled: __showDragHandle.enabled
168+ onClicked: {
169+ bar.selectItemAt(mouseX)
170+ root.show()
171+ }
172+ }
173+
165 DragHandle {
174 DragHandle {
166 id: __showDragHandle
175 id: __showDragHandle
176+ objectName: "showDragHandle"
167 anchors.bottom: parent.bottom
177 anchors.bottom: parent.bottom
168 anchors.left: parent.left
178 anchors.left: parent.left
169 anchors.right: parent.right
179 anchors.right: parent.right
@@ -182,6 +192,12 @@ Showable {
182 hintDisplacement: enableHint ? expandedPanelHeight - minimizedPanelHeight + handle.height : 0
192 hintDisplacement: enableHint ? expandedPanelHeight - minimizedPanelHeight + handle.height : 0
183 }
193 }
184
194
195+ MouseArea {
196+ anchors.fill: __hideDragHandle
197+ enabled: __hideDragHandle.enabled
198+ onClicked: root.hide()
199+ }
200+
185 DragHandle {
201 DragHandle {
186 id: __hideDragHandle
202 id: __hideDragHandle
187 anchors.fill: handle
203 anchors.fill: handle
qml/Panel/Panel.qml+1−1
@@ -40,10 +40,10 @@ Item {
40 }
40 }
41 color: "black"
41 color: "black"
42 opacity: indicators.unitProgress * darkenedOpacity
42 opacity: indicators.unitProgress * darkenedOpacity
43+ visible: !indicators.fullyClosed
43
44
44 MouseArea {
45 MouseArea {
45 anchors.fill: parent
46 anchors.fill: parent
46− enabled: indicators.shown
47 onClicked: if (indicators.fullyOpened) indicators.hide();
47 onClicked: if (indicators.fullyOpened) indicators.hide();
48 }
48 }
49 }
49 }
qml/Panel/SearchIndicator.qmldeleted−82
@@ -1,82 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−import "../Components"
20−
21−Item {
22− id: search
23−
24− width: container.width + units.gu(2)
25− height: units.gu(3)
26−
27− property string headerText: i18n.tr("Search")
28−
29− signal clicked
30−
31− // eater
32− MouseArea {
33− anchors.fill: parent
34− onClicked: search.clicked()
35− }
36−
37− Row {
38− id: container
39− objectName: "container"
40−
41− height: parent.height
42− width: childrenRect.width
43− anchors {
44− left: parent.left
45− leftMargin: units.gu(1)
46− }
47− spacing: units.gu(1)
48−
49− Behavior on opacity { StandardAnimation { duration: 300 } }
50−
51− Image {
52− id: icon
53− source: "graphics/search.png"
54− anchors.verticalCenter: parent.verticalCenter
55− }
56−
57− Label {
58− text: search.headerText
59− color: Qt.rgba(0.8, 0.8, 0.8, 1.0)
60− fontSize: "small"
61− font.capitalization: Font.AllUppercase
62− anchors.verticalCenter: parent.verticalCenter
63− }
64− }
65−
66− states: [
67− State {
68− name: "visible"
69− PropertyChanges {
70− target: container
71− opacity: 1
72− }
73− },
74− State {
75− name: "hidden"
76− PropertyChanges {
77− target: container
78− opacity: 0
79− }
80− }
81− ]
82−}
qml/Shell.qml+12−1
@@ -23,6 +23,7 @@ import Ubuntu.Components 0.1
23import Ubuntu.Components.Popups 1.0
23import Ubuntu.Components.Popups 1.0
24import Ubuntu.Gestures 0.1
24import Ubuntu.Gestures 0.1
25import Ubuntu.Telephony 0.1 as Telephony
25import Ubuntu.Telephony 0.1 as Telephony
26+import Unity.Connectivity 0.1
26import Unity.Launcher 0.1
27import Unity.Launcher 0.1
27import Utils 0.1
28import Utils 0.1
28import LightDM 0.1 as LightDM
29import LightDM 0.1 as LightDM
@@ -191,7 +192,7 @@ Item {
191 onFocusedApplicationIdChanged: {
192 onFocusedApplicationIdChanged: {
192 var appId = ApplicationManager.focusedApplicationId;
193 var appId = ApplicationManager.focusedApplicationId;
193
194
194− if (tutorial.running && appId != "unity8-dash") {
195+ if (tutorial.running && appId != "" && appId != "unity8-dash") {
195 // If this happens on first boot, we may be in edge
196 // If this happens on first boot, we may be in edge
196 // tutorial or wizard while receiving a call. But a call
197 // tutorial or wizard while receiving a call. But a call
197 // is more important than wizard so just bail out of those.
198 // is more important than wizard so just bail out of those.
@@ -508,8 +509,18 @@ Item {
508
509
509 Wizard {
510 Wizard {
510 id: wizard
511 id: wizard
512+ objectName: "wizard"
511 anchors.fill: parent
513 anchors.fill: parent
512 background: shell.background
514 background: shell.background
515+
516+ function unlockWhenDoneWithWizard() {
517+ if (!active) {
518+ Connectivity.unlockAllModems();
519+ }
520+ }
521+
522+ Component.onCompleted: unlockWhenDoneWithWizard()
523+ onActiveChanged: unlockWhenDoneWithWizard()
513 }
524 }
514
525
515 Rectangle {
526 Rectangle {
qml/Stages/ApplicationWindow.qml+2−1
@@ -110,7 +110,8 @@ FocusScope {
110
110
111 SessionContainer {
111 SessionContainer {
112 id: sessionContainer
112 id: sessionContainer
113+ // A fake application might not even have a session property.
113− session: application ? application.session : null
114+ session: application && application.session ? application.session : null
114 anchors.fill: parent
115 anchors.fill: parent
115 orientation: root.orientation
116 orientation: root.orientation
116
117
qml/Stages/DecoratedWindow.qml+5−4
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2014 Canonical, Ltd.
2+ * Copyright (C) 2014-2015 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
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
5 * it under the terms of the GNU General Public License as published by
@@ -20,13 +20,12 @@ import QtQuick 2.3
20import Ubuntu.Components 1.1
20import Ubuntu.Components 1.1
21import Unity.Application 0.1
21import Unity.Application 0.1
22
22
23−Item {
23+FocusScope {
24 id: root
24 id: root
25
25
26 property alias application: applicationWindow.application
26 property alias application: applicationWindow.application
27 property alias active: decoration.active
27 property alias active: decoration.active
28
28
29− signal requestFocus();
30 signal close();
29 signal close();
31 signal maximize();
30 signal maximize();
32 signal minimize();
31 signal minimize();
@@ -53,8 +52,10 @@ Item {
53
52
54 ApplicationWindow {
53 ApplicationWindow {
55 id: applicationWindow
54 id: applicationWindow
55+ objectName: application ? "appWindow_" + application.appId : "appWindow_null"
56 anchors.fill: parent
56 anchors.fill: parent
57 anchors.topMargin: units.gu(3)
57 anchors.topMargin: units.gu(3)
58− interactive: index == 0
58+ interactive: true
59+ focus: true
59 }
60 }
60}
61}
qml/Stages/DesktopStage.qml+15−3
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2014 Canonical, Ltd.
2+ * Copyright (C) 2014-2015 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
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
5 * it under the terms of the GNU General Public License as published by
@@ -20,14 +20,17 @@ import QtQuick 2.3
20import Ubuntu.Components 1.1
20import Ubuntu.Components 1.1
21import Unity.Application 0.1
21import Unity.Application 0.1
22import "../Components/PanelState"
22import "../Components/PanelState"
23+import Utils 0.1
23
24
24−Item {
25+FocusScope {
25 id: root
26 id: root
26
27
27 anchors.fill: parent
28 anchors.fill: parent
28
29
29 property alias background: wallpaper.source
30 property alias background: wallpaper.source
30
31
32+ property var windowStateStorage: WindowStateStorage
33+
31 CrossFadeImage {
34 CrossFadeImage {
32 id: wallpaper
35 id: wallpaper
33 anchors.fill: parent
36 anchors.fill: parent
@@ -116,20 +119,29 @@ Item {
116 ]
119 ]
117
120
118 WindowMoveResizeArea {
121 WindowMoveResizeArea {
122+ windowStateStorage: root.windowStateStorage
119 target: appDelegate
123 target: appDelegate
120 minWidth: appDelegate.minWidth
124 minWidth: appDelegate.minWidth
121 minHeight: appDelegate.minHeight
125 minHeight: appDelegate.minHeight
122 resizeHandleWidth: units.gu(0.5)
126 resizeHandleWidth: units.gu(0.5)
123 windowId: model.appId // FIXME: Change this to point to windowId once we have such a thing
127 windowId: model.appId // FIXME: Change this to point to windowId once we have such a thing
124
128
125− onPressed: ApplicationManager.requestFocusApplication(model.appId)
129+ onPressed: decoratedWindow.focus = true;
126 }
130 }
127
131
128 DecoratedWindow {
132 DecoratedWindow {
133+ id: decoratedWindow
134+ objectName: "decoratedWindow_" + appId
129 anchors.fill: parent
135 anchors.fill: parent
130 application: ApplicationManager.get(index)
136 application: ApplicationManager.get(index)
131 active: ApplicationManager.focusedApplicationId === model.appId
137 active: ApplicationManager.focusedApplicationId === model.appId
132
138
139+ onFocusChanged: {
140+ if (focus) {
141+ ApplicationManager.requestFocusApplication(model.appId);
142+ }
143+ }
144+
133 onClose: ApplicationManager.stopApplication(model.appId)
145 onClose: ApplicationManager.stopApplication(model.appId)
134 onMaximize: appDelegate.state = (appDelegate.state == "maximized" ? "normal" : "maximized")
146 onMaximize: appDelegate.state = (appDelegate.state == "maximized" ? "normal" : "maximized")
135 onMinimize: appDelegate.state = "minimized"
147 onMinimize: appDelegate.state = "minimized"
qml/Stages/WindowDecoration.qml+1
@@ -55,6 +55,7 @@ Item {
55
55
56 Label {
56 Label {
57 id: titleLabel
57 id: titleLabel
58+ objectName: "windowDecorationTitle"
58 color: "#DFDBD2"
59 color: "#DFDBD2"
59 height: parent.height
60 height: parent.height
60 verticalAlignment: Text.AlignVCenter
61 verticalAlignment: Text.AlignVCenter
qml/Stages/WindowMoveResizeArea.qml+5−3
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2014 Canonical, Ltd.
2+ * Copyright (C) 2014-2015 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
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
5 * it under the terms of the GNU General Public License as published by
@@ -25,6 +25,8 @@ MouseArea {
25 anchors.fill: target
25 anchors.fill: target
26 anchors.margins: -resizeHandleWidth
26 anchors.margins: -resizeHandleWidth
27
27
28+ property var windowStateStorage: WindowStateStorage
29+
28 // The target item managed by this. Must be a parent or a sibling
30 // The target item managed by this. Must be a parent or a sibling
29 // The area will anchor to it and manage move and resize events
31 // The area will anchor to it and manage move and resize events
30 property Item target: null
32 property Item target: null
@@ -48,7 +50,7 @@ MouseArea {
48 }
50 }
49
51
50 Component.onCompleted: {
52 Component.onCompleted: {
51− var windowState = WindowStateStorage.getGeometry(root.windowId, Qt.rect(target.x, target.y, target.width, target.height))
53+ var windowState = windowStateStorage.getGeometry(root.windowId, Qt.rect(target.x, target.y, target.width, target.height))
52 if (windowState !== undefined) {
54 if (windowState !== undefined) {
53 target.x = windowState.x
55 target.x = windowState.x
54 target.y = windowState.y
56 target.y = windowState.y
@@ -102,6 +104,6 @@ MouseArea {
102 }
104 }
103
105
104 Component.onDestruction: {
106 Component.onDestruction: {
105− WindowStateStorage.saveGeometry(root.windowId, Qt.rect(target.x, target.y, target.width, target.height))
107+ windowStateStorage.saveGeometry(root.windowId, Qt.rect(target.x, target.y, target.width, target.height))
106 }
108 }
107}
109}
qml/Wizard/Page.qml+1−1
@@ -86,7 +86,7 @@ Item {
86 bottomMargin: buttonMargin
86 bottomMargin: buttonMargin
87 }
87 }
88 z: 1
88 z: 1
89− text: i18n.tr("Back")
89+ text: i18n.ctr("Button: Go back one page in the Wizard", "Back")
90 visible: pageStack.depth > 1 && hasBackButton
90 visible: pageStack.depth > 1 && hasBackButton
91 backArrow: true
91 backArrow: true
92
92
qml/Wizard/Pages.qml+14−1
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013,2014,2015 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
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
5 * it under the terms of the GNU General Public License as published by
@@ -110,6 +110,8 @@ Item {
110 // this page, and either skip it or continue.
110 // this page, and either skip it or continue.
111 push(path, {"opacity": 0, "enabled": false})
111 push(path, {"opacity": 0, "enabled": false})
112
112
113+ timeout.restart();
114+
113 // Check for immediate skip or not. We may have to wait for
115 // Check for immediate skip or not. We may have to wait for
114 // skipValid to be assigned (see Connections object below)
116 // skipValid to be assigned (see Connections object below)
115 checkSkip()
117 checkSkip()
@@ -124,10 +126,21 @@ Item {
124 } else {
126 } else {
125 currentPage.opacity = 1
127 currentPage.opacity = 1
126 currentPage.enabled = true
128 currentPage.enabled = true
129+ timeout.stop();
127 }
130 }
128 }
131 }
129 }
132 }
130
133
134+ Timer {
135+ id: timeout
136+ objectName: "timeout"
137+ interval: 2000 // wizard pages shouldn't take long
138+ onTriggered: {
139+ pageStack.currentPage.skip = true;
140+ pageStack.currentPage.skipValid = true;
141+ }
142+ }
143+
131 Connections {
144 Connections {
132 target: pageStack.currentPage
145 target: pageStack.currentPage
133 onSkipValidChanged: pageStack.checkSkip()
146 onSkipValidChanged: pageStack.checkSkip()
qml/Wizard/Pages/30-passwd-type.qml+6−6
@@ -94,14 +94,14 @@ LocalComponents.Page {
94 var name = ""
94 var name = ""
95 var desc = ""
95 var desc = ""
96 if (method === UbuntuSecurityPrivacyPanel.Swipe) {
96 if (method === UbuntuSecurityPrivacyPanel.Swipe) {
97− name = i18n.tr("Swipe")
97+ name = i18n.ctr("Label: Type of security method", "Swipe")
98− desc = i18n.tr("No security")
98+ desc = i18n.ctr("Label: Description of security method", "No security")
99 } else if (method === UbuntuSecurityPrivacyPanel.Passcode) {
99 } else if (method === UbuntuSecurityPrivacyPanel.Passcode) {
100− name = i18n.tr("Passcode")
100+ name = i18n.ctr("Label: Type of security method", "Passcode")
101− desc = i18n.tr("4 digits only")
101+ desc = i18n.ctr("Label: Description of security method", "4 digits only")
102 } else {
102 } else {
103− name = i18n.tr("Passphrase")
103+ name = i18n.ctr("Label: Type of security method", "Passphrase")
104− desc = i18n.tr("Numbers and letters")
104+ desc = i18n.ctr("Label: Description of security method", "Numbers and letters")
105 }
105 }
106 return "<b>%1</b> (%2)".arg(name).arg(desc)
106 return "<b>%1</b> (%2)".arg(name).arg(desc)
107 }
107 }
qml/Wizard/Wizard.qml+6−1
@@ -25,7 +25,12 @@ Showable {
25 // The background wallpaper to use
25 // The background wallpaper to use
26 property string background
26 property string background
27
27
28+ // This is a bool instead of an alias because Loader classes like to emit
29+ // changed signals for 'active' during startup even if they aren't actually
30+ // changing values. Having it cached as a proper Qml bool property prevents
31+ // unnecessary 'changed' emissions and provides consuming classes the
32+ // expected behavior of no emission on startup.
28− readonly property alias active: loader.active
33+ readonly property bool active: loader.active
29
34
30 hideAnimation: StandardAnimation { property: "opacity"; to: 0 }
35 hideAnimation: StandardAnimation { property: "opacity"; to: 0 }
31
36
tests/autopilot/setup.py+2−2
@@ -1,8 +1,8 @@
1−#!/usr/bin/python
1+#!/usr/bin/python3
2# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
3#
3#
4# Unity Autopilot Test Suite
4# Unity Autopilot Test Suite
5−# Copyright (C) 2012-2013 Canonical
5+# Copyright (C) 2012, 2013, 2015 Canonical
6#
6#
7# This program is free software: you can redistribute it and/or modify
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
8# it under the terms of the GNU General Public License as published by
tests/autopilot/unity8/application_lifecycle/tests/__init__.py+2−2
@@ -1,7 +1,7 @@
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2#
2#
3# Unity Autopilot Test Suite
3# Unity Autopilot Test Suite
4−# Copyright (C) 2014 Canonical
4+# Copyright (C) 2014, 2015 Canonical
5#
5#
6# This program is free software: you can redistribute it and/or modify
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
7# it under the terms of the GNU General Public License as published by
@@ -28,7 +28,7 @@ from unity8.shell import tests
28class ApplicationLifeCycleTestCase(tests.UnityTestCase):
28class ApplicationLifeCycleTestCase(tests.UnityTestCase):
29
29
30 def setUp(self):
30 def setUp(self):
31− super(ApplicationLifeCycleTestCase, self).setUp()
31+ super().setUp()
32 self._qml_mock_enabled = False
32 self._qml_mock_enabled = False
33 self._data_dirs_mock_enabled = False
33 self._data_dirs_mock_enabled = False
34 unity_proxy = self.launch_unity()
34 unity_proxy = self.launch_unity()
tests/autopilot/unity8/application_lifecycle/tests/test_application_lifecycle.py+2−4
@@ -1,7 +1,7 @@
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2#
2#
3# Unity Autopilot Test Suite
3# Unity Autopilot Test Suite
4−# Copyright (C) 2013, 2014 Canonical
4+# Copyright (C) 2013, 2014, 2015 Canonical
5#
5#
6# This program is free software: you can redistribute it and/or modify
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
7# it under the terms of the GNU General Public License as published by
@@ -19,8 +19,6 @@
19
19
20"""Tests for the application lifecycle."""
20"""Tests for the application lifecycle."""
21
21
22−from __future__ import absolute_import
23−
24import logging
22import logging
25import os
23import os
26
24
@@ -40,7 +38,7 @@ class ApplicationLifecycleTests(tests.ApplicationLifeCycleTestCase):
40 def setUp(self):
38 def setUp(self):
41 if model() == 'Desktop':
39 if model() == 'Desktop':
42 self.skipTest('Test cannot be run on the desktop.')
40 self.skipTest('Test cannot be run on the desktop.')
43− super(ApplicationLifecycleTests, self).setUp()
41+ super().setUp()
44
42
45 def swipe_screen_from_right(self):
43 def swipe_screen_from_right(self):
46 width = self.main_window.width
44 width = self.main_window.width
tests/autopilot/unity8/application_lifecycle/tests/test_url_dispatcher.py+2−2
@@ -1,7 +1,7 @@
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2#
2#
3# Unity Autopilot Test Suite
3# Unity Autopilot Test Suite
4−# Copyright (C) 2014 Canonical
4+# Copyright (C) 2014, 2015 Canonical
5#
5#
6# This program is free software: you can redistribute it and/or modify
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
7# it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@ class URLDispatcherTestCase(tests.ApplicationLifeCycleTestCase):
32 def setUp(self):
32 def setUp(self):
33 if platform.model() == 'Desktop':
33 if platform.model() == 'Desktop':
34 self.skipTest("URL dispatcher doesn't work on the desktop.")
34 self.skipTest("URL dispatcher doesn't work on the desktop.")
35− super(URLDispatcherTestCase, self).setUp()
35+ super().setUp()
36
36
37 def test_swipe_out_application_started_by_url_dispatcher(self):
37 def test_swipe_out_application_started_by_url_dispatcher(self):
38 _, desktop_file_path = self.create_test_application()
38 _, desktop_file_path = self.create_test_application()
tests/autopilot/unity8/fixture_setup.py+4−4
@@ -38,13 +38,13 @@ class LaunchDashApp(fixtures.Fixture):
38 :type variables: A dictionary.
38 :type variables: A dictionary.
39
39
40 """
40 """
41− super(LaunchDashApp, self).__init__()
41+ super().__init__()
42 self.binary_path = binary_path
42 self.binary_path = binary_path
43 self.variables = variables
43 self.variables = variables
44
44
45 def setUp(self):
45 def setUp(self):
46 """Launch the dash app when the fixture is used."""
46 """Launch the dash app when the fixture is used."""
47− super(LaunchDashApp, self).setUp()
47+ super().setUp()
48 self.addCleanup(self.stop_application)
48 self.addCleanup(self.stop_application)
49 self.application_proxy = self.launch_application()
49 self.application_proxy = self.launch_application()
50
50
@@ -69,11 +69,11 @@ class LaunchDashApp(fixtures.Fixture):
69class DisplayRotationLock(fixtures.Fixture):
69class DisplayRotationLock(fixtures.Fixture):
70
70
71 def __init__(self, enable):
71 def __init__(self, enable):
72− super(DisplayRotationLock, self).__init__()
72+ super().__init__()
73 self.enable = enable
73 self.enable = enable
74
74
75 def setUp(self):
75 def setUp(self):
76− super(DisplayRotationLock, self).setUp()
76+ super().setUp()
77 original_state = self._is_rotation_lock_enabled()
77 original_state = self._is_rotation_lock_enabled()
78 if self.enable != original_state:
78 if self.enable != original_state:
79 self.addCleanup(self._set_rotation_lock, original_state)
79 self.addCleanup(self._set_rotation_lock, original_state)
tests/autopilot/unity8/indicators/__init__.py+1−1
@@ -34,7 +34,7 @@ class IndicatorPage(emulators.UnityEmulatorBase):
34 return False
34 return False
35
35
36
36
37−class DisplayIndicator(object):
37+class DisplayIndicator():
38
38
39 def __init__(self, main_window):
39 def __init__(self, main_window):
40 self._main_window = main_window
40 self._main_window = main_window
tests/autopilot/unity8/indicators/tests/__init__.py+1−1
@@ -29,6 +29,6 @@ class IndicatorTestCase(tests.UnityTestCase):
29 def setUp(self):
29 def setUp(self):
30 if platform.model() == 'Desktop':
30 if platform.model() == 'Desktop':
31 self.skipTest('Test cannot be run on the desktop.')
31 self.skipTest('Test cannot be run on the desktop.')
32− super(IndicatorTestCase, self).setUp()
32+ super().setUp()
33 self.unity_proxy = self.launch_unity()
33 self.unity_proxy = self.launch_unity()
34 process_helpers.unlock_unity(self.unity_proxy)
34 process_helpers.unlock_unity(self.unity_proxy)
tests/autopilot/unity8/indicators/tests/test_display_indicator.py−3
@@ -26,9 +26,6 @@ from unity8.indicators import tests
26class DisplayIndicatorTestCase(tests.IndicatorTestCase):
26class DisplayIndicatorTestCase(tests.IndicatorTestCase):
27
27
28 def test_indicator_icon_must_be_visible_after_rotation_locked(self):
28 def test_indicator_icon_must_be_visible_after_rotation_locked(self):
29− # TODO remove the skip when the bug is fixed. --elopio - 2015-01-20
30− self.skipTest(
31− 'This test fails because of bug http://pad.lv/1410915')
32 rotation_unlocked = fixture_setup.DisplayRotationLock(False)
29 rotation_unlocked = fixture_setup.DisplayRotationLock(False)
33 self.useFixture(rotation_unlocked)
30 self.useFixture(rotation_unlocked)
34 display_indicator = indicators.DisplayIndicator(self.main_window)
31 display_indicator = indicators.DisplayIndicator(self.main_window)
tests/autopilot/unity8/indicators/tests/test_indicators.py+2−4
@@ -16,8 +16,6 @@
16# You should have received a copy of the GNU General Public License
16# You should have received a copy of the GNU General Public License
17# along with this program. If not, see <http://www.gnu.org/licenses/>.
17# along with this program. If not, see <http://www.gnu.org/licenses/>.
18
18
19−from __future__ import absolute_import
20−
21from testscenarios import multiply_scenarios
19from testscenarios import multiply_scenarios
22
20
23from autopilot import platform
21from autopilot import platform
@@ -42,7 +40,7 @@ class IndicatorExistsTestCase(tests.IndicatorTestCase):
42 )
40 )
43
41
44 def setUp(self):
42 def setUp(self):
45− super(IndicatorExistsTestCase, self).setUp()
43+ super().setUp()
46 if (platform.model() == 'Nexus 10' and
44 if (platform.model() == 'Nexus 10' and
47 self.indicator_name == 'indicator-bluetooth'):
45 self.indicator_name == 'indicator-bluetooth'):
48 self.skipTest('Nexus 10 does not have bluetooth at the moment.')
46 self.skipTest('Nexus 10 does not have bluetooth at the moment.')
@@ -77,7 +75,7 @@ class IndicatorPageTitleMatchesWidgetTestCase(tests.IndicatorTestCase):
77 )
75 )
78
76
79 def setUp(self):
77 def setUp(self):
80− super(IndicatorPageTitleMatchesWidgetTestCase, self).setUp()
78+ super().setUp()
81 if (platform.model() == 'Nexus 10' and
79 if (platform.model() == 'Nexus 10' and
82 self.indicator_name == 'indicator-bluetooth'):
80 self.indicator_name == 'indicator-bluetooth'):
83 self.skipTest('Nexus 10 does not have bluetooth at the moment.')
81 self.skipTest('Nexus 10 does not have bluetooth at the moment.')
tests/autopilot/unity8/process_helpers.py+2−9
@@ -1,7 +1,7 @@
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2#
2#
3# Unity Autopilot Utilities
3# Unity Autopilot Utilities
4−# Copyright (C) 2013, 2014 Canonical
4+# Copyright (C) 2013, 2014, 2015 Canonical
5#
5#
6# This program is free software: you can redistribute it and/or modify
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
7# it under the terms of the GNU General Public License as published by
@@ -19,16 +19,9 @@
19
19
20import logging
20import logging
21import subprocess
21import subprocess
22−import sys
23import dbus
22import dbus
24
23
25−# This has to work in both python 3 (ap 1.5) and py2 (ap legacy 1.4.1) so we
26−# pick the correct location in each case. Remove the py2 branch once we no
27−# longer need to support python 2.
28−if sys.version >= '3':
29− from autopilot.exceptions import ProcessSearchError
24+from autopilot.exceptions import ProcessSearchError
30−else:
31− from autopilot.introspection import ProcessSearchError
32from autopilot.introspection import get_proxy_object_for_existing_process
25from autopilot.introspection import get_proxy_object_for_existing_process
33
26
34from unity8.shell import emulators
27from unity8.shell import emulators
tests/autopilot/unity8/shell/__init__.py+2−2
@@ -1,7 +1,7 @@
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2#
2#
3# Unity Autopilot Test Suite
3# Unity Autopilot Test Suite
4−# Copyright (C) 2012-2013 Canonical
4+# Copyright (C) 2012-2015 Canonical
5#
5#
6# This program is free software: you can redistribute it and/or modify
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
7# it under the terms of the GNU General Public License as published by
@@ -38,7 +38,7 @@ def disable_qml_mocking(fn):
38 return wrapper
38 return wrapper
39
39
40
40
41−class DragMixin(object):
41+class DragMixin():
42 def _drag(self, x1, y1, x2, y2):
42 def _drag(self, x1, y1, x2, y2):
43 # XXX This ugly code is here just temporarily, waiting for drag
43 # XXX This ugly code is here just temporarily, waiting for drag
44 # improvements to land on autopilot so we don't have to access device
44 # improvements to land on autopilot so we don't have to access device
tests/autopilot/unity8/shell/emulators/__init__.py+3−3
@@ -1,7 +1,7 @@
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2#
2#
3# Unity Autopilot Test Suite
3# Unity Autopilot Test Suite
4−# Copyright (C) 2012, 2013, 2014 Canonical
4+# Copyright (C) 2012, 2013, 2014, 2015 Canonical
5#
5#
6# This program is free software: you can redistribute it and/or modify
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
7# it under the terms of the GNU General Public License as published by
@@ -17,10 +17,10 @@
17# along with this program. If not, see <http://www.gnu.org/licenses/>.
17# along with this program. If not, see <http://www.gnu.org/licenses/>.
18#
18#
19
19
20−from ubuntuuitoolkit import emulators as toolkit_emulators
20+import ubuntuuitoolkit
21
21
22
22
23−class UnityEmulatorBase(toolkit_emulators.UbuntuUIToolkitEmulatorBase):
23+class UnityEmulatorBase(ubuntuuitoolkit.UbuntuUIToolkitCustomProxyObjectBase):
24 """A base class for all unity emulators."""
24 """A base class for all unity emulators."""
25
25
26
26
tests/autopilot/unity8/shell/emulators/create_interactive_notification.py+2−3
@@ -1,10 +1,9 @@
1−#!/usr/bin/env python
1+#!/usr/bin/env python3
2−from __future__ import print_function
3
2
4# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
3# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
5#
4#
6# Unity Autopilot Test Suite
5# Unity Autopilot Test Suite
7−# Copyright (C) 2012-2013 Canonical
6+# Copyright (C) 2012, 2013, 2014, 2015 Canonical
8#
7#
9# This program is free software: you can redistribute it and/or modify
8# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
9# it under the terms of the GNU General Public License as published by
tests/autopilot/unity8/shell/emulators/dash.py+4−5
@@ -1,7 +1,7 @@
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2#
2#
3# Unity Autopilot Test Suite
3# Unity Autopilot Test Suite
4−# Copyright (C) 2012, 2013, 2014 Canonical
4+# Copyright (C) 2012, 2013, 2014, 2015 Canonical
5#
5#
6# This program is free software: you can redistribute it and/or modify
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
7# it under the terms of the GNU General Public License as published by
@@ -24,20 +24,19 @@ from unity8.shell import emulators
24
24
25from autopilot import logging as autopilot_logging
25from autopilot import logging as autopilot_logging
26from autopilot.introspection import dbus
26from autopilot.introspection import dbus
27−from ubuntuuitoolkit import emulators as toolkit_emulators
28
27
29
28
30logger = logging.getLogger(__name__)
29logger = logging.getLogger(__name__)
31
30
32
31
33−class DashApp(object):
32+class DashApp():
34
33
35 """Autopilot helper for the Dash app."""
34 """Autopilot helper for the Dash app."""
36
35
37 def __init__(self, app_proxy):
36 def __init__(self, app_proxy):
38 self.app_proxy = app_proxy
37 self.app_proxy = app_proxy
39 self.main_view = self.app_proxy.select_single(
38 self.main_view = self.app_proxy.select_single(
40− toolkit_emulators.MainView)
39+ ubuntuuitoolkit.MainView)
41 self.dash = self.main_view.select_single(Dash)
40 self.dash = self.main_view.select_single(Dash)
42
41
43
42
@@ -45,7 +44,7 @@ class Dash(emulators.UnityEmulatorBase):
45 """An emulator that understands the Dash."""
44 """An emulator that understands the Dash."""
46
45
47 def __init__(self, *args):
46 def __init__(self, *args):
48− super(Dash, self).__init__(*args)
47+ super().__init__(*args)
49 self.dash_content_list = self.wait_select_single(
48 self.dash_content_list = self.wait_select_single(
50 'QQuickListView', objectName='dashContentList')
49 'QQuickListView', objectName='dashContentList')
51
50
tests/autopilot/unity8/shell/fixture_setup.py+2−2
@@ -1,7 +1,7 @@
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2#
2#
3# Unity Autopilot Test Suite
3# Unity Autopilot Test Suite
4−# Copyright (C) 2014 Canonical
4+# Copyright (C) 2014, 2015 Canonical
5#
5#
6# This program is free software: you can redistribute it and/or modify
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
7# it under the terms of the GNU General Public License as published by
@@ -31,7 +31,7 @@ import unity8
31class FakeScopes(fixtures.Fixture):
31class FakeScopes(fixtures.Fixture):
32
32
33 def setUp(self):
33 def setUp(self):
34− super(FakeScopes, self).setUp()
34+ super().setUp()
35 self.useFixture(
35 self.useFixture(
36 fixtures.EnvironmentVariable(
36 fixtures.EnvironmentVariable(
37 'QML2_IMPORT_PATH',
37 'QML2_IMPORT_PATH',
tests/autopilot/unity8/shell/tests/__init__.py+3−3
@@ -1,7 +1,7 @@
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2#
2#
3# Unity Autopilot Test Suite
3# Unity Autopilot Test Suite
4−# Copyright (C) 2012, 2013, 2014 Canonical
4+# Copyright (C) 2012, 2013, 2014, 2015 Canonical
5#
5#
6# This program is free software: you can redistribute it and/or modify
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
7# it under the terms of the GNU General Public License as published by
@@ -148,7 +148,7 @@ class UnityTestCase(AutopilotTestCase):
148 sys.exit(2)
148 sys.exit(2)
149
149
150 def setUp(self):
150 def setUp(self):
151− super(UnityTestCase, self).setUp()
151+ super().setUp()
152 if is_unity7_running():
152 if is_unity7_running():
153 self.useFixture(toolkit_fixtures.HideUnity7Launcher())
153 self.useFixture(toolkit_fixtures.HideUnity7Launcher())
154
154
@@ -399,7 +399,7 @@ class DashBaseTestCase(AutopilotTestCase):
399 environment = {}
399 environment = {}
400
400
401 def setUp(self):
401 def setUp(self):
402− super(DashBaseTestCase, self).setUp()
402+ super().setUp()
403
403
404 if is_unity7_running():
404 if is_unity7_running():
405 self.useFixture(toolkit_fixtures.HideUnity7Launcher())
405 self.useFixture(toolkit_fixtures.HideUnity7Launcher())
tests/autopilot/unity8/shell/tests/test_emulators.py+4−4
@@ -1,7 +1,7 @@
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2#
2#
3# Unity Autopilot Test Suite
3# Unity Autopilot Test Suite
4−# Copyright (C) 2014 Canonical
4+# Copyright (C) 2014, 2015 Canonical
5#
5#
6# This program is free software: you can redistribute it and/or modify
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
7# it under the terms of the GNU General Public License as published by
@@ -38,7 +38,7 @@ class MainWindowTestCase(tests.UnityTestCase):
38 scenarios = tests._get_device_emulation_scenarios()
38 scenarios = tests._get_device_emulation_scenarios()
39
39
40 def setUp(self):
40 def setUp(self):
41− super(MainWindowTestCase, self).setUp()
41+ super().setUp()
42 unity_proxy = self.launch_unity()
42 unity_proxy = self.launch_unity()
43 process_helpers.unlock_unity(unity_proxy)
43 process_helpers.unlock_unity(unity_proxy)
44
44
@@ -110,7 +110,7 @@ class GenericScopeViewEmulatorTestCase(tests.DashBaseTestCase):
110 def setUp(self):
110 def setUp(self):
111 # Set up the fake scopes before launching unity.
111 # Set up the fake scopes before launching unity.
112 self.useFixture(fixture_setup.FakeScopes())
112 self.useFixture(fixture_setup.FakeScopes())
113− super(GenericScopeViewEmulatorTestCase, self).setUp()
113+ super().setUp()
114 self.generic_scope = self.dash.open_scope('MockScope1')
114 self.generic_scope = self.dash.open_scope('MockScope1')
115
115
116 def test_open_preview(self):
116 def test_open_preview(self):
@@ -129,7 +129,7 @@ class DashAppsEmulatorTestCase(tests.DashBaseTestCase):
129 def setUp(self):
129 def setUp(self):
130 # Set up the fake scopes before launching unity.
130 # Set up the fake scopes before launching unity.
131 self.useFixture(fixture_setup.FakeScopes())
131 self.useFixture(fixture_setup.FakeScopes())
132− super(DashAppsEmulatorTestCase, self).setUp()
132+ super().setUp()
133 self.applications_scope = self.dash.open_scope('clickscope')
133 self.applications_scope = self.dash.open_scope('clickscope')
134
134
135 def test_get_applications_should_return_correct_applications(self):
135 def test_get_applications_should_return_correct_applications(self):
tests/autopilot/unity8/shell/tests/test_lock_screen.py+1−9
@@ -1,7 +1,7 @@
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2#
2#
3# Unity Autopilot Test Suite
3# Unity Autopilot Test Suite
4−# Copyright (C) 2012, 2013, 2014 Canonical
4+# Copyright (C) 2012, 2013, 2014, 2015 Canonical
5#
5#
6# This program is free software: you can redistribute it and/or modify
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
7# it under the terms of the GNU General Public License as published by
@@ -17,22 +17,14 @@
17# along with this program. If not, see <http://www.gnu.org/licenses/>.
17# along with this program. If not, see <http://www.gnu.org/licenses/>.
18#
18#
19
19
20−
21−from __future__ import absolute_import
22−
23from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
20from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
24
21
25from autopilot.matchers import Eventually
22from autopilot.matchers import Eventually
26−import sys
27from testtools.matchers import Equals
23from testtools.matchers import Equals
28import logging
24import logging
29
25
30logger = logging.getLogger(__name__)
26logger = logging.getLogger(__name__)
31
27
32−# py2 compatible alias for py3
33−if sys.version >= '3':
34− basestring = str
35−
36
28
37class TestLockscreen(UnityTestCase):
29class TestLockscreen(UnityTestCase):
38
30
tests/autopilot/unity8/shell/tests/test_notifications.py+4−12
@@ -1,7 +1,7 @@
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2#
2#
3# Unity Autopilot Test Suite
3# Unity Autopilot Test Suite
4−# Copyright (C) 2012, 2013, 2014 Canonical
4+# Copyright (C) 2012, 2013, 2014, 2015 Canonical
5#
5#
6# This program is free software: you can redistribute it and/or modify
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
7# it under the terms of the GNU General Public License as published by
@@ -19,8 +19,6 @@
19
19
20"""Tests for Notifications"""
20"""Tests for Notifications"""
21
21
22−from __future__ import absolute_import
23−
24from unity8 import shell
22from unity8 import shell
25from unity8.process_helpers import unlock_unity
23from unity8.process_helpers import unlock_unity
26from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
24from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
@@ -34,15 +32,9 @@ import os
34import logging
32import logging
35import signal
33import signal
36import subprocess
34import subprocess
37−import sys
38
35
39logger = logging.getLogger(__name__)
36logger = logging.getLogger(__name__)
40
37
41−# from __future__ import range
42−# (python3's range, is same as python2's xrange)
43−if sys.version_info < (3,):
44− range = xrange
45−
46
38
47class NotificationsBase(UnityTestCase):
39class NotificationsBase(UnityTestCase):
48 """Base class for all notification tests that provides helper methods."""
40 """Base class for all notification tests that provides helper methods."""
@@ -118,7 +110,7 @@ class InteractiveNotificationBase(NotificationsBase):
118 """Collection of test for Interactive tests including snap decisions."""
110 """Collection of test for Interactive tests including snap decisions."""
119
111
120 def setUp(self):
112 def setUp(self):
121− super(InteractiveNotificationBase, self).setUp()
113+ super().setUp()
122 # Need to keep track when we launch the notification script.
114 # Need to keep track when we launch the notification script.
123 self._notify_proc = None
115 self._notify_proc = None
124
116
@@ -338,7 +330,7 @@ class InteractiveNotificationBase(NotificationsBase):
338 action_string = "%s,%s" % (action_id, action_label)
330 action_string = "%s,%s" % (action_id, action_label)
339 script_args.extend(['--action', action_string])
331 script_args.extend(['--action', action_string])
340
332
341− python_bin = subprocess.check_output(['which', 'python']).strip()
333+ python_bin = subprocess.check_output(['which', 'python3']).strip()
342 command = [python_bin, self._get_notify_script()] + script_args
334 command = [python_bin, self._get_notify_script()] + script_args
343 logger.info("Launching snap-decision notification as: %s", command)
335 logger.info("Launching snap-decision notification as: %s", command)
344 self._notify_proc = subprocess.Popen(
336 self._notify_proc = subprocess.Popen(
@@ -410,7 +402,7 @@ class EphemeralNotificationsTests(NotificationsBase):
410 """Collection of tests for Emphemeral notifications (non-interactive.)"""
402 """Collection of tests for Emphemeral notifications (non-interactive.)"""
411
403
412 def setUp(self):
404 def setUp(self):
413− super(EphemeralNotificationsTests, self).setUp()
405+ super().setUp()
414 # Because we are using the Notify library we need to init and un-init
406 # Because we are using the Notify library we need to init and un-init
415 # otherwise we get crashes.
407 # otherwise we get crashes.
416 Notify.init("Autopilot Ephemeral Notification Tests")
408 Notify.init("Autopilot Ephemeral Notification Tests")
tests/autopilot/unity8/shell/tests/test_tutorial.py+2−2
@@ -1,7 +1,7 @@
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2#
2#
3# Unity Autopilot Test Suite
3# Unity Autopilot Test Suite
4−# Copyright (C) 2014 Canonical
4+# Copyright (C) 2014, 2015 Canonical
5#
5#
6# This program is free software: you can redistribute it and/or modify
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
7# it under the terms of the GNU General Public License as published by
@@ -31,7 +31,7 @@ from unity8.shell.emulators import tutorial # NOQA
31class TutorialTestCase(tests.UnityTestCase):
31class TutorialTestCase(tests.UnityTestCase):
32
32
33 def setUp(self):
33 def setUp(self):
34− super(TutorialTestCase, self).setUp()
34+ super().setUp()
35 self._qml_mock_enabled = False
35 self._qml_mock_enabled = False
36 self._data_dirs_mock_enabled = False
36 self._data_dirs_mock_enabled = False
37
37
tests/autopilot/unity8/shell/tests/test_upstart.py+1−7
@@ -38,12 +38,6 @@ import logging
38
38
39logger = logging.getLogger(__name__)
39logger = logging.getLogger(__name__)
40
40
41−# from __future__ import range
42−# (python3's range, is same as python2's xrange)
43−import sys
44−if sys.version_info < (3,):
45− range = xrange
46−
47
41
48class UpstartIntegrationTests(UnityTestCase):
42class UpstartIntegrationTests(UnityTestCase):
49
43
@@ -95,7 +89,7 @@ class UpstartIntegrationTests(UnityTestCase):
95 self.addCleanup(ensure_stopped)
89 self.addCleanup(ensure_stopped)
96
90
97 def _set_proxy(self):
91 def _set_proxy(self):
98− super(UpstartIntegrationTests, self)._set_proxy(
92+ super()._set_proxy(
99 get_proxy_object_for_existing_process(
93 get_proxy_object_for_existing_process(
100 pid=self.process.pid,
94 pid=self.process.pid,
101 emulator_base=UnityEmulatorBase,))
95 emulator_base=UnityEmulatorBase,))
tests/mocks/LightDM/CMakeLists.txt+2−5
@@ -34,12 +34,9 @@ add_library(MockLightDM-qml MODULE
34# installed on the system. So we make sure we link to our full fake version
34# installed on the system. So we make sure we link to our full fake version
35# At run time, we can point to whichever version we happen to be using via
35# At run time, we can point to whichever version we happen to be using via
36# LD_LIBRARY_PATH.
36# LD_LIBRARY_PATH.
37−add_dependencies(MockLightDM-qml MockLightDM MockUserMetrics)
38target_link_libraries(MockLightDM-qml
37target_link_libraries(MockLightDM-qml
39− -L${CMAKE_CURRENT_BINARY_DIR}/liblightdm
38+ MockLightDM
40− -llightdm-qt5-2
39+ MockUserMetrics
41− -L${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics
42− -lusermetricsoutput
43 unity8-private
40 unity8-private
44 )
41 )
45
42
tests/mocks/Unity/Application/ApplicationManager.cpp−4
@@ -241,10 +241,6 @@ ApplicationInfo* ApplicationManager::add(QString appId)
241
241
242bool ApplicationManager::stopApplication(const QString &appId)
242bool ApplicationManager::stopApplication(const QString &appId)
243{
243{
244− if (appId == "unity8-dash") {
245− return false;
246− }
247−
248 ApplicationInfo *application = findApplication(appId);
244 ApplicationInfo *application = findApplication(appId);
249 if (application == nullptr)
245 if (application == nullptr)
250 return false;
246 return false;
tests/mocks/Unity/Application/ApplicationManager.h+3−1
@@ -34,6 +34,7 @@ class ApplicationManager : public ApplicationManagerInterface {
34 Q_FLAGS(ExecFlags)
34 Q_FLAGS(ExecFlags)
35
35
36 Q_PROPERTY(bool empty READ isEmpty NOTIFY emptyChanged)
36 Q_PROPERTY(bool empty READ isEmpty NOTIFY emptyChanged)
37+ Q_PROPERTY(QStringList availableApplications READ availableApplications NOTIFY availableApplicationsChanged)
37
38
38 public:
39 public:
39 ApplicationManager(QObject *parent = nullptr);
40 ApplicationManager(QObject *parent = nullptr);
@@ -75,7 +76,7 @@ class ApplicationManager : public ApplicationManagerInterface {
75 void setForceDashActive(bool forceDashActive) override;
76 void setForceDashActive(bool forceDashActive) override;
76
77
77 // Only for testing
78 // Only for testing
78− Q_INVOKABLE QStringList availableApplications();
79+ QStringList availableApplications();
79 Q_INVOKABLE ApplicationInfo* add(QString appId);
80 Q_INVOKABLE ApplicationInfo* add(QString appId);
80
81
81 QModelIndex findIndex(ApplicationInfo* application);
82 QModelIndex findIndex(ApplicationInfo* application);
@@ -85,6 +86,7 @@ class ApplicationManager : public ApplicationManagerInterface {
85 Q_SIGNALS:
86 Q_SIGNALS:
86 void focusRequested(const QString &appId);
87 void focusRequested(const QString &appId);
87 void emptyChanged(bool empty);
88 void emptyChanged(bool empty);
89+ void availableApplicationsChanged(QStringList list);
88
90
89 private Q_SLOTS:
91 private Q_SLOTS:
90 void onWindowCreatedTimerTimeout();
92 void onWindowCreatedTimerTimeout();
tests/mocks/Unity/Indicators/CMakeLists.txt+1−3
@@ -26,10 +26,8 @@ add_library(IndicatorsFakeQml SHARED
26)
26)
27add_definitions(-DUNITYINDICATORS_LIBRARY)
27add_definitions(-DUNITYINDICATORS_LIBRARY)
28
28
29−add_dependencies(IndicatorsFakeQml QMenuModelQml)
30target_link_libraries(IndicatorsFakeQml
29target_link_libraries(IndicatorsFakeQml
31− -L${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel
30+ QMenuModelQml
32− -lqmenumodel
33)
31)
34
32
35qt5_use_modules(IndicatorsFakeQml Core Qml Quick)
33qt5_use_modules(IndicatorsFakeQml Core Qml Quick)
tests/plugins/LightDM/CMakeLists.txt+2−4
@@ -19,13 +19,11 @@ include_directories(
19 )
19 )
20
20
21target_link_libraries(GreeterDBusTestExec
21target_link_libraries(GreeterDBusTestExec
22− -L${CMAKE_BINARY_DIR}/tests/mocks/LightDM/liblightdm
22+ MockLightDM
23− -llightdm-qt5-2
24 )
23 )
25
24
26target_link_libraries(GreeterUsersModelTestExec
25target_link_libraries(GreeterUsersModelTestExec
27− -L${CMAKE_BINARY_DIR}/tests/mocks/LightDM/liblightdm
26+ MockLightDM
28− -llightdm-qt5-2
29 )
27 )
30
28
31add_definitions(-DCURRENT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
29add_definitions(-DCURRENT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
tests/qmltests/CMakeLists.txt+1−1
@@ -78,12 +78,12 @@ add_qml_test(Panel IndicatorsBar)
78add_qml_test(Panel IndicatorsMenu)
78add_qml_test(Panel IndicatorsMenu)
79add_qml_test(Panel MenuContent)
79add_qml_test(Panel MenuContent)
80add_qml_test(Panel Panel)
80add_qml_test(Panel Panel)
81−add_qml_test(Panel SearchIndicator)
82add_qml_test(Panel/Indicators IndicatorsLight ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel")
81add_qml_test(Panel/Indicators IndicatorsLight ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel")
83# These MenuItemFactory tests need the test/mocks/ to come before plugins/
82# These MenuItemFactory tests need the test/mocks/ to come before plugins/
84add_qml_test(Panel/Indicators MenuItemFactory IMPORT_PATHS ${CMAKE_BINARY_DIR}/tests/mocks ${qmltest_DEFAULT_IMPORT_PATHS})
83add_qml_test(Panel/Indicators MenuItemFactory IMPORT_PATHS ${CMAKE_BINARY_DIR}/tests/mocks ${qmltest_DEFAULT_IMPORT_PATHS})
85add_qml_test(Panel/Indicators MessageMenuItemFactory IMPORT_PATHS ${CMAKE_BINARY_DIR}/tests/mocks ${qmltest_DEFAULT_IMPORT_PATHS})
84add_qml_test(Panel/Indicators MessageMenuItemFactory IMPORT_PATHS ${CMAKE_BINARY_DIR}/tests/mocks ${qmltest_DEFAULT_IMPORT_PATHS})
86add_qml_test(Stages ApplicationWindow)
85add_qml_test(Stages ApplicationWindow)
86+add_qml_test(Stages DesktopStage)
87add_qml_test(Stages PhoneStage ENVIRONMENT)
87add_qml_test(Stages PhoneStage ENVIRONMENT)
88add_qml_test(Stages SpreadDelegate ENVIRONMENT)
88add_qml_test(Stages SpreadDelegate ENVIRONMENT)
89add_qml_test(Stages SurfaceContainer ENVIRONMENT)
89add_qml_test(Stages SurfaceContainer ENVIRONMENT)
tests/qmltests/Dash/Previews/tst_Preview.qml+1−3
@@ -113,9 +113,7 @@ Rectangle {
113
113
114 // Scroll down
114 // Scroll down
115 var previewListRow0 = findChild(preview, "previewListRow0");
115 var previewListRow0 = findChild(preview, "previewListRow0");
116− touchFlick(preview, preview.width / 2, units.gu(20), preview.width / 2, units.gu(1));
117− tryCompare(previewListRow0, "atYEnd", true);
116+ flickToYEnd(previewListRow0);
118− tryCompare(previewListRow0, "moving", false);
119
117
120 // Click on the combo
118 // Click on the combo
121 var widget = findChild(preview, "widget-21");
119 var widget = findChild(preview, "widget-21");
tests/qmltests/Dash/Previews/tst_PreviewImageGallery.qml+1−1
@@ -22,7 +22,7 @@ import Unity.Test 0.1 as UT
22Rectangle {
22Rectangle {
23 id: root
23 id: root
24 width: units.gu(80)
24 width: units.gu(80)
25− height: units.gu(80)
25+ height: units.gu(70)
26 color: "lightgrey"
26 color: "lightgrey"
27
27
28 property var sourcesModel0: {
28 property var sourcesModel0: {
tests/qmltests/Dash/tst_Dash.qml+1−3
@@ -497,9 +497,7 @@ Item {
497 tryCompare(subPageLoader, "x", 0);
497 tryCompare(subPageLoader, "x", 0);
498 tryCompare(findChild(dashTempScopeItem, "categoryListView"), "visible", false);
498 tryCompare(findChild(dashTempScopeItem, "categoryListView"), "visible", false);
499 var previewListRow0 = findChild(subPageLoader, "previewListRow0");
499 var previewListRow0 = findChild(subPageLoader, "previewListRow0");
500− touchFlick(previewListRow0, previewListRow0.width / 2, units.gu(20), previewListRow0.width / 2, units.gu(1));
501− tryCompare(previewListRow0, "atYEnd", true);
500+ flickToYEnd(previewListRow0);
502− tryCompare(previewListRow0, "moving", false);
503 var widget = findChild(subPageLoader, "widget-21");
501 var widget = findChild(subPageLoader, "widget-21");
504 var initialWidgetHeight = widget.height;
502 var initialWidgetHeight = widget.height;
505 var openButton = findChild(widget, "buttonopen_click");
503 var openButton = findChild(widget, "buttonopen_click");
tests/qmltests/Greeter/tst_Greeter.qml+15
@@ -146,6 +146,8 @@ Item {
146 tryCompare(greeter, "waiting", false);
146 tryCompare(greeter, "waiting", false);
147 view = findChild(greeter, "testView");
147 view = findChild(greeter, "testView");
148 verifySelected(LightDM.Users.data(0, LightDM.UserRoles.NameRole));
148 verifySelected(LightDM.Users.data(0, LightDM.UserRoles.NameRole));
149+ greeter.failedLoginsDelayAttempts = 7;
150+ greeter.failedLoginsDelayMinutes = 5;
149 }
151 }
150
152
151 function cleanup() {
153 function cleanup() {
@@ -429,6 +431,19 @@ Item {
429 compare(LightDM.Infographic.username, "has-password");
431 compare(LightDM.Infographic.username, "has-password");
430 }
432 }
431
433
434+ function test_forcedDelay() {
435+ greeter.failedLoginsDelayAttempts = 1;
436+ greeter.failedLoginsDelayMinutes = 0.001; // make delay very short
437+
438+ selectUser("has-password");
439+ tryCompare(viewShowPromptSpy, "count", 1);
440+
441+ compare(view.delayMinutes, 0);
442+ view.responded("wr0ng p4ssw0rd");
443+ tryCompare(view, "delayMinutes", 1);
444+ tryCompare(view, "delayMinutes", 0);
445+ }
446+
432 function test_dbusRequestAuthenticationUser() {
447 function test_dbusRequestAuthenticationUser() {
433 selectUser("no-password");
448 selectUser("no-password");
434 LightDM.Greeter.requestAuthenticationUser("has-password");
449 LightDM.Greeter.requestAuthenticationUser("has-password");
tests/qmltests/Greeter/tst_WideView.qml+10−3
@@ -313,7 +313,7 @@ Item {
313 property Item view: loader.status === Loader.Ready ? loader.item : null
313 property Item view: loader.status === Loader.Ready ? loader.item : null
314
314
315 function init() {
315 function init() {
316− view.currentIndex = 0; // break binding with text field
316+ selectIndex(0); // break binding with text field
317 selectedSpy.clear();
317 selectedSpy.clear();
318 respondedSpy.clear();
318 respondedSpy.clear();
319 teaseSpy.clear();
319 teaseSpy.clear();
@@ -343,9 +343,15 @@ Item {
343 return -1;
343 return -1;
344 }
344 }
345
345
346+ function selectIndex(i) {
347+ view.currentIndex = i;
348+ var userList = findChild(view, "userList");
349+ tryCompare(userList, "movingInternally", false);
350+ }
351+
346 function selectUser(name) {
352 function selectUser(name) {
347 var i = getIndexOf(name);
353 var i = getIndexOf(name);
348− view.currentIndex = i;
354+ selectIndex(i);
349 return i;
355 return i;
350 }
356 }
351
357
@@ -441,7 +447,8 @@ Item {
441
447
442 // Escape is used to reset the authentication, especially if PAM is unresponsive
448 // Escape is used to reset the authentication, especially if PAM is unresponsive
443 function test_escape() {
449 function test_escape() {
444− view.currentIndex = 1;
450+ selectIndex(1);
451+ selectedSpy.clear();
445 view.locked = true;
452 view.locked = true;
446 view.showPrompt("Prompt", true, true);
453 view.showPrompt("Prompt", true, true);
447 var passwordInput = findChild(view, "passwordInput");
454 var passwordInput = findChild(view, "passwordInput");
tests/qmltests/Launcher/tst_Launcher.qml+51−6
@@ -17,7 +17,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtQuick.Layouts 1.1
18import QtQuick.Layouts 1.1
19import QtTest 1.0
19import QtTest 1.0
20−import Unity.Test 0.1 as UT
20+import Unity.Test 0.1
21import Ubuntu.Components 1.1
21import Ubuntu.Components 1.1
22import ".."
22import ".."
23import "../../../qml/Launcher"
23import "../../../qml/Launcher"
@@ -78,7 +78,9 @@ Item {
78 ColumnLayout {
78 ColumnLayout {
79 anchors { bottom: parent.bottom; right: parent.right; margins: units.gu(1) }
79 anchors { bottom: parent.bottom; right: parent.right; margins: units.gu(1) }
80 spacing: units.gu(1)
80 spacing: units.gu(1)
81− width: units.gu(20)
81+ width: childrenRect.width
82+
83+ MouseTouchEmulationCheckbox {}
82
84
83 Button {
85 Button {
84 text: "emit hinting signal"
86 text: "emit hinting signal"
@@ -98,7 +100,7 @@ Item {
98 target: LauncherModel
100 target: LauncherModel
99 }
101 }
100
102
101− UT.UnityTestCase {
103+ UnityTestCase {
102 id: testCase
104 id: testCase
103 name: "Launcher"
105 name: "Launcher"
104 when: windowShown
106 when: windowShown
@@ -116,6 +118,9 @@ Item {
116 launcherLoader.active = true;
118 launcherLoader.active = true;
117 }
119 }
118 function init() {
120 function init() {
121+ // Make sure we don't start the test with the mouse hovering the launcher
122+ mouseMove(root, root.width, root.height / 2);
123+
119 var listView = findChild(launcher, "launcherListView");
124 var listView = findChild(launcher, "launcherListView");
120 // wait for it to settle before doing the flick. Otherwise the flick
125 // wait for it to settle before doing the flick. Otherwise the flick
121 // might fail.
126 // might fail.
@@ -148,6 +153,17 @@ Item {
148 tryCompare(launcher, "state", "visible");
153 tryCompare(launcher, "state", "visible");
149 }
154 }
150
155
156+ function revealByHover() {
157+ mouseMove(root, 1, root.height / 2);
158+
159+ var panel = findChild(launcher, "launcherPanel");
160+ verify(panel != undefined);
161+
162+ // wait until it gets fully extended
163+ tryCompare(panel, "x", 0);
164+ tryCompare(launcher, "state", "visibleTemporary");
165+ }
166+
151 function waitUntilLauncherDisappears() {
167 function waitUntilLauncherDisappears() {
152 var panel = findChild(launcher, "launcherPanel");
168 var panel = findChild(launcher, "launcherPanel");
153 tryCompare(panel, "x", -panel.width, 1000);
169 tryCompare(panel, "x", -panel.width, 1000);
@@ -189,8 +205,19 @@ Item {
189 Launcher::launcherApplicationSelected signal should be emitted with the
205 Launcher::launcherApplicationSelected signal should be emitted with the
190 corresponding desktop file. E.g. clicking on phone icon should yield
206 corresponding desktop file. E.g. clicking on phone icon should yield
191 launcherApplicationSelected("[...]dialer-app.desktop") */
207 launcherApplicationSelected("[...]dialer-app.desktop") */
208+ function test_clickingOnAppIconCausesSignalEmission_data() {
209+ return [
210+ {tag: "by mouse", mouse: true},
211+ {tag: "by touch", mouse: false}
212+ ]
213+ }
214+
192− function test_clickingOnAppIconCausesSignalEmission() {
215+ function test_clickingOnAppIconCausesSignalEmission(data) {
216+ if (data.mouse) {
217+ revealByHover();
218+ } else {
193− dragLauncherIntoView();
219+ dragLauncherIntoView();
220+ }
194 launcher.lastSelectedApplication = "";
221 launcher.lastSelectedApplication = "";
195 launcher.inverted = false;
222 launcher.inverted = false;
196
223
@@ -200,7 +227,11 @@ Item {
200
227
201 verify(appIcon != undefined);
228 verify(appIcon != undefined);
202
229
230+ if (data.mouse) {
203− mouseClick(appIcon);
231+ mouseClick(appIcon);
232+ } else {
233+ tap(appIcon);
234+ }
204
235
205 tryCompare(launcher, "lastSelectedApplication",
236 tryCompare(launcher, "lastSelectedApplication",
206 appIcon.appId);
237 appIcon.appId);
@@ -559,5 +590,19 @@ Item {
559
590
560 tryCompare(quickList, "state", "");
591 tryCompare(quickList, "state", "");
561 }
592 }
593+
594+ function test_revealByHover() {
595+ var panel = findChild(launcher, "launcherPanel");
596+ verify(panel != undefined);
597+
598+ revealByHover();
599+ tryCompare(launcher, "state", "visibleTemporary");
600+
601+ // Now move the mouse away and make sure it hides in less than a second
602+ mouseMove(root, root.width, root.height / 2)
603+
604+ tryCompare(launcher, "state", "", 1000, "Launcher didn't hide after moving mouse away from it");
605+ waitUntilLauncherDisappears();
606+ }
562 }
607 }
563}
608}
tests/qmltests/Panel/tst_Panel.qml+52
@@ -171,6 +171,16 @@ IndicatorTest {
171 return indicatorItem;
171 return indicatorItem;
172 }
172 }
173
173
174+ function pullDownIndicatorsMenu() {
175+ var showDragHandle = findChild(panel, "showDragHandle");
176+ touchFlick(showDragHandle,
177+ showDragHandle.width / 2,
178+ showDragHandle.height / 2,
179+ showDragHandle.width / 2,
180+ showDragHandle.height / 2 + (showDragHandle.autoCompleteDragThreshold * 1.1));
181+ tryCompare(panel.indicators, "fullyOpened", true);
182+ }
183+
174 function test_drag_show_data() {
184 function test_drag_show_data() {
175 return [
185 return [
176 { tag: "pinned", fullscreen: false, call: null,
186 { tag: "pinned", fullscreen: false, call: null,
@@ -338,5 +348,47 @@ IndicatorTest {
338
348
339 compare(backgroundPressedSpy.count, 0);
349 compare(backgroundPressedSpy.count, 0);
340 }
350 }
351+
352+ function test_darkenedAreaEatsAllEvents() {
353+
354+ // The center of the area not covered by the indicators menu
355+ // Ie, the visible darkened area behind the menu
356+ var touchPosX = (panel.width - panel.indicators.width) / 2
357+ var touchPosY = panel.indicators.minimizedPanelHeight +
358+ ((panel.height - panel.indicators.minimizedPanelHeight) / 2)
359+
360+ // input goes through while the indicators menu is closed
361+ tryCompare(panel.indicators, "fullyClosed", true);
362+ compare(backgroundPressedSpy.count, 0);
363+ tap(panel, touchPosX, touchPosY);
364+ compare(backgroundPressedSpy.count, 2);
365+
366+ pullDownIndicatorsMenu();
367+
368+ // Darkened area eats input when the indicators menu is fully opened
369+ tap(panel, touchPosX, touchPosY);
370+ compare(backgroundPressedSpy.count, 2);
371+ backgroundPressedSpy.clear();
372+
373+ // And should continue to eat inpunt until the indicators menu is fully closed
374+ wait(10);
375+ while (!panel.indicators.fullyClosed) {
376+ tap(panel, touchPosX, touchPosY);
377+
378+ // it could have got fully closed during the tap
379+ // so we have to double check here
380+ if (!panel.indicators.fullyClosed) {
381+ compare(backgroundPressedSpy.count, 0);
382+ }
383+
384+ // let the animation go a bit further
385+ wait(50);
386+ }
387+
388+ // Now that's fully closed, input should go through again
389+ backgroundPressedSpy.clear();
390+ tap(panel, touchPosX, touchPosY);
391+ compare(backgroundPressedSpy.count, 2);
392+ }
341 }
393 }
342}
394}
tests/qmltests/Panel/tst_SearchIndicator.qmldeleted−61
@@ -1,61 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import QtTest 1.0
19−import "../../../qml/Panel"
20−import Ubuntu.Components 0.1
21−import Unity.Test 0.1 as UT
22−
23−Item {
24− width: units.gu(9)
25− height: units.gu(3)
26−
27− SignalSpy {
28− id: clickedSpy
29− target: searchIndicator
30− signalName: "clicked"
31− }
32−
33− SearchIndicator {
34− id: searchIndicator
35− anchors.fill: parent
36− }
37−
38− UT.UnityTestCase {
39− name: "SearchIndicator"
40− when: windowShown
41−
42− function test_clickedSignal() {
43− clickedSpy.clear();
44− mouseClick(searchIndicator,
45− searchIndicator.width / 2, searchIndicator.height / 2);
46− compare(clickedSpy.count, 1);
47− }
48−
49− function test_hideUp() {
50− var container = findChild(searchIndicator, "container");
51− searchIndicator.state = "hidden";
52− tryCompare(container, "opacity", 0);
53− }
54−
55− function test_show() {
56− var container = findChild(searchIndicator, "container");
57− searchIndicator.state = "visible";
58− tryCompare(container, "opacity", 1);
59− }
60− }
61−}
tests/qmltests/Stages/ApplicationCheckBox.qml+20−1
@@ -24,15 +24,23 @@ RowLayout {
24 property string appId
24 property string appId
25 property alias checked: checkbox.checked
25 property alias checked: checkbox.checked
26
26
27+ enabled: appId !== "unity8-dash"
28+
27 Layout.fillWidth: true
29 Layout.fillWidth: true
28 CheckBox {
30 CheckBox {
29 id: checkbox
31 id: checkbox
30 checked: false
32 checked: false
31 activeFocusOnPress: false
33 activeFocusOnPress: false
34+ property bool noop: false
32 onCheckedChanged: {
35 onCheckedChanged: {
36+ if (noop) {
37+ return;
38+ }
33 if (checked) {
39 if (checked) {
34− ApplicationManager.startApplication(root.appId);
40+ var application = ApplicationManager.startApplication(root.appId);
41+ appConnections.target = application;
35 } else {
42 } else {
43+ appConnections.target = null;
36 ApplicationManager.stopApplication(root.appId);
44 ApplicationManager.stopApplication(root.appId);
37 }
45 }
38 }
46 }
@@ -42,4 +50,15 @@ RowLayout {
42 color: "white"
50 color: "white"
43 anchors.verticalCenter: parent.verticalCenter
51 anchors.verticalCenter: parent.verticalCenter
44 }
52 }
53+
54+ Connections {
55+ id: appConnections
56+ onStateChanged: {
57+ if (target.state == ApplicationInfoInterface.Stopped) {
58+ checkbox.noop = true;
59+ checkbox.checked = false;
60+ checkbox.noop = false;
61+ }
62+ }
63+ }
45}
64}
tests/qmltests/Stages/tst_DesktopStage.qmlnew file+201
@@ -0,0 +1,201 @@
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 QtTest 1.0
19+import Ubuntu.Components 1.1
20+import Ubuntu.Components.ListItems 1.0 as ListItem
21+import Unity.Application 0.1
22+import Unity.Test 0.1
23+
24+import "../../../qml/Stages"
25+
26+Rectangle {
27+ id: root
28+ color: "darkblue"
29+ width: desktopStageLoader.width + controls.width
30+ height: desktopStageLoader.height
31+
32+ QtObject {
33+ id: fakeWindowStateStorage
34+
35+ property var storedGeom: [
36+ ["unity8-dash", Qt.rect(units.gu(2), units.gu(2), units.gu(50), units.gu(50))],
37+ ["webbrowser-app", Qt.rect(units.gu(60), units.gu(2), units.gu(50), units.gu(50))]
38+ ]
39+
40+ function saveGeometry(windowId, geometry) {
41+ for (var i = 0; i < storedGeom.length; ++i) {
42+ if (storedGeom[i][0] === windowId) {
43+ storedGeom[i][1] = geometry;
44+ return;
45+ }
46+ }
47+ // if new
48+ storedGeom[storedGeom.length] = [windowId, geometry];
49+ }
50+ function getGeometry(windowId, defaultGeometry) {
51+ for (var i = 0; i < storedGeom.length; ++i) {
52+ if (storedGeom[i][0] === windowId) {
53+ return storedGeom[i][1];
54+ }
55+ }
56+ return defaultGeometry;
57+ }
58+ }
59+
60+ Loader {
61+ id: desktopStageLoader
62+ x: ((root.width - controls.width) - width) / 2
63+ y: (root.height - height) / 2
64+ width: units.gu(160*0.9)
65+ height: units.gu(100*0.9)
66+
67+ focus: true
68+
69+ property bool itemDestroyed: false
70+ sourceComponent: Component {
71+ DesktopStage {
72+ anchors.fill: parent
73+ windowStateStorage: fakeWindowStateStorage
74+ Component.onDestruction: {
75+ desktopStageLoader.itemDestroyed = true;
76+ }
77+ focus: true
78+ }
79+ }
80+ }
81+
82+ Rectangle {
83+ id: controls
84+ color: "darkgrey"
85+ width: units.gu(30)
86+ anchors {
87+ top: parent.top
88+ bottom: parent.bottom
89+ right: parent.right
90+ }
91+
92+ Column {
93+ anchors { left: parent.left; right: parent.right; top: parent.top; margins: units.gu(1) }
94+ spacing: units.gu(1)
95+ Repeater {
96+ model: ApplicationManager.availableApplications
97+ ApplicationCheckBox {
98+ appId: modelData
99+ }
100+ }
101+ }
102+ }
103+
104+ UnityTestCase {
105+ id: testCase
106+ name: "DesktopStage"
107+ when: windowShown
108+
109+ property Item desktopStage: desktopStageLoader.status === Loader.Ready ? desktopStageLoader.item : null
110+
111+ function init() {
112+ }
113+
114+ function cleanup() {
115+ desktopStageLoader.itemDestroyed = false;
116+ desktopStageLoader.active = false;
117+
118+ tryCompare(desktopStageLoader, "status", Loader.Null);
119+ tryCompare(desktopStageLoader, "item", null);
120+ // Loader.status might be Loader.Null and Loader.item might be null but the Loader
121+ // actually took place. Likely because Loader waits until the next event loop
122+ // iteration to do its work. So to ensure the reload, we will wait until the
123+ // Shell instance gets destroyed.
124+ tryCompare(desktopStageLoader, "itemDestroyed", true);
125+
126+ killAllRunningApps();
127+
128+ desktopStageLoader.active = true;
129+ tryCompare(desktopStageLoader, "status", Loader.Ready);
130+ }
131+
132+ function killAllRunningApps() {
133+ while (ApplicationManager.count > 1) {
134+ var appIndex = ApplicationManager.get(0).appId == "unity8-dash" ? 1 : 0
135+ ApplicationManager.stopApplication(ApplicationManager.get(appIndex).appId);
136+ }
137+ compare(ApplicationManager.count, 1)
138+ }
139+
140+ function waitUntilAppSurfaceShowsUp(appId) {
141+ var appWindow = findChild(desktopStage, "appWindow_" + appId);
142+ verify(appWindow);
143+ var appWindowStates = findInvisibleChild(appWindow, "applicationWindowStateGroup");
144+ verify(appWindowStates);
145+ tryCompare(appWindowStates, "state", "surface");
146+ }
147+
148+ function rectsIntersect(aLocal, bLocal) {
149+
150+ var a = aLocal.mapToItem(null, 0, 0, aLocal.width, aLocal.height);
151+ var b = bLocal.mapToItem(null, 0, 0, bLocal.width, bLocal.height);
152+
153+ return !((a.y+a.height) < b.y
154+ || a.y > (b.y+b.height)
155+ || (a.x+a.width) < b.x
156+ || a.x > (b.x+b.width));
157+ }
158+
159+ function test_tappingOnWindowChangesFocusedApp() {
160+ ApplicationManager.startApplication("webbrowser-app");
161+ waitUntilAppSurfaceShowsUp("webbrowser-app");
162+
163+ var webbrowserWindow = findChild(desktopStage, "appWindow_webbrowser-app");
164+ verify(webbrowserWindow);
165+ var dashWindow = findChild(desktopStage, "appWindow_unity8-dash");
166+ verify(dashWindow);
167+
168+ // some sanity check
169+ compare(rectsIntersect(dashWindow, webbrowserWindow), false);
170+
171+ tap(dashWindow);
172+ compare(dashWindow.application.session.surface.activeFocus, true);
173+
174+ tap(webbrowserWindow);
175+ compare(webbrowserWindow.application.session.surface.activeFocus, true);
176+ }
177+
178+ function test_tappingOnWindowTitleChangesFocusedApp() {
179+ ApplicationManager.startApplication("webbrowser-app");
180+ waitUntilAppSurfaceShowsUp("webbrowser-app");
181+
182+ var webbrowserWindow = findChild(desktopStage, "decoratedWindow_webbrowser-app");
183+ verify(webbrowserWindow);
184+ var webbrowserWindowTitle = findChild(webbrowserWindow, "windowDecorationTitle");
185+ verify(webbrowserWindowTitle);
186+ var dashWindow = findChild(desktopStage, "decoratedWindow_unity8-dash");
187+ verify(dashWindow);
188+ var dashWindowTitle = findChild(dashWindow, "windowDecorationTitle");
189+ verify(dashWindowTitle);
190+
191+ // some sanity check
192+ compare(rectsIntersect(dashWindow, webbrowserWindow), false);
193+
194+ tap(dashWindowTitle);
195+ compare(dashWindow.application.session.surface.activeFocus, true);
196+
197+ tap(webbrowserWindowTitle);
198+ compare(webbrowserWindow.application.session.surface.activeFocus, true);
199+ }
200+ }
201+}
tests/qmltests/Stages/tst_PhoneStage.qml+1−1
@@ -116,7 +116,7 @@ Item {
116 function addApps(count) {
116 function addApps(count) {
117 if (count == undefined) count = 1;
117 if (count == undefined) count = 1;
118 for (var i = 0; i < count; i++) {
118 for (var i = 0; i < count; i++) {
119− var app = ApplicationManager.startApplication(ApplicationManager.availableApplications()[ApplicationManager.count])
119+ var app = ApplicationManager.startApplication(ApplicationManager.availableApplications[ApplicationManager.count])
120 tryCompare(app, "state", ApplicationInfoInterface.Running)
120 tryCompare(app, "state", ApplicationInfoInterface.Running)
121 var spreadView = findChild(phoneStage, "spreadView");
121 var spreadView = findChild(phoneStage, "spreadView");
122 tryCompare(spreadView, "contentX", -spreadView.shift);
122 tryCompare(spreadView, "contentX", -spreadView.shift);
tests/qmltests/Wizard/tst_Wizard.qml+18−1
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright 2014 Canonical Ltd.
2+ * Copyright 2014,2015 Canonical Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
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
5 * it under the terms of the GNU General Public License as published by
@@ -285,6 +285,23 @@ Item {
285 waitForPage("simPage");
285 waitForPage("simPage");
286 }
286 }
287
287
288+ function test_simWaitTimeout() {
289+ MockQOfono.setModems(["a"], [false], [false]);
290+
291+ // Go to SIM page, which will be waiting for skip to be valid
292+ var page = goToPage("languagePage");
293+ tap(findChild(page, "forwardButton"));
294+ verifyPageIsBlocked("simPage");
295+
296+ var timeout = findInvisibleChild(wizard, "timeout");
297+ timeout.interval = 100; // reduce our delay
298+
299+ // Now just wait for timeout
300+ compare(timeout.running, true);
301+ waitForPage("passwdPage");
302+ compare(timeout.running, false);
303+ }
304+
288 function enterPasscode(passcode) {
305 function enterPasscode(passcode) {
289 for (var i = 0; i < passcode.length; ++i) {
306 for (var i = 0; i < passcode.length; ++i) {
290 var character = passcode.charAt(i);
307 var character = passcode.charAt(i);
tests/qmltests/tst_Shell.qml+49
@@ -31,6 +31,7 @@ import Unity.Indicators 0.1
31import Unity.Notifications 1.0
31import Unity.Notifications 1.0
32import Unity.Test 0.1
32import Unity.Test 0.1
33import Powerd 0.1
33import Powerd 0.1
34+import Wizard 0.1 as Wizard
34
35
35import "../../qml"
36import "../../qml"
36
37
@@ -289,6 +290,7 @@ Rectangle {
289 setLightDMMockMode("single"); // back to the default value
290 setLightDMMockMode("single"); // back to the default value
290
291
291 AccountsService.demoEdges = false;
292 AccountsService.demoEdges = false;
293+ Wizard.System.wizardEnabled = false;
292
294
293 // kill all (fake) running apps
295 // kill all (fake) running apps
294 killApps(ApplicationManager);
296 killApps(ApplicationManager);
@@ -535,6 +537,7 @@ Rectangle {
535 tryCompare(userlist, "currentIndex", next)
537 tryCompare(userlist, "currentIndex", next)
536 tryCompare(userlist, "movingInternally", false)
538 tryCompare(userlist, "movingInternally", false)
537 }
539 }
540+ tryCompare(shell, "enabled", true); // wait for PAM to settle
538 }
541 }
539
542
540 function selectUser(name) {
543 function selectUser(name) {
@@ -941,6 +944,52 @@ Rectangle {
941 tryCompare(unlockAllModemsSpy, "count", 1)
944 tryCompare(unlockAllModemsSpy, "count", 1)
942 }
945 }
943
946
947+ function test_unlockAllModemsAfterWizard() {
948+ Wizard.System.wizardEnabled = true;
949+ loadShell("phone");
950+
951+ var wizard = findChild(shell, "wizard");
952+ compare(wizard.active, true);
953+ compare(Wizard.System.wizardEnabled, true);
954+ compare(unlockAllModemsSpy.count, 0);
955+
956+ wizard.hide();
957+ tryCompare(wizard, "active", false);
958+ compare(Wizard.System.wizardEnabled, false);
959+ compare(unlockAllModemsSpy.count, 1);
960+ }
961+
962+ function test_wizardEarlyExit() {
963+ Wizard.System.wizardEnabled = true;
964+ AccountsService.demoEdges = true;
965+ loadShell("phone");
966+
967+ var wizard = findChild(shell, "wizard");
968+ var tutorial = findChild(shell, "tutorial");
969+ tryCompare(wizard, "active", true);
970+ tryCompare(tutorial, "running", true);
971+ tryCompare(ApplicationManager, "focusedApplicationId", "unity8-dash");
972+
973+ // Make sure we stay running when nothing focused (can happen for
974+ // a moment when we restart the dash after switching language)
975+ ApplicationManager.stopApplication("unity8-dash");
976+ tryCompare(ApplicationManager, "focusedApplicationId", "");
977+ compare(wizard.shown, true);
978+ compare(tutorial.running, true);
979+
980+ // And make sure we stay running when dash focused again
981+ ApplicationManager.startApplication("unity8-dash");
982+ tryCompare(ApplicationManager, "focusedApplicationId", "unity8-dash");
983+ compare(wizard.shown, true);
984+ compare(tutorial.running, true);
985+
986+ // And make sure we stop when something else is focused
987+ ApplicationManager.startApplication("gallery-app");
988+ tryCompare(ApplicationManager, "focusedApplicationId", "gallery-app");
989+ compare(wizard.shown, false);
990+ compare(tutorial.running, false);
991+ }
992+
944 function test_tapOnRightEdgeReachesApplicationSurface() {
993 function test_tapOnRightEdgeReachesApplicationSurface() {
945 loadShell("phone");
994 loadShell("phone");
946 swipeAwayGreeter();
995 swipeAwayGreeter();
tests/utils/modules/Unity/Test/UnityTestCase.qml+29−6
@@ -23,12 +23,22 @@ TestCase {
23 id: testCase
23 id: testCase
24 TestUtil {id:util}
24 TestUtil {id:util}
25
25
26− ActivityIndicator {
26+ // This is needed for waitForRendering calls to return
27− visible: testCase.running
27+ // if the watched element already got rendered
28− anchors.centerIn: parent
28+ Rectangle {
29− Component.onCompleted: parent = testCase.parent
29+ width: units.gu(1)
30− z: 100
30+ height: width
31+ parent: testCase.parent
32+ border { width: units.dp(1); color: "black" }
33+ opacity: 0.6
34+
35+ RotationAnimation on rotation {
31− running: visible
36+ running: true
37+ from: 0
38+ to: 360
39+ loops: Animation.Infinite
40+ duration: 1000
41+ }
32 }
42 }
33
43
34 // Fake implementation to be provided to items under test
44 // Fake implementation to be provided to items under test
@@ -221,6 +231,19 @@ TestCase {
221 }
231 }
222 }
232 }
223
233
234+ function flickToYEnd(item) {
235+ var i = 0;
236+ var x = item.width / 2;
237+ var y = item.height - units.gu(1);
238+ var toY = units.gu(1);
239+ while (i < 5 && !item.atYEnd) {
240+ touchFlick(item, x, y, x, toY);
241+ tryCompare(item, "moving", false);
242+ ++i;
243+ }
244+ tryCompare(item, "atYEnd", true);
245+ }
246+
224 function touchEvent(item) {
247 function touchEvent(item) {
225 return UT.Util.touchEvent(item)
248 return UT.Util.touchEvent(item)
226 }
249 }
tools/registry-tracker.cpp+2
@@ -75,6 +75,8 @@ void RegistryTracker::runRegistry()
75 return;
75 return;
76 }
76 }
77
77
78+ // FIXME At the moment we use pkg-config but ideally the library
79+ // would just have a function that returns these values
78 QString scopeInstallDir;
80 QString scopeInstallDir;
79 QString scopeRegistryBin;
81 QString scopeRegistryBin;
80 QString scopeRunnerBin;
82 QString scopeRunnerBin;