on xenial help sign in
Merge
b984318Albert Astals
debian/changelog+35
@@ -1,3 +1,38 @@
1+unity8 (8.01+15.04.20141202-0ubuntu1) vivid; urgency=low
2+
3+ [ Michael Terry ]
4+ * Make sure that there is no window of opportunity for swiping away
5+ greeter before the lockscreen appears.
6+ * Don't allow dragging the greeter out from the left edge if it's
7+ hidden there. (LP: #1372952)
8+
9+ [ Michał Sawicz ]
10+ * Move from Theme colour to direct UbuntuColors.orange for activity
11+ indicator and preview buttons
12+
13+ [ Albert Astals ]
14+ * Use QImageReader not to load the image into memory twice (LP:
15+ #1384374)
16+ * Don't create the whole current scope delegates, just height * 3 (LP:
17+ #1384393, #1384374)
18+ * Make CroppedImageSizer async
19+ * Use ubuntu::connectivity::NetworkingStatus instead of
20+ QNetworkConfigurationManager
21+ * Compile with Qt 5.4 (LP: #1395636)
22+
23+ [ Michael Zanetti ]
24+ * close previews and temp scopes on left edge/BFB (LP: #1391798)
25+ * make spread reversible (LP: #1368668, #1355284, #1368677)
26+
27+ [ Andrea Cimitan ]
28+ * Different drag behaviour for not closable apps in spread (LP:
29+ #1368287)
30+
31+ [ Daniel d'Andrada ]
32+ * Make UnityTestCase.touchFlick properly map event coordinates
33+
34+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 02 Dec 2014 09:26:49 +0000
35+
1unity8 (8.01+15.04.20141125.2-0ubuntu1) vivid; urgency=low
36unity8 (8.01+15.04.20141125.2-0ubuntu1) vivid; urgency=low
2
37
3 [ Michael Zanetti ]
38 [ Michael Zanetti ]
debian/control+1−1
@@ -12,6 +12,7 @@ Build-Depends: cmake,
12# in libstdc++ causing us issues, we explicitly select a G++
12# in libstdc++ causing us issues, we explicitly select a G++
13# version.
13# version.
14 g++-4.9,
14 g++-4.9,
15+ libconnectivity-qt1-dev,
15 libgl1-mesa-dev[!armhf] | libgl-dev[!armhf],
16 libgl1-mesa-dev[!armhf] | libgl-dev[!armhf],
16 libgl1-mesa-dri,
17 libgl1-mesa-dri,
17 libgles2-mesa-dev[armhf],
18 libgles2-mesa-dev[armhf],
@@ -173,7 +174,6 @@ Depends: accountsservice-ubuntu-schemas (>= 0.0.3),
173 libhardware2,
174 libhardware2,
174 unity-schemas (>= 7.3.1+14.10.20140915),
175 unity-schemas (>= 7.3.1+14.10.20140915),
175 pay-service,
176 pay-service,
176− qml-module-ubuntu-connectivity,
177 ${misc:Depends},
177 ${misc:Depends},
178 ${shlibs:Depends},
178 ${shlibs:Depends},
179Provides: unity-launcher-impl,
179Provides: unity-launcher-impl,
plugins/Dash/CMakeLists.txt+3−2
@@ -11,7 +11,6 @@ include_directories(
11 ${CMAKE_CURRENT_SOURCE_DIR}
11 ${CMAKE_CURRENT_SOURCE_DIR}
12 ${CMAKE_CURRENT_BINARY_DIR}
12 ${CMAKE_CURRENT_BINARY_DIR}
13 ${Qt5Qml_PRIVATE_INCLUDE_DIRS}
13 ${Qt5Qml_PRIVATE_INCLUDE_DIRS}
14− ${Qt5Quick_INCLUDE_DIRS}
15 ${Qt5Quick_PRIVATE_INCLUDE_DIRS}
14 ${Qt5Quick_PRIVATE_INCLUDE_DIRS}
16 ${Qt5V8_PRIVATE_INCLUDE_DIR}
15 ${Qt5V8_PRIVATE_INCLUDE_DIR}
17)
16)
@@ -25,6 +24,8 @@ set(QMLPLUGIN_SRC
25 verticaljournal.cpp
24 verticaljournal.cpp
26 horizontaljournal.cpp
25 horizontaljournal.cpp
27 organicgrid.cpp
26 organicgrid.cpp
27+ croppedimagesizer.cpp
28+ croppedimagesizerasyncworker.cpp
28 )
29 )
29
30
30add_library(Dash-qml MODULE
31add_library(Dash-qml MODULE
@@ -36,6 +37,6 @@ target_link_libraries(Dash-qml
36 ${Qt5Quick_LIBRARIES}
37 ${Qt5Quick_LIBRARIES}
37 )
38 )
38
39
39−qt5_use_modules(Dash-qml Qml Quick)
40+qt5_use_modules(Dash-qml Qml Quick Concurrent)
40
41
41add_unity8_plugin(Dash 0.1 Dash TARGETS Dash-qml)
42add_unity8_plugin(Dash 0.1 Dash TARGETS Dash-qml)
plugins/Dash/CardCreator.js+8−10
@@ -82,16 +82,16 @@ var kArtShapeHolderCode = 'Item { \n\
82 height = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.height }); \n\
82 height = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.height }); \n\
83 } \n\
83 } \n\
84 } \n\
84 } \n\
85− image: CroppedImageMinimumSourceSize { \n\
85+ CroppedImageMinimumSourceSize { \n\
86+ id: artImage; \n\
86 objectName: "artImage"; \n\
87 objectName: "artImage"; \n\
87− property bool doLoadSource: !NetworkingStatus.limitedBandwith; \n\
88− source: { if (root.visible) doLoadSource = true; return doLoadSource && cardData && cardData["art"] || ""; } \n\
88+ source: cardData && cardData["art"] || ""; \n\
89− cache: true; \n\
90 asynchronous: root.asynchronous; \n\
89 asynchronous: root.asynchronous; \n\
91 visible: false; \n\
90 visible: false; \n\
92 width: %2; \n\
91 width: %2; \n\
93 height: %3; \n\
92 height: %3; \n\
94 } \n\
93 } \n\
94+ image: artImage.image; \n\
95 } \n\
95 } \n\
96 } \n\
96 } \n\
97 }\n';
97 }\n';
@@ -181,11 +181,11 @@ var kMascotShapeLoaderCode = 'Loader { \n\
181 id: mascotShapeLoader; \n\
181 id: mascotShapeLoader; \n\
182 objectName: "mascotShapeLoader"; \n\
182 objectName: "mascotShapeLoader"; \n\
183 asynchronous: root.asynchronous; \n\
183 asynchronous: root.asynchronous; \n\
184− active: mascotImage.status === Image.Ready; \n\
184+ active: mascotImage.image.status === Image.Ready; \n\
185 visible: showHeader && active && status == Loader.Ready; \n\
185 visible: showHeader && active && status == Loader.Ready; \n\
186 width: units.gu(6); \n\
186 width: units.gu(6); \n\
187 height: units.gu(5.625); \n\
187 height: units.gu(5.625); \n\
188− sourceComponent: UbuntuShape { image: mascotImage } \n\
188+ sourceComponent: UbuntuShape { image: mascotImage.image } \n\
189 anchors { %1 } \n\
189 anchors { %1 } \n\
190 }\n';
190 }\n';
191
191
@@ -195,8 +195,7 @@ var kMascotImageCode = 'CroppedImageMinimumSourceSize { \n\
195 id: mascotImage; \n\
195 id: mascotImage; \n\
196 objectName: "mascotImage"; \n\
196 objectName: "mascotImage"; \n\
197 anchors { %1 } \n\
197 anchors { %1 } \n\
198− property bool doLoadSource: !NetworkingStatus.limitedBandwith; \n\
199− source: { if (root.visible) doLoadSource = true; return doLoadSource && cardData && cardData["mascot"] || ""; } \n\
198+ source: cardData && cardData["mascot"] || ""; \n\
200 width: units.gu(6); \n\
199 width: units.gu(6); \n\
201 height: units.gu(5.625); \n\
200 height: units.gu(5.625); \n\
202 horizontalAlignment: Image.AlignHCenter; \n\
201 horizontalAlignment: Image.AlignHCenter; \n\
@@ -435,7 +434,7 @@ function cardString(template, components) {
435 mascotShapeCode = kMascotShapeLoaderCode.arg(mascotAnchors);
434 mascotShapeCode = kMascotShapeLoaderCode.arg(mascotAnchors);
436 }
435 }
437
436
438− var mascotImageVisible = useMascotShape ? 'false' : 'showHeader && resized';
437+ var mascotImageVisible = useMascotShape ? 'false' : 'showHeader';
439 mascotCode = kMascotImageCode.arg(mascotAnchors).arg(mascotImageVisible);
438 mascotCode = kMascotImageCode.arg(mascotAnchors).arg(mascotImageVisible);
440 }
439 }
441
440
@@ -655,7 +654,6 @@ function createCardComponent(parent, template, components) {
655 var imports = 'import QtQuick 2.2; \n\
654 var imports = 'import QtQuick 2.2; \n\
656 import Ubuntu.Components 1.1; \n\
655 import Ubuntu.Components 1.1; \n\
657 import Ubuntu.Settings.Components 0.1; \n\
656 import Ubuntu.Settings.Components 0.1; \n\
658− import Ubuntu.Connectivity 1.0; \n\
659 import Dash 0.1;\n\
657 import Dash 0.1;\n\
660 import Utils 0.1;\n';
658 import Utils 0.1;\n';
661 var card = cardString(template, components);
659 var card = cardString(template, components);
plugins/Dash/CroppedImageMinimumSourceSize.qml+24−18
@@ -15,24 +15,30 @@
15 */
15 */
16
16
17import QtQuick 2.3
17import QtQuick 2.3
18+import Dash 0.1
18
19
19−Image {
20+Item {
20− property bool resized: false
21+ id: root
21− property bool resizing: false
22+
23+ property string source
24+ property alias image: innerImage
25+ property alias asynchronous: innerImage.asynchronous
26+ property alias verticalAlignment: innerImage.verticalAlignment
27+ property alias horizontalAlignment: innerImage.horizontalAlignment
28+ property alias fillMode: innerImage.fillMode
29+
30+ CroppedImageSizer {
31+ id: sizer
32+ source: root.source
33+ width: root.width
34+ height: root.height
35+ }
36+
37+ Image {
38+ id: innerImage
39+ anchors.fill: parent
22− fillMode: Image.PreserveAspectCrop
40+ fillMode: Image.PreserveAspectCrop
23− visible: resized
41+ sourceSize: sizer.sourceSize.width == 0 && sizer.sourceSize.height == 0 ? undefined : sizer.sourceSize
24− onSourceSizeChanged: {
25− if (!resized && !resizing) {
26− resizing = true;
27− var ar = width / height;
28− var ssar = sourceSize.width / sourceSize.height;
42+ source: sizer.sourceSize.width == -1 && sizer.sourceSize.height == -1 ? "" : root.source
29− if (ar > ssar) {
30− sourceSize = Qt.size(width, 0);
31− } else {
32− sourceSize = Qt.size(0, height);
33− }
34− resizing = false;
35− resized = true;
36− }
37 }
43 }
38}
44}
plugins/Dash/ScopeStyle.qml+1−1
@@ -70,7 +70,7 @@ QtObject {
70 readonly property url navigationBackground: "navigation-background" in d.headerStyle ? d.headerStyle["navigation-background"] : "color:///#f5f5f5"
70 readonly property url navigationBackground: "navigation-background" in d.headerStyle ? d.headerStyle["navigation-background"] : "color:///#f5f5f5"
71
71
72 /// Color of the primary preview button
72 /// Color of the primary preview button
73− readonly property color previewButtonColor: "preview-button-color" in style ? style["preview-button-color"] : Theme.palette.selected.foreground
73+ readonly property color previewButtonColor: "preview-button-color" in style ? style["preview-button-color"] : UbuntuColors.orange
74
74
75 //! @cond
75 //! @cond
76 property var d: QtObject {
76 property var d: QtObject {
plugins/Dash/abstractdashview.h+4
@@ -104,7 +104,11 @@ private:
104 virtual void doRelayout() = 0;
104 virtual void doRelayout() = 0;
105 virtual void updateItemCulling(qreal visibleFromY, qreal visibleToY) = 0;
105 virtual void updateItemCulling(qreal visibleFromY, qreal visibleToY) = 0;
106 virtual void calculateImplicitHeight() = 0;
106 virtual void calculateImplicitHeight() = 0;
107+#if (QT_VERSION < QT_VERSION_CHECK(5, 4, 0))
107 virtual void processModelRemoves(const QVector<QQmlChangeSet::Remove> &removes) = 0;
108 virtual void processModelRemoves(const QVector<QQmlChangeSet::Remove> &removes) = 0;
109+#else
110+ virtual void processModelRemoves(const QVector<QQmlChangeSet::Change> &removes) = 0;
111+#endif
108
112
109 QQmlDelegateModel *m_delegateModel;
113 QQmlDelegateModel *m_delegateModel;
110
114
plugins/Dash/croppedimagesizer.cppnew file+136
@@ -0,0 +1,136 @@
1+/*
2+ * Copyright (C) 2014 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+#include "croppedimagesizer.h"
18+
19+#include "croppedimagesizerasyncworker.h"
20+
21+#include <QNetworkAccessManager>
22+#include <QNetworkRequest>
23+#include <QQmlEngine>
24+#include <QQuickItem>
25+
26+CroppedImageSizer::CroppedImageSizer()
27+ : m_width(0),
28+ m_height(0),
29+ m_sourceSize(QSize(-1, -1)),
30+ m_worker(nullptr)
31+{
32+ connect(this, &CroppedImageSizer::inputParamsChanged, this, &CroppedImageSizer::calculateSourceSize);
33+ connect(this, &CroppedImageSizer::sourceChanged, this, &CroppedImageSizer::requestImage);
34+}
35+
36+CroppedImageSizer::~CroppedImageSizer()
37+{
38+ if (m_worker) {
39+ m_worker->abort();
40+ }
41+}
42+
43+QUrl CroppedImageSizer::source() const
44+{
45+ return m_source;
46+}
47+
48+void CroppedImageSizer::setSource(const QUrl &source)
49+{
50+ if (source != m_source) {
51+ m_source = source;
52+ Q_EMIT sourceChanged();
53+ }
54+}
55+
56+qreal CroppedImageSizer::width() const
57+{
58+ return m_width;
59+}
60+
61+void CroppedImageSizer::setWidth(qreal width)
62+{
63+ if (width != m_width) {
64+ m_width = width;
65+ Q_EMIT inputParamsChanged();
66+ }
67+}
68+
69+qreal CroppedImageSizer::height() const
70+{
71+ return m_height;
72+}
73+
74+void CroppedImageSizer::setHeight(qreal height)
75+{
76+ if (height != m_height) {
77+ m_height = height;
78+ Q_EMIT inputParamsChanged();
79+ }
80+}
81+
82+QSize CroppedImageSizer::sourceSize() const
83+{
84+ return m_sourceSize;
85+}
86+
87+void CroppedImageSizer::setSourceSize(const QSize &sourceSize)
88+{
89+ if (sourceSize != m_sourceSize) {
90+ m_sourceSize = sourceSize;
91+ Q_EMIT sourceSizeChanged();
92+ }
93+}
94+
95+void CroppedImageSizer::setImageSize(const QSize &imageSize)
96+{
97+ m_imageSize = imageSize;
98+ m_worker = nullptr;
99+ calculateSourceSize();
100+}
101+
102+void CroppedImageSizer::requestImage()
103+{
104+ if (m_worker) {
105+ m_worker->abort();
106+ m_worker = nullptr;
107+ }
108+
109+ if (m_source.isValid() && qmlEngine(this) && qmlEngine(this)->networkAccessManager()) {
110+ QNetworkRequest request(m_source);
111+ QNetworkReply *reply = qmlEngine(this)->networkAccessManager()->get(request);
112+ m_worker = new CroppedImageSizerAsyncWorker(this, reply);
113+ } else {
114+ setSourceSize(QSize(-1, -1));
115+ }
116+}
117+
118+void CroppedImageSizer::calculateSourceSize()
119+{
120+ if (m_source.isValid() && m_width > 0 && m_height > 0 && !m_worker) {
121+ if (!m_imageSize.isEmpty()) {
122+ const qreal ar = m_width / m_height;
123+ const qreal ssar = m_imageSize.width() / (qreal)m_imageSize.height();
124+ if (ar > ssar) {
125+ setSourceSize(QSize(m_width, 0));
126+ } else {
127+ setSourceSize(QSize(0, m_height));
128+ }
129+ } else {
130+ qWarning() << "Invalid size for " << m_source << m_imageSize;
131+ setSourceSize(QSize(0, 0));
132+ }
133+ } else {
134+ setSourceSize(QSize(-1, -1));
135+ }
136+}
plugins/Dash/croppedimagesizer.hnew file+72
@@ -0,0 +1,72 @@
1+/*
2+ * Copyright (C) 2014 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+#ifndef CROPPEDIMAGESIZER_H
18+#define CROPPEDIMAGESIZER_H
19+
20+#include <QImageReader>
21+#include <QObject>
22+#include <QSize>
23+#include <QUrl>
24+
25+class CroppedImageSizerAsyncWorker;
26+
27+class CroppedImageSizer : public QObject
28+{
29+ Q_OBJECT
30+
31+ Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
32+ Q_PROPERTY(qreal width READ width WRITE setWidth NOTIFY inputParamsChanged)
33+ Q_PROPERTY(qreal height READ height WRITE setHeight NOTIFY inputParamsChanged)
34+ Q_PROPERTY(QSize sourceSize READ sourceSize NOTIFY sourceSizeChanged)
35+
36+public:
37+ CroppedImageSizer();
38+ ~CroppedImageSizer();
39+
40+ QUrl source() const;
41+ void setSource(const QUrl &source);
42+
43+ qreal width() const;
44+ void setWidth(qreal width);
45+
46+ qreal height() const;
47+ void setHeight(qreal height);
48+
49+ QSize sourceSize() const;
50+ void setSourceSize(const QSize &sourceSize);
51+
52+ Q_INVOKABLE void setImageSize(const QSize &imageSize);
53+
54+Q_SIGNALS:
55+ void inputParamsChanged();
56+ void sourceChanged();
57+ void sourceSizeChanged();
58+
59+private Q_SLOT:
60+ void calculateSourceSize();
61+ void requestImage();
62+
63+private:
64+ QUrl m_source;
65+ qreal m_width;
66+ qreal m_height;
67+ QSize m_sourceSize;
68+ QSize m_imageSize;
69+ QPointer<CroppedImageSizerAsyncWorker> m_worker;
70+};
71+
72+#endif
plugins/Dash/croppedimagesizerasyncworker.cppnew file+74
@@ -0,0 +1,74 @@
1+/*
2+ * Copyright (C) 2014 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+#include "croppedimagesizerasyncworker.h"
18+
19+#include "croppedimagesizer.h"
20+
21+#include <QNetworkReply>
22+#include <QtConcurrentRun>
23+
24+CroppedImageSizerAsyncWorker::CroppedImageSizerAsyncWorker(CroppedImageSizer *sizer, QNetworkReply *reply)
25+ : m_sizer(sizer),
26+ m_reply(reply),
27+ m_ignoreAbort(false)
28+{
29+ connect(m_reply, &QNetworkReply::finished, this, &CroppedImageSizerAsyncWorker::requestFinished);
30+}
31+
32+void CroppedImageSizerAsyncWorker::abort()
33+{
34+ // This runs on main thread
35+ QMutexLocker locker(&m_mutex);
36+ m_sizer = nullptr;
37+ // If we already started the future run we can't abort the reply
38+ // since we don't know at which stage the future is, just let it finish
39+ if (!m_ignoreAbort) {
40+ QMetaObject::invokeMethod(m_reply, "abort", Qt::QueuedConnection);
41+ }
42+}
43+
44+void CroppedImageSizerAsyncWorker::requestFinished()
45+{
46+ // This runs on main thread
47+ QMutexLocker locker(&m_mutex);
48+ if (m_sizer) {
49+ m_ignoreAbort = true;
50+ QtConcurrent::run(processRequestFinished, this);
51+ } else {
52+ // We were aborted delete ourselves
53+ m_reply->deleteLater();
54+ deleteLater();
55+ }
56+}
57+
58+void CroppedImageSizerAsyncWorker::processRequestFinished(CroppedImageSizerAsyncWorker *worker)
59+{
60+ // This runs on non main thread
61+ // m_reply has finished at this point and is protected against change by m_ignoreAbort
62+ QImageReader reader(worker->m_reply);
63+ const QSize imageSize = reader.size();
64+
65+ worker->m_mutex.lock();
66+ if (worker->m_sizer) {
67+ QMetaObject::invokeMethod(worker->m_sizer, "setImageSize", Qt::QueuedConnection, Q_ARG(QSize, imageSize));
68+ }
69+ worker->m_mutex.unlock();
70+
71+ // All work is done, delete ourselves
72+ worker->m_reply->deleteLater();
73+ worker->deleteLater();
74+}
plugins/Dash/croppedimagesizerasyncworker.hnew file+47
@@ -0,0 +1,47 @@
1+/*
2+ * Copyright (C) 2014 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+#ifndef CROPPEDIMAGESIZERASYNCWORKER_H
18+#define CROPPEDIMAGESIZERASYNCWORKER_H
19+
20+#include <QMutex>
21+#include <QObject>
22+
23+class CroppedImageSizer;
24+
25+class QNetworkReply;
26+
27+class CroppedImageSizerAsyncWorker : public QObject
28+{
29+ Q_OBJECT
30+public:
31+ CroppedImageSizerAsyncWorker(CroppedImageSizer *sizer, QNetworkReply *reply);
32+
33+ void abort();
34+
35+private Q_SLOTS:
36+ void requestFinished();
37+
38+private:
39+ static void processRequestFinished(CroppedImageSizerAsyncWorker *worker);
40+
41+ QMutex m_mutex;
42+ CroppedImageSizer *m_sizer;
43+ QNetworkReply *m_reply;
44+ bool m_ignoreAbort;
45+};
46+
47+#endif
plugins/Dash/horizontaljournal.cpp+5−1
@@ -184,9 +184,13 @@ void HorizontalJournal::calculateImplicitHeight()
184 }
184 }
185}
185}
186
186
187+#if (QT_VERSION < QT_VERSION_CHECK(5, 4, 0))
187void HorizontalJournal::processModelRemoves(const QVector<QQmlChangeSet::Remove> &removes)
188void HorizontalJournal::processModelRemoves(const QVector<QQmlChangeSet::Remove> &removes)
189+#else
190+void HorizontalJournal::processModelRemoves(const QVector<QQmlChangeSet::Change> &removes)
191+#endif
188{
192{
189− Q_FOREACH(const QQmlChangeSet::Remove &remove, removes) {
193+ Q_FOREACH(const QQmlChangeSet::Change &remove, removes) {
190 for (int i = remove.count - 1; i >= 0; --i) {
194 for (int i = remove.count - 1; i >= 0; --i) {
191 const int indexToRemove = remove.index + i;
195 const int indexToRemove = remove.index + i;
192 // We only support removing from the end so
196 // We only support removing from the end so
plugins/Dash/horizontaljournal.h+4
@@ -52,7 +52,11 @@ private:
52 void calculateImplicitHeight() override;
52 void calculateImplicitHeight() override;
53 void doRelayout() override;
53 void doRelayout() override;
54 void updateItemCulling(qreal visibleFromY, qreal visibleToY) override;
54 void updateItemCulling(qreal visibleFromY, qreal visibleToY) override;
55+#if (QT_VERSION < QT_VERSION_CHECK(5, 4, 0))
55 void processModelRemoves(const QVector<QQmlChangeSet::Remove> &removes) override;
56 void processModelRemoves(const QVector<QQmlChangeSet::Remove> &removes) override;
57+#else
58+ void processModelRemoves(const QVector<QQmlChangeSet::Change> &removes) override;
59+#endif
56
60
57 int m_firstVisibleIndex;
61 int m_firstVisibleIndex;
58 QList<QQuickItem*> m_visibleItems;
62 QList<QQuickItem*> m_visibleItems;
plugins/Dash/listviewwithpageheader.cpp+2−2
@@ -936,7 +936,7 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
936// qDebug() << "ListViewWithPageHeader::onModelUpdated" << changeSet << reset;
936// qDebug() << "ListViewWithPageHeader::onModelUpdated" << changeSet << reset;
937 const auto oldFirstVisibleIndex = m_firstVisibleIndex;
937 const auto oldFirstVisibleIndex = m_firstVisibleIndex;
938
938
939− Q_FOREACH(const QQmlChangeSet::Remove &remove, changeSet.removes()) {
939+ Q_FOREACH(const QQmlChangeSet::Change &remove, changeSet.removes()) {
940// qDebug() << "ListViewWithPageHeader::onModelUpdated Remove" << remove.index << remove.count;
940// qDebug() << "ListViewWithPageHeader::onModelUpdated Remove" << remove.index << remove.count;
941 if (remove.index + remove.count > m_firstVisibleIndex && remove.index < m_firstVisibleIndex + m_visibleItems.count()) {
941 if (remove.index + remove.count > m_firstVisibleIndex && remove.index < m_firstVisibleIndex + m_visibleItems.count()) {
942 const qreal oldFirstValidIndexPos = m_visibleItems.first()->y();
942 const qreal oldFirstValidIndexPos = m_visibleItems.first()->y();
@@ -990,7 +990,7 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
990 }
990 }
991 }
991 }
992
992
993− Q_FOREACH(const QQmlChangeSet::Insert &insert, changeSet.inserts()) {
993+ Q_FOREACH(const QQmlChangeSet::Change &insert, changeSet.inserts()) {
994// qDebug() << "ListViewWithPageHeader::onModelUpdated Insert" << insert.index << insert.count;
994// qDebug() << "ListViewWithPageHeader::onModelUpdated Insert" << insert.index << insert.count;
995 const bool insertingInValidIndexes = insert.index > m_firstVisibleIndex && insert.index < m_firstVisibleIndex + m_visibleItems.count();
995 const bool insertingInValidIndexes = insert.index > m_firstVisibleIndex && insert.index < m_firstVisibleIndex + m_visibleItems.count();
996 const bool firstItemWithViewOnTop = insert.index == 0 && m_firstVisibleIndex == 0 && m_visibleItems.first()->y() + m_clipItem->y() > contentY();
996 const bool firstItemWithViewOnTop = insert.index == 0 && m_firstVisibleIndex == 0 && m_visibleItems.first()->y() + m_clipItem->y() > contentY();
plugins/Dash/organicgrid.cpp+5−1
@@ -237,9 +237,13 @@ void OrganicGrid::calculateImplicitHeight()
237 }
237 }
238}
238}
239
239
240+#if (QT_VERSION < QT_VERSION_CHECK(5, 4, 0))
240void OrganicGrid::processModelRemoves(const QVector<QQmlChangeSet::Remove> &removes)
241void OrganicGrid::processModelRemoves(const QVector<QQmlChangeSet::Remove> &removes)
242+#else
243+void OrganicGrid::processModelRemoves(const QVector<QQmlChangeSet::Change> &removes)
244+#endif
241{
245{
242− Q_FOREACH(const QQmlChangeSet::Remove &remove, removes) {
246+ Q_FOREACH(const QQmlChangeSet::Change &remove, removes) {
243 for (int i = remove.count - 1; i >= 0; --i) {
247 for (int i = remove.count - 1; i >= 0; --i) {
244 const int indexToRemove = remove.index + i;
248 const int indexToRemove = remove.index + i;
245 // We only support removing from the end
249 // We only support removing from the end
plugins/Dash/organicgrid.h+4
@@ -79,7 +79,11 @@ private:
79 void doRelayout() override;
79 void doRelayout() override;
80 void updateItemCulling(qreal visibleFromY, qreal visibleToY) override;
80 void updateItemCulling(qreal visibleFromY, qreal visibleToY) override;
81 void calculateImplicitHeight() override;
81 void calculateImplicitHeight() override;
82+#if (QT_VERSION < QT_VERSION_CHECK(5, 4, 0))
82 void processModelRemoves(const QVector<QQmlChangeSet::Remove> &removes) override;
83 void processModelRemoves(const QVector<QQmlChangeSet::Remove> &removes) override;
84+#else
85+ void processModelRemoves(const QVector<QQmlChangeSet::Change> &removes) override;
86+#endif
83
87
84 QSizeF m_smallDelegateSize;
88 QSizeF m_smallDelegateSize;
85 QSizeF m_bigDelegateSize;
89 QSizeF m_bigDelegateSize;
plugins/Dash/plugin.cpp+2
@@ -17,6 +17,7 @@
17
17
18#include "plugin.h"
18#include "plugin.h"
19
19
20+#include "croppedimagesizer.h"
20#include "horizontaljournal.h"
21#include "horizontaljournal.h"
21#include "listviewwithpageheader.h"
22#include "listviewwithpageheader.h"
22#include "organicgrid.h"
23#include "organicgrid.h"
@@ -32,4 +33,5 @@ void DashPlugin::registerTypes(const char *uri)
32 qmlRegisterType<ListViewWithPageHeader>(uri, 0, 1, "ListViewWithPageHeader");
33 qmlRegisterType<ListViewWithPageHeader>(uri, 0, 1, "ListViewWithPageHeader");
33 qmlRegisterType<OrganicGrid>(uri, 0, 1, "OrganicGrid");
34 qmlRegisterType<OrganicGrid>(uri, 0, 1, "OrganicGrid");
34 qmlRegisterType<VerticalJournal>(uri, 0, 1, "VerticalJournal");
35 qmlRegisterType<VerticalJournal>(uri, 0, 1, "VerticalJournal");
36+ qmlRegisterType<CroppedImageSizer>(uri, 0, 1, "CroppedImageSizer");
35}
37}
plugins/Dash/verticaljournal.cpp+5−1
@@ -239,9 +239,13 @@ void VerticalJournal::updateItemCulling(qreal visibleFromY, qreal visibleToY)
239 }
239 }
240}
240}
241
241
242+#if (QT_VERSION < QT_VERSION_CHECK(5, 4, 0))
242void VerticalJournal::processModelRemoves(const QVector<QQmlChangeSet::Remove> &removes)
243void VerticalJournal::processModelRemoves(const QVector<QQmlChangeSet::Remove> &removes)
244+#else
245+void VerticalJournal::processModelRemoves(const QVector<QQmlChangeSet::Change> &removes)
246+#endif
243{
247{
244− Q_FOREACH(const QQmlChangeSet::Remove &remove, removes) {
248+ Q_FOREACH(const QQmlChangeSet::Change &remove, removes) {
245 for (int i = remove.count - 1; i >= 0; --i) {
249 for (int i = remove.count - 1; i >= 0; --i) {
246 const int indexToRemove = remove.index + i;
250 const int indexToRemove = remove.index + i;
247 // Since we only support removing from the end, indexToRemove
251 // Since we only support removing from the end, indexToRemove
plugins/Dash/verticaljournal.h+4
@@ -90,7 +90,11 @@ private:
90 void calculateImplicitHeight() override;
90 void calculateImplicitHeight() override;
91 void doRelayout() override;
91 void doRelayout() override;
92 void updateItemCulling(qreal visibleFromY, qreal visibleToY) override;
92 void updateItemCulling(qreal visibleFromY, qreal visibleToY) override;
93+#if (QT_VERSION < QT_VERSION_CHECK(5, 4, 0))
93 void processModelRemoves(const QVector<QQmlChangeSet::Remove> &removes) override;
94 void processModelRemoves(const QVector<QQmlChangeSet::Remove> &removes) override;
95+#else
96+ void processModelRemoves(const QVector<QQmlChangeSet::Change> &removes) override;
97+#endif
94
98
95 QVector<QList<ViewItem>> m_columnVisibleItems;
99 QVector<QList<ViewItem>> m_columnVisibleItems;
96 QHash<int, int> m_indexColumnMap;
100 QHash<int, int> m_indexColumnMap;
po/am.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:49+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/ar.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
17"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
18"3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
18"3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
19−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
19+"X-Launchpad-Export-Date: 2014-12-03 06:49+0000\n"
20−"X-Generator: Launchpad (build 17231)\n"
20+"X-Generator: Launchpad (build 17274)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:130
22#: plugins/LightDM/Greeter.cpp:130
23msgid "Password: "
23msgid "Password: "
po/ast.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:49+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/az.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:49+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/be.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
19−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
19+"X-Launchpad-Export-Date: 2014-12-03 06:49+0000\n"
20−"X-Generator: Launchpad (build 17231)\n"
20+"X-Generator: Launchpad (build 17274)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:130
22#: plugins/LightDM/Greeter.cpp:130
23msgid "Password: "
23msgid "Password: "
po/bg.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:49+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/br.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:49+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/bs.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
19+"X-Launchpad-Export-Date: 2014-12-03 06:49+0000\n"
20−"X-Generator: Launchpad (build 17231)\n"
20+"X-Generator: Launchpad (build 17274)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:130
22#: plugins/LightDM/Greeter.cpp:130
23msgid "Password: "
23msgid "Password: "
po/ca.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-11 07:11+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17241)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/ca@valencia.po+21−21
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-24 06:20+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17252)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
@@ -267,31 +267,31 @@ msgstr "Feu un toc per tornar a la cridada..."
267msgid "Conference"
267msgid "Conference"
268msgstr "Conferència"
268msgstr "Conferència"
269
269
270−#: qml/Panel/Indicators/MenuItemFactory.qml:615
270+#: qml/Panel/Indicators/MenuItemFactory.qml:643
271msgid "Nothing is playing"
271msgid "Nothing is playing"
272msgstr "No s'està reproduint res"
272msgstr "No s'està reproduint res"
273
273
274−#: qml/Panel/Indicators/MenuItemFactory.qml:763
274+#: qml/Panel/Indicators/MenuItemFactory.qml:791
275msgid "In queue…"
275msgid "In queue…"
276msgstr "A la cua..."
276msgstr "A la cua..."
277
277
278−#: qml/Panel/Indicators/MenuItemFactory.qml:767
278+#: qml/Panel/Indicators/MenuItemFactory.qml:795
279msgid "Downloading"
279msgid "Downloading"
280msgstr "S'està baixant"
280msgstr "S'està baixant"
281
281
282−#: qml/Panel/Indicators/MenuItemFactory.qml:769
282+#: qml/Panel/Indicators/MenuItemFactory.qml:797
283msgid "Paused, tap to resume"
283msgid "Paused, tap to resume"
284msgstr "En pausa, feu un toc per continuar"
284msgstr "En pausa, feu un toc per continuar"
285
285
286−#: qml/Panel/Indicators/MenuItemFactory.qml:771
286+#: qml/Panel/Indicators/MenuItemFactory.qml:799
287msgid "Canceled"
287msgid "Canceled"
288msgstr "S'ha cancel·lat"
288msgstr "S'ha cancel·lat"
289
289
290−#: qml/Panel/Indicators/MenuItemFactory.qml:773
290+#: qml/Panel/Indicators/MenuItemFactory.qml:801
291msgid "Finished"
291msgid "Finished"
292msgstr "S'ha finalitzat"
292msgstr "S'ha finalitzat"
293
293
294−#: qml/Panel/Indicators/MenuItemFactory.qml:775
294+#: qml/Panel/Indicators/MenuItemFactory.qml:803
295msgid "Failed, tap to retry"
295msgid "Failed, tap to retry"
296msgstr "Ha fallat, feu un toc per tornar-ho a intentar"
296msgstr "Ha fallat, feu un toc per tornar-ho a intentar"
297
297
@@ -303,49 +303,49 @@ msgstr "Desbloca la SIM"
303msgid "Roaming"
303msgid "Roaming"
304msgstr "Itinerància"
304msgstr "Itinerància"
305
305
306−#: qml/Shell.qml:381
306+#: qml/Shell.qml:391
307msgid "Enter passphrase"
307msgid "Enter passphrase"
308msgstr "Introduïu la contrasenya"
308msgstr "Introduïu la contrasenya"
309
309
310−#: qml/Shell.qml:382
310+#: qml/Shell.qml:392
311msgid "Sorry, incorrect passphrase"
311msgid "Sorry, incorrect passphrase"
312msgstr "La contrasenya no és correcta"
312msgstr "La contrasenya no és correcta"
313
313
314−#: qml/Shell.qml:383
314+#: qml/Shell.qml:393
315msgid "Please re-enter"
315msgid "Please re-enter"
316msgstr "Torneu-ho a introduir"
316msgstr "Torneu-ho a introduir"
317
317
318−#: qml/Shell.qml:385
318+#: qml/Shell.qml:395
319msgid "Enter passcode"
319msgid "Enter passcode"
320msgstr "Introduïu el codi d'accés"
320msgstr "Introduïu el codi d'accés"
321
321
322−#: qml/Shell.qml:386
322+#: qml/Shell.qml:396
323msgid "Sorry, incorrect passcode"
323msgid "Sorry, incorrect passcode"
324msgstr "El codi d'accés no és correcte"
324msgstr "El codi d'accés no és correcte"
325
325
326−#: qml/Shell.qml:389
326+#: qml/Shell.qml:399
327#, qt-format
327#, qt-format
328msgid "Enter %1"
328msgid "Enter %1"
329msgstr "Introduïu: %1"
329msgstr "Introduïu: %1"
330
330
331−#: qml/Shell.qml:390
331+#: qml/Shell.qml:400
332#, qt-format
332#, qt-format
333msgid "Sorry, incorrect %1"
333msgid "Sorry, incorrect %1"
334msgstr "Incorrecte (%1)"
334msgstr "Incorrecte (%1)"
335
335
336−#: qml/Shell.qml:431
336+#: qml/Shell.qml:441
337msgid "Sorry, incorrect passphrase."
337msgid "Sorry, incorrect passphrase."
338msgstr "La contrasenya és incorrecta"
338msgstr "La contrasenya és incorrecta"
339
339
340−#: qml/Shell.qml:432
340+#: qml/Shell.qml:442
341msgid "Sorry, incorrect passcode."
341msgid "Sorry, incorrect passcode."
342msgstr "El codi d'accés no és correcte"
342msgstr "El codi d'accés no és correcte"
343
343
344−#: qml/Shell.qml:433
344+#: qml/Shell.qml:443
345msgid "This will be your last attempt."
345msgid "This will be your last attempt."
346msgstr "Este serà el darrer intent."
346msgstr "Este serà el darrer intent."
347
347
348−#: qml/Shell.qml:435
348+#: qml/Shell.qml:445
349msgid ""
349msgid ""
350"If passphrase is entered incorrectly, your phone will conduct a factory "
350"If passphrase is entered incorrectly, your phone will conduct a factory "
351"reset and all personal data will be deleted."
351"reset and all personal data will be deleted."
@@ -354,7 +354,7 @@ msgstr ""
354"reinicialitzarà a l'estat de fàbrica i se suprimiran totes les dades "
354"reinicialitzarà a l'estat de fàbrica i se suprimiran totes les dades "
355"personals."
355"personals."
356
356
357−#: qml/Shell.qml:436
357+#: qml/Shell.qml:446
358msgid ""
358msgid ""
359"If passcode is entered incorrectly, your phone will conduct a factory reset "
359"If passcode is entered incorrectly, your phone will conduct a factory reset "
360"and all personal data will be deleted."
360"and all personal data will be deleted."
po/ckb.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/cs.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
17"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/da.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
17"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
19+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
20−"X-Generator: Launchpad (build 17231)\n"
20+"X-Generator: Launchpad (build 17274)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:130
22#: plugins/LightDM/Greeter.cpp:130
23msgid "Password: "
23msgid "Password: "
po/de.po+3−3
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
@@ -165,7 +165,7 @@ msgstr ""
165
165
166#: qml/Components/Lockscreen.qml:223
166#: qml/Components/Lockscreen.qml:223
167msgid "Return to Call"
167msgid "Return to Call"
168−msgstr ""
168+msgstr "Zu Anruf zurückkehren"
169
169
170#: qml/Components/Lockscreen.qml:223
170#: qml/Components/Lockscreen.qml:223
171msgid "Emergency Call"
171msgid "Emergency Call"
po/el.po+3−3
@@ -9,14 +9,14 @@ msgstr ""
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2014-11-07 10:59+0100\n"
10"POT-Creation-Date: 2014-11-07 10:59+0100\n"
11"PO-Revision-Date: 2014-11-08 18:38+0000\n"
11"PO-Revision-Date: 2014-11-08 18:38+0000\n"
12−"Last-Translator: Stathis Iosifidis <Unknown>\n"
12+"Last-Translator: Efstathios Iosifidis <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: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/en_AU.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/en_GB.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/eo.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/es.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/eu.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:49+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/fa.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/fi.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/fo.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/fr.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/gd.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
17"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
18"(n > 2 && n < 20) ? 2 : 3;\n"
18"(n > 2 && n < 20) ? 2 : 3;\n"
19−"X-Launchpad-Export-Date: 2014-11-10 06:09+0000\n"
19+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
20−"X-Generator: Launchpad (build 17231)\n"
20+"X-Generator: Launchpad (build 17274)\n"
21"Language: gd\n"
21"Language: gd\n"
22
22
23#: plugins/LightDM/Greeter.cpp:130
23#: plugins/LightDM/Greeter.cpp:130
po/gl.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/he.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/hi.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/hr.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
19+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
20−"X-Generator: Launchpad (build 17231)\n"
20+"X-Generator: Launchpad (build 17274)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:130
22#: plugins/LightDM/Greeter.cpp:130
23msgid "Password: "
23msgid "Password: "
po/hu.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/hy.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:49+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/id.po+98−74
@@ -15,330 +15,354 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
23−msgstr ""
23+msgstr "Sandi: "
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:45
25#: plugins/Unity/Launcher/launcheritem.cpp:45
26#: plugins/Unity/Launcher/launcheritem.cpp:91
26#: plugins/Unity/Launcher/launcheritem.cpp:91
27msgid "Pin shortcut"
27msgid "Pin shortcut"
28−msgstr ""
28+msgstr "Paku pintasan"
29
29
30#: plugins/Unity/Launcher/launcheritem.cpp:91
30#: plugins/Unity/Launcher/launcheritem.cpp:91
31msgid "Unpin shortcut"
31msgid "Unpin shortcut"
32−msgstr ""
32+msgstr "Lepas pintasan"
33
33
34#: qml/Components/DelayedLockscreen.qml:47
34#: qml/Components/DelayedLockscreen.qml:47
35msgid "Device Locked"
35msgid "Device Locked"
36−msgstr ""
36+msgstr "Perangkat Terkunci"
37
37
38#: qml/Components/DelayedLockscreen.qml:62
38#: qml/Components/DelayedLockscreen.qml:62
39msgid "You have been locked out due to too many failed passphrase attempts."
39msgid "You have been locked out due to too many failed passphrase attempts."
40msgstr ""
40msgstr ""
41+"Anda telah terkunci karena terlalu banyak percobaan frasa sandi yang gagal."
41
42
42#: qml/Components/DelayedLockscreen.qml:63
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 ""
46+"Anda telah terkunci karena terlalu banyak percobaan kode sandi yang gagal."
45
47
46#: qml/Components/DelayedLockscreen.qml:72
48#: qml/Components/DelayedLockscreen.qml:72
47#, qt-format
49#, qt-format
48msgid "Please wait %1 minute and then try again…"
50msgid "Please wait %1 minute and then try again…"
49msgid_plural "Please wait %1 minutes and then try again…"
51msgid_plural "Please wait %1 minutes and then try again…"
50−msgstr[0] ""
52+msgstr[0] "Harap tunggu %1 menit lalu coba lagi..."
51−msgstr[1] ""
52
53
53#: qml/Components/Dialogs.qml:74
54#: qml/Components/Dialogs.qml:74
54msgid "Log out"
55msgid "Log out"
55−msgstr ""
56+msgstr "Log keluar"
56
57
57#: qml/Components/Dialogs.qml:75
58#: qml/Components/Dialogs.qml:75
58msgid "Are you sure you want to log out?"
59msgid "Are you sure you want to log out?"
59−msgstr ""
60+msgstr "Anda yakin ingin log keluar?"
60
61
61#: qml/Components/Dialogs.qml:77 qml/Components/Dialogs.qml:101
62#: qml/Components/Dialogs.qml:77 qml/Components/Dialogs.qml:101
62#: qml/Components/Dialogs.qml:126
63#: qml/Components/Dialogs.qml:126
63msgid "No"
64msgid "No"
64−msgstr ""
65+msgstr "Tidak"
65
66
66#: qml/Components/Dialogs.qml:84 qml/Components/Dialogs.qml:108
67#: qml/Components/Dialogs.qml:84 qml/Components/Dialogs.qml:108
67#: qml/Components/Dialogs.qml:133
68#: qml/Components/Dialogs.qml:133
68msgid "Yes"
69msgid "Yes"
69−msgstr ""
70+msgstr "Ya"
70
71
71#: qml/Components/Dialogs.qml:98
72#: qml/Components/Dialogs.qml:98
72msgid "Shut down"
73msgid "Shut down"
73−msgstr ""
74+msgstr "Matikan"
74
75
75#: qml/Components/Dialogs.qml:99
76#: qml/Components/Dialogs.qml:99
76msgid "Are you sure you want to shut down?"
77msgid "Are you sure you want to shut down?"
77−msgstr ""
78+msgstr "Anda yakin ingin mematikan?"
78
79
79#: qml/Components/Dialogs.qml:123
80#: qml/Components/Dialogs.qml:123
80msgid "Reboot"
81msgid "Reboot"
81−msgstr ""
82+msgstr "Boot ulang"
82
83
83#: qml/Components/Dialogs.qml:124
84#: qml/Components/Dialogs.qml:124
84msgid "Are you sure you want to reboot?"
85msgid "Are you sure you want to reboot?"
85−msgstr ""
86+msgstr "Anda yakin ingin boot ulang?"
86
87
87#: qml/Components/Dialogs.qml:148
88#: qml/Components/Dialogs.qml:148
88msgid "Power"
89msgid "Power"
89−msgstr ""
90+msgstr "Daya"
90
91
91#: qml/Components/Dialogs.qml:149
92#: qml/Components/Dialogs.qml:149
92msgid ""
93msgid ""
93"Are you sure you would like\n"
94"Are you sure you would like\n"
94"to power off?"
95"to power off?"
95msgstr ""
96msgstr ""
97+"Anda yakin ingin\n"
98+"mematikan daya?"
96
99
97#: qml/Components/Dialogs.qml:151
100#: qml/Components/Dialogs.qml:151
98msgid "Power off"
101msgid "Power off"
99−msgstr ""
102+msgstr "Matikan"
100
103
101#: qml/Components/Dialogs.qml:161
104#: qml/Components/Dialogs.qml:161
102msgid "Restart"
105msgid "Restart"
103−msgstr ""
106+msgstr "Nyalakan ulang"
104
107
105#: qml/Components/Dialogs.qml:171
108#: qml/Components/Dialogs.qml:171
106msgid "Cancel"
109msgid "Cancel"
107−msgstr ""
110+msgstr "Batal"
108
111
109#: qml/Components/EdgeDemoOverlay.qml:151
112#: qml/Components/EdgeDemoOverlay.qml:151
110msgid "Skip intro"
113msgid "Skip intro"
111−msgstr ""
114+msgstr "Lewati pengenalan"
112
115
113#: qml/Components/EdgeDemo.qml:112
116#: qml/Components/EdgeDemo.qml:112
114msgid "Right edge"
117msgid "Right edge"
115−msgstr ""
118+msgstr "Tepi kanan"
116
119
117#: qml/Components/EdgeDemo.qml:113
120#: qml/Components/EdgeDemo.qml:113
118msgid "Try swiping from the right edge to unlock the phone"
121msgid "Try swiping from the right edge to unlock the phone"
119−msgstr ""
122+msgstr "Coba usap dari tepi kanan untuk membuka kunci telepon"
120
123
121#: qml/Components/EdgeDemo.qml:144
124#: qml/Components/EdgeDemo.qml:144
122msgid "Top edge"
125msgid "Top edge"
123−msgstr ""
126+msgstr "Tepi atas"
124
127
125#: qml/Components/EdgeDemo.qml:145
128#: qml/Components/EdgeDemo.qml:145
126msgid "Try swiping from the top edge to access the indicators"
129msgid "Try swiping from the top edge to access the indicators"
127−msgstr ""
130+msgstr "Coba usap dari tepi atas untuk mengakses indikator"
128
131
129#: qml/Components/EdgeDemo.qml:170
132#: qml/Components/EdgeDemo.qml:170
130msgid "Close"
133msgid "Close"
131−msgstr ""
134+msgstr "Tutup"
132
135
133#: qml/Components/EdgeDemo.qml:171
136#: qml/Components/EdgeDemo.qml:171
134msgid "Swipe up again to close the settings screen"
137msgid "Swipe up again to close the settings screen"
135−msgstr ""
138+msgstr "Usap ke atas lagi untuk menutup layar pengaturan"
136
139
137#: qml/Components/EdgeDemo.qml:201
140#: qml/Components/EdgeDemo.qml:201
138msgid "Left edge"
141msgid "Left edge"
139−msgstr ""
142+msgstr "Tepi kiri"
140
143
141#: qml/Components/EdgeDemo.qml:202
144#: qml/Components/EdgeDemo.qml:202
142msgid "Swipe from the left to reveal the launcher for quick access to apps"
145msgid "Swipe from the left to reveal the launcher for quick access to apps"
143−msgstr ""
146+msgstr "Usap dari tepi kiri menampilkan peluncur untuk akses cepat aplikasi"
144
147
145#: qml/Components/EdgeDemo.qml:229
148#: qml/Components/EdgeDemo.qml:229
146msgid "Well done"
149msgid "Well done"
147−msgstr ""
150+msgstr "Bagus sekali"
148
151
149#: qml/Components/EdgeDemo.qml:230
152#: qml/Components/EdgeDemo.qml:230
150msgid ""
153msgid ""
151"You have now mastered the edge gestures and can start using the "
154"You have now mastered the edge gestures and can start using the "
152"phone<br><br>Tap on the screen to start"
155"phone<br><br>Tap on the screen to start"
153msgstr ""
156msgstr ""
157+"Anda kini telah menguasai gestur tepi dan dapat mulai memakai "
158+"telepon<br><br>Ketuk pada layar untuk mulai"
154
159
155#: qml/Components/Lockscreen.qml:223
160#: qml/Components/Lockscreen.qml:223
156msgid "Return to Call"
161msgid "Return to Call"
157−msgstr ""
162+msgstr "Kembali ke Panggilan"
158
163
159#: qml/Components/Lockscreen.qml:223
164#: qml/Components/Lockscreen.qml:223
160msgid "Emergency Call"
165msgid "Emergency Call"
161−msgstr ""
166+msgstr "Panggilan Darurat"
162
167
163#: qml/Components/Lockscreen.qml:255
168#: qml/Components/Lockscreen.qml:255
164msgid "OK"
169msgid "OK"
165−msgstr ""
170+msgstr "OK"
166
171
167#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
172#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
168msgid "See less"
173msgid "See less"
169−msgstr ""
174+msgstr "Lihat lebih sedikit"
170
175
171#: qml/Dash/GenericScopeView.qml:434
176#: qml/Dash/GenericScopeView.qml:434
172msgid "See all"
177msgid "See all"
173−msgstr ""
178+msgstr "Lihat semua"
174
179
175#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
180#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
176#: qml/Panel/SearchIndicator.qml:27
181#: qml/Panel/SearchIndicator.qml:27
177msgid "Search"
182msgid "Search"
178−msgstr ""
183+msgstr "Cari"
179
184
180#: qml/Dash/PageHeader.qml:268
185#: qml/Dash/PageHeader.qml:268
181msgid "Settings"
186msgid "Settings"
182−msgstr ""
187+msgstr "Pengaturan"
183
188
184#: qml/Dash/PageHeader.qml:275
189#: qml/Dash/PageHeader.qml:275
185msgid "Remove from Favorites"
190msgid "Remove from Favorites"
186−msgstr ""
191+msgstr "Hapus dari Favorit"
187
192
188#: qml/Dash/PageHeader.qml:275
193#: qml/Dash/PageHeader.qml:275
189msgid "Add to Favorites"
194msgid "Add to Favorites"
190−msgstr ""
195+msgstr "Tambah ke Favorit"
191
196
192#: qml/Dash/Previews/PreviewActionCombo.qml:35
197#: qml/Dash/Previews/PreviewActionCombo.qml:35
193msgid "More..."
198msgid "More..."
194−msgstr ""
199+msgstr "Lebih..."
195
200
196#: qml/Dash/Previews/PreviewActionCombo.qml:35
201#: qml/Dash/Previews/PreviewActionCombo.qml:35
197msgid "Less..."
202msgid "Less..."
198−msgstr ""
203+msgstr "Kurang..."
199
204
200#: qml/Dash/Previews/PreviewRatingInput.qml:81
205#: qml/Dash/Previews/PreviewRatingInput.qml:81
201msgid "Rate this"
206msgid "Rate this"
202−msgstr ""
207+msgstr "Beri peringkat"
203
208
204#: qml/Dash/Previews/PreviewRatingInput.qml:126
209#: qml/Dash/Previews/PreviewRatingInput.qml:126
205msgid "Add a review"
210msgid "Add a review"
206−msgstr ""
211+msgstr "Berikan ulasan"
207
212
208#: qml/Dash/Previews/PreviewRatingInput.qml:166
213#: qml/Dash/Previews/PreviewRatingInput.qml:166
209msgid "Send"
214msgid "Send"
210−msgstr ""
215+msgstr "Kirim"
211
216
212#: qml/Dash/PullToRefreshScopeStyle.qml:55
217#: qml/Dash/PullToRefreshScopeStyle.qml:55
213msgid "Pull to refresh…"
218msgid "Pull to refresh…"
214−msgstr ""
219+msgstr "Tarik untuk menyegarkan..."
215
220
216#: qml/Dash/PullToRefreshScopeStyle.qml:60
221#: qml/Dash/PullToRefreshScopeStyle.qml:60
217msgid "Release to refresh…"
222msgid "Release to refresh…"
218−msgstr ""
223+msgstr "Lepas untuk menyegarkan..."
219
224
220#: qml/Dash/ScopesOverview.qml:215
225#: qml/Dash/ScopesOverview.qml:215
221msgid "Manage Scopes"
226msgid "Manage Scopes"
222−msgstr ""
227+msgstr "Kelola Skup"
223
228
224#: qml/Dash/ScopesOverview.qml:437
229#: qml/Dash/ScopesOverview.qml:437
225msgid "Done"
230msgid "Done"
226−msgstr ""
231+msgstr "Selesai"
227
232
228#: qml/Dash/ScopesOverview.qml:463
233#: qml/Dash/ScopesOverview.qml:463
229msgid "Store"
234msgid "Store"
230−msgstr ""
235+msgstr "Simpan"
231
236
232#: qml/Dash/ScopesOverviewTab.qml:36
237#: qml/Dash/ScopesOverviewTab.qml:36
233msgid "Favorites"
238msgid "Favorites"
234−msgstr ""
239+msgstr "Favorit"
235
240
236#: qml/Dash/ScopesOverviewTab.qml:54
241#: qml/Dash/ScopesOverviewTab.qml:54
237msgid "All"
242msgid "All"
238−msgstr ""
243+msgstr "Semua"
239
244
240#: qml/Greeter/Greeter.qml:174
245#: qml/Greeter/Greeter.qml:174
241msgid "Unlock"
246msgid "Unlock"
242−msgstr ""
247+msgstr "Buka kunci"
243
248
244#: qml/Notifications/NotificationMenuItemFactory.qml:116
249#: qml/Notifications/NotificationMenuItemFactory.qml:116
245msgid "Show password"
250msgid "Show password"
246−msgstr ""
251+msgstr "Tampilkan sandi"
247
252
248#: qml/Panel/ActiveCallHint.qml:79
253#: qml/Panel/ActiveCallHint.qml:79
249msgid "Tap to return to call..."
254msgid "Tap to return to call..."
250−msgstr ""
255+msgstr "Ketuk untuk kembali ke panggilan..."
251
256
252#: qml/Panel/ActiveCallHint.qml:92
257#: qml/Panel/ActiveCallHint.qml:92
253msgid "Conference"
258msgid "Conference"
254−msgstr ""
259+msgstr "Konferensi"
255
260
256#: qml/Panel/Indicators/MenuItemFactory.qml:643
261#: qml/Panel/Indicators/MenuItemFactory.qml:643
257msgid "Nothing is playing"
262msgid "Nothing is playing"
258−msgstr ""
263+msgstr "Tak ada yang sedang diputar"
259
264
260#: qml/Panel/Indicators/MenuItemFactory.qml:791
265#: qml/Panel/Indicators/MenuItemFactory.qml:791
261msgid "In queue…"
266msgid "In queue…"
262−msgstr ""
267+msgstr "Dalam antrian..."
263
268
264#: qml/Panel/Indicators/MenuItemFactory.qml:795
269#: qml/Panel/Indicators/MenuItemFactory.qml:795
265msgid "Downloading"
270msgid "Downloading"
266−msgstr ""
271+msgstr "Sedang mengunduh"
267
272
268#: qml/Panel/Indicators/MenuItemFactory.qml:797
273#: qml/Panel/Indicators/MenuItemFactory.qml:797
269msgid "Paused, tap to resume"
274msgid "Paused, tap to resume"
270−msgstr ""
275+msgstr "Jeda, ketuk untuk melanjutkan"
271
276
272#: qml/Panel/Indicators/MenuItemFactory.qml:799
277#: qml/Panel/Indicators/MenuItemFactory.qml:799
273msgid "Canceled"
278msgid "Canceled"
274−msgstr ""
279+msgstr "Dibatalkan"
275
280
276#: qml/Panel/Indicators/MenuItemFactory.qml:801
281#: qml/Panel/Indicators/MenuItemFactory.qml:801
277msgid "Finished"
282msgid "Finished"
278−msgstr ""
283+msgstr "Selesai"
279
284
280#: qml/Panel/Indicators/MenuItemFactory.qml:803
285#: qml/Panel/Indicators/MenuItemFactory.qml:803
281msgid "Failed, tap to retry"
286msgid "Failed, tap to retry"
282−msgstr ""
287+msgstr "Gagal, ketuk untuk mencoba ulang"
283
288
284#: qml/Panel/Indicators/ModemInfoItem.qml:105
289#: qml/Panel/Indicators/ModemInfoItem.qml:105
285msgid "Unlock SIM"
290msgid "Unlock SIM"
286−msgstr ""
291+msgstr "Buka Kunci SIM"
287
292
288#: qml/Panel/Indicators/RoamingIndication.qml:27
293#: qml/Panel/Indicators/RoamingIndication.qml:27
289msgid "Roaming"
294msgid "Roaming"
290−msgstr ""
295+msgstr "Roaming"
291
296
292#: qml/Shell.qml:391
297#: qml/Shell.qml:391
293msgid "Enter passphrase"
298msgid "Enter passphrase"
294−msgstr ""
299+msgstr "Masukkan frasa sandi"
295
300
296#: qml/Shell.qml:392
301#: qml/Shell.qml:392
297msgid "Sorry, incorrect passphrase"
302msgid "Sorry, incorrect passphrase"
298−msgstr ""
303+msgstr "Maaf, frasa sandi salah"
299
304
300#: qml/Shell.qml:393
305#: qml/Shell.qml:393
301msgid "Please re-enter"
306msgid "Please re-enter"
302−msgstr ""
307+msgstr "Harap masukkan lagi"
303
308
304#: qml/Shell.qml:395
309#: qml/Shell.qml:395
305msgid "Enter passcode"
310msgid "Enter passcode"
306−msgstr ""
311+msgstr "Masukkan kode sandi"
307
312
308#: qml/Shell.qml:396
313#: qml/Shell.qml:396
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310−msgstr ""
315+msgstr "Maaf, kode sandi salah"
311
316
312#: qml/Shell.qml:399
317#: qml/Shell.qml:399
313#, qt-format
318#, qt-format
314msgid "Enter %1"
319msgid "Enter %1"
315−msgstr ""
320+msgstr "Masukkan %1"
316
321
317#: qml/Shell.qml:400
322#: qml/Shell.qml:400
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320−msgstr ""
325+msgstr "Maaf, %1 salah"
321
326
322#: qml/Shell.qml:441
327#: qml/Shell.qml:441
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324−msgstr ""
329+msgstr "Maaf, frasa sandi salah."
325
330
326#: qml/Shell.qml:442
331#: qml/Shell.qml:442
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328−msgstr ""
333+msgstr "Maaf, kode sandi salah."
329
334
330#: qml/Shell.qml:443
335#: qml/Shell.qml:443
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332−msgstr ""
337+msgstr "Ini akan menjadi upaya terakhir Anda."
333
338
334#: qml/Shell.qml:445
339#: qml/Shell.qml:445
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
344+"Bila frasa sandi salah dimasukkan, telepon Anda akan melakukan reset pabrik "
345+"dan semua data pribadi akan dihapus."
339
346
340#: qml/Shell.qml:446
347#: qml/Shell.qml:446
341msgid ""
348msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
349"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
350"and all personal data will be deleted."
344msgstr ""
351msgstr ""
352+"Bila kode sandi salah dimasukkan, telepon Anda akan melakukan reset pabrik "
353+"dan semua data pribadi akan dihapus."
354+
355+#~ msgid "Loading. Please Wait..."
356+#~ msgstr "Memuat. Mohon Tunggu..."
357+
358+#~ msgid "Speaking..."
359+#~ msgstr "Berbicara..."
360+
361+#~ msgid "Confirm"
362+#~ msgstr "Konfirmasi"
363+
364+#~ msgid "Type or say a command"
365+#~ msgstr "Ketik atau ucapkan sebuah perintah"
366+
367+#~ msgid "Speak Now..."
368+#~ msgstr "Bicaralah Sekarang..."
po/is.po+21−21
@@ -17,8 +17,8 @@ msgstr ""
17"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Type: text/plain; charset=UTF-8\n"
18"Content-Transfer-Encoding: 8bit\n"
18"Content-Transfer-Encoding: 8bit\n"
19"Plural-Forms: nplurals=2; plural=n != 1;\n"
19"Plural-Forms: nplurals=2; plural=n != 1;\n"
20−"X-Launchpad-Export-Date: 2014-11-14 06:34+0000\n"
20+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
21−"X-Generator: Launchpad (build 17241)\n"
21+"X-Generator: Launchpad (build 17274)\n"
22"Language: is\n"
22"Language: is\n"
23
23
24#: plugins/LightDM/Greeter.cpp:130
24#: plugins/LightDM/Greeter.cpp:130
@@ -265,31 +265,31 @@ msgstr "Slá til að svara símtali..."
265msgid "Conference"
265msgid "Conference"
266msgstr "Ráðstefna"
266msgstr "Ráðstefna"
267
267
268−#: qml/Panel/Indicators/MenuItemFactory.qml:615
268+#: qml/Panel/Indicators/MenuItemFactory.qml:643
269msgid "Nothing is playing"
269msgid "Nothing is playing"
270msgstr "Ekkert er í afspilun"
270msgstr "Ekkert er í afspilun"
271
271
272−#: qml/Panel/Indicators/MenuItemFactory.qml:763
272+#: qml/Panel/Indicators/MenuItemFactory.qml:791
273msgid "In queue…"
273msgid "In queue…"
274msgstr "Í biðröð..."
274msgstr "Í biðröð..."
275
275
276−#: qml/Panel/Indicators/MenuItemFactory.qml:767
276+#: qml/Panel/Indicators/MenuItemFactory.qml:795
277msgid "Downloading"
277msgid "Downloading"
278msgstr "Sæki"
278msgstr "Sæki"
279
279
280−#: qml/Panel/Indicators/MenuItemFactory.qml:769
280+#: qml/Panel/Indicators/MenuItemFactory.qml:797
281msgid "Paused, tap to resume"
281msgid "Paused, tap to resume"
282msgstr "Í bið, sláðu létt til að halda áfram"
282msgstr "Í bið, sláðu létt til að halda áfram"
283
283
284−#: qml/Panel/Indicators/MenuItemFactory.qml:771
284+#: qml/Panel/Indicators/MenuItemFactory.qml:799
285msgid "Canceled"
285msgid "Canceled"
286msgstr "Hætt við"
286msgstr "Hætt við"
287
287
288−#: qml/Panel/Indicators/MenuItemFactory.qml:773
288+#: qml/Panel/Indicators/MenuItemFactory.qml:801
289msgid "Finished"
289msgid "Finished"
290msgstr "Lokið"
290msgstr "Lokið"
291
291
292−#: qml/Panel/Indicators/MenuItemFactory.qml:775
292+#: qml/Panel/Indicators/MenuItemFactory.qml:803
293msgid "Failed, tap to retry"
293msgid "Failed, tap to retry"
294msgstr "Mistókst, sláðu létt til að reyna aftur"
294msgstr "Mistókst, sláðu létt til að reyna aftur"
295
295
@@ -301,49 +301,49 @@ msgstr "Aflæsa SIM-korti"
301msgid "Roaming"
301msgid "Roaming"
302msgstr "Ráphamur"
302msgstr "Ráphamur"
303
303
304−#: qml/Shell.qml:381
304+#: qml/Shell.qml:391
305msgid "Enter passphrase"
305msgid "Enter passphrase"
306msgstr "Settu inn lykilfrasa"
306msgstr "Settu inn lykilfrasa"
307
307
308−#: qml/Shell.qml:382
308+#: qml/Shell.qml:392
309msgid "Sorry, incorrect passphrase"
309msgid "Sorry, incorrect passphrase"
310msgstr "Því miður, rangt lykilorð"
310msgstr "Því miður, rangt lykilorð"
311
311
312−#: qml/Shell.qml:383
312+#: qml/Shell.qml:393
313msgid "Please re-enter"
313msgid "Please re-enter"
314msgstr "Settu aftur inn"
314msgstr "Settu aftur inn"
315
315
316−#: qml/Shell.qml:385
316+#: qml/Shell.qml:395
317msgid "Enter passcode"
317msgid "Enter passcode"
318msgstr "Settu inn aðgangskóða"
318msgstr "Settu inn aðgangskóða"
319
319
320−#: qml/Shell.qml:386
320+#: qml/Shell.qml:396
321msgid "Sorry, incorrect passcode"
321msgid "Sorry, incorrect passcode"
322msgstr "Því miður, rangur aðgangskóði"
322msgstr "Því miður, rangur aðgangskóði"
323
323
324−#: qml/Shell.qml:389
324+#: qml/Shell.qml:399
325#, qt-format
325#, qt-format
326msgid "Enter %1"
326msgid "Enter %1"
327msgstr "Settu inn %1"
327msgstr "Settu inn %1"
328
328
329−#: qml/Shell.qml:390
329+#: qml/Shell.qml:400
330#, qt-format
330#, qt-format
331msgid "Sorry, incorrect %1"
331msgid "Sorry, incorrect %1"
332msgstr "Því miður, rangt %1"
332msgstr "Því miður, rangt %1"
333
333
334−#: qml/Shell.qml:431
334+#: qml/Shell.qml:441
335msgid "Sorry, incorrect passphrase."
335msgid "Sorry, incorrect passphrase."
336msgstr "Því miður, rangt lykilorð."
336msgstr "Því miður, rangt lykilorð."
337
337
338−#: qml/Shell.qml:432
338+#: qml/Shell.qml:442
339msgid "Sorry, incorrect passcode."
339msgid "Sorry, incorrect passcode."
340msgstr "Því miður, rangur aðgangskóði."
340msgstr "Því miður, rangur aðgangskóði."
341
341
342−#: qml/Shell.qml:433
342+#: qml/Shell.qml:443
343msgid "This will be your last attempt."
343msgid "This will be your last attempt."
344msgstr "Þetta mun verða síðasta tilraunin þín."
344msgstr "Þetta mun verða síðasta tilraunin þín."
345
345
346−#: qml/Shell.qml:435
346+#: qml/Shell.qml:445
347msgid ""
347msgid ""
348"If passphrase is entered incorrectly, your phone will conduct a factory "
348"If passphrase is entered incorrectly, your phone will conduct a factory "
349"reset and all personal data will be deleted."
349"reset and all personal data will be deleted."
@@ -351,7 +351,7 @@ msgstr ""
351"Ef lykilorð er rangt, mun síminn frumstilla allt á verksmiðjustillingar og "
351"Ef lykilorð er rangt, mun síminn frumstilla allt á verksmiðjustillingar og "
352"öllum einkagögnum verður eytt."
352"öllum einkagögnum verður eytt."
353
353
354−#: qml/Shell.qml:436
354+#: qml/Shell.qml:446
355msgid ""
355msgid ""
356"If passcode is entered incorrectly, your phone will conduct a factory reset "
356"If passcode is entered incorrectly, your phone will conduct a factory reset "
357"and all personal data will be deleted."
357"and all personal data will be deleted."
po/it.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/ja.po+21−21
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2014-11-21 06:49+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17252)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
@@ -253,31 +253,31 @@ msgstr "タップすると通話に戻ります..."
253msgid "Conference"
253msgid "Conference"
254msgstr "グループ通話"
254msgstr "グループ通話"
255
255
256−#: qml/Panel/Indicators/MenuItemFactory.qml:615
256+#: qml/Panel/Indicators/MenuItemFactory.qml:643
257msgid "Nothing is playing"
257msgid "Nothing is playing"
258msgstr ""
258msgstr ""
259
259
260−#: qml/Panel/Indicators/MenuItemFactory.qml:763
260+#: qml/Panel/Indicators/MenuItemFactory.qml:791
261msgid "In queue…"
261msgid "In queue…"
262msgstr "開始待ち..."
262msgstr "開始待ち..."
263
263
264−#: qml/Panel/Indicators/MenuItemFactory.qml:767
264+#: qml/Panel/Indicators/MenuItemFactory.qml:795
265msgid "Downloading"
265msgid "Downloading"
266msgstr "ダウンロード中"
266msgstr "ダウンロード中"
267
267
268−#: qml/Panel/Indicators/MenuItemFactory.qml:769
268+#: qml/Panel/Indicators/MenuItemFactory.qml:797
269msgid "Paused, tap to resume"
269msgid "Paused, tap to resume"
270msgstr "停止中、再開するにはタップしてください"
270msgstr "停止中、再開するにはタップしてください"
271
271
272−#: qml/Panel/Indicators/MenuItemFactory.qml:771
272+#: qml/Panel/Indicators/MenuItemFactory.qml:799
273msgid "Canceled"
273msgid "Canceled"
274msgstr "中止しました"
274msgstr "中止しました"
275
275
276−#: qml/Panel/Indicators/MenuItemFactory.qml:773
276+#: qml/Panel/Indicators/MenuItemFactory.qml:801
277msgid "Finished"
277msgid "Finished"
278msgstr "完了しました"
278msgstr "完了しました"
279
279
280−#: qml/Panel/Indicators/MenuItemFactory.qml:775
280+#: qml/Panel/Indicators/MenuItemFactory.qml:803
281msgid "Failed, tap to retry"
281msgid "Failed, tap to retry"
282msgstr "失敗しました、再試行するにはタップしてください"
282msgstr "失敗しました、再試行するにはタップしてください"
283
283
@@ -289,55 +289,55 @@ msgstr "SIMのアンロック"
289msgid "Roaming"
289msgid "Roaming"
290msgstr "ローミング"
290msgstr "ローミング"
291
291
292−#: qml/Shell.qml:381
292+#: qml/Shell.qml:391
293msgid "Enter passphrase"
293msgid "Enter passphrase"
294msgstr "パスフレーズを入力"
294msgstr "パスフレーズを入力"
295
295
296−#: qml/Shell.qml:382
296+#: qml/Shell.qml:392
297msgid "Sorry, incorrect passphrase"
297msgid "Sorry, incorrect passphrase"
298msgstr "パスフレーズが違います"
298msgstr "パスフレーズが違います"
299
299
300−#: qml/Shell.qml:383
300+#: qml/Shell.qml:393
301msgid "Please re-enter"
301msgid "Please re-enter"
302msgstr "再入力してください"
302msgstr "再入力してください"
303
303
304−#: qml/Shell.qml:385
304+#: qml/Shell.qml:395
305msgid "Enter passcode"
305msgid "Enter passcode"
306msgstr "パスコードを入力"
306msgstr "パスコードを入力"
307
307
308−#: qml/Shell.qml:386
308+#: qml/Shell.qml:396
309msgid "Sorry, incorrect passcode"
309msgid "Sorry, incorrect passcode"
310msgstr "パスコードが違います"
310msgstr "パスコードが違います"
311
311
312−#: qml/Shell.qml:389
312+#: qml/Shell.qml:399
313#, qt-format
313#, qt-format
314msgid "Enter %1"
314msgid "Enter %1"
315msgstr "%1 を入力"
315msgstr "%1 を入力"
316
316
317−#: qml/Shell.qml:390
317+#: qml/Shell.qml:400
318#, qt-format
318#, qt-format
319msgid "Sorry, incorrect %1"
319msgid "Sorry, incorrect %1"
320msgstr "%1が違います"
320msgstr "%1が違います"
321
321
322−#: qml/Shell.qml:431
322+#: qml/Shell.qml:441
323msgid "Sorry, incorrect passphrase."
323msgid "Sorry, incorrect passphrase."
324msgstr "パスフレーズが間違っています。"
324msgstr "パスフレーズが間違っています。"
325
325
326−#: qml/Shell.qml:432
326+#: qml/Shell.qml:442
327msgid "Sorry, incorrect passcode."
327msgid "Sorry, incorrect passcode."
328msgstr "パスコードが間違っています。"
328msgstr "パスコードが間違っています。"
329
329
330−#: qml/Shell.qml:433
330+#: qml/Shell.qml:443
331msgid "This will be your last attempt."
331msgid "This will be your last attempt."
332msgstr "これが最後のチャンスです。"
332msgstr "これが最後のチャンスです。"
333
333
334−#: qml/Shell.qml:435
334+#: qml/Shell.qml:445
335msgid ""
335msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
336"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
337"reset and all personal data will be deleted."
338msgstr "パスフレーズが間違っている場合、ファクトリーリセットを実施し、すべての個人データは削除されます。"
338msgstr "パスフレーズが間違っている場合、ファクトリーリセットを実施し、すべての個人データは削除されます。"
339
339
340−#: qml/Shell.qml:436
340+#: qml/Shell.qml:446
341msgid ""
341msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
343"and all personal data will be deleted."
po/km.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/kn.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/ko.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/ku.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/ky.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/lo.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/lt.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"(n%100<10 || n%100>=20) ? 1 : 2;\n"
18"(n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
19+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
20−"X-Generator: Launchpad (build 17231)\n"
20+"X-Generator: Launchpad (build 17274)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:130
22#: plugins/LightDM/Greeter.cpp:130
23msgid "Password: "
23msgid "Password: "
po/lv.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/ml.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/mr.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/ms.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/my.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:49+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/nb.po+21−21
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-13 06:37+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17241)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
@@ -259,31 +259,31 @@ msgstr "Trykk for å gå tilbake til anrop …"
259msgid "Conference"
259msgid "Conference"
260msgstr "Konferanse"
260msgstr "Konferanse"
261
261
262−#: qml/Panel/Indicators/MenuItemFactory.qml:615
262+#: qml/Panel/Indicators/MenuItemFactory.qml:643
263msgid "Nothing is playing"
263msgid "Nothing is playing"
264msgstr "Ingenting spilles nå"
264msgstr "Ingenting spilles nå"
265
265
266−#: qml/Panel/Indicators/MenuItemFactory.qml:763
266+#: qml/Panel/Indicators/MenuItemFactory.qml:791
267msgid "In queue…"
267msgid "In queue…"
268msgstr "I kø …"
268msgstr "I kø …"
269
269
270−#: qml/Panel/Indicators/MenuItemFactory.qml:767
270+#: qml/Panel/Indicators/MenuItemFactory.qml:795
271msgid "Downloading"
271msgid "Downloading"
272msgstr "Laster ned"
272msgstr "Laster ned"
273
273
274−#: qml/Panel/Indicators/MenuItemFactory.qml:769
274+#: qml/Panel/Indicators/MenuItemFactory.qml:797
275msgid "Paused, tap to resume"
275msgid "Paused, tap to resume"
276msgstr "Satt på pause (trykk for å fortsette)"
276msgstr "Satt på pause (trykk for å fortsette)"
277
277
278−#: qml/Panel/Indicators/MenuItemFactory.qml:771
278+#: qml/Panel/Indicators/MenuItemFactory.qml:799
279msgid "Canceled"
279msgid "Canceled"
280msgstr "Avbrutt"
280msgstr "Avbrutt"
281
281
282−#: qml/Panel/Indicators/MenuItemFactory.qml:773
282+#: qml/Panel/Indicators/MenuItemFactory.qml:801
283msgid "Finished"
283msgid "Finished"
284msgstr "Ferdig"
284msgstr "Ferdig"
285
285
286−#: qml/Panel/Indicators/MenuItemFactory.qml:775
286+#: qml/Panel/Indicators/MenuItemFactory.qml:803
287msgid "Failed, tap to retry"
287msgid "Failed, tap to retry"
288msgstr "Feilet. Trykk for å prøve på nytt"
288msgstr "Feilet. Trykk for å prøve på nytt"
289
289
@@ -295,49 +295,49 @@ msgstr "Lås opp SIM"
295msgid "Roaming"
295msgid "Roaming"
296msgstr "Fremmednett"
296msgstr "Fremmednett"
297
297
298−#: qml/Shell.qml:381
298+#: qml/Shell.qml:391
299msgid "Enter passphrase"
299msgid "Enter passphrase"
300msgstr "Skriv inn passordfrase"
300msgstr "Skriv inn passordfrase"
301
301
302−#: qml/Shell.qml:382
302+#: qml/Shell.qml:392
303msgid "Sorry, incorrect passphrase"
303msgid "Sorry, incorrect passphrase"
304msgstr "Feil passordfrase"
304msgstr "Feil passordfrase"
305
305
306−#: qml/Shell.qml:383
306+#: qml/Shell.qml:393
307msgid "Please re-enter"
307msgid "Please re-enter"
308msgstr "Skriv inn på nytt"
308msgstr "Skriv inn på nytt"
309
309
310−#: qml/Shell.qml:385
310+#: qml/Shell.qml:395
311msgid "Enter passcode"
311msgid "Enter passcode"
312msgstr "Tast kode"
312msgstr "Tast kode"
313
313
314−#: qml/Shell.qml:386
314+#: qml/Shell.qml:396
315msgid "Sorry, incorrect passcode"
315msgid "Sorry, incorrect passcode"
316msgstr "Feil kode"
316msgstr "Feil kode"
317
317
318−#: qml/Shell.qml:389
318+#: qml/Shell.qml:399
319#, qt-format
319#, qt-format
320msgid "Enter %1"
320msgid "Enter %1"
321msgstr "Skriv inn %1"
321msgstr "Skriv inn %1"
322
322
323−#: qml/Shell.qml:390
323+#: qml/Shell.qml:400
324#, qt-format
324#, qt-format
325msgid "Sorry, incorrect %1"
325msgid "Sorry, incorrect %1"
326msgstr "Feil %1"
326msgstr "Feil %1"
327
327
328−#: qml/Shell.qml:431
328+#: qml/Shell.qml:441
329msgid "Sorry, incorrect passphrase."
329msgid "Sorry, incorrect passphrase."
330msgstr "Feil passordfrase."
330msgstr "Feil passordfrase."
331
331
332−#: qml/Shell.qml:432
332+#: qml/Shell.qml:442
333msgid "Sorry, incorrect passcode."
333msgid "Sorry, incorrect passcode."
334msgstr "Feil kode."
334msgstr "Feil kode."
335
335
336−#: qml/Shell.qml:433
336+#: qml/Shell.qml:443
337msgid "This will be your last attempt."
337msgid "This will be your last attempt."
338msgstr "Dette er ditt siste forsøk."
338msgstr "Dette er ditt siste forsøk."
339
339
340−#: qml/Shell.qml:435
340+#: qml/Shell.qml:445
341msgid ""
341msgid ""
342"If passphrase is entered incorrectly, your phone will conduct a factory "
342"If passphrase is entered incorrectly, your phone will conduct a factory "
343"reset and all personal data will be deleted."
343"reset and all personal data will be deleted."
@@ -345,7 +345,7 @@ msgstr ""
345"Hvis du skriver feil passordfrase en gang til, tilbakestilles telefonen til "
345"Hvis du skriver feil passordfrase en gang til, tilbakestilles telefonen til "
346"fabrikkinnstillinger, og alle personlige data slettes."
346"fabrikkinnstillinger, og alle personlige data slettes."
347
347
348−#: qml/Shell.qml:436
348+#: qml/Shell.qml:446
349msgid ""
349msgid ""
350"If passcode is entered incorrectly, your phone will conduct a factory reset "
350"If passcode is entered incorrectly, your phone will conduct a factory reset "
351"and all personal data will be deleted."
351"and all personal data will be deleted."
po/nl.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/pa.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/pl.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
17"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
18"|| n%100>=20) ? 1 : 2;\n"
18"|| n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
19+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
20−"X-Generator: Launchpad (build 17231)\n"
20+"X-Generator: Launchpad (build 17274)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:130
22#: plugins/LightDM/Greeter.cpp:130
23msgid "Password: "
23msgid "Password: "
po/pt.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/pt_BR.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/ro.po+21−21
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
17"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
18"== 0) && (n != 0))) ? 2: 1));\n"
18"== 0) && (n != 0))) ? 2: 1));\n"
19−"X-Launchpad-Export-Date: 2014-11-19 06:24+0000\n"
19+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
20−"X-Generator: Launchpad (build 17252)\n"
20+"X-Generator: Launchpad (build 17274)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:130
22#: plugins/LightDM/Greeter.cpp:130
23msgid "Password: "
23msgid "Password: "
@@ -265,31 +265,31 @@ msgstr "Atingeți pentru a vă întoarce la convorbire..."
265msgid "Conference"
265msgid "Conference"
266msgstr "Conferință"
266msgstr "Conferință"
267
267
268−#: qml/Panel/Indicators/MenuItemFactory.qml:615
268+#: qml/Panel/Indicators/MenuItemFactory.qml:643
269msgid "Nothing is playing"
269msgid "Nothing is playing"
270msgstr "Nu se redă nimic"
270msgstr "Nu se redă nimic"
271
271
272−#: qml/Panel/Indicators/MenuItemFactory.qml:763
272+#: qml/Panel/Indicators/MenuItemFactory.qml:791
273msgid "In queue…"
273msgid "In queue…"
274msgstr "În așteptare..."
274msgstr "În așteptare..."
275
275
276−#: qml/Panel/Indicators/MenuItemFactory.qml:767
276+#: qml/Panel/Indicators/MenuItemFactory.qml:795
277msgid "Downloading"
277msgid "Downloading"
278msgstr "Se descarcă"
278msgstr "Se descarcă"
279
279
280−#: qml/Panel/Indicators/MenuItemFactory.qml:769
280+#: qml/Panel/Indicators/MenuItemFactory.qml:797
281msgid "Paused, tap to resume"
281msgid "Paused, tap to resume"
282msgstr "În pauză, atingeți pentru a relua"
282msgstr "În pauză, atingeți pentru a relua"
283
283
284−#: qml/Panel/Indicators/MenuItemFactory.qml:771
284+#: qml/Panel/Indicators/MenuItemFactory.qml:799
285msgid "Canceled"
285msgid "Canceled"
286msgstr "Anulată"
286msgstr "Anulată"
287
287
288−#: qml/Panel/Indicators/MenuItemFactory.qml:773
288+#: qml/Panel/Indicators/MenuItemFactory.qml:801
289msgid "Finished"
289msgid "Finished"
290msgstr "Finalizată"
290msgstr "Finalizată"
291
291
292−#: qml/Panel/Indicators/MenuItemFactory.qml:775
292+#: qml/Panel/Indicators/MenuItemFactory.qml:803
293msgid "Failed, tap to retry"
293msgid "Failed, tap to retry"
294msgstr "Eșec, atingeți pentru a încerca din nou"
294msgstr "Eșec, atingeți pentru a încerca din nou"
295
295
@@ -301,49 +301,49 @@ msgstr "Deblocare SIM"
301msgid "Roaming"
301msgid "Roaming"
302msgstr "Roaming"
302msgstr "Roaming"
303
303
304−#: qml/Shell.qml:381
304+#: qml/Shell.qml:391
305msgid "Enter passphrase"
305msgid "Enter passphrase"
306msgstr "Introduceți fraza parolă"
306msgstr "Introduceți fraza parolă"
307
307
308−#: qml/Shell.qml:382
308+#: qml/Shell.qml:392
309msgid "Sorry, incorrect passphrase"
309msgid "Sorry, incorrect passphrase"
310msgstr "Frază secretă incorectă"
310msgstr "Frază secretă incorectă"
311
311
312−#: qml/Shell.qml:383
312+#: qml/Shell.qml:393
313msgid "Please re-enter"
313msgid "Please re-enter"
314msgstr "Introduceți din nou"
314msgstr "Introduceți din nou"
315
315
316−#: qml/Shell.qml:385
316+#: qml/Shell.qml:395
317msgid "Enter passcode"
317msgid "Enter passcode"
318msgstr "Introduceți parola"
318msgstr "Introduceți parola"
319
319
320−#: qml/Shell.qml:386
320+#: qml/Shell.qml:396
321msgid "Sorry, incorrect passcode"
321msgid "Sorry, incorrect passcode"
322msgstr "Parolă incorectă"
322msgstr "Parolă incorectă"
323
323
324−#: qml/Shell.qml:389
324+#: qml/Shell.qml:399
325#, qt-format
325#, qt-format
326msgid "Enter %1"
326msgid "Enter %1"
327msgstr "Introducere %1"
327msgstr "Introducere %1"
328
328
329−#: qml/Shell.qml:390
329+#: qml/Shell.qml:400
330#, qt-format
330#, qt-format
331msgid "Sorry, incorrect %1"
331msgid "Sorry, incorrect %1"
332msgstr "%1 incorectă"
332msgstr "%1 incorectă"
333
333
334−#: qml/Shell.qml:431
334+#: qml/Shell.qml:441
335msgid "Sorry, incorrect passphrase."
335msgid "Sorry, incorrect passphrase."
336msgstr "Frază parolă greșită"
336msgstr "Frază parolă greșită"
337
337
338−#: qml/Shell.qml:432
338+#: qml/Shell.qml:442
339msgid "Sorry, incorrect passcode."
339msgid "Sorry, incorrect passcode."
340msgstr "Parolă greșită"
340msgstr "Parolă greșită"
341
341
342−#: qml/Shell.qml:433
342+#: qml/Shell.qml:443
343msgid "This will be your last attempt."
343msgid "This will be your last attempt."
344msgstr "Aceasta va fi ultima încercare"
344msgstr "Aceasta va fi ultima încercare"
345
345
346−#: qml/Shell.qml:435
346+#: qml/Shell.qml:445
347msgid ""
347msgid ""
348"If passphrase is entered incorrectly, your phone will conduct a factory "
348"If passphrase is entered incorrectly, your phone will conduct a factory "
349"reset and all personal data will be deleted."
349"reset and all personal data will be deleted."
@@ -352,7 +352,7 @@ msgstr ""
352"configurările inițiale, ale fabricantului, iar toate datele personale vor fi "
352"configurările inițiale, ale fabricantului, iar toate datele personale vor fi "
353"șterse."
353"șterse."
354
354
355−#: qml/Shell.qml:436
355+#: qml/Shell.qml:446
356msgid ""
356msgid ""
357"If passcode is entered incorrectly, your phone will conduct a factory reset "
357"If passcode is entered incorrectly, your phone will conduct a factory reset "
358"and all personal data will be deleted."
358"and all personal data will be deleted."
po/ru.po+6−6
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
19+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
20−"X-Generator: Launchpad (build 17231)\n"
20+"X-Generator: Launchpad (build 17274)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:130
22#: plugins/LightDM/Greeter.cpp:130
23msgid "Password: "
23msgid "Password: "
@@ -30,7 +30,7 @@ msgstr "Закрепить ярлык"
30
30
31#: plugins/Unity/Launcher/launcheritem.cpp:91
31#: plugins/Unity/Launcher/launcheritem.cpp:91
32msgid "Unpin shortcut"
32msgid "Unpin shortcut"
33−msgstr "Изъять ярлык"
33+msgstr "Открепить ярлык"
34
34
35#: qml/Components/DelayedLockscreen.qml:47
35#: qml/Components/DelayedLockscreen.qml:47
36msgid "Device Locked"
36msgid "Device Locked"
@@ -167,7 +167,7 @@ msgstr ""
167
167
168#: qml/Components/Lockscreen.qml:223
168#: qml/Components/Lockscreen.qml:223
169msgid "Return to Call"
169msgid "Return to Call"
170−msgstr ""
170+msgstr "Вернуться к вызову"
171
171
172#: qml/Components/Lockscreen.qml:223
172#: qml/Components/Lockscreen.qml:223
173msgid "Emergency Call"
173msgid "Emergency Call"
@@ -232,7 +232,7 @@ msgstr "Отпустите для обновления…"
232
232
233#: qml/Dash/ScopesOverview.qml:215
233#: qml/Dash/ScopesOverview.qml:215
234msgid "Manage Scopes"
234msgid "Manage Scopes"
235−msgstr ""
235+msgstr "Настройки поиска"
236
236
237#: qml/Dash/ScopesOverview.qml:437
237#: qml/Dash/ScopesOverview.qml:437
238msgid "Done"
238msgid "Done"
@@ -240,7 +240,7 @@ msgstr "Готово"
240
240
241#: qml/Dash/ScopesOverview.qml:463
241#: qml/Dash/ScopesOverview.qml:463
242msgid "Store"
242msgid "Store"
243−msgstr ""
243+msgstr "Магазин"
244
244
245#: qml/Dash/ScopesOverviewTab.qml:36
245#: qml/Dash/ScopesOverviewTab.qml:36
246msgid "Favorites"
246msgid "Favorites"
po/shn.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=(n == 1) ? 0 : 1;\n"
17"Plural-Forms: nplurals=2; plural=(n == 1) ? 0 : 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/si.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/sl.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
17"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
18"n%100==4 ? 3 : 0);\n"
18"n%100==4 ? 3 : 0);\n"
19−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
19+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
20−"X-Generator: Launchpad (build 17231)\n"
20+"X-Generator: Launchpad (build 17274)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:130
22#: plugins/LightDM/Greeter.cpp:130
23msgid "Password: "
23msgid "Password: "
po/sq.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:49+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/sr.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
19+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
20−"X-Generator: Launchpad (build 17231)\n"
20+"X-Generator: Launchpad (build 17274)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:130
22#: plugins/LightDM/Greeter.cpp:130
23msgid "Password: "
23msgid "Password: "
po/sv.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20"Language: sv\n"
20"Language: sv\n"
21
21
22#: plugins/LightDM/Greeter.cpp:130
22#: plugins/LightDM/Greeter.cpp:130
po/sw.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/ta.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20"Language: ta\n"
20"Language: ta\n"
21
21
22#: plugins/LightDM/Greeter.cpp:130
22#: plugins/LightDM/Greeter.cpp:130
po/te.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/th.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/tr.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/ug.po+3−3
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
@@ -157,7 +157,7 @@ msgstr ""
157
157
158#: qml/Components/Lockscreen.qml:223
158#: qml/Components/Lockscreen.qml:223
159msgid "Return to Call"
159msgid "Return to Call"
160−msgstr ""
160+msgstr "سۆزلىشىشكە قايت"
161
161
162#: qml/Components/Lockscreen.qml:223
162#: qml/Components/Lockscreen.qml:223
163msgid "Emergency Call"
163msgid "Emergency Call"
po/uk.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
19+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
20−"X-Generator: Launchpad (build 17231)\n"
20+"X-Generator: Launchpad (build 17274)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:130
22#: plugins/LightDM/Greeter.cpp:130
23msgid "Password: "
23msgid "Password: "
po/vi.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/xh.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/zh_CN.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/zh_HK.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2014-11-09 06:54+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17231)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
po/zh_TW.po+21−21
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2014-11-20 06:27+0000\n"
18+"X-Launchpad-Export-Date: 2014-12-03 06:50+0000\n"
19−"X-Generator: Launchpad (build 17252)\n"
19+"X-Generator: Launchpad (build 17274)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:130
21#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
@@ -252,31 +252,31 @@ msgstr "輕觸可返回通話…"
252msgid "Conference"
252msgid "Conference"
253msgstr "會議"
253msgstr "會議"
254
254
255−#: qml/Panel/Indicators/MenuItemFactory.qml:615
255+#: qml/Panel/Indicators/MenuItemFactory.qml:643
256msgid "Nothing is playing"
256msgid "Nothing is playing"
257msgstr "無影音播放中"
257msgstr "無影音播放中"
258
258
259−#: qml/Panel/Indicators/MenuItemFactory.qml:763
259+#: qml/Panel/Indicators/MenuItemFactory.qml:791
260msgid "In queue…"
260msgid "In queue…"
261msgstr "佇列中…"
261msgstr "佇列中…"
262
262
263−#: qml/Panel/Indicators/MenuItemFactory.qml:767
263+#: qml/Panel/Indicators/MenuItemFactory.qml:795
264msgid "Downloading"
264msgid "Downloading"
265msgstr "下載中"
265msgstr "下載中"
266
266
267−#: qml/Panel/Indicators/MenuItemFactory.qml:769
267+#: qml/Panel/Indicators/MenuItemFactory.qml:797
268msgid "Paused, tap to resume"
268msgid "Paused, tap to resume"
269msgstr "已暫停,輕觸可繼續"
269msgstr "已暫停,輕觸可繼續"
270
270
271−#: qml/Panel/Indicators/MenuItemFactory.qml:771
271+#: qml/Panel/Indicators/MenuItemFactory.qml:799
272msgid "Canceled"
272msgid "Canceled"
273msgstr "已取消"
273msgstr "已取消"
274
274
275−#: qml/Panel/Indicators/MenuItemFactory.qml:773
275+#: qml/Panel/Indicators/MenuItemFactory.qml:801
276msgid "Finished"
276msgid "Finished"
277msgstr "已完成"
277msgstr "已完成"
278
278
279−#: qml/Panel/Indicators/MenuItemFactory.qml:775
279+#: qml/Panel/Indicators/MenuItemFactory.qml:803
280msgid "Failed, tap to retry"
280msgid "Failed, tap to retry"
281msgstr "失敗,輕觸可重試"
281msgstr "失敗,輕觸可重試"
282
282
@@ -288,55 +288,55 @@ msgstr "為 SIM 卡解鎖"
288msgid "Roaming"
288msgid "Roaming"
289msgstr "漫遊"
289msgstr "漫遊"
290
290
291−#: qml/Shell.qml:381
291+#: qml/Shell.qml:391
292msgid "Enter passphrase"
292msgid "Enter passphrase"
293msgstr "輸入密語"
293msgstr "輸入密語"
294
294
295−#: qml/Shell.qml:382
295+#: qml/Shell.qml:392
296msgid "Sorry, incorrect passphrase"
296msgid "Sorry, incorrect passphrase"
297msgstr "抱歉,密語不對"
297msgstr "抱歉,密語不對"
298
298
299−#: qml/Shell.qml:383
299+#: qml/Shell.qml:393
300msgid "Please re-enter"
300msgid "Please re-enter"
301msgstr "請再輸入"
301msgstr "請再輸入"
302
302
303−#: qml/Shell.qml:385
303+#: qml/Shell.qml:395
304msgid "Enter passcode"
304msgid "Enter passcode"
305msgstr "輸入 passcode"
305msgstr "輸入 passcode"
306
306
307−#: qml/Shell.qml:386
307+#: qml/Shell.qml:396
308msgid "Sorry, incorrect passcode"
308msgid "Sorry, incorrect passcode"
309msgstr "抱歉,passcode 不對"
309msgstr "抱歉,passcode 不對"
310
310
311−#: qml/Shell.qml:389
311+#: qml/Shell.qml:399
312#, qt-format
312#, qt-format
313msgid "Enter %1"
313msgid "Enter %1"
314msgstr "輸入 %1"
314msgstr "輸入 %1"
315
315
316−#: qml/Shell.qml:390
316+#: qml/Shell.qml:400
317#, qt-format
317#, qt-format
318msgid "Sorry, incorrect %1"
318msgid "Sorry, incorrect %1"
319msgstr "抱歉,%1不對"
319msgstr "抱歉,%1不對"
320
320
321−#: qml/Shell.qml:431
321+#: qml/Shell.qml:441
322msgid "Sorry, incorrect passphrase."
322msgid "Sorry, incorrect passphrase."
323msgstr "抱歉,密語不對"
323msgstr "抱歉,密語不對"
324
324
325−#: qml/Shell.qml:432
325+#: qml/Shell.qml:442
326msgid "Sorry, incorrect passcode."
326msgid "Sorry, incorrect passcode."
327msgstr "抱歉,passcode 不對。"
327msgstr "抱歉,passcode 不對。"
328
328
329−#: qml/Shell.qml:433
329+#: qml/Shell.qml:443
330msgid "This will be your last attempt."
330msgid "This will be your last attempt."
331msgstr "這將會是您最後一次嘗試的機會。"
331msgstr "這將會是您最後一次嘗試的機會。"
332
332
333−#: qml/Shell.qml:435
333+#: qml/Shell.qml:445
334msgid ""
334msgid ""
335"If passphrase is entered incorrectly, your phone will conduct a factory "
335"If passphrase is entered incorrectly, your phone will conduct a factory "
336"reset and all personal data will be deleted."
336"reset and all personal data will be deleted."
337msgstr "如輸入的密語不對,本電話會進行重設,所有個人資料都會刪除。"
337msgstr "如輸入的密語不對,本電話會進行重設,所有個人資料都會刪除。"
338
338
339−#: qml/Shell.qml:436
339+#: qml/Shell.qml:446
340msgid ""
340msgid ""
341"If passcode is entered incorrectly, your phone will conduct a factory reset "
341"If passcode is entered incorrectly, your phone will conduct a factory reset "
342"and all personal data will be deleted."
342"and all personal data will be deleted."
qml/Dash/CardCarousel.qml+1
@@ -52,6 +52,7 @@ DashRenderer {
52 function pressAndHold() { cardCarousel.pressAndHold(index, model.result, model) }
52 function pressAndHold() { cardCarousel.pressAndHold(index, model.result, model) }
53
53
54 sourceComponent: cardTool.cardComponent
54 sourceComponent: cardTool.cardComponent
55+ asynchronous: true
55 onLoaded: {
56 onLoaded: {
56 item.fixedHeaderHeight = Qt.binding(function() { return carousel.headerHeight; });
57 item.fixedHeaderHeight = Qt.binding(function() { return carousel.headerHeight; });
57 item.height = Qt.binding(function() { return cardTool.cardHeight; });
58 item.height = Qt.binding(function() { return cardTool.cardHeight; });
qml/Dash/CardGrid.qml+1−1
@@ -55,11 +55,11 @@ DashRenderer {
55 delegate: Item {
55 delegate: Item {
56 width: grid.cellWidth
56 width: grid.cellWidth
57 height: grid.cellHeight
57 height: grid.cellHeight
58− visible: y + height >= root.visibleRangeBegin && y <= root.visibleRangeEnd
59 Loader {
58 Loader {
60 id: loader
59 id: loader
61 sourceComponent: cardTool.cardComponent
60 sourceComponent: cardTool.cardComponent
62 anchors.horizontalCenter: parent.horizontalCenter
61 anchors.horizontalCenter: parent.horizontalCenter
62+ asynchronous: true
63 onLoaded: {
63 onLoaded: {
64 item.objectName = "delegate" + index;
64 item.objectName = "delegate" + index;
65 item.width = Qt.binding(function() { return cardTool.cardWidth; });
65 item.width = Qt.binding(function() { return cardTool.cardWidth; });
qml/Dash/CardHorizontalList.qml+1
@@ -42,6 +42,7 @@ DashRenderer {
42 sourceComponent: cardTool.cardComponent
42 sourceComponent: cardTool.cardComponent
43 anchors { top: parent.top; bottom: parent.bottom }
43 anchors { top: parent.top; bottom: parent.bottom }
44 width: cardTool.cardWidth
44 width: cardTool.cardWidth
45+ asynchronous: true
45 onLoaded: {
46 onLoaded: {
46 item.objectName = "delegate" + index;
47 item.objectName = "delegate" + index;
47 item.fixedArtShapeSize = Qt.binding(function() { return cardTool.artShapeSize; });
48 item.fixedArtShapeSize = Qt.binding(function() { return cardTool.artShapeSize; });
qml/Dash/CardVerticalJournal.qml−1
@@ -66,7 +66,6 @@ DashRenderer {
66 id: loader
66 id: loader
67 sourceComponent: cardTool.cardComponent
67 sourceComponent: cardTool.cardComponent
68 width: cardTool.cardWidth
68 width: cardTool.cardWidth
69− visible: y + height >= root.visibleRangeBegin && y <= root.visibleRangeEnd
70 onLoaded: {
69 onLoaded: {
71 item.objectName = "delegate" + index;
70 item.objectName = "delegate" + index;
72 item.fixedArtShapeSize = Qt.binding(function() { return cardTool.artShapeSize; });
71 item.fixedArtShapeSize = Qt.binding(function() { return cardTool.artShapeSize; });
qml/Dash/Dash.qml+13−4
@@ -31,12 +31,22 @@ Showable {
31 DashCommunicatorService {
31 DashCommunicatorService {
32 objectName: "dashCommunicatorService"
32 objectName: "dashCommunicatorService"
33 onSetCurrentScopeRequested: {
33 onSetCurrentScopeRequested: {
34− if (!isSwipe || !window.active || bottomEdgeController.progress != 0) {
34+ if (!isSwipe || !window.active || bottomEdgeController.progress != 0 || scopeItem.scope || dashContent.subPageShown) {
35 if (bottomEdgeController.progress != 0 && window.active) animate = false;
35 if (bottomEdgeController.progress != 0 && window.active) animate = false;
36 dashContent.setCurrentScopeAtIndex(index, animate, isSwipe)
36 dashContent.setCurrentScopeAtIndex(index, animate, isSwipe)
37+ // Close dash overview and nested temp scopes in it
37 if (bottomEdgeController.progress != 0) {
38 if (bottomEdgeController.progress != 0) {
38− bottomEdgeController.enableAnimation = window.active;
39+ bottomEdgeController.enableAnimation = window.active && !scopesOverview.showingNonFavoriteScope;
39 bottomEdgeController.progress = 0;
40 bottomEdgeController.progress = 0;
41+ scopesOverview.closeTempScope();
42+ }
43+ // Close normal temp scopes (e.g. App Store)
44+ if (scopeItem.scope) {
45+ scopeItem.backClicked();
46+ }
47+ // Close previews
48+ if (dashContent.subPageShown) {
49+ dashContent.closePreview();
40 }
50 }
41 }
51 }
42 }
52 }
@@ -268,7 +278,7 @@ Showable {
268 id: orange
278 id: orange
269 anchors { top: parent.top; bottom: parent.bottom }
279 anchors { top: parent.top; bottom: parent.bottom }
270 width: parent.width / 4
280 width: parent.width / 4
271− color: Theme.palette.selected.foreground
281+ color: UbuntuColors.orange
272
282
273 SequentialAnimation {
283 SequentialAnimation {
274 running: indicator.visible
284 running: indicator.visible
@@ -350,5 +360,4 @@ Showable {
350 }
360 }
351 }
361 }
352 }
362 }
353−
354}
363}
qml/Dash/DashRenderer.qml−4
@@ -27,10 +27,6 @@ Item {
27
27
28 property int displayMarginEnd: 0
28 property int displayMarginEnd: 0
29
29
30− property int visibleRangeBegin: 0
31−
32− property int visibleRangeEnd: 0
33−
34 property real originY: 0
30 property real originY: 0
35
31
36 // The model to renderer
32 // The model to renderer
qml/Dash/GenericScopeView.qml+22−25
@@ -379,32 +379,29 @@ FocusScope {
379 }
379 }
380 }
380 }
381
381
382− if (item && item.hasOwnProperty("visibleRangeBegin")) {
383− item.visibleRangeBegin = Math.max(-baseItem.y, 0)
384− item.visibleRangeEnd = item.visibleRangeBegin + Math.min(categoryView.height, rendererLoader.height)
385− }
386−
387 if (item && item.hasOwnProperty("displayMarginBeginning")) {
382 if (item && item.hasOwnProperty("displayMarginBeginning")) {
388− // TODO do we need item.originY here, test 1300302 once we have a silo
383+ // A item view is considered visible from
389− // and we can run it on the phone
384+ // -displayMarginBeginning
385+ // to
386+ // height + item.displayMarginEnd
387+ // We adjust displayMarginBeginning and displayMarginEnd so
388+ // * In non visible scopes only the viewport is considered visible
389+ // that way when you switch to it the visible items are there
390+ // * For visible scopes we increase the visible range by categoryView.height * 1.5
391+ // in both directions to make scrolling nicer by mantaining a higher number of
392+ // cached items
393+ // TODO Improvements
394+ // - For non visible scopes we should always have a visible range of 0 and
395+ // make sure the items in the viewport are created with the cache buffer feature
396+ // - For visible scopes we should always the have a visible range be exactly the
397+ // viewport and make sure the rest of items are created with the cache buffer feature
398+ // To be able to implement that feature VerticalJournal/AbstractDashView needs to
399+ // make the cache buffer value setable externally
390− if (scopeView.isCurrent) {
400+ var extraMargins = scopeView.isCurrent ? categoryView.height * 1.5 : 0;
391− // 1073741823 is s^30 -1. A quite big number so that you have "infinite" display margin, but not so
401+
392− // big so that if you add if with itself you're outside the 2^31 int range
393− item.displayMarginBeginning = 1073741823;
394− item.displayMarginEnd = 1073741823;
395− } else if (baseItem.y + baseItem.height <= 0) {
396− // Not visible (item at top of the list viewport)
397− item.displayMarginBeginning = -baseItem.height;
398− item.displayMarginEnd = 0;
399− } else if (baseItem.y >= categoryView.height) {
400− // Not visible (item at bottom of the list viewport)
401− item.displayMarginBeginning = 0;
402− item.displayMarginEnd = -baseItem.height;
403− } else {
404− item.displayMarginBeginning = Math.round(-Math.max(-baseItem.y, 0));
402+ item.displayMarginBeginning = Math.round(-Math.max(-baseItem.y - extraMargins, 0));
405− item.displayMarginEnd = -Math.round(Math.max(baseItem.height - seeAll.height -
403+ item.displayMarginEnd = -Math.round(Math.max(baseItem.height - extraMargins - seeAll.height -
406− categoryView.height + baseItem.y, 0));
404+ categoryView.height + baseItem.y, 0));
407− }
408 }
405 }
409 }
406 }
410 }
407 }
qml/Dash/Previews/PreviewActions.qml+2−1
@@ -15,6 +15,7 @@
15 */
15 */
16
16
17import QtQuick 2.1
17import QtQuick 2.1
18+import Ubuntu.Components 1.1
18
19
19/*! This preview widget shows either one button, two buttons or one button
20/*! This preview widget shows either one button, two buttons or one button
20 * and a combo button depending on the number of items in widgetData["actions"].
21 * and a combo button depending on the number of items in widgetData["actions"].
@@ -64,7 +65,7 @@ PreviewWidget {
64 visible: row.actions && row.actions.length > 0
65 visible: row.actions && row.actions.length > 0
65 onTriggeredAction: root.triggered(root.widgetId, actionData.id, actionData)
66 onTriggeredAction: root.triggered(root.widgetId, actionData.id, actionData)
66 width: (root.width - units.gu(1)) / 2
67 width: (root.width - units.gu(1)) / 2
67− color: root.scopeStyle ? root.scopeStyle.previewButtonColor : Theme.palette.selected.foreground
68+ color: root.scopeStyle ? root.scopeStyle.previewButtonColor : UbuntuColors.orange
68 }
69 }
69 }
70 }
70}
71}
qml/Dash/Previews/PreviewPayments.qml+1−1
@@ -35,7 +35,7 @@ PreviewWidget {
35 id: paymentButton
35 id: paymentButton
36 objectName: "paymentButton"
36 objectName: "paymentButton"
37
37
38− color: Theme.palette.selected.foreground
38+ color: UbuntuColors.orange
39 text: paymentClient.formattedPrice
39 text: paymentClient.formattedPrice
40 onClicked: {
40 onClicked: {
41 paymentClient.start();
41 paymentClient.start();
qml/Dash/Previews/PreviewZoomableImage.qml+1
@@ -40,6 +40,7 @@ PreviewWidget {
40 }
40 }
41 scaleTo: "height"
41 scaleTo: "height"
42 source: widgetData["source"]
42 source: widgetData["source"]
43+ asynchronous: true
43
44
44 borderSource: mouseArea.pressed ? "radius_pressed.sci" : "radius_idle.sci"
45 borderSource: mouseArea.pressed ? "radius_pressed.sci" : "radius_idle.sci"
45
46
qml/Shell.qml+6−2
@@ -44,6 +44,10 @@ import Unity.DashCommunicator 0.1
44Item {
44Item {
45 id: shell
45 id: shell
46
46
47+ // Disable everything so that user can't swipe greeter or launcher until
48+ // we get first prompt/authenticate, which will re-enable the shell.
49+ enabled: false
50+
47 // this is only here to select the width / height of the window if not running fullscreen
51 // this is only here to select the width / height of the window if not running fullscreen
48 property bool tablet: false
52 property bool tablet: false
49 width: tablet ? units.gu(160) : applicationArguments.hasGeometry() ? applicationArguments.width() : units.gu(40)
53 width: tablet ? units.gu(160) : applicationArguments.hasGeometry() ? applicationArguments.width() : units.gu(40)
@@ -495,7 +499,7 @@ Item {
495 // Just a tiny wrapper to adjust greeter's x without messing with its own dragging
499 // Just a tiny wrapper to adjust greeter's x without messing with its own dragging
496 id: greeterWrapper
500 id: greeterWrapper
497 objectName: "greeterWrapper"
501 objectName: "greeterWrapper"
498− x: greeter.narrowMode ? launcher.progress : 0
502+ x: (greeter.narrowMode && greeter.showProgress > 0) ? launcher.progress : 0
499 y: panel.panelHeight
503 y: panel.panelHeight
500 width: parent.width
504 width: parent.width
501 height: parent.height - panel.panelHeight
505 height: parent.height - panel.panelHeight
@@ -574,7 +578,7 @@ Item {
574 onShownChanged: {
578 onShownChanged: {
575 if (shown) {
579 if (shown) {
576 // Disable everything so that user can't swipe greeter or
580 // Disable everything so that user can't swipe greeter or
577− // launcher until we get first prompt/authenticate, which
581+ // launcher until we get the next prompt/authenticate, which
578 // will re-enable the shell.
582 // will re-enable the shell.
579 shell.enabled = false;
583 shell.enabled = false;
580
584
qml/Stages/PhoneStage.qml+17−33
@@ -145,16 +145,16 @@ Rectangle {
145
145
146 // Those markers mark the various positions in the spread (ratio to screen width from right to left):
146 // Those markers mark the various positions in the spread (ratio to screen width from right to left):
147 // 0 - 1: following finger, snap back to the beginning on release
147 // 0 - 1: following finger, snap back to the beginning on release
148− property real positionMarker1: 0.3
148+ property real positionMarker1: 0.2
149 // 1 - 2: curved snapping movement, snap to app 1 on release
149 // 1 - 2: curved snapping movement, snap to app 1 on release
150− property real positionMarker2: 0.45
150+ property real positionMarker2: 0.3
151 // 2 - 3: movement follows finger, snaps back to app 1 on release
151 // 2 - 3: movement follows finger, snaps back to app 1 on release
152− property real positionMarker3: 0.6
152+ property real positionMarker3: 0.35
153 // passing 3, we detach movement from the finger and snap to 4
153 // passing 3, we detach movement from the finger and snap to 4
154 property real positionMarker4: 0.9
154 property real positionMarker4: 0.9
155
155
156 // This is where the first app snaps to when bringing it in from the right edge.
156 // This is where the first app snaps to when bringing it in from the right edge.
157− property real snapPosition: 0.75
157+ property real snapPosition: 0.7
158
158
159 // Phase of the animation:
159 // Phase of the animation:
160 // 0: Starting from right edge, a new app (index 1) comes in from the right
160 // 0: Starting from right edge, a new app (index 1) comes in from the right
@@ -178,7 +178,7 @@ Rectangle {
178 case 1:
178 case 1:
179 if (shiftedContentX < width * positionMarker2) {
179 if (shiftedContentX < width * positionMarker2) {
180 phase = 0;
180 phase = 0;
181− } else if (shiftedContentX >= width * positionMarker4) {
181+ } else if (shiftedContentX >= width * positionMarker4 && !spreadDragArea.dragging) {
182 phase = 2;
182 phase = 2;
183 }
183 }
184 break;
184 break;
@@ -270,6 +270,7 @@ Rectangle {
270
270
271 Repeater {
271 Repeater {
272 id: spreadRepeater
272 id: spreadRepeater
273+ objectName: "spreadRepeater"
273 model: ApplicationManager
274 model: ApplicationManager
274 delegate: TransformedSpreadDelegate {
275 delegate: TransformedSpreadDelegate {
275 id: appDelegate
276 id: appDelegate
@@ -367,8 +368,9 @@ Rectangle {
367 if (spreadView.phase == 0 && index < 2) {
368 if (spreadView.phase == 0 && index < 2) {
368 if (progress < spreadView.positionMarker1) {
369 if (progress < spreadView.positionMarker1) {
369 return progress;
370 return progress;
370− } else if (progress < spreadView.positionMarker1 + snappingCurve.period){
371+ } else if (progress < spreadView.positionMarker1 + 0.05){
371− return spreadView.positionMarker1 + snappingCurve.value * 3;
372+ // p : 0.05 = x : pm2
373+ return spreadView.positionMarker1 + (progress - spreadView.positionMarker1) * (spreadView.positionMarker2 - spreadView.positionMarker1) / 0.05
372 } else {
374 } else {
373 return spreadView.positionMarker2;
375 return spreadView.positionMarker2;
374 }
376 }
@@ -380,13 +382,6 @@ Rectangle {
380 visible: (progress >= 0 && progress < 1.7) ||
382 visible: (progress >= 0 && progress < 1.7) ||
381 (isDash && priv.focusedAppDelegate.x !== 0)
383 (isDash && priv.focusedAppDelegate.x !== 0)
382
384
383− EasingCurve {
384− id: snappingCurve
385− type: EasingCurve.Linear
386− period: 0.05
387− progress: appDelegate.progress - spreadView.positionMarker1
388− }
389−
390 Binding {
385 Binding {
391 target: appDelegate
386 target: appDelegate
392 property: "orientation"
387 property: "orientation"
@@ -425,16 +420,11 @@ Rectangle {
425 id: spreadDragArea
420 id: spreadDragArea
426 objectName: "spreadDragArea"
421 objectName: "spreadDragArea"
427 direction: Direction.Leftwards
422 direction: Direction.Leftwards
428− enabled: spreadView.phase != 2 && root.spreadEnabled
423+ enabled: (spreadView.phase != 2 && root.spreadEnabled) || dragging
429
424
430 anchors { top: parent.top; right: parent.right; bottom: parent.bottom }
425 anchors { top: parent.top; right: parent.right; bottom: parent.bottom }
431 width: root.dragAreaWidth
426 width: root.dragAreaWidth
432
427
433− // Sitting at the right edge of the screen, this EdgeDragArea directly controls the spreadView when
434− // attachedToView is true. When the finger movement passes positionMarker3 we detach it from the
435− // spreadView and make the spreadView snap to positionMarker4.
436− property bool attachedToView: true
437−
438 property var gesturePoints: new Array()
428 property var gesturePoints: new Array()
439
429
440 onTouchXChanged: {
430 onTouchXChanged: {
@@ -443,15 +433,13 @@ Rectangle {
443 spreadView.phase = 0;
433 spreadView.phase = 0;
444 spreadView.contentX = -spreadView.shift;
434 spreadView.contentX = -spreadView.shift;
445 }
435 }
446− if (dragging && status == DirectionalDragArea.Recognized && attachedToView) {
436+ if (dragging && status == DirectionalDragArea.Recognized) {
447 // Gesture recognized. Let's move the spreadView with the finger
437 // Gesture recognized. Let's move the spreadView with the finger
448− var finalX = Math.min(touchX + width, width);
438+ var dragX = Math.min(touchX + width, width); // Prevent dragging rightwards
449− spreadView.contentX = -finalX + spreadDragArea.width - spreadView.shift;
439+ dragX = -dragX + spreadDragArea.width - spreadView.shift;
450− }
440+ // Don't allow dragging further than the animation crossing with phase2's animation
451− if (attachedToView && spreadView.shiftedContentX >= spreadView.width * spreadView.positionMarker3) {
441+ var maxMovement = spreadView.width * spreadView.positionMarker4 - spreadView.shift;
452− // We passed positionMarker3. Detach from spreadView and snap it.
442+ spreadView.contentX = Math.min(dragX, maxMovement);
453− attachedToView = false;
454− spreadView.snap();
455 }
443 }
456 gesturePoints.push(touchX);
444 gesturePoints.push(touchX);
457 }
445 }
@@ -462,10 +450,6 @@ Rectangle {
462 onStatusChanged: {
450 onStatusChanged: {
463 previousStatus = currentStatus;
451 previousStatus = currentStatus;
464 currentStatus = status;
452 currentStatus = status;
465−
466− if (status == DirectionalDragArea.Recognized) {
467− attachedToView = true;
468− }
469 }
453 }
470
454
471 onDraggingChanged: {
455 onDraggingChanged: {
@@ -493,7 +477,7 @@ Rectangle {
493 // If it was a short one-way movement, do the Alt+Tab switch
477 // If it was a short one-way movement, do the Alt+Tab switch
494 // no matter if we didn't cross positionMarker1 yet.
478 // no matter if we didn't cross positionMarker1 yet.
495 spreadView.snapTo(1);
479 spreadView.snapTo(1);
496− } else if (!dragging && attachedToView) {
480+ } else if (!dragging) {
497 // otherwise snap to the closest snap position we can find
481 // otherwise snap to the closest snap position we can find
498 // (might be back to start, to app 1 or to spread)
482 // (might be back to start, to app 1 or to spread)
499 spreadView.snap();
483 spreadView.snap();
qml/Stages/SpreadDelegate.qml+8−1
@@ -41,10 +41,17 @@ Item {
41 Item {
41 Item {
42 objectName: "appWindowWithShadow"
42 objectName: "appWindowWithShadow"
43
43
44+ readonly property real limit: root.height / 4
45+
44− y: dragArea.distance
46+ y: root.closeable ? dragArea.distance : elastic(dragArea.distance)
45 width: parent.width
47 width: parent.width
46 height: parent.height
48 height: parent.height
47
49
50+ function elastic(distance) {
51+ var k = distance < 0 ? -limit : limit
52+ return k * (1 - Math.pow((k - 1) / k, distance))
53+ }
54+
48 BorderImage {
55 BorderImage {
49 anchors {
56 anchors {
50 fill: appWindow
57 fill: appWindow
qml/Stages/TabletStage.qml+5−14
@@ -590,7 +590,6 @@ Rectangle {
590 width: root.dragAreaWidth
590 width: root.dragAreaWidth
591 direction: Direction.Leftwards
591 direction: Direction.Leftwards
592
592
593− property bool attachedToView: false
594 property var gesturePoints: new Array()
593 property var gesturePoints: new Array()
595
594
596 onTouchXChanged: {
595 onTouchXChanged: {
@@ -599,22 +598,14 @@ Rectangle {
599 spreadView.contentX = -spreadView.shift;
598 spreadView.contentX = -spreadView.shift;
600 }
599 }
601
600
602− if (dragging && attachedToView) {
601+ if (dragging) {
603− spreadView.contentX = -touchX + spreadDragArea.width - spreadView.shift;
602+ var dragX = -touchX + spreadDragArea.width - spreadView.shift;
604− if (spreadView.shiftedContentX > spreadView.phase0Width + spreadView.phase1Width / 2) {
603+ var maxDrag = spreadView.width * spreadView.positionMarker4 - spreadView.shift;
605− attachedToView = false;
604+ spreadView.contentX = Math.min(dragX, maxDrag);
606− spreadView.snap();
607− }
608 }
605 }
609 gesturePoints.push(touchX);
606 gesturePoints.push(touchX);
610 }
607 }
611
608
612− onStatusChanged: {
613− if (status == DirectionalDragArea.Recognized) {
614− attachedToView = true;
615− }
616− }
617−
618 onDraggingChanged: {
609 onDraggingChanged: {
619 if (dragging) {
610 if (dragging) {
620 // Gesture recognized. Start recording this gesture
611 // Gesture recognized. Start recording this gesture
@@ -630,7 +621,7 @@ Rectangle {
630 // If it was a short one-way movement, do the Alt+Tab switch
621 // If it was a short one-way movement, do the Alt+Tab switch
631 // no matter if we didn't cross positionMarker1 yet.
622 // no matter if we didn't cross positionMarker1 yet.
632 spreadView.snapTo(spreadView.nextInStack);
623 spreadView.snapTo(spreadView.nextInStack);
633− } else if (!dragging && attachedToView) {
624+ } else if (!dragging) {
634 if (spreadView.shiftedContentX < spreadView.width * spreadView.positionMarker1) {
625 if (spreadView.shiftedContentX < spreadView.width * spreadView.positionMarker1) {
635 spreadView.snap();
626 spreadView.snap();
636 } else if (spreadView.shiftedContentX < spreadView.width * spreadView.positionMarker2) {
627 } else if (spreadView.shiftedContentX < spreadView.width * spreadView.positionMarker2) {
qml/graphics/applicationIcons/dash@18.png → qml/graphics/applicationIcons/dash.pngrenamed

Binary file not shown.

src/CMakeLists.txt+4−1
@@ -1,6 +1,9 @@
1+pkg_check_modules(CONNECTIVITY REQUIRED connectivity-qt1)
2+
1include_directories(
3include_directories(
2 ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
4 ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
3 ${CMAKE_SOURCE_DIR}/libs/UbuntuGestures
5 ${CMAKE_SOURCE_DIR}/libs/UbuntuGestures
6+ ${CONNECTIVITY_INCLUDE_DIRS}
4)
7)
5
8
6file(GLOB_RECURSE QML_FILES
9file(GLOB_RECURSE QML_FILES
@@ -30,7 +33,7 @@ if (NOT "${XCB_INCLUDE_DIRS}" STREQUAL "")
30 target_link_libraries(${SHELL_APP} ${XCB_LDFLAGS})
33 target_link_libraries(${SHELL_APP} ${XCB_LDFLAGS})
31endif()
34endif()
32
35
33−target_link_libraries(${SHELL_APP} UbuntuGestures)
36+target_link_libraries(${SHELL_APP} UbuntuGestures connectivity-qt1)
34
37
35# For it to find libUbuntuGestures.so
38# For it to find libUbuntuGestures.so
36set_target_properties(${SHELL_APP} PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}")
39set_target_properties(${SHELL_APP} PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}")
src/CachingNetworkManagerFactory.cpp+2−11
@@ -20,25 +20,16 @@
20#include <QNetworkDiskCache>
20#include <QNetworkDiskCache>
21#include <QNetworkAccessManager>
21#include <QNetworkAccessManager>
22#include <QStandardPaths>
22#include <QStandardPaths>
23−#include <QNetworkConfigurationManager>
24
23
25CachingNetworkAccessManager::CachingNetworkAccessManager(QObject *parent)
24CachingNetworkAccessManager::CachingNetworkAccessManager(QObject *parent)
26 : QNetworkAccessManager(parent)
25 : QNetworkAccessManager(parent)
27{
26{
28− m_networkManager = new QNetworkConfigurationManager(this);
27+ m_networkingStatus = new ubuntu::connectivity::NetworkingStatus(this);
29−
30− QObject::connect(m_networkManager, &QNetworkConfigurationManager::onlineStateChanged, this, &CachingNetworkAccessManager::onlineStateChanged);
31− m_isOnline = m_networkManager->isOnline();
32−}
33−
34−void CachingNetworkAccessManager::onlineStateChanged(bool isOnline)
35−{
36− m_isOnline = isOnline;
37}
28}
38
29
39QNetworkReply* CachingNetworkAccessManager::createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData)
30QNetworkReply* CachingNetworkAccessManager::createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData)
40{
31{
41− if (!m_isOnline) {
32+ if (m_networkingStatus->status() != ubuntu::connectivity::NetworkingStatus::Status::Online) {
42 QNetworkRequest req(request);
33 QNetworkRequest req(request);
43 req.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysCache);
34 req.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysCache);
44 return QNetworkAccessManager::createRequest(op, req, outgoingData);
35 return QNetworkAccessManager::createRequest(op, req, outgoingData);
src/CachingNetworkManagerFactory.h+2−6
@@ -21,7 +21,7 @@
21#include <QQmlNetworkAccessManagerFactory>
21#include <QQmlNetworkAccessManagerFactory>
22#include <QNetworkAccessManager>
22#include <QNetworkAccessManager>
23
23
24−class QNetworkConfigurationManager;
24+#include <ubuntu/connectivity/networking-status.h>
25
25
26class CachingNetworkAccessManager : public QNetworkAccessManager
26class CachingNetworkAccessManager : public QNetworkAccessManager
27{
27{
@@ -31,12 +31,8 @@ public:
31protected:
31protected:
32 QNetworkReply* createRequest(Operation op, const QNetworkRequest &req, QIODevice *outgoingData = 0) override;
32 QNetworkReply* createRequest(Operation op, const QNetworkRequest &req, QIODevice *outgoingData = 0) override;
33
33
34−private Q_SLOTS:
35− void onlineStateChanged(bool isOnline);
36−
37private:
34private:
38− QNetworkConfigurationManager* m_networkManager;
35+ ubuntu::connectivity::NetworkingStatus* m_networkingStatus;
39− bool m_isOnline;
40};
36};
41
37
42class CachingNetworkManagerFactory : public QQmlNetworkAccessManagerFactory
38class CachingNetworkManagerFactory : public QQmlNetworkAccessManagerFactory
src/Dash/CMakeLists.txt+1−1
@@ -12,7 +12,7 @@ qt5_use_modules(unity8-dash Gui Qml Quick Test)
12# For it to find libUbuntuGestures.so, needed by Ubuntu.Gestures QML module.
12# For it to find libUbuntuGestures.so, needed by Ubuntu.Gestures QML module.
13set_target_properties(unity8-dash PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}")
13set_target_properties(unity8-dash PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}")
14
14
15−target_link_libraries(unity8-dash UbuntuGestures)
15+target_link_libraries(unity8-dash UbuntuGestures connectivity-qt1)
16
16
17set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
17set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
18
18
tests/autopilot/unity8/application_lifecycle/tests/test_application_lifecycle.py+1−1
@@ -47,7 +47,7 @@ class ApplicationLifecycleTests(tests.ApplicationLifeCycleTestCase):
47 height = self.main_window.height
47 height = self.main_window.height
48 start_x = width
48 start_x = width
49 start_y = int(height/2)
49 start_y = int(height/2)
50− end_x = int(width/2)
50+ end_x = int(width*3/4)
51 end_y = start_y
51 end_y = start_y
52
52
53 logger.info("Swiping screen from the right edge")
53 logger.info("Swiping screen from the right edge")
tests/autopilot/unity8/shell/emulators/dash.py+1−1
@@ -204,7 +204,7 @@ class GenericScopeView(emulators.UnityEmulatorBase):
204
204
205 """
205 """
206 category_element = self._get_category_element(category)
206 category_element = self._get_category_element(category)
207− icon = category_element.select_single('AbstractButton', title=title)
207+ icon = category_element.wait_select_single('AbstractButton', title=title)
208 self.pointing_device.click_object(icon)
208 self.pointing_device.click_object(icon)
209
209
210 def _get_category_element(self, category):
210 def _get_category_element(self, category):
tests/plugins/Dash/CMakeLists.txt+1
@@ -80,3 +80,4 @@ set(qmltest_DEFAULT_PROPERTIES ENVIRONMENT "LC_ALL=C")
80add_qml_test(. ScopeStyle IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins)
80add_qml_test(. ScopeStyle IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins)
81add_qml_test(. ListViewWithPageHeaderQML IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins)
81add_qml_test(. ListViewWithPageHeaderQML IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins)
82add_qml_test(. CardAttributes IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins)
82add_qml_test(. CardAttributes IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins)
83+add_qml_test(. CroppedImageMinimumSourceSize IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins)
tests/plugins/Dash/cardcreator/1.res+4−4
@@ -46,16 +46,16 @@ Item {
46 height = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.height });
46 height = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.height });
47 }
47 }
48 }
48 }
49− image: CroppedImageMinimumSourceSize {
49+ CroppedImageMinimumSourceSize {
50+ id: artImage;
50 objectName: "artImage";
51 objectName: "artImage";
51− property bool doLoadSource: !NetworkingStatus.limitedBandwith;
52− source: { if (root.visible) doLoadSource = true; return doLoadSource && cardData && cardData["art"] || ""; }
52+ source: cardData && cardData["art"] || "";
53− cache: true;
54 asynchronous: root.asynchronous;
53 asynchronous: root.asynchronous;
55 visible: false;
54 visible: false;
56 width: root.width;
55 width: root.width;
57 height: width / artShape.aspect;
56 height: width / artShape.aspect;
58 }
57 }
58+ image: artImage.image;
59 }
59 }
60 }
60 }
61 }
61 }
tests/plugins/Dash/cardcreator/2.res+2−3
@@ -68,13 +68,12 @@ CroppedImageMinimumSourceSize {
68 id: mascotImage;
68 id: mascotImage;
69 objectName: "mascotImage";
69 objectName: "mascotImage";
70 anchors { verticalCenter: parent.verticalCenter; }
70 anchors { verticalCenter: parent.verticalCenter; }
71− property bool doLoadSource: !NetworkingStatus.limitedBandwith;
72− source: { if (root.visible) doLoadSource = true; return doLoadSource && cardData && cardData["mascot"] || ""; }
71+ source: cardData && cardData["mascot"] || "";
73 width: units.gu(6);
72 width: units.gu(6);
74 height: units.gu(5.625);
73 height: units.gu(5.625);
75 horizontalAlignment: Image.AlignHCenter;
74 horizontalAlignment: Image.AlignHCenter;
76 verticalAlignment: Image.AlignVCenter;
75 verticalAlignment: Image.AlignVCenter;
77− visible: showHeader && resized;
76+ visible: showHeader;
78 }
77 }
79,Item {
78,Item {
80 id: headerTitleContainer;
79 id: headerTitleContainer;
tests/plugins/Dash/cardcreator/3.res+10−10
@@ -46,16 +46,16 @@ Item {
46 height = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.height });
46 height = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.height });
47 }
47 }
48 }
48 }
49− image: CroppedImageMinimumSourceSize {
49+ CroppedImageMinimumSourceSize {
50+ id: artImage;
50− objectName: "artImage";
51+ objectName: "artImage";
51− property bool doLoadSource: !NetworkingStatus.limitedBandwith;
52− source: { if (root.visible) doLoadSource = true; return doLoadSource && cardData && cardData["art"] || ""; }
52+ source: cardData && cardData["art"] || "";
53− cache: true;
54− asynchronous: root.asynchronous;
53+ asynchronous: root.asynchronous;
55− visible: false;
54+ visible: false;
56− width: root.width;
55+ width: root.width;
57− height: width / artShape.aspect;
56+ height: width / artShape.aspect;
58− }
57+ }
58+ image: artImage.image;
59 }
59 }
60 }
60 }
61 }
61 }
tests/plugins/Dash/cardcreator/4.res+3−4
@@ -35,11 +35,11 @@ Loader {
35 id: mascotShapeLoader;
35 id: mascotShapeLoader;
36 objectName: "mascotShapeLoader";
36 objectName: "mascotShapeLoader";
37 asynchronous: root.asynchronous;
37 asynchronous: root.asynchronous;
38− active: mascotImage.status === Image.Ready;
38+ active: mascotImage.image.status === Image.Ready;
39 visible: showHeader && active && status == Loader.Ready;
39 visible: showHeader && active && status == Loader.Ready;
40 width: units.gu(6);
40 width: units.gu(6);
41 height: units.gu(5.625);
41 height: units.gu(5.625);
42− sourceComponent: UbuntuShape { image: mascotImage }
42+ sourceComponent: UbuntuShape { image: mascotImage.image }
43 anchors { verticalCenter: parent.verticalCenter; }
43 anchors { verticalCenter: parent.verticalCenter; }
44 }
44 }
45
45
@@ -47,8 +47,7 @@ Loader {
47 id: mascotImage;
47 id: mascotImage;
48 objectName: "mascotImage";
48 objectName: "mascotImage";
49 anchors { verticalCenter: parent.verticalCenter; }
49 anchors { verticalCenter: parent.verticalCenter; }
50− property bool doLoadSource: !NetworkingStatus.limitedBandwith;
51− source: { if (root.visible) doLoadSource = true; return doLoadSource && cardData && cardData["mascot"] || ""; }
50+ source: cardData && cardData["mascot"] || "";
52 width: units.gu(6);
51 width: units.gu(6);
53 height: units.gu(5.625);
52 height: units.gu(5.625);
54 horizontalAlignment: Image.AlignHCenter;
53 horizontalAlignment: Image.AlignHCenter;
tests/plugins/Dash/cardcreator/5.res+10−10
@@ -46,16 +46,16 @@ Item {
46 height = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.height });
46 height = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.height });
47 }
47 }
48 }
48 }
49− image: CroppedImageMinimumSourceSize {
49+ CroppedImageMinimumSourceSize {
50+ id: artImage;
50− objectName: "artImage";
51+ objectName: "artImage";
51− property bool doLoadSource: !NetworkingStatus.limitedBandwith;
52− source: { if (root.visible) doLoadSource = true; return doLoadSource && cardData && cardData["art"] || ""; }
52+ source: cardData && cardData["art"] || "";
53− cache: true;
54− asynchronous: root.asynchronous;
53+ asynchronous: root.asynchronous;
55− visible: false;
54+ visible: false;
56− width: root.width;
55+ width: root.width;
57− height: width / artShape.aspect;
56+ height: width / artShape.aspect;
58− }
57+ }
58+ image: artImage.image;
59 }
59 }
60 }
60 }
61 }
61 }
tests/plugins/Dash/cardcreator/7.res+2−3
@@ -68,13 +68,12 @@ CroppedImageMinimumSourceSize {
68 id: mascotImage;
68 id: mascotImage;
69 objectName: "mascotImage";
69 objectName: "mascotImage";
70 anchors { verticalCenter: parent.verticalCenter; }
70 anchors { verticalCenter: parent.verticalCenter; }
71− property bool doLoadSource: !NetworkingStatus.limitedBandwith;
72− source: { if (root.visible) doLoadSource = true; return doLoadSource && cardData && cardData["mascot"] || ""; }
71+ source: cardData && cardData["mascot"] || "";
73 width: units.gu(6);
72 width: units.gu(6);
74 height: units.gu(5.625);
73 height: units.gu(5.625);
75 horizontalAlignment: Image.AlignHCenter;
74 horizontalAlignment: Image.AlignHCenter;
76 verticalAlignment: Image.AlignVCenter;
75 verticalAlignment: Image.AlignVCenter;
77− visible: showHeader && resized;
76+ visible: showHeader;
78 }
77 }
79
78
80,Item {
79,Item {
tests/plugins/Dash/tst_CroppedImageMinimumSourceSize.qmlnew file+56
@@ -0,0 +1,56 @@
1+/*
2+ * Copyright (C) 2014 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.3
18+import QtTest 1.0
19+import Ubuntu.Components 1.1
20+import Dash 0.1
21+
22+Rectangle {
23+ width: 500
24+ height: 300
25+
26+ color: "red"
27+
28+ CroppedImageMinimumSourceSize {
29+ id: cimss
30+ x: 100
31+ y: 100
32+ width: 100
33+ height: 100
34+ source: Qt.resolvedUrl("../../qmltests/Dash/artwork/music-player-design.png")
35+ asynchronous: true
36+ }
37+
38+ TestCase {
39+ id: testCase
40+ name: "ScopeStyle"
41+ when: windowShown
42+
43+ function test_croppedSource() {
44+ tryCompare(cimss.image.sourceSize, "width", 100);
45+ tryCompare(cimss.image.sourceSize, "height", 0);
46+
47+ cimss.width = 40;
48+ tryCompare(cimss.image.sourceSize, "width", 0);
49+ tryCompare(cimss.image.sourceSize, "height", 100);
50+
51+ cimss.width = 100;
52+ tryCompare(cimss.image.sourceSize, "width", 100);
53+ tryCompare(cimss.image.sourceSize, "height", 0);
54+ }
55+ }
56+}
tests/plugins/Dash/tst_ScopeStyle.qml+1−1
@@ -174,7 +174,7 @@ Rectangle {
174
174
175 function test_previewButtonColor_data() {
175 function test_previewButtonColor_data() {
176 return [
176 return [
177− { tag: "default", index: 0, previewButtonColor: Theme.palette.selected.foreground },
177+ { tag: "default", index: 0, previewButtonColor: UbuntuColors.orange },
178 { tag: "red", index: 1, previewButtonColor: "red" },
178 { tag: "red", index: 1, previewButtonColor: "red" },
179 ];
179 ];
180 }
180 }
tests/qmltests/Dash/tst_Card.qml−22
@@ -17,7 +17,6 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import Ubuntu.Components 0.1
19import Ubuntu.Components 0.1
20−import Ubuntu.Connectivity 1.0
21import Unity.Test 0.1 as UT
20import Unity.Test 0.1 as UT
22import "../../../qml/Dash"
21import "../../../qml/Dash"
23import "CardHelpers.js" as Helpers
22import "CardHelpers.js" as Helpers
@@ -221,7 +220,6 @@ Rectangle {
221
220
222 function init() {
221 function init() {
223 loader.visible = true;
222 loader.visible = true;
224− NetworkingStatus.limitedBandwith = false;
225 }
223 }
226
224
227 function cleanup() {
225 function cleanup() {
@@ -585,25 +583,5 @@ Rectangle {
585 verify((card.width - titleToCard.x - titleToCard.width) === units.gu(1));
583 verify((card.width - titleToCard.x - titleToCard.width) === units.gu(1));
586 }
584 }
587 }
585 }
588−
589− function test_load_images_visibility_network_data() {
590− return [
591− { tag: "Visible, network", visible: true, limitedBandwith: false },
592− { tag: "Visible, no network", visible: true, limitedBandwith: true },
593− { tag: "Not Visible, network", visible: false, limitedBandwith: false },
594− { tag: "Not Visible, no network", visible: false, limitedBandwith: true }
595− ];
596− }
597−
598− function test_load_images_visibility_network(data) {
599− loader.visible = data.visible;
600− NetworkingStatus.limitedBandwith = data.limitedBandwith;
601−
602− selector.selectedIndex = 0;
603− waitForRendering(selector);
604− waitForRendering(card);
605−
606− verify(data.visible || !data.limitedBandwith || artImage.source == "");
607− }
608 }
586 }
609}
587}
tests/qmltests/Dash/tst_Dash.qml+16
@@ -228,6 +228,22 @@ Item {
228 tryCompare(dashContentList, "currentIndex", 1)
228 tryCompare(dashContentList, "currentIndex", 1)
229 }
229 }
230
230
231+ function test_setCurrentScopeClosesPreview() {
232+ var dashContent = findChild(dash, "dashContent");
233+ waitForRendering(dash)
234+
235+ var delegate0 = findChild(dash, "delegate0");
236+ mouseClick(delegate0, delegate0.width / 2, delegate0.height / 2);
237+
238+ tryCompare(dashContent, "subPageShown", true)
239+ waitForRendering(dash);
240+
241+ var dashCommunicatorService = findInvisibleChild(dash, "dashCommunicatorService");
242+ dashCommunicatorService.mockSetCurrentScope(0, true, false);
243+
244+ tryCompare(dashContent, "subPageShown", false)
245+ }
246+
231 function test_processing_indicator() {
247 function test_processing_indicator() {
232 var processingIndicator = findChild(dash, "processingIndicator");
248 var processingIndicator = findChild(dash, "processingIndicator");
233 verify(processingIndicator, "Can't find the processing indicator.");
249 verify(processingIndicator, "Can't find the processing indicator.");
tests/qmltests/Dash/tst_GenericScopeView.qml+1
@@ -293,6 +293,7 @@ Item {
293 },
293 },
294 true);
294 true);
295 var tile = findChild(findChild(genericScopeView, "dashCategory"+category), "delegate"+delegate);
295 var tile = findChild(findChild(genericScopeView, "dashCategory"+category), "delegate"+delegate);
296+ waitForRendering(tile);
296 mouseClick(tile, tile.width / 2, tile.height / 2);
297 mouseClick(tile, tile.width / 2, tile.height / 2);
297 tryCompare(testCase.subPageLoader, "open", true);
298 tryCompare(testCase.subPageLoader, "open", true);
298 tryCompare(testCase.subPageLoader, "x", 0);
299 tryCompare(testCase.subPageLoader, "x", 0);
tests/qmltests/Panel/tst_IndicatorsMenu.qml+3−3
@@ -174,7 +174,7 @@ IndicatorTest {
174 // and expose the header
174 // and expose the header
175 function test_hint() {
175 function test_hint() {
176 var indicatorItem = get_indicator_item(0);
176 var indicatorItem = get_indicator_item(0);
177− var mappedPosition = root.mapFromItem(indicatorItem, indicatorItem.width/2, indicatorItem.height/2);
177+ var mappedPosition = indicatorsMenu.mapFromItem(indicatorItem, indicatorItem.width/2, indicatorItem.height/2);
178
178
179 touchPress(indicatorsMenu, mappedPosition.x, indicatorsMenu.minimizedPanelHeight / 2);
179 touchPress(indicatorsMenu, mappedPosition.x, indicatorsMenu.minimizedPanelHeight / 2);
180
180
@@ -195,7 +195,7 @@ IndicatorTest {
195 for (var i = 0; i < root.originalModelData.length; i++) {
195 for (var i = 0; i < root.originalModelData.length; i++) {
196 var indicatorItem = get_indicator_item(i);
196 var indicatorItem = get_indicator_item(i);
197
197
198− var mappedPosition = root.mapFromItem(indicatorItem, indicatorItem.width/2, indicatorItem.height/2);
198+ var mappedPosition = indicatorsMenu.mapFromItem(indicatorItem, indicatorItem.width/2, indicatorItem.height/2);
199
199
200 touchFlick(indicatorsMenu,
200 touchFlick(indicatorsMenu,
201 mappedPosition.x, mappedPosition.y,
201 mappedPosition.x, mappedPosition.y,
@@ -227,7 +227,7 @@ IndicatorTest {
227
227
228 // Get the first indicator
228 // Get the first indicator
229 var firstItem = get_indicator_item(0);
229 var firstItem = get_indicator_item(0);
230− var firstItemMappedPosition = root.mapFromItem(firstItem, firstItem.width/2, firstItem.height/2);
230+ var firstItemMappedPosition = indicatorsMenu.mapFromItem(firstItem, firstItem.width/2, firstItem.height/2);
231
231
232 // 1) Drag the mouse down to hint a bit
232 // 1) Drag the mouse down to hint a bit
233 touchFlick(indicatorsMenu,
233 touchFlick(indicatorsMenu,
tests/qmltests/Panel/tst_Panel.qml+5−10
@@ -186,11 +186,10 @@ IndicatorTest {
186 for (var i = 0; i < root.originalModelData.length; i++) {
186 for (var i = 0; i < root.originalModelData.length; i++) {
187 var indicatorItem = get_indicator_item(i);
187 var indicatorItem = get_indicator_item(i);
188
188
189− var startXPosition = root.mapFromItem(indicatorItem, indicatorItem.width / 2, 0).x;
189+ var startXPosition = panel.mapFromItem(indicatorItem, indicatorItem.width / 2, 0).x;
190− var startYPosition = root.mapFromItem(panel, 0, 0).y;
191
190
192 touchFlick(panel,
191 touchFlick(panel,
193− startXPosition, startYPosition,
192+ startXPosition, 0,
194 startXPosition, panel.height,
193 startXPosition, panel.height,
195 true /* beginTouch */, false /* endTouch */, units.gu(5), 15);
194 true /* beginTouch */, false /* endTouch */, units.gu(5), 15);
196
195
@@ -244,17 +243,13 @@ IndicatorTest {
244 // (switches between normal and fullscreen modes are animated)
243 // (switches between normal and fullscreen modes are animated)
245 tryCompareFunction(function() { return indicatorArea.y }, data.indicatorY);
244 tryCompareFunction(function() { return indicatorArea.y }, data.indicatorY);
246
245
247− var startXPosition = root.mapFromItem(panel.indicators, panel.indicators.width / 2, 0).x;
248− var startYPosition = root.mapFromItem(panel, 0, panel.height).y;
249−
250 panel.indicators.show();
246 panel.indicators.show();
251 tryCompare(panel.indicators.showAnimation, "running", false);
247 tryCompare(panel.indicators.showAnimation, "running", false);
252 tryCompare(panel.indicators, "unitProgress", 1);
248 tryCompare(panel.indicators, "unitProgress", 1);
253
249
254−
255 touchFlick(panel.indicators,
250 touchFlick(panel.indicators,
256− startXPosition, startYPosition,
251+ panel.indicators.width / 2, panel.height,
257− startXPosition, 0,
252+ panel.indicators.width / 2, 0,
258 true /* beginTouch */, false /* endTouch */, units.gu(5), 15);
253 true /* beginTouch */, false /* endTouch */, units.gu(5), 15);
259
254
260 // Indicators height should follow the drag, and therefore increase accordingly.
255 // Indicators height should follow the drag, and therefore increase accordingly.
@@ -263,7 +258,7 @@ IndicatorTest {
263 function() {return panel.indicators.height <= panel.height * 0.5},
258 function() {return panel.indicators.height <= panel.height * 0.5},
264 true);
259 true);
265
260
266− touchRelease(panel.indicators, startXPosition, 0);
261+ touchRelease(panel.indicators, panel.indicators.width / 2, 0);
267
262
268 tryCompare(panel.indicators.hideAnimation, "running", true);
263 tryCompare(panel.indicators.hideAnimation, "running", true);
269 tryCompare(panel.indicators.hideAnimation, "running", false);
264 tryCompare(panel.indicators.hideAnimation, "running", false);
tests/qmltests/Stages/tst_PhoneStage.qml+8−3
@@ -128,17 +128,20 @@ Item {
128 var startX = phoneStage.width - 2;
128 var startX = phoneStage.width - 2;
129 var startY = phoneStage.height / 2;
129 var startY = phoneStage.height / 2;
130 var endY = startY;
130 var endY = startY;
131− var endX = units.gu(2);
131+ var endX = phoneStage.width / 2;
132
132
133 touchFlick(phoneStage, startX, startY, endX, endY,
133 touchFlick(phoneStage, startX, startY, endX, endY,
134 true /* beginTouch */, true /* endTouch */, units.gu(10), 50);
134 true /* beginTouch */, true /* endTouch */, units.gu(10), 50);
135+
136+ tryCompare(spreadView, "phase", 2);
137+ waitForRendering(phoneStage);
135 }
138 }
136
139
137 function test_shortFlick() {
140 function test_shortFlick() {
138 addApps(2)
141 addApps(2)
139 var startX = phoneStage.width - units.gu(1);
142 var startX = phoneStage.width - units.gu(1);
140 var startY = phoneStage.height / 2;
143 var startY = phoneStage.height / 2;
141− var endX = phoneStage.width / 2;
144+ var endX = startX - units.gu(4);
142 var endY = startY;
145 var endY = startY;
143
146
144 var activeApp = ApplicationManager.get(0);
147 var activeApp = ApplicationManager.get(0);
@@ -164,7 +167,7 @@ Item {
164 {tag: "<position2 (non-linear)", positionMarker: "positionMarker2", linear: false, offset: -1, endPhase: 0, targetPhase: 0, newFocusedIndex: 1 },
167 {tag: "<position2 (non-linear)", positionMarker: "positionMarker2", linear: false, offset: -1, endPhase: 0, targetPhase: 0, newFocusedIndex: 1 },
165 {tag: ">position2", positionMarker: "positionMarker2", linear: true, offset: +1, endPhase: 1, targetPhase: 0, newFocusedIndex: 1 },
168 {tag: ">position2", positionMarker: "positionMarker2", linear: true, offset: +1, endPhase: 1, targetPhase: 0, newFocusedIndex: 1 },
166 {tag: "<position3", positionMarker: "positionMarker3", linear: true, offset: -1, endPhase: 1, targetPhase: 0, newFocusedIndex: 1 },
169 {tag: "<position3", positionMarker: "positionMarker3", linear: true, offset: -1, endPhase: 1, targetPhase: 0, newFocusedIndex: 1 },
167− {tag: ">position3", positionMarker: "positionMarker3", linear: true, offset: +1, endPhase: 2, targetPhase: 2, newFocusedIndex: 2 },
170+ {tag: ">position3", positionMarker: "positionMarker3", linear: true, offset: +1, endPhase: 1, targetPhase: 2, newFocusedIndex: 2 },
168 ];
171 ];
169 }
172 }
170
173
@@ -386,6 +389,8 @@ Item {
386 compare(dragArea0.enabled, false);
389 compare(dragArea0.enabled, false);
387 compare(dragArea1.enabled, false);
390 compare(dragArea1.enabled, false);
388 compare(dragArea2.enabled, false);
391 compare(dragArea2.enabled, false);
392+
393+ tryCompare(spreadView, "contentX", -spreadView.shift)
389 }
394 }
390 }
395 }
391}
396}
tests/qmltests/Stages/tst_SpreadDelegate.qml+10−7
@@ -110,7 +110,7 @@ Rectangle {
110 {tag: "swipeToClose=true closeable=true -> appWindow moves away",
110 {tag: "swipeToClose=true closeable=true -> appWindow moves away",
111 swipeToClose: true, closeable: true },
111 swipeToClose: true, closeable: true },
112
112
113− {tag: "swipeToClose=true closeable=alse -> appWindow bounces back",
113+ {tag: "swipeToClose=true closeable=false -> appWindow bounces back",
114 swipeToClose: true, closeable: false },
114 swipeToClose: true, closeable: false },
115
115
116 {tag: "swipeToClose=false -> appWindow stays put",
116 {tag: "swipeToClose=false -> appWindow stays put",
@@ -126,21 +126,24 @@ Rectangle {
126 swipeToCloseCheckbox.checked = data.swipeToClose;
126 swipeToCloseCheckbox.checked = data.swipeToClose;
127 closeableCheckbox.checked = data.closeable;
127 closeableCheckbox.checked = data.closeable;
128
128
129− var dragDistance = spreadDelegateLoader.item.height / 2;
129+ var dragDistance = spreadDelegateLoader.item.height * 0.8;
130 var touchX = spreadDelegateLoader.item.width / 2;
130 var touchX = spreadDelegateLoader.item.width / 2;
131− var fromY = spreadDelegateLoader.item.height / 2;
131+ var fromY = spreadDelegateLoader.item.height * 0.9;
132 var toY = fromY - dragDistance;
132 var toY = fromY - dragDistance;
133 touchFlick(spreadDelegateLoader.item,
133 touchFlick(spreadDelegateLoader.item,
134 touchX /* fromX */, fromY, touchX /* toX */, toY,
134 touchX /* fromX */, fromY, touchX /* toX */, toY,
135 true /* beginTouch */, false /* endTouch */, dragArea.minSpeedToClose * 1.1 /* speed */);
135 true /* beginTouch */, false /* endTouch */, dragArea.minSpeedToClose * 1.1 /* speed */);
136
136
137−
138 if (data.swipeToClose) {
137 if (data.swipeToClose) {
139 verify(appWindowWithShadow.y < 0);
138 verify(appWindowWithShadow.y < 0);
140 var threshold = findChild(spreadDelegateLoader.item, "dragArea").threshold
139 var threshold = findChild(spreadDelegateLoader.item, "dragArea").threshold
140+ if (data.closeable) {
141− // Verify that the delegate started moving exactly "threshold" after the finger movement
141+ // Verify that the delegate started moving exactly "threshold" after the finger movement
142− // and did not jump up to the finger, but lags the threshold behind
142+ // and did not jump up to the finger, but lags the threshold behind
143− compare(Math.abs(Math.abs(appWindowWithShadow.y) - dragDistance), threshold);
143+ compare(Math.abs(Math.abs(appWindowWithShadow.y) - dragDistance), threshold);
144+ } else {
145+ verify(Math.abs(Math.abs(appWindowWithShadow.y) - dragDistance) > threshold);
146+ }
144
147
145 touchRelease(spreadDelegateLoader.item, touchX, toY - units.gu(1));
148 touchRelease(spreadDelegateLoader.item, touchX, toY - units.gu(1));
146
149
tests/qmltests/tst_Shell.qml+3−2
@@ -194,6 +194,7 @@ Item {
194 killApps(ApplicationManager);
194 killApps(ApplicationManager);
195
195
196 unlockAllModemsSpy.clear()
196 unlockAllModemsSpy.clear()
197+ LightDM.Greeter.authenticate(""); // reset greeter
197
198
198 // reload our test subject to get it in a fresh state once again
199 // reload our test subject to get it in a fresh state once again
199 shellLoader.active = true;
200 shellLoader.active = true;
@@ -501,8 +502,8 @@ Item {
501 // Swipe upwards over the launcher to ensure that this icon
502 // Swipe upwards over the launcher to ensure that this icon
502 // at the bottom is not folded and faded away.
503 // at the bottom is not folded and faded away.
503 var touchStartX = launcherPanel.width / 2;
504 var touchStartX = launcherPanel.width / 2;
504− var touchStartY = launcherPanel.height / 2;
505+ var touchEndY = launcherPanel.height / 2;
505− touchFlick(launcherPanel, touchStartX, touchStartY, touchStartX, 0);
506+ touchFlick(launcherPanel, touchStartX, 0, touchStartX, touchEndY);
506 tryCompare(launcherPanel, "moving", false);
507 tryCompare(launcherPanel, "moving", false);
507
508
508 tap(appIcon, appIcon.width / 2, appIcon.height / 2);
509 tap(appIcon, appIcon.width / 2, appIcon.height / 2);
tests/qmltests/tst_ShellWithPin.qml+1
@@ -161,6 +161,7 @@ Item {
161 AccountsService.enableIndicatorsWhileLocked = true
161 AccountsService.enableIndicatorsWhileLocked = true
162 AccountsService.demoEdges = false
162 AccountsService.demoEdges = false
163 callManager.foregroundCall = null
163 callManager.foregroundCall = null
164+ LightDM.Greeter.authenticate(""); // reset greeter
164
165
165 // reload our test subject to get it in a fresh state once again
166 // reload our test subject to get it in a fresh state once again
166 shellLoader.active = true
167 shellLoader.active = true
tests/qmltests/tst_TabletShell.qml+1
@@ -149,6 +149,7 @@ Row {
149
149
150 unlockAllModemsSpy.clear()
150 unlockAllModemsSpy.clear()
151 AccountsService.demoEdges = false
151 AccountsService.demoEdges = false
152+ LightDM.Greeter.authenticate(""); // reset greeter
152
153
153 // reload our test subject to get it in a fresh state once again
154 // reload our test subject to get it in a fresh state once again
154 shellLoader.active = true
155 shellLoader.active = true
tests/utils/modules/Unity/Test/UnityTestCase.qml+11−7
@@ -221,6 +221,10 @@ TestCase {
221 // Make sure the item is rendered
221 // Make sure the item is rendered
222 waitForRendering(item);
222 waitForRendering(item);
223
223
224+ var root = fetchRootItem(item);
225+ var rootFrom = item.mapToItem(root, x, y);
226+ var rootTo = item.mapToItem(root, toX, toY);
227+
224 // Default to true for beginTouch if not present
228 // Default to true for beginTouch if not present
225 beginTouch = (beginTouch !== undefined) ? beginTouch : true
229 beginTouch = (beginTouch !== undefined) ? beginTouch : true
226
230
@@ -233,17 +237,17 @@ TestCase {
233 // Set a default iterations if not specified
237 // Set a default iterations if not specified
234 var iterations = (iterations !== undefined) ? iterations : 5
238 var iterations = (iterations !== undefined) ? iterations : 5
235
239
236− var distance = Math.sqrt(Math.pow(toX - x, 2) + Math.pow(toY - y, 2))
240+ var distance = Math.sqrt(Math.pow(rootTo.x - rootFrom.x, 2) + Math.pow(rootTo.Y - rootFrom.y, 2))
237 var totalTime = (distance / speed) * 1000 /* converting speed to pixels/ms */
241 var totalTime = (distance / speed) * 1000 /* converting speed to pixels/ms */
238
242
239 var timeStep = totalTime / iterations
243 var timeStep = totalTime / iterations
240− var diffX = (toX - x) / iterations
244+ var diffX = (rootTo.x - rootFrom.x) / iterations
241− var diffY = (toY - y) / iterations
245+ var diffY = (rootTo.y - rootFrom.y) / iterations
242 if (beginTouch) {
246 if (beginTouch) {
243 fakeDateTime.currentTimeMs += timeStep
247 fakeDateTime.currentTimeMs += timeStep
244
248
245 var event = touchEvent()
249 var event = touchEvent()
246− event.press(0 /* touchId */, x, y)
250+ event.press(0 /* touchId */, rootFrom.x, rootFrom.y)
247 event.commit()
251 event.commit()
248 }
252 }
249 for (var i = 0; i < iterations; ++i) {
253 for (var i = 0; i < iterations; ++i) {
@@ -253,19 +257,19 @@ TestCase {
253 // the point specified
257 // the point specified
254 wait(iterations / speed)
258 wait(iterations / speed)
255 var event = touchEvent()
259 var event = touchEvent()
256− event.move(0 /* touchId */, toX, toY)
260+ event.move(0 /* touchId */, rootTo.x, rootTo.y)
257 event.commit()
261 event.commit()
258 } else {
262 } else {
259 wait(iterations / speed)
263 wait(iterations / speed)
260 var event = touchEvent()
264 var event = touchEvent()
261− event.move(0 /* touchId */, x + (i + 1) * diffX, y + (i + 1) * diffY)
265+ event.move(0 /* touchId */, rootFrom.x + (i + 1) * diffX, rootFrom.y + (i + 1) * diffY)
262 event.commit()
266 event.commit()
263 }
267 }
264 }
268 }
265 if (endTouch) {
269 if (endTouch) {
266 fakeDateTime.currentTimeMs += timeStep
270 fakeDateTime.currentTimeMs += timeStep
267 var event = touchEvent()
271 var event = touchEvent()
268− event.release(0 /* touchId */, toX, toY)
272+ event.release(0 /* touchId */, rootTo.x, rootTo.y)
269 event.commit()
273 event.commit()
270 }
274 }
271 }
275 }