on xenial help sign in
merge trunk
93d1435Josh Arenson
CMakeLists.txt+1−1
@@ -57,7 +57,7 @@ find_package(Qt5DBus 5.4 REQUIRED)
57find_package(Qt5Concurrent 5.4 REQUIRED)
57find_package(Qt5Concurrent 5.4 REQUIRED)
58find_package(Qt5Sql 5.4 REQUIRED)
58find_package(Qt5Sql 5.4 REQUIRED)
59
59
60−pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=14)
60+pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=15)
61pkg_check_modules(GEONAMES REQUIRED geonames>=0.2)
61pkg_check_modules(GEONAMES REQUIRED geonames>=0.2)
62pkg_check_modules(GIO REQUIRED gio-2.0>=2.32)
62pkg_check_modules(GIO REQUIRED gio-2.0>=2.32)
63pkg_check_modules(GLIB REQUIRED glib-2.0>=2.32)
63pkg_check_modules(GLIB REQUIRED glib-2.0>=2.32)
data/com.canonical.Unity8.gschema.xml+5
@@ -27,6 +27,11 @@
27 <summary>Maximum push needed to overcome edge barrier</summary>
27 <summary>Maximum push needed to overcome edge barrier</summary>
28 <description>How much you have to push (in grid units) the mouse against an edge barrier when sensibility is 1.</description>
28 <description>How much you have to push (in grid units) the mouse against an edge barrier when sensibility is 1.</description>
29 </key>
29 </key>
30+ <key type="u" name="edge-drag-width">
31+ <default>2</default>
32+ <summary>The width of the edge drag areas</summary>
33+ <description>How big (in grid units) the edge-drag sensitive area should be.</description>
34+ </key>
30 <key type="b" name="autohide-launcher">
35 <key type="b" name="autohide-launcher">
31 <default>true</default>
36 <default>true</default>
32 <summary>Autohide the launcher</summary>
37 <summary>Autohide the launcher</summary>
debian/bileto_pre_release_hooknew file+5
@@ -0,0 +1,5 @@
1+#!/bin/sh
2+
3+set -eux
4+
5+sh ./po/update-unity-pot
debian/changelog+56
@@ -1,3 +1,59 @@
1+unity8 (8.12+16.04.20160421.1-0ubuntu1) xenial; urgency=medium
2+
3+ [ Daniel d'Andrada ]
4+ * Refactor keymap switching code
5+ * Surface-based window management
6+ * Use Item.grabToImage() instead of qtmir's ApplicationScreenshot
7+ provider
8+
9+ [ Michael Zanetti ]
10+ * Fixes for programmatically closing Applications
11+
12+ [ Robert Bruce Park ]
13+ * Use new bileto_pre_release_hook
14+
15+ -- Gerry Boland <ci-train-bot@canonical.com> Thu, 21 Apr 2016 13:48:02 +0000
16+
17+unity8 (8.12+16.04.20160414.1-0ubuntu1) xenial; urgency=medium
18+
19+ [ Michael Terry ]
20+ * Make sure that usageMode is set on startup, fixing a problem with
21+ the tutorial not noticing that it is running on a desktop. (LP:
22+ #1564351)
23+
24+ [ Michael Zanetti ]
25+ * make the edge drag area width configurable (LP: #1559512)
26+
27+ -- Michael Zanetti <michael.zanetti@canonical.com> Thu, 14 Apr 2016 21:20:28 +0000
28+
29+unity8 (8.12+16.04.20160401-0ubuntu1) xenial; urgency=medium
30+
31+ * Add missing Testsuite header
32+ * Skip the failing test until we have a working solution for bug
33+ #1564571 (LP: #1564571)
34+
35+ -- Michał Sawicz <michal.sawicz@canonical.com> Fri, 01 Apr 2016 08:32:16 +0000
36+
37+unity8 (8.12+16.04.20160330-0ubuntu1) xenial; urgency=medium
38+
39+ [ Albert Astals Cid ]
40+ * Use tutorialLeftLoader instead of tutorialLeft
41+
42+ [ CI Train Bot ]
43+ * Update translation template
44+
45+ [ Lukáš Tinkl ]
46+ * Fix the last chance popup colors/theme
47+
48+ [ Michael Terry ]
49+ * Adjust text for desktop right edge tutorial to be accurate. (LP:
50+ #1563103)
51+ * Fix OOBE wizard not setting your name. (LP: #1562872)
52+ * Fix showing "Retry" in password prompt when turning on screen in
53+ tablet mode.
54+
55+ -- Michał Sawicz <michal.sawicz@canonical.com> Wed, 30 Mar 2016 07:46:51 +0000
56+
1unity8 (8.12+16.04.20160323.2-0ubuntu1) xenial; urgency=medium
57unity8 (8.12+16.04.20160323.2-0ubuntu1) xenial; urgency=medium
2
58
3 [ Michael Terry ]
59 [ Michael Terry ]
debian/control+4−3
@@ -31,7 +31,7 @@ Build-Depends: cmake,
31 libqt5xmlpatterns5-dev,
31 libqt5xmlpatterns5-dev,
32 libsystemsettings-dev,
32 libsystemsettings-dev,
33 libudev-dev,
33 libudev-dev,
34− libunity-api-dev (>= 7.108),
34+ libunity-api-dev (>= 7.110),
35 libusermetricsoutput1-dev,
35 libusermetricsoutput1-dev,
36# Need those X11 libs touch emulation from mouse events in manual QML tests on a X11 desktop
36# Need those X11 libs touch emulation from mouse events in manual QML tests on a X11 desktop
37 libx11-dev[!armhf],
37 libx11-dev[!armhf],
@@ -67,6 +67,7 @@ Homepage: http://launchpad.net/unity
67# and sync up the code again.
67# and sync up the code again.
68Vcs-Bzr: https://code.launchpad.net/unity8
68Vcs-Bzr: https://code.launchpad.net/unity8
69Vcs-Browser: https://bazaar.launchpad.net/~unity-team/unity8/trunk
69Vcs-Browser: https://bazaar.launchpad.net/~unity-team/unity8/trunk
70+XS-Testsuite: autopkgtest
70X-Ubuntu-Use-Langpack: yes
71X-Ubuntu-Use-Langpack: yes
71
72
72Package: indicators-client
73Package: indicators-client
@@ -144,7 +145,7 @@ Depends: qml-module-qtquick-layouts,
144 qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 1.3.1845) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 1.3.1845),
145 qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 1.3.1845) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 1.3.1845),
145 qtdeclarative5-unity-notifications-plugin (>= 0.1.2) | unity-notifications-impl,
146 qtdeclarative5-unity-notifications-plugin (>= 0.1.2) | unity-notifications-impl,
146 ubuntu-thumbnailer-impl-0,
147 ubuntu-thumbnailer-impl-0,
147− unity-application-impl-14,
148+ unity-application-impl-15,
148 unity-notifications-impl-3,
149 unity-notifications-impl-3,
149 unity-plugin-scopes | unity-scopes-impl,
150 unity-plugin-scopes | unity-scopes-impl,
150 unity-scopes-impl-11,
151 unity-scopes-impl-11,
@@ -190,7 +191,7 @@ Pre-Depends: ${misc:Pre-Depends},
190Depends: ${misc:Depends},
191Depends: ${misc:Depends},
191 ${shlibs:Depends},
192 ${shlibs:Depends},
192Provides: unity-application-impl,
193Provides: unity-application-impl,
193− unity-application-impl-14,
194+ unity-application-impl-15,
194Replaces: unity8-autopilot (<< 8.02+15.04.20150422-0ubuntu1)
195Replaces: unity8-autopilot (<< 8.02+15.04.20150422-0ubuntu1)
195Description: Fake environment for running Unity 8 shell
196Description: Fake environment for running Unity 8 shell
196 Provides fake implementations of some QML modules used by Unity 8 shell
197 Provides fake implementations of some QML modules used by Unity 8 shell
debian/rules−8
@@ -36,11 +36,3 @@ override_dh_makeshlibs:
36# libMockLightDM-qml.so links against liblightdm-qt5-3.so which doesn't exist
36# libMockLightDM-qml.so links against liblightdm-qt5-3.so which doesn't exist
37override_dh_shlibdeps:
37override_dh_shlibdeps:
38 dh_shlibdeps -XlibMockLightDM-qml.so
38 dh_shlibdeps -XlibMockLightDM-qml.so
39−
40−override_dh_auto_clean:
41− dh_auto_clean
42− # only run under "CI Train"
43− if [ -n "$(SILONAME)" -a -x /usr/bin/bzr ]; then \
44− ./po/update-unity-pot; \
45− bzr commit --message "Update translation template" po/unity8.pot; \
46− fi
debian/unity8-private.install+1
@@ -14,6 +14,7 @@ usr/lib/*/unity8/qml/Ubuntu
14usr/lib/*/unity8/qml/Unity
14usr/lib/*/unity8/qml/Unity
15usr/lib/*/unity8/qml/UInput
15usr/lib/*/unity8/qml/UInput
16usr/lib/*/unity8/qml/Utils
16usr/lib/*/unity8/qml/Utils
17+usr/lib/*/unity8/qml/WindowManager
17usr/lib/*/unity8/qml/Wizard
18usr/lib/*/unity8/qml/Wizard
18usr/share/accountsservice/interfaces
19usr/share/accountsservice/interfaces
19usr/share/dbus-1/interfaces
20usr/share/dbus-1/interfaces
plugins/AccountsService/AccountsServiceDBusAdaptor.cpp+12−2
@@ -57,8 +57,18 @@ QDBusPendingCall AccountsServiceDBusAdaptor::setUserPropertyAsync(const QString
57{
57{
58 QDBusInterface *iface = getUserInterface(user);
58 QDBusInterface *iface = getUserInterface(user);
59 if (iface != nullptr && iface->isValid()) {
59 if (iface != nullptr && iface->isValid()) {
60+ if (interface == QStringLiteral("org.freedesktop.Accounts.User")) {
61+ // Standard AccountsService properties use special set methods.
62+ // It will not let you use the usual DBus property setters.
63+ QDBusInterface accountsIface(iface->service(),
64+ iface->path(),
65+ interface,
66+ iface->connection());
67+ return accountsIface.asyncCall(QStringLiteral("Set") + property, value);
68+ } else {
60− // The value needs to be carefully wrapped
69+ // The value needs to be carefully wrapped
61− return iface->asyncCall(QStringLiteral("Set"), interface, property, QVariant::fromValue(QDBusVariant(value)));
70+ return iface->asyncCall(QStringLiteral("Set"), interface, property, QVariant::fromValue(QDBusVariant(value)));
71+ }
62 }
72 }
63 return QDBusPendingCall::fromCompletedCall(QDBusMessage::createError(QDBusError::Other, QStringLiteral("Invalid Interface")));
73 return QDBusPendingCall::fromCompletedCall(QDBusMessage::createError(QDBusError::Other, QStringLiteral("Invalid Interface")));
64}
74}
plugins/CMakeLists.txt+1
@@ -25,4 +25,5 @@ add_subdirectory(Ubuntu)
25add_subdirectory(UInput)
25add_subdirectory(UInput)
26add_subdirectory(Unity)
26add_subdirectory(Unity)
27add_subdirectory(Utils)
27add_subdirectory(Utils)
28+add_subdirectory(WindowManager)
28add_subdirectory(Wizard)
29add_subdirectory(Wizard)
plugins/WindowManager/CMakeLists.txtnew file+13
@@ -0,0 +1,13 @@
1+set(WINDOWMANAGER_SRC
2+ TopLevelSurfaceList.cpp
3+ WindowManagerPlugin.cpp
4+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
5+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/Mir.h
6+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceInterface.h
7+ )
8+
9+add_library(windowmanager-qml SHARED ${WINDOWMANAGER_SRC})
10+
11+qt5_use_modules(windowmanager-qml Qml Quick Gui)
12+
13+add_unity8_plugin(WindowManager 0.1 WindowManager TARGETS windowmanager-qml)
plugins/WindowManager/TopLevelSurfaceList.cppnew file+486
@@ -0,0 +1,486 @@
1+/*
2+ * Copyright (C) 2016 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 "TopLevelSurfaceList.h"
18+
19+// unity-api
20+#include <unity/shell/application/ApplicationInfoInterface.h>
21+#include <unity/shell/application/MirSurfaceInterface.h>
22+#include <unity/shell/application/MirSurfaceListInterface.h>
23+
24+#include <QMetaObject>
25+
26+Q_LOGGING_CATEGORY(UNITY_TOPSURFACELIST, "unity.topsurfacelist", QtDebugMsg)
27+
28+#define DEBUG_MSG qCDebug(UNITY_TOPSURFACELIST).nospace().noquote() << __func__
29+
30+using namespace unity::shell::application;
31+
32+TopLevelSurfaceList::TopLevelSurfaceList(QObject *parent) :
33+ QAbstractListModel(parent)
34+{
35+ DEBUG_MSG << "()";
36+}
37+
38+TopLevelSurfaceList::~TopLevelSurfaceList()
39+{
40+ DEBUG_MSG << "()";
41+}
42+
43+int TopLevelSurfaceList::rowCount(const QModelIndex &parent) const
44+{
45+ return !parent.isValid() ? m_surfaceList.size() : 0;
46+}
47+
48+QVariant TopLevelSurfaceList::data(const QModelIndex& index, int role) const
49+{
50+ if (index.row() < 0 || index.row() >= m_surfaceList.size())
51+ return QVariant();
52+
53+ if (role == SurfaceRole) {
54+ MirSurfaceInterface *surface = m_surfaceList.at(index.row()).surface;
55+ return QVariant::fromValue(surface);
56+ } else if (role == ApplicationRole) {
57+ return QVariant::fromValue(m_surfaceList.at(index.row()).application);
58+ } else if (role == IdRole) {
59+ return QVariant::fromValue(m_surfaceList.at(index.row()).id);
60+ } else {
61+ return QVariant();
62+ }
63+}
64+
65+void TopLevelSurfaceList::raise(MirSurfaceInterface *surface)
66+{
67+ if (!surface)
68+ return;
69+
70+ DEBUG_MSG << "(MirSurface[" << (void*)surface << "])";
71+
72+ int i = indexOf(surface);
73+ if (i != -1) {
74+ raiseId(m_surfaceList.at(i).id);
75+ }
76+}
77+
78+void TopLevelSurfaceList::appendPlaceholder(ApplicationInfoInterface *application)
79+{
80+ DEBUG_MSG << "(" << application->appId() << ")";
81+
82+ appendSurfaceHelper(nullptr, application);
83+}
84+
85+void TopLevelSurfaceList::appendSurface(MirSurfaceInterface *surface, ApplicationInfoInterface *application)
86+{
87+ Q_ASSERT(surface != nullptr);
88+
89+ bool filledPlaceholder = false;
90+ for (int i = 0; i < m_surfaceList.count() && !filledPlaceholder; ++i) {
91+ ModelEntry &entry = m_surfaceList[i];
92+ if (entry.application == application && entry.surface == nullptr) {
93+ entry.surface = surface;
94+ connectSurface(surface);
95+ DEBUG_MSG << " appId=" << application->appId() << " surface=" << surface
96+ << ", filling out placeholder. after: " << toString();
97+ Q_EMIT dataChanged(index(i) /* topLeft */, index(i) /* bottomRight */, QVector<int>() << SurfaceRole);
98+ filledPlaceholder = true;
99+ }
100+ }
101+
102+ if (!filledPlaceholder) {
103+ DEBUG_MSG << " appId=" << application->appId() << " surface=" << surface << ", adding new row";
104+ appendSurfaceHelper(surface, application);
105+ }
106+}
107+
108+void TopLevelSurfaceList::appendSurfaceHelper(MirSurfaceInterface *surface, ApplicationInfoInterface *application)
109+{
110+ if (m_modelState == IdleState) {
111+ m_modelState = InsertingState;
112+ beginInsertRows(QModelIndex(), m_surfaceList.size() /*first*/, m_surfaceList.size() /*last*/);
113+ } else {
114+ Q_ASSERT(m_modelState == ResettingState);
115+ // No point in signaling anything if we're resetting the whole model
116+ }
117+
118+ int id = generateId();
119+ m_surfaceList.append(ModelEntry(surface, application, id));
120+ if (surface) {
121+ connectSurface(surface);
122+ }
123+
124+ if (m_modelState == InsertingState) {
125+ endInsertRows();
126+ Q_EMIT countChanged();
127+ Q_EMIT listChanged();
128+ m_modelState = IdleState;
129+ }
130+
131+ DEBUG_MSG << " after " << toString();
132+}
133+
134+void TopLevelSurfaceList::connectSurface(MirSurfaceInterface *surface)
135+{
136+ connect(surface, &MirSurfaceInterface::focusedChanged, this, [this, surface](bool focused){
137+ if (focused) {
138+ this->raise(surface);
139+ }
140+ });
141+ connect(surface, &MirSurfaceInterface::liveChanged, this, [this, surface](bool live){
142+ if (!live) {
143+ onSurfaceDied(surface);
144+ }
145+ });
146+ connect(surface, &QObject::destroyed, this, [this, surface](){ this->onSurfaceDestroyed(surface); });
147+}
148+
149+void TopLevelSurfaceList::onSurfaceDied(MirSurfaceInterface *surface)
150+{
151+ int i = indexOf(surface);
152+ if (i == -1) {
153+ return;
154+ }
155+
156+ auto application = m_surfaceList[i].application;
157+
158+ // can't be starting if it already has a surface
159+ Q_ASSERT(application->state() != ApplicationInfoInterface::Starting);
160+
161+ if (application->state() == ApplicationInfoInterface::Running) {
162+ m_surfaceList[i].removeOnceSurfaceDestroyed = true;
163+ } else {
164+ // assume it got killed by the out-of-memory daemon.
165+ //
166+ // So leave entry in the model and only remove its surface, so shell can display a screenshot
167+ // in its place.
168+ m_surfaceList[i].removeOnceSurfaceDestroyed = false;
169+ }
170+}
171+
172+void TopLevelSurfaceList::onSurfaceDestroyed(MirSurfaceInterface *surface)
173+{
174+ int i = indexOf(surface);
175+ if (i == -1) {
176+ return;
177+ }
178+
179+ if (m_surfaceList[i].removeOnceSurfaceDestroyed) {
180+ removeAt(i);
181+ } else {
182+ m_surfaceList[i].surface = nullptr;
183+ Q_EMIT dataChanged(index(i) /* topLeft */, index(i) /* bottomRight */, QVector<int>() << SurfaceRole);
184+ DEBUG_MSG << " Removed surface from entry. After: " << toString();
185+ }
186+}
187+
188+void TopLevelSurfaceList::removeAt(int index)
189+{
190+ if (m_modelState == IdleState) {
191+ beginRemoveRows(QModelIndex(), index, index);
192+ m_modelState = RemovingState;
193+ } else {
194+ Q_ASSERT(m_modelState == ResettingState);
195+ // No point in signaling anything if we're resetting the whole model
196+ }
197+
198+ m_surfaceList.removeAt(index);
199+
200+ if (m_modelState == RemovingState) {
201+ endRemoveRows();
202+ Q_EMIT countChanged();
203+ Q_EMIT listChanged();
204+ m_modelState = IdleState;
205+ }
206+
207+ DEBUG_MSG << " after " << toString();
208+}
209+
210+int TopLevelSurfaceList::indexOf(MirSurfaceInterface *surface)
211+{
212+ for (int i = 0; i < m_surfaceList.count(); ++i) {
213+ if (m_surfaceList.at(i).surface == surface) {
214+ return i;
215+ }
216+ }
217+ return -1;
218+}
219+
220+void TopLevelSurfaceList::move(int from, int to)
221+{
222+ if (from == to) return;
223+ DEBUG_MSG << " from=" << from << " to=" << to;
224+
225+ if (from >= 0 && from < m_surfaceList.size() && to >= 0 && to < m_surfaceList.size()) {
226+ QModelIndex parent;
227+ /* When moving an item down, the destination index needs to be incremented
228+ by one, as explained in the documentation:
229+ http://qt-project.org/doc/qt-5.0/qtcore/qabstractitemmodel.html#beginMoveRows */
230+
231+ Q_ASSERT(m_modelState == IdleState);
232+ m_modelState = MovingState;
233+
234+ beginMoveRows(parent, from, from, parent, to + (to > from ? 1 : 0));
235+ m_surfaceList.move(from, to);
236+ endMoveRows();
237+ Q_EMIT listChanged();
238+
239+ m_modelState = IdleState;
240+
241+ DEBUG_MSG << " after " << toString();
242+ }
243+}
244+
245+MirSurfaceInterface *TopLevelSurfaceList::surfaceAt(int index) const
246+{
247+ if (index >=0 && index < m_surfaceList.count()) {
248+ return m_surfaceList[index].surface;
249+ } else {
250+ return nullptr;
251+ }
252+}
253+
254+ApplicationInfoInterface *TopLevelSurfaceList::applicationAt(int index) const
255+{
256+ if (index >=0 && index < m_surfaceList.count()) {
257+ return m_surfaceList[index].application;
258+ } else {
259+ return nullptr;
260+ }
261+}
262+
263+int TopLevelSurfaceList::idAt(int index) const
264+{
265+ if (index >=0 && index < m_surfaceList.count()) {
266+ return m_surfaceList[index].id;
267+ } else {
268+ return 0;
269+ }
270+}
271+
272+int TopLevelSurfaceList::indexForId(int id) const
273+{
274+ for (int i = 0; i < m_surfaceList.count(); ++i) {
275+ if (m_surfaceList[i].id == id) {
276+ return i;
277+ }
278+ }
279+ return -1;
280+}
281+
282+void TopLevelSurfaceList::doRaiseId(int id)
283+{
284+ int fromIndex = indexForId(id);
285+ if (fromIndex != -1) {
286+ move(fromIndex, 0 /* toIndex */);
287+ }
288+}
289+
290+void TopLevelSurfaceList::raiseId(int id)
291+{
292+ if (m_modelState == IdleState) {
293+ DEBUG_MSG << "(id=" << id << ") - do it now.";
294+ doRaiseId(id);
295+ } else {
296+ DEBUG_MSG << "(id=" << id << ") - Model busy (modelState=" << m_modelState << "). Try again in the next event loop.";
297+ // The model has just signalled some change. If we have a Repeater responding to this update, it will get nuts
298+ // if we perform yet another model change straight away.
299+ //
300+ // A bad sympton of this problem is a Repeater.itemAt(index) call returning null event though Repeater.count says
301+ // the index is definitely within bounds.
302+ QMetaObject::invokeMethod(this, "raiseId", Qt::QueuedConnection, Q_ARG(int, id));
303+ }
304+}
305+
306+int TopLevelSurfaceList::generateId()
307+{
308+ int id = m_nextId;
309+ m_nextId = nextFreeId(m_nextId + 1);
310+ Q_EMIT nextIdChanged();
311+ return id;
312+}
313+
314+int TopLevelSurfaceList::nextFreeId(int candidateId)
315+{
316+ if (candidateId > m_maxId) {
317+ return nextFreeId(1);
318+ } else {
319+ if (indexForId(candidateId) == -1) {
320+ // it's indeed free
321+ return candidateId;
322+ } else {
323+ return nextFreeId(candidateId + 1);
324+ }
325+ }
326+}
327+
328+QString TopLevelSurfaceList::toString()
329+{
330+ QString str;
331+ for (int i = 0; i < m_surfaceList.count(); ++i) {
332+ auto item = m_surfaceList.at(i);
333+
334+ QString itemStr = QString("(index=%1,appId=%2,surface=0x%3,id=%4)")
335+ .arg(i)
336+ .arg(item.application->appId())
337+ .arg((qintptr)item.surface, 0, 16)
338+ .arg(item.id);
339+
340+ if (i > 0) {
341+ str.append(",");
342+ }
343+ str.append(itemStr);
344+ }
345+ return str;
346+}
347+
348+void TopLevelSurfaceList::addApplication(ApplicationInfoInterface *application)
349+{
350+ DEBUG_MSG << "(" << application->appId() << ")";
351+ Q_ASSERT(!m_applications.contains(application));
352+ m_applications.append(application);
353+
354+ MirSurfaceListInterface *surfaceList = application->surfaceList();
355+
356+ if (application->state() != ApplicationInfoInterface::Stopped) {
357+ if (surfaceList->count() == 0) {
358+ appendPlaceholder(application);
359+ } else {
360+ for (int i = 0; i < surfaceList->count(); ++i) {
361+ appendSurface(surfaceList->get(i), application);
362+ }
363+ }
364+ }
365+
366+ connect(surfaceList, &QAbstractItemModel::rowsInserted, this,
367+ [this, application, surfaceList](const QModelIndex & /*parent*/, int first, int last)
368+ {
369+ for (int i = last; i >= first; --i) {
370+ this->appendSurface(surfaceList->get(i), application);
371+ }
372+ });
373+}
374+
375+void TopLevelSurfaceList::removeApplication(ApplicationInfoInterface *application)
376+{
377+ DEBUG_MSG << "(" << application->appId() << ")";
378+ Q_ASSERT(m_applications.contains(application));
379+
380+ MirSurfaceListInterface *surfaceList = application->surfaceList();
381+
382+ disconnect(surfaceList, 0, this, 0);
383+
384+ Q_ASSERT(m_modelState == IdleState);
385+ m_modelState = RemovingState;
386+
387+ int i = 0;
388+ while (i < m_surfaceList.count()) {
389+ if (m_surfaceList.at(i).application == application) {
390+ beginRemoveRows(QModelIndex(), i, i);
391+ m_surfaceList.removeAt(i);
392+ endRemoveRows();
393+ Q_EMIT countChanged();
394+ Q_EMIT listChanged();
395+ } else {
396+ ++i;
397+ }
398+ }
399+
400+ m_modelState = IdleState;
401+
402+ DEBUG_MSG << " after " << toString();
403+
404+ m_applications.removeAll(application);
405+}
406+
407+QAbstractListModel *TopLevelSurfaceList::applicationsModel() const
408+{
409+ return m_applicationsModel;
410+}
411+
412+void TopLevelSurfaceList::setApplicationsModel(QAbstractListModel* value)
413+{
414+ if (m_applicationsModel == value) {
415+ return;
416+ }
417+
418+ DEBUG_MSG << "(" << value << ")";
419+
420+ Q_ASSERT(m_modelState == IdleState);
421+ m_modelState = ResettingState;
422+
423+ beginResetModel();
424+
425+ if (m_applicationsModel) {
426+ m_surfaceList.clear();
427+ m_applications.clear();
428+ disconnect(m_applicationsModel, 0, this, 0);
429+ }
430+
431+ m_applicationsModel = value;
432+
433+ if (m_applicationsModel) {
434+ findApplicationRole();
435+
436+ connect(m_applicationsModel, &QAbstractItemModel::rowsInserted,
437+ this, [this](const QModelIndex &/*parent*/, int first, int last) {
438+ for (int i = first; i <= last; ++i) {
439+ auto application = getApplicationFromModelAt(i);
440+ addApplication(application);
441+ }
442+ });
443+
444+ connect(m_applicationsModel, &QAbstractItemModel::rowsAboutToBeRemoved,
445+ this, [this](const QModelIndex &/*parent*/, int first, int last) {
446+ for (int i = first; i <= last; ++i) {
447+ auto application = getApplicationFromModelAt(i);
448+ removeApplication(application);
449+ }
450+ });
451+
452+ for (int i = 0; i < m_applicationsModel->rowCount(); ++i) {
453+ auto application = getApplicationFromModelAt(i);
454+ addApplication(application);
455+ }
456+ }
457+
458+ endResetModel();
459+ m_modelState = IdleState;
460+}
461+
462+ApplicationInfoInterface *TopLevelSurfaceList::getApplicationFromModelAt(int index)
463+{
464+ QModelIndex modelIndex = m_applicationsModel->index(index);
465+
466+ QVariant variant = m_applicationsModel->data(modelIndex, m_applicationRole);
467+
468+ // variant.value<ApplicationInfoInterface*>() returns null for some reason.
469+ return static_cast<ApplicationInfoInterface*>(variant.value<QObject*>());
470+}
471+
472+void TopLevelSurfaceList::findApplicationRole()
473+{
474+ QHash<int, QByteArray> namesHash = m_applicationsModel->roleNames();
475+
476+ m_applicationRole = -1;
477+ for (auto i = namesHash.begin(); i != namesHash.end() && m_applicationRole == -1; ++i) {
478+ if (i.value() == "application") {
479+ m_applicationRole = i.key();
480+ }
481+ }
482+
483+ if (m_applicationRole == -1) {
484+ qFatal("TopLevelSurfaceList: applicationsModel must have a \"application\" role.");
485+ }
486+}
plugins/WindowManager/TopLevelSurfaceList.hnew file+223
@@ -0,0 +1,223 @@
1+/*
2+ * Copyright (C) 2016 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 TOPLEVELSURFACELIST_H
18+#define TOPLEVELSURFACELIST_H
19+
20+#include <QAbstractListModel>
21+#include <QList>
22+#include <QLoggingCategory>
23+
24+Q_DECLARE_LOGGING_CATEGORY(UNITY_TOPSURFACELIST)
25+
26+namespace unity {
27+ namespace shell {
28+ namespace application {
29+ class ApplicationInfoInterface;
30+ class MirSurfaceInterface;
31+ }
32+ }
33+}
34+
35+/**
36+ * @brief A model of top-level surfaces
37+ *
38+ * It's an abstraction of top-level application windows.
39+ *
40+ * When an entry first appears, it normaly doesn't have a surface yet, meaning that the application is
41+ * still starting up. A shell should then display a splash screen or saved screenshot of the application
42+ * until its surface comes up.
43+ *
44+ * As applications can have multiple surfaces and you can also have entries without surfaces at all,
45+ * the only way to unambiguously refer to an entry in this model is through its id.
46+ */
47+class TopLevelSurfaceList : public QAbstractListModel
48+{
49+
50+ Q_OBJECT
51+
52+ /**
53+ * @brief A list model of applications.
54+ *
55+ * It's expected to have a role called "application" which returns a ApplicationInfoInterface
56+ */
57+ Q_PROPERTY(QAbstractListModel* applicationsModel READ applicationsModel
58+ WRITE setApplicationsModel
59+ NOTIFY applicationsModelChanged)
60+
61+ /**
62+ * @brief Number of top-level surfaces in this model
63+ *
64+ * This is the same as rowCount, added in order to keep compatibility with QML ListModels.
65+ */
66+ Q_PROPERTY(int count READ rowCount NOTIFY countChanged)
67+
68+ /**
69+ The id to be used on the next entry created
70+ Useful for tests
71+ */
72+ Q_PROPERTY(int nextId READ nextId NOTIFY nextIdChanged)
73+public:
74+
75+ /**
76+ * @brief The Roles supported by the model
77+ *
78+ * SurfaceRole - A MirSurfaceInterface. It will be null if the application is still starting up
79+ * ApplicationRole - An ApplicationInfoInterface
80+ * IdRole - A unique identifier for this entry. Useful to unambiguosly track elements as they move around in the list
81+ */
82+ enum Roles {
83+ SurfaceRole = Qt::UserRole,
84+ ApplicationRole = Qt::UserRole + 1,
85+ IdRole = Qt::UserRole + 2,
86+ };
87+
88+ explicit TopLevelSurfaceList(QObject *parent = nullptr);
89+ virtual ~TopLevelSurfaceList();
90+
91+ // QAbstractItemModel methods
92+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
93+ QVariant data(const QModelIndex& index, int role) const override;
94+ QHash<int, QByteArray> roleNames() const override {
95+ QHash<int, QByteArray> roleNames { {SurfaceRole, "surface"},
96+ {ApplicationRole, "application"},
97+ {IdRole, "id"} };
98+ return roleNames;
99+ }
100+
101+ int nextId() const { return m_nextId; }
102+
103+ QAbstractListModel *applicationsModel() const;
104+ void setApplicationsModel(QAbstractListModel*);
105+
106+public Q_SLOTS:
107+ /**
108+ * @brief Returns the surface at the given index
109+ *
110+ * It will be a nullptr if the application is still starting up and thus hasn't yet created
111+ * and drawn into a surface.
112+ */
113+ unity::shell::application::MirSurfaceInterface *surfaceAt(int index) const;
114+
115+ /**
116+ * @brief Returns the application at the given index
117+ */
118+ unity::shell::application::ApplicationInfoInterface *applicationAt(int index) const;
119+
120+ /**
121+ * @brief Returns the unique id of the element at the given index
122+ */
123+ int idAt(int index) const;
124+
125+ /**
126+ * @brief Returns the index where the row with the given id is located
127+ *
128+ * Returns -1 if there's no row with the given id.
129+ */
130+ int indexForId(int id) const;
131+
132+ /**
133+ * @brief Raises the row with the given id to index 0
134+ */
135+ void raiseId(int id);
136+
137+ void doRaiseId(int id);
138+
139+Q_SIGNALS:
140+ void countChanged();
141+
142+ /**
143+ * @brief Emitted when the list changes
144+ *
145+ * Emitted when model gains an element, loses an element or when elements exchange positions.
146+ */
147+ void listChanged();
148+
149+ void nextIdChanged();
150+
151+ void applicationsModelChanged();
152+
153+private:
154+ void addApplication(unity::shell::application::ApplicationInfoInterface *application);
155+ void removeApplication(unity::shell::application::ApplicationInfoInterface *application);
156+
157+ int indexOf(unity::shell::application::MirSurfaceInterface *surface);
158+ void raise(unity::shell::application::MirSurfaceInterface *surface);
159+ void move(int from, int to);
160+ void appendSurfaceHelper(unity::shell::application::MirSurfaceInterface *surface,
161+ unity::shell::application::ApplicationInfoInterface *application);
162+ void connectSurface(unity::shell::application::MirSurfaceInterface *surface);
163+ int generateId();
164+ int nextFreeId(int candidateId);
165+ QString toString();
166+ void onSurfaceDestroyed(unity::shell::application::MirSurfaceInterface *surface);
167+ void onSurfaceDied(unity::shell::application::MirSurfaceInterface *surface);
168+ void removeAt(int index);
169+ void findApplicationRole();
170+
171+ unity::shell::application::ApplicationInfoInterface *getApplicationFromModelAt(int index);
172+
173+ /*
174+ Placeholder for a future surface from a starting or running application.
175+ Enables shell to give immediate feedback to the user by showing, eg,
176+ a splash screen.
177+
178+ It's a model row containing a null surface and the given application.
179+ */
180+ void appendPlaceholder(unity::shell::application::ApplicationInfoInterface *application);
181+
182+ /*
183+ Adds a model row with the given surface and application
184+
185+ Alternatively, if a placeholder exists for the given application it's
186+ filled with the given surface instead.
187+ */
188+ void appendSurface(unity::shell::application::MirSurfaceInterface *surface,
189+ unity::shell::application::ApplicationInfoInterface *application);
190+
191+ struct ModelEntry {
192+ ModelEntry(unity::shell::application::MirSurfaceInterface *surface, unity::shell::application::ApplicationInfoInterface *application, int id)
193+ : surface(surface), application(application), id(id) {}
194+ unity::shell::application::MirSurfaceInterface *surface;
195+ unity::shell::application::ApplicationInfoInterface *application;
196+ int id;
197+ bool removeOnceSurfaceDestroyed{false};
198+ };
199+
200+ QList<ModelEntry> m_surfaceList;
201+ int m_nextId{1};
202+ static const int m_maxId{1000000};
203+
204+ // applications that are being monitored
205+ QList<unity::shell::application::ApplicationInfoInterface *> m_applications;
206+
207+ QAbstractListModel* m_applicationsModel{nullptr};
208+ int m_applicationRole{-1};
209+
210+ enum ModelState {
211+ IdleState,
212+ InsertingState,
213+ RemovingState,
214+ MovingState,
215+ ResettingState
216+ };
217+ ModelState m_modelState{IdleState};
218+};
219+
220+Q_DECLARE_METATYPE(TopLevelSurfaceList*)
221+Q_DECLARE_METATYPE(QAbstractListModel*)
222+
223+#endif // TOPLEVELSURFACELIST_H
plugins/WindowManager/WindowManagerPlugin.cppnew file+28
@@ -0,0 +1,28 @@
1+/*
2+ * Copyright (C) 2016 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 "WindowManagerPlugin.h"
18+
19+#include "TopLevelSurfaceList.h"
20+
21+#include <QtQml>
22+
23+void WindowManagerPlugin::registerTypes(const char *uri)
24+{
25+ qmlRegisterType<TopLevelSurfaceList>(uri, 0, 1, "TopLevelSurfaceList");
26+
27+ qRegisterMetaType<QAbstractListModel*>("QAbstractListModel*");
28+}
tests/mocks/Unity/Application/SessionManager.h → plugins/WindowManager/WindowManagerPlugin.hrenamed+10−22
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2014 Canonical, Ltd.
2+ * Copyright (C) 2016 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -14,31 +14,19 @@
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
15 */
16
16
17−#ifndef SESSIONMANAGER_H
17+#ifndef WINDOWMANAGER_PLUGIN_H
18−#define SESSIONMANAGER_H
18+#define WINDOWMANAGER_PLUGIN_H
19
19
20−#include <QObject>
20+#include <QtQml/QQmlEngine>
21+#include <QtQml/QQmlExtensionPlugin>
21
22
22−class Session;
23+class WindowManagerPlugin : public QQmlExtensionPlugin
23−
24−class SessionManager : public QObject
25{
24{
26 Q_OBJECT
25 Q_OBJECT
27−public:
26+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
28− explicit SessionManager(QObject *parent = 0);
29−
30− static SessionManager *singleton();
31−
32− Q_INVOKABLE Session* createSession(const QString& name, const QUrl& screenshot);
33
27
34− void registerSession(Session *session);
28+public:
35−
29+ void registerTypes(const char *uri) override;
36−Q_SIGNALS:
37− void sessionStarting(Session *session);
38− void sessionStopping(Session *session);
39−
40−private:
41− static SessionManager *the_session_manager;
42};
30};
43
31
44−#endif // SESSIONMANAGER_H
32+#endif // WINDOWMANAGER_PLUGIN_H
plugins/WindowManager/qmldirnew file+2
@@ -0,0 +1,2 @@
1+module WindowManager
2+plugin windowmanager-qml
po/aa.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2016-02-12 10:18+0000\n"
11"PO-Revision-Date: 2016-02-12 10:18+0000\n"
12"Last-Translator: Charif AYFARAH <ayfarah@ymail.com>\n"
12"Last-Translator: Charif AYFARAH <ayfarah@ymail.com>\n"
13"Language-Team: Afar <aa@li.org>\n"
13"Language-Team: Afar <aa@li.org>\n"
@@ -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: 2016-03-24 06:07+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:01+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/am.po+12−18
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2016-03-24 19:07+0000\n"
11"PO-Revision-Date: 2016-03-24 19:07+0000\n"
12"Last-Translator: samson <Unknown>\n"
12"Last-Translator: samson <Unknown>\n"
13"Language-Team: Amharic <am@li.org>\n"
13"Language-Team: Amharic <am@li.org>\n"
@@ -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: 2016-03-25 05:54+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:01+0000\n"
19−"X-Generator: Launchpad (build 17967)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -446,19 +446,19 @@ msgstr "ወደ ላይ ይጥረጉ መልእክት ለ መፍጠር"
446msgid "Swipe up to manage the app"
446msgid "Swipe up to manage the app"
447msgstr "ወደ ላይ ይጥረጉ መተግበሪያ ለማስተዳደር"
447msgstr "ወደ ላይ ይጥረጉ መተግበሪያ ለማስተዳደር"
448
448
449−#: qml/Tutorial/TutorialLeft.qml:47
450−msgid "Swipe from the left edge to open the launcher"
451−msgstr "ከ ግራ ጠርዝ በኩል ይጥረጉ ማስጀመሪያውን ለ መክፈት"
452−
453#: qml/Tutorial/TutorialLeftLong.qml:47
449#: qml/Tutorial/TutorialLeftLong.qml:47
454msgid "Long swipe from the left edge to open the Today scope"
450msgid "Long swipe from the left edge to open the Today scope"
455msgstr "በ ረጅሙ ከ ግራ ጠርዝ በኩል ይጥረጉ የ ዛሬን ክልል ለ መክፈት"
451msgstr "በ ረጅሙ ከ ግራ ጠርዝ በኩል ይጥረጉ የ ዛሬን ክልል ለ መክፈት"
456
452
457−#: qml/Tutorial/TutorialRight.qml:54
453+#: qml/Tutorial/TutorialLeft.qml:47
458−msgid "Hover your mouse on the right edge to view your open apps"
454+msgid "Swipe from the left edge to open the launcher"
459−msgstr "የ እርስዎን አይጥ ወደ ቀኝ ጠርዝ በኩል ሲያደርጉ የ ተከፈቱ መተግበሪያዎች መመልከቻ"
455+msgstr "ከ ግራ ጠርዝ በኩል ይጥረጉ ማስጀመሪያውን ለ መክፈት"
460
456
461#: qml/Tutorial/TutorialRight.qml:55
457#: qml/Tutorial/TutorialRight.qml:55
458+msgid "Push your mouse against the right edge to view your open apps"
459+msgstr ""
460+
461+#: qml/Tutorial/TutorialRight.qml:56
462msgid "Short or long swipe from the right edge to view your open apps"
462msgid "Short or long swipe from the right edge to view your open apps"
463msgstr "በ አጭሩ ወይንም በ ረጅሙ ይጥረጉ ከ ቀኝ ጠረዝ በኩል የ ተከፈቱ መተግበሪያዎችን ለማየት"
463msgstr "በ አጭሩ ወይንም በ ረጅሙ ይጥረጉ ከ ቀኝ ጠረዝ በኩል የ ተከፈቱ መተግበሪያዎችን ለማየት"
464
464
@@ -1051,11 +1051,5 @@ msgstr "በጣም ደካማ የ መግቢያ ቃል"
1051#~ msgid "Call back"
1051#~ msgid "Call back"
1052#~ msgstr "መልሶ መደወያ"
1052#~ msgstr "መልሶ መደወያ"
1053
1053
1054−#~ msgid "Welcome to your Ubuntu device."
1054+#~ msgid "Hover your mouse on the right edge to view your open apps"
1055−#~ msgstr "እንኳን ድህና መጡ ወደ ኡቡንቱ"
1055+#~ msgstr "የ እርስዎን አይጥ ወደ ቀኝ ጠርዝ በኩል ሲያደርጉ የ ተከፈቱ መተግበሪያዎች መመልከቻ"
1056−
1057−#~ msgid "Please select how you’d like to unlock your device."
1058−#~ msgstr "እባክዎን የ እርስዎን አካል እንዴት እንደሚከፈት ይምረጡ"
1059−
1060−#~ msgid "Your device is now ready to use."
1061−#~ msgstr "የ እርስዎ አካል አሁን ዝግጁ ነው"
po/ar.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-07-29 09:41+0000\n"
11"PO-Revision-Date: 2015-07-29 09:41+0000\n"
12"Last-Translator: Ibrahim Saed <ibraheem5000@gmail.com>\n"
12"Last-Translator: Ibrahim Saed <ibraheem5000@gmail.com>\n"
13"Language-Team: Arabic <ar@li.org>\n"
13"Language-Team: Arabic <ar@li.org>\n"
@@ -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: 2016-03-24 06:07+0000\n"
19+"X-Launchpad-Export-Date: 2016-04-27 06:01+0000\n"
20−"X-Generator: Launchpad (build 17958)\n"
20+"X-Generator: Launchpad (build 17995)\n"
21
21
22#: plugins/IntegratedLightDM/Greeter.cpp:112
22#: plugins/IntegratedLightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
@@ -465,19 +465,19 @@ msgstr ""
465msgid "Swipe up to manage the app"
465msgid "Swipe up to manage the app"
466msgstr ""
466msgstr ""
467
467
468−#: qml/Tutorial/TutorialLeft.qml:47
469−msgid "Swipe from the left edge to open the launcher"
470−msgstr ""
471−
472#: qml/Tutorial/TutorialLeftLong.qml:47
468#: qml/Tutorial/TutorialLeftLong.qml:47
473msgid "Long swipe from the left edge to open the Today scope"
469msgid "Long swipe from the left edge to open the Today scope"
474msgstr ""
470msgstr ""
475
471
476−#: qml/Tutorial/TutorialRight.qml:54
472+#: qml/Tutorial/TutorialLeft.qml:47
477−msgid "Hover your mouse on the right edge to view your open apps"
473+msgid "Swipe from the left edge to open the launcher"
478msgstr ""
474msgstr ""
479
475
480#: qml/Tutorial/TutorialRight.qml:55
476#: qml/Tutorial/TutorialRight.qml:55
477+msgid "Push your mouse against the right edge to view your open apps"
478+msgstr ""
479+
480+#: qml/Tutorial/TutorialRight.qml:56
481msgid "Short or long swipe from the right edge to view your open apps"
481msgid "Short or long swipe from the right edge to view your open apps"
482msgstr ""
482msgstr ""
483
483
po/ast.po+30−39
@@ -7,16 +7,16 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11−"PO-Revision-Date: 2016-03-12 00:17+0000\n"
11+"PO-Revision-Date: 2016-04-17 16:57+0000\n"
12−"Last-Translator: enolp <enolp@softastur.org>\n"
12+"Last-Translator: Xuacu Saturio <xuacusk8@gmail.com>\n"
13"Language-Team: Asturian <ast@li.org>\n"
13"Language-Team: Asturian <ast@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: 2016-03-24 06:07+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:01+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -187,7 +187,7 @@ msgstr ""
187
187
188#: qml/Dash/FiltersPopover.qml:69
188#: qml/Dash/FiltersPopover.qml:69
189msgid "Reset"
189msgid "Reset"
190−msgstr ""
190+msgstr "Reafitar"
191
191
192#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
192#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
193msgid "See less"
193msgid "See less"
@@ -208,7 +208,7 @@ msgstr ""
208
208
209#: qml/Dash/PageHeaderExtraPanel.qml:66
209#: qml/Dash/PageHeaderExtraPanel.qml:66
210msgid "Clear All"
210msgid "Clear All"
211−msgstr ""
211+msgstr "Llimpiar too"
212
212
213#: qml/Dash/Previews/PreviewActionCombo.qml:35
213#: qml/Dash/Previews/PreviewActionCombo.qml:35
214msgid "More..."
214msgid "More..."
@@ -447,19 +447,19 @@ msgstr ""
447msgid "Swipe up to manage the app"
447msgid "Swipe up to manage the app"
448msgstr ""
448msgstr ""
449
449
450−#: qml/Tutorial/TutorialLeft.qml:47
451−msgid "Swipe from the left edge to open the launcher"
452−msgstr ""
453−
454#: qml/Tutorial/TutorialLeftLong.qml:47
450#: qml/Tutorial/TutorialLeftLong.qml:47
455msgid "Long swipe from the left edge to open the Today scope"
451msgid "Long swipe from the left edge to open the Today scope"
456msgstr ""
452msgstr ""
457
453
458−#: qml/Tutorial/TutorialRight.qml:54
454+#: qml/Tutorial/TutorialLeft.qml:47
459−msgid "Hover your mouse on the right edge to view your open apps"
455+msgid "Swipe from the left edge to open the launcher"
460msgstr ""
456msgstr ""
461
457
462#: qml/Tutorial/TutorialRight.qml:55
458#: qml/Tutorial/TutorialRight.qml:55
459+msgid "Push your mouse against the right edge to view your open apps"
460+msgstr ""
461+
462+#: qml/Tutorial/TutorialRight.qml:56
463msgid "Short or long swipe from the right edge to view your open apps"
463msgid "Short or long swipe from the right edge to view your open apps"
464msgstr ""
464msgstr ""
465
465
@@ -478,7 +478,7 @@ msgstr "Atrás"
478
478
479#: qml/Wizard/Pages/10-welcome.qml:27
479#: qml/Wizard/Pages/10-welcome.qml:27
480msgid "Language"
480msgid "Language"
481−msgstr ""
481+msgstr "Llingua"
482
482
483#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
483#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
484#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
484#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
@@ -487,7 +487,7 @@ msgstr ""
487#: qml/Wizard/Pages/passcode-desktop.qml:124
487#: qml/Wizard/Pages/passcode-desktop.qml:124
488#: qml/Wizard/Pages/password-set.qml:141
488#: qml/Wizard/Pages/password-set.qml:141
489msgid "Next"
489msgid "Next"
490−msgstr ""
490+msgstr "Siguiente"
491
491
492#: qml/Wizard/Pages/30-wifi.qml:29
492#: qml/Wizard/Pages/30-wifi.qml:29
493msgid "Connect to Wi‑Fi"
493msgid "Connect to Wi‑Fi"
@@ -495,15 +495,15 @@ msgstr "Coneutase al WiFi"
495
495
496#: qml/Wizard/Pages/30-wifi.qml:130
496#: qml/Wizard/Pages/30-wifi.qml:130
497msgid "Connected"
497msgid "Connected"
498−msgstr ""
498+msgstr "Coneutáu"
499
499
500#: qml/Wizard/Pages/30-wifi.qml:163
500#: qml/Wizard/Pages/30-wifi.qml:163
501msgid "Available Wi-Fi networks"
501msgid "Available Wi-Fi networks"
502−msgstr ""
502+msgstr "Redes Wi-Fi disponibles"
503
503
504#: qml/Wizard/Pages/30-wifi.qml:164
504#: qml/Wizard/Pages/30-wifi.qml:164
505msgid "No available Wi-Fi networks"
505msgid "No available Wi-Fi networks"
506−msgstr ""
506+msgstr "Nun hai redes Wi-Fi disponibles"
507
507
508#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
508#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
509#: qml/Wizard/Pages/sim.qml:101
509#: qml/Wizard/Pages/sim.qml:101
@@ -544,23 +544,23 @@ msgstr ""
544
544
545#: qml/Wizard/Pages/50-timezone.qml:29
545#: qml/Wizard/Pages/50-timezone.qml:29
546msgid "Time Zone"
546msgid "Time Zone"
547−msgstr ""
547+msgstr "Estaya horaria"
548
548
549#: qml/Wizard/Pages/50-timezone.qml:178
549#: qml/Wizard/Pages/50-timezone.qml:178
550msgid "Enter your city"
550msgid "Enter your city"
551−msgstr ""
551+msgstr "Escribe la ciudá"
552
552
553#: qml/Wizard/Pages/60-account.qml:24
553#: qml/Wizard/Pages/60-account.qml:24
554msgid "Personalize Your Device"
554msgid "Personalize Your Device"
555−msgstr ""
555+msgstr "Personaliza'l preséu"
556
556
557#: qml/Wizard/Pages/60-account.qml:48
557#: qml/Wizard/Pages/60-account.qml:48
558msgid "Preferred Name"
558msgid "Preferred Name"
559−msgstr ""
559+msgstr "Nome preferíu"
560
560
561#: qml/Wizard/Pages/70-passwd-type.qml:39
561#: qml/Wizard/Pages/70-passwd-type.qml:39
562msgid "Lock Screen"
562msgid "Lock Screen"
563−msgstr ""
563+msgstr "Bloquiar pantalla"
564
564
565#: qml/Wizard/Pages/70-passwd-type.qml:101
565#: qml/Wizard/Pages/70-passwd-type.qml:101
566msgctxt "Label: Type of security method"
566msgctxt "Label: Type of security method"
@@ -595,7 +595,7 @@ msgstr ""
595
595
596#: qml/Wizard/Pages/80-finished.qml:89
596#: qml/Wizard/Pages/80-finished.qml:89
597msgid "Welcome to Ubuntu"
597msgid "Welcome to Ubuntu"
598−msgstr ""
598+msgstr "Bienveníu/a a Ubuntu"
599
599
600#: qml/Wizard/Pages/80-finished.qml:104
600#: qml/Wizard/Pages/80-finished.qml:104
601msgid "You are ready to use your device now"
601msgid "You are ready to use your device now"
@@ -603,7 +603,7 @@ msgstr ""
603
603
604#: qml/Wizard/Pages/80-finished.qml:124
604#: qml/Wizard/Pages/80-finished.qml:124
605msgid "Get Started"
605msgid "Get Started"
606−msgstr ""
606+msgstr "Primeros pasos"
607
607
608#: qml/Wizard/Pages/here-terms.qml:25
608#: qml/Wizard/Pages/here-terms.qml:25
609msgid "Terms & Conditions"
609msgid "Terms & Conditions"
@@ -692,7 +692,7 @@ msgstr ""
692
692
693#: qml/Wizard/Pages/password-set.qml:103
693#: qml/Wizard/Pages/password-set.qml:103
694msgid "Confirm password"
694msgid "Confirm password"
695−msgstr ""
695+msgstr "Confirmar contraseña"
696
696
697#: qml/Wizard/Pages/sim.qml:27
697#: qml/Wizard/Pages/sim.qml:27
698msgid "No SIM card installed"
698msgid "No SIM card installed"
@@ -728,19 +728,19 @@ msgstr ""
728
728
729#: qml/Wizard/PasswordMeter.qml:93
729#: qml/Wizard/PasswordMeter.qml:93
730msgid "Strong password"
730msgid "Strong password"
731−msgstr ""
731+msgstr "Contraseña fuerte"
732
732
733#: qml/Wizard/PasswordMeter.qml:95
733#: qml/Wizard/PasswordMeter.qml:95
734msgid "Fair password"
734msgid "Fair password"
735−msgstr ""
735+msgstr "Contraseña aceutable"
736
736
737#: qml/Wizard/PasswordMeter.qml:97
737#: qml/Wizard/PasswordMeter.qml:97
738msgid "Weak password"
738msgid "Weak password"
739−msgstr ""
739+msgstr "Contraseña feble"
740
740
741#: qml/Wizard/PasswordMeter.qml:99
741#: qml/Wizard/PasswordMeter.qml:99
742msgid "Very weak password"
742msgid "Very weak password"
743−msgstr ""
743+msgstr "Contraseña feble enforma"
744
744
745#~ msgid "Skip intro"
745#~ msgid "Skip intro"
746#~ msgstr "Omitir la intro"
746#~ msgstr "Omitir la intro"
@@ -1056,12 +1056,3 @@ msgstr ""
1056
1056
1057#~ msgid "Call back"
1057#~ msgid "Call back"
1058#~ msgstr "Devolver llamada"
1058#~ msgstr "Devolver llamada"
1059−
1060−#~ msgid "Your device is now ready to use."
1061−#~ msgstr "Agora'l to preséu ta preparáu pa usase."
1062−
1063−#~ msgid "Welcome to your Ubuntu device."
1064−#~ msgstr "Bienllegáu/ada al to preséu d'Ubuntu."
1065−
1066−#~ msgid "Please select how you’d like to unlock your device."
1067−#~ msgstr "Esbilla cómo te prestaría desbloquiar el to preséu, por favor."
po/az.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2014-09-03 16:39+0000\n"
11"PO-Revision-Date: 2014-09-03 16:39+0000\n"
12"Last-Translator: Nicat Məmmədov <n1c4t97@gmail.com>\n"
12"Last-Translator: Nicat Məmmədov <n1c4t97@gmail.com>\n"
13"Language-Team: Azerbaijani <az@li.org>\n"
13"Language-Team: Azerbaijani <az@li.org>\n"
@@ -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: 2016-03-24 06:07+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:01+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -444,19 +444,19 @@ msgstr ""
444msgid "Swipe up to manage the app"
444msgid "Swipe up to manage the app"
445msgstr ""
445msgstr ""
446
446
447−#: qml/Tutorial/TutorialLeft.qml:47
448−msgid "Swipe from the left edge to open the launcher"
449−msgstr ""
450−
451#: qml/Tutorial/TutorialLeftLong.qml:47
447#: qml/Tutorial/TutorialLeftLong.qml:47
452msgid "Long swipe from the left edge to open the Today scope"
448msgid "Long swipe from the left edge to open the Today scope"
453msgstr ""
449msgstr ""
454
450
455−#: qml/Tutorial/TutorialRight.qml:54
451+#: qml/Tutorial/TutorialLeft.qml:47
456−msgid "Hover your mouse on the right edge to view your open apps"
452+msgid "Swipe from the left edge to open the launcher"
457msgstr ""
453msgstr ""
458
454
459#: qml/Tutorial/TutorialRight.qml:55
455#: qml/Tutorial/TutorialRight.qml:55
456+msgid "Push your mouse against the right edge to view your open apps"
457+msgstr ""
458+
459+#: qml/Tutorial/TutorialRight.qml:56
460msgid "Short or long swipe from the right edge to view your open apps"
460msgid "Short or long swipe from the right edge to view your open apps"
461msgstr ""
461msgstr ""
462
462
po/be.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-12-13 13:12+0000\n"
11"PO-Revision-Date: 2015-12-13 13:12+0000\n"
12"Last-Translator: Mikhail_SaTuRn <mikhail_saturn@tut.by>\n"
12"Last-Translator: Mikhail_SaTuRn <mikhail_saturn@tut.by>\n"
13"Language-Team: Belarusian <be@li.org>\n"
13"Language-Team: Belarusian <be@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=(n%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: 2016-03-24 06:07+0000\n"
19+"X-Launchpad-Export-Date: 2016-04-27 06:01+0000\n"
20−"X-Generator: Launchpad (build 17958)\n"
20+"X-Generator: Launchpad (build 17995)\n"
21
21
22#: plugins/IntegratedLightDM/Greeter.cpp:112
22#: plugins/IntegratedLightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
@@ -454,19 +454,19 @@ msgstr ""
454msgid "Swipe up to manage the app"
454msgid "Swipe up to manage the app"
455msgstr ""
455msgstr ""
456
456
457−#: qml/Tutorial/TutorialLeft.qml:47
458−msgid "Swipe from the left edge to open the launcher"
459−msgstr ""
460−
461#: qml/Tutorial/TutorialLeftLong.qml:47
457#: qml/Tutorial/TutorialLeftLong.qml:47
462msgid "Long swipe from the left edge to open the Today scope"
458msgid "Long swipe from the left edge to open the Today scope"
463msgstr ""
459msgstr ""
464
460
465−#: qml/Tutorial/TutorialRight.qml:54
461+#: qml/Tutorial/TutorialLeft.qml:47
466−msgid "Hover your mouse on the right edge to view your open apps"
462+msgid "Swipe from the left edge to open the launcher"
467msgstr ""
463msgstr ""
468
464
469#: qml/Tutorial/TutorialRight.qml:55
465#: qml/Tutorial/TutorialRight.qml:55
466+msgid "Push your mouse against the right edge to view your open apps"
467+msgstr ""
468+
469+#: qml/Tutorial/TutorialRight.qml:56
470msgid "Short or long swipe from the right edge to view your open apps"
470msgid "Short or long swipe from the right edge to view your open apps"
471msgstr ""
471msgstr ""
472
472
po/bg.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-04-12 14:43+0000\n"
11"PO-Revision-Date: 2015-04-12 14:43+0000\n"
12"Last-Translator: George Karavasilev <kokoto-java@ubuntu.com>\n"
12"Last-Translator: George Karavasilev <kokoto-java@ubuntu.com>\n"
13"Language-Team: Bulgarian <bg@li.org>\n"
13"Language-Team: Bulgarian <bg@li.org>\n"
@@ -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: 2016-03-24 06:07+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -442,19 +442,19 @@ msgstr ""
442msgid "Swipe up to manage the app"
442msgid "Swipe up to manage the app"
443msgstr ""
443msgstr ""
444
444
445−#: qml/Tutorial/TutorialLeft.qml:47
446−msgid "Swipe from the left edge to open the launcher"
447−msgstr ""
448−
449#: qml/Tutorial/TutorialLeftLong.qml:47
445#: qml/Tutorial/TutorialLeftLong.qml:47
450msgid "Long swipe from the left edge to open the Today scope"
446msgid "Long swipe from the left edge to open the Today scope"
451msgstr ""
447msgstr ""
452
448
453−#: qml/Tutorial/TutorialRight.qml:54
449+#: qml/Tutorial/TutorialLeft.qml:47
454−msgid "Hover your mouse on the right edge to view your open apps"
450+msgid "Swipe from the left edge to open the launcher"
455msgstr ""
451msgstr ""
456
452
457#: qml/Tutorial/TutorialRight.qml:55
453#: qml/Tutorial/TutorialRight.qml:55
454+msgid "Push your mouse against the right edge to view your open apps"
455+msgstr ""
456+
457+#: qml/Tutorial/TutorialRight.qml:56
458msgid "Short or long swipe from the right edge to view your open apps"
458msgid "Short or long swipe from the right edge to view your open apps"
459msgstr ""
459msgstr ""
460
460
po/bn.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-11-27 19:38+0000\n"
11"PO-Revision-Date: 2015-11-27 19:38+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Bengali <bn@li.org>\n"
13"Language-Team: Bengali <bn@li.org>\n"
@@ -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: 2016-03-24 06:07+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:01+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -443,19 +443,19 @@ msgstr ""
443msgid "Swipe up to manage the app"
443msgid "Swipe up to manage the app"
444msgstr ""
444msgstr ""
445
445
446−#: qml/Tutorial/TutorialLeft.qml:47
447−msgid "Swipe from the left edge to open the launcher"
448−msgstr ""
449−
450#: qml/Tutorial/TutorialLeftLong.qml:47
446#: qml/Tutorial/TutorialLeftLong.qml:47
451msgid "Long swipe from the left edge to open the Today scope"
447msgid "Long swipe from the left edge to open the Today scope"
452msgstr ""
448msgstr ""
453
449
454−#: qml/Tutorial/TutorialRight.qml:54
450+#: qml/Tutorial/TutorialLeft.qml:47
455−msgid "Hover your mouse on the right edge to view your open apps"
451+msgid "Swipe from the left edge to open the launcher"
456msgstr ""
452msgstr ""
457
453
458#: qml/Tutorial/TutorialRight.qml:55
454#: qml/Tutorial/TutorialRight.qml:55
455+msgid "Push your mouse against the right edge to view your open apps"
456+msgstr ""
457+
458+#: qml/Tutorial/TutorialRight.qml:56
459msgid "Short or long swipe from the right edge to view your open apps"
459msgid "Short or long swipe from the right edge to view your open apps"
460msgstr ""
460msgstr ""
461
461
po/br.po+62−69
@@ -7,16 +7,16 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11−"PO-Revision-Date: 2016-02-22 12:29+0000\n"
11+"PO-Revision-Date: 2016-04-27 12:20+0000\n"
12"Last-Translator: Fohanno Thierry <thierry.fohanno@ofis-bzh.org>\n"
12"Last-Translator: Fohanno Thierry <thierry.fohanno@ofis-bzh.org>\n"
13"Language-Team: Breton <br@li.org>\n"
13"Language-Team: Breton <br@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2016-03-24 06:07+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-28 05:59+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -144,6 +144,8 @@ msgctxt ""
144"Re-dock means connect the device again to an external screen/mouse/keyboard"
144"Re-dock means connect the device again to an external screen/mouse/keyboard"
145msgid "Re-dock, save your work and close these apps to continue."
145msgid "Re-dock, save your work and close these apps to continue."
146msgstr ""
146msgstr ""
147+"Adkevreit ouzh ar savlec'h degemer, enrollot ho labour ha serrit an arloadoù-"
148+"mañ evit kenderc'hel."
147
149
148#: qml/Components/ModeSwitchWarningDialog.qml:63
150#: qml/Components/ModeSwitchWarningDialog.qml:63
149msgid "Or force close now (unsaved data will be lost)."
151msgid "Or force close now (unsaved data will be lost)."
@@ -187,11 +189,11 @@ msgstr "Ouzhpennañ d'ar sinedoù"
187
189
188#: qml/Dash/FiltersPopover.qml:60
190#: qml/Dash/FiltersPopover.qml:60
189msgid "Refine your results"
191msgid "Refine your results"
190−msgstr ""
192+msgstr "Purañ ho tisoc'hoù"
191
193
192#: qml/Dash/FiltersPopover.qml:69
194#: qml/Dash/FiltersPopover.qml:69
193msgid "Reset"
195msgid "Reset"
194−msgstr ""
196+msgstr "Adderaouekaat"
195
197
196#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
198#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
197msgid "See less"
199msgid "See less"
@@ -208,11 +210,11 @@ msgstr "Klask"
208
210
209#: qml/Dash/PageHeaderExtraPanel.qml:55
211#: qml/Dash/PageHeaderExtraPanel.qml:55
210msgid "Recent Searches"
212msgid "Recent Searches"
211−msgstr ""
213+msgstr "Enklaskoù graet nevez zo"
212
214
213#: qml/Dash/PageHeaderExtraPanel.qml:66
215#: qml/Dash/PageHeaderExtraPanel.qml:66
214msgid "Clear All"
216msgid "Clear All"
215−msgstr ""
217+msgstr "Diverkañ pep tra"
216
218
217#: qml/Dash/Previews/PreviewActionCombo.qml:35
219#: qml/Dash/Previews/PreviewActionCombo.qml:35
218msgid "More..."
220msgid "More..."
@@ -433,7 +435,7 @@ msgstr ""
433
435
434#: qml/Tutorial/TutorialBottom.qml:78
436#: qml/Tutorial/TutorialBottom.qml:78
435msgid "Swipe up to add a contact"
437msgid "Swipe up to add a contact"
436−msgstr ""
438+msgstr "Riklit d'an nec'h evit ouzhpennañ un darempred"
437
439
438#: qml/Tutorial/TutorialBottom.qml:80
440#: qml/Tutorial/TutorialBottom.qml:80
439msgid "Swipe up for favorite calculations"
441msgid "Swipe up for favorite calculations"
@@ -445,25 +447,25 @@ msgstr ""
445
447
446#: qml/Tutorial/TutorialBottom.qml:84
448#: qml/Tutorial/TutorialBottom.qml:84
447msgid "Swipe up to create a message"
449msgid "Swipe up to create a message"
448−msgstr ""
450+msgstr "Riklit d'an nec'h evit krouiñ ur gemennadenn"
449
451
450#: qml/Tutorial/TutorialBottom.qml:85
452#: qml/Tutorial/TutorialBottom.qml:85
451msgid "Swipe up to manage the app"
453msgid "Swipe up to manage the app"
452msgstr ""
454msgstr ""
453
455
454−#: qml/Tutorial/TutorialLeft.qml:47
455−msgid "Swipe from the left edge to open the launcher"
456−msgstr ""
457−
458#: qml/Tutorial/TutorialLeftLong.qml:47
456#: qml/Tutorial/TutorialLeftLong.qml:47
459msgid "Long swipe from the left edge to open the Today scope"
457msgid "Long swipe from the left edge to open the Today scope"
460msgstr ""
458msgstr ""
461
459
462−#: qml/Tutorial/TutorialRight.qml:54
460+#: qml/Tutorial/TutorialLeft.qml:47
463−msgid "Hover your mouse on the right edge to view your open apps"
461+msgid "Swipe from the left edge to open the launcher"
464msgstr ""
462msgstr ""
465
463
466#: qml/Tutorial/TutorialRight.qml:55
464#: qml/Tutorial/TutorialRight.qml:55
465+msgid "Push your mouse against the right edge to view your open apps"
466+msgstr ""
467+
468+#: qml/Tutorial/TutorialRight.qml:56
467msgid "Short or long swipe from the right edge to view your open apps"
469msgid "Short or long swipe from the right edge to view your open apps"
468msgstr ""
470msgstr ""
469
471
@@ -482,7 +484,7 @@ msgstr "Distreiñ"
482
484
483#: qml/Wizard/Pages/10-welcome.qml:27
485#: qml/Wizard/Pages/10-welcome.qml:27
484msgid "Language"
486msgid "Language"
485−msgstr ""
487+msgstr "Yezh"
486
488
487#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
489#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
488#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
490#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
@@ -491,7 +493,7 @@ msgstr ""
491#: qml/Wizard/Pages/passcode-desktop.qml:124
493#: qml/Wizard/Pages/passcode-desktop.qml:124
492#: qml/Wizard/Pages/password-set.qml:141
494#: qml/Wizard/Pages/password-set.qml:141
493msgid "Next"
495msgid "Next"
494−msgstr ""
496+msgstr "War-lerc'h"
495
497
496#: qml/Wizard/Pages/30-wifi.qml:29
498#: qml/Wizard/Pages/30-wifi.qml:29
497msgid "Connect to Wi‑Fi"
499msgid "Connect to Wi‑Fi"
@@ -499,15 +501,15 @@ msgstr "Kevreañ ouzh ar Wi-Fi"
499
501
500#: qml/Wizard/Pages/30-wifi.qml:130
502#: qml/Wizard/Pages/30-wifi.qml:130
501msgid "Connected"
503msgid "Connected"
502−msgstr ""
504+msgstr "Kevreet"
503
505
504#: qml/Wizard/Pages/30-wifi.qml:163
506#: qml/Wizard/Pages/30-wifi.qml:163
505msgid "Available Wi-Fi networks"
507msgid "Available Wi-Fi networks"
506−msgstr ""
508+msgstr "Rouedadoù Wi-Fi da gaout"
507
509
508#: qml/Wizard/Pages/30-wifi.qml:164
510#: qml/Wizard/Pages/30-wifi.qml:164
509msgid "No available Wi-Fi networks"
511msgid "No available Wi-Fi networks"
510−msgstr ""
512+msgstr "N'eus ket rouedadoù Wi-Fi da gaout"
511
513
512#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
514#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
513#: qml/Wizard/Pages/sim.qml:101
515#: qml/Wizard/Pages/sim.qml:101
@@ -516,7 +518,7 @@ msgstr "Tremen hebiou"
516
518
517#: qml/Wizard/Pages/40-location.qml:27
519#: qml/Wizard/Pages/40-location.qml:27
518msgid "Location Services"
520msgid "Location Services"
519−msgstr ""
521+msgstr "Servijoù lec'hiañ"
520
522
521#: qml/Wizard/Pages/40-location.qml:83
523#: qml/Wizard/Pages/40-location.qml:83
522msgid ""
524msgid ""
@@ -532,15 +534,15 @@ msgstr ""
532#: qml/Wizard/Pages/40-location.qml:106
534#: qml/Wizard/Pages/40-location.qml:106
533msgctxt "part of: Nokia HERE terms and conditions"
535msgctxt "part of: Nokia HERE terms and conditions"
534msgid "terms and conditions"
536msgid "terms and conditions"
535−msgstr ""
537+msgstr "penndivizoù implij"
536
538
537#: qml/Wizard/Pages/40-location.qml:160
539#: qml/Wizard/Pages/40-location.qml:160
538msgid "GPS only"
540msgid "GPS only"
539−msgstr ""
541+msgstr "GPS hepken"
540
542
541#: qml/Wizard/Pages/40-location.qml:214
543#: qml/Wizard/Pages/40-location.qml:214
542msgid "Don't use my location"
544msgid "Don't use my location"
543−msgstr ""
545+msgstr "Arabat implijout ma lec'h"
544
546
545#: qml/Wizard/Pages/40-location.qml:260
547#: qml/Wizard/Pages/40-location.qml:260
546msgid "You can change it later in System Settings."
548msgid "You can change it later in System Settings."
@@ -548,15 +550,15 @@ msgstr ""
548
550
549#: qml/Wizard/Pages/50-timezone.qml:29
551#: qml/Wizard/Pages/50-timezone.qml:29
550msgid "Time Zone"
552msgid "Time Zone"
551−msgstr ""
553+msgstr "Gwerzhid-eur"
552
554
553#: qml/Wizard/Pages/50-timezone.qml:178
555#: qml/Wizard/Pages/50-timezone.qml:178
554msgid "Enter your city"
556msgid "Enter your city"
555−msgstr ""
557+msgstr "Skrivit ho kêr"
556
558
557#: qml/Wizard/Pages/60-account.qml:24
559#: qml/Wizard/Pages/60-account.qml:24
558msgid "Personalize Your Device"
560msgid "Personalize Your Device"
559−msgstr ""
561+msgstr "Personelaat ho penveg"
560
562
561#: qml/Wizard/Pages/60-account.qml:48
563#: qml/Wizard/Pages/60-account.qml:48
562msgid "Preferred Name"
564msgid "Preferred Name"
@@ -564,30 +566,30 @@ msgstr ""
564
566
565#: qml/Wizard/Pages/70-passwd-type.qml:39
567#: qml/Wizard/Pages/70-passwd-type.qml:39
566msgid "Lock Screen"
568msgid "Lock Screen"
567−msgstr ""
569+msgstr "Prennañ ar skramm"
568
570
569#: qml/Wizard/Pages/70-passwd-type.qml:101
571#: qml/Wizard/Pages/70-passwd-type.qml:101
570msgctxt "Label: Type of security method"
572msgctxt "Label: Type of security method"
571msgid "Create new password"
573msgid "Create new password"
572−msgstr ""
574+msgstr "Krouiñ ur ger-tremen nevez"
573
575
574#: qml/Wizard/Pages/70-passwd-type.qml:103
576#: qml/Wizard/Pages/70-passwd-type.qml:103
575msgctxt "Label: Type of security method"
577msgctxt "Label: Type of security method"
576msgid "Create passcode (numbers only)"
578msgid "Create passcode (numbers only)"
577−msgstr ""
579+msgstr "Krouiñ ur c'hod (difroù hepken)"
578
580
579#: qml/Wizard/Pages/70-passwd-type.qml:105
581#: qml/Wizard/Pages/70-passwd-type.qml:105
580msgctxt "Label: Type of security method"
582msgctxt "Label: Type of security method"
581msgid "No lock code"
583msgid "No lock code"
582−msgstr ""
584+msgstr "N'eus kod prennañ ebet"
583
585
584#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
586#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
585msgid "Privacy Policy"
587msgid "Privacy Policy"
586−msgstr ""
588+msgstr "Reolennoù prevezded"
587
589
588#: qml/Wizard/Pages/75-report-check.qml:26
590#: qml/Wizard/Pages/75-report-check.qml:26
589msgid "Help Us Improve"
591msgid "Help Us Improve"
590−msgstr ""
592+msgstr "Sikourit ac'hanomp da wellaat"
591
593
592#: qml/Wizard/Pages/75-report-check.qml:59
594#: qml/Wizard/Pages/75-report-check.qml:59
593msgid "Improve system performance by sending us crashes and error reports."
595msgid "Improve system performance by sending us crashes and error reports."
@@ -595,19 +597,19 @@ msgstr ""
595
597
596#: qml/Wizard/Pages/75-report-check.qml:60
598#: qml/Wizard/Pages/75-report-check.qml:60
597msgid "Privacy policy"
599msgid "Privacy policy"
598−msgstr ""
600+msgstr "Reolennoù buhez prevez"
599
601
600#: qml/Wizard/Pages/80-finished.qml:89
602#: qml/Wizard/Pages/80-finished.qml:89
601msgid "Welcome to Ubuntu"
603msgid "Welcome to Ubuntu"
602−msgstr ""
604+msgstr "Donemat en Ubuntu"
603
605
604#: qml/Wizard/Pages/80-finished.qml:104
606#: qml/Wizard/Pages/80-finished.qml:104
605msgid "You are ready to use your device now"
607msgid "You are ready to use your device now"
606−msgstr ""
608+msgstr "Bremañ oc'h prest da implijout ho penveg"
607
609
608#: qml/Wizard/Pages/80-finished.qml:124
610#: qml/Wizard/Pages/80-finished.qml:124
609msgid "Get Started"
611msgid "Get Started"
610−msgstr ""
612+msgstr "Kregiñ ganti"
611
613
612#: qml/Wizard/Pages/here-terms.qml:25
614#: qml/Wizard/Pages/here-terms.qml:25
613msgid "Terms & Conditions"
615msgid "Terms & Conditions"
@@ -637,7 +639,7 @@ msgstr ""
637
639
638#: qml/Wizard/Pages/here-terms.qml:107
640#: qml/Wizard/Pages/here-terms.qml:107
639msgid "Service Terms"
641msgid "Service Terms"
640−msgstr ""
642+msgstr "Divizoù servij"
641
643
642#: qml/Wizard/Pages/passcode-confirm.qml:43
644#: qml/Wizard/Pages/passcode-confirm.qml:43
643#: qml/Wizard/Pages/passcode-desktop.qml:80
645#: qml/Wizard/Pages/passcode-desktop.qml:80
@@ -646,65 +648,65 @@ msgstr "Kadarnaat ar c'hod-tremen"
646
648
647#: qml/Wizard/Pages/passcode-confirm.qml:45
649#: qml/Wizard/Pages/passcode-confirm.qml:45
648msgid "Incorrect passcode."
650msgid "Incorrect passcode."
649−msgstr ""
651+msgstr "Kod direizh"
650
652
651#: qml/Wizard/Pages/passcode-confirm.qml:45
653#: qml/Wizard/Pages/passcode-confirm.qml:45
652msgctxt "Enter the passcode again"
654msgctxt "Enter the passcode again"
653msgid "Please re-enter."
655msgid "Please re-enter."
654−msgstr ""
656+msgstr "Skrivit adarre, mar plij."
655
657
656#: qml/Wizard/Pages/passcode-desktop.qml:30
658#: qml/Wizard/Pages/passcode-desktop.qml:30
657msgid "Lock Screen Passcode"
659msgid "Lock Screen Passcode"
658−msgstr ""
660+msgstr "Kod da brennañ ar skramm"
659
661
660#: qml/Wizard/Pages/passcode-desktop.qml:56
662#: qml/Wizard/Pages/passcode-desktop.qml:56
661msgid "Enter 4 numbers to setup your passcode"
663msgid "Enter 4 numbers to setup your passcode"
662−msgstr ""
664+msgstr "Skrivit 4 sifr evit lakaat ho kod"
663
665
664#: qml/Wizard/Pages/passcode-desktop.qml:65
666#: qml/Wizard/Pages/passcode-desktop.qml:65
665#: qml/Wizard/Pages/passcode-set.qml:54
667#: qml/Wizard/Pages/passcode-set.qml:54
666msgid "Choose passcode"
668msgid "Choose passcode"
667−msgstr ""
669+msgstr "Choaz ur c'hod"
668
670
669#: qml/Wizard/Pages/passcode-desktop.qml:105
671#: qml/Wizard/Pages/passcode-desktop.qml:105
670msgid "Passcode too short"
672msgid "Passcode too short"
671−msgstr ""
673+msgstr "Kod re verr"
672
674
673#: qml/Wizard/Pages/passcode-desktop.qml:107
675#: qml/Wizard/Pages/passcode-desktop.qml:107
674msgid "Passcodes match"
676msgid "Passcodes match"
675−msgstr ""
677+msgstr "klotañ a ra ar c'hodoù an eil gant egile"
676
678
677#: qml/Wizard/Pages/passcode-desktop.qml:109
679#: qml/Wizard/Pages/passcode-desktop.qml:109
678msgid "Passcodes do not match"
680msgid "Passcodes do not match"
679−msgstr ""
681+msgstr "Ne glot ket ar c'hodoù an eil gant egile"
680
682
681#: qml/Wizard/Pages/passcode-set.qml:62
683#: qml/Wizard/Pages/passcode-set.qml:62
682msgid "Passcode must be 4 characters long"
684msgid "Passcode must be 4 characters long"
683−msgstr ""
685+msgstr "4 arouezenn a rank bezañ ar c'hod"
684
686
685#: qml/Wizard/Pages/password-set.qml:30
687#: qml/Wizard/Pages/password-set.qml:30
686msgid "Lock Screen Password"
688msgid "Lock Screen Password"
687−msgstr ""
689+msgstr "Ger-tremen da brennañ ar skramm"
688
690
689#: qml/Wizard/Pages/password-set.qml:61
691#: qml/Wizard/Pages/password-set.qml:61
690msgid "Enter at least 8 characters"
692msgid "Enter at least 8 characters"
691−msgstr ""
693+msgstr "Skrivit 8 arouezenn da vihanañ"
692
694
693#: qml/Wizard/Pages/password-set.qml:73
695#: qml/Wizard/Pages/password-set.qml:73
694msgid "Choose password"
696msgid "Choose password"
695−msgstr ""
697+msgstr "Choaz ur ger-tremen"
696
698
697#: qml/Wizard/Pages/password-set.qml:103
699#: qml/Wizard/Pages/password-set.qml:103
698msgid "Confirm password"
700msgid "Confirm password"
699−msgstr ""
701+msgstr "Kadarnaat ar ger-tremen"
700
702
701#: qml/Wizard/Pages/sim.qml:27
703#: qml/Wizard/Pages/sim.qml:27
702msgid "No SIM card installed"
704msgid "No SIM card installed"
703−msgstr ""
705+msgstr "N'eus kartenn SIM ebet"
704
706
705#: qml/Wizard/Pages/sim.qml:54
707#: qml/Wizard/Pages/sim.qml:54
706msgid "SIM card added"
708msgid "SIM card added"
707−msgstr ""
709+msgstr "Lakaet ez eus bet ur gartenn SIM"
708
710
709#: qml/Wizard/Pages/sim.qml:55
711#: qml/Wizard/Pages/sim.qml:55
710msgid "You must restart the device to access the mobile network."
712msgid "You must restart the device to access the mobile network."
@@ -724,27 +726,27 @@ msgstr ""
724
726
725#: qml/Wizard/PasswordMeter.qml:87
727#: qml/Wizard/PasswordMeter.qml:87
726msgid "Passwords match"
728msgid "Passwords match"
727−msgstr ""
729+msgstr "Klotañ a ra ar gerioù-tremen an eil gant egile"
728
730
729#: qml/Wizard/PasswordMeter.qml:89
731#: qml/Wizard/PasswordMeter.qml:89
730msgid "Passwords do not match"
732msgid "Passwords do not match"
731−msgstr ""
733+msgstr "Ne glot ket ar gerioù-tremen"
732
734
733#: qml/Wizard/PasswordMeter.qml:93
735#: qml/Wizard/PasswordMeter.qml:93
734msgid "Strong password"
736msgid "Strong password"
735−msgstr ""
737+msgstr "Ger-tremen sur"
736
738
737#: qml/Wizard/PasswordMeter.qml:95
739#: qml/Wizard/PasswordMeter.qml:95
738msgid "Fair password"
740msgid "Fair password"
739−msgstr ""
741+msgstr "Ger-tremen reizh"
740
742
741#: qml/Wizard/PasswordMeter.qml:97
743#: qml/Wizard/PasswordMeter.qml:97
742msgid "Weak password"
744msgid "Weak password"
743−msgstr ""
745+msgstr "Ger-tremen diasur"
744
746
745#: qml/Wizard/PasswordMeter.qml:99
747#: qml/Wizard/PasswordMeter.qml:99
746msgid "Very weak password"
748msgid "Very weak password"
747−msgstr ""
749+msgstr "Ger-tremen diasur-kenañ"
748
750
749#~ msgid "Close"
751#~ msgid "Close"
750#~ msgstr "Serriñ"
752#~ msgstr "Serriñ"
@@ -1064,12 +1066,3 @@ msgstr ""
1064
1066
1065#~ msgid "Call back"
1067#~ msgid "Call back"
1066#~ msgstr "Gervel en-dro"
1068#~ msgstr "Gervel en-dro"
1067−
1068−#~ msgid "Welcome to your Ubuntu device."
1069−#~ msgstr "Donemat en ho penveg Ubuntu"
1070−
1071−#~ msgid "Please select how you’d like to unlock your device."
1072−#~ msgstr "Diuzit penaos e fell deoc'h dibrennañ ho penveg, mar plij."
1073−
1074−#~ msgid "Your device is now ready to use."
1075−#~ msgstr "Prest eo ho penveg da vezañ implijet bremañ."
po/bs.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-12-01 20:06+0000\n"
11"PO-Revision-Date: 2015-12-01 20:06+0000\n"
12"Last-Translator: Kenan Gutić <Unknown>\n"
12"Last-Translator: Kenan Gutić <Unknown>\n"
13"Language-Team: Bosnian <bs@li.org>\n"
13"Language-Team: Bosnian <bs@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%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: 2016-03-24 06:07+0000\n"
19+"X-Launchpad-Export-Date: 2016-04-27 06:01+0000\n"
20−"X-Generator: Launchpad (build 17958)\n"
20+"X-Generator: Launchpad (build 17995)\n"
21
21
22#: plugins/IntegratedLightDM/Greeter.cpp:112
22#: plugins/IntegratedLightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
@@ -453,19 +453,19 @@ msgstr ""
453msgid "Swipe up to manage the app"
453msgid "Swipe up to manage the app"
454msgstr ""
454msgstr ""
455
455
456−#: qml/Tutorial/TutorialLeft.qml:47
457−msgid "Swipe from the left edge to open the launcher"
458−msgstr ""
459−
460#: qml/Tutorial/TutorialLeftLong.qml:47
456#: qml/Tutorial/TutorialLeftLong.qml:47
461msgid "Long swipe from the left edge to open the Today scope"
457msgid "Long swipe from the left edge to open the Today scope"
462msgstr ""
458msgstr ""
463
459
464−#: qml/Tutorial/TutorialRight.qml:54
460+#: qml/Tutorial/TutorialLeft.qml:47
465−msgid "Hover your mouse on the right edge to view your open apps"
461+msgid "Swipe from the left edge to open the launcher"
466msgstr ""
462msgstr ""
467
463
468#: qml/Tutorial/TutorialRight.qml:55
464#: qml/Tutorial/TutorialRight.qml:55
465+msgid "Push your mouse against the right edge to view your open apps"
466+msgstr ""
467+
468+#: qml/Tutorial/TutorialRight.qml:56
469msgid "Short or long swipe from the right edge to view your open apps"
469msgid "Short or long swipe from the right edge to view your open apps"
470msgstr ""
470msgstr ""
471
471
po/ca.po+11−11
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-07-04 09:48+0000\n"
11"PO-Revision-Date: 2015-07-04 09:48+0000\n"
12"Last-Translator: David Planella <david.planella@ubuntu.com>\n"
12"Last-Translator: David Planella <david.planella@ubuntu.com>\n"
13"Language-Team: Catalan <ca@li.org>\n"
13"Language-Team: Catalan <ca@li.org>\n"
@@ -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: 2016-03-24 06:07+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -207,11 +207,11 @@ msgstr "Cerca"
207
207
208#: qml/Dash/PageHeaderExtraPanel.qml:55
208#: qml/Dash/PageHeaderExtraPanel.qml:55
209msgid "Recent Searches"
209msgid "Recent Searches"
210−msgstr ""
210+msgstr "Cerques recents"
211
211
212#: qml/Dash/PageHeaderExtraPanel.qml:66
212#: qml/Dash/PageHeaderExtraPanel.qml:66
213msgid "Clear All"
213msgid "Clear All"
214−msgstr ""
214+msgstr "Neteja-ho tot"
215
215
216#: qml/Dash/Previews/PreviewActionCombo.qml:35
216#: qml/Dash/Previews/PreviewActionCombo.qml:35
217msgid "More..."
217msgid "More..."
@@ -452,19 +452,19 @@ msgstr ""
452msgid "Swipe up to manage the app"
452msgid "Swipe up to manage the app"
453msgstr ""
453msgstr ""
454
454
455−#: qml/Tutorial/TutorialLeft.qml:47
456−msgid "Swipe from the left edge to open the launcher"
457−msgstr ""
458−
459#: qml/Tutorial/TutorialLeftLong.qml:47
455#: qml/Tutorial/TutorialLeftLong.qml:47
460msgid "Long swipe from the left edge to open the Today scope"
456msgid "Long swipe from the left edge to open the Today scope"
461msgstr ""
457msgstr ""
462
458
463−#: qml/Tutorial/TutorialRight.qml:54
459+#: qml/Tutorial/TutorialLeft.qml:47
464−msgid "Hover your mouse on the right edge to view your open apps"
460+msgid "Swipe from the left edge to open the launcher"
465msgstr ""
461msgstr ""
466
462
467#: qml/Tutorial/TutorialRight.qml:55
463#: qml/Tutorial/TutorialRight.qml:55
464+msgid "Push your mouse against the right edge to view your open apps"
465+msgstr ""
466+
467+#: qml/Tutorial/TutorialRight.qml:56
468msgid "Short or long swipe from the right edge to view your open apps"
468msgid "Short or long swipe from the right edge to view your open apps"
469msgstr ""
469msgstr ""
470
470
po/ca@valencia.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-02-22 15:22+0000\n"
11"PO-Revision-Date: 2015-02-22 15:22+0000\n"
12"Last-Translator: David Planella <david.planella@ubuntu.com>\n"
12"Last-Translator: David Planella <david.planella@ubuntu.com>\n"
13"Language-Team: Catalan <ca@li.org>\n"
13"Language-Team: Catalan <ca@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:03+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -452,19 +452,19 @@ msgstr ""
452msgid "Swipe up to manage the app"
452msgid "Swipe up to manage the app"
453msgstr ""
453msgstr ""
454
454
455−#: qml/Tutorial/TutorialLeft.qml:47
456−msgid "Swipe from the left edge to open the launcher"
457−msgstr ""
458−
459#: qml/Tutorial/TutorialLeftLong.qml:47
455#: qml/Tutorial/TutorialLeftLong.qml:47
460msgid "Long swipe from the left edge to open the Today scope"
456msgid "Long swipe from the left edge to open the Today scope"
461msgstr ""
457msgstr ""
462
458
463−#: qml/Tutorial/TutorialRight.qml:54
459+#: qml/Tutorial/TutorialLeft.qml:47
464−msgid "Hover your mouse on the right edge to view your open apps"
460+msgid "Swipe from the left edge to open the launcher"
465msgstr ""
461msgstr ""
466
462
467#: qml/Tutorial/TutorialRight.qml:55
463#: qml/Tutorial/TutorialRight.qml:55
464+msgid "Push your mouse against the right edge to view your open apps"
465+msgstr ""
466+
467+#: qml/Tutorial/TutorialRight.qml:56
468msgid "Short or long swipe from the right edge to view your open apps"
468msgid "Short or long swipe from the right edge to view your open apps"
469msgstr ""
469msgstr ""
470
470
po/ce.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-02-15 04:01+0000\n"
11"PO-Revision-Date: 2015-02-15 04:01+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Chechen <ce@li.org>\n"
13"Language-Team: Chechen <ce@li.org>\n"
@@ -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: 2016-03-24 06:07+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/ckb.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2014-01-21 11:05+0000\n"
11"PO-Revision-Date: 2014-01-21 11:05+0000\n"
12"Last-Translator: Aras <aras.noori@gmail.com>\n"
12"Last-Translator: Aras <aras.noori@gmail.com>\n"
13"Language-Team: Kurdish (Sorani) <ckb@li.org>\n"
13"Language-Team: Kurdish (Sorani) <ckb@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:03+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/cs.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-07-07 10:44+0000\n"
11"PO-Revision-Date: 2015-07-07 10:44+0000\n"
12"Last-Translator: Vojtěch Daněk <vdanek@outlook.com>\n"
12"Last-Translator: Vojtěch Daněk <vdanek@outlook.com>\n"
13"Language-Team: Czech <cs@li.org>\n"
13"Language-Team: Czech <cs@li.org>\n"
@@ -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: 2016-03-24 06:07+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20"Language: cs\n"
20"Language: cs\n"
21
21
22#: plugins/IntegratedLightDM/Greeter.cpp:112
22#: plugins/IntegratedLightDM/Greeter.cpp:112
@@ -453,19 +453,19 @@ msgstr ""
453msgid "Swipe up to manage the app"
453msgid "Swipe up to manage the app"
454msgstr ""
454msgstr ""
455
455
456−#: qml/Tutorial/TutorialLeft.qml:47
457−msgid "Swipe from the left edge to open the launcher"
458−msgstr ""
459−
460#: qml/Tutorial/TutorialLeftLong.qml:47
456#: qml/Tutorial/TutorialLeftLong.qml:47
461msgid "Long swipe from the left edge to open the Today scope"
457msgid "Long swipe from the left edge to open the Today scope"
462msgstr ""
458msgstr ""
463
459
464−#: qml/Tutorial/TutorialRight.qml:54
460+#: qml/Tutorial/TutorialLeft.qml:47
465−msgid "Hover your mouse on the right edge to view your open apps"
461+msgid "Swipe from the left edge to open the launcher"
466msgstr ""
462msgstr ""
467
463
468#: qml/Tutorial/TutorialRight.qml:55
464#: qml/Tutorial/TutorialRight.qml:55
465+msgid "Push your mouse against the right edge to view your open apps"
466+msgstr ""
467+
468+#: qml/Tutorial/TutorialRight.qml:56
469msgid "Short or long swipe from the right edge to view your open apps"
469msgid "Short or long swipe from the right edge to view your open apps"
470msgstr ""
470msgstr ""
471
471
po/cy.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-07-31 13:21+0000\n"
11"PO-Revision-Date: 2015-07-31 13:21+0000\n"
12"Last-Translator: Owen Llywelyn <owen.llywelyn@gmail.com>\n"
12"Last-Translator: Owen Llywelyn <owen.llywelyn@gmail.com>\n"
13"Language-Team: Welsh <cy@li.org>\n"
13"Language-Team: Welsh <cy@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==2 ? 1 : (n != 8 && n != 11) ? "
17"Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==2 ? 1 : (n != 8 && n != 11) ? "
18"2 : 3;\n"
18"2 : 3;\n"
19−"X-Launchpad-Export-Date: 2016-03-24 06:08+0000\n"
19+"X-Launchpad-Export-Date: 2016-04-27 06:03+0000\n"
20−"X-Generator: Launchpad (build 17958)\n"
20+"X-Generator: Launchpad (build 17995)\n"
21
21
22#: plugins/IntegratedLightDM/Greeter.cpp:112
22#: plugins/IntegratedLightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
@@ -457,19 +457,19 @@ msgstr ""
457msgid "Swipe up to manage the app"
457msgid "Swipe up to manage the app"
458msgstr ""
458msgstr ""
459
459
460−#: qml/Tutorial/TutorialLeft.qml:47
461−msgid "Swipe from the left edge to open the launcher"
462−msgstr ""
463−
464#: qml/Tutorial/TutorialLeftLong.qml:47
460#: qml/Tutorial/TutorialLeftLong.qml:47
465msgid "Long swipe from the left edge to open the Today scope"
461msgid "Long swipe from the left edge to open the Today scope"
466msgstr ""
462msgstr ""
467
463
468−#: qml/Tutorial/TutorialRight.qml:54
464+#: qml/Tutorial/TutorialLeft.qml:47
469−msgid "Hover your mouse on the right edge to view your open apps"
465+msgid "Swipe from the left edge to open the launcher"
470msgstr ""
466msgstr ""
471
467
472#: qml/Tutorial/TutorialRight.qml:55
468#: qml/Tutorial/TutorialRight.qml:55
469+msgid "Push your mouse against the right edge to view your open apps"
470+msgstr ""
471+
472+#: qml/Tutorial/TutorialRight.qml:56
473msgid "Short or long swipe from the right edge to view your open apps"
473msgid "Short or long swipe from the right edge to view your open apps"
474msgstr ""
474msgstr ""
475
475
po/da.po+9−9
@@ -8,7 +8,7 @@ msgid ""
8msgstr ""
8msgstr ""
9"Project-Id-Version: unity8\n"
9"Project-Id-Version: unity8\n"
10"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
11−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
11+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
12"PO-Revision-Date: 2015-07-06 12:05+0000\n"
12"PO-Revision-Date: 2015-07-06 12:05+0000\n"
13"Last-Translator: Folmer Fredslund <Unknown>\n"
13"Last-Translator: Folmer Fredslund <Unknown>\n"
14"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
14"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
@@ -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: 2016-03-24 06:07+0000\n"
19+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
20−"X-Generator: Launchpad (build 17958)\n"
20+"X-Generator: Launchpad (build 17995)\n"
21
21
22#: plugins/IntegratedLightDM/Greeter.cpp:112
22#: plugins/IntegratedLightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
@@ -451,19 +451,19 @@ msgstr ""
451msgid "Swipe up to manage the app"
451msgid "Swipe up to manage the app"
452msgstr ""
452msgstr ""
453
453
454−#: qml/Tutorial/TutorialLeft.qml:47
455−msgid "Swipe from the left edge to open the launcher"
456−msgstr ""
457−
458#: qml/Tutorial/TutorialLeftLong.qml:47
454#: qml/Tutorial/TutorialLeftLong.qml:47
459msgid "Long swipe from the left edge to open the Today scope"
455msgid "Long swipe from the left edge to open the Today scope"
460msgstr ""
456msgstr ""
461
457
462−#: qml/Tutorial/TutorialRight.qml:54
458+#: qml/Tutorial/TutorialLeft.qml:47
463−msgid "Hover your mouse on the right edge to view your open apps"
459+msgid "Swipe from the left edge to open the launcher"
464msgstr ""
460msgstr ""
465
461
466#: qml/Tutorial/TutorialRight.qml:55
462#: qml/Tutorial/TutorialRight.qml:55
463+msgid "Push your mouse against the right edge to view your open apps"
464+msgstr ""
465+
466+#: qml/Tutorial/TutorialRight.qml:56
467msgid "Short or long swipe from the right edge to view your open apps"
467msgid "Short or long swipe from the right edge to view your open apps"
468msgstr ""
468msgstr ""
469
469
po/de.po+90−78
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2016-03-13 15:41+0000\n"
11"PO-Revision-Date: 2016-03-13 15:41+0000\n"
12"Last-Translator: schuko24 <gerdsaenger@t-online.de>\n"
12"Last-Translator: schuko24 <gerdsaenger@t-online.de>\n"
13"Language-Team: German <de@li.org>\n"
13"Language-Team: German <de@li.org>\n"
@@ -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: 2016-03-24 06:07+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -188,11 +188,11 @@ msgstr "Zu Favoriten hinzufügen"
188
188
189#: qml/Dash/FiltersPopover.qml:60
189#: qml/Dash/FiltersPopover.qml:60
190msgid "Refine your results"
190msgid "Refine your results"
191−msgstr ""
191+msgstr "Ergebnisse verfeinern"
192
192
193#: qml/Dash/FiltersPopover.qml:69
193#: qml/Dash/FiltersPopover.qml:69
194msgid "Reset"
194msgid "Reset"
195−msgstr ""
195+msgstr "Zurücksetzen"
196
196
197#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
197#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
198msgid "See less"
198msgid "See less"
@@ -209,11 +209,11 @@ msgstr "Suchen"
209
209
210#: qml/Dash/PageHeaderExtraPanel.qml:55
210#: qml/Dash/PageHeaderExtraPanel.qml:55
211msgid "Recent Searches"
211msgid "Recent Searches"
212−msgstr ""
212+msgstr "Letzte Suchanfragen"
213
213
214#: qml/Dash/PageHeaderExtraPanel.qml:66
214#: qml/Dash/PageHeaderExtraPanel.qml:66
215msgid "Clear All"
215msgid "Clear All"
216−msgstr ""
216+msgstr "Alle zurücksetzen"
217
217
218#: qml/Dash/Previews/PreviewActionCombo.qml:35
218#: qml/Dash/Previews/PreviewActionCombo.qml:35
219msgid "More..."
219msgid "More..."
@@ -432,51 +432,56 @@ msgstr "Zurückrufen"
432
432
433#: qml/Stages/SideStage.qml:76
433#: qml/Stages/SideStage.qml:76
434msgid "Drag using 3 fingers any application from one window to the other"
434msgid "Drag using 3 fingers any application from one window to the other"
435−msgstr ""
435+msgstr "Eine Anwendung mit 3 Fingern von einem Fenster zum anderen ziehen"
436
436
437#: qml/Tutorial/TutorialBottom.qml:78
437#: qml/Tutorial/TutorialBottom.qml:78
438msgid "Swipe up to add a contact"
438msgid "Swipe up to add a contact"
439−msgstr ""
439+msgstr "Aufwärts wischen, um einen Kontakt hinzuzufügen"
440
440
441#: qml/Tutorial/TutorialBottom.qml:80
441#: qml/Tutorial/TutorialBottom.qml:80
442msgid "Swipe up for favorite calculations"
442msgid "Swipe up for favorite calculations"
443−msgstr ""
443+msgstr "Aufwärts wischen, um die Favoriten-Rechnungen anzuzeigen"
444
444
445#: qml/Tutorial/TutorialBottom.qml:82
445#: qml/Tutorial/TutorialBottom.qml:82
446msgid "Swipe up for recent calls"
446msgid "Swipe up for recent calls"
447−msgstr ""
447+msgstr "Aufwärts wischen, um die letzten Anrufe anzuzeigen"
448
448
449#: qml/Tutorial/TutorialBottom.qml:84
449#: qml/Tutorial/TutorialBottom.qml:84
450msgid "Swipe up to create a message"
450msgid "Swipe up to create a message"
451−msgstr ""
451+msgstr "Aufwärts wischen, um eine Nachricht zu erstellen"
452
452
453#: qml/Tutorial/TutorialBottom.qml:85
453#: qml/Tutorial/TutorialBottom.qml:85
454msgid "Swipe up to manage the app"
454msgid "Swipe up to manage the app"
455−msgstr ""
455+msgstr "Aufwärts wischen, um die Anwendung zu verwalten"
456−
457−#: qml/Tutorial/TutorialLeft.qml:47
458−msgid "Swipe from the left edge to open the launcher"
459−msgstr ""
460
456
461#: qml/Tutorial/TutorialLeftLong.qml:47
457#: qml/Tutorial/TutorialLeftLong.qml:47
462msgid "Long swipe from the left edge to open the Today scope"
458msgid "Long swipe from the left edge to open the Today scope"
463msgstr ""
459msgstr ""
460+"Langgezogene Wischgeste von der linken Kante, um den Heute-Scope zu öffnen"
464
461
465−#: qml/Tutorial/TutorialRight.qml:54
462+#: qml/Tutorial/TutorialLeft.qml:47
466−msgid "Hover your mouse on the right edge to view your open apps"
463+msgid "Swipe from the left edge to open the launcher"
467−msgstr ""
464+msgstr "Von der linken Kante wischen, um den Starter zu öffnen"
468
465
469#: qml/Tutorial/TutorialRight.qml:55
466#: qml/Tutorial/TutorialRight.qml:55
467+msgid "Push your mouse against the right edge to view your open apps"
468+msgstr ""
469+
470+#: qml/Tutorial/TutorialRight.qml:56
470msgid "Short or long swipe from the right edge to view your open apps"
471msgid "Short or long swipe from the right edge to view your open apps"
471msgstr ""
472msgstr ""
473+"Kurze oder langgezogene Wischgeste von der rechten Kante, um die offenen "
474+"Anwendungen zu sehen"
472
475
473#: qml/Tutorial/TutorialTop.qml:53
476#: qml/Tutorial/TutorialTop.qml:53
474msgid "Swipe from the top right edge to open the notification bar"
477msgid "Swipe from the top right edge to open the notification bar"
475msgstr ""
478msgstr ""
479+"Vom rechten oberen Rand her wischen, um die Benachrichtigungsleiste zu öffnen"
476
480
477#: qml/Tutorial/TutorialTop.qml:54
481#: qml/Tutorial/TutorialTop.qml:54
478msgid "Swipe from the top edge to open the notification bar"
482msgid "Swipe from the top edge to open the notification bar"
479msgstr ""
483msgstr ""
484+"Vom oberen Rand her wischen, um die Benachrichtigungsleiste zu öffnen"
480
485
481#: qml/Wizard/Page.qml:54
486#: qml/Wizard/Page.qml:54
482msgctxt "Button: Go back one page in the Wizard"
487msgctxt "Button: Go back one page in the Wizard"
@@ -485,7 +490,7 @@ msgstr "Zurück"
485
490
486#: qml/Wizard/Pages/10-welcome.qml:27
491#: qml/Wizard/Pages/10-welcome.qml:27
487msgid "Language"
492msgid "Language"
488−msgstr ""
493+msgstr "Sprache"
489
494
490#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
495#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
491#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
496#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
@@ -494,7 +499,7 @@ msgstr ""
494#: qml/Wizard/Pages/passcode-desktop.qml:124
499#: qml/Wizard/Pages/passcode-desktop.qml:124
495#: qml/Wizard/Pages/password-set.qml:141
500#: qml/Wizard/Pages/password-set.qml:141
496msgid "Next"
501msgid "Next"
497−msgstr ""
502+msgstr "Weiter"
498
503
499#: qml/Wizard/Pages/30-wifi.qml:29
504#: qml/Wizard/Pages/30-wifi.qml:29
500msgid "Connect to Wi‑Fi"
505msgid "Connect to Wi‑Fi"
@@ -502,15 +507,15 @@ msgstr "Mit WLAN verbinden"
502
507
503#: qml/Wizard/Pages/30-wifi.qml:130
508#: qml/Wizard/Pages/30-wifi.qml:130
504msgid "Connected"
509msgid "Connected"
505−msgstr ""
510+msgstr "Verbunden"
506
511
507#: qml/Wizard/Pages/30-wifi.qml:163
512#: qml/Wizard/Pages/30-wifi.qml:163
508msgid "Available Wi-Fi networks"
513msgid "Available Wi-Fi networks"
509−msgstr ""
514+msgstr "Verfügbare Funknetzwerke"
510
515
511#: qml/Wizard/Pages/30-wifi.qml:164
516#: qml/Wizard/Pages/30-wifi.qml:164
512msgid "No available Wi-Fi networks"
517msgid "No available Wi-Fi networks"
513−msgstr ""
518+msgstr "Keine Funknetzwerke verfügbar"
514
519
515#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
520#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
516#: qml/Wizard/Pages/sim.qml:101
521#: qml/Wizard/Pages/sim.qml:101
@@ -519,98 +524,102 @@ msgstr "Überspringen"
519
524
520#: qml/Wizard/Pages/40-location.qml:27
525#: qml/Wizard/Pages/40-location.qml:27
521msgid "Location Services"
526msgid "Location Services"
522−msgstr ""
527+msgstr "Standortdienste"
523
528
524#: qml/Wizard/Pages/40-location.qml:83
529#: qml/Wizard/Pages/40-location.qml:83
525msgid ""
530msgid ""
526"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
531"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
527"(recommended)"
532"(recommended)"
528msgstr ""
533msgstr ""
534+"GPS, WLAN-Netzwerke und Mobilfunknetzwerk anonymisiert für die "
535+"Standortbestimmung nutzen (empfohlen)"
529
536
530#: qml/Wizard/Pages/40-location.qml:105
537#: qml/Wizard/Pages/40-location.qml:105
531#, qt-format
538#, qt-format
532msgid "By selecting this option you agree to the Nokia HERE %1."
539msgid "By selecting this option you agree to the Nokia HERE %1."
533−msgstr ""
540+msgstr "Mit dem Auswählen dieser Option akzeptieren Sie die Nokia HERE %1."
534
541
535#: qml/Wizard/Pages/40-location.qml:106
542#: qml/Wizard/Pages/40-location.qml:106
536msgctxt "part of: Nokia HERE terms and conditions"
543msgctxt "part of: Nokia HERE terms and conditions"
537msgid "terms and conditions"
544msgid "terms and conditions"
538−msgstr ""
545+msgstr "Nutzungsbedingungen"
539
546
540#: qml/Wizard/Pages/40-location.qml:160
547#: qml/Wizard/Pages/40-location.qml:160
541msgid "GPS only"
548msgid "GPS only"
542−msgstr ""
549+msgstr "Nur GPS"
543
550
544#: qml/Wizard/Pages/40-location.qml:214
551#: qml/Wizard/Pages/40-location.qml:214
545msgid "Don't use my location"
552msgid "Don't use my location"
546−msgstr ""
553+msgstr "Meinen Standort nicht verwenden"
547
554
548#: qml/Wizard/Pages/40-location.qml:260
555#: qml/Wizard/Pages/40-location.qml:260
549msgid "You can change it later in System Settings."
556msgid "You can change it later in System Settings."
550−msgstr ""
557+msgstr "Dies kann später in den Systemeinstellungen geändert werden."
551
558
552#: qml/Wizard/Pages/50-timezone.qml:29
559#: qml/Wizard/Pages/50-timezone.qml:29
553msgid "Time Zone"
560msgid "Time Zone"
554−msgstr ""
561+msgstr "Zeitzone"
555
562
556#: qml/Wizard/Pages/50-timezone.qml:178
563#: qml/Wizard/Pages/50-timezone.qml:178
557msgid "Enter your city"
564msgid "Enter your city"
558−msgstr ""
565+msgstr "Bitte Ihre Stadt eingeben"
559
566
560#: qml/Wizard/Pages/60-account.qml:24
567#: qml/Wizard/Pages/60-account.qml:24
561msgid "Personalize Your Device"
568msgid "Personalize Your Device"
562−msgstr ""
569+msgstr "Ihr Gerät personalisieren"
563
570
564#: qml/Wizard/Pages/60-account.qml:48
571#: qml/Wizard/Pages/60-account.qml:48
565msgid "Preferred Name"
572msgid "Preferred Name"
566−msgstr ""
573+msgstr "Bevorzugter Name"
567
574
568#: qml/Wizard/Pages/70-passwd-type.qml:39
575#: qml/Wizard/Pages/70-passwd-type.qml:39
569msgid "Lock Screen"
576msgid "Lock Screen"
570−msgstr ""
577+msgstr "Sperrbildschirm"
571
578
572#: qml/Wizard/Pages/70-passwd-type.qml:101
579#: qml/Wizard/Pages/70-passwd-type.qml:101
573msgctxt "Label: Type of security method"
580msgctxt "Label: Type of security method"
574msgid "Create new password"
581msgid "Create new password"
575−msgstr ""
582+msgstr "Neues Passwort erstellen"
576
583
577#: qml/Wizard/Pages/70-passwd-type.qml:103
584#: qml/Wizard/Pages/70-passwd-type.qml:103
578msgctxt "Label: Type of security method"
585msgctxt "Label: Type of security method"
579msgid "Create passcode (numbers only)"
586msgid "Create passcode (numbers only)"
580−msgstr ""
587+msgstr "PIN erstellen (nur Ziffern)"
581
588
582#: qml/Wizard/Pages/70-passwd-type.qml:105
589#: qml/Wizard/Pages/70-passwd-type.qml:105
583msgctxt "Label: Type of security method"
590msgctxt "Label: Type of security method"
584msgid "No lock code"
591msgid "No lock code"
585−msgstr ""
592+msgstr "Kein Sperrcode"
586
593
587#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
594#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
588msgid "Privacy Policy"
595msgid "Privacy Policy"
589−msgstr ""
596+msgstr "Datenschutzerklärung"
590
597
591#: qml/Wizard/Pages/75-report-check.qml:26
598#: qml/Wizard/Pages/75-report-check.qml:26
592msgid "Help Us Improve"
599msgid "Help Us Improve"
593−msgstr ""
600+msgstr "Bei der Verbesserung unterstützen"
594
601
595#: qml/Wizard/Pages/75-report-check.qml:59
602#: qml/Wizard/Pages/75-report-check.qml:59
596msgid "Improve system performance by sending us crashes and error reports."
603msgid "Improve system performance by sending us crashes and error reports."
597msgstr ""
604msgstr ""
605+"Bei der Systemverbesserung unterstützen, in dem Absturz- und Fehlerberichte "
606+"gesendet werden."
598
607
599#: qml/Wizard/Pages/75-report-check.qml:60
608#: qml/Wizard/Pages/75-report-check.qml:60
600msgid "Privacy policy"
609msgid "Privacy policy"
601−msgstr ""
610+msgstr "Datenschutzerklärung"
602
611
603#: qml/Wizard/Pages/80-finished.qml:89
612#: qml/Wizard/Pages/80-finished.qml:89
604msgid "Welcome to Ubuntu"
613msgid "Welcome to Ubuntu"
605−msgstr ""
614+msgstr "Willkommen bei Ubuntu"
606
615
607#: qml/Wizard/Pages/80-finished.qml:104
616#: qml/Wizard/Pages/80-finished.qml:104
608msgid "You are ready to use your device now"
617msgid "You are ready to use your device now"
609−msgstr ""
618+msgstr "Sie können Ihr Gerät nun verwenden"
610
619
611#: qml/Wizard/Pages/80-finished.qml:124
620#: qml/Wizard/Pages/80-finished.qml:124
612msgid "Get Started"
621msgid "Get Started"
613−msgstr ""
622+msgstr "Erste Schritte"
614
623
615#: qml/Wizard/Pages/here-terms.qml:25
624#: qml/Wizard/Pages/here-terms.qml:25
616msgid "Terms & Conditions"
625msgid "Terms & Conditions"
@@ -619,6 +628,8 @@ msgstr "Nutzungsbedingungen"
619#: qml/Wizard/Pages/here-terms.qml:69
628#: qml/Wizard/Pages/here-terms.qml:69
620msgid "Your device uses positioning technologies provided by HERE."
629msgid "Your device uses positioning technologies provided by HERE."
621msgstr ""
630msgstr ""
631+"Das Gerät verwendet Standortermittlungsdienste, die durch HERE "
632+"bereitgestellt werden."
622
633
623#: qml/Wizard/Pages/here-terms.qml:81
634#: qml/Wizard/Pages/here-terms.qml:81
624msgid ""
635msgid ""
@@ -626,21 +637,26 @@ msgid ""
626"collects information about nearby cell towers and Wi-Fi hotspots around your "
637"collects information about nearby cell towers and Wi-Fi hotspots around your "
627"current location whenever your position is being found."
638"current location whenever your position is being found."
628msgstr ""
639msgstr ""
640+"Um die Standortbestimmung zu ermöglichen und zu verbessern, sammelt HERE "
641+"Informationen über nahegelegene Netzwerkstationen und WLAN-Hotspots in der "
642+"Umgebung, sobald eine Position erfasst wurde."
629
643
630#: qml/Wizard/Pages/here-terms.qml:93
644#: qml/Wizard/Pages/here-terms.qml:93
631msgid ""
645msgid ""
632"The information collected is used to analyze the service and to improve the "
646"The information collected is used to analyze the service and to improve the "
633"use of service, but not to identify you personally."
647"use of service, but not to identify you personally."
634msgstr ""
648msgstr ""
649+"Die gesammelte Information wird zur Analyse und zur Nutzungsverbesserung des "
650+"Dienstes genutzt. Nicht aber zur persönlichen Identifikation."
635
651
636#: qml/Wizard/Pages/here-terms.qml:106
652#: qml/Wizard/Pages/here-terms.qml:106
637#, qt-format
653#, qt-format
638msgid "By continuing, you agree to the HERE platform %1 and %2."
654msgid "By continuing, you agree to the HERE platform %1 and %2."
639−msgstr ""
655+msgstr "Wenn Sie fortfahren, stimmen Sie mit den HERE %1 und %2 überein."
640
656
641#: qml/Wizard/Pages/here-terms.qml:107
657#: qml/Wizard/Pages/here-terms.qml:107
642msgid "Service Terms"
658msgid "Service Terms"
643−msgstr ""
659+msgstr "Bedingungen des Dienstes"
644
660
645#: qml/Wizard/Pages/passcode-confirm.qml:43
661#: qml/Wizard/Pages/passcode-confirm.qml:43
646#: qml/Wizard/Pages/passcode-desktop.qml:80
662#: qml/Wizard/Pages/passcode-desktop.qml:80
@@ -649,69 +665,70 @@ msgstr "PIN bestätigen"
649
665
650#: qml/Wizard/Pages/passcode-confirm.qml:45
666#: qml/Wizard/Pages/passcode-confirm.qml:45
651msgid "Incorrect passcode."
667msgid "Incorrect passcode."
652−msgstr ""
668+msgstr "Falsche PIN."
653
669
654#: qml/Wizard/Pages/passcode-confirm.qml:45
670#: qml/Wizard/Pages/passcode-confirm.qml:45
655msgctxt "Enter the passcode again"
671msgctxt "Enter the passcode again"
656msgid "Please re-enter."
672msgid "Please re-enter."
657−msgstr ""
673+msgstr "Bitte erneut eingeben."
658
674
659#: qml/Wizard/Pages/passcode-desktop.qml:30
675#: qml/Wizard/Pages/passcode-desktop.qml:30
660msgid "Lock Screen Passcode"
676msgid "Lock Screen Passcode"
661−msgstr ""
677+msgstr "Sperrbildschirm-PIN"
662
678
663#: qml/Wizard/Pages/passcode-desktop.qml:56
679#: qml/Wizard/Pages/passcode-desktop.qml:56
664msgid "Enter 4 numbers to setup your passcode"
680msgid "Enter 4 numbers to setup your passcode"
665−msgstr ""
681+msgstr "Geben Sie 4 Ziffern ein, um Ihre PIN einzurichten"
666
682
667#: qml/Wizard/Pages/passcode-desktop.qml:65
683#: qml/Wizard/Pages/passcode-desktop.qml:65
668#: qml/Wizard/Pages/passcode-set.qml:54
684#: qml/Wizard/Pages/passcode-set.qml:54
669msgid "Choose passcode"
685msgid "Choose passcode"
670−msgstr ""
686+msgstr "PIN wählen"
671
687
672#: qml/Wizard/Pages/passcode-desktop.qml:105
688#: qml/Wizard/Pages/passcode-desktop.qml:105
673msgid "Passcode too short"
689msgid "Passcode too short"
674−msgstr ""
690+msgstr "PIN zu kurz"
675
691
676#: qml/Wizard/Pages/passcode-desktop.qml:107
692#: qml/Wizard/Pages/passcode-desktop.qml:107
677msgid "Passcodes match"
693msgid "Passcodes match"
678−msgstr ""
694+msgstr "PINs stimmen überein"
679
695
680#: qml/Wizard/Pages/passcode-desktop.qml:109
696#: qml/Wizard/Pages/passcode-desktop.qml:109
681msgid "Passcodes do not match"
697msgid "Passcodes do not match"
682−msgstr ""
698+msgstr "PINs stimmen nicht überein"
683
699
684#: qml/Wizard/Pages/passcode-set.qml:62
700#: qml/Wizard/Pages/passcode-set.qml:62
685msgid "Passcode must be 4 characters long"
701msgid "Passcode must be 4 characters long"
686−msgstr ""
702+msgstr "PIN muss 4 Ziffern lang sein"
687
703
688#: qml/Wizard/Pages/password-set.qml:30
704#: qml/Wizard/Pages/password-set.qml:30
689msgid "Lock Screen Password"
705msgid "Lock Screen Password"
690−msgstr ""
706+msgstr "Sperrbildschirm-Passwort"
691
707
692#: qml/Wizard/Pages/password-set.qml:61
708#: qml/Wizard/Pages/password-set.qml:61
693msgid "Enter at least 8 characters"
709msgid "Enter at least 8 characters"
694−msgstr ""
710+msgstr "Geben Sie mindestens 8 Zeichen ein"
695
711
696#: qml/Wizard/Pages/password-set.qml:73
712#: qml/Wizard/Pages/password-set.qml:73
697msgid "Choose password"
713msgid "Choose password"
698−msgstr ""
714+msgstr "Wählen Sie ein Passwort"
699
715
700#: qml/Wizard/Pages/password-set.qml:103
716#: qml/Wizard/Pages/password-set.qml:103
701msgid "Confirm password"
717msgid "Confirm password"
702−msgstr ""
718+msgstr "Passwort bestätigen"
703
719
704#: qml/Wizard/Pages/sim.qml:27
720#: qml/Wizard/Pages/sim.qml:27
705msgid "No SIM card installed"
721msgid "No SIM card installed"
706−msgstr ""
722+msgstr "Keine SIM-Karte im Gerät"
707
723
708#: qml/Wizard/Pages/sim.qml:54
724#: qml/Wizard/Pages/sim.qml:54
709msgid "SIM card added"
725msgid "SIM card added"
710−msgstr ""
726+msgstr "SIM-Karte hinzugefügt"
711
727
712#: qml/Wizard/Pages/sim.qml:55
728#: qml/Wizard/Pages/sim.qml:55
713msgid "You must restart the device to access the mobile network."
729msgid "You must restart the device to access the mobile network."
714msgstr ""
730msgstr ""
731+"Das Gerät muss neu gestartet werden, um auf das Mobilfunknetz zuzugreifen."
715
732
716#: qml/Wizard/Pages/sim.qml:59
733#: qml/Wizard/Pages/sim.qml:59
717msgid "Restart"
734msgid "Restart"
@@ -719,35 +736,35 @@ msgstr "Neustarten"
719
736
720#: qml/Wizard/Pages/sim.qml:78
737#: qml/Wizard/Pages/sim.qml:78
721msgid "You won’t be able to make calls or use text messaging without a SIM."
738msgid "You won’t be able to make calls or use text messaging without a SIM."
722−msgstr ""
739+msgstr "Anrufe oder SMS-Nachrichten sind ohne eine SIM-Karte nicht möglich."
723
740
724#: qml/Wizard/Pages/sim.qml:90
741#: qml/Wizard/Pages/sim.qml:90
725msgid "To proceed with no SIM tap Skip."
742msgid "To proceed with no SIM tap Skip."
726−msgstr ""
743+msgstr "Um ohne SIM-Karte fortzufahren, Überspringen drücken."
727
744
728#: qml/Wizard/PasswordMeter.qml:87
745#: qml/Wizard/PasswordMeter.qml:87
729msgid "Passwords match"
746msgid "Passwords match"
730−msgstr ""
747+msgstr "Passwörter stimmen überein"
731
748
732#: qml/Wizard/PasswordMeter.qml:89
749#: qml/Wizard/PasswordMeter.qml:89
733msgid "Passwords do not match"
750msgid "Passwords do not match"
734−msgstr ""
751+msgstr "Passwörter stimmen nicht überein"
735
752
736#: qml/Wizard/PasswordMeter.qml:93
753#: qml/Wizard/PasswordMeter.qml:93
737msgid "Strong password"
754msgid "Strong password"
738−msgstr ""
755+msgstr "Starkes Passwort"
739
756
740#: qml/Wizard/PasswordMeter.qml:95
757#: qml/Wizard/PasswordMeter.qml:95
741msgid "Fair password"
758msgid "Fair password"
742−msgstr ""
759+msgstr "Ausreichendes Passwort"
743
760
744#: qml/Wizard/PasswordMeter.qml:97
761#: qml/Wizard/PasswordMeter.qml:97
745msgid "Weak password"
762msgid "Weak password"
746−msgstr ""
763+msgstr "Schwaches Passwort"
747
764
748#: qml/Wizard/PasswordMeter.qml:99
765#: qml/Wizard/PasswordMeter.qml:99
749msgid "Very weak password"
766msgid "Very weak password"
750−msgstr ""
767+msgstr "Sehr schwaches Passwort"
751
768
752#~ msgid "Confirm"
769#~ msgid "Confirm"
753#~ msgstr "Bestätigen"
770#~ msgstr "Bestätigen"
@@ -1067,11 +1084,6 @@ msgstr ""
1067#~ msgid "Call back"
1084#~ msgid "Call back"
1068#~ msgstr "Zurückrufen"
1085#~ msgstr "Zurückrufen"
1069
1086
1070−#~ msgid "Your device is now ready to use."
1087+#~ msgid "Hover your mouse on the right edge to view your open apps"
1071−#~ msgstr "Ihr Gerät ist nun einsatzbereit."
1088+#~ msgstr ""
1072−
1089+#~ "Die Maus auf den rechten Rand bewegen, um die offenen Anwendungen zu sehen"
1073−#~ msgid "Welcome to your Ubuntu device."
1074−#~ msgstr "Willkommen auf Ihrem Ubuntu-Gerät."
1075−
1076−#~ msgid "Please select how you’d like to unlock your device."
1077−#~ msgstr "Bitte wählen Sie, wie Sie dieses Gerät entsperren möchten."
po/el.po+79−66
@@ -7,16 +7,16 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11−"PO-Revision-Date: 2015-12-04 09:38+0000\n"
11+"PO-Revision-Date: 2016-04-25 16:24+0000\n"
12"Last-Translator: Aggelos Arnaoutis <angelosarn@hotmail.com>\n"
12"Last-Translator: Aggelos Arnaoutis <angelosarn@hotmail.com>\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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -43,13 +43,13 @@ msgstr "Κλειδωμένη συσκευή"
43msgid "You have been locked out due to too many failed passphrase attempts."
43msgid "You have been locked out due to too many failed passphrase attempts."
44msgstr ""
44msgstr ""
45"Δεν σας επιτρέπεται η πρόσβαση καθώς προσπαθήσατε επανηλλημένως να "
45"Δεν σας επιτρέπεται η πρόσβαση καθώς προσπαθήσατε επανηλλημένως να "
46−"συνδεθείτε με λάθος κωδικό."
46+"συνδεθείτε με λάθος συνθηματικό."
47
47
48#: qml/Components/DelayedLockscreen.qml:65
48#: qml/Components/DelayedLockscreen.qml:65
49msgid "You have been locked out due to too many failed passcode attempts."
49msgid "You have been locked out due to too many failed passcode attempts."
50msgstr ""
50msgstr ""
51"Δεν σας επιτρέπεται η πρόσβαση καθώς προσπαθήσατε επανηλλημένως να "
51"Δεν σας επιτρέπεται η πρόσβαση καθώς προσπαθήσατε επανηλλημένως να "
52−"συνδεθείτε με λάθος κωδικό."
52+"συνδεθείτε με λάθος κωδικό πρόσβασης."
53
53
54#: qml/Components/DelayedLockscreen.qml:74
54#: qml/Components/DelayedLockscreen.qml:74
55#, qt-format
55#, qt-format
@@ -188,11 +188,11 @@ msgstr "Προσθήκη στα αγαπημένα"
188
188
189#: qml/Dash/FiltersPopover.qml:60
189#: qml/Dash/FiltersPopover.qml:60
190msgid "Refine your results"
190msgid "Refine your results"
191−msgstr ""
191+msgstr "Βελτιώστε τα αποτελέσματά σας"
192
192
193#: qml/Dash/FiltersPopover.qml:69
193#: qml/Dash/FiltersPopover.qml:69
194msgid "Reset"
194msgid "Reset"
195−msgstr ""
195+msgstr "Επαναφορά"
196
196
197#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
197#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
198msgid "See less"
198msgid "See less"
@@ -209,11 +209,11 @@ msgstr "Αναζήτηση"
209
209
210#: qml/Dash/PageHeaderExtraPanel.qml:55
210#: qml/Dash/PageHeaderExtraPanel.qml:55
211msgid "Recent Searches"
211msgid "Recent Searches"
212−msgstr ""
212+msgstr "Πρόσφατες αναζητήσεις"
213
213
214#: qml/Dash/PageHeaderExtraPanel.qml:66
214#: qml/Dash/PageHeaderExtraPanel.qml:66
215msgid "Clear All"
215msgid "Clear All"
216−msgstr ""
216+msgstr "Καθαρισμός όλων"
217
217
218#: qml/Dash/Previews/PreviewActionCombo.qml:35
218#: qml/Dash/Previews/PreviewActionCombo.qml:35
219msgid "More..."
219msgid "More..."
@@ -269,6 +269,8 @@ msgid ""
269"Your device is now connected to an external display. Use this screen as a "
269"Your device is now connected to an external display. Use this screen as a "
270"touch pad to interact with the pointer."
270"touch pad to interact with the pointer."
271msgstr ""
271msgstr ""
272+"Η συσκεύη σας τώρα είναι συνδεδεμένη με μια εξωτερική οθόνη. Χρησιμοποιείστε "
273+"αυτήν την οθόνη ως επιφάνεια αφής για να αλληλεπηδράσετε με τον δείκτη."
272
274
273#: qml/Greeter/CoverPage.qml:118
275#: qml/Greeter/CoverPage.qml:118
274msgid "Unlock"
276msgid "Unlock"
@@ -284,7 +286,7 @@ msgstr "Ακουμπήστε για να ξεκλειδώσετε"
284
286
285#: qml/Greeter/NarrowView.qml:54
287#: qml/Greeter/NarrowView.qml:54
286msgid "Sorry, incorrect passphrase."
288msgid "Sorry, incorrect passphrase."
287−msgstr "Συγνώμη, μη έγκυρη συνθηματική φράση."
289+msgstr "Συγνώμη, μη έγκυρο συνθηματικό."
288
290
289#: qml/Greeter/NarrowView.qml:55
291#: qml/Greeter/NarrowView.qml:55
290msgid "Sorry, incorrect passcode."
292msgid "Sorry, incorrect passcode."
@@ -299,9 +301,8 @@ msgid ""
299"If passphrase is entered incorrectly, your phone will conduct a factory "
301"If passphrase is entered incorrectly, your phone will conduct a factory "
300"reset and all personal data will be deleted."
302"reset and all personal data will be deleted."
301msgstr ""
303msgstr ""
302−"Εάν η συνθηματική φράση που θα εισάγετε είναι μη έγκυρη, το τηλέφωνο σας θα "
304+"Εάν το συνθηματικό που θα εισάγετε είναι μη έγκυρο, το τηλέφωνο σας θα κάνει "
303−"κάνει επαναφορά των εργοστασιακών ρυθμίσεων και όλα τα δεδομένα σας θα "
305+"επαναφορά των εργοστασιακών ρυθμίσεων και όλα τα δεδομένα σας θα διαγραφούν."
304−"διαγραφούν."
305
306
306#: qml/Greeter/NarrowView.qml:59
307#: qml/Greeter/NarrowView.qml:59
307msgid ""
308msgid ""
@@ -323,7 +324,7 @@ msgstr "Εισαγωγή συνθηματικού"
323
324
324#: qml/Greeter/NarrowView.qml:118
325#: qml/Greeter/NarrowView.qml:118
325msgid "Enter passcode"
326msgid "Enter passcode"
326−msgstr "Εισαγωγή κωδικού"
327+msgstr "Εισαγωγή κωδικού πρόσβασης"
327
328
328#: qml/Greeter/NarrowView.qml:119
329#: qml/Greeter/NarrowView.qml:119
329#, qt-format
330#, qt-format
@@ -433,6 +434,8 @@ msgstr "Επανάκληση"
433#: qml/Stages/SideStage.qml:76
434#: qml/Stages/SideStage.qml:76
434msgid "Drag using 3 fingers any application from one window to the other"
435msgid "Drag using 3 fingers any application from one window to the other"
435msgstr ""
436msgstr ""
437+"Σύρετε με την χρήση των 3 δακτύλων οποιαδήποτε εφαρμογή από ένα παράθυρο σε "
438+"άλλο"
436
439
437#: qml/Tutorial/TutorialBottom.qml:78
440#: qml/Tutorial/TutorialBottom.qml:78
438msgid "Swipe up to add a contact"
441msgid "Swipe up to add a contact"
@@ -454,19 +457,19 @@ msgstr ""
454msgid "Swipe up to manage the app"
457msgid "Swipe up to manage the app"
455msgstr ""
458msgstr ""
456
459
457−#: qml/Tutorial/TutorialLeft.qml:47
458−msgid "Swipe from the left edge to open the launcher"
459−msgstr ""
460−
461#: qml/Tutorial/TutorialLeftLong.qml:47
460#: qml/Tutorial/TutorialLeftLong.qml:47
462msgid "Long swipe from the left edge to open the Today scope"
461msgid "Long swipe from the left edge to open the Today scope"
463msgstr ""
462msgstr ""
464
463
465−#: qml/Tutorial/TutorialRight.qml:54
464+#: qml/Tutorial/TutorialLeft.qml:47
466−msgid "Hover your mouse on the right edge to view your open apps"
465+msgid "Swipe from the left edge to open the launcher"
467msgstr ""
466msgstr ""
468
467
469#: qml/Tutorial/TutorialRight.qml:55
468#: qml/Tutorial/TutorialRight.qml:55
469+msgid "Push your mouse against the right edge to view your open apps"
470+msgstr ""
471+
472+#: qml/Tutorial/TutorialRight.qml:56
470msgid "Short or long swipe from the right edge to view your open apps"
473msgid "Short or long swipe from the right edge to view your open apps"
471msgstr ""
474msgstr ""
472
475
@@ -485,7 +488,7 @@ msgstr "Πίσω"
485
488
486#: qml/Wizard/Pages/10-welcome.qml:27
489#: qml/Wizard/Pages/10-welcome.qml:27
487msgid "Language"
490msgid "Language"
488−msgstr ""
491+msgstr "Γλώσσα"
489
492
490#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
493#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
491#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
494#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
@@ -494,7 +497,7 @@ msgstr ""
494#: qml/Wizard/Pages/passcode-desktop.qml:124
497#: qml/Wizard/Pages/passcode-desktop.qml:124
495#: qml/Wizard/Pages/password-set.qml:141
498#: qml/Wizard/Pages/password-set.qml:141
496msgid "Next"
499msgid "Next"
497−msgstr ""
500+msgstr "Επόμενο"
498
501
499#: qml/Wizard/Pages/30-wifi.qml:29
502#: qml/Wizard/Pages/30-wifi.qml:29
500msgid "Connect to Wi‑Fi"
503msgid "Connect to Wi‑Fi"
@@ -502,15 +505,15 @@ msgstr "Σύνδεση σε δίκτυο Wi-Fi"
502
505
503#: qml/Wizard/Pages/30-wifi.qml:130
506#: qml/Wizard/Pages/30-wifi.qml:130
504msgid "Connected"
507msgid "Connected"
505−msgstr ""
508+msgstr "Συνδεδεμένο"
506
509
507#: qml/Wizard/Pages/30-wifi.qml:163
510#: qml/Wizard/Pages/30-wifi.qml:163
508msgid "Available Wi-Fi networks"
511msgid "Available Wi-Fi networks"
509−msgstr ""
512+msgstr "Διαθέσιμα δίκτυα Wi-Fi"
510
513
511#: qml/Wizard/Pages/30-wifi.qml:164
514#: qml/Wizard/Pages/30-wifi.qml:164
512msgid "No available Wi-Fi networks"
515msgid "No available Wi-Fi networks"
513−msgstr ""
516+msgstr "Κανένα διαθέσιμο δίκτυο Wi-Fi"
514
517
515#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
518#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
516#: qml/Wizard/Pages/sim.qml:101
519#: qml/Wizard/Pages/sim.qml:101
@@ -519,7 +522,7 @@ msgstr "Παράβλεψη"
519
522
520#: qml/Wizard/Pages/40-location.qml:27
523#: qml/Wizard/Pages/40-location.qml:27
521msgid "Location Services"
524msgid "Location Services"
522−msgstr ""
525+msgstr "Υπηρεσίες τοποθεσίας"
523
526
524#: qml/Wizard/Pages/40-location.qml:83
527#: qml/Wizard/Pages/40-location.qml:83
525msgid ""
528msgid ""
@@ -531,82 +534,85 @@ msgstr ""
531#, qt-format
534#, qt-format
532msgid "By selecting this option you agree to the Nokia HERE %1."
535msgid "By selecting this option you agree to the Nokia HERE %1."
533msgstr ""
536msgstr ""
537+"Με το να επιλέξετε αυτήν την επιλογή συμφωνείτε με τους %1 Nokia HERE."
534
538
535#: qml/Wizard/Pages/40-location.qml:106
539#: qml/Wizard/Pages/40-location.qml:106
536msgctxt "part of: Nokia HERE terms and conditions"
540msgctxt "part of: Nokia HERE terms and conditions"
537msgid "terms and conditions"
541msgid "terms and conditions"
538−msgstr ""
542+msgstr "όρους χρήσης"
539
543
540#: qml/Wizard/Pages/40-location.qml:160
544#: qml/Wizard/Pages/40-location.qml:160
541msgid "GPS only"
545msgid "GPS only"
542−msgstr ""
546+msgstr "Μόνο GPS"
543
547
544#: qml/Wizard/Pages/40-location.qml:214
548#: qml/Wizard/Pages/40-location.qml:214
545msgid "Don't use my location"
549msgid "Don't use my location"
546−msgstr ""
550+msgstr "Μην χρησιμοποιήσεις την τοποθεσία μου"
547
551
548#: qml/Wizard/Pages/40-location.qml:260
552#: qml/Wizard/Pages/40-location.qml:260
549msgid "You can change it later in System Settings."
553msgid "You can change it later in System Settings."
550−msgstr ""
554+msgstr "Μπορείτε να το αλλάξετε αργότερα στις Ρυθμίσεις συστήματος."
551
555
552#: qml/Wizard/Pages/50-timezone.qml:29
556#: qml/Wizard/Pages/50-timezone.qml:29
553msgid "Time Zone"
557msgid "Time Zone"
554−msgstr ""
558+msgstr "Ζώνη ώρας"
555
559
556#: qml/Wizard/Pages/50-timezone.qml:178
560#: qml/Wizard/Pages/50-timezone.qml:178
557msgid "Enter your city"
561msgid "Enter your city"
558−msgstr ""
562+msgstr "Εισάγετε την πόλη σας"
559
563
560#: qml/Wizard/Pages/60-account.qml:24
564#: qml/Wizard/Pages/60-account.qml:24
561msgid "Personalize Your Device"
565msgid "Personalize Your Device"
562−msgstr ""
566+msgstr "Εξατομικεύστε την συσκευή σας."
563
567
564#: qml/Wizard/Pages/60-account.qml:48
568#: qml/Wizard/Pages/60-account.qml:48
565msgid "Preferred Name"
569msgid "Preferred Name"
566−msgstr ""
570+msgstr "Προτιμώμενο όνομα"
567
571
568#: qml/Wizard/Pages/70-passwd-type.qml:39
572#: qml/Wizard/Pages/70-passwd-type.qml:39
569msgid "Lock Screen"
573msgid "Lock Screen"
570−msgstr ""
574+msgstr "Κλείδωμα οθόνης"
571
575
572#: qml/Wizard/Pages/70-passwd-type.qml:101
576#: qml/Wizard/Pages/70-passwd-type.qml:101
573msgctxt "Label: Type of security method"
577msgctxt "Label: Type of security method"
574msgid "Create new password"
578msgid "Create new password"
575−msgstr ""
579+msgstr "Δημιουργία νέου κωδικού πρόσβασης"
576
580
577#: qml/Wizard/Pages/70-passwd-type.qml:103
581#: qml/Wizard/Pages/70-passwd-type.qml:103
578msgctxt "Label: Type of security method"
582msgctxt "Label: Type of security method"
579msgid "Create passcode (numbers only)"
583msgid "Create passcode (numbers only)"
580−msgstr ""
584+msgstr "Δημιουργία κωδικού πρόσβασης (αριθμοί μόνο)"
581
585
582#: qml/Wizard/Pages/70-passwd-type.qml:105
586#: qml/Wizard/Pages/70-passwd-type.qml:105
583msgctxt "Label: Type of security method"
587msgctxt "Label: Type of security method"
584msgid "No lock code"
588msgid "No lock code"
585−msgstr ""
589+msgstr "Κανένας κωδικός κλειδώματος"
586
590
587#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
591#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
588msgid "Privacy Policy"
592msgid "Privacy Policy"
589−msgstr ""
593+msgstr "Πολιτική απορρήτου"
590
594
591#: qml/Wizard/Pages/75-report-check.qml:26
595#: qml/Wizard/Pages/75-report-check.qml:26
592msgid "Help Us Improve"
596msgid "Help Us Improve"
593−msgstr ""
597+msgstr "Βοηθήστε μας να βελτιωθούμε"
594
598
595#: qml/Wizard/Pages/75-report-check.qml:59
599#: qml/Wizard/Pages/75-report-check.qml:59
596msgid "Improve system performance by sending us crashes and error reports."
600msgid "Improve system performance by sending us crashes and error reports."
597msgstr ""
601msgstr ""
602+"Βελτιώστε την απόδοση συστήματος με το να στέλνετε σε εμάς αναφορές "
603+"κατάρρευσης και σφαλμάτων."
598
604
599#: qml/Wizard/Pages/75-report-check.qml:60
605#: qml/Wizard/Pages/75-report-check.qml:60
600msgid "Privacy policy"
606msgid "Privacy policy"
601−msgstr ""
607+msgstr "Πολιτική απορρήτου"
602
608
603#: qml/Wizard/Pages/80-finished.qml:89
609#: qml/Wizard/Pages/80-finished.qml:89
604msgid "Welcome to Ubuntu"
610msgid "Welcome to Ubuntu"
605−msgstr ""
611+msgstr "Καλώς ήρθατε στο Ubuntu"
606
612
607#: qml/Wizard/Pages/80-finished.qml:104
613#: qml/Wizard/Pages/80-finished.qml:104
608msgid "You are ready to use your device now"
614msgid "You are ready to use your device now"
609−msgstr ""
615+msgstr "Είστε έτοιμος να χρησιμοποιείσετε της συσκεύη σας τώρα"
610
616
611#: qml/Wizard/Pages/80-finished.qml:124
617#: qml/Wizard/Pages/80-finished.qml:124
612msgid "Get Started"
618msgid "Get Started"
@@ -619,6 +625,8 @@ msgstr "Όροι και προϋποθέσεις"
619#: qml/Wizard/Pages/here-terms.qml:69
625#: qml/Wizard/Pages/here-terms.qml:69
620msgid "Your device uses positioning technologies provided by HERE."
626msgid "Your device uses positioning technologies provided by HERE."
621msgstr ""
627msgstr ""
628+"Η συσκεύη σας χρησιμοποιούν τεχνολογίες εντοπισμού θέσης που παρέχονται από "
629+"το HERE."
622
630
623#: qml/Wizard/Pages/here-terms.qml:81
631#: qml/Wizard/Pages/here-terms.qml:81
624msgid ""
632msgid ""
@@ -632,15 +640,17 @@ msgid ""
632"The information collected is used to analyze the service and to improve the "
640"The information collected is used to analyze the service and to improve the "
633"use of service, but not to identify you personally."
641"use of service, but not to identify you personally."
634msgstr ""
642msgstr ""
643+"Οι πληροφορίες που μαζεύονται χρησιμοποιούνται για αναλύσουν την υπηρεσία "
644+"και να βελτιώσουν την χρήση της υπηρεσίας, και όχι για να βρουν ποιος είστε."
635
645
636#: qml/Wizard/Pages/here-terms.qml:106
646#: qml/Wizard/Pages/here-terms.qml:106
637#, qt-format
647#, qt-format
638msgid "By continuing, you agree to the HERE platform %1 and %2."
648msgid "By continuing, you agree to the HERE platform %1 and %2."
639−msgstr ""
649+msgstr "Με το να συνεχίσετε, συμφωνείτε στα %1 και %2 της πλατφόρμας HERE."
640
650
641#: qml/Wizard/Pages/here-terms.qml:107
651#: qml/Wizard/Pages/here-terms.qml:107
642msgid "Service Terms"
652msgid "Service Terms"
643−msgstr ""
653+msgstr "Όρους υπηρεσίας"
644
654
645#: qml/Wizard/Pages/passcode-confirm.qml:43
655#: qml/Wizard/Pages/passcode-confirm.qml:43
646#: qml/Wizard/Pages/passcode-desktop.qml:80
656#: qml/Wizard/Pages/passcode-desktop.qml:80
@@ -649,69 +659,71 @@ msgstr "Επιβεβαιώστε τον κωδικό πρόσβασης"
649
659
650#: qml/Wizard/Pages/passcode-confirm.qml:45
660#: qml/Wizard/Pages/passcode-confirm.qml:45
651msgid "Incorrect passcode."
661msgid "Incorrect passcode."
652−msgstr ""
662+msgstr "Μη έγκυρος κωδικός πρόσβασης"
653
663
654#: qml/Wizard/Pages/passcode-confirm.qml:45
664#: qml/Wizard/Pages/passcode-confirm.qml:45
655msgctxt "Enter the passcode again"
665msgctxt "Enter the passcode again"
656msgid "Please re-enter."
666msgid "Please re-enter."
657−msgstr ""
667+msgstr "Παρακαλώ πληκτρολογήστε ξανά."
658
668
659#: qml/Wizard/Pages/passcode-desktop.qml:30
669#: qml/Wizard/Pages/passcode-desktop.qml:30
660msgid "Lock Screen Passcode"
670msgid "Lock Screen Passcode"
661−msgstr ""
671+msgstr "Κωδικός πρόσβασης κλειδώματος οθόνης"
662
672
663#: qml/Wizard/Pages/passcode-desktop.qml:56
673#: qml/Wizard/Pages/passcode-desktop.qml:56
664msgid "Enter 4 numbers to setup your passcode"
674msgid "Enter 4 numbers to setup your passcode"
665−msgstr ""
675+msgstr "Εισάγετε 4 αριθμούς για ρύθμιση κωδικού πρόσβασης"
666
676
667#: qml/Wizard/Pages/passcode-desktop.qml:65
677#: qml/Wizard/Pages/passcode-desktop.qml:65
668#: qml/Wizard/Pages/passcode-set.qml:54
678#: qml/Wizard/Pages/passcode-set.qml:54
669msgid "Choose passcode"
679msgid "Choose passcode"
670−msgstr ""
680+msgstr "Επιλογή κωδικού πρόσβασης"
671
681
672#: qml/Wizard/Pages/passcode-desktop.qml:105
682#: qml/Wizard/Pages/passcode-desktop.qml:105
673msgid "Passcode too short"
683msgid "Passcode too short"
674−msgstr ""
684+msgstr "Κωδικός πρόσβασης πολύ μικρός"
675
685
676#: qml/Wizard/Pages/passcode-desktop.qml:107
686#: qml/Wizard/Pages/passcode-desktop.qml:107
677msgid "Passcodes match"
687msgid "Passcodes match"
678−msgstr ""
688+msgstr "Ταίριασμα κωδικών πρόσβασης"
679
689
680#: qml/Wizard/Pages/passcode-desktop.qml:109
690#: qml/Wizard/Pages/passcode-desktop.qml:109
681msgid "Passcodes do not match"
691msgid "Passcodes do not match"
682−msgstr ""
692+msgstr "Οι κωδικοί πρόσβασης δεν ταιριάζουν"
683
693
684#: qml/Wizard/Pages/passcode-set.qml:62
694#: qml/Wizard/Pages/passcode-set.qml:62
685msgid "Passcode must be 4 characters long"
695msgid "Passcode must be 4 characters long"
686−msgstr ""
696+msgstr "Ο κωδικός πρόσβασης πρέπει να είναι 4 χαρακτήρες"
687
697
688#: qml/Wizard/Pages/password-set.qml:30
698#: qml/Wizard/Pages/password-set.qml:30
689msgid "Lock Screen Password"
699msgid "Lock Screen Password"
690−msgstr ""
700+msgstr "Κωδικός πρόσβασης κλειδώματος οθόνης"
691
701
692#: qml/Wizard/Pages/password-set.qml:61
702#: qml/Wizard/Pages/password-set.qml:61
693msgid "Enter at least 8 characters"
703msgid "Enter at least 8 characters"
694−msgstr ""
704+msgstr "Εισάγετε τουλάχιστον 8 χαρακτήρες"
695
705
696#: qml/Wizard/Pages/password-set.qml:73
706#: qml/Wizard/Pages/password-set.qml:73
697msgid "Choose password"
707msgid "Choose password"
698−msgstr ""
708+msgstr "Επιλογή κωδικού πρόσβασης"
699
709
700#: qml/Wizard/Pages/password-set.qml:103
710#: qml/Wizard/Pages/password-set.qml:103
701msgid "Confirm password"
711msgid "Confirm password"
702−msgstr ""
712+msgstr "Επιβεβαίωση κωδικού πρόσβασης"
703
713
704#: qml/Wizard/Pages/sim.qml:27
714#: qml/Wizard/Pages/sim.qml:27
705msgid "No SIM card installed"
715msgid "No SIM card installed"
706−msgstr ""
716+msgstr "Καμία κάρτα SIM δεν έχει εγκατασταθεί"
707
717
708#: qml/Wizard/Pages/sim.qml:54
718#: qml/Wizard/Pages/sim.qml:54
709msgid "SIM card added"
719msgid "SIM card added"
710−msgstr ""
720+msgstr "Κάρτα SIM προστέθηκε"
711
721
712#: qml/Wizard/Pages/sim.qml:55
722#: qml/Wizard/Pages/sim.qml:55
713msgid "You must restart the device to access the mobile network."
723msgid "You must restart the device to access the mobile network."
714msgstr ""
724msgstr ""
725+"Πρέπει να επανεκκίνησετε την συσκεύη σας για πρόσβαση στο δίκτυο κινητής "
726+"τηλεφωνίας."
715
727
716#: qml/Wizard/Pages/sim.qml:59
728#: qml/Wizard/Pages/sim.qml:59
717msgid "Restart"
729msgid "Restart"
@@ -720,6 +732,7 @@ msgstr "Επανεκκίνηση"
720#: qml/Wizard/Pages/sim.qml:78
732#: qml/Wizard/Pages/sim.qml:78
721msgid "You won’t be able to make calls or use text messaging without a SIM."
733msgid "You won’t be able to make calls or use text messaging without a SIM."
722msgstr ""
734msgstr ""
735+"Δεν θα μπορείτε να καλείτε ή να στέλνετε γραπτά μηνύματα χωρίς μια SIM."
723
736
724#: qml/Wizard/Pages/sim.qml:90
737#: qml/Wizard/Pages/sim.qml:90
725msgid "To proceed with no SIM tap Skip."
738msgid "To proceed with no SIM tap Skip."
@@ -727,23 +740,23 @@ msgstr ""
727
740
728#: qml/Wizard/PasswordMeter.qml:87
741#: qml/Wizard/PasswordMeter.qml:87
729msgid "Passwords match"
742msgid "Passwords match"
730−msgstr ""
743+msgstr "Οι κωδικοί πρόσβασης ταιριάζουν"
731
744
732#: qml/Wizard/PasswordMeter.qml:89
745#: qml/Wizard/PasswordMeter.qml:89
733msgid "Passwords do not match"
746msgid "Passwords do not match"
734−msgstr ""
747+msgstr "Οι κωδικοί πρόσβασης δεν ταιριάζουν"
735
748
736#: qml/Wizard/PasswordMeter.qml:93
749#: qml/Wizard/PasswordMeter.qml:93
737msgid "Strong password"
750msgid "Strong password"
738−msgstr ""
751+msgstr "Δυνατός κωδικός πρόσβασης"
739
752
740#: qml/Wizard/PasswordMeter.qml:95
753#: qml/Wizard/PasswordMeter.qml:95
741msgid "Fair password"
754msgid "Fair password"
742−msgstr ""
755+msgstr "Μέτριος κωδικός πρόσβασης"
743
756
744#: qml/Wizard/PasswordMeter.qml:97
757#: qml/Wizard/PasswordMeter.qml:97
745msgid "Weak password"
758msgid "Weak password"
746−msgstr ""
759+msgstr "Αδύναμος κωδικός πρόσβασης"
747
760
748#: qml/Wizard/PasswordMeter.qml:99
761#: qml/Wizard/PasswordMeter.qml:99
749msgid "Very weak password"
762msgid "Very weak password"
po/en_AU.po+13−10
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2016-03-27 10:09+0000\n"
11"PO-Revision-Date: 2016-03-27 10:09+0000\n"
12"Last-Translator: Jared Norris <jarednorris@ubuntu.com>\n"
12"Last-Translator: Jared Norris <jarednorris@ubuntu.com>\n"
13"Language-Team: English (Australia) <en_AU@li.org>\n"
13"Language-Team: English (Australia) <en_AU@li.org>\n"
@@ -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: 2016-03-28 05:45+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:03+0000\n"
19−"X-Generator: Launchpad (build 17967)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -448,19 +448,19 @@ msgstr "Swipe up to create a message"
448msgid "Swipe up to manage the app"
448msgid "Swipe up to manage the app"
449msgstr "Swipe up to manage the app"
449msgstr "Swipe up to manage the app"
450
450
451−#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Swipe from the left edge to open the launcher"
453−msgstr "Swipe from the left edge to open the launcher"
454−
455#: qml/Tutorial/TutorialLeftLong.qml:47
451#: qml/Tutorial/TutorialLeftLong.qml:47
456msgid "Long swipe from the left edge to open the Today scope"
452msgid "Long swipe from the left edge to open the Today scope"
457msgstr "Long swipe from the left edge to open the Today scope"
453msgstr "Long swipe from the left edge to open the Today scope"
458
454
459−#: qml/Tutorial/TutorialRight.qml:54
455+#: qml/Tutorial/TutorialLeft.qml:47
460−msgid "Hover your mouse on the right edge to view your open apps"
456+msgid "Swipe from the left edge to open the launcher"
461−msgstr "Hover your mouse on the right edge to view your open apps"
457+msgstr "Swipe from the left edge to open the launcher"
462
458
463#: qml/Tutorial/TutorialRight.qml:55
459#: qml/Tutorial/TutorialRight.qml:55
460+msgid "Push your mouse against the right edge to view your open apps"
461+msgstr ""
462+
463+#: qml/Tutorial/TutorialRight.qml:56
464msgid "Short or long swipe from the right edge to view your open apps"
464msgid "Short or long swipe from the right edge to view your open apps"
465msgstr "Short or long swipe from the right edge to view your open apps"
465msgstr "Short or long swipe from the right edge to view your open apps"
466
466
@@ -1058,3 +1058,6 @@ msgstr "Very weak password"
1058
1058
1059#~ msgid "%a %d %b %l:%M %p"
1059#~ msgid "%a %d %b %l:%M %p"
1060#~ msgstr "%a %b %d %l:%M %p"
1060#~ msgstr "%a %b %d %l:%M %p"
1061+
1062+#~ msgid "Hover your mouse on the right edge to view your open apps"
1063+#~ msgstr "Hover your mouse on the right edge to view your open apps"
po/en_GB.po+88−87
@@ -7,16 +7,16 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11−"PO-Revision-Date: 2015-04-23 12:59+0000\n"
11+"PO-Revision-Date: 2016-03-30 11:54+0000\n"
12−"Last-Translator: Andi Chandler <Unknown>\n"
12+"Last-Translator: James Tait <Unknown>\n"
13"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
13"Language-Team: English (United Kingdom) <en_GB@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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:03+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -182,11 +182,11 @@ msgstr "Add to Favourites"
182
182
183#: qml/Dash/FiltersPopover.qml:60
183#: qml/Dash/FiltersPopover.qml:60
184msgid "Refine your results"
184msgid "Refine your results"
185−msgstr ""
185+msgstr "Refine your results"
186
186
187#: qml/Dash/FiltersPopover.qml:69
187#: qml/Dash/FiltersPopover.qml:69
188msgid "Reset"
188msgid "Reset"
189−msgstr ""
189+msgstr "Reset"
190
190
191#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
191#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
192msgid "See less"
192msgid "See less"
@@ -203,11 +203,11 @@ msgstr "Search"
203
203
204#: qml/Dash/PageHeaderExtraPanel.qml:55
204#: qml/Dash/PageHeaderExtraPanel.qml:55
205msgid "Recent Searches"
205msgid "Recent Searches"
206−msgstr ""
206+msgstr "Recent Searches"
207
207
208#: qml/Dash/PageHeaderExtraPanel.qml:66
208#: qml/Dash/PageHeaderExtraPanel.qml:66
209msgid "Clear All"
209msgid "Clear All"
210−msgstr ""
210+msgstr "Clear All"
211
211
212#: qml/Dash/Previews/PreviewActionCombo.qml:35
212#: qml/Dash/Previews/PreviewActionCombo.qml:35
213msgid "More..."
213msgid "More..."
@@ -426,51 +426,51 @@ msgstr "Call back"
426
426
427#: qml/Stages/SideStage.qml:76
427#: qml/Stages/SideStage.qml:76
428msgid "Drag using 3 fingers any application from one window to the other"
428msgid "Drag using 3 fingers any application from one window to the other"
429−msgstr ""
429+msgstr "Drag using 3 fingers any application from one window to the other"
430
430
431#: qml/Tutorial/TutorialBottom.qml:78
431#: qml/Tutorial/TutorialBottom.qml:78
432msgid "Swipe up to add a contact"
432msgid "Swipe up to add a contact"
433−msgstr ""
433+msgstr "Swipe up to add a contact"
434
434
435#: qml/Tutorial/TutorialBottom.qml:80
435#: qml/Tutorial/TutorialBottom.qml:80
436msgid "Swipe up for favorite calculations"
436msgid "Swipe up for favorite calculations"
437−msgstr ""
437+msgstr "Swipe up for favourite calculations"
438
438
439#: qml/Tutorial/TutorialBottom.qml:82
439#: qml/Tutorial/TutorialBottom.qml:82
440msgid "Swipe up for recent calls"
440msgid "Swipe up for recent calls"
441−msgstr ""
441+msgstr "Swipe up for recent calls"
442
442
443#: qml/Tutorial/TutorialBottom.qml:84
443#: qml/Tutorial/TutorialBottom.qml:84
444msgid "Swipe up to create a message"
444msgid "Swipe up to create a message"
445−msgstr ""
445+msgstr "Swipe up to create a message"
446
446
447#: qml/Tutorial/TutorialBottom.qml:85
447#: qml/Tutorial/TutorialBottom.qml:85
448msgid "Swipe up to manage the app"
448msgid "Swipe up to manage the app"
449−msgstr ""
449+msgstr "Swipe up to manage the app"
450−
451−#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Swipe from the left edge to open the launcher"
453−msgstr ""
454
450
455#: qml/Tutorial/TutorialLeftLong.qml:47
451#: qml/Tutorial/TutorialLeftLong.qml:47
456msgid "Long swipe from the left edge to open the Today scope"
452msgid "Long swipe from the left edge to open the Today scope"
457−msgstr ""
453+msgstr "Long swipe from the left edge to open the Today scope"
458
454
459−#: qml/Tutorial/TutorialRight.qml:54
455+#: qml/Tutorial/TutorialLeft.qml:47
460−msgid "Hover your mouse on the right edge to view your open apps"
456+msgid "Swipe from the left edge to open the launcher"
461−msgstr ""
457+msgstr "Swipe from the left edge to open the launcher"
462
458
463#: qml/Tutorial/TutorialRight.qml:55
459#: qml/Tutorial/TutorialRight.qml:55
464−msgid "Short or long swipe from the right edge to view your open apps"
460+msgid "Push your mouse against the right edge to view your open apps"
465msgstr ""
461msgstr ""
466
462
463+#: qml/Tutorial/TutorialRight.qml:56
464+msgid "Short or long swipe from the right edge to view your open apps"
465+msgstr "Short or long swipe from the right edge to view your open apps"
466+
467#: qml/Tutorial/TutorialTop.qml:53
467#: qml/Tutorial/TutorialTop.qml:53
468msgid "Swipe from the top right edge to open the notification bar"
468msgid "Swipe from the top right edge to open the notification bar"
469−msgstr ""
469+msgstr "Swipe from the top right edge to open the notification bar"
470
470
471#: qml/Tutorial/TutorialTop.qml:54
471#: qml/Tutorial/TutorialTop.qml:54
472msgid "Swipe from the top edge to open the notification bar"
472msgid "Swipe from the top edge to open the notification bar"
473−msgstr ""
473+msgstr "Swipe from the top edge to open the notification bar"
474
474
475#: qml/Wizard/Page.qml:54
475#: qml/Wizard/Page.qml:54
476msgctxt "Button: Go back one page in the Wizard"
476msgctxt "Button: Go back one page in the Wizard"
@@ -479,7 +479,7 @@ msgstr "Back"
479
479
480#: qml/Wizard/Pages/10-welcome.qml:27
480#: qml/Wizard/Pages/10-welcome.qml:27
481msgid "Language"
481msgid "Language"
482−msgstr ""
482+msgstr "Language"
483
483
484#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
484#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
485#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
485#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
@@ -488,7 +488,7 @@ msgstr ""
488#: qml/Wizard/Pages/passcode-desktop.qml:124
488#: qml/Wizard/Pages/passcode-desktop.qml:124
489#: qml/Wizard/Pages/password-set.qml:141
489#: qml/Wizard/Pages/password-set.qml:141
490msgid "Next"
490msgid "Next"
491−msgstr ""
491+msgstr "Next"
492
492
493#: qml/Wizard/Pages/30-wifi.qml:29
493#: qml/Wizard/Pages/30-wifi.qml:29
494msgid "Connect to Wi‑Fi"
494msgid "Connect to Wi‑Fi"
@@ -496,15 +496,15 @@ msgstr "Connect to Wi‑Fi"
496
496
497#: qml/Wizard/Pages/30-wifi.qml:130
497#: qml/Wizard/Pages/30-wifi.qml:130
498msgid "Connected"
498msgid "Connected"
499−msgstr ""
499+msgstr "Connected"
500
500
501#: qml/Wizard/Pages/30-wifi.qml:163
501#: qml/Wizard/Pages/30-wifi.qml:163
502msgid "Available Wi-Fi networks"
502msgid "Available Wi-Fi networks"
503−msgstr ""
503+msgstr "Available Wi-Fi networks"
504
504
505#: qml/Wizard/Pages/30-wifi.qml:164
505#: qml/Wizard/Pages/30-wifi.qml:164
506msgid "No available Wi-Fi networks"
506msgid "No available Wi-Fi networks"
507−msgstr ""
507+msgstr "No available Wi-Fi networks"
508
508
509#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
509#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
510#: qml/Wizard/Pages/sim.qml:101
510#: qml/Wizard/Pages/sim.qml:101
@@ -513,98 +513,100 @@ msgstr "Skip"
513
513
514#: qml/Wizard/Pages/40-location.qml:27
514#: qml/Wizard/Pages/40-location.qml:27
515msgid "Location Services"
515msgid "Location Services"
516−msgstr ""
516+msgstr "Location Services"
517
517
518#: qml/Wizard/Pages/40-location.qml:83
518#: qml/Wizard/Pages/40-location.qml:83
519msgid ""
519msgid ""
520"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
520"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
521"(recommended)"
521"(recommended)"
522msgstr ""
522msgstr ""
523+"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
524+"(recommended)"
523
525
524#: qml/Wizard/Pages/40-location.qml:105
526#: qml/Wizard/Pages/40-location.qml:105
525#, qt-format
527#, qt-format
526msgid "By selecting this option you agree to the Nokia HERE %1."
528msgid "By selecting this option you agree to the Nokia HERE %1."
527−msgstr ""
529+msgstr "By selecting this option you agree to the Nokia HERE %1."
528
530
529#: qml/Wizard/Pages/40-location.qml:106
531#: qml/Wizard/Pages/40-location.qml:106
530msgctxt "part of: Nokia HERE terms and conditions"
532msgctxt "part of: Nokia HERE terms and conditions"
531msgid "terms and conditions"
533msgid "terms and conditions"
532−msgstr ""
534+msgstr "terms and conditions"
533
535
534#: qml/Wizard/Pages/40-location.qml:160
536#: qml/Wizard/Pages/40-location.qml:160
535msgid "GPS only"
537msgid "GPS only"
536−msgstr ""
538+msgstr "GPS only"
537
539
538#: qml/Wizard/Pages/40-location.qml:214
540#: qml/Wizard/Pages/40-location.qml:214
539msgid "Don't use my location"
541msgid "Don't use my location"
540−msgstr ""
542+msgstr "Don't use my location"
541
543
542#: qml/Wizard/Pages/40-location.qml:260
544#: qml/Wizard/Pages/40-location.qml:260
543msgid "You can change it later in System Settings."
545msgid "You can change it later in System Settings."
544−msgstr ""
546+msgstr "You can change it later in System Settings."
545
547
546#: qml/Wizard/Pages/50-timezone.qml:29
548#: qml/Wizard/Pages/50-timezone.qml:29
547msgid "Time Zone"
549msgid "Time Zone"
548−msgstr ""
550+msgstr "Time Zone"
549
551
550#: qml/Wizard/Pages/50-timezone.qml:178
552#: qml/Wizard/Pages/50-timezone.qml:178
551msgid "Enter your city"
553msgid "Enter your city"
552−msgstr ""
554+msgstr "Enter your city"
553
555
554#: qml/Wizard/Pages/60-account.qml:24
556#: qml/Wizard/Pages/60-account.qml:24
555msgid "Personalize Your Device"
557msgid "Personalize Your Device"
556−msgstr ""
558+msgstr "Personalise Your Device"
557
559
558#: qml/Wizard/Pages/60-account.qml:48
560#: qml/Wizard/Pages/60-account.qml:48
559msgid "Preferred Name"
561msgid "Preferred Name"
560−msgstr ""
562+msgstr "Preferred Name"
561
563
562#: qml/Wizard/Pages/70-passwd-type.qml:39
564#: qml/Wizard/Pages/70-passwd-type.qml:39
563msgid "Lock Screen"
565msgid "Lock Screen"
564−msgstr ""
566+msgstr "Lock Screen"
565
567
566#: qml/Wizard/Pages/70-passwd-type.qml:101
568#: qml/Wizard/Pages/70-passwd-type.qml:101
567msgctxt "Label: Type of security method"
569msgctxt "Label: Type of security method"
568msgid "Create new password"
570msgid "Create new password"
569−msgstr ""
571+msgstr "Create new password"
570
572
571#: qml/Wizard/Pages/70-passwd-type.qml:103
573#: qml/Wizard/Pages/70-passwd-type.qml:103
572msgctxt "Label: Type of security method"
574msgctxt "Label: Type of security method"
573msgid "Create passcode (numbers only)"
575msgid "Create passcode (numbers only)"
574−msgstr ""
576+msgstr "Create passcode (numbers only)"
575
577
576#: qml/Wizard/Pages/70-passwd-type.qml:105
578#: qml/Wizard/Pages/70-passwd-type.qml:105
577msgctxt "Label: Type of security method"
579msgctxt "Label: Type of security method"
578msgid "No lock code"
580msgid "No lock code"
579−msgstr ""
581+msgstr "No lock code"
580
582
581#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
583#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
582msgid "Privacy Policy"
584msgid "Privacy Policy"
583−msgstr ""
585+msgstr "Privacy Policy"
584
586
585#: qml/Wizard/Pages/75-report-check.qml:26
587#: qml/Wizard/Pages/75-report-check.qml:26
586msgid "Help Us Improve"
588msgid "Help Us Improve"
587−msgstr ""
589+msgstr "Help Us Improve"
588
590
589#: qml/Wizard/Pages/75-report-check.qml:59
591#: qml/Wizard/Pages/75-report-check.qml:59
590msgid "Improve system performance by sending us crashes and error reports."
592msgid "Improve system performance by sending us crashes and error reports."
591−msgstr ""
593+msgstr "Improve system performance by sending us crashes and error reports."
592
594
593#: qml/Wizard/Pages/75-report-check.qml:60
595#: qml/Wizard/Pages/75-report-check.qml:60
594msgid "Privacy policy"
596msgid "Privacy policy"
595−msgstr ""
597+msgstr "Privacy policy"
596
598
597#: qml/Wizard/Pages/80-finished.qml:89
599#: qml/Wizard/Pages/80-finished.qml:89
598msgid "Welcome to Ubuntu"
600msgid "Welcome to Ubuntu"
599−msgstr ""
601+msgstr "Welcome to Ubuntu"
600
602
601#: qml/Wizard/Pages/80-finished.qml:104
603#: qml/Wizard/Pages/80-finished.qml:104
602msgid "You are ready to use your device now"
604msgid "You are ready to use your device now"
603−msgstr ""
605+msgstr "You are ready to use your device now"
604
606
605#: qml/Wizard/Pages/80-finished.qml:124
607#: qml/Wizard/Pages/80-finished.qml:124
606msgid "Get Started"
608msgid "Get Started"
607−msgstr ""
609+msgstr "Get Started"
608
610
609#: qml/Wizard/Pages/here-terms.qml:25
611#: qml/Wizard/Pages/here-terms.qml:25
610msgid "Terms & Conditions"
612msgid "Terms & Conditions"
@@ -612,7 +614,7 @@ msgstr "Terms & Conditions"
612
614
613#: qml/Wizard/Pages/here-terms.qml:69
615#: qml/Wizard/Pages/here-terms.qml:69
614msgid "Your device uses positioning technologies provided by HERE."
616msgid "Your device uses positioning technologies provided by HERE."
615−msgstr ""
617+msgstr "Your device uses positioning technologies provided by HERE."
616
618
617#: qml/Wizard/Pages/here-terms.qml:81
619#: qml/Wizard/Pages/here-terms.qml:81
618msgid ""
620msgid ""
@@ -620,21 +622,26 @@ msgid ""
620"collects information about nearby cell towers and Wi-Fi hotspots around your "
622"collects information about nearby cell towers and Wi-Fi hotspots around your "
621"current location whenever your position is being found."
623"current location whenever your position is being found."
622msgstr ""
624msgstr ""
625+"To provide you with positioning services and to improve their quality, HERE "
626+"collects information about nearby cell towers and Wi-Fi hotspots around your "
627+"current location whenever your position is being found."
623
628
624#: qml/Wizard/Pages/here-terms.qml:93
629#: qml/Wizard/Pages/here-terms.qml:93
625msgid ""
630msgid ""
626"The information collected is used to analyze the service and to improve the "
631"The information collected is used to analyze the service and to improve the "
627"use of service, but not to identify you personally."
632"use of service, but not to identify you personally."
628msgstr ""
633msgstr ""
634+"The information collected is used to analyse the service and to improve the "
635+"use of service, but not to identify you personally."
629
636
630#: qml/Wizard/Pages/here-terms.qml:106
637#: qml/Wizard/Pages/here-terms.qml:106
631#, qt-format
638#, qt-format
632msgid "By continuing, you agree to the HERE platform %1 and %2."
639msgid "By continuing, you agree to the HERE platform %1 and %2."
633−msgstr ""
640+msgstr "By continuing, you agree to the HERE platform %1 and %2."
634
641
635#: qml/Wizard/Pages/here-terms.qml:107
642#: qml/Wizard/Pages/here-terms.qml:107
636msgid "Service Terms"
643msgid "Service Terms"
637−msgstr ""
644+msgstr "Service Terms"
638
645
639#: qml/Wizard/Pages/passcode-confirm.qml:43
646#: qml/Wizard/Pages/passcode-confirm.qml:43
640#: qml/Wizard/Pages/passcode-desktop.qml:80
647#: qml/Wizard/Pages/passcode-desktop.qml:80
@@ -643,69 +650,69 @@ msgstr "Confirm passcode"
643
650
644#: qml/Wizard/Pages/passcode-confirm.qml:45
651#: qml/Wizard/Pages/passcode-confirm.qml:45
645msgid "Incorrect passcode."
652msgid "Incorrect passcode."
646−msgstr ""
653+msgstr "Incorrect passcode."
647
654
648#: qml/Wizard/Pages/passcode-confirm.qml:45
655#: qml/Wizard/Pages/passcode-confirm.qml:45
649msgctxt "Enter the passcode again"
656msgctxt "Enter the passcode again"
650msgid "Please re-enter."
657msgid "Please re-enter."
651−msgstr ""
658+msgstr "Please re-enter."
652
659
653#: qml/Wizard/Pages/passcode-desktop.qml:30
660#: qml/Wizard/Pages/passcode-desktop.qml:30
654msgid "Lock Screen Passcode"
661msgid "Lock Screen Passcode"
655−msgstr ""
662+msgstr "Lock Screen Passcode"
656
663
657#: qml/Wizard/Pages/passcode-desktop.qml:56
664#: qml/Wizard/Pages/passcode-desktop.qml:56
658msgid "Enter 4 numbers to setup your passcode"
665msgid "Enter 4 numbers to setup your passcode"
659−msgstr ""
666+msgstr "Enter 4 numbers to setup your passcode"
660
667
661#: qml/Wizard/Pages/passcode-desktop.qml:65
668#: qml/Wizard/Pages/passcode-desktop.qml:65
662#: qml/Wizard/Pages/passcode-set.qml:54
669#: qml/Wizard/Pages/passcode-set.qml:54
663msgid "Choose passcode"
670msgid "Choose passcode"
664−msgstr ""
671+msgstr "Choose passcode"
665
672
666#: qml/Wizard/Pages/passcode-desktop.qml:105
673#: qml/Wizard/Pages/passcode-desktop.qml:105
667msgid "Passcode too short"
674msgid "Passcode too short"
668−msgstr ""
675+msgstr "Passcode too short"
669
676
670#: qml/Wizard/Pages/passcode-desktop.qml:107
677#: qml/Wizard/Pages/passcode-desktop.qml:107
671msgid "Passcodes match"
678msgid "Passcodes match"
672−msgstr ""
679+msgstr "Passcodes match"
673
680
674#: qml/Wizard/Pages/passcode-desktop.qml:109
681#: qml/Wizard/Pages/passcode-desktop.qml:109
675msgid "Passcodes do not match"
682msgid "Passcodes do not match"
676−msgstr ""
683+msgstr "Passcodes do not match"
677
684
678#: qml/Wizard/Pages/passcode-set.qml:62
685#: qml/Wizard/Pages/passcode-set.qml:62
679msgid "Passcode must be 4 characters long"
686msgid "Passcode must be 4 characters long"
680−msgstr ""
687+msgstr "Passcode must be 4 characters long"
681
688
682#: qml/Wizard/Pages/password-set.qml:30
689#: qml/Wizard/Pages/password-set.qml:30
683msgid "Lock Screen Password"
690msgid "Lock Screen Password"
684−msgstr ""
691+msgstr "Lock Screen Password"
685
692
686#: qml/Wizard/Pages/password-set.qml:61
693#: qml/Wizard/Pages/password-set.qml:61
687msgid "Enter at least 8 characters"
694msgid "Enter at least 8 characters"
688−msgstr ""
695+msgstr "Enter at least 8 characters"
689
696
690#: qml/Wizard/Pages/password-set.qml:73
697#: qml/Wizard/Pages/password-set.qml:73
691msgid "Choose password"
698msgid "Choose password"
692−msgstr ""
699+msgstr "Choose password"
693
700
694#: qml/Wizard/Pages/password-set.qml:103
701#: qml/Wizard/Pages/password-set.qml:103
695msgid "Confirm password"
702msgid "Confirm password"
696−msgstr ""
703+msgstr "Confirm password"
697
704
698#: qml/Wizard/Pages/sim.qml:27
705#: qml/Wizard/Pages/sim.qml:27
699msgid "No SIM card installed"
706msgid "No SIM card installed"
700−msgstr ""
707+msgstr "No SIM card installed"
701
708
702#: qml/Wizard/Pages/sim.qml:54
709#: qml/Wizard/Pages/sim.qml:54
703msgid "SIM card added"
710msgid "SIM card added"
704−msgstr ""
711+msgstr "SIM card added"
705
712
706#: qml/Wizard/Pages/sim.qml:55
713#: qml/Wizard/Pages/sim.qml:55
707msgid "You must restart the device to access the mobile network."
714msgid "You must restart the device to access the mobile network."
708−msgstr ""
715+msgstr "You must restart the device to access the mobile network."
709
716
710#: qml/Wizard/Pages/sim.qml:59
717#: qml/Wizard/Pages/sim.qml:59
711msgid "Restart"
718msgid "Restart"
@@ -713,35 +720,35 @@ msgstr "Restart"
713
720
714#: qml/Wizard/Pages/sim.qml:78
721#: qml/Wizard/Pages/sim.qml:78
715msgid "You won’t be able to make calls or use text messaging without a SIM."
722msgid "You won’t be able to make calls or use text messaging without a SIM."
716−msgstr ""
723+msgstr "You won’t be able to make calls or use text messaging without a SIM."
717
724
718#: qml/Wizard/Pages/sim.qml:90
725#: qml/Wizard/Pages/sim.qml:90
719msgid "To proceed with no SIM tap Skip."
726msgid "To proceed with no SIM tap Skip."
720−msgstr ""
727+msgstr "To proceed with no SIM tap Skip."
721
728
722#: qml/Wizard/PasswordMeter.qml:87
729#: qml/Wizard/PasswordMeter.qml:87
723msgid "Passwords match"
730msgid "Passwords match"
724−msgstr ""
731+msgstr "Passwords match"
725
732
726#: qml/Wizard/PasswordMeter.qml:89
733#: qml/Wizard/PasswordMeter.qml:89
727msgid "Passwords do not match"
734msgid "Passwords do not match"
728−msgstr ""
735+msgstr "Passwords do not match"
729
736
730#: qml/Wizard/PasswordMeter.qml:93
737#: qml/Wizard/PasswordMeter.qml:93
731msgid "Strong password"
738msgid "Strong password"
732−msgstr ""
739+msgstr "Strong password"
733
740
734#: qml/Wizard/PasswordMeter.qml:95
741#: qml/Wizard/PasswordMeter.qml:95
735msgid "Fair password"
742msgid "Fair password"
736−msgstr ""
743+msgstr "Fair password"
737
744
738#: qml/Wizard/PasswordMeter.qml:97
745#: qml/Wizard/PasswordMeter.qml:97
739msgid "Weak password"
746msgid "Weak password"
740−msgstr ""
747+msgstr "Weak password"
741
748
742#: qml/Wizard/PasswordMeter.qml:99
749#: qml/Wizard/PasswordMeter.qml:99
743msgid "Very weak password"
750msgid "Very weak password"
744−msgstr ""
751+msgstr "Very weak password"
745
752
746#~ msgid "Confirm"
753#~ msgid "Confirm"
747#~ msgstr "Confirm"
754#~ msgstr "Confirm"
@@ -1055,11 +1062,5 @@ msgstr ""
1055#~ msgid "Call back"
1062#~ msgid "Call back"
1056#~ msgstr "Call back"
1063#~ msgstr "Call back"
1057
1064
1058−#~ msgid "Welcome to your Ubuntu device."
1065+#~ msgid "Hover your mouse on the right edge to view your open apps"
1059−#~ msgstr "Welcome to your Ubuntu device."
1066+#~ msgstr "Hover your mouse on the right edge to view your open apps"
1060−
1061−#~ msgid "Please select how you’d like to unlock your device."
1062−#~ msgstr "Please select how you would like to unlock your device."
1063−
1064−#~ msgid "Your device is now ready to use."
1065−#~ msgstr "Your device is now ready to use."
po/eo.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-06-06 23:37+0000\n"
11"PO-Revision-Date: 2015-06-06 23:37+0000\n"
12"Last-Translator: Eliovir <Unknown>\n"
12"Last-Translator: Eliovir <Unknown>\n"
13"Language-Team: Esperanto <eo@li.org>\n"
13"Language-Team: Esperanto <eo@li.org>\n"
@@ -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: 2016-03-24 06:07+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/es.po+16−13
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2016-03-25 12:02+0000\n"
11"PO-Revision-Date: 2016-03-25 12:02+0000\n"
12"Last-Translator: Adolfo Jayme <fitoschido@gmail.com>\n"
12"Last-Translator: Adolfo Jayme <fitoschido@gmail.com>\n"
13"Language-Team: Spanish <es@li.org>\n"
13"Language-Team: Spanish <es@li.org>\n"
@@ -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: 2016-03-26 05:44+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17967)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -454,20 +454,19 @@ msgstr "Deslice arriba para crear un mensaje"
454msgid "Swipe up to manage the app"
454msgid "Swipe up to manage the app"
455msgstr "Deslice arriba para configurar la apli"
455msgstr "Deslice arriba para configurar la apli"
456
456
457−#: qml/Tutorial/TutorialLeft.qml:47
458−msgid "Swipe from the left edge to open the launcher"
459−msgstr "Deslice desde el borde izquierdo para abrir el lanzador"
460−
461#: qml/Tutorial/TutorialLeftLong.qml:47
457#: qml/Tutorial/TutorialLeftLong.qml:47
462msgid "Long swipe from the left edge to open the Today scope"
458msgid "Long swipe from the left edge to open the Today scope"
463msgstr "Deslice largo desde el borde izquierdo para ver el scope Hoy"
459msgstr "Deslice largo desde el borde izquierdo para ver el scope Hoy"
464
460
465−#: qml/Tutorial/TutorialRight.qml:54
461+#: qml/Tutorial/TutorialLeft.qml:47
466−msgid "Hover your mouse on the right edge to view your open apps"
462+msgid "Swipe from the left edge to open the launcher"
467−msgstr ""
463+msgstr "Deslice desde el borde izquierdo para abrir el lanzador"
468−"Sitúe el ratón en el borde derecho para ver las aplicaciones abiertas"
469
464
470#: qml/Tutorial/TutorialRight.qml:55
465#: qml/Tutorial/TutorialRight.qml:55
466+msgid "Push your mouse against the right edge to view your open apps"
467+msgstr ""
468+
469+#: qml/Tutorial/TutorialRight.qml:56
471msgid "Short or long swipe from the right edge to view your open apps"
470msgid "Short or long swipe from the right edge to view your open apps"
472msgstr "Deslice desde el borde derecho para ver las aplis abiertas"
471msgstr "Deslice desde el borde derecho para ver las aplis abiertas"
473
472
@@ -608,11 +607,11 @@ msgstr "Política de privacidad"
608
607
609#: qml/Wizard/Pages/80-finished.qml:89
608#: qml/Wizard/Pages/80-finished.qml:89
610msgid "Welcome to Ubuntu"
609msgid "Welcome to Ubuntu"
611−msgstr "Le damos la bienvenida a Ubuntu"
610+msgstr "Bienvenido a su dispositivo Ubuntu"
612
611
613#: qml/Wizard/Pages/80-finished.qml:104
612#: qml/Wizard/Pages/80-finished.qml:104
614msgid "You are ready to use your device now"
613msgid "You are ready to use your device now"
615−msgstr "Ahora ya puede usar su dispositivo"
614+msgstr "El dispositivo ya está listo"
616
615
617#: qml/Wizard/Pages/80-finished.qml:124
616#: qml/Wizard/Pages/80-finished.qml:124
618msgid "Get Started"
617msgid "Get Started"
@@ -1075,3 +1074,7 @@ msgstr "Contraseña muy débil"
1075
1074
1076#~ msgid "Call back"
1075#~ msgid "Call back"
1077#~ msgstr "Devolver llamada"
1076#~ msgstr "Devolver llamada"
1077+
1078+#~ msgid "Hover your mouse on the right edge to view your open apps"
1079+#~ msgstr ""
1080+#~ "Sitúe el ratón en el borde derecho para ver las aplicaciones abiertas"
po/eu.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-07-13 23:29+0000\n"
11"PO-Revision-Date: 2015-07-13 23:29+0000\n"
12"Last-Translator: Ibai Oihanguren Sala <Unknown>\n"
12"Last-Translator: Ibai Oihanguren Sala <Unknown>\n"
13"Language-Team: Basque <eu@li.org>\n"
13"Language-Team: Basque <eu@li.org>\n"
@@ -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: 2016-03-24 06:07+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:01+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -447,19 +447,19 @@ msgstr ""
447msgid "Swipe up to manage the app"
447msgid "Swipe up to manage the app"
448msgstr ""
448msgstr ""
449
449
450−#: qml/Tutorial/TutorialLeft.qml:47
451−msgid "Swipe from the left edge to open the launcher"
452−msgstr ""
453−
454#: qml/Tutorial/TutorialLeftLong.qml:47
450#: qml/Tutorial/TutorialLeftLong.qml:47
455msgid "Long swipe from the left edge to open the Today scope"
451msgid "Long swipe from the left edge to open the Today scope"
456msgstr ""
452msgstr ""
457
453
458−#: qml/Tutorial/TutorialRight.qml:54
454+#: qml/Tutorial/TutorialLeft.qml:47
459−msgid "Hover your mouse on the right edge to view your open apps"
455+msgid "Swipe from the left edge to open the launcher"
460msgstr ""
456msgstr ""
461
457
462#: qml/Tutorial/TutorialRight.qml:55
458#: qml/Tutorial/TutorialRight.qml:55
459+msgid "Push your mouse against the right edge to view your open apps"
460+msgstr ""
461+
462+#: qml/Tutorial/TutorialRight.qml:56
463msgid "Short or long swipe from the right edge to view your open apps"
463msgid "Short or long swipe from the right edge to view your open apps"
464msgstr ""
464msgstr ""
465
465
po/fa.po+33−19
@@ -7,16 +7,16 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11−"PO-Revision-Date: 2016-03-24 16:02+0000\n"
11+"PO-Revision-Date: 2016-03-30 14:29+0000\n"
12"Last-Translator: Danial Behzadi <dani.behzi@gmail.com>\n"
12"Last-Translator: Danial Behzadi <dani.behzi@gmail.com>\n"
13"Language-Team: Persian <fa@li.org>\n"
13"Language-Team: Persian <fa@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2016-03-25 05:55+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17967)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -140,6 +140,7 @@ msgctxt ""
140"Re-dock means connect the device again to an external screen/mouse/keyboard"
140"Re-dock means connect the device again to an external screen/mouse/keyboard"
141msgid "Re-dock, save your work and close these apps to continue."
141msgid "Re-dock, save your work and close these apps to continue."
142msgstr ""
142msgstr ""
143+"برای ادامه، دوباره متّصل کرده، کارتان را ذخیره کنید و این کاره‌ها را ببندید."
143
144
144#: qml/Components/ModeSwitchWarningDialog.qml:63
145#: qml/Components/ModeSwitchWarningDialog.qml:63
145msgid "Or force close now (unsaved data will be lost)."
146msgid "Or force close now (unsaved data will be lost)."
@@ -182,7 +183,7 @@ msgstr "افزودن به برگزیده‌ها"
182
183
183#: qml/Dash/FiltersPopover.qml:60
184#: qml/Dash/FiltersPopover.qml:60
184msgid "Refine your results"
185msgid "Refine your results"
185−msgstr ""
186+msgstr "نتایجتان را بهبود دهید"
186
187
187#: qml/Dash/FiltersPopover.qml:69
188#: qml/Dash/FiltersPopover.qml:69
188msgid "Reset"
189msgid "Reset"
@@ -263,6 +264,8 @@ msgid ""
263"Your device is now connected to an external display. Use this screen as a "
264"Your device is now connected to an external display. Use this screen as a "
264"touch pad to interact with the pointer."
265"touch pad to interact with the pointer."
265msgstr ""
266msgstr ""
267+"افزاره‌تان هم‌تکنون به یک نمایشگر خارجی وصل شده است. از این صفحه به عنوان یک "
268+"صفحه‌لمسی برای کارکردن با نشانگر استفاده کنید."
266
269
267#: qml/Greeter/CoverPage.qml:118
270#: qml/Greeter/CoverPage.qml:118
268msgid "Unlock"
271msgid "Unlock"
@@ -421,7 +424,7 @@ msgstr "پاسخ تماس"
421
424
422#: qml/Stages/SideStage.qml:76
425#: qml/Stages/SideStage.qml:76
423msgid "Drag using 3 fingers any application from one window to the other"
426msgid "Drag using 3 fingers any application from one window to the other"
424−msgstr ""
427+msgstr "هر پنجره‌ای را با کشیدن سه‌انگشت از پنجره‌ای به ینجرهٔ دیگر ببرید"
425
428
426#: qml/Tutorial/TutorialBottom.qml:78
429#: qml/Tutorial/TutorialBottom.qml:78
427msgid "Swipe up to add a contact"
430msgid "Swipe up to add a contact"
@@ -443,19 +446,19 @@ msgstr "برای ایجاد پیام، به بالا بکشید"
443msgid "Swipe up to manage the app"
446msgid "Swipe up to manage the app"
444msgstr "برای مدیریت کاره، به بالا بکشید"
447msgstr "برای مدیریت کاره، به بالا بکشید"
445
448
446−#: qml/Tutorial/TutorialLeft.qml:47
447−msgid "Swipe from the left edge to open the launcher"
448−msgstr "برای گشودن اجراگر، از لبهٔ چپ بکشید"
449−
450#: qml/Tutorial/TutorialLeftLong.qml:47
449#: qml/Tutorial/TutorialLeftLong.qml:47
451msgid "Long swipe from the left edge to open the Today scope"
450msgid "Long swipe from the left edge to open the Today scope"
452msgstr "برای گشودن حوزهٔ امروز، از لبهٔ چپ طولانی بکشید"
451msgstr "برای گشودن حوزهٔ امروز، از لبهٔ چپ طولانی بکشید"
453
452
454−#: qml/Tutorial/TutorialRight.qml:54
453+#: qml/Tutorial/TutorialLeft.qml:47
455−msgid "Hover your mouse on the right edge to view your open apps"
454+msgid "Swipe from the left edge to open the launcher"
456−msgstr "برای دیدن کاره‌های گشوده، موشی‌تان را روی لبهٔ راست نگه دارید"
455+msgstr "برای گشودن اجراگر، از لبهٔ چپ بکشید"
457
456
458#: qml/Tutorial/TutorialRight.qml:55
457#: qml/Tutorial/TutorialRight.qml:55
458+msgid "Push your mouse against the right edge to view your open apps"
459+msgstr ""
460+
461+#: qml/Tutorial/TutorialRight.qml:56
459msgid "Short or long swipe from the right edge to view your open apps"
462msgid "Short or long swipe from the right edge to view your open apps"
460msgstr "برای دیدن کاره‌های گشوده، از گوشهٔ راست بکشید"
463msgstr "برای دیدن کاره‌های گشوده، از گوشهٔ راست بکشید"
461
464
@@ -515,6 +518,8 @@ msgid ""
515"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
518"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
516"(recommended)"
519"(recommended)"
517msgstr ""
520msgstr ""
521+"برای تشخیص موقعیّت، به صورت ناشناس از جی‌پی‌اس، نقطه‌های داغ وای‌فای و "
522+"شبکه‌های تلفن همراه استفاده شود (توصیه شده)"
518
523
519#: qml/Wizard/Pages/40-location.qml:105
524#: qml/Wizard/Pages/40-location.qml:105
520#, qt-format
525#, qt-format
@@ -583,7 +588,7 @@ msgstr "کمک به بهبود"
583
588
584#: qml/Wizard/Pages/75-report-check.qml:59
589#: qml/Wizard/Pages/75-report-check.qml:59
585msgid "Improve system performance by sending us crashes and error reports."
590msgid "Improve system performance by sending us crashes and error reports."
586−msgstr ""
591+msgstr "کارایی سامانه با ارسال گزارش‌های خطا بهبود دهید."
587
592
588#: qml/Wizard/Pages/75-report-check.qml:60
593#: qml/Wizard/Pages/75-report-check.qml:60
589msgid "Privacy policy"
594msgid "Privacy policy"
@@ -608,6 +613,7 @@ msgstr "شرایط و ضوابط"
608#: qml/Wizard/Pages/here-terms.qml:69
613#: qml/Wizard/Pages/here-terms.qml:69
609msgid "Your device uses positioning technologies provided by HERE."
614msgid "Your device uses positioning technologies provided by HERE."
610msgstr ""
615msgstr ""
616+"افزاره‌تان از فن‌آوری‌های موقعیّت‌یابی فراهم‌شده توسّط HERE استفاده مي‌کند."
611
617
612#: qml/Wizard/Pages/here-terms.qml:81
618#: qml/Wizard/Pages/here-terms.qml:81
613msgid ""
619msgid ""
@@ -615,17 +621,22 @@ msgid ""
615"collects information about nearby cell towers and Wi-Fi hotspots around your "
621"collects information about nearby cell towers and Wi-Fi hotspots around your "
616"current location whenever your position is being found."
622"current location whenever your position is being found."
617msgstr ""
623msgstr ""
624+"به منظور فراهم کردن خدمات موقعیّت‌یابی و بهبود کیفیت آن‌ها، به هنگام پیدا "
625+"شدن موقعیتتان، HERE اطّلاعاتی دربارهٔ برج‌های تلفن همراه نزدیک و نقطه‌های "
626+"داغ وای‌فای اطراف موقعیّت فعلیتان را حمع‌آوری می‌کند."
618
627
619#: qml/Wizard/Pages/here-terms.qml:93
628#: qml/Wizard/Pages/here-terms.qml:93
620msgid ""
629msgid ""
621"The information collected is used to analyze the service and to improve the "
630"The information collected is used to analyze the service and to improve the "
622"use of service, but not to identify you personally."
631"use of service, but not to identify you personally."
623msgstr ""
632msgstr ""
633+"اطّلاعات جمع‌آوری شده برای تحلیل خدمت و بهبود استفاده از آن، و نه برای تشخیص "
634+"شخص شما استفاده می‌شوند"
624
635
625#: qml/Wizard/Pages/here-terms.qml:106
636#: qml/Wizard/Pages/here-terms.qml:106
626#, qt-format
637#, qt-format
627msgid "By continuing, you agree to the HERE platform %1 and %2."
638msgid "By continuing, you agree to the HERE platform %1 and %2."
628−msgstr ""
639+msgstr "با ادامه، با %1 و %2 بن‌سازهٔ HERE موافقت می‌کنید."
629
640
630#: qml/Wizard/Pages/here-terms.qml:107
641#: qml/Wizard/Pages/here-terms.qml:107
631msgid "Service Terms"
642msgid "Service Terms"
@@ -726,19 +737,19 @@ msgstr "گذرواژه‌ها مطابق نیستند"
726
737
727#: qml/Wizard/PasswordMeter.qml:93
738#: qml/Wizard/PasswordMeter.qml:93
728msgid "Strong password"
739msgid "Strong password"
729−msgstr ""
740+msgstr "گذرواژهٔ قوی"
730
741
731#: qml/Wizard/PasswordMeter.qml:95
742#: qml/Wizard/PasswordMeter.qml:95
732msgid "Fair password"
743msgid "Fair password"
733−msgstr ""
744+msgstr "گذرواژهٔ معتدل"
734
745
735#: qml/Wizard/PasswordMeter.qml:97
746#: qml/Wizard/PasswordMeter.qml:97
736msgid "Weak password"
747msgid "Weak password"
737−msgstr ""
748+msgstr "گذرواژهٔ ضعیف"
738
749
739#: qml/Wizard/PasswordMeter.qml:99
750#: qml/Wizard/PasswordMeter.qml:99
740msgid "Very weak password"
751msgid "Very weak password"
741−msgstr ""
752+msgstr "گذرواژهٔ خیلی ضعیف"
742
753
743#~ msgid "Right edge"
754#~ msgid "Right edge"
744#~ msgstr "لبه‌ی راست"
755#~ msgstr "لبه‌ی راست"
@@ -1053,3 +1064,6 @@ msgstr ""
1053
1064
1054#~ msgid "Call back"
1065#~ msgid "Call back"
1055#~ msgstr "پاسخ تماس"
1066#~ msgstr "پاسخ تماس"
1067+
1068+#~ msgid "Hover your mouse on the right edge to view your open apps"
1069+#~ msgstr "برای دیدن کاره‌های گشوده، موشی‌تان را روی لبهٔ راست نگه دارید"
po/fi.po+90−84
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-07-04 18:32+0000\n"
11"PO-Revision-Date: 2015-07-04 18:32+0000\n"
12"Last-Translator: Jiri Grönroos <Unknown>\n"
12"Last-Translator: Jiri Grönroos <Unknown>\n"
13"Language-Team: Finnish <fi@li.org>\n"
13"Language-Team: Finnish <fi@li.org>\n"
@@ -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: 2016-03-24 06:07+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -186,11 +186,11 @@ msgstr "Lisää suosikkeihin"
186
186
187#: qml/Dash/FiltersPopover.qml:60
187#: qml/Dash/FiltersPopover.qml:60
188msgid "Refine your results"
188msgid "Refine your results"
189−msgstr ""
189+msgstr "Tarkenna tuloksia"
190
190
191#: qml/Dash/FiltersPopover.qml:69
191#: qml/Dash/FiltersPopover.qml:69
192msgid "Reset"
192msgid "Reset"
193−msgstr ""
193+msgstr "Palauta"
194
194
195#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
195#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
196msgid "See less"
196msgid "See less"
@@ -207,11 +207,11 @@ msgstr "Etsi"
207
207
208#: qml/Dash/PageHeaderExtraPanel.qml:55
208#: qml/Dash/PageHeaderExtraPanel.qml:55
209msgid "Recent Searches"
209msgid "Recent Searches"
210−msgstr ""
210+msgstr "Viimeisimmät haut"
211
211
212#: qml/Dash/PageHeaderExtraPanel.qml:66
212#: qml/Dash/PageHeaderExtraPanel.qml:66
213msgid "Clear All"
213msgid "Clear All"
214−msgstr ""
214+msgstr "Tyhjennä kaikki"
215
215
216#: qml/Dash/Previews/PreviewActionCombo.qml:35
216#: qml/Dash/Previews/PreviewActionCombo.qml:35
217msgid "More..."
217msgid "More..."
@@ -280,7 +280,7 @@ msgstr "Yritä uudelleen"
280
280
281#: qml/Greeter/LoginList.qml:240
281#: qml/Greeter/LoginList.qml:240
282msgid "Tap to unlock"
282msgid "Tap to unlock"
283−msgstr "Napauta avataksesi lukituksen"
283+msgstr "Avaa lukitus"
284
284
285#: qml/Greeter/NarrowView.qml:54
285#: qml/Greeter/NarrowView.qml:54
286msgid "Sorry, incorrect passphrase."
286msgid "Sorry, incorrect passphrase."
@@ -430,51 +430,53 @@ msgstr "Soita takaisin"
430
430
431#: qml/Stages/SideStage.qml:76
431#: qml/Stages/SideStage.qml:76
432msgid "Drag using 3 fingers any application from one window to the other"
432msgid "Drag using 3 fingers any application from one window to the other"
433−msgstr ""
433+msgstr "Vedä kolmea sormea käyttäen mikä tahansa sovellus ikkunasta toiseen"
434
434
435#: qml/Tutorial/TutorialBottom.qml:78
435#: qml/Tutorial/TutorialBottom.qml:78
436msgid "Swipe up to add a contact"
436msgid "Swipe up to add a contact"
437−msgstr ""
437+msgstr "Vedä ylös lisätäksesi yhteystiedon"
438
438
439#: qml/Tutorial/TutorialBottom.qml:80
439#: qml/Tutorial/TutorialBottom.qml:80
440msgid "Swipe up for favorite calculations"
440msgid "Swipe up for favorite calculations"
441−msgstr ""
441+msgstr "Vedä ylös nähdäksesi suosikkilaskutoimitukset"
442
442
443#: qml/Tutorial/TutorialBottom.qml:82
443#: qml/Tutorial/TutorialBottom.qml:82
444msgid "Swipe up for recent calls"
444msgid "Swipe up for recent calls"
445−msgstr ""
445+msgstr "Vedä ylös nähdäksesi viimeisimmät puhelut"
446
446
447#: qml/Tutorial/TutorialBottom.qml:84
447#: qml/Tutorial/TutorialBottom.qml:84
448msgid "Swipe up to create a message"
448msgid "Swipe up to create a message"
449−msgstr ""
449+msgstr "Vedä ylös luodaksesi uuden viestin"
450
450
451#: qml/Tutorial/TutorialBottom.qml:85
451#: qml/Tutorial/TutorialBottom.qml:85
452msgid "Swipe up to manage the app"
452msgid "Swipe up to manage the app"
453−msgstr ""
453+msgstr "Vedä ylös hallitaksesi sovellusta"
454−
455−#: qml/Tutorial/TutorialLeft.qml:47
456−msgid "Swipe from the left edge to open the launcher"
457−msgstr ""
458
454
459#: qml/Tutorial/TutorialLeftLong.qml:47
455#: qml/Tutorial/TutorialLeftLong.qml:47
460msgid "Long swipe from the left edge to open the Today scope"
456msgid "Long swipe from the left edge to open the Today scope"
461−msgstr ""
457+msgstr "Tee pitkä veto vasemmasta reunasta avataksesi Tänään-näkymän"
462
458
463−#: qml/Tutorial/TutorialRight.qml:54
459+#: qml/Tutorial/TutorialLeft.qml:47
464−msgid "Hover your mouse on the right edge to view your open apps"
460+msgid "Swipe from the left edge to open the launcher"
465−msgstr ""
461+msgstr "Vedä vasemmasta reunasta avataksesi käynnistimen"
466
462
467#: qml/Tutorial/TutorialRight.qml:55
463#: qml/Tutorial/TutorialRight.qml:55
464+msgid "Push your mouse against the right edge to view your open apps"
465+msgstr ""
466+
467+#: qml/Tutorial/TutorialRight.qml:56
468msgid "Short or long swipe from the right edge to view your open apps"
468msgid "Short or long swipe from the right edge to view your open apps"
469msgstr ""
469msgstr ""
470+"Tee lyhyt tai pitkä veto oikeasta laidasta nähdäksesi avoinna olevat "
471+"sovellukset"
470
472
471#: qml/Tutorial/TutorialTop.qml:53
473#: qml/Tutorial/TutorialTop.qml:53
472msgid "Swipe from the top right edge to open the notification bar"
474msgid "Swipe from the top right edge to open the notification bar"
473−msgstr ""
475+msgstr "Vedä oikeasta yläreunasta avataksesi ilmoituspalkin"
474
476
475#: qml/Tutorial/TutorialTop.qml:54
477#: qml/Tutorial/TutorialTop.qml:54
476msgid "Swipe from the top edge to open the notification bar"
478msgid "Swipe from the top edge to open the notification bar"
477−msgstr ""
479+msgstr "Vedä yläreunasta avataksesi ilmoituspalkin"
478
480
479#: qml/Wizard/Page.qml:54
481#: qml/Wizard/Page.qml:54
480msgctxt "Button: Go back one page in the Wizard"
482msgctxt "Button: Go back one page in the Wizard"
@@ -483,7 +485,7 @@ msgstr "Takaisin"
483
485
484#: qml/Wizard/Pages/10-welcome.qml:27
486#: qml/Wizard/Pages/10-welcome.qml:27
485msgid "Language"
487msgid "Language"
486−msgstr ""
488+msgstr "Kieli"
487
489
488#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
490#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
489#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
491#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
@@ -492,7 +494,7 @@ msgstr ""
492#: qml/Wizard/Pages/passcode-desktop.qml:124
494#: qml/Wizard/Pages/passcode-desktop.qml:124
493#: qml/Wizard/Pages/password-set.qml:141
495#: qml/Wizard/Pages/password-set.qml:141
494msgid "Next"
496msgid "Next"
495−msgstr ""
497+msgstr "Seuraava"
496
498
497#: qml/Wizard/Pages/30-wifi.qml:29
499#: qml/Wizard/Pages/30-wifi.qml:29
498msgid "Connect to Wi‑Fi"
500msgid "Connect to Wi‑Fi"
@@ -500,15 +502,15 @@ msgstr "Yhdistä wifi-verkkoon"
500
502
501#: qml/Wizard/Pages/30-wifi.qml:130
503#: qml/Wizard/Pages/30-wifi.qml:130
502msgid "Connected"
504msgid "Connected"
503−msgstr ""
505+msgstr "Yhdistetty"
504
506
505#: qml/Wizard/Pages/30-wifi.qml:163
507#: qml/Wizard/Pages/30-wifi.qml:163
506msgid "Available Wi-Fi networks"
508msgid "Available Wi-Fi networks"
507−msgstr ""
509+msgstr "Käytettävissä olevat wifi-verkot"
508
510
509#: qml/Wizard/Pages/30-wifi.qml:164
511#: qml/Wizard/Pages/30-wifi.qml:164
510msgid "No available Wi-Fi networks"
512msgid "No available Wi-Fi networks"
511−msgstr ""
513+msgstr "Ei käytettävissä olevia wifi-verkkoja"
512
514
513#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
515#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
514#: qml/Wizard/Pages/sim.qml:101
516#: qml/Wizard/Pages/sim.qml:101
@@ -517,98 +519,102 @@ msgstr "Ohita"
517
519
518#: qml/Wizard/Pages/40-location.qml:27
520#: qml/Wizard/Pages/40-location.qml:27
519msgid "Location Services"
521msgid "Location Services"
520−msgstr ""
522+msgstr "Sijaintipalvelut"
521
523
522#: qml/Wizard/Pages/40-location.qml:83
524#: qml/Wizard/Pages/40-location.qml:83
523msgid ""
525msgid ""
524"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
526"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
525"(recommended)"
527"(recommended)"
526msgstr ""
528msgstr ""
529+"Käytä GPS:ää, wifi-tukiasemia ja mobiiliverkkoa anonyymisti sijainnin "
530+"havaitsemiseen (suositeltu)"
527
531
528#: qml/Wizard/Pages/40-location.qml:105
532#: qml/Wizard/Pages/40-location.qml:105
529#, qt-format
533#, qt-format
530msgid "By selecting this option you agree to the Nokia HERE %1."
534msgid "By selecting this option you agree to the Nokia HERE %1."
531−msgstr ""
535+msgstr "Valitsemalla tämän kohdan hyväksyt HERE:n %1."
532
536
533#: qml/Wizard/Pages/40-location.qml:106
537#: qml/Wizard/Pages/40-location.qml:106
534msgctxt "part of: Nokia HERE terms and conditions"
538msgctxt "part of: Nokia HERE terms and conditions"
535msgid "terms and conditions"
539msgid "terms and conditions"
536−msgstr ""
540+msgstr "käyttöehdot"
537
541
538#: qml/Wizard/Pages/40-location.qml:160
542#: qml/Wizard/Pages/40-location.qml:160
539msgid "GPS only"
543msgid "GPS only"
540−msgstr ""
544+msgstr "Vain GPS"
541
545
542#: qml/Wizard/Pages/40-location.qml:214
546#: qml/Wizard/Pages/40-location.qml:214
543msgid "Don't use my location"
547msgid "Don't use my location"
544−msgstr ""
548+msgstr "Älä käytä sijaintiani"
545
549
546#: qml/Wizard/Pages/40-location.qml:260
550#: qml/Wizard/Pages/40-location.qml:260
547msgid "You can change it later in System Settings."
551msgid "You can change it later in System Settings."
548−msgstr ""
552+msgstr "Voit muuttaa asetusta myöhemmin järjestelmän asetuksista."
549
553
550#: qml/Wizard/Pages/50-timezone.qml:29
554#: qml/Wizard/Pages/50-timezone.qml:29
551msgid "Time Zone"
555msgid "Time Zone"
552−msgstr ""
556+msgstr "Aikavyöhyke"
553
557
554#: qml/Wizard/Pages/50-timezone.qml:178
558#: qml/Wizard/Pages/50-timezone.qml:178
555msgid "Enter your city"
559msgid "Enter your city"
556−msgstr ""
560+msgstr "Määritä kaupunkisi"
557
561
558#: qml/Wizard/Pages/60-account.qml:24
562#: qml/Wizard/Pages/60-account.qml:24
559msgid "Personalize Your Device"
563msgid "Personalize Your Device"
560−msgstr ""
564+msgstr "Mukauta laitteesi"
561
565
562#: qml/Wizard/Pages/60-account.qml:48
566#: qml/Wizard/Pages/60-account.qml:48
563msgid "Preferred Name"
567msgid "Preferred Name"
564−msgstr ""
568+msgstr "Ensisijainen nimi"
565
569
566#: qml/Wizard/Pages/70-passwd-type.qml:39
570#: qml/Wizard/Pages/70-passwd-type.qml:39
567msgid "Lock Screen"
571msgid "Lock Screen"
568−msgstr ""
572+msgstr "Lukitusnäyttö"
569
573
570#: qml/Wizard/Pages/70-passwd-type.qml:101
574#: qml/Wizard/Pages/70-passwd-type.qml:101
571msgctxt "Label: Type of security method"
575msgctxt "Label: Type of security method"
572msgid "Create new password"
576msgid "Create new password"
573−msgstr ""
577+msgstr "Luo uusi salasana"
574
578
575#: qml/Wizard/Pages/70-passwd-type.qml:103
579#: qml/Wizard/Pages/70-passwd-type.qml:103
576msgctxt "Label: Type of security method"
580msgctxt "Label: Type of security method"
577msgid "Create passcode (numbers only)"
581msgid "Create passcode (numbers only)"
578−msgstr ""
582+msgstr "Luo suojakoodi (vain numeroita)"
579
583
580#: qml/Wizard/Pages/70-passwd-type.qml:105
584#: qml/Wizard/Pages/70-passwd-type.qml:105
581msgctxt "Label: Type of security method"
585msgctxt "Label: Type of security method"
582msgid "No lock code"
586msgid "No lock code"
583−msgstr ""
587+msgstr "Ei lukituskoodia"
584
588
585#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
589#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
586msgid "Privacy Policy"
590msgid "Privacy Policy"
587−msgstr ""
591+msgstr "Tietosuoja"
588
592
589#: qml/Wizard/Pages/75-report-check.qml:26
593#: qml/Wizard/Pages/75-report-check.qml:26
590msgid "Help Us Improve"
594msgid "Help Us Improve"
591−msgstr ""
595+msgstr "Auta parantamaan"
592
596
593#: qml/Wizard/Pages/75-report-check.qml:59
597#: qml/Wizard/Pages/75-report-check.qml:59
594msgid "Improve system performance by sending us crashes and error reports."
598msgid "Improve system performance by sending us crashes and error reports."
595msgstr ""
599msgstr ""
600+"Paranna järjestelmän suorituskykyä lähettämällä virheraportteja "
601+"Canonicalille."
596
602
597#: qml/Wizard/Pages/75-report-check.qml:60
603#: qml/Wizard/Pages/75-report-check.qml:60
598msgid "Privacy policy"
604msgid "Privacy policy"
599−msgstr ""
605+msgstr "Tietosuojakäytäntö"
600
606
601#: qml/Wizard/Pages/80-finished.qml:89
607#: qml/Wizard/Pages/80-finished.qml:89
602msgid "Welcome to Ubuntu"
608msgid "Welcome to Ubuntu"
603−msgstr ""
609+msgstr "Tervetuloa Ubuntuun"
604
610
605#: qml/Wizard/Pages/80-finished.qml:104
611#: qml/Wizard/Pages/80-finished.qml:104
606msgid "You are ready to use your device now"
612msgid "You are ready to use your device now"
607−msgstr ""
613+msgstr "Voit aloittaa nyt laitteesi käytön"
608
614
609#: qml/Wizard/Pages/80-finished.qml:124
615#: qml/Wizard/Pages/80-finished.qml:124
610msgid "Get Started"
616msgid "Get Started"
611−msgstr ""
617+msgstr "Alkuun pääsy"
612
618
613#: qml/Wizard/Pages/here-terms.qml:25
619#: qml/Wizard/Pages/here-terms.qml:25
614msgid "Terms & Conditions"
620msgid "Terms & Conditions"
@@ -616,7 +622,7 @@ msgstr "Käyttöehdot"
616
622
617#: qml/Wizard/Pages/here-terms.qml:69
623#: qml/Wizard/Pages/here-terms.qml:69
618msgid "Your device uses positioning technologies provided by HERE."
624msgid "Your device uses positioning technologies provided by HERE."
619−msgstr ""
625+msgstr "Laitteesi käyttää HERE:n tarjoamia sijaintiteknologioita."
620
626
621#: qml/Wizard/Pages/here-terms.qml:81
627#: qml/Wizard/Pages/here-terms.qml:81
622msgid ""
628msgid ""
@@ -624,21 +630,26 @@ msgid ""
624"collects information about nearby cell towers and Wi-Fi hotspots around your "
630"collects information about nearby cell towers and Wi-Fi hotspots around your "
625"current location whenever your position is being found."
631"current location whenever your position is being found."
626msgstr ""
632msgstr ""
633+"Sijaintipalvelujen ja niiden parantamisen vuoksi HERE kerää tietoja "
634+"lähelläsi olevista matkapuhelinmastoista ja wifi-tukiasemista, kun "
635+"sijaintisi paikannetaan."
627
636
628#: qml/Wizard/Pages/here-terms.qml:93
637#: qml/Wizard/Pages/here-terms.qml:93
629msgid ""
638msgid ""
630"The information collected is used to analyze the service and to improve the "
639"The information collected is used to analyze the service and to improve the "
631"use of service, but not to identify you personally."
640"use of service, but not to identify you personally."
632msgstr ""
641msgstr ""
642+"Kerättyä tietoa käytetään palvelun analysointiin ja palvelun parantamiseen, "
643+"mutta ei sinun henkilökohtaiseen tunnistamiseen."
633
644
634#: qml/Wizard/Pages/here-terms.qml:106
645#: qml/Wizard/Pages/here-terms.qml:106
635#, qt-format
646#, qt-format
636msgid "By continuing, you agree to the HERE platform %1 and %2."
647msgid "By continuing, you agree to the HERE platform %1 and %2."
637−msgstr ""
648+msgstr "Jatkamalla hyväksyt HERE-alustan %1 ja %2."
638
649
639#: qml/Wizard/Pages/here-terms.qml:107
650#: qml/Wizard/Pages/here-terms.qml:107
640msgid "Service Terms"
651msgid "Service Terms"
641−msgstr ""
652+msgstr "palveluehdot"
642
653
643#: qml/Wizard/Pages/passcode-confirm.qml:43
654#: qml/Wizard/Pages/passcode-confirm.qml:43
644#: qml/Wizard/Pages/passcode-desktop.qml:80
655#: qml/Wizard/Pages/passcode-desktop.qml:80
@@ -647,69 +658,69 @@ msgstr "Vahvista suojakoodi"
647
658
648#: qml/Wizard/Pages/passcode-confirm.qml:45
659#: qml/Wizard/Pages/passcode-confirm.qml:45
649msgid "Incorrect passcode."
660msgid "Incorrect passcode."
650−msgstr ""
661+msgstr "Virheellinen suojakoodi."
651
662
652#: qml/Wizard/Pages/passcode-confirm.qml:45
663#: qml/Wizard/Pages/passcode-confirm.qml:45
653msgctxt "Enter the passcode again"
664msgctxt "Enter the passcode again"
654msgid "Please re-enter."
665msgid "Please re-enter."
655−msgstr ""
666+msgstr "Anna uudelleen"
656
667
657#: qml/Wizard/Pages/passcode-desktop.qml:30
668#: qml/Wizard/Pages/passcode-desktop.qml:30
658msgid "Lock Screen Passcode"
669msgid "Lock Screen Passcode"
659−msgstr ""
670+msgstr "Lukitusnäytön suojakoodi"
660
671
661#: qml/Wizard/Pages/passcode-desktop.qml:56
672#: qml/Wizard/Pages/passcode-desktop.qml:56
662msgid "Enter 4 numbers to setup your passcode"
673msgid "Enter 4 numbers to setup your passcode"
663−msgstr ""
674+msgstr "Anna 4 numeroa määrittääksesi suojakoodisi"
664
675
665#: qml/Wizard/Pages/passcode-desktop.qml:65
676#: qml/Wizard/Pages/passcode-desktop.qml:65
666#: qml/Wizard/Pages/passcode-set.qml:54
677#: qml/Wizard/Pages/passcode-set.qml:54
667msgid "Choose passcode"
678msgid "Choose passcode"
668−msgstr ""
679+msgstr "Valitse suojakoodi"
669
680
670#: qml/Wizard/Pages/passcode-desktop.qml:105
681#: qml/Wizard/Pages/passcode-desktop.qml:105
671msgid "Passcode too short"
682msgid "Passcode too short"
672−msgstr ""
683+msgstr "Suojakoodi on liian lyhyt"
673
684
674#: qml/Wizard/Pages/passcode-desktop.qml:107
685#: qml/Wizard/Pages/passcode-desktop.qml:107
675msgid "Passcodes match"
686msgid "Passcodes match"
676−msgstr ""
687+msgstr "Suojakoodit vastaavat toisiaan"
677
688
678#: qml/Wizard/Pages/passcode-desktop.qml:109
689#: qml/Wizard/Pages/passcode-desktop.qml:109
679msgid "Passcodes do not match"
690msgid "Passcodes do not match"
680−msgstr ""
691+msgstr "Suojakoodit eivät vastaa toisiaan"
681
692
682#: qml/Wizard/Pages/passcode-set.qml:62
693#: qml/Wizard/Pages/passcode-set.qml:62
683msgid "Passcode must be 4 characters long"
694msgid "Passcode must be 4 characters long"
684−msgstr ""
695+msgstr "Suojakoodin tulee olla 4 merkkiä pitkä"
685
696
686#: qml/Wizard/Pages/password-set.qml:30
697#: qml/Wizard/Pages/password-set.qml:30
687msgid "Lock Screen Password"
698msgid "Lock Screen Password"
688−msgstr ""
699+msgstr "Lukitusnäytön salasana"
689
700
690#: qml/Wizard/Pages/password-set.qml:61
701#: qml/Wizard/Pages/password-set.qml:61
691msgid "Enter at least 8 characters"
702msgid "Enter at least 8 characters"
692−msgstr ""
703+msgstr "Anna ainakin 8 merkkiä"
693
704
694#: qml/Wizard/Pages/password-set.qml:73
705#: qml/Wizard/Pages/password-set.qml:73
695msgid "Choose password"
706msgid "Choose password"
696−msgstr ""
707+msgstr "Valitse salasana"
697
708
698#: qml/Wizard/Pages/password-set.qml:103
709#: qml/Wizard/Pages/password-set.qml:103
699msgid "Confirm password"
710msgid "Confirm password"
700−msgstr ""
711+msgstr "Vahvista salasana"
701
712
702#: qml/Wizard/Pages/sim.qml:27
713#: qml/Wizard/Pages/sim.qml:27
703msgid "No SIM card installed"
714msgid "No SIM card installed"
704−msgstr ""
715+msgstr "SIM-korttia ei ole asennettu"
705
716
706#: qml/Wizard/Pages/sim.qml:54
717#: qml/Wizard/Pages/sim.qml:54
707msgid "SIM card added"
718msgid "SIM card added"
708−msgstr ""
719+msgstr "SIM-kortti lisätty"
709
720
710#: qml/Wizard/Pages/sim.qml:55
721#: qml/Wizard/Pages/sim.qml:55
711msgid "You must restart the device to access the mobile network."
722msgid "You must restart the device to access the mobile network."
712−msgstr ""
723+msgstr "Käynnistä laite uudelleen, jotta voit käyttää mobiiliverkkoa."
713
724
714#: qml/Wizard/Pages/sim.qml:59
725#: qml/Wizard/Pages/sim.qml:59
715msgid "Restart"
726msgid "Restart"
@@ -717,35 +728,35 @@ msgstr "Käynnistä uudelleen"
717
728
718#: qml/Wizard/Pages/sim.qml:78
729#: qml/Wizard/Pages/sim.qml:78
719msgid "You won’t be able to make calls or use text messaging without a SIM."
730msgid "You won’t be able to make calls or use text messaging without a SIM."
720−msgstr ""
731+msgstr "Et voi käyttää puheluita ja tekstiviestejä ilman SIM-korttia."
721
732
722#: qml/Wizard/Pages/sim.qml:90
733#: qml/Wizard/Pages/sim.qml:90
723msgid "To proceed with no SIM tap Skip."
734msgid "To proceed with no SIM tap Skip."
724−msgstr ""
735+msgstr "Valitse \"Ohita\" jatkaaksesi ilman SIM-korttia."
725
736
726#: qml/Wizard/PasswordMeter.qml:87
737#: qml/Wizard/PasswordMeter.qml:87
727msgid "Passwords match"
738msgid "Passwords match"
728−msgstr ""
739+msgstr "Salasanat vastaavat toisiaan"
729
740
730#: qml/Wizard/PasswordMeter.qml:89
741#: qml/Wizard/PasswordMeter.qml:89
731msgid "Passwords do not match"
742msgid "Passwords do not match"
732−msgstr ""
743+msgstr "Salasanat eivät vastaa toisiaan"
733
744
734#: qml/Wizard/PasswordMeter.qml:93
745#: qml/Wizard/PasswordMeter.qml:93
735msgid "Strong password"
746msgid "Strong password"
736−msgstr ""
747+msgstr "Vahva salasana"
737
748
738#: qml/Wizard/PasswordMeter.qml:95
749#: qml/Wizard/PasswordMeter.qml:95
739msgid "Fair password"
750msgid "Fair password"
740−msgstr ""
751+msgstr "Keskinkertainen salasana"
741
752
742#: qml/Wizard/PasswordMeter.qml:97
753#: qml/Wizard/PasswordMeter.qml:97
743msgid "Weak password"
754msgid "Weak password"
744−msgstr ""
755+msgstr "Heikko salasana"
745
756
746#: qml/Wizard/PasswordMeter.qml:99
757#: qml/Wizard/PasswordMeter.qml:99
747msgid "Very weak password"
758msgid "Very weak password"
748−msgstr ""
759+msgstr "Erittäin heikko salasana"
749
760
750#~ msgid "Confirm"
761#~ msgid "Confirm"
751#~ msgstr "Hyväksy"
762#~ msgstr "Hyväksy"
@@ -1060,11 +1071,6 @@ msgstr ""
1060#~ msgid "Call back"
1071#~ msgid "Call back"
1061#~ msgstr "Soita takaisin"
1072#~ msgstr "Soita takaisin"
1062
1073
1063−#~ msgid "Welcome to your Ubuntu device."
1074+#~ msgid "Hover your mouse on the right edge to view your open apps"
1064−#~ msgstr "Tervetuloa Ubuntu-laitteesi pariin."
1075+#~ msgstr ""
1065−
1076+#~ "Vie hiiren osoitin oikeaan reunaan nähdäksesi avoinna olevat sovellukset"
1066−#~ msgid "Please select how you’d like to unlock your device."
1067−#~ msgstr "Valitse kuinka haluat avata laitteen lukituksen."
1068−
1069−#~ msgid "Your device is now ready to use."
1070−#~ msgstr "Laitteesi on nyt valmis käytettäväksi."
po/fo.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2014-01-14 20:08+0000\n"
11"PO-Revision-Date: 2014-01-14 20:08+0000\n"
12"Last-Translator: Jógvan Olsen <jeggy@jebster.net>\n"
12"Last-Translator: Jógvan Olsen <jeggy@jebster.net>\n"
13"Language-Team: Faroese <fo@li.org>\n"
13"Language-Team: Faroese <fo@li.org>\n"
@@ -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: 2016-03-24 06:07+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/fr.po+18−15
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2016-03-26 13:06+0000\n"
11"PO-Revision-Date: 2016-03-26 13:06+0000\n"
12"Last-Translator: Jean-Marc <Unknown>\n"
12"Last-Translator: Jean-Marc <Unknown>\n"
13"Language-Team: French <fr@li.org>\n"
13"Language-Team: French <fr@li.org>\n"
@@ -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: 2016-03-27 05:47+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17967)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -460,22 +460,21 @@ msgstr "Faites glisser vers le haut pour créer un message"
460msgid "Swipe up to manage the app"
460msgid "Swipe up to manage the app"
461msgstr "Faites glisser vers le haut pour gérer l'application"
461msgstr "Faites glisser vers le haut pour gérer l'application"
462
462
463−#: qml/Tutorial/TutorialLeft.qml:47
464−msgid "Swipe from the left edge to open the launcher"
465−msgstr "Faites glisser à partir du bord gauche pour ouvrir le lanceur"
466−
467#: qml/Tutorial/TutorialLeftLong.qml:47
463#: qml/Tutorial/TutorialLeftLong.qml:47
468msgid "Long swipe from the left edge to open the Today scope"
464msgid "Long swipe from the left edge to open the Today scope"
469msgstr ""
465msgstr ""
470"Faites glisser à partir du bord gauche jusqu'au bord droit pour ouvrir le "
466"Faites glisser à partir du bord gauche jusqu'au bord droit pour ouvrir le "
471"moteur de recherche Aujourd'hui"
467"moteur de recherche Aujourd'hui"
472
468
473−#: qml/Tutorial/TutorialRight.qml:54
469+#: qml/Tutorial/TutorialLeft.qml:47
474−msgid "Hover your mouse on the right edge to view your open apps"
470+msgid "Swipe from the left edge to open the launcher"
475−msgstr ""
471+msgstr "Faites glisser à partir du bord gauche pour ouvrir le lanceur"
476−"Passez votre souris sur le bord droit pour voir vos applications ouvertes"
477
472
478#: qml/Tutorial/TutorialRight.qml:55
473#: qml/Tutorial/TutorialRight.qml:55
474+msgid "Push your mouse against the right edge to view your open apps"
475+msgstr ""
476+
477+#: qml/Tutorial/TutorialRight.qml:56
479msgid "Short or long swipe from the right edge to view your open apps"
478msgid "Short or long swipe from the right edge to view your open apps"
480msgstr ""
479msgstr ""
481"Faites glisser brièvement ou longuement à partir du bord droit pour voir vos "
480"Faites glisser brièvement ou longuement à partir du bord droit pour voir vos "
@@ -564,7 +563,7 @@ msgstr "Ne pas utiliser ma position"
564
563
565#: qml/Wizard/Pages/40-location.qml:260
564#: qml/Wizard/Pages/40-location.qml:260
566msgid "You can change it later in System Settings."
565msgid "You can change it later in System Settings."
567−msgstr "Vous pouvez le modifier ultérieurement dans les Paramètres système."
566+msgstr "Vous pourrez le modifier ultérieurement dans les Paramètres système."
568
567
569#: qml/Wizard/Pages/50-timezone.qml:29
568#: qml/Wizard/Pages/50-timezone.qml:29
570msgid "Time Zone"
569msgid "Time Zone"
@@ -607,7 +606,7 @@ msgstr "Politique de confidentialité"
607
606
608#: qml/Wizard/Pages/75-report-check.qml:26
607#: qml/Wizard/Pages/75-report-check.qml:26
609msgid "Help Us Improve"
608msgid "Help Us Improve"
610−msgstr "Aidez-nous à améliorer"
609+msgstr "Aidez-nous à nous améliorer"
611
610
612#: qml/Wizard/Pages/75-report-check.qml:59
611#: qml/Wizard/Pages/75-report-check.qml:59
613msgid "Improve system performance by sending us crashes and error reports."
612msgid "Improve system performance by sending us crashes and error reports."
@@ -617,7 +616,7 @@ msgstr ""
617
616
618#: qml/Wizard/Pages/75-report-check.qml:60
617#: qml/Wizard/Pages/75-report-check.qml:60
619msgid "Privacy policy"
618msgid "Privacy policy"
620−msgstr "Politique relative à la vie privée"
619+msgstr "Politique de confidentialité"
621
620
622#: qml/Wizard/Pages/80-finished.qml:89
621#: qml/Wizard/Pages/80-finished.qml:89
623msgid "Welcome to Ubuntu"
622msgid "Welcome to Ubuntu"
@@ -752,7 +751,7 @@ msgstr ""
752
751
753#: qml/Wizard/Pages/sim.qml:90
752#: qml/Wizard/Pages/sim.qml:90
754msgid "To proceed with no SIM tap Skip."
753msgid "To proceed with no SIM tap Skip."
755−msgstr "Pour poursuivre sans carte SIM, appuyez sur « Ignorer »"
754+msgstr "Pour poursuivre sans carte SIM, appuyez sur « Passer »"
756
755
757#: qml/Wizard/PasswordMeter.qml:87
756#: qml/Wizard/PasswordMeter.qml:87
758msgid "Passwords match"
757msgid "Passwords match"
@@ -1102,3 +1101,7 @@ msgstr "Mot de passe très faible"
1102
1101
1103#~ msgid "Call back"
1102#~ msgid "Call back"
1104#~ msgstr "Rappeler"
1103#~ msgstr "Rappeler"
1104+
1105+#~ msgid "Hover your mouse on the right edge to view your open apps"
1106+#~ msgstr ""
1107+#~ "Passez votre souris sur le bord droit pour voir vos applications ouvertes"
po/ga.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2016-01-25 11:33+0000\n"
11"PO-Revision-Date: 2016-01-25 11:33+0000\n"
12"Last-Translator: Joshua Kiley <Unknown>\n"
12"Last-Translator: Joshua Kiley <Unknown>\n"
13"Language-Team: Irish <ga@li.org>\n"
13"Language-Team: Irish <ga@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;\n"
17"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;\n"
18−"X-Launchpad-Export-Date: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -448,19 +448,19 @@ msgstr ""
448msgid "Swipe up to manage the app"
448msgid "Swipe up to manage the app"
449msgstr ""
449msgstr ""
450
450
451−#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Swipe from the left edge to open the launcher"
453−msgstr ""
454−
455#: qml/Tutorial/TutorialLeftLong.qml:47
451#: qml/Tutorial/TutorialLeftLong.qml:47
456msgid "Long swipe from the left edge to open the Today scope"
452msgid "Long swipe from the left edge to open the Today scope"
457msgstr ""
453msgstr ""
458
454
459−#: qml/Tutorial/TutorialRight.qml:54
455+#: qml/Tutorial/TutorialLeft.qml:47
460−msgid "Hover your mouse on the right edge to view your open apps"
456+msgid "Swipe from the left edge to open the launcher"
461msgstr ""
457msgstr ""
462
458
463#: qml/Tutorial/TutorialRight.qml:55
459#: qml/Tutorial/TutorialRight.qml:55
460+msgid "Push your mouse against the right edge to view your open apps"
461+msgstr ""
462+
463+#: qml/Tutorial/TutorialRight.qml:56
464msgid "Short or long swipe from the right edge to view your open apps"
464msgid "Short or long swipe from the right edge to view your open apps"
465msgstr ""
465msgstr ""
466
466
po/gd.po+95−75
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11−"PO-Revision-Date: 2015-07-16 10:56+0000\n"
11+"PO-Revision-Date: 2016-04-08 18:34+0000\n"
12−"Last-Translator: GunChleoc <Unknown>\n"
12+"Last-Translator: Akerbeltz <fios@akerbeltz.org>\n"
13"Language-Team: Fòram na Gàidhlig\n"
13"Language-Team: Fòram na Gàidhlig\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
17"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
18"(n > 2 && n < 20) ? 2 : 3;\n"
18"(n > 2 && n < 20) ? 2 : 3;\n"
19−"X-Launchpad-Export-Date: 2016-03-24 06:08+0000\n"
19+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
20−"X-Generator: Launchpad (build 17958)\n"
20+"X-Generator: Launchpad (build 17995)\n"
21"Language: gd\n"
21"Language: gd\n"
22
22
23#: plugins/IntegratedLightDM/Greeter.cpp:112
23#: plugins/IntegratedLightDM/Greeter.cpp:112
@@ -192,11 +192,11 @@ msgstr "Cuir ris na h-annsachdan"
192
192
193#: qml/Dash/FiltersPopover.qml:60
193#: qml/Dash/FiltersPopover.qml:60
194msgid "Refine your results"
194msgid "Refine your results"
195−msgstr ""
195+msgstr "Cuir na toraidhean air gleus"
196
196
197#: qml/Dash/FiltersPopover.qml:69
197#: qml/Dash/FiltersPopover.qml:69
198msgid "Reset"
198msgid "Reset"
199−msgstr ""
199+msgstr "Ath-shuidhich"
200
200
201#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
201#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
202msgid "See less"
202msgid "See less"
@@ -213,11 +213,11 @@ msgstr "Lorg"
213
213
214#: qml/Dash/PageHeaderExtraPanel.qml:55
214#: qml/Dash/PageHeaderExtraPanel.qml:55
215msgid "Recent Searches"
215msgid "Recent Searches"
216−msgstr ""
216+msgstr "Na lorg thu roimhe"
217
217
218#: qml/Dash/PageHeaderExtraPanel.qml:66
218#: qml/Dash/PageHeaderExtraPanel.qml:66
219msgid "Clear All"
219msgid "Clear All"
220−msgstr ""
220+msgstr "Falamhaich na h-uile"
221
221
222#: qml/Dash/Previews/PreviewActionCombo.qml:35
222#: qml/Dash/Previews/PreviewActionCombo.qml:35
223msgid "More..."
223msgid "More..."
@@ -446,50 +446,60 @@ msgstr "Fònaig air ais"
446#: qml/Stages/SideStage.qml:76
446#: qml/Stages/SideStage.qml:76
447msgid "Drag using 3 fingers any application from one window to the other"
447msgid "Drag using 3 fingers any application from one window to the other"
448msgstr ""
448msgstr ""
449+"Dèan slaodadh le trì corragan gus aplacaid a shlaodadh o uinneag gu uinneag "
450+"eile"
449
451
450#: qml/Tutorial/TutorialBottom.qml:78
452#: qml/Tutorial/TutorialBottom.qml:78
451msgid "Swipe up to add a contact"
453msgid "Swipe up to add a contact"
452−msgstr ""
454+msgstr "Dèan grad-shlaighdeadh suas airson neach-aithne a chur ris"
453
455
454#: qml/Tutorial/TutorialBottom.qml:80
456#: qml/Tutorial/TutorialBottom.qml:80
455msgid "Swipe up for favorite calculations"
457msgid "Swipe up for favorite calculations"
456msgstr ""
458msgstr ""
459+"Dèan grad-shlaighdeadh suas airson na h-àireamhachaidhean coitcheann agad"
457
460
458#: qml/Tutorial/TutorialBottom.qml:82
461#: qml/Tutorial/TutorialBottom.qml:82
459msgid "Swipe up for recent calls"
462msgid "Swipe up for recent calls"
460msgstr ""
463msgstr ""
464+"Dèan grad-shlaighdeadh suas airson gairmean a rinn thu o chionn goirid"
461
465
462#: qml/Tutorial/TutorialBottom.qml:84
466#: qml/Tutorial/TutorialBottom.qml:84
463msgid "Swipe up to create a message"
467msgid "Swipe up to create a message"
464−msgstr ""
468+msgstr "Dèan grad-shlaighdeadh suas airson teachdaireachd a chruthachadh"
465
469
466#: qml/Tutorial/TutorialBottom.qml:85
470#: qml/Tutorial/TutorialBottom.qml:85
467msgid "Swipe up to manage the app"
471msgid "Swipe up to manage the app"
468−msgstr ""
472+msgstr "Dèan grad-shlaighdeadh suas gus an aplacaid a stiùireadh"
469−
470−#: qml/Tutorial/TutorialLeft.qml:47
471−msgid "Swipe from the left edge to open the launcher"
472−msgstr ""
473
473
474#: qml/Tutorial/TutorialLeftLong.qml:47
474#: qml/Tutorial/TutorialLeftLong.qml:47
475msgid "Long swipe from the left edge to open the Today scope"
475msgid "Long swipe from the left edge to open the Today scope"
476msgstr ""
476msgstr ""
477+"Dèan grad-shlaighdeadh a-steach on oir chlì gus breath an latha an-diugh "
478+"fhosgladh"
477
479
478−#: qml/Tutorial/TutorialRight.qml:54
480+#: qml/Tutorial/TutorialLeft.qml:47
479−msgid "Hover your mouse on the right edge to view your open apps"
481+msgid "Swipe from the left edge to open the launcher"
480msgstr ""
482msgstr ""
483+"Dèan grad-shlaighdeadh a-steach on oir chlì gus an lòinsear a chur gu dol"
481
484
482#: qml/Tutorial/TutorialRight.qml:55
485#: qml/Tutorial/TutorialRight.qml:55
486+msgid "Push your mouse against the right edge to view your open apps"
487+msgstr ""
488+
489+#: qml/Tutorial/TutorialRight.qml:56
483msgid "Short or long swipe from the right edge to view your open apps"
490msgid "Short or long swipe from the right edge to view your open apps"
484msgstr ""
491msgstr ""
492+"Dèan grad-shlaighdeadh fada no goirid on oir dheas a dh’fhaicinn nan "
493+"aplacaidean fosgailte agad"
485
494
486#: qml/Tutorial/TutorialTop.qml:53
495#: qml/Tutorial/TutorialTop.qml:53
487msgid "Swipe from the top right edge to open the notification bar"
496msgid "Swipe from the top right edge to open the notification bar"
488msgstr ""
497msgstr ""
498+"Dèan grad-shlaighdeadh a-nuas on oir dheas a dh’fhosgladh bàr nam brathan"
489
499
490#: qml/Tutorial/TutorialTop.qml:54
500#: qml/Tutorial/TutorialTop.qml:54
491msgid "Swipe from the top edge to open the notification bar"
501msgid "Swipe from the top edge to open the notification bar"
492−msgstr ""
502+msgstr "Dèan grad-shlaighdeadh a-nuas on oir a dh’fhosgladh bàr nam brathan"
493
503
494#: qml/Wizard/Page.qml:54
504#: qml/Wizard/Page.qml:54
495msgctxt "Button: Go back one page in the Wizard"
505msgctxt "Button: Go back one page in the Wizard"
@@ -498,7 +508,7 @@ msgstr "Air ais"
498
508
499#: qml/Wizard/Pages/10-welcome.qml:27
509#: qml/Wizard/Pages/10-welcome.qml:27
500msgid "Language"
510msgid "Language"
501−msgstr ""
511+msgstr "Cànan"
502
512
503#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
513#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
504#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
514#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
@@ -507,7 +517,7 @@ msgstr ""
507#: qml/Wizard/Pages/passcode-desktop.qml:124
517#: qml/Wizard/Pages/passcode-desktop.qml:124
508#: qml/Wizard/Pages/password-set.qml:141
518#: qml/Wizard/Pages/password-set.qml:141
509msgid "Next"
519msgid "Next"
510−msgstr ""
520+msgstr "Air adhart"
511
521
512#: qml/Wizard/Pages/30-wifi.qml:29
522#: qml/Wizard/Pages/30-wifi.qml:29
513msgid "Connect to Wi‑Fi"
523msgid "Connect to Wi‑Fi"
@@ -515,15 +525,15 @@ msgstr "Ceangail ri Wi-Fi"
515
525
516#: qml/Wizard/Pages/30-wifi.qml:130
526#: qml/Wizard/Pages/30-wifi.qml:130
517msgid "Connected"
527msgid "Connected"
518−msgstr ""
528+msgstr "Ceangailte"
519
529
520#: qml/Wizard/Pages/30-wifi.qml:163
530#: qml/Wizard/Pages/30-wifi.qml:163
521msgid "Available Wi-Fi networks"
531msgid "Available Wi-Fi networks"
522−msgstr ""
532+msgstr "Lìonraidhean WiFi a tha ri làimh"
523
533
524#: qml/Wizard/Pages/30-wifi.qml:164
534#: qml/Wizard/Pages/30-wifi.qml:164
525msgid "No available Wi-Fi networks"
535msgid "No available Wi-Fi networks"
526−msgstr ""
536+msgstr "Chan eil lìonra WiFi sam bith ann"
527
537
528#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
538#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
529#: qml/Wizard/Pages/sim.qml:101
539#: qml/Wizard/Pages/sim.qml:101
@@ -532,98 +542,103 @@ msgstr "Leum thairis air"
532
542
533#: qml/Wizard/Pages/40-location.qml:27
543#: qml/Wizard/Pages/40-location.qml:27
534msgid "Location Services"
544msgid "Location Services"
535−msgstr ""
545+msgstr "Seirbheisean ionaid"
536
546
537#: qml/Wizard/Pages/40-location.qml:83
547#: qml/Wizard/Pages/40-location.qml:83
538msgid ""
548msgid ""
539"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
549"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
540"(recommended)"
550"(recommended)"
541msgstr ""
551msgstr ""
552+"Cleachd GPS, hotspots WiFi is lìonraidhean mobile gun urra a dh’fhiosrachadh "
553+"d’ ionaid (mholamaid seo)"
542
554
543#: qml/Wizard/Pages/40-location.qml:105
555#: qml/Wizard/Pages/40-location.qml:105
544#, qt-format
556#, qt-format
545msgid "By selecting this option you agree to the Nokia HERE %1."
557msgid "By selecting this option you agree to the Nokia HERE %1."
546msgstr ""
558msgstr ""
559+"Ma thaghas tu an roghainn seo, bidh thu ag aontachadh ri %1 Nokia HERE."
547
560
548#: qml/Wizard/Pages/40-location.qml:106
561#: qml/Wizard/Pages/40-location.qml:106
549msgctxt "part of: Nokia HERE terms and conditions"
562msgctxt "part of: Nokia HERE terms and conditions"
550msgid "terms and conditions"
563msgid "terms and conditions"
551−msgstr ""
564+msgstr "teirmichean is cumhaichean"
552
565
553#: qml/Wizard/Pages/40-location.qml:160
566#: qml/Wizard/Pages/40-location.qml:160
554msgid "GPS only"
567msgid "GPS only"
555−msgstr ""
568+msgstr "GPS a-mhàin"
556
569
557#: qml/Wizard/Pages/40-location.qml:214
570#: qml/Wizard/Pages/40-location.qml:214
558msgid "Don't use my location"
571msgid "Don't use my location"
559−msgstr ""
572+msgstr "Na cleachd m’ ionad"
560
573
561#: qml/Wizard/Pages/40-location.qml:260
574#: qml/Wizard/Pages/40-location.qml:260
562msgid "You can change it later in System Settings."
575msgid "You can change it later in System Settings."
563−msgstr ""
576+msgstr "’S urrainn dhut seo atharrachadh sna roghainnean uair sam bith"
564
577
565#: qml/Wizard/Pages/50-timezone.qml:29
578#: qml/Wizard/Pages/50-timezone.qml:29
566msgid "Time Zone"
579msgid "Time Zone"
567−msgstr ""
580+msgstr "Roinn-tìde"
568
581
569#: qml/Wizard/Pages/50-timezone.qml:178
582#: qml/Wizard/Pages/50-timezone.qml:178
570msgid "Enter your city"
583msgid "Enter your city"
571−msgstr ""
584+msgstr "Cuir a-steach do bhaile"
572
585
573#: qml/Wizard/Pages/60-account.qml:24
586#: qml/Wizard/Pages/60-account.qml:24
574msgid "Personalize Your Device"
587msgid "Personalize Your Device"
575−msgstr ""
588+msgstr "Cuir dreach pearsanta air an uidheam agad"
576
589
577#: qml/Wizard/Pages/60-account.qml:48
590#: qml/Wizard/Pages/60-account.qml:48
578msgid "Preferred Name"
591msgid "Preferred Name"
579−msgstr ""
592+msgstr "An t-ainm as fhearr leat"
580
593
581#: qml/Wizard/Pages/70-passwd-type.qml:39
594#: qml/Wizard/Pages/70-passwd-type.qml:39
582msgid "Lock Screen"
595msgid "Lock Screen"
583−msgstr ""
596+msgstr "Glais an sgrìn"
584
597
585#: qml/Wizard/Pages/70-passwd-type.qml:101
598#: qml/Wizard/Pages/70-passwd-type.qml:101
586msgctxt "Label: Type of security method"
599msgctxt "Label: Type of security method"
587msgid "Create new password"
600msgid "Create new password"
588−msgstr ""
601+msgstr "Cruthaich facal-faire ùr"
589
602
590#: qml/Wizard/Pages/70-passwd-type.qml:103
603#: qml/Wizard/Pages/70-passwd-type.qml:103
591msgctxt "Label: Type of security method"
604msgctxt "Label: Type of security method"
592msgid "Create passcode (numbers only)"
605msgid "Create passcode (numbers only)"
593−msgstr ""
606+msgstr "Cruthaich còd-faire (àireamhan a-mhàin)"
594
607
595#: qml/Wizard/Pages/70-passwd-type.qml:105
608#: qml/Wizard/Pages/70-passwd-type.qml:105
596msgctxt "Label: Type of security method"
609msgctxt "Label: Type of security method"
597msgid "No lock code"
610msgid "No lock code"
598−msgstr ""
611+msgstr "Gun chòd-faire"
599
612
600#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
613#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
601msgid "Privacy Policy"
614msgid "Privacy Policy"
602−msgstr ""
615+msgstr "Am poileasaidh prìobhaideachd"
603
616
604#: qml/Wizard/Pages/75-report-check.qml:26
617#: qml/Wizard/Pages/75-report-check.qml:26
605msgid "Help Us Improve"
618msgid "Help Us Improve"
606−msgstr ""
619+msgstr "Cuidich leinn ’ga leasachadh"
607
620
608#: qml/Wizard/Pages/75-report-check.qml:59
621#: qml/Wizard/Pages/75-report-check.qml:59
609msgid "Improve system performance by sending us crashes and error reports."
622msgid "Improve system performance by sending us crashes and error reports."
610msgstr ""
623msgstr ""
624+"Leasaich an siostam còmhla rinn is tu a’ cur thugainn aithisgean mu "
625+"thuislidhean is mearachdan."
611
626
612#: qml/Wizard/Pages/75-report-check.qml:60
627#: qml/Wizard/Pages/75-report-check.qml:60
613msgid "Privacy policy"
628msgid "Privacy policy"
614−msgstr ""
629+msgstr "Am poileasaidh prìobhaideachd"
615
630
616#: qml/Wizard/Pages/80-finished.qml:89
631#: qml/Wizard/Pages/80-finished.qml:89
617msgid "Welcome to Ubuntu"
632msgid "Welcome to Ubuntu"
618−msgstr ""
633+msgstr "Fàilte gu Ubuntu"
619
634
620#: qml/Wizard/Pages/80-finished.qml:104
635#: qml/Wizard/Pages/80-finished.qml:104
621msgid "You are ready to use your device now"
636msgid "You are ready to use your device now"
622−msgstr ""
637+msgstr "Tha an t-uidheam deas ri do làimh a-nis"
623
638
624#: qml/Wizard/Pages/80-finished.qml:124
639#: qml/Wizard/Pages/80-finished.qml:124
625msgid "Get Started"
640msgid "Get Started"
626−msgstr ""
641+msgstr "Toiseach-tòiseachaidh"
627
642
628#: qml/Wizard/Pages/here-terms.qml:25
643#: qml/Wizard/Pages/here-terms.qml:25
629msgid "Terms & Conditions"
644msgid "Terms & Conditions"
@@ -631,7 +646,7 @@ msgstr "Teirmichean ⁊ cumhaichean"
631
646
632#: qml/Wizard/Pages/here-terms.qml:69
647#: qml/Wizard/Pages/here-terms.qml:69
633msgid "Your device uses positioning technologies provided by HERE."
648msgid "Your device uses positioning technologies provided by HERE."
634−msgstr ""
649+msgstr "’S e HERE a tha a’ solar teicneolas ionad an uidheim agad."
635
650
636#: qml/Wizard/Pages/here-terms.qml:81
651#: qml/Wizard/Pages/here-terms.qml:81
637msgid ""
652msgid ""
@@ -639,21 +654,28 @@ msgid ""
639"collects information about nearby cell towers and Wi-Fi hotspots around your "
654"collects information about nearby cell towers and Wi-Fi hotspots around your "
640"current location whenever your position is being found."
655"current location whenever your position is being found."
641msgstr ""
656msgstr ""
657+"Airson ’s gun urrainn dha HERE d’ ionad a dh’fhiosrachadh dhut is càileachd "
658+"nan seirbheisean aca a leasachadh, cruinnichidh iad fiosrachadh mu thùir nam "
659+"fònaichean-làimhe is hotspots WiFI faisg ort nuair a dh’fhiosraicheas iad d’ "
660+"ionad."
642
661
643#: qml/Wizard/Pages/here-terms.qml:93
662#: qml/Wizard/Pages/here-terms.qml:93
644msgid ""
663msgid ""
645"The information collected is used to analyze the service and to improve the "
664"The information collected is used to analyze the service and to improve the "
646"use of service, but not to identify you personally."
665"use of service, but not to identify you personally."
647msgstr ""
666msgstr ""
667+"Cleachdar am fiosrachadh seo airson mion-sgrùdadh a dhèanamh air an t-"
668+"seirbheis agus a leasachadh ach chan ann gus d’ aithneachadh gu pearsanta."
648
669
649#: qml/Wizard/Pages/here-terms.qml:106
670#: qml/Wizard/Pages/here-terms.qml:106
650#, qt-format
671#, qt-format
651msgid "By continuing, you agree to the HERE platform %1 and %2."
672msgid "By continuing, you agree to the HERE platform %1 and %2."
652msgstr ""
673msgstr ""
674+"Ma leanas tu air adhart, bidh thu ag aontachadh ri %1 agus %2 ùrlar HERE."
653
675
654#: qml/Wizard/Pages/here-terms.qml:107
676#: qml/Wizard/Pages/here-terms.qml:107
655msgid "Service Terms"
677msgid "Service Terms"
656−msgstr ""
678+msgstr "teirmichean na seirbheise"
657
679
658#: qml/Wizard/Pages/passcode-confirm.qml:43
680#: qml/Wizard/Pages/passcode-confirm.qml:43
659#: qml/Wizard/Pages/passcode-desktop.qml:80
681#: qml/Wizard/Pages/passcode-desktop.qml:80
@@ -662,69 +684,71 @@ msgstr "Dearbhaich an còd-faire"
662
684
663#: qml/Wizard/Pages/passcode-confirm.qml:45
685#: qml/Wizard/Pages/passcode-confirm.qml:45
664msgid "Incorrect passcode."
686msgid "Incorrect passcode."
665−msgstr ""
687+msgstr "Tha an còd-faire cearr."
666
688
667#: qml/Wizard/Pages/passcode-confirm.qml:45
689#: qml/Wizard/Pages/passcode-confirm.qml:45
668msgctxt "Enter the passcode again"
690msgctxt "Enter the passcode again"
669msgid "Please re-enter."
691msgid "Please re-enter."
670−msgstr ""
692+msgstr "Cuir a-steach e às ùr."
671
693
672#: qml/Wizard/Pages/passcode-desktop.qml:30
694#: qml/Wizard/Pages/passcode-desktop.qml:30
673msgid "Lock Screen Passcode"
695msgid "Lock Screen Passcode"
674−msgstr ""
696+msgstr "Còd-faire na sgrin-ghlasaidh"
675
697
676#: qml/Wizard/Pages/passcode-desktop.qml:56
698#: qml/Wizard/Pages/passcode-desktop.qml:56
677msgid "Enter 4 numbers to setup your passcode"
699msgid "Enter 4 numbers to setup your passcode"
678−msgstr ""
700+msgstr "Cuir a-steach 4 àireamhan a bhios ’nan còd-faire agad"
679
701
680#: qml/Wizard/Pages/passcode-desktop.qml:65
702#: qml/Wizard/Pages/passcode-desktop.qml:65
681#: qml/Wizard/Pages/passcode-set.qml:54
703#: qml/Wizard/Pages/passcode-set.qml:54
682msgid "Choose passcode"
704msgid "Choose passcode"
683−msgstr ""
705+msgstr "Tagh còd-faire"
684
706
685#: qml/Wizard/Pages/passcode-desktop.qml:105
707#: qml/Wizard/Pages/passcode-desktop.qml:105
686msgid "Passcode too short"
708msgid "Passcode too short"
687−msgstr ""
709+msgstr "Tha an còd-faire ro ghoirid"
688
710
689#: qml/Wizard/Pages/passcode-desktop.qml:107
711#: qml/Wizard/Pages/passcode-desktop.qml:107
690msgid "Passcodes match"
712msgid "Passcodes match"
691−msgstr ""
713+msgstr "Tha an dà chòd-faire co-ionnann"
692
714
693#: qml/Wizard/Pages/passcode-desktop.qml:109
715#: qml/Wizard/Pages/passcode-desktop.qml:109
694msgid "Passcodes do not match"
716msgid "Passcodes do not match"
695−msgstr ""
717+msgstr "Chan eil an dà chòd-faire co-ionnann"
696
718
697#: qml/Wizard/Pages/passcode-set.qml:62
719#: qml/Wizard/Pages/passcode-set.qml:62
698msgid "Passcode must be 4 characters long"
720msgid "Passcode must be 4 characters long"
699−msgstr ""
721+msgstr "Feumaidh an còd-faire a bhith 4 caractaran a dh’fhaid"
700
722
701#: qml/Wizard/Pages/password-set.qml:30
723#: qml/Wizard/Pages/password-set.qml:30
702msgid "Lock Screen Password"
724msgid "Lock Screen Password"
703−msgstr ""
725+msgstr "Facal-faire na sgrìn-ghlasaidh"
704
726
705#: qml/Wizard/Pages/password-set.qml:61
727#: qml/Wizard/Pages/password-set.qml:61
706msgid "Enter at least 8 characters"
728msgid "Enter at least 8 characters"
707−msgstr ""
729+msgstr "Cuir a-steach co-dhiù 8 caractaran"
708
730
709#: qml/Wizard/Pages/password-set.qml:73
731#: qml/Wizard/Pages/password-set.qml:73
710msgid "Choose password"
732msgid "Choose password"
711−msgstr ""
733+msgstr "Tagh facal-faire"
712
734
713#: qml/Wizard/Pages/password-set.qml:103
735#: qml/Wizard/Pages/password-set.qml:103
714msgid "Confirm password"
736msgid "Confirm password"
715−msgstr ""
737+msgstr "Dearbh am facal-faire"
716
738
717#: qml/Wizard/Pages/sim.qml:27
739#: qml/Wizard/Pages/sim.qml:27
718msgid "No SIM card installed"
740msgid "No SIM card installed"
719−msgstr ""
741+msgstr "Cha deach cairt SIM a stàladh"
720
742
721#: qml/Wizard/Pages/sim.qml:54
743#: qml/Wizard/Pages/sim.qml:54
722msgid "SIM card added"
744msgid "SIM card added"
723−msgstr ""
745+msgstr "Chaidh cairt SIM a chur ris"
724
746
725#: qml/Wizard/Pages/sim.qml:55
747#: qml/Wizard/Pages/sim.qml:55
726msgid "You must restart the device to access the mobile network."
748msgid "You must restart the device to access the mobile network."
727msgstr ""
749msgstr ""
750+"Feumaidh tu an t-uidheam ath-thòiseachadh mus fhaigh thu cothrom air an "
751+"lìonra mobile."
728
752
729#: qml/Wizard/Pages/sim.qml:59
753#: qml/Wizard/Pages/sim.qml:59
730msgid "Restart"
754msgid "Restart"
@@ -732,35 +756,36 @@ msgstr "Ath-thòisich"
732
756
733#: qml/Wizard/Pages/sim.qml:78
757#: qml/Wizard/Pages/sim.qml:78
734msgid "You won’t be able to make calls or use text messaging without a SIM."
758msgid "You won’t be able to make calls or use text messaging without a SIM."
735−msgstr ""
759+msgstr "Chan urrainn dhut fòn no SMS a chur as aonais SIM."
736
760
737#: qml/Wizard/Pages/sim.qml:90
761#: qml/Wizard/Pages/sim.qml:90
738msgid "To proceed with no SIM tap Skip."
762msgid "To proceed with no SIM tap Skip."
739msgstr ""
763msgstr ""
764+"Leum thairis air seo ma tha thu airson leantainn air adhart as aonais SIM."
740
765
741#: qml/Wizard/PasswordMeter.qml:87
766#: qml/Wizard/PasswordMeter.qml:87
742msgid "Passwords match"
767msgid "Passwords match"
743−msgstr ""
768+msgstr "Tha an dà fhacal-faire co-ionnann"
744
769
745#: qml/Wizard/PasswordMeter.qml:89
770#: qml/Wizard/PasswordMeter.qml:89
746msgid "Passwords do not match"
771msgid "Passwords do not match"
747−msgstr ""
772+msgstr "Chan eil an dà fhacal-faire co-ionnann"
748
773
749#: qml/Wizard/PasswordMeter.qml:93
774#: qml/Wizard/PasswordMeter.qml:93
750msgid "Strong password"
775msgid "Strong password"
751−msgstr ""
776+msgstr "Facal-faire làidir"
752
777
753#: qml/Wizard/PasswordMeter.qml:95
778#: qml/Wizard/PasswordMeter.qml:95
754msgid "Fair password"
779msgid "Fair password"
755−msgstr ""
780+msgstr "Facal-faire meadhanach"
756
781
757#: qml/Wizard/PasswordMeter.qml:97
782#: qml/Wizard/PasswordMeter.qml:97
758msgid "Weak password"
783msgid "Weak password"
759−msgstr ""
784+msgstr "Facal-faire lag"
760
785
761#: qml/Wizard/PasswordMeter.qml:99
786#: qml/Wizard/PasswordMeter.qml:99
762msgid "Very weak password"
787msgid "Very weak password"
763−msgstr ""
788+msgstr "Facal-faire glè lag"
764
789
765#~ msgid "Skip intro"
790#~ msgid "Skip intro"
766#~ msgstr "Gearr leum thairis air an ro-ràdh"
791#~ msgstr "Gearr leum thairis air an ro-ràdh"
@@ -1085,12 +1110,7 @@ msgstr ""
1085#~ msgid "Call back"
1110#~ msgid "Call back"
1086#~ msgstr "Fònaig air ais"
1111#~ msgstr "Fònaig air ais"
1087
1112
1088−#~ msgid "Welcome to your Ubuntu device."
1113+#~ msgid "Hover your mouse on the right edge to view your open apps"
1089−#~ msgstr "Fàilte dhan uidheam Ubuntu agad."
1090−
1091−#~ msgid "Please select how you’d like to unlock your device."
1092#~ msgstr ""
1114#~ msgstr ""
1093−#~ "Tagh an dòigh sa tha thu airson a' ghlas a thoirt far an uidheam agad."
1115+#~ "Fan an luchag agad os cionn na h-oir dheas a dh’fhaicinn nan aplacaidean a "
1094−
1116+#~ "tha fosgailte agad"
1095−#~ msgid "Your device is now ready to use."
1096−#~ msgstr "Tha an t-uidheam agad ullamh a-nis."
po/gl.po+87−82
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2016-01-15 14:56+0000\n"
11"PO-Revision-Date: 2016-01-15 14:56+0000\n"
12"Last-Translator: Marcos Lans <Unknown>\n"
12"Last-Translator: Marcos Lans <Unknown>\n"
13"Language-Team: Galician <gl@li.org>\n"
13"Language-Team: Galician <gl@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -182,11 +182,11 @@ msgstr "Engadir aos favoritos"
182
182
183#: qml/Dash/FiltersPopover.qml:60
183#: qml/Dash/FiltersPopover.qml:60
184msgid "Refine your results"
184msgid "Refine your results"
185−msgstr ""
185+msgstr "Afinar os resultados"
186
186
187#: qml/Dash/FiltersPopover.qml:69
187#: qml/Dash/FiltersPopover.qml:69
188msgid "Reset"
188msgid "Reset"
189−msgstr ""
189+msgstr "Restabelecer"
190
190
191#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
191#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
192msgid "See less"
192msgid "See less"
@@ -203,11 +203,11 @@ msgstr "Buscar"
203
203
204#: qml/Dash/PageHeaderExtraPanel.qml:55
204#: qml/Dash/PageHeaderExtraPanel.qml:55
205msgid "Recent Searches"
205msgid "Recent Searches"
206−msgstr ""
206+msgstr "Buscas recentes"
207
207
208#: qml/Dash/PageHeaderExtraPanel.qml:66
208#: qml/Dash/PageHeaderExtraPanel.qml:66
209msgid "Clear All"
209msgid "Clear All"
210−msgstr ""
210+msgstr "Limpar todo"
211
211
212#: qml/Dash/Previews/PreviewActionCombo.qml:35
212#: qml/Dash/Previews/PreviewActionCombo.qml:35
213msgid "More..."
213msgid "More..."
@@ -426,51 +426,52 @@ msgstr "Chamar de volta"
426
426
427#: qml/Stages/SideStage.qml:76
427#: qml/Stages/SideStage.qml:76
428msgid "Drag using 3 fingers any application from one window to the other"
428msgid "Drag using 3 fingers any application from one window to the other"
429−msgstr ""
429+msgstr "Arrastre con 3 dedos calquera aplicativo dunha xanela á outra"
430
430
431#: qml/Tutorial/TutorialBottom.qml:78
431#: qml/Tutorial/TutorialBottom.qml:78
432msgid "Swipe up to add a contact"
432msgid "Swipe up to add a contact"
433−msgstr ""
433+msgstr "Esvare cara a arriba para engadir un contacto"
434
434
435#: qml/Tutorial/TutorialBottom.qml:80
435#: qml/Tutorial/TutorialBottom.qml:80
436msgid "Swipe up for favorite calculations"
436msgid "Swipe up for favorite calculations"
437−msgstr ""
437+msgstr "Esvare cara a arriba para marcar favorito un cálculo"
438
438
439#: qml/Tutorial/TutorialBottom.qml:82
439#: qml/Tutorial/TutorialBottom.qml:82
440msgid "Swipe up for recent calls"
440msgid "Swipe up for recent calls"
441−msgstr ""
441+msgstr "Esvare cara a arriba para ver as chamadas recentes"
442
442
443#: qml/Tutorial/TutorialBottom.qml:84
443#: qml/Tutorial/TutorialBottom.qml:84
444msgid "Swipe up to create a message"
444msgid "Swipe up to create a message"
445−msgstr ""
445+msgstr "Esvare cara a arriba para crear unha mensaxe"
446
446
447#: qml/Tutorial/TutorialBottom.qml:85
447#: qml/Tutorial/TutorialBottom.qml:85
448msgid "Swipe up to manage the app"
448msgid "Swipe up to manage the app"
449−msgstr ""
449+msgstr "Esvare cara a arriba para xestionar un aplicativo"
450−
451−#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Swipe from the left edge to open the launcher"
453−msgstr ""
454
450
455#: qml/Tutorial/TutorialLeftLong.qml:47
451#: qml/Tutorial/TutorialLeftLong.qml:47
456msgid "Long swipe from the left edge to open the Today scope"
452msgid "Long swipe from the left edge to open the Today scope"
457−msgstr ""
453+msgstr "Esvare longo desde o bordo esquerdo para abrir o ámbito Hoxe"
458
454
459−#: qml/Tutorial/TutorialRight.qml:54
455+#: qml/Tutorial/TutorialLeft.qml:47
460−msgid "Hover your mouse on the right edge to view your open apps"
456+msgid "Swipe from the left edge to open the launcher"
461−msgstr ""
457+msgstr "Esvare desde o bordo esquerdo para abrir o Iniciador"
462
458
463#: qml/Tutorial/TutorialRight.qml:55
459#: qml/Tutorial/TutorialRight.qml:55
460+msgid "Push your mouse against the right edge to view your open apps"
461+msgstr "Empuxe o rato contra o bordo dereito para ver os aplicativos abertos"
462+
463+#: qml/Tutorial/TutorialRight.qml:56
464msgid "Short or long swipe from the right edge to view your open apps"
464msgid "Short or long swipe from the right edge to view your open apps"
465−msgstr ""
465+msgstr "Esvare desde o bordo dereito para ver os aplicativos abertos"
466
466
467#: qml/Tutorial/TutorialTop.qml:53
467#: qml/Tutorial/TutorialTop.qml:53
468msgid "Swipe from the top right edge to open the notification bar"
468msgid "Swipe from the top right edge to open the notification bar"
469msgstr ""
469msgstr ""
470+"Esvare desde o bordo superior dereito para abrir a barra de notificacións"
470
471
471#: qml/Tutorial/TutorialTop.qml:54
472#: qml/Tutorial/TutorialTop.qml:54
472msgid "Swipe from the top edge to open the notification bar"
473msgid "Swipe from the top edge to open the notification bar"
473−msgstr ""
474+msgstr "Esvare desde o bordo superior para abrir a barra de notificacións"
474
475
475#: qml/Wizard/Page.qml:54
476#: qml/Wizard/Page.qml:54
476msgctxt "Button: Go back one page in the Wizard"
477msgctxt "Button: Go back one page in the Wizard"
@@ -479,7 +480,7 @@ msgstr "Atrás"
479
480
480#: qml/Wizard/Pages/10-welcome.qml:27
481#: qml/Wizard/Pages/10-welcome.qml:27
481msgid "Language"
482msgid "Language"
482−msgstr ""
483+msgstr "Idioma"
483
484
484#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
485#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
485#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
486#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
@@ -488,7 +489,7 @@ msgstr ""
488#: qml/Wizard/Pages/passcode-desktop.qml:124
489#: qml/Wizard/Pages/passcode-desktop.qml:124
489#: qml/Wizard/Pages/password-set.qml:141
490#: qml/Wizard/Pages/password-set.qml:141
490msgid "Next"
491msgid "Next"
491−msgstr ""
492+msgstr "Seguinte"
492
493
493#: qml/Wizard/Pages/30-wifi.qml:29
494#: qml/Wizard/Pages/30-wifi.qml:29
494msgid "Connect to Wi‑Fi"
495msgid "Connect to Wi‑Fi"
@@ -496,15 +497,15 @@ msgstr "Conectar a unha wifi"
496
497
497#: qml/Wizard/Pages/30-wifi.qml:130
498#: qml/Wizard/Pages/30-wifi.qml:130
498msgid "Connected"
499msgid "Connected"
499−msgstr ""
500+msgstr "Conectado"
500
501
501#: qml/Wizard/Pages/30-wifi.qml:163
502#: qml/Wizard/Pages/30-wifi.qml:163
502msgid "Available Wi-Fi networks"
503msgid "Available Wi-Fi networks"
503−msgstr ""
504+msgstr "Hai redes wifi dispoñíbeis"
504
505
505#: qml/Wizard/Pages/30-wifi.qml:164
506#: qml/Wizard/Pages/30-wifi.qml:164
506msgid "No available Wi-Fi networks"
507msgid "No available Wi-Fi networks"
507−msgstr ""
508+msgstr "Non hai redes wifi dispoñíbeis"
508
509
509#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
510#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
510#: qml/Wizard/Pages/sim.qml:101
511#: qml/Wizard/Pages/sim.qml:101
@@ -513,98 +514,101 @@ msgstr "Saltar"
513
514
514#: qml/Wizard/Pages/40-location.qml:27
515#: qml/Wizard/Pages/40-location.qml:27
515msgid "Location Services"
516msgid "Location Services"
516−msgstr ""
517+msgstr "Servizos de localización"
517
518
518#: qml/Wizard/Pages/40-location.qml:83
519#: qml/Wizard/Pages/40-location.qml:83
519msgid ""
520msgid ""
520"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
521"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
521"(recommended)"
522"(recommended)"
522msgstr ""
523msgstr ""
524+"Usar GPS, punto de conexión wifi e rede móbil anonimamente para detectar a "
525+"localización (recomendado)"
523
526
524#: qml/Wizard/Pages/40-location.qml:105
527#: qml/Wizard/Pages/40-location.qml:105
525#, qt-format
528#, qt-format
526msgid "By selecting this option you agree to the Nokia HERE %1."
529msgid "By selecting this option you agree to the Nokia HERE %1."
527−msgstr ""
530+msgstr "Seleccionando esta opción acepta os %1 de HERE."
528
531
529#: qml/Wizard/Pages/40-location.qml:106
532#: qml/Wizard/Pages/40-location.qml:106
530msgctxt "part of: Nokia HERE terms and conditions"
533msgctxt "part of: Nokia HERE terms and conditions"
531msgid "terms and conditions"
534msgid "terms and conditions"
532−msgstr ""
535+msgstr "termos e condicións"
533
536
534#: qml/Wizard/Pages/40-location.qml:160
537#: qml/Wizard/Pages/40-location.qml:160
535msgid "GPS only"
538msgid "GPS only"
536−msgstr ""
539+msgstr "Só GPS"
537
540
538#: qml/Wizard/Pages/40-location.qml:214
541#: qml/Wizard/Pages/40-location.qml:214
539msgid "Don't use my location"
542msgid "Don't use my location"
540−msgstr ""
543+msgstr "Non usar a localización"
541
544
542#: qml/Wizard/Pages/40-location.qml:260
545#: qml/Wizard/Pages/40-location.qml:260
543msgid "You can change it later in System Settings."
546msgid "You can change it later in System Settings."
544−msgstr ""
547+msgstr "Pode cambiala depois nos axustes do sistema"
545
548
546#: qml/Wizard/Pages/50-timezone.qml:29
549#: qml/Wizard/Pages/50-timezone.qml:29
547msgid "Time Zone"
550msgid "Time Zone"
548−msgstr ""
551+msgstr "Zona horaria"
549
552
550#: qml/Wizard/Pages/50-timezone.qml:178
553#: qml/Wizard/Pages/50-timezone.qml:178
551msgid "Enter your city"
554msgid "Enter your city"
552−msgstr ""
555+msgstr "Introduza a súa cidade"
553
556
554#: qml/Wizard/Pages/60-account.qml:24
557#: qml/Wizard/Pages/60-account.qml:24
555msgid "Personalize Your Device"
558msgid "Personalize Your Device"
556−msgstr ""
559+msgstr "Personalice o dispositivo"
557
560
558#: qml/Wizard/Pages/60-account.qml:48
561#: qml/Wizard/Pages/60-account.qml:48
559msgid "Preferred Name"
562msgid "Preferred Name"
560−msgstr ""
563+msgstr "Nome preferido"
561
564
562#: qml/Wizard/Pages/70-passwd-type.qml:39
565#: qml/Wizard/Pages/70-passwd-type.qml:39
563msgid "Lock Screen"
566msgid "Lock Screen"
564−msgstr ""
567+msgstr "Bloquear pantalla"
565
568
566#: qml/Wizard/Pages/70-passwd-type.qml:101
569#: qml/Wizard/Pages/70-passwd-type.qml:101
567msgctxt "Label: Type of security method"
570msgctxt "Label: Type of security method"
568msgid "Create new password"
571msgid "Create new password"
569−msgstr ""
572+msgstr "Crear novo contrasinal"
570
573
571#: qml/Wizard/Pages/70-passwd-type.qml:103
574#: qml/Wizard/Pages/70-passwd-type.qml:103
572msgctxt "Label: Type of security method"
575msgctxt "Label: Type of security method"
573msgid "Create passcode (numbers only)"
576msgid "Create passcode (numbers only)"
574−msgstr ""
577+msgstr "Crear clave (só números)"
575
578
576#: qml/Wizard/Pages/70-passwd-type.qml:105
579#: qml/Wizard/Pages/70-passwd-type.qml:105
577msgctxt "Label: Type of security method"
580msgctxt "Label: Type of security method"
578msgid "No lock code"
581msgid "No lock code"
579−msgstr ""
582+msgstr "Sen código de bloqueo"
580
583
581#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
584#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
582msgid "Privacy Policy"
585msgid "Privacy Policy"
583−msgstr ""
586+msgstr "Política de confidencialidade"
584
587
585#: qml/Wizard/Pages/75-report-check.qml:26
588#: qml/Wizard/Pages/75-report-check.qml:26
586msgid "Help Us Improve"
589msgid "Help Us Improve"
587−msgstr ""
590+msgstr "Axúdenos a mellorar"
588
591
589#: qml/Wizard/Pages/75-report-check.qml:59
592#: qml/Wizard/Pages/75-report-check.qml:59
590msgid "Improve system performance by sending us crashes and error reports."
593msgid "Improve system performance by sending us crashes and error reports."
591msgstr ""
594msgstr ""
595+"Mellorar o rendemento do sistema enviándonos informes de erro e quebra."
592
596
593#: qml/Wizard/Pages/75-report-check.qml:60
597#: qml/Wizard/Pages/75-report-check.qml:60
594msgid "Privacy policy"
598msgid "Privacy policy"
595−msgstr ""
599+msgstr "Política de confidencialidade"
596
600
597#: qml/Wizard/Pages/80-finished.qml:89
601#: qml/Wizard/Pages/80-finished.qml:89
598msgid "Welcome to Ubuntu"
602msgid "Welcome to Ubuntu"
599−msgstr ""
603+msgstr "Benvida/o a Ubuntu"
600
604
601#: qml/Wizard/Pages/80-finished.qml:104
605#: qml/Wizard/Pages/80-finished.qml:104
602msgid "You are ready to use your device now"
606msgid "You are ready to use your device now"
603−msgstr ""
607+msgstr "Xa está listo para usar o dispositivo"
604
608
605#: qml/Wizard/Pages/80-finished.qml:124
609#: qml/Wizard/Pages/80-finished.qml:124
606msgid "Get Started"
610msgid "Get Started"
607−msgstr ""
611+msgstr "Comezar"
608
612
609#: qml/Wizard/Pages/here-terms.qml:25
613#: qml/Wizard/Pages/here-terms.qml:25
610msgid "Terms & Conditions"
614msgid "Terms & Conditions"
@@ -612,7 +616,7 @@ msgstr "Termos e condicións"
612
616
613#: qml/Wizard/Pages/here-terms.qml:69
617#: qml/Wizard/Pages/here-terms.qml:69
614msgid "Your device uses positioning technologies provided by HERE."
618msgid "Your device uses positioning technologies provided by HERE."
615−msgstr ""
619+msgstr "O dispositivo usa tecnoloxías de posicionamento fornecidas por HERE."
616
620
617#: qml/Wizard/Pages/here-terms.qml:81
621#: qml/Wizard/Pages/here-terms.qml:81
618msgid ""
622msgid ""
@@ -620,21 +624,26 @@ msgid ""
620"collects information about nearby cell towers and Wi-Fi hotspots around your "
624"collects information about nearby cell towers and Wi-Fi hotspots around your "
621"current location whenever your position is being found."
625"current location whenever your position is being found."
622msgstr ""
626msgstr ""
627+"Para proporcionarlle servizos de posicionamento e mellorar a calidade, HERE "
628+"recompila información sobre torres de telefonía móbil cercanas e puntos wifi "
629+"preto da localización actual sempre que se estabelece a posición."
623
630
624#: qml/Wizard/Pages/here-terms.qml:93
631#: qml/Wizard/Pages/here-terms.qml:93
625msgid ""
632msgid ""
626"The information collected is used to analyze the service and to improve the "
633"The information collected is used to analyze the service and to improve the "
627"use of service, but not to identify you personally."
634"use of service, but not to identify you personally."
628msgstr ""
635msgstr ""
636+"A información recompilada úsase para analizar o servizo e mellorar o uso, "
637+"pero non o identifica persoalmente."
629
638
630#: qml/Wizard/Pages/here-terms.qml:106
639#: qml/Wizard/Pages/here-terms.qml:106
631#, qt-format
640#, qt-format
632msgid "By continuing, you agree to the HERE platform %1 and %2."
641msgid "By continuing, you agree to the HERE platform %1 and %2."
633−msgstr ""
642+msgstr "Se continúa, acepta implicitamente a plataforma %1 e %2 de HERE."
634
643
635#: qml/Wizard/Pages/here-terms.qml:107
644#: qml/Wizard/Pages/here-terms.qml:107
636msgid "Service Terms"
645msgid "Service Terms"
637−msgstr ""
646+msgstr "Termos de servizo"
638
647
639#: qml/Wizard/Pages/passcode-confirm.qml:43
648#: qml/Wizard/Pages/passcode-confirm.qml:43
640#: qml/Wizard/Pages/passcode-desktop.qml:80
649#: qml/Wizard/Pages/passcode-desktop.qml:80
@@ -643,69 +652,69 @@ msgstr "Confirmar a clave"
643
652
644#: qml/Wizard/Pages/passcode-confirm.qml:45
653#: qml/Wizard/Pages/passcode-confirm.qml:45
645msgid "Incorrect passcode."
654msgid "Incorrect passcode."
646−msgstr ""
655+msgstr "A clave é incorrecta"
647
656
648#: qml/Wizard/Pages/passcode-confirm.qml:45
657#: qml/Wizard/Pages/passcode-confirm.qml:45
649msgctxt "Enter the passcode again"
658msgctxt "Enter the passcode again"
650msgid "Please re-enter."
659msgid "Please re-enter."
651−msgstr ""
660+msgstr "Reintroducir"
652
661
653#: qml/Wizard/Pages/passcode-desktop.qml:30
662#: qml/Wizard/Pages/passcode-desktop.qml:30
654msgid "Lock Screen Passcode"
663msgid "Lock Screen Passcode"
655−msgstr ""
664+msgstr "Clave da pantalla de bloqueo"
656
665
657#: qml/Wizard/Pages/passcode-desktop.qml:56
666#: qml/Wizard/Pages/passcode-desktop.qml:56
658msgid "Enter 4 numbers to setup your passcode"
667msgid "Enter 4 numbers to setup your passcode"
659−msgstr ""
668+msgstr "Introduza 4 números para estabelecer a clave"
660
669
661#: qml/Wizard/Pages/passcode-desktop.qml:65
670#: qml/Wizard/Pages/passcode-desktop.qml:65
662#: qml/Wizard/Pages/passcode-set.qml:54
671#: qml/Wizard/Pages/passcode-set.qml:54
663msgid "Choose passcode"
672msgid "Choose passcode"
664−msgstr ""
673+msgstr "Escolla unha clave"
665
674
666#: qml/Wizard/Pages/passcode-desktop.qml:105
675#: qml/Wizard/Pages/passcode-desktop.qml:105
667msgid "Passcode too short"
676msgid "Passcode too short"
668−msgstr ""
677+msgstr "A clave é curta de máis"
669
678
670#: qml/Wizard/Pages/passcode-desktop.qml:107
679#: qml/Wizard/Pages/passcode-desktop.qml:107
671msgid "Passcodes match"
680msgid "Passcodes match"
672−msgstr ""
681+msgstr "As claves coinciden"
673
682
674#: qml/Wizard/Pages/passcode-desktop.qml:109
683#: qml/Wizard/Pages/passcode-desktop.qml:109
675msgid "Passcodes do not match"
684msgid "Passcodes do not match"
676−msgstr ""
685+msgstr "As claves non coinciden"
677
686
678#: qml/Wizard/Pages/passcode-set.qml:62
687#: qml/Wizard/Pages/passcode-set.qml:62
679msgid "Passcode must be 4 characters long"
688msgid "Passcode must be 4 characters long"
680−msgstr ""
689+msgstr "A clave debe ter 4 caracteres"
681
690
682#: qml/Wizard/Pages/password-set.qml:30
691#: qml/Wizard/Pages/password-set.qml:30
683msgid "Lock Screen Password"
692msgid "Lock Screen Password"
684−msgstr ""
693+msgstr "Contrasinal da pantalla de bloqueo"
685
694
686#: qml/Wizard/Pages/password-set.qml:61
695#: qml/Wizard/Pages/password-set.qml:61
687msgid "Enter at least 8 characters"
696msgid "Enter at least 8 characters"
688−msgstr ""
697+msgstr "Introduza cando menos 8 caracteres"
689
698
690#: qml/Wizard/Pages/password-set.qml:73
699#: qml/Wizard/Pages/password-set.qml:73
691msgid "Choose password"
700msgid "Choose password"
692−msgstr ""
701+msgstr "Seleccionar contrasinal"
693
702
694#: qml/Wizard/Pages/password-set.qml:103
703#: qml/Wizard/Pages/password-set.qml:103
695msgid "Confirm password"
704msgid "Confirm password"
696−msgstr ""
705+msgstr "Confirmar o contrasinal"
697
706
698#: qml/Wizard/Pages/sim.qml:27
707#: qml/Wizard/Pages/sim.qml:27
699msgid "No SIM card installed"
708msgid "No SIM card installed"
700−msgstr ""
709+msgstr "Non está instalada ningunha tarxeta SIM"
701
710
702#: qml/Wizard/Pages/sim.qml:54
711#: qml/Wizard/Pages/sim.qml:54
703msgid "SIM card added"
712msgid "SIM card added"
704−msgstr ""
713+msgstr "Engadiuse a tarxeta SIM"
705
714
706#: qml/Wizard/Pages/sim.qml:55
715#: qml/Wizard/Pages/sim.qml:55
707msgid "You must restart the device to access the mobile network."
716msgid "You must restart the device to access the mobile network."
708−msgstr ""
717+msgstr "Debe reiniciar o dispositivo para acceder á rede móbil."
709
718
710#: qml/Wizard/Pages/sim.qml:59
719#: qml/Wizard/Pages/sim.qml:59
711msgid "Restart"
720msgid "Restart"
@@ -714,34 +723,36 @@ msgstr "Reiniciar"
714#: qml/Wizard/Pages/sim.qml:78
723#: qml/Wizard/Pages/sim.qml:78
715msgid "You won’t be able to make calls or use text messaging without a SIM."
724msgid "You won’t be able to make calls or use text messaging without a SIM."
716msgstr ""
725msgstr ""
726+"Non será posíbel facer chamadas nin usar a mensaxería de texto sen unha "
727+"tarxeta SIM."
717
728
718#: qml/Wizard/Pages/sim.qml:90
729#: qml/Wizard/Pages/sim.qml:90
719msgid "To proceed with no SIM tap Skip."
730msgid "To proceed with no SIM tap Skip."
720−msgstr ""
731+msgstr "Para continuar sen tarxeta SIM toque Saltar."
721
732
722#: qml/Wizard/PasswordMeter.qml:87
733#: qml/Wizard/PasswordMeter.qml:87
723msgid "Passwords match"
734msgid "Passwords match"
724−msgstr ""
735+msgstr "Os contrasinais coinciden"
725
736
726#: qml/Wizard/PasswordMeter.qml:89
737#: qml/Wizard/PasswordMeter.qml:89
727msgid "Passwords do not match"
738msgid "Passwords do not match"
728−msgstr ""
739+msgstr "Os contrasinais non coinciden"
729
740
730#: qml/Wizard/PasswordMeter.qml:93
741#: qml/Wizard/PasswordMeter.qml:93
731msgid "Strong password"
742msgid "Strong password"
732−msgstr ""
743+msgstr "O contrasinal é forte"
733
744
734#: qml/Wizard/PasswordMeter.qml:95
745#: qml/Wizard/PasswordMeter.qml:95
735msgid "Fair password"
746msgid "Fair password"
736−msgstr ""
747+msgstr "O contrasinal é aceptábel"
737
748
738#: qml/Wizard/PasswordMeter.qml:97
749#: qml/Wizard/PasswordMeter.qml:97
739msgid "Weak password"
750msgid "Weak password"
740−msgstr ""
751+msgstr "O contrasinal é feble"
741
752
742#: qml/Wizard/PasswordMeter.qml:99
753#: qml/Wizard/PasswordMeter.qml:99
743msgid "Very weak password"
754msgid "Very weak password"
744−msgstr ""
755+msgstr "O contrasinal é moi feble"
745
756
746#~ msgid "Confirm"
757#~ msgid "Confirm"
747#~ msgstr "Confirmar"
758#~ msgstr "Confirmar"
@@ -1058,11 +1069,5 @@ msgstr ""
1058#~ msgid "%a %d %b %l:%M %p"
1069#~ msgid "%a %d %b %l:%M %p"
1059#~ msgstr "%a, %d de %b  %l:%M %p"
1070#~ msgstr "%a, %d de %b  %l:%M %p"
1060
1071
1061−#~ msgid "Welcome to your Ubuntu device."
1072+#~ msgid "Hover your mouse on the right edge to view your open apps"
1062−#~ msgstr "Benvido/a ao seu dispositivo Ubuntu."
1073+#~ msgstr "Pouse o cursor no bordo dereito para ver os aplicativos abertos"
1063−
1064−#~ msgid "Please select how you’d like to unlock your device."
1065−#~ msgstr "Seleccione o xeito de desbloquear o dispositivo."
1066−
1067−#~ msgid "Your device is now ready to use."
1068−#~ msgstr "O dispositivo xa está listo para o seu uso."
po/gv.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-04-02 14:24+0000\n"
11"PO-Revision-Date: 2015-04-02 14:24+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Manx <gv@li.org>\n"
13"Language-Team: Manx <gv@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : (n == 2 ? 1 : 2);\n"
17"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : (n == 2 ? 1 : 2);\n"
18−"X-Launchpad-Export-Date: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -447,19 +447,19 @@ msgstr ""
447msgid "Swipe up to manage the app"
447msgid "Swipe up to manage the app"
448msgstr ""
448msgstr ""
449
449
450−#: qml/Tutorial/TutorialLeft.qml:47
451−msgid "Swipe from the left edge to open the launcher"
452−msgstr ""
453−
454#: qml/Tutorial/TutorialLeftLong.qml:47
450#: qml/Tutorial/TutorialLeftLong.qml:47
455msgid "Long swipe from the left edge to open the Today scope"
451msgid "Long swipe from the left edge to open the Today scope"
456msgstr ""
452msgstr ""
457
453
458−#: qml/Tutorial/TutorialRight.qml:54
454+#: qml/Tutorial/TutorialLeft.qml:47
459−msgid "Hover your mouse on the right edge to view your open apps"
455+msgid "Swipe from the left edge to open the launcher"
460msgstr ""
456msgstr ""
461
457
462#: qml/Tutorial/TutorialRight.qml:55
458#: qml/Tutorial/TutorialRight.qml:55
459+msgid "Push your mouse against the right edge to view your open apps"
460+msgstr ""
461+
462+#: qml/Tutorial/TutorialRight.qml:56
463msgid "Short or long swipe from the right edge to view your open apps"
463msgid "Short or long swipe from the right edge to view your open apps"
464msgstr ""
464msgstr ""
465
465
po/he.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-07-12 08:47+0000\n"
11"PO-Revision-Date: 2015-07-12 08:47+0000\n"
12"Last-Translator: Yaron <sh.yaron@gmail.com>\n"
12"Last-Translator: Yaron <sh.yaron@gmail.com>\n"
13"Language-Team: Hebrew <he@li.org>\n"
13"Language-Team: Hebrew <he@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/hi.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2014-01-15 01:49+0000\n"
11"PO-Revision-Date: 2014-01-15 01:49+0000\n"
12"Last-Translator: Siddhanathan Shanmugam <Unknown>\n"
12"Last-Translator: Siddhanathan Shanmugam <Unknown>\n"
13"Language-Team: Hindi <hi@li.org>\n"
13"Language-Team: Hindi <hi@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/hr.po+91−82
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2013-06-27 04:14+0000\n"
11"PO-Revision-Date: 2013-06-27 04:14+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Croatian <hr@li.org>\n"
13"Language-Team: Croatian <hr@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%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: 2016-03-24 06:08+0000\n"
19+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
20−"X-Generator: Launchpad (build 17958)\n"
20+"X-Generator: Launchpad (build 17995)\n"
21
21
22#: plugins/IntegratedLightDM/Greeter.cpp:112
22#: plugins/IntegratedLightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
@@ -119,7 +119,7 @@ msgstr "Isključi"
119#: qml/Components/Dialogs.qml:210
119#: qml/Components/Dialogs.qml:210
120msgctxt "Button: Restart the system"
120msgctxt "Button: Restart the system"
121msgid "Restart"
121msgid "Restart"
122−msgstr "Ponovo pokreni"
122+msgstr "Ponovno pokreni"
123
123
124#: qml/Components/Lockscreen.qml:231
124#: qml/Components/Lockscreen.qml:231
125msgid "Return to Call"
125msgid "Return to Call"
@@ -186,11 +186,11 @@ msgstr "Dodaj u omiljene"
186
186
187#: qml/Dash/FiltersPopover.qml:60
187#: qml/Dash/FiltersPopover.qml:60
188msgid "Refine your results"
188msgid "Refine your results"
189−msgstr ""
189+msgstr "Precizirajte svoje rezultate"
190
190
191#: qml/Dash/FiltersPopover.qml:69
191#: qml/Dash/FiltersPopover.qml:69
192msgid "Reset"
192msgid "Reset"
193−msgstr ""
193+msgstr "Ponovno postavi"
194
194
195#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
195#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
196msgid "See less"
196msgid "See less"
@@ -207,11 +207,11 @@ msgstr "Pretraži"
207
207
208#: qml/Dash/PageHeaderExtraPanel.qml:55
208#: qml/Dash/PageHeaderExtraPanel.qml:55
209msgid "Recent Searches"
209msgid "Recent Searches"
210−msgstr ""
210+msgstr "Nedavna pretraživanja"
211
211
212#: qml/Dash/PageHeaderExtraPanel.qml:66
212#: qml/Dash/PageHeaderExtraPanel.qml:66
213msgid "Clear All"
213msgid "Clear All"
214−msgstr ""
214+msgstr "Obriši sve"
215
215
216#: qml/Dash/Previews/PreviewActionCombo.qml:35
216#: qml/Dash/Previews/PreviewActionCombo.qml:35
217msgid "More..."
217msgid "More..."
@@ -434,50 +434,53 @@ msgstr "Uzvrati poziv"
434#: qml/Stages/SideStage.qml:76
434#: qml/Stages/SideStage.qml:76
435msgid "Drag using 3 fingers any application from one window to the other"
435msgid "Drag using 3 fingers any application from one window to the other"
436msgstr ""
436msgstr ""
437+"Povucite pomoću 3 prsta bilo koju aplikaciju iz jednog prozora u drugi"
437
438
438#: qml/Tutorial/TutorialBottom.qml:78
439#: qml/Tutorial/TutorialBottom.qml:78
439msgid "Swipe up to add a contact"
440msgid "Swipe up to add a contact"
440−msgstr ""
441+msgstr "Povucite prema gore za dodavanje kontakta"
441
442
442#: qml/Tutorial/TutorialBottom.qml:80
443#: qml/Tutorial/TutorialBottom.qml:80
443msgid "Swipe up for favorite calculations"
444msgid "Swipe up for favorite calculations"
444−msgstr ""
445+msgstr "Povucite prema gore za izračunavanje omiljenih"
445
446
446#: qml/Tutorial/TutorialBottom.qml:82
447#: qml/Tutorial/TutorialBottom.qml:82
447msgid "Swipe up for recent calls"
448msgid "Swipe up for recent calls"
448−msgstr ""
449+msgstr "Povucite prema gore za nedavne pozive"
449
450
450#: qml/Tutorial/TutorialBottom.qml:84
451#: qml/Tutorial/TutorialBottom.qml:84
451msgid "Swipe up to create a message"
452msgid "Swipe up to create a message"
452−msgstr ""
453+msgstr "Povucite prema gore za stvaranje poruke"
453
454
454#: qml/Tutorial/TutorialBottom.qml:85
455#: qml/Tutorial/TutorialBottom.qml:85
455msgid "Swipe up to manage the app"
456msgid "Swipe up to manage the app"
456−msgstr ""
457+msgstr "Povucite prema gore za upravljanje aplikacijom"
457−
458−#: qml/Tutorial/TutorialLeft.qml:47
459−msgid "Swipe from the left edge to open the launcher"
460−msgstr ""
461
458
462#: qml/Tutorial/TutorialLeftLong.qml:47
459#: qml/Tutorial/TutorialLeftLong.qml:47
463msgid "Long swipe from the left edge to open the Today scope"
460msgid "Long swipe from the left edge to open the Today scope"
464−msgstr ""
461+msgstr "Dulje povucite od lijevog ruba za otvaranje današnjeg djelokruga"
465
462
466−#: qml/Tutorial/TutorialRight.qml:54
463+#: qml/Tutorial/TutorialLeft.qml:47
467−msgid "Hover your mouse on the right edge to view your open apps"
464+msgid "Swipe from the left edge to open the launcher"
468−msgstr ""
465+msgstr "Povucite od lijevog ruba za otvaranje pokretača"
469
466
470#: qml/Tutorial/TutorialRight.qml:55
467#: qml/Tutorial/TutorialRight.qml:55
468+msgid "Push your mouse against the right edge to view your open apps"
469+msgstr ""
470+
471+#: qml/Tutorial/TutorialRight.qml:56
471msgid "Short or long swipe from the right edge to view your open apps"
472msgid "Short or long swipe from the right edge to view your open apps"
472msgstr ""
473msgstr ""
474+"Kraće ili dulje povucite od desnog ruba kako bi vidjeli svoje otvorene "
475+"aplikacije"
473
476
474#: qml/Tutorial/TutorialTop.qml:53
477#: qml/Tutorial/TutorialTop.qml:53
475msgid "Swipe from the top right edge to open the notification bar"
478msgid "Swipe from the top right edge to open the notification bar"
476−msgstr ""
479+msgstr "Povucite od gornjeg desnog ruba za otvaranje obavijesne trake"
477
480
478#: qml/Tutorial/TutorialTop.qml:54
481#: qml/Tutorial/TutorialTop.qml:54
479msgid "Swipe from the top edge to open the notification bar"
482msgid "Swipe from the top edge to open the notification bar"
480−msgstr ""
483+msgstr "Povucite od gornjeg ruba za otvaranje obavijesne trake"
481
484
482#: qml/Wizard/Page.qml:54
485#: qml/Wizard/Page.qml:54
483msgctxt "Button: Go back one page in the Wizard"
486msgctxt "Button: Go back one page in the Wizard"
@@ -486,7 +489,7 @@ msgstr "Natrag"
486
489
487#: qml/Wizard/Pages/10-welcome.qml:27
490#: qml/Wizard/Pages/10-welcome.qml:27
488msgid "Language"
491msgid "Language"
489−msgstr ""
492+msgstr "Jezik"
490
493
491#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
494#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
492#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
495#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
@@ -495,7 +498,7 @@ msgstr ""
495#: qml/Wizard/Pages/passcode-desktop.qml:124
498#: qml/Wizard/Pages/passcode-desktop.qml:124
496#: qml/Wizard/Pages/password-set.qml:141
499#: qml/Wizard/Pages/password-set.qml:141
497msgid "Next"
500msgid "Next"
498−msgstr ""
501+msgstr "Sljedeće"
499
502
500#: qml/Wizard/Pages/30-wifi.qml:29
503#: qml/Wizard/Pages/30-wifi.qml:29
501msgid "Connect to Wi‑Fi"
504msgid "Connect to Wi‑Fi"
@@ -503,15 +506,15 @@ msgstr "Povezivanje s Wi‑Fi"
503
506
504#: qml/Wizard/Pages/30-wifi.qml:130
507#: qml/Wizard/Pages/30-wifi.qml:130
505msgid "Connected"
508msgid "Connected"
506−msgstr ""
509+msgstr "Povezano"
507
510
508#: qml/Wizard/Pages/30-wifi.qml:163
511#: qml/Wizard/Pages/30-wifi.qml:163
509msgid "Available Wi-Fi networks"
512msgid "Available Wi-Fi networks"
510−msgstr ""
513+msgstr "Dostupne bežične mreže"
511
514
512#: qml/Wizard/Pages/30-wifi.qml:164
515#: qml/Wizard/Pages/30-wifi.qml:164
513msgid "No available Wi-Fi networks"
516msgid "No available Wi-Fi networks"
514−msgstr ""
517+msgstr "Nema dostupnih bežičnih mreža"
515
518
516#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
519#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
517#: qml/Wizard/Pages/sim.qml:101
520#: qml/Wizard/Pages/sim.qml:101
@@ -520,98 +523,101 @@ msgstr "Preskoči"
520
523
521#: qml/Wizard/Pages/40-location.qml:27
524#: qml/Wizard/Pages/40-location.qml:27
522msgid "Location Services"
525msgid "Location Services"
523−msgstr ""
526+msgstr "Usluge lokacije"
524
527
525#: qml/Wizard/Pages/40-location.qml:83
528#: qml/Wizard/Pages/40-location.qml:83
526msgid ""
529msgid ""
527"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
530"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
528"(recommended)"
531"(recommended)"
529msgstr ""
532msgstr ""
533+"Koristi GPS, bežične pristupne točke i mobilnu mrežu anonimno za otkrivanje "
534+"lokacije (preporučeno)"
530
535
531#: qml/Wizard/Pages/40-location.qml:105
536#: qml/Wizard/Pages/40-location.qml:105
532#, qt-format
537#, qt-format
533msgid "By selecting this option you agree to the Nokia HERE %1."
538msgid "By selecting this option you agree to the Nokia HERE %1."
534−msgstr ""
539+msgstr "Odabirom ove mogućnosti pristajete na Nokia HERE %1."
535
540
536#: qml/Wizard/Pages/40-location.qml:106
541#: qml/Wizard/Pages/40-location.qml:106
537msgctxt "part of: Nokia HERE terms and conditions"
542msgctxt "part of: Nokia HERE terms and conditions"
538msgid "terms and conditions"
543msgid "terms and conditions"
539−msgstr ""
544+msgstr "uvjete i odredbe"
540
545
541#: qml/Wizard/Pages/40-location.qml:160
546#: qml/Wizard/Pages/40-location.qml:160
542msgid "GPS only"
547msgid "GPS only"
543−msgstr ""
548+msgstr "Samo GPS"
544
549
545#: qml/Wizard/Pages/40-location.qml:214
550#: qml/Wizard/Pages/40-location.qml:214
546msgid "Don't use my location"
551msgid "Don't use my location"
547−msgstr ""
552+msgstr "Ne koristi uslugu lokacije"
548
553
549#: qml/Wizard/Pages/40-location.qml:260
554#: qml/Wizard/Pages/40-location.qml:260
550msgid "You can change it later in System Settings."
555msgid "You can change it later in System Settings."
551−msgstr ""
556+msgstr "Ovo možete kasnije promijeniti u postavkama sustava."
552
557
553#: qml/Wizard/Pages/50-timezone.qml:29
558#: qml/Wizard/Pages/50-timezone.qml:29
554msgid "Time Zone"
559msgid "Time Zone"
555−msgstr ""
560+msgstr "Vremenska zona"
556
561
557#: qml/Wizard/Pages/50-timezone.qml:178
562#: qml/Wizard/Pages/50-timezone.qml:178
558msgid "Enter your city"
563msgid "Enter your city"
559−msgstr ""
564+msgstr "Upišite svoj grad"
560
565
561#: qml/Wizard/Pages/60-account.qml:24
566#: qml/Wizard/Pages/60-account.qml:24
562msgid "Personalize Your Device"
567msgid "Personalize Your Device"
563−msgstr ""
568+msgstr "Personalizirajte svoj uređaj"
564
569
565#: qml/Wizard/Pages/60-account.qml:48
570#: qml/Wizard/Pages/60-account.qml:48
566msgid "Preferred Name"
571msgid "Preferred Name"
567−msgstr ""
572+msgstr "Željeno ime"
568
573
569#: qml/Wizard/Pages/70-passwd-type.qml:39
574#: qml/Wizard/Pages/70-passwd-type.qml:39
570msgid "Lock Screen"
575msgid "Lock Screen"
571−msgstr ""
576+msgstr "Zaključaj zaslon"
572
577
573#: qml/Wizard/Pages/70-passwd-type.qml:101
578#: qml/Wizard/Pages/70-passwd-type.qml:101
574msgctxt "Label: Type of security method"
579msgctxt "Label: Type of security method"
575msgid "Create new password"
580msgid "Create new password"
576−msgstr ""
581+msgstr "Stvori novu lozinku"
577
582
578#: qml/Wizard/Pages/70-passwd-type.qml:103
583#: qml/Wizard/Pages/70-passwd-type.qml:103
579msgctxt "Label: Type of security method"
584msgctxt "Label: Type of security method"
580msgid "Create passcode (numbers only)"
585msgid "Create passcode (numbers only)"
581−msgstr ""
586+msgstr "Stvori sigurnosni kôd (samo brojevi)"
582
587
583#: qml/Wizard/Pages/70-passwd-type.qml:105
588#: qml/Wizard/Pages/70-passwd-type.qml:105
584msgctxt "Label: Type of security method"
589msgctxt "Label: Type of security method"
585msgid "No lock code"
590msgid "No lock code"
586−msgstr ""
591+msgstr "Nema kôda zaključavanja"
587
592
588#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
593#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
589msgid "Privacy Policy"
594msgid "Privacy Policy"
590−msgstr ""
595+msgstr "Pravila privatnosti"
591
596
592#: qml/Wizard/Pages/75-report-check.qml:26
597#: qml/Wizard/Pages/75-report-check.qml:26
593msgid "Help Us Improve"
598msgid "Help Us Improve"
594−msgstr ""
599+msgstr "Pomognite nam poboljšati"
595
600
596#: qml/Wizard/Pages/75-report-check.qml:59
601#: qml/Wizard/Pages/75-report-check.qml:59
597msgid "Improve system performance by sending us crashes and error reports."
602msgid "Improve system performance by sending us crashes and error reports."
598msgstr ""
603msgstr ""
604+"Poboljšajte performanse sustava šaljući nam izvješća grešaka i rušenja."
599
605
600#: qml/Wizard/Pages/75-report-check.qml:60
606#: qml/Wizard/Pages/75-report-check.qml:60
601msgid "Privacy policy"
607msgid "Privacy policy"
602−msgstr ""
608+msgstr "Pravila privatnosti"
603
609
604#: qml/Wizard/Pages/80-finished.qml:89
610#: qml/Wizard/Pages/80-finished.qml:89
605msgid "Welcome to Ubuntu"
611msgid "Welcome to Ubuntu"
606−msgstr ""
612+msgstr "Dobrodošli u Ubuntu"
607
613
608#: qml/Wizard/Pages/80-finished.qml:104
614#: qml/Wizard/Pages/80-finished.qml:104
609msgid "You are ready to use your device now"
615msgid "You are ready to use your device now"
610−msgstr ""
616+msgstr "Sada ste spremni koristiti svoj uređaj"
611
617
612#: qml/Wizard/Pages/80-finished.qml:124
618#: qml/Wizard/Pages/80-finished.qml:124
613msgid "Get Started"
619msgid "Get Started"
614−msgstr ""
620+msgstr "Započnite"
615
621
616#: qml/Wizard/Pages/here-terms.qml:25
622#: qml/Wizard/Pages/here-terms.qml:25
617msgid "Terms & Conditions"
623msgid "Terms & Conditions"
@@ -620,6 +626,7 @@ msgstr "Uvjeti i odredbe"
620#: qml/Wizard/Pages/here-terms.qml:69
626#: qml/Wizard/Pages/here-terms.qml:69
621msgid "Your device uses positioning technologies provided by HERE."
627msgid "Your device uses positioning technologies provided by HERE."
622msgstr ""
628msgstr ""
629+"Vaš uređaj koristi tehnologiju određivanja položaja koju omogućuje HERE."
623
630
624#: qml/Wizard/Pages/here-terms.qml:81
631#: qml/Wizard/Pages/here-terms.qml:81
625msgid ""
632msgid ""
@@ -627,21 +634,27 @@ msgid ""
627"collects information about nearby cell towers and Wi-Fi hotspots around your "
634"collects information about nearby cell towers and Wi-Fi hotspots around your "
628"current location whenever your position is being found."
635"current location whenever your position is being found."
629msgstr ""
636msgstr ""
637+"Kako bi vam omogućili uslugu određivanja položaja i poboljšali njenu "
638+"kvalitetu, HERE prikuplja informacije o obližnjim mobilnim odašiljačima i "
639+"bežičnim pristupnim točkama u okolini vaše trenutne lokacije kada je vaš "
640+"položaj pronađen."
630
641
631#: qml/Wizard/Pages/here-terms.qml:93
642#: qml/Wizard/Pages/here-terms.qml:93
632msgid ""
643msgid ""
633"The information collected is used to analyze the service and to improve the "
644"The information collected is used to analyze the service and to improve the "
634"use of service, but not to identify you personally."
645"use of service, but not to identify you personally."
635msgstr ""
646msgstr ""
647+"Prikupljene informacije se koriste za analizu i poboljšanje korištenja "
648+"usluga, ali ne i kako bi Vas osobno identificirali."
636
649
637#: qml/Wizard/Pages/here-terms.qml:106
650#: qml/Wizard/Pages/here-terms.qml:106
638#, qt-format
651#, qt-format
639msgid "By continuing, you agree to the HERE platform %1 and %2."
652msgid "By continuing, you agree to the HERE platform %1 and %2."
640−msgstr ""
653+msgstr "Nastavkom, pristajete na HERE platformu %1 i %2."
641
654
642#: qml/Wizard/Pages/here-terms.qml:107
655#: qml/Wizard/Pages/here-terms.qml:107
643msgid "Service Terms"
656msgid "Service Terms"
644−msgstr ""
657+msgstr "Uvjeti korištenja"
645
658
646#: qml/Wizard/Pages/passcode-confirm.qml:43
659#: qml/Wizard/Pages/passcode-confirm.qml:43
647#: qml/Wizard/Pages/passcode-desktop.qml:80
660#: qml/Wizard/Pages/passcode-desktop.qml:80
@@ -650,105 +663,106 @@ msgstr "Potvrdi kôd"
650
663
651#: qml/Wizard/Pages/passcode-confirm.qml:45
664#: qml/Wizard/Pages/passcode-confirm.qml:45
652msgid "Incorrect passcode."
665msgid "Incorrect passcode."
653−msgstr ""
666+msgstr "Neispravan sigurnosni kôd"
654
667
655#: qml/Wizard/Pages/passcode-confirm.qml:45
668#: qml/Wizard/Pages/passcode-confirm.qml:45
656msgctxt "Enter the passcode again"
669msgctxt "Enter the passcode again"
657msgid "Please re-enter."
670msgid "Please re-enter."
658−msgstr ""
671+msgstr "Ponovno upišite."
659
672
660#: qml/Wizard/Pages/passcode-desktop.qml:30
673#: qml/Wizard/Pages/passcode-desktop.qml:30
661msgid "Lock Screen Passcode"
674msgid "Lock Screen Passcode"
662−msgstr ""
675+msgstr "Kôd zaključavanja zaslona"
663
676
664#: qml/Wizard/Pages/passcode-desktop.qml:56
677#: qml/Wizard/Pages/passcode-desktop.qml:56
665msgid "Enter 4 numbers to setup your passcode"
678msgid "Enter 4 numbers to setup your passcode"
666−msgstr ""
679+msgstr "Upišite 4 broja za postavljanje vašeg kôda"
667
680
668#: qml/Wizard/Pages/passcode-desktop.qml:65
681#: qml/Wizard/Pages/passcode-desktop.qml:65
669#: qml/Wizard/Pages/passcode-set.qml:54
682#: qml/Wizard/Pages/passcode-set.qml:54
670msgid "Choose passcode"
683msgid "Choose passcode"
671−msgstr ""
684+msgstr "Odaberi kôd"
672
685
673#: qml/Wizard/Pages/passcode-desktop.qml:105
686#: qml/Wizard/Pages/passcode-desktop.qml:105
674msgid "Passcode too short"
687msgid "Passcode too short"
675−msgstr ""
688+msgstr "Kôd je prekratak"
676
689
677#: qml/Wizard/Pages/passcode-desktop.qml:107
690#: qml/Wizard/Pages/passcode-desktop.qml:107
678msgid "Passcodes match"
691msgid "Passcodes match"
679−msgstr ""
692+msgstr "Kôdovi se podudaraju"
680
693
681#: qml/Wizard/Pages/passcode-desktop.qml:109
694#: qml/Wizard/Pages/passcode-desktop.qml:109
682msgid "Passcodes do not match"
695msgid "Passcodes do not match"
683−msgstr ""
696+msgstr "Kôdovi se ne podudaraju"
684
697
685#: qml/Wizard/Pages/passcode-set.qml:62
698#: qml/Wizard/Pages/passcode-set.qml:62
686msgid "Passcode must be 4 characters long"
699msgid "Passcode must be 4 characters long"
687−msgstr ""
700+msgstr "Kôd mora sadržavati 4 znamenke"
688
701
689#: qml/Wizard/Pages/password-set.qml:30
702#: qml/Wizard/Pages/password-set.qml:30
690msgid "Lock Screen Password"
703msgid "Lock Screen Password"
691−msgstr ""
704+msgstr "Lozinka zaključavanja zaslona"
692
705
693#: qml/Wizard/Pages/password-set.qml:61
706#: qml/Wizard/Pages/password-set.qml:61
694msgid "Enter at least 8 characters"
707msgid "Enter at least 8 characters"
695−msgstr ""
708+msgstr "Upišite najmanje 8 znamenaka"
696
709
697#: qml/Wizard/Pages/password-set.qml:73
710#: qml/Wizard/Pages/password-set.qml:73
698msgid "Choose password"
711msgid "Choose password"
699−msgstr ""
712+msgstr "Odaberi lozinku"
700
713
701#: qml/Wizard/Pages/password-set.qml:103
714#: qml/Wizard/Pages/password-set.qml:103
702msgid "Confirm password"
715msgid "Confirm password"
703−msgstr ""
716+msgstr "Potvrdi lozniku"
704
717
705#: qml/Wizard/Pages/sim.qml:27
718#: qml/Wizard/Pages/sim.qml:27
706msgid "No SIM card installed"
719msgid "No SIM card installed"
707−msgstr ""
720+msgstr "Nema instalirane SIM kartice"
708
721
709#: qml/Wizard/Pages/sim.qml:54
722#: qml/Wizard/Pages/sim.qml:54
710msgid "SIM card added"
723msgid "SIM card added"
711−msgstr ""
724+msgstr "SIM kartica dodana"
712
725
713#: qml/Wizard/Pages/sim.qml:55
726#: qml/Wizard/Pages/sim.qml:55
714msgid "You must restart the device to access the mobile network."
727msgid "You must restart the device to access the mobile network."
715−msgstr ""
728+msgstr "Morate ponovno pokrenuti uređaj za pristup mobilnoj mreži."
716
729
717#: qml/Wizard/Pages/sim.qml:59
730#: qml/Wizard/Pages/sim.qml:59
718msgid "Restart"
731msgid "Restart"
719−msgstr ""
732+msgstr "Ponovno pokreni"
720
733
721#: qml/Wizard/Pages/sim.qml:78
734#: qml/Wizard/Pages/sim.qml:78
722msgid "You won’t be able to make calls or use text messaging without a SIM."
735msgid "You won’t be able to make calls or use text messaging without a SIM."
723msgstr ""
736msgstr ""
737+"Nećete biti u mogućnosti obavljati razgovore i slati poruke bez SIM kartice."
724
738
725#: qml/Wizard/Pages/sim.qml:90
739#: qml/Wizard/Pages/sim.qml:90
726msgid "To proceed with no SIM tap Skip."
740msgid "To proceed with no SIM tap Skip."
727−msgstr ""
741+msgstr "Za nastavak bez SIM kartice dotaknite Preskoči."
728
742
729#: qml/Wizard/PasswordMeter.qml:87
743#: qml/Wizard/PasswordMeter.qml:87
730msgid "Passwords match"
744msgid "Passwords match"
731−msgstr ""
745+msgstr "Lozinke se podudaraju"
732
746
733#: qml/Wizard/PasswordMeter.qml:89
747#: qml/Wizard/PasswordMeter.qml:89
734msgid "Passwords do not match"
748msgid "Passwords do not match"
735−msgstr ""
749+msgstr "Lozinke se ne podudaraju"
736
750
737#: qml/Wizard/PasswordMeter.qml:93
751#: qml/Wizard/PasswordMeter.qml:93
738msgid "Strong password"
752msgid "Strong password"
739−msgstr ""
753+msgstr "Snažna lozinka"
740
754
741#: qml/Wizard/PasswordMeter.qml:95
755#: qml/Wizard/PasswordMeter.qml:95
742msgid "Fair password"
756msgid "Fair password"
743−msgstr ""
757+msgstr "Solidna lozinka"
744
758
745#: qml/Wizard/PasswordMeter.qml:97
759#: qml/Wizard/PasswordMeter.qml:97
746msgid "Weak password"
760msgid "Weak password"
747−msgstr ""
761+msgstr "Slaba lozinka"
748
762
749#: qml/Wizard/PasswordMeter.qml:99
763#: qml/Wizard/PasswordMeter.qml:99
750msgid "Very weak password"
764msgid "Very weak password"
751−msgstr ""
765+msgstr "Vrlo slaba lozinka"
752
766
753#~ msgid "Confirm"
767#~ msgid "Confirm"
754#~ msgstr "Potvrdi"
768#~ msgstr "Potvrdi"
@@ -990,11 +1004,6 @@ msgstr ""
990#~ msgid "Long swipe from the right edge."
1004#~ msgid "Long swipe from the right edge."
991#~ msgstr "Povuci dugo s desnog ruba"
1005#~ msgstr "Povuci dugo s desnog ruba"
992
1006
993−#~ msgid "Your device is now ready to use."
1007+#~ msgid "Hover your mouse on the right edge to view your open apps"
994−#~ msgstr "Vaš uređaj je sada spreman za upotrebu."
1008+#~ msgstr ""
995−
1009+#~ "Lebdite svojim mišem po desnom rubu kako bi vidjeli otvorene aplikacije"
996−#~ msgid "Welcome to your Ubuntu device."
997−#~ msgstr "Dobrodošli u svoj Ubuntu uređaj."
998−
999−#~ msgid "Please select how you’d like to unlock your device."
1000−#~ msgstr "Odaberite kako želite otključavati svoj uređaj."
po/hu.po+14−19
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2016-03-24 09:19+0000\n"
11"PO-Revision-Date: 2016-03-24 09:19+0000\n"
12"Last-Translator: Richard Somlói <ricsipontaz@gmail.com>\n"
12"Last-Translator: Richard Somlói <ricsipontaz@gmail.com>\n"
13"Language-Team: Hungarian <hu@li.org>\n"
13"Language-Team: Hungarian <hu@li.org>\n"
@@ -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: 2016-03-25 05:55+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17967)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -451,19 +451,20 @@ msgstr "Csúsztasson felfelé új üzenet írásához"
451msgid "Swipe up to manage the app"
451msgid "Swipe up to manage the app"
452msgstr "Csúsztasson felfelé az alkalmazás kezeléséhez"
452msgstr "Csúsztasson felfelé az alkalmazás kezeléséhez"
453
453
454−#: qml/Tutorial/TutorialLeft.qml:47
455−msgid "Swipe from the left edge to open the launcher"
456−msgstr "Csúsztasson balról az indító eléréshez"
457−
458#: qml/Tutorial/TutorialLeftLong.qml:47
454#: qml/Tutorial/TutorialLeftLong.qml:47
459msgid "Long swipe from the left edge to open the Today scope"
455msgid "Long swipe from the left edge to open the Today scope"
460msgstr "Hosszan csúsztasson balról a Ma lencse eléréséhez"
456msgstr "Hosszan csúsztasson balról a Ma lencse eléréséhez"
461
457
462−#: qml/Tutorial/TutorialRight.qml:54
458+#: qml/Tutorial/TutorialLeft.qml:47
463−msgid "Hover your mouse on the right edge to view your open apps"
459+msgid "Swipe from the left edge to open the launcher"
464−msgstr "Húzza az egeret jobbra a nyitott alkalmazások eléréséhez"
460+msgstr "Csúsztasson balról az indító eléréshez"
465
461
466#: qml/Tutorial/TutorialRight.qml:55
462#: qml/Tutorial/TutorialRight.qml:55
463+msgid "Push your mouse against the right edge to view your open apps"
464+msgstr ""
465+"Húzza az egeret a jobb oldalhoz a nyitott alkalmazások megjelenítéséhez"
466+
467+#: qml/Tutorial/TutorialRight.qml:56
467msgid "Short or long swipe from the right edge to view your open apps"
468msgid "Short or long swipe from the right edge to view your open apps"
468msgstr ""
469msgstr ""
469"Csúsztasson röviden vagy hosszan jobbról a nyitott alkalmazások eléréshez"
470"Csúsztasson röviden vagy hosszan jobbról a nyitott alkalmazások eléréshez"
@@ -547,7 +548,7 @@ msgstr "Ne határozza meg"
547
548
548#: qml/Wizard/Pages/40-location.qml:260
549#: qml/Wizard/Pages/40-location.qml:260
549msgid "You can change it later in System Settings."
550msgid "You can change it later in System Settings."
550−msgstr "Ezt később a Rendszerbállítások alatt módosíthatja."
551+msgstr "Ezt később a Rendszerbeállítások alatt módosíthatja."
551
552
552#: qml/Wizard/Pages/50-timezone.qml:29
553#: qml/Wizard/Pages/50-timezone.qml:29
553msgid "Time Zone"
554msgid "Time Zone"
@@ -1075,11 +1076,5 @@ msgstr "Nagyon gyenge jelszó"
1075#~ msgid "You almost got it!"
1076#~ msgid "You almost got it!"
1076#~ msgstr "Majdnem megvan!"
1077#~ msgstr "Majdnem megvan!"
1077
1078
1078−#~ msgid "Your device is now ready to use."
1079+#~ msgid "Hover your mouse on the right edge to view your open apps"
1079−#~ msgstr "Az eszköze készen áll a használatra."
1080+#~ msgstr "Húzza az egeret jobbra a nyitott alkalmazások eléréséhez"
1080−
1081−#~ msgid "Please select how you’d like to unlock your device."
1082−#~ msgstr "Válassza ki, hogy milyen módon szeretné feloldani az eszközét."
1083−
1084−#~ msgid "Welcome to your Ubuntu device."
1085−#~ msgstr "Köszönti az Ubuntus eszköze."
po/hy.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2014-10-28 06:34+0000\n"
11"PO-Revision-Date: 2014-10-28 06:34+0000\n"
12"Last-Translator: Vahan Harutyunyan <Unknown>\n"
12"Last-Translator: Vahan Harutyunyan <Unknown>\n"
13"Language-Team: Armenian <hy@li.org>\n"
13"Language-Team: Armenian <hy@li.org>\n"
@@ -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: 2016-03-24 06:07+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:01+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -444,19 +444,19 @@ msgstr ""
444msgid "Swipe up to manage the app"
444msgid "Swipe up to manage the app"
445msgstr ""
445msgstr ""
446
446
447−#: qml/Tutorial/TutorialLeft.qml:47
448−msgid "Swipe from the left edge to open the launcher"
449−msgstr ""
450−
451#: qml/Tutorial/TutorialLeftLong.qml:47
447#: qml/Tutorial/TutorialLeftLong.qml:47
452msgid "Long swipe from the left edge to open the Today scope"
448msgid "Long swipe from the left edge to open the Today scope"
453msgstr ""
449msgstr ""
454
450
455−#: qml/Tutorial/TutorialRight.qml:54
451+#: qml/Tutorial/TutorialLeft.qml:47
456−msgid "Hover your mouse on the right edge to view your open apps"
452+msgid "Swipe from the left edge to open the launcher"
457msgstr ""
453msgstr ""
458
454
459#: qml/Tutorial/TutorialRight.qml:55
455#: qml/Tutorial/TutorialRight.qml:55
456+msgid "Push your mouse against the right edge to view your open apps"
457+msgstr ""
458+
459+#: qml/Tutorial/TutorialRight.qml:56
460msgid "Short or long swipe from the right edge to view your open apps"
460msgid "Short or long swipe from the right edge to view your open apps"
461msgstr ""
461msgstr ""
462
462
po/ia.po+89−82
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-08-25 19:31+0000\n"
11"PO-Revision-Date: 2015-08-25 19:31+0000\n"
12"Last-Translator: karm <melo@carmu.com>\n"
12"Last-Translator: karm <melo@carmu.com>\n"
13"Language-Team: Interlingua <ia@li.org>\n"
13"Language-Team: Interlingua <ia@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -184,11 +184,11 @@ msgstr "Adder al Favoritos"
184
184
185#: qml/Dash/FiltersPopover.qml:60
185#: qml/Dash/FiltersPopover.qml:60
186msgid "Refine your results"
186msgid "Refine your results"
187−msgstr ""
187+msgstr "Poli tu resultatos"
188
188
189#: qml/Dash/FiltersPopover.qml:69
189#: qml/Dash/FiltersPopover.qml:69
190msgid "Reset"
190msgid "Reset"
191−msgstr ""
191+msgstr "Restabilir"
192
192
193#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
193#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
194msgid "See less"
194msgid "See less"
@@ -205,11 +205,11 @@ msgstr "Cerca"
205
205
206#: qml/Dash/PageHeaderExtraPanel.qml:55
206#: qml/Dash/PageHeaderExtraPanel.qml:55
207msgid "Recent Searches"
207msgid "Recent Searches"
208−msgstr ""
208+msgstr "Recercas recente"
209
209
210#: qml/Dash/PageHeaderExtraPanel.qml:66
210#: qml/Dash/PageHeaderExtraPanel.qml:66
211msgid "Clear All"
211msgid "Clear All"
212−msgstr ""
212+msgstr "Clarar toto"
213
213
214#: qml/Dash/Previews/PreviewActionCombo.qml:35
214#: qml/Dash/Previews/PreviewActionCombo.qml:35
215msgid "More..."
215msgid "More..."
@@ -428,51 +428,52 @@ msgstr "Appellar retro"
428
428
429#: qml/Stages/SideStage.qml:76
429#: qml/Stages/SideStage.qml:76
430msgid "Drag using 3 fingers any application from one window to the other"
430msgid "Drag using 3 fingers any application from one window to the other"
431−msgstr ""
431+msgstr "Tirar per 3 digitos qualcunque application ab un fenestra al altere"
432
432
433#: qml/Tutorial/TutorialBottom.qml:78
433#: qml/Tutorial/TutorialBottom.qml:78
434msgid "Swipe up to add a contact"
434msgid "Swipe up to add a contact"
435−msgstr ""
435+msgstr "Striar in alto pro adder un contacto"
436
436
437#: qml/Tutorial/TutorialBottom.qml:80
437#: qml/Tutorial/TutorialBottom.qml:80
438msgid "Swipe up for favorite calculations"
438msgid "Swipe up for favorite calculations"
439−msgstr ""
439+msgstr "Striar in alto pro le calculationes favorite"
440
440
441#: qml/Tutorial/TutorialBottom.qml:82
441#: qml/Tutorial/TutorialBottom.qml:82
442msgid "Swipe up for recent calls"
442msgid "Swipe up for recent calls"
443−msgstr ""
443+msgstr "Striar in alto pro le appellos recente"
444
444
445#: qml/Tutorial/TutorialBottom.qml:84
445#: qml/Tutorial/TutorialBottom.qml:84
446msgid "Swipe up to create a message"
446msgid "Swipe up to create a message"
447−msgstr ""
447+msgstr "Striar in alto pro crear un message"
448
448
449#: qml/Tutorial/TutorialBottom.qml:85
449#: qml/Tutorial/TutorialBottom.qml:85
450msgid "Swipe up to manage the app"
450msgid "Swipe up to manage the app"
451−msgstr ""
451+msgstr "Striar in alto pro gerer le applicationes"
452−
453−#: qml/Tutorial/TutorialLeft.qml:47
454−msgid "Swipe from the left edge to open the launcher"
455−msgstr ""
456
452
457#: qml/Tutorial/TutorialLeftLong.qml:47
453#: qml/Tutorial/TutorialLeftLong.qml:47
458msgid "Long swipe from the left edge to open the Today scope"
454msgid "Long swipe from the left edge to open the Today scope"
459−msgstr ""
455+msgstr "Striar ab le bordo sinistre pro aperir le campo Hodie"
460
456
461−#: qml/Tutorial/TutorialRight.qml:54
457+#: qml/Tutorial/TutorialLeft.qml:47
462−msgid "Hover your mouse on the right edge to view your open apps"
458+msgid "Swipe from the left edge to open the launcher"
463−msgstr ""
459+msgstr "Striar ab le bordo sinistre pro aperir le lanceator"
464
460
465#: qml/Tutorial/TutorialRight.qml:55
461#: qml/Tutorial/TutorialRight.qml:55
462+msgid "Push your mouse against the right edge to view your open apps"
463+msgstr ""
464+
465+#: qml/Tutorial/TutorialRight.qml:56
466msgid "Short or long swipe from the right edge to view your open apps"
466msgid "Short or long swipe from the right edge to view your open apps"
467msgstr ""
467msgstr ""
468+"Striar breve o longe ab le bordo dextre pro vider tu applicationes aperte"
468
469
469#: qml/Tutorial/TutorialTop.qml:53
470#: qml/Tutorial/TutorialTop.qml:53
470msgid "Swipe from the top right edge to open the notification bar"
471msgid "Swipe from the top right edge to open the notification bar"
471−msgstr ""
472+msgstr "Stria ab le bordo alte dextre pro aperir le barra del notificationes"
472
473
473#: qml/Tutorial/TutorialTop.qml:54
474#: qml/Tutorial/TutorialTop.qml:54
474msgid "Swipe from the top edge to open the notification bar"
475msgid "Swipe from the top edge to open the notification bar"
475−msgstr ""
476+msgstr "Stria ab le bordo alte pro aperir le barra de notification"
476
477
477#: qml/Wizard/Page.qml:54
478#: qml/Wizard/Page.qml:54
478msgctxt "Button: Go back one page in the Wizard"
479msgctxt "Button: Go back one page in the Wizard"
@@ -481,7 +482,7 @@ msgstr "Retro"
481
482
482#: qml/Wizard/Pages/10-welcome.qml:27
483#: qml/Wizard/Pages/10-welcome.qml:27
483msgid "Language"
484msgid "Language"
484−msgstr ""
485+msgstr "Lingua"
485
486
486#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
487#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
487#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
488#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
@@ -490,7 +491,7 @@ msgstr ""
490#: qml/Wizard/Pages/passcode-desktop.qml:124
491#: qml/Wizard/Pages/passcode-desktop.qml:124
491#: qml/Wizard/Pages/password-set.qml:141
492#: qml/Wizard/Pages/password-set.qml:141
492msgid "Next"
493msgid "Next"
493−msgstr ""
494+msgstr "Sequente"
494
495
495#: qml/Wizard/Pages/30-wifi.qml:29
496#: qml/Wizard/Pages/30-wifi.qml:29
496msgid "Connect to Wi‑Fi"
497msgid "Connect to Wi‑Fi"
@@ -498,15 +499,15 @@ msgstr "Connecter al Wi‑Fi"
498
499
499#: qml/Wizard/Pages/30-wifi.qml:130
500#: qml/Wizard/Pages/30-wifi.qml:130
500msgid "Connected"
501msgid "Connected"
501−msgstr ""
502+msgstr "Connexe"
502
503
503#: qml/Wizard/Pages/30-wifi.qml:163
504#: qml/Wizard/Pages/30-wifi.qml:163
504msgid "Available Wi-Fi networks"
505msgid "Available Wi-Fi networks"
505−msgstr ""
506+msgstr "Retes Wi-Fi disponibile"
506
507
507#: qml/Wizard/Pages/30-wifi.qml:164
508#: qml/Wizard/Pages/30-wifi.qml:164
508msgid "No available Wi-Fi networks"
509msgid "No available Wi-Fi networks"
509−msgstr ""
510+msgstr "Nulle retes Wi-Fi disponibile"
510
511
511#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
512#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
512#: qml/Wizard/Pages/sim.qml:101
513#: qml/Wizard/Pages/sim.qml:101
@@ -515,98 +516,102 @@ msgstr "Salta"
515
516
516#: qml/Wizard/Pages/40-location.qml:27
517#: qml/Wizard/Pages/40-location.qml:27
517msgid "Location Services"
518msgid "Location Services"
518−msgstr ""
519+msgstr "Servicios de position"
519
520
520#: qml/Wizard/Pages/40-location.qml:83
521#: qml/Wizard/Pages/40-location.qml:83
521msgid ""
522msgid ""
522"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
523"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
523"(recommended)"
524"(recommended)"
524msgstr ""
525msgstr ""
526+"Usar GPS, hotspots Wi-Fi e rete mobile anonymemente pro revelar le position "
527+"(recommendate)"
525
528
526#: qml/Wizard/Pages/40-location.qml:105
529#: qml/Wizard/Pages/40-location.qml:105
527#, qt-format
530#, qt-format
528msgid "By selecting this option you agree to the Nokia HERE %1."
531msgid "By selecting this option you agree to the Nokia HERE %1."
529−msgstr ""
532+msgstr "Per iste option tu conveni con le Nokia HERE %1."
530
533
531#: qml/Wizard/Pages/40-location.qml:106
534#: qml/Wizard/Pages/40-location.qml:106
532msgctxt "part of: Nokia HERE terms and conditions"
535msgctxt "part of: Nokia HERE terms and conditions"
533msgid "terms and conditions"
536msgid "terms and conditions"
534−msgstr ""
537+msgstr "Terminos & Conditiones"
535
538
536#: qml/Wizard/Pages/40-location.qml:160
539#: qml/Wizard/Pages/40-location.qml:160
537msgid "GPS only"
540msgid "GPS only"
538−msgstr ""
541+msgstr "GPS solmente"
539
542
540#: qml/Wizard/Pages/40-location.qml:214
543#: qml/Wizard/Pages/40-location.qml:214
541msgid "Don't use my location"
544msgid "Don't use my location"
542−msgstr ""
545+msgstr "Non usar mi position"
543
546
544#: qml/Wizard/Pages/40-location.qml:260
547#: qml/Wizard/Pages/40-location.qml:260
545msgid "You can change it later in System Settings."
548msgid "You can change it later in System Settings."
546−msgstr ""
549+msgstr "Tu poter cambiar lo depois in configurationes del systema."
547
550
548#: qml/Wizard/Pages/50-timezone.qml:29
551#: qml/Wizard/Pages/50-timezone.qml:29
549msgid "Time Zone"
552msgid "Time Zone"
550−msgstr ""
553+msgstr "Fuso horari"
551
554
552#: qml/Wizard/Pages/50-timezone.qml:178
555#: qml/Wizard/Pages/50-timezone.qml:178
553msgid "Enter your city"
556msgid "Enter your city"
554−msgstr ""
557+msgstr "Insere tu citate"
555
558
556#: qml/Wizard/Pages/60-account.qml:24
559#: qml/Wizard/Pages/60-account.qml:24
557msgid "Personalize Your Device"
560msgid "Personalize Your Device"
558−msgstr ""
561+msgstr "Personalisa tu dispositivo"
559
562
560#: qml/Wizard/Pages/60-account.qml:48
563#: qml/Wizard/Pages/60-account.qml:48
561msgid "Preferred Name"
564msgid "Preferred Name"
562−msgstr ""
565+msgstr "Preferred Name"
563
566
564#: qml/Wizard/Pages/70-passwd-type.qml:39
567#: qml/Wizard/Pages/70-passwd-type.qml:39
565msgid "Lock Screen"
568msgid "Lock Screen"
566−msgstr ""
569+msgstr "Blocar le schermo"
567
570
568#: qml/Wizard/Pages/70-passwd-type.qml:101
571#: qml/Wizard/Pages/70-passwd-type.qml:101
569msgctxt "Label: Type of security method"
572msgctxt "Label: Type of security method"
570msgid "Create new password"
573msgid "Create new password"
571−msgstr ""
574+msgstr "Crear un nove contrasigno"
572
575
573#: qml/Wizard/Pages/70-passwd-type.qml:103
576#: qml/Wizard/Pages/70-passwd-type.qml:103
574msgctxt "Label: Type of security method"
577msgctxt "Label: Type of security method"
575msgid "Create passcode (numbers only)"
578msgid "Create passcode (numbers only)"
576−msgstr ""
579+msgstr "Crear codice-contrasigno (numeros sol)"
577
580
578#: qml/Wizard/Pages/70-passwd-type.qml:105
581#: qml/Wizard/Pages/70-passwd-type.qml:105
579msgctxt "Label: Type of security method"
582msgctxt "Label: Type of security method"
580msgid "No lock code"
583msgid "No lock code"
581−msgstr ""
584+msgstr "Nulle codice de bloco"
582
585
583#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
586#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
584msgid "Privacy Policy"
587msgid "Privacy Policy"
585−msgstr ""
588+msgstr "Regulas del confidentialitate"
586
589
587#: qml/Wizard/Pages/75-report-check.qml:26
590#: qml/Wizard/Pages/75-report-check.qml:26
588msgid "Help Us Improve"
591msgid "Help Us Improve"
589−msgstr ""
592+msgstr "Adjuta nos a meliorar"
590
593
591#: qml/Wizard/Pages/75-report-check.qml:59
594#: qml/Wizard/Pages/75-report-check.qml:59
592msgid "Improve system performance by sending us crashes and error reports."
595msgid "Improve system performance by sending us crashes and error reports."
593msgstr ""
596msgstr ""
597+"Meliorar le performance del systema per expedir nos errores e reportos de "
598+"error."
594
599
595#: qml/Wizard/Pages/75-report-check.qml:60
600#: qml/Wizard/Pages/75-report-check.qml:60
596msgid "Privacy policy"
601msgid "Privacy policy"
597−msgstr ""
602+msgstr "Politica de confidentialitate"
598
603
599#: qml/Wizard/Pages/80-finished.qml:89
604#: qml/Wizard/Pages/80-finished.qml:89
600msgid "Welcome to Ubuntu"
605msgid "Welcome to Ubuntu"
601−msgstr ""
606+msgstr "Benvenite a Ubuntu."
602
607
603#: qml/Wizard/Pages/80-finished.qml:104
608#: qml/Wizard/Pages/80-finished.qml:104
604msgid "You are ready to use your device now"
609msgid "You are ready to use your device now"
605−msgstr ""
610+msgstr "Tu es preste a usar tu dispositivo nunc"
606
611
607#: qml/Wizard/Pages/80-finished.qml:124
612#: qml/Wizard/Pages/80-finished.qml:124
608msgid "Get Started"
613msgid "Get Started"
609−msgstr ""
614+msgstr "Initiar"
610
615
611#: qml/Wizard/Pages/here-terms.qml:25
616#: qml/Wizard/Pages/here-terms.qml:25
612msgid "Terms & Conditions"
617msgid "Terms & Conditions"
@@ -614,7 +619,7 @@ msgstr "Terminos & Conditiones"
614
619
615#: qml/Wizard/Pages/here-terms.qml:69
620#: qml/Wizard/Pages/here-terms.qml:69
616msgid "Your device uses positioning technologies provided by HERE."
621msgid "Your device uses positioning technologies provided by HERE."
617−msgstr ""
622+msgstr "Tu dispositivo usa le technologias de positionamento de HERE."
618
623
619#: qml/Wizard/Pages/here-terms.qml:81
624#: qml/Wizard/Pages/here-terms.qml:81
620msgid ""
625msgid ""
@@ -622,21 +627,26 @@ msgid ""
622"collects information about nearby cell towers and Wi-Fi hotspots around your "
627"collects information about nearby cell towers and Wi-Fi hotspots around your "
623"current location whenever your position is being found."
628"current location whenever your position is being found."
624msgstr ""
629msgstr ""
630+"Pro fornir te le servicios de positionamento e pro affinar lor qualitate, "
631+"HERE collige informationes del turres del cella vicin e del hotspots Wi-Fi "
632+"circa tu actual position quandocunque tu position debe esser trovate."
625
633
626#: qml/Wizard/Pages/here-terms.qml:93
634#: qml/Wizard/Pages/here-terms.qml:93
627msgid ""
635msgid ""
628"The information collected is used to analyze the service and to improve the "
636"The information collected is used to analyze the service and to improve the "
629"use of service, but not to identify you personally."
637"use of service, but not to identify you personally."
630msgstr ""
638msgstr ""
639+"Le information colligite es usate pro analysar le servicio e pro affinar le "
640+"usa de servicio, ma non pro identificar te personalmente"
631
641
632#: qml/Wizard/Pages/here-terms.qml:106
642#: qml/Wizard/Pages/here-terms.qml:106
633#, qt-format
643#, qt-format
634msgid "By continuing, you agree to the HERE platform %1 and %2."
644msgid "By continuing, you agree to the HERE platform %1 and %2."
635−msgstr ""
645+msgstr "Per continuar, tu conveni al platteforma %1 e %2 de HERE."
636
646
637#: qml/Wizard/Pages/here-terms.qml:107
647#: qml/Wizard/Pages/here-terms.qml:107
638msgid "Service Terms"
648msgid "Service Terms"
639−msgstr ""
649+msgstr "Terminos de servicio"
640
650
641#: qml/Wizard/Pages/passcode-confirm.qml:43
651#: qml/Wizard/Pages/passcode-confirm.qml:43
642#: qml/Wizard/Pages/passcode-desktop.qml:80
652#: qml/Wizard/Pages/passcode-desktop.qml:80
@@ -645,69 +655,69 @@ msgstr "Confirma le codice-contrasigno"
645
655
646#: qml/Wizard/Pages/passcode-confirm.qml:45
656#: qml/Wizard/Pages/passcode-confirm.qml:45
647msgid "Incorrect passcode."
657msgid "Incorrect passcode."
648−msgstr ""
658+msgstr "Codice-contrasigno non correcte."
649
659
650#: qml/Wizard/Pages/passcode-confirm.qml:45
660#: qml/Wizard/Pages/passcode-confirm.qml:45
651msgctxt "Enter the passcode again"
661msgctxt "Enter the passcode again"
652msgid "Please re-enter."
662msgid "Please re-enter."
653−msgstr ""
663+msgstr "Per favor re-inserer"
654
664
655#: qml/Wizard/Pages/passcode-desktop.qml:30
665#: qml/Wizard/Pages/passcode-desktop.qml:30
656msgid "Lock Screen Passcode"
666msgid "Lock Screen Passcode"
657−msgstr ""
667+msgstr "Codice contrasigno del bloca schermo."
658
668
659#: qml/Wizard/Pages/passcode-desktop.qml:56
669#: qml/Wizard/Pages/passcode-desktop.qml:56
660msgid "Enter 4 numbers to setup your passcode"
670msgid "Enter 4 numbers to setup your passcode"
661−msgstr ""
671+msgstr "Insere 4 numeros pro configurar tu codice-contrasigno"
662
672
663#: qml/Wizard/Pages/passcode-desktop.qml:65
673#: qml/Wizard/Pages/passcode-desktop.qml:65
664#: qml/Wizard/Pages/passcode-set.qml:54
674#: qml/Wizard/Pages/passcode-set.qml:54
665msgid "Choose passcode"
675msgid "Choose passcode"
666−msgstr ""
676+msgstr "Seliger le codice-contrasigno"
667
677
668#: qml/Wizard/Pages/passcode-desktop.qml:105
678#: qml/Wizard/Pages/passcode-desktop.qml:105
669msgid "Passcode too short"
679msgid "Passcode too short"
670−msgstr ""
680+msgstr "Codice-contrasigno troppo breve"
671
681
672#: qml/Wizard/Pages/passcode-desktop.qml:107
682#: qml/Wizard/Pages/passcode-desktop.qml:107
673msgid "Passcodes match"
683msgid "Passcodes match"
674−msgstr ""
684+msgstr "Le codices-contrasigno concorda"
675
685
676#: qml/Wizard/Pages/passcode-desktop.qml:109
686#: qml/Wizard/Pages/passcode-desktop.qml:109
677msgid "Passcodes do not match"
687msgid "Passcodes do not match"
678−msgstr ""
688+msgstr "Le codices-contrasigno non concorda"
679
689
680#: qml/Wizard/Pages/passcode-set.qml:62
690#: qml/Wizard/Pages/passcode-set.qml:62
681msgid "Passcode must be 4 characters long"
691msgid "Passcode must be 4 characters long"
682−msgstr ""
692+msgstr "Le codice-contrasigno debe esser longe 4 characteres"
683
693
684#: qml/Wizard/Pages/password-set.qml:30
694#: qml/Wizard/Pages/password-set.qml:30
685msgid "Lock Screen Password"
695msgid "Lock Screen Password"
686−msgstr ""
696+msgstr "Contrasigno del bloco del schermo"
687
697
688#: qml/Wizard/Pages/password-set.qml:61
698#: qml/Wizard/Pages/password-set.qml:61
689msgid "Enter at least 8 characters"
699msgid "Enter at least 8 characters"
690−msgstr ""
700+msgstr "Insere al minimo 8 characteres"
691
701
692#: qml/Wizard/Pages/password-set.qml:73
702#: qml/Wizard/Pages/password-set.qml:73
693msgid "Choose password"
703msgid "Choose password"
694−msgstr ""
704+msgstr "Seliger un contrasigno"
695
705
696#: qml/Wizard/Pages/password-set.qml:103
706#: qml/Wizard/Pages/password-set.qml:103
697msgid "Confirm password"
707msgid "Confirm password"
698−msgstr ""
708+msgstr "Confirmar le contrasigno"
699
709
700#: qml/Wizard/Pages/sim.qml:27
710#: qml/Wizard/Pages/sim.qml:27
701msgid "No SIM card installed"
711msgid "No SIM card installed"
702−msgstr ""
712+msgstr "Nulle carta SIM installate"
703
713
704#: qml/Wizard/Pages/sim.qml:54
714#: qml/Wizard/Pages/sim.qml:54
705msgid "SIM card added"
715msgid "SIM card added"
706−msgstr ""
716+msgstr "Carta SIM addite"
707
717
708#: qml/Wizard/Pages/sim.qml:55
718#: qml/Wizard/Pages/sim.qml:55
709msgid "You must restart the device to access the mobile network."
719msgid "You must restart the device to access the mobile network."
710−msgstr ""
720+msgstr "Tu debe reinitiar le dispositivo pro acceder le rete mobile."
711
721
712#: qml/Wizard/Pages/sim.qml:59
722#: qml/Wizard/Pages/sim.qml:59
713msgid "Restart"
723msgid "Restart"
@@ -716,34 +726,35 @@ msgstr "Re-Initiar"
716#: qml/Wizard/Pages/sim.qml:78
726#: qml/Wizard/Pages/sim.qml:78
717msgid "You won’t be able to make calls or use text messaging without a SIM."
727msgid "You won’t be able to make calls or use text messaging without a SIM."
718msgstr ""
728msgstr ""
729+"Tu non essera capace a facer appellos o usar messages de texto sin un SIM."
719
730
720#: qml/Wizard/Pages/sim.qml:90
731#: qml/Wizard/Pages/sim.qml:90
721msgid "To proceed with no SIM tap Skip."
732msgid "To proceed with no SIM tap Skip."
722−msgstr ""
733+msgstr "Pro proceder sin SIM colpa Saltar."
723
734
724#: qml/Wizard/PasswordMeter.qml:87
735#: qml/Wizard/PasswordMeter.qml:87
725msgid "Passwords match"
736msgid "Passwords match"
726−msgstr ""
737+msgstr "Le contrasignos concorda"
727
738
728#: qml/Wizard/PasswordMeter.qml:89
739#: qml/Wizard/PasswordMeter.qml:89
729msgid "Passwords do not match"
740msgid "Passwords do not match"
730−msgstr ""
741+msgstr "Le contrasignos non concorda"
731
742
732#: qml/Wizard/PasswordMeter.qml:93
743#: qml/Wizard/PasswordMeter.qml:93
733msgid "Strong password"
744msgid "Strong password"
734−msgstr ""
745+msgstr "Contrasigno forte"
735
746
736#: qml/Wizard/PasswordMeter.qml:95
747#: qml/Wizard/PasswordMeter.qml:95
737msgid "Fair password"
748msgid "Fair password"
738−msgstr ""
749+msgstr "Contrasigno passabile"
739
750
740#: qml/Wizard/PasswordMeter.qml:97
751#: qml/Wizard/PasswordMeter.qml:97
741msgid "Weak password"
752msgid "Weak password"
742−msgstr ""
753+msgstr "Contrasigno debile"
743
754
744#: qml/Wizard/PasswordMeter.qml:99
755#: qml/Wizard/PasswordMeter.qml:99
745msgid "Very weak password"
756msgid "Very weak password"
746−msgstr ""
757+msgstr "Contrasigno troppo debile"
747
758
748#~ msgid "Log out"
759#~ msgid "Log out"
749#~ msgstr "Clauder le Session"
760#~ msgstr "Clauder le Session"
@@ -1049,11 +1060,7 @@ msgstr ""
1049#~ msgid "Yesterday %l:%M %p"
1060#~ msgid "Yesterday %l:%M %p"
1050#~ msgstr "Heri"
1061#~ msgstr "Heri"
1051
1062
1052−#~ msgid "Welcome to your Ubuntu device."
1063+#~ msgid "Hover your mouse on the right edge to view your open apps"
1053−#~ msgstr "Benvenite a tu dispositivo Ubuntu."
1064+#~ msgstr ""
1054−
1065+#~ "Passar supra con tu mus sur le bordo dextere pro vider tu applicationes "
1055−#~ msgid "Please select how you’d like to unlock your device."
1066+#~ "aperte"
1056−#~ msgstr "Per favor elige como tu prefere disblocar tu dispositivo."
1057−
1058−#~ msgid "Your device is now ready to use."
1059−#~ msgstr "Tu dispositivo es nunc preste a usar."
po/id.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2013-06-26 22:35+0000\n"
11"PO-Revision-Date: 2013-06-26 22:35+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Indonesian <id@li.org>\n"
13"Language-Team: Indonesian <id@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -447,19 +447,19 @@ msgstr ""
447msgid "Swipe up to manage the app"
447msgid "Swipe up to manage the app"
448msgstr ""
448msgstr ""
449
449
450−#: qml/Tutorial/TutorialLeft.qml:47
451−msgid "Swipe from the left edge to open the launcher"
452−msgstr ""
453−
454#: qml/Tutorial/TutorialLeftLong.qml:47
450#: qml/Tutorial/TutorialLeftLong.qml:47
455msgid "Long swipe from the left edge to open the Today scope"
451msgid "Long swipe from the left edge to open the Today scope"
456msgstr ""
452msgstr ""
457
453
458−#: qml/Tutorial/TutorialRight.qml:54
454+#: qml/Tutorial/TutorialLeft.qml:47
459−msgid "Hover your mouse on the right edge to view your open apps"
455+msgid "Swipe from the left edge to open the launcher"
460msgstr ""
456msgstr ""
461
457
462#: qml/Tutorial/TutorialRight.qml:55
458#: qml/Tutorial/TutorialRight.qml:55
459+msgid "Push your mouse against the right edge to view your open apps"
460+msgstr ""
461+
462+#: qml/Tutorial/TutorialRight.qml:56
463msgid "Short or long swipe from the right edge to view your open apps"
463msgid "Short or long swipe from the right edge to view your open apps"
464msgstr ""
464msgstr ""
465
465
po/is.po+9−9
@@ -9,7 +9,7 @@ msgid ""
9msgstr ""
9msgstr ""
10"Project-Id-Version: po_unity8-is\n"
10"Project-Id-Version: po_unity8-is\n"
11"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
11"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
12−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
12+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
13"PO-Revision-Date: 2014-11-13 09:32+0000\n"
13"PO-Revision-Date: 2014-11-13 09:32+0000\n"
14"Last-Translator: Sveinn í Felli <sv1@fellsnet.is>\n"
14"Last-Translator: Sveinn í Felli <sv1@fellsnet.is>\n"
15"Language-Team: Icelandic <translation-team-is@lists.sourceforge.net>\n"
15"Language-Team: Icelandic <translation-team-is@lists.sourceforge.net>\n"
@@ -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: 2016-03-24 06:08+0000\n"
20+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
21−"X-Generator: Launchpad (build 17958)\n"
21+"X-Generator: Launchpad (build 17995)\n"
22"Language: is\n"
22"Language: is\n"
23
23
24#: plugins/IntegratedLightDM/Greeter.cpp:112
24#: plugins/IntegratedLightDM/Greeter.cpp:112
@@ -453,19 +453,19 @@ msgstr ""
453msgid "Swipe up to manage the app"
453msgid "Swipe up to manage the app"
454msgstr ""
454msgstr ""
455
455
456−#: qml/Tutorial/TutorialLeft.qml:47
457−msgid "Swipe from the left edge to open the launcher"
458−msgstr ""
459−
460#: qml/Tutorial/TutorialLeftLong.qml:47
456#: qml/Tutorial/TutorialLeftLong.qml:47
461msgid "Long swipe from the left edge to open the Today scope"
457msgid "Long swipe from the left edge to open the Today scope"
462msgstr ""
458msgstr ""
463
459
464−#: qml/Tutorial/TutorialRight.qml:54
460+#: qml/Tutorial/TutorialLeft.qml:47
465−msgid "Hover your mouse on the right edge to view your open apps"
461+msgid "Swipe from the left edge to open the launcher"
466msgstr ""
462msgstr ""
467
463
468#: qml/Tutorial/TutorialRight.qml:55
464#: qml/Tutorial/TutorialRight.qml:55
465+msgid "Push your mouse against the right edge to view your open apps"
466+msgstr ""
467+
468+#: qml/Tutorial/TutorialRight.qml:56
469msgid "Short or long swipe from the right edge to view your open apps"
469msgid "Short or long swipe from the right edge to view your open apps"
470msgstr ""
470msgstr ""
471
471
po/it.po+91−83
@@ -7,16 +7,16 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11−"PO-Revision-Date: 2015-09-18 08:24+0000\n"
11+"PO-Revision-Date: 2016-04-03 16:08+0000\n"
12−"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>\n"
12+"Last-Translator: Milo Casagrande <milo.casagrande@gmail.com>\n"
13"Language-Team: Italian <it@li.org>\n"
13"Language-Team: Italian <it@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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -188,11 +188,11 @@ msgstr "Aggiungi ai preferiti"
188
188
189#: qml/Dash/FiltersPopover.qml:60
189#: qml/Dash/FiltersPopover.qml:60
190msgid "Refine your results"
190msgid "Refine your results"
191−msgstr ""
191+msgstr "Affina la ricerca"
192
192
193#: qml/Dash/FiltersPopover.qml:69
193#: qml/Dash/FiltersPopover.qml:69
194msgid "Reset"
194msgid "Reset"
195−msgstr ""
195+msgstr "Azzera"
196
196
197#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
197#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
198msgid "See less"
198msgid "See less"
@@ -209,11 +209,11 @@ msgstr "Cerca"
209
209
210#: qml/Dash/PageHeaderExtraPanel.qml:55
210#: qml/Dash/PageHeaderExtraPanel.qml:55
211msgid "Recent Searches"
211msgid "Recent Searches"
212−msgstr ""
212+msgstr "Ricerche recenti"
213
213
214#: qml/Dash/PageHeaderExtraPanel.qml:66
214#: qml/Dash/PageHeaderExtraPanel.qml:66
215msgid "Clear All"
215msgid "Clear All"
216−msgstr ""
216+msgstr "Pulisci tutto"
217
217
218#: qml/Dash/Previews/PreviewActionCombo.qml:35
218#: qml/Dash/Previews/PreviewActionCombo.qml:35
219msgid "More..."
219msgid "More..."
@@ -433,50 +433,54 @@ msgstr "Richiama"
433#: qml/Stages/SideStage.qml:76
433#: qml/Stages/SideStage.qml:76
434msgid "Drag using 3 fingers any application from one window to the other"
434msgid "Drag using 3 fingers any application from one window to the other"
435msgstr ""
435msgstr ""
436+"Trascinare con 3 dita qualsiasi applicazione da una finestra all'altra"
436
437
437#: qml/Tutorial/TutorialBottom.qml:78
438#: qml/Tutorial/TutorialBottom.qml:78
438msgid "Swipe up to add a contact"
439msgid "Swipe up to add a contact"
439−msgstr ""
440+msgstr "Scorrere verso l'alto per aggiungere un contatto"
440
441
441#: qml/Tutorial/TutorialBottom.qml:80
442#: qml/Tutorial/TutorialBottom.qml:80
442msgid "Swipe up for favorite calculations"
443msgid "Swipe up for favorite calculations"
443−msgstr ""
444+msgstr "Scorrere verso l'alto per i calcoli preferiti"
444
445
445#: qml/Tutorial/TutorialBottom.qml:82
446#: qml/Tutorial/TutorialBottom.qml:82
446msgid "Swipe up for recent calls"
447msgid "Swipe up for recent calls"
447−msgstr ""
448+msgstr "Scorrere verso l'alto per le chiamate recenti"
448
449
449#: qml/Tutorial/TutorialBottom.qml:84
450#: qml/Tutorial/TutorialBottom.qml:84
450msgid "Swipe up to create a message"
451msgid "Swipe up to create a message"
451−msgstr ""
452+msgstr "Scorrere verso l'alto per creare un messaggio"
452
453
453#: qml/Tutorial/TutorialBottom.qml:85
454#: qml/Tutorial/TutorialBottom.qml:85
454msgid "Swipe up to manage the app"
455msgid "Swipe up to manage the app"
455−msgstr ""
456+msgstr "Scorrere verso l'alto per gestire l'applicazione"
456−
457−#: qml/Tutorial/TutorialLeft.qml:47
458−msgid "Swipe from the left edge to open the launcher"
459−msgstr ""
460
457
461#: qml/Tutorial/TutorialLeftLong.qml:47
458#: qml/Tutorial/TutorialLeftLong.qml:47
462msgid "Long swipe from the left edge to open the Today scope"
459msgid "Long swipe from the left edge to open the Today scope"
463−msgstr ""
460+msgstr "Scorrere lentamente dal bordo sinistro per aprire la scope Oggi"
464
461
465−#: qml/Tutorial/TutorialRight.qml:54
462+#: qml/Tutorial/TutorialLeft.qml:47
466−msgid "Hover your mouse on the right edge to view your open apps"
463+msgid "Swipe from the left edge to open the launcher"
467−msgstr ""
464+msgstr "Scorrere dal bordo sinistro per aprire il launcher"
468
465
469#: qml/Tutorial/TutorialRight.qml:55
466#: qml/Tutorial/TutorialRight.qml:55
467+msgid "Push your mouse against the right edge to view your open apps"
468+msgstr ""
469+
470+#: qml/Tutorial/TutorialRight.qml:56
470msgid "Short or long swipe from the right edge to view your open apps"
471msgid "Short or long swipe from the right edge to view your open apps"
471msgstr ""
472msgstr ""
473+"Scorrere lentamente o velocemente dal bordo destro per visualizzare le "
474+"applicazioni aperte"
472
475
473#: qml/Tutorial/TutorialTop.qml:53
476#: qml/Tutorial/TutorialTop.qml:53
474msgid "Swipe from the top right edge to open the notification bar"
477msgid "Swipe from the top right edge to open the notification bar"
475msgstr ""
478msgstr ""
479+"Scorrere dal bordo superiore destro per aprire la barra delle modifiche"
476
480
477#: qml/Tutorial/TutorialTop.qml:54
481#: qml/Tutorial/TutorialTop.qml:54
478msgid "Swipe from the top edge to open the notification bar"
482msgid "Swipe from the top edge to open the notification bar"
479−msgstr ""
483+msgstr "Scorrere dal bordo superiore per aprire la barra delle notifiche"
480
484
481#: qml/Wizard/Page.qml:54
485#: qml/Wizard/Page.qml:54
482msgctxt "Button: Go back one page in the Wizard"
486msgctxt "Button: Go back one page in the Wizard"
@@ -485,7 +489,7 @@ msgstr "Indietro"
485
489
486#: qml/Wizard/Pages/10-welcome.qml:27
490#: qml/Wizard/Pages/10-welcome.qml:27
487msgid "Language"
491msgid "Language"
488−msgstr ""
492+msgstr "Lingua"
489
493
490#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
494#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
491#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
495#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
@@ -494,7 +498,7 @@ msgstr ""
494#: qml/Wizard/Pages/passcode-desktop.qml:124
498#: qml/Wizard/Pages/passcode-desktop.qml:124
495#: qml/Wizard/Pages/password-set.qml:141
499#: qml/Wizard/Pages/password-set.qml:141
496msgid "Next"
500msgid "Next"
497−msgstr ""
501+msgstr "Avanti"
498
502
499#: qml/Wizard/Pages/30-wifi.qml:29
503#: qml/Wizard/Pages/30-wifi.qml:29
500msgid "Connect to Wi‑Fi"
504msgid "Connect to Wi‑Fi"
@@ -502,15 +506,15 @@ msgstr "Connetti al Wi-Fi"
502
506
503#: qml/Wizard/Pages/30-wifi.qml:130
507#: qml/Wizard/Pages/30-wifi.qml:130
504msgid "Connected"
508msgid "Connected"
505−msgstr ""
509+msgstr "Connessi"
506
510
507#: qml/Wizard/Pages/30-wifi.qml:163
511#: qml/Wizard/Pages/30-wifi.qml:163
508msgid "Available Wi-Fi networks"
512msgid "Available Wi-Fi networks"
509−msgstr ""
513+msgstr "Reti Wi-Fi disponibili"
510
514
511#: qml/Wizard/Pages/30-wifi.qml:164
515#: qml/Wizard/Pages/30-wifi.qml:164
512msgid "No available Wi-Fi networks"
516msgid "No available Wi-Fi networks"
513−msgstr ""
517+msgstr "Nessuna rete Wi-Fi disponibile"
514
518
515#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
519#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
516#: qml/Wizard/Pages/sim.qml:101
520#: qml/Wizard/Pages/sim.qml:101
@@ -519,98 +523,102 @@ msgstr "Salta"
519
523
520#: qml/Wizard/Pages/40-location.qml:27
524#: qml/Wizard/Pages/40-location.qml:27
521msgid "Location Services"
525msgid "Location Services"
522−msgstr ""
526+msgstr "Servizi di posizionamento"
523
527
524#: qml/Wizard/Pages/40-location.qml:83
528#: qml/Wizard/Pages/40-location.qml:83
525msgid ""
529msgid ""
526"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
530"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
527"(recommended)"
531"(recommended)"
528msgstr ""
532msgstr ""
533+"Usa in maniera anonima GPS, punti di accesso Wi-Fi e rete cellulare per "
534+"determinare la posizione (suggerito)"
529
535
530#: qml/Wizard/Pages/40-location.qml:105
536#: qml/Wizard/Pages/40-location.qml:105
531#, qt-format
537#, qt-format
532msgid "By selecting this option you agree to the Nokia HERE %1."
538msgid "By selecting this option you agree to the Nokia HERE %1."
533−msgstr ""
539+msgstr "Selezionando questa opzione si accettano i %1 di Nokia HERE."
534
540
535#: qml/Wizard/Pages/40-location.qml:106
541#: qml/Wizard/Pages/40-location.qml:106
536msgctxt "part of: Nokia HERE terms and conditions"
542msgctxt "part of: Nokia HERE terms and conditions"
537msgid "terms and conditions"
543msgid "terms and conditions"
538−msgstr ""
544+msgstr "termini e condizioni"
539
545
540#: qml/Wizard/Pages/40-location.qml:160
546#: qml/Wizard/Pages/40-location.qml:160
541msgid "GPS only"
547msgid "GPS only"
542−msgstr ""
548+msgstr "Solo GPS"
543
549
544#: qml/Wizard/Pages/40-location.qml:214
550#: qml/Wizard/Pages/40-location.qml:214
545msgid "Don't use my location"
551msgid "Don't use my location"
546−msgstr ""
552+msgstr "Non utilizzare la posizione"
547
553
548#: qml/Wizard/Pages/40-location.qml:260
554#: qml/Wizard/Pages/40-location.qml:260
549msgid "You can change it later in System Settings."
555msgid "You can change it later in System Settings."
550−msgstr ""
556+msgstr "È possibile effettuare modifiche in seguito dalle Impostazioni."
551
557
552#: qml/Wizard/Pages/50-timezone.qml:29
558#: qml/Wizard/Pages/50-timezone.qml:29
553msgid "Time Zone"
559msgid "Time Zone"
554−msgstr ""
560+msgstr "Fuso orario"
555
561
556#: qml/Wizard/Pages/50-timezone.qml:178
562#: qml/Wizard/Pages/50-timezone.qml:178
557msgid "Enter your city"
563msgid "Enter your city"
558−msgstr ""
564+msgstr "Inserisci la propria città"
559
565
560#: qml/Wizard/Pages/60-account.qml:24
566#: qml/Wizard/Pages/60-account.qml:24
561msgid "Personalize Your Device"
567msgid "Personalize Your Device"
562−msgstr ""
568+msgstr "Personalizzare il dispositivo"
563
569
564#: qml/Wizard/Pages/60-account.qml:48
570#: qml/Wizard/Pages/60-account.qml:48
565msgid "Preferred Name"
571msgid "Preferred Name"
566−msgstr ""
572+msgstr "Nome preferito"
567
573
568#: qml/Wizard/Pages/70-passwd-type.qml:39
574#: qml/Wizard/Pages/70-passwd-type.qml:39
569msgid "Lock Screen"
575msgid "Lock Screen"
570−msgstr ""
576+msgstr "Blocco schermo"
571
577
572#: qml/Wizard/Pages/70-passwd-type.qml:101
578#: qml/Wizard/Pages/70-passwd-type.qml:101
573msgctxt "Label: Type of security method"
579msgctxt "Label: Type of security method"
574msgid "Create new password"
580msgid "Create new password"
575−msgstr ""
581+msgstr "Crea nuova password"
576
582
577#: qml/Wizard/Pages/70-passwd-type.qml:103
583#: qml/Wizard/Pages/70-passwd-type.qml:103
578msgctxt "Label: Type of security method"
584msgctxt "Label: Type of security method"
579msgid "Create passcode (numbers only)"
585msgid "Create passcode (numbers only)"
580−msgstr ""
586+msgstr "Crea codice (numerico)"
581
587
582#: qml/Wizard/Pages/70-passwd-type.qml:105
588#: qml/Wizard/Pages/70-passwd-type.qml:105
583msgctxt "Label: Type of security method"
589msgctxt "Label: Type of security method"
584msgid "No lock code"
590msgid "No lock code"
585−msgstr ""
591+msgstr "Nessun codice di blocco"
586
592
587#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
593#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
588msgid "Privacy Policy"
594msgid "Privacy Policy"
589−msgstr ""
595+msgstr "Informativa sulla privacy"
590
596
591#: qml/Wizard/Pages/75-report-check.qml:26
597#: qml/Wizard/Pages/75-report-check.qml:26
592msgid "Help Us Improve"
598msgid "Help Us Improve"
593−msgstr ""
599+msgstr "Aiutaci a migliorare"
594
600
595#: qml/Wizard/Pages/75-report-check.qml:59
601#: qml/Wizard/Pages/75-report-check.qml:59
596msgid "Improve system performance by sending us crashes and error reports."
602msgid "Improve system performance by sending us crashes and error reports."
597msgstr ""
603msgstr ""
604+"Migliora l'efficienza del sistema inviandoci notificazioni di errori e "
605+"blocchi critici."
598
606
599#: qml/Wizard/Pages/75-report-check.qml:60
607#: qml/Wizard/Pages/75-report-check.qml:60
600msgid "Privacy policy"
608msgid "Privacy policy"
601−msgstr ""
609+msgstr "Informativa sulla privacy"
602
610
603#: qml/Wizard/Pages/80-finished.qml:89
611#: qml/Wizard/Pages/80-finished.qml:89
604msgid "Welcome to Ubuntu"
612msgid "Welcome to Ubuntu"
605−msgstr ""
613+msgstr "Benvenuti in Ubuntu"
606
614
607#: qml/Wizard/Pages/80-finished.qml:104
615#: qml/Wizard/Pages/80-finished.qml:104
608msgid "You are ready to use your device now"
616msgid "You are ready to use your device now"
609−msgstr ""
617+msgstr "Il dispositivo è pronto per essere utilizzato"
610
618
611#: qml/Wizard/Pages/80-finished.qml:124
619#: qml/Wizard/Pages/80-finished.qml:124
612msgid "Get Started"
620msgid "Get Started"
613−msgstr ""
621+msgstr "Inizia"
614
622
615#: qml/Wizard/Pages/here-terms.qml:25
623#: qml/Wizard/Pages/here-terms.qml:25
616msgid "Terms & Conditions"
624msgid "Terms & Conditions"
@@ -618,7 +626,7 @@ msgstr "Termini e condizioni"
618
626
619#: qml/Wizard/Pages/here-terms.qml:69
627#: qml/Wizard/Pages/here-terms.qml:69
620msgid "Your device uses positioning technologies provided by HERE."
628msgid "Your device uses positioning technologies provided by HERE."
621−msgstr ""
629+msgstr "Il dispositivo usa tecnologie di posizionamento fornite da HERE."
622
630
623#: qml/Wizard/Pages/here-terms.qml:81
631#: qml/Wizard/Pages/here-terms.qml:81
624msgid ""
632msgid ""
@@ -626,21 +634,26 @@ msgid ""
626"collects information about nearby cell towers and Wi-Fi hotspots around your "
634"collects information about nearby cell towers and Wi-Fi hotspots around your "
627"current location whenever your position is being found."
635"current location whenever your position is being found."
628msgstr ""
636msgstr ""
637+"Per fornire servizi di posizionamento e migliorare la qualità, ogni volta "
638+"che la posizione viene rilevata HERE raccoglie informazioni riguardo ai "
639+"punti di accesso Wi-Fi e ai ripetitori cellulari nelle vicinanze."
629
640
630#: qml/Wizard/Pages/here-terms.qml:93
641#: qml/Wizard/Pages/here-terms.qml:93
631msgid ""
642msgid ""
632"The information collected is used to analyze the service and to improve the "
643"The information collected is used to analyze the service and to improve the "
633"use of service, but not to identify you personally."
644"use of service, but not to identify you personally."
634msgstr ""
645msgstr ""
646+"Le informazioni raccolte vengono utilizzate per analizzare il servizio e "
647+"migliorarne l'uso, non per identificare l'utente."
635
648
636#: qml/Wizard/Pages/here-terms.qml:106
649#: qml/Wizard/Pages/here-terms.qml:106
637#, qt-format
650#, qt-format
638msgid "By continuing, you agree to the HERE platform %1 and %2."
651msgid "By continuing, you agree to the HERE platform %1 and %2."
639−msgstr ""
652+msgstr "Continuando, si accettano i %1 e la %2 della piattaforma HERE."
640
653
641#: qml/Wizard/Pages/here-terms.qml:107
654#: qml/Wizard/Pages/here-terms.qml:107
642msgid "Service Terms"
655msgid "Service Terms"
643−msgstr ""
656+msgstr "termini di servizio"
644
657
645#: qml/Wizard/Pages/passcode-confirm.qml:43
658#: qml/Wizard/Pages/passcode-confirm.qml:43
646#: qml/Wizard/Pages/passcode-desktop.qml:80
659#: qml/Wizard/Pages/passcode-desktop.qml:80
@@ -649,69 +662,69 @@ msgstr "Conferma codice"
649
662
650#: qml/Wizard/Pages/passcode-confirm.qml:45
663#: qml/Wizard/Pages/passcode-confirm.qml:45
651msgid "Incorrect passcode."
664msgid "Incorrect passcode."
652−msgstr ""
665+msgstr "Codice errato."
653
666
654#: qml/Wizard/Pages/passcode-confirm.qml:45
667#: qml/Wizard/Pages/passcode-confirm.qml:45
655msgctxt "Enter the passcode again"
668msgctxt "Enter the passcode again"
656msgid "Please re-enter."
669msgid "Please re-enter."
657−msgstr ""
670+msgstr "Ripetere."
658
671
659#: qml/Wizard/Pages/passcode-desktop.qml:30
672#: qml/Wizard/Pages/passcode-desktop.qml:30
660msgid "Lock Screen Passcode"
673msgid "Lock Screen Passcode"
661−msgstr ""
674+msgstr "Codice blocco schermo"
662
675
663#: qml/Wizard/Pages/passcode-desktop.qml:56
676#: qml/Wizard/Pages/passcode-desktop.qml:56
664msgid "Enter 4 numbers to setup your passcode"
677msgid "Enter 4 numbers to setup your passcode"
665−msgstr ""
678+msgstr "Inserire 4 numeri per impostare il codice"
666
679
667#: qml/Wizard/Pages/passcode-desktop.qml:65
680#: qml/Wizard/Pages/passcode-desktop.qml:65
668#: qml/Wizard/Pages/passcode-set.qml:54
681#: qml/Wizard/Pages/passcode-set.qml:54
669msgid "Choose passcode"
682msgid "Choose passcode"
670−msgstr ""
683+msgstr "Scegli codice"
671
684
672#: qml/Wizard/Pages/passcode-desktop.qml:105
685#: qml/Wizard/Pages/passcode-desktop.qml:105
673msgid "Passcode too short"
686msgid "Passcode too short"
674−msgstr ""
687+msgstr "Codice troppo corto"
675
688
676#: qml/Wizard/Pages/passcode-desktop.qml:107
689#: qml/Wizard/Pages/passcode-desktop.qml:107
677msgid "Passcodes match"
690msgid "Passcodes match"
678−msgstr ""
691+msgstr "I codici corrispondono"
679
692
680#: qml/Wizard/Pages/passcode-desktop.qml:109
693#: qml/Wizard/Pages/passcode-desktop.qml:109
681msgid "Passcodes do not match"
694msgid "Passcodes do not match"
682−msgstr ""
695+msgstr "I codici non corrispondono"
683
696
684#: qml/Wizard/Pages/passcode-set.qml:62
697#: qml/Wizard/Pages/passcode-set.qml:62
685msgid "Passcode must be 4 characters long"
698msgid "Passcode must be 4 characters long"
686−msgstr ""
699+msgstr "Il codice deve essere di 4 caratteri"
687
700
688#: qml/Wizard/Pages/password-set.qml:30
701#: qml/Wizard/Pages/password-set.qml:30
689msgid "Lock Screen Password"
702msgid "Lock Screen Password"
690−msgstr ""
703+msgstr "Password blocco schermo"
691
704
692#: qml/Wizard/Pages/password-set.qml:61
705#: qml/Wizard/Pages/password-set.qml:61
693msgid "Enter at least 8 characters"
706msgid "Enter at least 8 characters"
694−msgstr ""
707+msgstr "Inserire almeno 8 caratteri"
695
708
696#: qml/Wizard/Pages/password-set.qml:73
709#: qml/Wizard/Pages/password-set.qml:73
697msgid "Choose password"
710msgid "Choose password"
698−msgstr ""
711+msgstr "Scegli una password"
699
712
700#: qml/Wizard/Pages/password-set.qml:103
713#: qml/Wizard/Pages/password-set.qml:103
701msgid "Confirm password"
714msgid "Confirm password"
702−msgstr ""
715+msgstr "Conferma password"
703
716
704#: qml/Wizard/Pages/sim.qml:27
717#: qml/Wizard/Pages/sim.qml:27
705msgid "No SIM card installed"
718msgid "No SIM card installed"
706−msgstr ""
719+msgstr "Nessuna scheda SIM installata"
707
720
708#: qml/Wizard/Pages/sim.qml:54
721#: qml/Wizard/Pages/sim.qml:54
709msgid "SIM card added"
722msgid "SIM card added"
710−msgstr ""
723+msgstr "Scheda SIM aggiunta"
711
724
712#: qml/Wizard/Pages/sim.qml:55
725#: qml/Wizard/Pages/sim.qml:55
713msgid "You must restart the device to access the mobile network."
726msgid "You must restart the device to access the mobile network."
714−msgstr ""
727+msgstr "È necessario riavviare il dispositivo per poter accedere alla rete."
715
728
716#: qml/Wizard/Pages/sim.qml:59
729#: qml/Wizard/Pages/sim.qml:59
717msgid "Restart"
730msgid "Restart"
@@ -719,35 +732,35 @@ msgstr "Riavvia"
719
732
720#: qml/Wizard/Pages/sim.qml:78
733#: qml/Wizard/Pages/sim.qml:78
721msgid "You won’t be able to make calls or use text messaging without a SIM."
734msgid "You won’t be able to make calls or use text messaging without a SIM."
722−msgstr ""
735+msgstr "Senza una SIM non è possibile chiamare o inviare messaggi SMS."
723
736
724#: qml/Wizard/Pages/sim.qml:90
737#: qml/Wizard/Pages/sim.qml:90
725msgid "To proceed with no SIM tap Skip."
738msgid "To proceed with no SIM tap Skip."
726−msgstr ""
739+msgstr "Per continuare senza SIM, premere Salta."
727
740
728#: qml/Wizard/PasswordMeter.qml:87
741#: qml/Wizard/PasswordMeter.qml:87
729msgid "Passwords match"
742msgid "Passwords match"
730−msgstr ""
743+msgstr "Le password corrispondono"
731
744
732#: qml/Wizard/PasswordMeter.qml:89
745#: qml/Wizard/PasswordMeter.qml:89
733msgid "Passwords do not match"
746msgid "Passwords do not match"
734−msgstr ""
747+msgstr "Le password non corrispondono"
735
748
736#: qml/Wizard/PasswordMeter.qml:93
749#: qml/Wizard/PasswordMeter.qml:93
737msgid "Strong password"
750msgid "Strong password"
738−msgstr ""
751+msgstr "Password robusta"
739
752
740#: qml/Wizard/PasswordMeter.qml:95
753#: qml/Wizard/PasswordMeter.qml:95
741msgid "Fair password"
754msgid "Fair password"
742−msgstr ""
755+msgstr "Password discreta"
743
756
744#: qml/Wizard/PasswordMeter.qml:97
757#: qml/Wizard/PasswordMeter.qml:97
745msgid "Weak password"
758msgid "Weak password"
746−msgstr ""
759+msgstr "Password fragile"
747
760
748#: qml/Wizard/PasswordMeter.qml:99
761#: qml/Wizard/PasswordMeter.qml:99
749msgid "Very weak password"
762msgid "Very weak password"
750−msgstr ""
763+msgstr "Password molto fragile"
751
764
752#~ msgid "Confirm"
765#~ msgid "Confirm"
753#~ msgstr "Conferma"
766#~ msgstr "Conferma"
@@ -1070,11 +1083,6 @@ msgstr ""
1070#~ msgid "Call back"
1083#~ msgid "Call back"
1071#~ msgstr "Richiama"
1084#~ msgstr "Richiama"
1072
1085
1073−#~ msgid "Your device is now ready to use."
1086+#~ msgid "Hover your mouse on the right edge to view your open apps"
1074−#~ msgstr "Il dispositivo è ora pronto all'uso."
1087+#~ msgstr ""
1075−
1088+#~ "Posizionare il mouse sul bordo destro per vedere le applicazioni aperte"
1076−#~ msgid "Please select how you’d like to unlock your device."
1077−#~ msgstr "Selezionare come sbloccare il proprio dispositivo."
1078−
1079−#~ msgid "Welcome to your Ubuntu device."
1080−#~ msgstr "Benvenuti sul vostro dispositivo Ubuntu."
po/ja.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-10-05 10:05+0000\n"
11"PO-Revision-Date: 2015-10-05 10:05+0000\n"
12"Last-Translator: Kentaro Kazuhama <Unknown>\n"
12"Last-Translator: Kentaro Kazuhama <Unknown>\n"
13"Language-Team: Japanese <ja@li.org>\n"
13"Language-Team: Japanese <ja@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -439,19 +439,19 @@ msgstr ""
439msgid "Swipe up to manage the app"
439msgid "Swipe up to manage the app"
440msgstr ""
440msgstr ""
441
441
442−#: qml/Tutorial/TutorialLeft.qml:47
443−msgid "Swipe from the left edge to open the launcher"
444−msgstr ""
445−
446#: qml/Tutorial/TutorialLeftLong.qml:47
442#: qml/Tutorial/TutorialLeftLong.qml:47
447msgid "Long swipe from the left edge to open the Today scope"
443msgid "Long swipe from the left edge to open the Today scope"
448msgstr ""
444msgstr ""
449
445
450−#: qml/Tutorial/TutorialRight.qml:54
446+#: qml/Tutorial/TutorialLeft.qml:47
451−msgid "Hover your mouse on the right edge to view your open apps"
447+msgid "Swipe from the left edge to open the launcher"
452msgstr ""
448msgstr ""
453
449
454#: qml/Tutorial/TutorialRight.qml:55
450#: qml/Tutorial/TutorialRight.qml:55
451+msgid "Push your mouse against the right edge to view your open apps"
452+msgstr ""
453+
454+#: qml/Tutorial/TutorialRight.qml:56
455msgid "Short or long swipe from the right edge to view your open apps"
455msgid "Short or long swipe from the right edge to view your open apps"
456msgstr ""
456msgstr ""
457
457
po/km.po+31−34
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2014-08-20 02:48+0000\n"
11"PO-Revision-Date: 2014-08-20 02:48+0000\n"
12"Last-Translator: Sophea Sok <sksophea@gmail.com>\n"
12"Last-Translator: Sophea Sok <sksophea@gmail.com>\n"
13"Language-Team: Khmer <km@li.org>\n"
13"Language-Team: Khmer <km@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -29,7 +29,7 @@ msgstr "ភ្ជាប់​ផ្លូវកាត់"
29
29
30#: plugins/Unity/Launcher/launcheritem.cpp:53
30#: plugins/Unity/Launcher/launcheritem.cpp:53
31msgid "Quit"
31msgid "Quit"
32−msgstr ""
32+msgstr "ចាកចេញ"
33
33
34#: plugins/Unity/Launcher/launcheritem.cpp:107
34#: plugins/Unity/Launcher/launcheritem.cpp:107
35msgid "Unpin shortcut"
35msgid "Unpin shortcut"
@@ -155,7 +155,7 @@ msgstr ""
155
155
156#: qml/Components/ModeSwitchWarningDialog.qml:88
156#: qml/Components/ModeSwitchWarningDialog.qml:88
157msgid "Close all"
157msgid "Close all"
158−msgstr ""
158+msgstr "បិទ​ទាំង​អស់"
159
159
160#: qml/Dash/DashPageHeader.qml:337
160#: qml/Dash/DashPageHeader.qml:337
161msgctxt "Button: Open the Ubuntu Store"
161msgctxt "Button: Open the Ubuntu Store"
@@ -186,7 +186,7 @@ msgstr ""
186
186
187#: qml/Dash/FiltersPopover.qml:69
187#: qml/Dash/FiltersPopover.qml:69
188msgid "Reset"
188msgid "Reset"
189−msgstr ""
189+msgstr "កំណត់​ឡើង​វិញ​"
190
190
191#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
191#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
192msgid "See less"
192msgid "See less"
@@ -207,7 +207,7 @@ msgstr ""
207
207
208#: qml/Dash/PageHeaderExtraPanel.qml:66
208#: qml/Dash/PageHeaderExtraPanel.qml:66
209msgid "Clear All"
209msgid "Clear All"
210−msgstr ""
210+msgstr "សម្អាត​ទាំងអស់"
211
211
212#: qml/Dash/Previews/PreviewActionCombo.qml:35
212#: qml/Dash/Previews/PreviewActionCombo.qml:35
213msgid "More..."
213msgid "More..."
@@ -357,32 +357,29 @@ msgstr ""
357#, qt-format
357#, qt-format
358msgid "%1 hour"
358msgid "%1 hour"
359msgid_plural "%1 hours"
359msgid_plural "%1 hours"
360−msgstr[0] ""
360+msgstr[0] "%1 ម៉ោង"
361−msgstr[1] ""
362
361
363#: qml/Panel/Indicators/MenuItemFactory.qml:894
362#: qml/Panel/Indicators/MenuItemFactory.qml:894
364#, qt-format
363#, qt-format
365msgid "%1 minute"
364msgid "%1 minute"
366msgid_plural "%1 minutes"
365msgid_plural "%1 minutes"
367−msgstr[0] ""
366+msgstr[0] "%1 នាទី"
368−msgstr[1] ""
369
367
370#: qml/Panel/Indicators/MenuItemFactory.qml:899
368#: qml/Panel/Indicators/MenuItemFactory.qml:899
371#, qt-format
369#, qt-format
372msgid "%1 second"
370msgid "%1 second"
373msgid_plural "%1 seconds"
371msgid_plural "%1 seconds"
374−msgstr[0] ""
372+msgstr[0] "%1 វិនាទី"
375−msgstr[1] ""
376
373
377#: qml/Panel/Indicators/MenuItemFactory.qml:902
374#: qml/Panel/Indicators/MenuItemFactory.qml:902
378msgid "0 seconds"
375msgid "0 seconds"
379−msgstr ""
376+msgstr "០ វិនាទី"
380
377
381#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
378#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
382#: qml/Panel/Indicators/MenuItemFactory.qml:904
379#: qml/Panel/Indicators/MenuItemFactory.qml:904
383#, qt-format
380#, qt-format
384msgid "%1 remaining"
381msgid "%1 remaining"
385−msgstr ""
382+msgstr "នៅ​សល់ %1"
386
383
387#: qml/Panel/Indicators/MenuItemFactory.qml:910
384#: qml/Panel/Indicators/MenuItemFactory.qml:910
388msgid "In queue…"
385msgid "In queue…"
@@ -412,7 +409,7 @@ msgstr "បាន​បរាជ័យ ប៉ះ​ ដើម្បី​ព្
412#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
409#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
413msgctxt "Button: Send a reply message"
410msgctxt "Button: Send a reply message"
414msgid "Send"
411msgid "Send"
415−msgstr ""
412+msgstr "ផ្ញើ"
416
413
417#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
414#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
418msgctxt "Label: Hint in message indicator line edit"
415msgctxt "Label: Hint in message indicator line edit"
@@ -422,7 +419,7 @@ msgstr "ឆ្លើយតប"
422#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
419#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
423msgctxt "Button: Call back on phone"
420msgctxt "Button: Call back on phone"
424msgid "Call back"
421msgid "Call back"
425−msgstr ""
422+msgstr "ហៅ​មកវិញ"
426
423
427#: qml/Stages/SideStage.qml:76
424#: qml/Stages/SideStage.qml:76
428msgid "Drag using 3 fingers any application from one window to the other"
425msgid "Drag using 3 fingers any application from one window to the other"
@@ -448,19 +445,19 @@ msgstr ""
448msgid "Swipe up to manage the app"
445msgid "Swipe up to manage the app"
449msgstr ""
446msgstr ""
450
447
451−#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Swipe from the left edge to open the launcher"
453−msgstr ""
454−
455#: qml/Tutorial/TutorialLeftLong.qml:47
448#: qml/Tutorial/TutorialLeftLong.qml:47
456msgid "Long swipe from the left edge to open the Today scope"
449msgid "Long swipe from the left edge to open the Today scope"
457msgstr ""
450msgstr ""
458
451
459−#: qml/Tutorial/TutorialRight.qml:54
452+#: qml/Tutorial/TutorialLeft.qml:47
460−msgid "Hover your mouse on the right edge to view your open apps"
453+msgid "Swipe from the left edge to open the launcher"
461msgstr ""
454msgstr ""
462
455
463#: qml/Tutorial/TutorialRight.qml:55
456#: qml/Tutorial/TutorialRight.qml:55
457+msgid "Push your mouse against the right edge to view your open apps"
458+msgstr ""
459+
460+#: qml/Tutorial/TutorialRight.qml:56
464msgid "Short or long swipe from the right edge to view your open apps"
461msgid "Short or long swipe from the right edge to view your open apps"
465msgstr ""
462msgstr ""
466
463
@@ -479,7 +476,7 @@ msgstr "ថយក្រោយ"
479
476
480#: qml/Wizard/Pages/10-welcome.qml:27
477#: qml/Wizard/Pages/10-welcome.qml:27
481msgid "Language"
478msgid "Language"
482−msgstr ""
479+msgstr "ភាសា"
483
480
484#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
481#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
485#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
482#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
@@ -488,7 +485,7 @@ msgstr ""
488#: qml/Wizard/Pages/passcode-desktop.qml:124
485#: qml/Wizard/Pages/passcode-desktop.qml:124
489#: qml/Wizard/Pages/password-set.qml:141
486#: qml/Wizard/Pages/password-set.qml:141
490msgid "Next"
487msgid "Next"
491−msgstr ""
488+msgstr "បន្ទាប់"
492
489
493#: qml/Wizard/Pages/30-wifi.qml:29
490#: qml/Wizard/Pages/30-wifi.qml:29
494msgid "Connect to Wi‑Fi"
491msgid "Connect to Wi‑Fi"
@@ -496,7 +493,7 @@ msgstr ""
496
493
497#: qml/Wizard/Pages/30-wifi.qml:130
494#: qml/Wizard/Pages/30-wifi.qml:130
498msgid "Connected"
495msgid "Connected"
499−msgstr ""
496+msgstr "បាន​តភ្ជាប់"
500
497
501#: qml/Wizard/Pages/30-wifi.qml:163
498#: qml/Wizard/Pages/30-wifi.qml:163
502msgid "Available Wi-Fi networks"
499msgid "Available Wi-Fi networks"
@@ -545,7 +542,7 @@ msgstr ""
545
542
546#: qml/Wizard/Pages/50-timezone.qml:29
543#: qml/Wizard/Pages/50-timezone.qml:29
547msgid "Time Zone"
544msgid "Time Zone"
548−msgstr ""
545+msgstr "តំបន់​ពេល​វេលា"
549
546
550#: qml/Wizard/Pages/50-timezone.qml:178
547#: qml/Wizard/Pages/50-timezone.qml:178
551msgid "Enter your city"
548msgid "Enter your city"
@@ -561,7 +558,7 @@ msgstr ""
561
558
562#: qml/Wizard/Pages/70-passwd-type.qml:39
559#: qml/Wizard/Pages/70-passwd-type.qml:39
563msgid "Lock Screen"
560msgid "Lock Screen"
564−msgstr ""
561+msgstr "​អេក្រង់ចាក់សោ"
565
562
566#: qml/Wizard/Pages/70-passwd-type.qml:101
563#: qml/Wizard/Pages/70-passwd-type.qml:101
567msgctxt "Label: Type of security method"
564msgctxt "Label: Type of security method"
@@ -580,7 +577,7 @@ msgstr ""
580
577
581#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
578#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
582msgid "Privacy Policy"
579msgid "Privacy Policy"
583−msgstr ""
580+msgstr "គោលនយោបាយ​ភាព​ឯកជន"
584
581
585#: qml/Wizard/Pages/75-report-check.qml:26
582#: qml/Wizard/Pages/75-report-check.qml:26
586msgid "Help Us Improve"
583msgid "Help Us Improve"
@@ -592,11 +589,11 @@ msgstr ""
592
589
593#: qml/Wizard/Pages/75-report-check.qml:60
590#: qml/Wizard/Pages/75-report-check.qml:60
594msgid "Privacy policy"
591msgid "Privacy policy"
595−msgstr ""
592+msgstr "គោលនយោបាយ​ភាព​ឯកជន"
596
593
597#: qml/Wizard/Pages/80-finished.qml:89
594#: qml/Wizard/Pages/80-finished.qml:89
598msgid "Welcome to Ubuntu"
595msgid "Welcome to Ubuntu"
599−msgstr ""
596+msgstr "សូម​ស្វាគមន៍​ការ​មកកាន់​ Ubuntu"
600
597
601#: qml/Wizard/Pages/80-finished.qml:104
598#: qml/Wizard/Pages/80-finished.qml:104
602msgid "You are ready to use your device now"
599msgid "You are ready to use your device now"
@@ -693,7 +690,7 @@ msgstr ""
693
690
694#: qml/Wizard/Pages/password-set.qml:103
691#: qml/Wizard/Pages/password-set.qml:103
695msgid "Confirm password"
692msgid "Confirm password"
696−msgstr ""
693+msgstr "បញ្ជាក់​ពាក្យ​សម្ងាត់"
697
694
698#: qml/Wizard/Pages/sim.qml:27
695#: qml/Wizard/Pages/sim.qml:27
699msgid "No SIM card installed"
696msgid "No SIM card installed"
@@ -721,11 +718,11 @@ msgstr ""
721
718
722#: qml/Wizard/PasswordMeter.qml:87
719#: qml/Wizard/PasswordMeter.qml:87
723msgid "Passwords match"
720msgid "Passwords match"
724−msgstr ""
721+msgstr "ពាក្យ​សម្ងាត់​ត្រូវ​គ្នា​ហើយ"
725
722
726#: qml/Wizard/PasswordMeter.qml:89
723#: qml/Wizard/PasswordMeter.qml:89
727msgid "Passwords do not match"
724msgid "Passwords do not match"
728−msgstr ""
725+msgstr "ពាក្យ​សម្ងាត់​មិន​ដូច​គ្នា​ទេ"
729
726
730#: qml/Wizard/PasswordMeter.qml:93
727#: qml/Wizard/PasswordMeter.qml:93
731msgid "Strong password"
728msgid "Strong password"
po/kn.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2013-06-27 05:43+0000\n"
11"PO-Revision-Date: 2013-06-27 05:43+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Kannada <kn@li.org>\n"
13"Language-Team: Kannada <kn@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/ko.po+9−18
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2014-08-19 13:02+0000\n"
11"PO-Revision-Date: 2014-08-19 13:02+0000\n"
12"Last-Translator: MinSik CHO <Unknown>\n"
12"Last-Translator: MinSik CHO <Unknown>\n"
13"Language-Team: Korean <ko@li.org>\n"
13"Language-Team: Korean <ko@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -436,19 +436,19 @@ msgstr ""
436msgid "Swipe up to manage the app"
436msgid "Swipe up to manage the app"
437msgstr ""
437msgstr ""
438
438
439−#: qml/Tutorial/TutorialLeft.qml:47
440−msgid "Swipe from the left edge to open the launcher"
441−msgstr ""
442−
443#: qml/Tutorial/TutorialLeftLong.qml:47
439#: qml/Tutorial/TutorialLeftLong.qml:47
444msgid "Long swipe from the left edge to open the Today scope"
440msgid "Long swipe from the left edge to open the Today scope"
445msgstr ""
441msgstr ""
446
442
447−#: qml/Tutorial/TutorialRight.qml:54
443+#: qml/Tutorial/TutorialLeft.qml:47
448−msgid "Hover your mouse on the right edge to view your open apps"
444+msgid "Swipe from the left edge to open the launcher"
449msgstr ""
445msgstr ""
450
446
451#: qml/Tutorial/TutorialRight.qml:55
447#: qml/Tutorial/TutorialRight.qml:55
448+msgid "Push your mouse against the right edge to view your open apps"
449+msgstr ""
450+
451+#: qml/Tutorial/TutorialRight.qml:56
452msgid "Short or long swipe from the right edge to view your open apps"
452msgid "Short or long swipe from the right edge to view your open apps"
453msgstr ""
453msgstr ""
454
454
@@ -1035,12 +1035,3 @@ msgstr ""
1035
1035
1036#~ msgid "Call back"
1036#~ msgid "Call back"
1037#~ msgstr "부재중 번호로 전화"
1037#~ msgstr "부재중 번호로 전화"
1038−
1039−#~ msgid "Welcome to your Ubuntu device."
1040−#~ msgstr "우분투를 사용해주셔서 감사합니다."
1041−
1042−#~ msgid "Please select how you’d like to unlock your device."
1043−#~ msgstr "장치의 잠금 해제 방법을 선택해주십시오."
1044−
1045−#~ msgid "Your device is now ready to use."
1046−#~ msgstr "이제 장치를 사용할 수 있습니다."
po/ku.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2014-09-10 13:14+0000\n"
11"PO-Revision-Date: 2014-09-10 13:14+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Kurdish <ku@li.org>\n"
13"Language-Team: Kurdish <ku@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -446,19 +446,19 @@ msgstr ""
446msgid "Swipe up to manage the app"
446msgid "Swipe up to manage the app"
447msgstr ""
447msgstr ""
448
448
449−#: qml/Tutorial/TutorialLeft.qml:47
450−msgid "Swipe from the left edge to open the launcher"
451−msgstr ""
452−
453#: qml/Tutorial/TutorialLeftLong.qml:47
449#: qml/Tutorial/TutorialLeftLong.qml:47
454msgid "Long swipe from the left edge to open the Today scope"
450msgid "Long swipe from the left edge to open the Today scope"
455msgstr ""
451msgstr ""
456
452
457−#: qml/Tutorial/TutorialRight.qml:54
453+#: qml/Tutorial/TutorialLeft.qml:47
458−msgid "Hover your mouse on the right edge to view your open apps"
454+msgid "Swipe from the left edge to open the launcher"
459msgstr ""
455msgstr ""
460
456
461#: qml/Tutorial/TutorialRight.qml:55
457#: qml/Tutorial/TutorialRight.qml:55
458+msgid "Push your mouse against the right edge to view your open apps"
459+msgstr ""
460+
461+#: qml/Tutorial/TutorialRight.qml:56
462msgid "Short or long swipe from the right edge to view your open apps"
462msgid "Short or long swipe from the right edge to view your open apps"
463msgstr ""
463msgstr ""
464
464
po/ky.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2013-06-27 06:17+0000\n"
11"PO-Revision-Date: 2013-06-27 06:17+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Kirghiz <ky@li.org>\n"
13"Language-Team: Kirghiz <ky@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/lo.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2013-10-02 10:00+0000\n"
11"PO-Revision-Date: 2013-10-02 10:00+0000\n"
12"Last-Translator: Anousak <anousak@gmail.com>\n"
12"Last-Translator: Anousak <anousak@gmail.com>\n"
13"Language-Team: Lao <lo@li.org>\n"
13"Language-Team: Lao <lo@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/lt.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2014-05-19 17:15+0000\n"
11"PO-Revision-Date: 2014-05-19 17:15+0000\n"
12"Last-Translator: Mantas Kriaučiūnas <mantas@akl.lt>\n"
12"Last-Translator: Mantas Kriaučiūnas <mantas@akl.lt>\n"
13"Language-Team: Lithuanian <lt@li.org>\n"
13"Language-Team: Lithuanian <lt@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%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: 2016-03-24 06:08+0000\n"
19+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
20−"X-Generator: Launchpad (build 17958)\n"
20+"X-Generator: Launchpad (build 17995)\n"
21
21
22#: plugins/IntegratedLightDM/Greeter.cpp:112
22#: plugins/IntegratedLightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
@@ -441,19 +441,19 @@ msgstr ""
441msgid "Swipe up to manage the app"
441msgid "Swipe up to manage the app"
442msgstr ""
442msgstr ""
443
443
444−#: qml/Tutorial/TutorialLeft.qml:47
445−msgid "Swipe from the left edge to open the launcher"
446−msgstr ""
447−
448#: qml/Tutorial/TutorialLeftLong.qml:47
444#: qml/Tutorial/TutorialLeftLong.qml:47
449msgid "Long swipe from the left edge to open the Today scope"
445msgid "Long swipe from the left edge to open the Today scope"
450msgstr ""
446msgstr ""
451
447
452−#: qml/Tutorial/TutorialRight.qml:54
448+#: qml/Tutorial/TutorialLeft.qml:47
453−msgid "Hover your mouse on the right edge to view your open apps"
449+msgid "Swipe from the left edge to open the launcher"
454msgstr ""
450msgstr ""
455
451
456#: qml/Tutorial/TutorialRight.qml:55
452#: qml/Tutorial/TutorialRight.qml:55
453+msgid "Push your mouse against the right edge to view your open apps"
454+msgstr ""
455+
456+#: qml/Tutorial/TutorialRight.qml:56
457msgid "Short or long swipe from the right edge to view your open apps"
457msgid "Short or long swipe from the right edge to view your open apps"
458msgstr ""
458msgstr ""
459
459
po/lv.po+9−9
@@ -8,7 +8,7 @@ msgid ""
8msgstr ""
8msgstr ""
9"Project-Id-Version: unity\n"
9"Project-Id-Version: unity\n"
10"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
11−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
11+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
12"PO-Revision-Date: 2015-11-22 19:13+0000\n"
12"PO-Revision-Date: 2015-11-22 19:13+0000\n"
13"Last-Translator: Klavs Anson <anson.klavs@gmail.com>\n"
13"Last-Translator: Klavs Anson <anson.klavs@gmail.com>\n"
14"Language-Team: Latvian <lata-l10n@googlegroups.com>\n"
14"Language-Team: Latvian <lata-l10n@googlegroups.com>\n"
@@ -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=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
18"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2016-03-24 06:08+0000\n"
19+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
20−"X-Generator: Launchpad (build 17958)\n"
20+"X-Generator: Launchpad (build 17995)\n"
21"Language: lv\n"
21"Language: lv\n"
22
22
23#: plugins/IntegratedLightDM/Greeter.cpp:112
23#: plugins/IntegratedLightDM/Greeter.cpp:112
@@ -452,19 +452,19 @@ msgstr ""
452msgid "Swipe up to manage the app"
452msgid "Swipe up to manage the app"
453msgstr ""
453msgstr ""
454
454
455−#: qml/Tutorial/TutorialLeft.qml:47
456−msgid "Swipe from the left edge to open the launcher"
457−msgstr ""
458−
459#: qml/Tutorial/TutorialLeftLong.qml:47
455#: qml/Tutorial/TutorialLeftLong.qml:47
460msgid "Long swipe from the left edge to open the Today scope"
456msgid "Long swipe from the left edge to open the Today scope"
461msgstr ""
457msgstr ""
462
458
463−#: qml/Tutorial/TutorialRight.qml:54
459+#: qml/Tutorial/TutorialLeft.qml:47
464−msgid "Hover your mouse on the right edge to view your open apps"
460+msgid "Swipe from the left edge to open the launcher"
465msgstr ""
461msgstr ""
466
462
467#: qml/Tutorial/TutorialRight.qml:55
463#: qml/Tutorial/TutorialRight.qml:55
464+msgid "Push your mouse against the right edge to view your open apps"
465+msgstr ""
466+
467+#: qml/Tutorial/TutorialRight.qml:56
468msgid "Short or long swipe from the right edge to view your open apps"
468msgid "Short or long swipe from the right edge to view your open apps"
469msgstr ""
469msgstr ""
470
470
po/ml.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2013-11-23 11:44+0000\n"
11"PO-Revision-Date: 2013-11-23 11:44+0000\n"
12"Last-Translator: ST Alfas <Unknown>\n"
12"Last-Translator: ST Alfas <Unknown>\n"
13"Language-Team: Malayalam <ml@li.org>\n"
13"Language-Team: Malayalam <ml@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/mr.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2014-01-14 19:54+0000\n"
11"PO-Revision-Date: 2014-01-14 19:54+0000\n"
12"Last-Translator: Rohan Deshmukh <Unknown>\n"
12"Last-Translator: Rohan Deshmukh <Unknown>\n"
13"Language-Team: Marathi <mr@li.org>\n"
13"Language-Team: Marathi <mr@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/ms.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2014-01-17 09:05+0000\n"
11"PO-Revision-Date: 2014-01-17 09:05+0000\n"
12"Last-Translator: abuyop <Unknown>\n"
12"Last-Translator: abuyop <Unknown>\n"
13"Language-Team: Malay <ms@li.org>\n"
13"Language-Team: Malay <ms@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -446,19 +446,19 @@ msgstr ""
446msgid "Swipe up to manage the app"
446msgid "Swipe up to manage the app"
447msgstr ""
447msgstr ""
448
448
449−#: qml/Tutorial/TutorialLeft.qml:47
450−msgid "Swipe from the left edge to open the launcher"
451−msgstr ""
452−
453#: qml/Tutorial/TutorialLeftLong.qml:47
449#: qml/Tutorial/TutorialLeftLong.qml:47
454msgid "Long swipe from the left edge to open the Today scope"
450msgid "Long swipe from the left edge to open the Today scope"
455msgstr ""
451msgstr ""
456
452
457−#: qml/Tutorial/TutorialRight.qml:54
453+#: qml/Tutorial/TutorialLeft.qml:47
458−msgid "Hover your mouse on the right edge to view your open apps"
454+msgid "Swipe from the left edge to open the launcher"
459msgstr ""
455msgstr ""
460
456
461#: qml/Tutorial/TutorialRight.qml:55
457#: qml/Tutorial/TutorialRight.qml:55
458+msgid "Push your mouse against the right edge to view your open apps"
459+msgstr ""
460+
461+#: qml/Tutorial/TutorialRight.qml:56
462msgid "Short or long swipe from the right edge to view your open apps"
462msgid "Short or long swipe from the right edge to view your open apps"
463msgstr ""
463msgstr ""
464
464
po/my.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2013-12-12 11:12+0000\n"
11"PO-Revision-Date: 2013-12-12 11:12+0000\n"
12"Last-Translator: Pyae Sone <Unknown>\n"
12"Last-Translator: Pyae Sone <Unknown>\n"
13"Language-Team: Burmese <my@li.org>\n"
13"Language-Team: Burmese <my@li.org>\n"
@@ -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: 2016-03-24 06:07+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/nb.po+13−10
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2016-03-29 08:56+0000\n"
11"PO-Revision-Date: 2016-03-29 08:56+0000\n"
12"Last-Translator: Åka Sikrom <Unknown>\n"
12"Last-Translator: Åka Sikrom <Unknown>\n"
13"Language-Team: Norwegian Bokmal <nb@li.org>\n"
13"Language-Team: Norwegian Bokmal <nb@li.org>\n"
@@ -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: 2016-03-30 06:25+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17967)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -452,19 +452,19 @@ msgstr "Dra opp for å lage en melding"
452msgid "Swipe up to manage the app"
452msgid "Swipe up to manage the app"
453msgstr "Dra opp for å håndtere programmet"
453msgstr "Dra opp for å håndtere programmet"
454
454
455−#: qml/Tutorial/TutorialLeft.qml:47
456−msgid "Swipe from the left edge to open the launcher"
457−msgstr "Dra fra venstre kant for å åpne oppstarteren"
458−
459#: qml/Tutorial/TutorialLeftLong.qml:47
455#: qml/Tutorial/TutorialLeftLong.qml:47
460msgid "Long swipe from the left edge to open the Today scope"
456msgid "Long swipe from the left edge to open the Today scope"
461msgstr "Dra langt fra venstre kant for å åpne virkefeltet «I dag»"
457msgstr "Dra langt fra venstre kant for å åpne virkefeltet «I dag»"
462
458
463−#: qml/Tutorial/TutorialRight.qml:54
459+#: qml/Tutorial/TutorialLeft.qml:47
464−msgid "Hover your mouse on the right edge to view your open apps"
460+msgid "Swipe from the left edge to open the launcher"
465−msgstr "Hold musepekeren over høyre kant for å vise åpne programmer"
461+msgstr "Dra fra venstre kant for å åpne oppstarteren"
466
462
467#: qml/Tutorial/TutorialRight.qml:55
463#: qml/Tutorial/TutorialRight.qml:55
464+msgid "Push your mouse against the right edge to view your open apps"
465+msgstr ""
466+
467+#: qml/Tutorial/TutorialRight.qml:56
468msgid "Short or long swipe from the right edge to view your open apps"
468msgid "Short or long swipe from the right edge to view your open apps"
469msgstr "Dra fra høyre kant for å vise åpne programmer"
469msgstr "Dra fra høyre kant for å vise åpne programmer"
470
470
@@ -1063,3 +1063,6 @@ msgstr "Veldig svakt passord"
1063
1063
1064#~ msgid "Tomorrow %H:%M"
1064#~ msgid "Tomorrow %H:%M"
1065#~ msgstr "I morgen %H:%M"
1065#~ msgstr "I morgen %H:%M"
1066+
1067+#~ msgid "Hover your mouse on the right edge to view your open apps"
1068+#~ msgstr "Hold musepekeren over høyre kant for å vise åpne programmer"
po/ne.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-12-06 15:11+0000\n"
11"PO-Revision-Date: 2015-12-06 15:11+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Nepali <ne@li.org>\n"
13"Language-Team: Nepali <ne@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/nl.po+26−31
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-07-07 07:14+0000\n"
11"PO-Revision-Date: 2015-07-07 07:14+0000\n"
12"Last-Translator: Hannie Dumoleyn <Unknown>\n"
12"Last-Translator: Hannie Dumoleyn <Unknown>\n"
13"Language-Team: Dutch <nl@li.org>\n"
13"Language-Team: Dutch <nl@li.org>\n"
@@ -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: 2016-03-24 06:07+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -189,11 +189,11 @@ msgstr "Toevoegen aan favorieten"
189
189
190#: qml/Dash/FiltersPopover.qml:60
190#: qml/Dash/FiltersPopover.qml:60
191msgid "Refine your results"
191msgid "Refine your results"
192−msgstr ""
192+msgstr "Resultaten verfijnen"
193
193
194#: qml/Dash/FiltersPopover.qml:69
194#: qml/Dash/FiltersPopover.qml:69
195msgid "Reset"
195msgid "Reset"
196−msgstr ""
196+msgstr "Herstellen"
197
197
198#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
198#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
199msgid "See less"
199msgid "See less"
@@ -210,11 +210,11 @@ msgstr "Zoeken"
210
210
211#: qml/Dash/PageHeaderExtraPanel.qml:55
211#: qml/Dash/PageHeaderExtraPanel.qml:55
212msgid "Recent Searches"
212msgid "Recent Searches"
213−msgstr ""
213+msgstr "Recente zoekopdrachten"
214
214
215#: qml/Dash/PageHeaderExtraPanel.qml:66
215#: qml/Dash/PageHeaderExtraPanel.qml:66
216msgid "Clear All"
216msgid "Clear All"
217−msgstr ""
217+msgstr "Alles wissen"
218
218
219#: qml/Dash/Previews/PreviewActionCombo.qml:35
219#: qml/Dash/Previews/PreviewActionCombo.qml:35
220msgid "More..."
220msgid "More..."
@@ -239,7 +239,7 @@ msgstr "Voeg recensie toe"
239
239
240#: qml/Dash/Previews/PreviewSharing.qml:66
240#: qml/Dash/Previews/PreviewSharing.qml:66
241msgid "Preview Share Item"
241msgid "Preview Share Item"
242−msgstr ""
242+msgstr "Voorbeeld van share-item"
243
243
244#: qml/Dash/PullToRefreshScopeStyle.qml:55
244#: qml/Dash/PullToRefreshScopeStyle.qml:55
245msgid "Pull to refresh…"
245msgid "Pull to refresh…"
@@ -434,46 +434,47 @@ msgstr "Terugbellen"
434#: qml/Stages/SideStage.qml:76
434#: qml/Stages/SideStage.qml:76
435msgid "Drag using 3 fingers any application from one window to the other"
435msgid "Drag using 3 fingers any application from one window to the other"
436msgstr ""
436msgstr ""
437+"Een toepassing met 3 vingers slepen van het ene venster naar het andere"
437
438
438#: qml/Tutorial/TutorialBottom.qml:78
439#: qml/Tutorial/TutorialBottom.qml:78
439msgid "Swipe up to add a contact"
440msgid "Swipe up to add a contact"
440−msgstr ""
441+msgstr "Omhoog vegen om een contact toe te voegen"
441
442
442#: qml/Tutorial/TutorialBottom.qml:80
443#: qml/Tutorial/TutorialBottom.qml:80
443msgid "Swipe up for favorite calculations"
444msgid "Swipe up for favorite calculations"
444−msgstr ""
445+msgstr "Omhoog vegen voor favoriete berekeningen"
445
446
446#: qml/Tutorial/TutorialBottom.qml:82
447#: qml/Tutorial/TutorialBottom.qml:82
447msgid "Swipe up for recent calls"
448msgid "Swipe up for recent calls"
448−msgstr ""
449+msgstr "Omhoog vegen voor recente gesprekken"
449
450
450#: qml/Tutorial/TutorialBottom.qml:84
451#: qml/Tutorial/TutorialBottom.qml:84
451msgid "Swipe up to create a message"
452msgid "Swipe up to create a message"
452−msgstr ""
453+msgstr "Omhoog vegen om een bericht aan te maken"
453
454
454#: qml/Tutorial/TutorialBottom.qml:85
455#: qml/Tutorial/TutorialBottom.qml:85
455msgid "Swipe up to manage the app"
456msgid "Swipe up to manage the app"
456−msgstr ""
457+msgstr "Omhoog vegen om de app te beheren"
457−
458−#: qml/Tutorial/TutorialLeft.qml:47
459−msgid "Swipe from the left edge to open the launcher"
460−msgstr ""
461
458
462#: qml/Tutorial/TutorialLeftLong.qml:47
459#: qml/Tutorial/TutorialLeftLong.qml:47
463msgid "Long swipe from the left edge to open the Today scope"
460msgid "Long swipe from the left edge to open the Today scope"
464−msgstr ""
461+msgstr "Lang vanaf de linkerkant vegen om de Vandaag-scope te openen"
465
462
466−#: qml/Tutorial/TutorialRight.qml:54
463+#: qml/Tutorial/TutorialLeft.qml:47
467−msgid "Hover your mouse on the right edge to view your open apps"
464+msgid "Swipe from the left edge to open the launcher"
468−msgstr ""
465+msgstr "Vanaf de linkerkant vegen om de starter te openen"
469
466
470#: qml/Tutorial/TutorialRight.qml:55
467#: qml/Tutorial/TutorialRight.qml:55
471−msgid "Short or long swipe from the right edge to view your open apps"
468+msgid "Push your mouse against the right edge to view your open apps"
472msgstr ""
469msgstr ""
473
470
471+#: qml/Tutorial/TutorialRight.qml:56
472+msgid "Short or long swipe from the right edge to view your open apps"
473+msgstr "Kort of lang vegen vanaf de rechterkant om uw geopende apps te zien"
474+
474#: qml/Tutorial/TutorialTop.qml:53
475#: qml/Tutorial/TutorialTop.qml:53
475msgid "Swipe from the top right edge to open the notification bar"
476msgid "Swipe from the top right edge to open the notification bar"
476−msgstr ""
477+msgstr "Vanuit de rechterbovenhoek vegen om de notificatiebalk te openen"
477
478
478#: qml/Tutorial/TutorialTop.qml:54
479#: qml/Tutorial/TutorialTop.qml:54
479msgid "Swipe from the top edge to open the notification bar"
480msgid "Swipe from the top edge to open the notification bar"
@@ -1065,11 +1066,5 @@ msgstr ""
1065#~ msgid "Call back"
1066#~ msgid "Call back"
1066#~ msgstr "Terugbellen"
1067#~ msgstr "Terugbellen"
1067
1068
1068−#~ msgid "Please select how you’d like to unlock your device."
1069+#~ msgid "Hover your mouse on the right edge to view your open apps"
1069−#~ msgstr "Kies a.u.b. hoe u graag uw apparaat zou willen ontgrendelen."
1070+#~ msgstr "Beweeg uw muis naar de rechterkant om uw geopende apps te zien"
1070−
1071−#~ msgid "Welcome to your Ubuntu device."
1072−#~ msgstr "Welkom bij uw Ubuntu-apparaat."
1073−
1074−#~ msgid "Your device is now ready to use."
1075−#~ msgstr "Uw apparaat is nu klaar voor gebruik."
po/nn.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-05-12 11:32+0000\n"
11"PO-Revision-Date: 2015-05-12 11:32+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Norwegian Nynorsk <nn@li.org>\n"
13"Language-Team: Norwegian Nynorsk <nn@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/oc.po+353−110
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-02-05 20:35+0000\n"
11"PO-Revision-Date: 2015-02-05 20:35+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Occitan (post 1500) <oc@li.org>\n"
13"Language-Team: Occitan (post 1500) <oc@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -25,68 +25,72 @@ msgstr "Senhal : "
25#: plugins/Unity/Launcher/launcheritem.cpp:48
25#: plugins/Unity/Launcher/launcheritem.cpp:48
26#: plugins/Unity/Launcher/launcheritem.cpp:107
26#: plugins/Unity/Launcher/launcheritem.cpp:107
27msgid "Pin shortcut"
27msgid "Pin shortcut"
28−msgstr ""
28+msgstr "Espingolar l'acorchi"
29
29
30#: plugins/Unity/Launcher/launcheritem.cpp:53
30#: plugins/Unity/Launcher/launcheritem.cpp:53
31msgid "Quit"
31msgid "Quit"
32−msgstr ""
32+msgstr "Quitar"
33
33
34#: plugins/Unity/Launcher/launcheritem.cpp:107
34#: plugins/Unity/Launcher/launcheritem.cpp:107
35msgid "Unpin shortcut"
35msgid "Unpin shortcut"
36−msgstr ""
36+msgstr "Destacar l'acorchi"
37
37
38#: qml/Components/DelayedLockscreen.qml:49
38#: qml/Components/DelayedLockscreen.qml:49
39msgid "Device Locked"
39msgid "Device Locked"
40−msgstr ""
40+msgstr "Periferic verrolhat"
41
41
42#: qml/Components/DelayedLockscreen.qml:64
42#: qml/Components/DelayedLockscreen.qml:64
43msgid "You have been locked out due to too many failed passphrase attempts."
43msgid "You have been locked out due to too many failed passphrase attempts."
44msgstr ""
44msgstr ""
45+"Sètz estat blocat en seguida d'un tròp grand nombre de temptativas de sasida "
46+"d'una frasa secreta erronèa."
45
47
46#: qml/Components/DelayedLockscreen.qml:65
48#: qml/Components/DelayedLockscreen.qml:65
47msgid "You have been locked out due to too many failed passcode attempts."
49msgid "You have been locked out due to too many failed passcode attempts."
48msgstr ""
50msgstr ""
51+"Sètz estat blocat en seguida d'un tròp grand nombre de temptativas de sasida "
52+"d'un senhal erronèu."
49
53
50#: qml/Components/DelayedLockscreen.qml:74
54#: qml/Components/DelayedLockscreen.qml:74
51#, qt-format
55#, qt-format
52msgid "Please wait %1 minute and then try again…"
56msgid "Please wait %1 minute and then try again…"
53msgid_plural "Please wait %1 minutes and then try again…"
57msgid_plural "Please wait %1 minutes and then try again…"
54−msgstr[0] ""
58+msgstr[0] "Pacientatz %1 minuta e reensajatz..."
55−msgstr[1] ""
59+msgstr[1] "Pacientatz %1 minutas e reensajatz..."
56
60
57#: qml/Components/Dialogs.qml:144
61#: qml/Components/Dialogs.qml:144
58msgctxt "Title: Lock/Log out dialog"
62msgctxt "Title: Lock/Log out dialog"
59msgid "Log out"
63msgid "Log out"
60−msgstr ""
64+msgstr "Tampar la session"
61
65
62#: qml/Components/Dialogs.qml:145
66#: qml/Components/Dialogs.qml:145
63msgid "Are you sure you want to log out?"
67msgid "Are you sure you want to log out?"
64−msgstr ""
68+msgstr "Sètz segur que volètz vous déconnecter ?"
65
69
66#: qml/Components/Dialogs.qml:147
70#: qml/Components/Dialogs.qml:147
67msgctxt "Button: Lock the system"
71msgctxt "Button: Lock the system"
68msgid "Lock"
72msgid "Lock"
69−msgstr ""
73+msgstr "Verrolhar"
70
74
71#: qml/Components/Dialogs.qml:154
75#: qml/Components/Dialogs.qml:154
72msgctxt "Button: Log out from the system"
76msgctxt "Button: Log out from the system"
73msgid "Log Out"
77msgid "Log Out"
74−msgstr ""
78+msgstr "Tampar la session"
75
79
76#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:219
80#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:219
77#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
81#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
78#: qml/Wizard/Pages/passcode-set.qml:32
82#: qml/Wizard/Pages/passcode-set.qml:32
79msgid "Cancel"
83msgid "Cancel"
80−msgstr ""
84+msgstr "Anullar"
81
85
82#: qml/Components/Dialogs.qml:173
86#: qml/Components/Dialogs.qml:173
83msgctxt "Title: Reboot dialog"
87msgctxt "Title: Reboot dialog"
84msgid "Reboot"
88msgid "Reboot"
85−msgstr ""
89+msgstr "Reaviar"
86
90
87#: qml/Components/Dialogs.qml:174
91#: qml/Components/Dialogs.qml:174
88msgid "Are you sure you want to reboot?"
92msgid "Are you sure you want to reboot?"
89−msgstr ""
93+msgstr "Sètz segur que volètz reaviar ?"
90
94
91#: qml/Components/Dialogs.qml:176
95#: qml/Components/Dialogs.qml:176
92msgid "No"
96msgid "No"
@@ -94,335 +98,349 @@ msgstr "Non"
94
98
95#: qml/Components/Dialogs.qml:183
99#: qml/Components/Dialogs.qml:183
96msgid "Yes"
100msgid "Yes"
97−msgstr ""
101+msgstr "Òc"
98
102
99#: qml/Components/Dialogs.qml:198
103#: qml/Components/Dialogs.qml:198
100msgctxt "Title: Power off/Restart dialog"
104msgctxt "Title: Power off/Restart dialog"
101msgid "Power"
105msgid "Power"
102−msgstr ""
106+msgstr "Alimentacion"
103
107
104#: qml/Components/Dialogs.qml:199
108#: qml/Components/Dialogs.qml:199
105msgid ""
109msgid ""
106"Are you sure you would like\n"
110"Are you sure you would like\n"
107"to power off?"
111"to power off?"
108msgstr ""
112msgstr ""
113+"Sètz segur que volètz\n"
114+"copar l'alimentacion ?"
109
115
110#: qml/Components/Dialogs.qml:201
116#: qml/Components/Dialogs.qml:201
111msgctxt "Button: Power off the system"
117msgctxt "Button: Power off the system"
112msgid "Power off"
118msgid "Power off"
113−msgstr ""
119+msgstr "Atudar"
114
120
115#: qml/Components/Dialogs.qml:210
121#: qml/Components/Dialogs.qml:210
116msgctxt "Button: Restart the system"
122msgctxt "Button: Restart the system"
117msgid "Restart"
123msgid "Restart"
118−msgstr ""
124+msgstr "Reaviar"
119
125
120#: qml/Components/Lockscreen.qml:231
126#: qml/Components/Lockscreen.qml:231
121msgid "Return to Call"
127msgid "Return to Call"
122−msgstr ""
128+msgstr "Tornar a l'apèl"
123
129
124#: qml/Components/Lockscreen.qml:231
130#: qml/Components/Lockscreen.qml:231
125msgid "Emergency Call"
131msgid "Emergency Call"
126−msgstr ""
132+msgstr "Apèl d'urgéncia"
127
133
128#: qml/Components/Lockscreen.qml:263
134#: qml/Components/Lockscreen.qml:263
129msgid "OK"
135msgid "OK"
130−msgstr ""
136+msgstr "D'acòrdi"
131
137
132#: qml/Components/ModeSwitchWarningDialog.qml:32
138#: qml/Components/ModeSwitchWarningDialog.qml:32
133msgid "Apps may have unsaved data:"
139msgid "Apps may have unsaved data:"
134−msgstr ""
140+msgstr "Las aplicacions pòdon aver de donadas pas enregistradas :"
135
141
136#: qml/Components/ModeSwitchWarningDialog.qml:57
142#: qml/Components/ModeSwitchWarningDialog.qml:57
137msgctxt ""
143msgctxt ""
138"Re-dock means connect the device again to an external screen/mouse/keyboard"
144"Re-dock means connect the device again to an external screen/mouse/keyboard"
139msgid "Re-dock, save your work and close these apps to continue."
145msgid "Re-dock, save your work and close these apps to continue."
140msgstr ""
146msgstr ""
147+"Rebrancatz-vos sus l'estacion d'acuèlh, enregistratz vòstre trabalh e "
148+"tampatz aquestas aplicacions per contunhar."
141
149
142#: qml/Components/ModeSwitchWarningDialog.qml:63
150#: qml/Components/ModeSwitchWarningDialog.qml:63
143msgid "Or force close now (unsaved data will be lost)."
151msgid "Or force close now (unsaved data will be lost)."
144msgstr ""
152msgstr ""
153+"Ou forçar la tampadura ara (les donadas pas enregistradas seràn perdues)."
145
154
146#: qml/Components/ModeSwitchWarningDialog.qml:75
155#: qml/Components/ModeSwitchWarningDialog.qml:75
147msgid "OK, I will reconnect"
156msgid "OK, I will reconnect"
148−msgstr ""
157+msgstr "OK, me vau reconnectar"
149
158
150#: qml/Components/ModeSwitchWarningDialog.qml:76
159#: qml/Components/ModeSwitchWarningDialog.qml:76
151msgid "Reconnect now!"
160msgid "Reconnect now!"
152−msgstr ""
161+msgstr "Se reconnectar ara !"
153
162
154#: qml/Components/ModeSwitchWarningDialog.qml:88
163#: qml/Components/ModeSwitchWarningDialog.qml:88
155msgid "Close all"
164msgid "Close all"
156−msgstr ""
165+msgstr "Tampar tot"
157
166
158#: qml/Dash/DashPageHeader.qml:337
167#: qml/Dash/DashPageHeader.qml:337
159msgctxt "Button: Open the Ubuntu Store"
168msgctxt "Button: Open the Ubuntu Store"
160msgid "Store"
169msgid "Store"
161−msgstr ""
170+msgstr "Logitèca"
162
171
163#: qml/Dash/DashPageHeader.qml:344
172#: qml/Dash/DashPageHeader.qml:344
164msgctxt "Button: Start a search in the current dash scope"
173msgctxt "Button: Start a search in the current dash scope"
165msgid "Search"
174msgid "Search"
166−msgstr ""
175+msgstr "Recercar"
167
176
168#: qml/Dash/DashPageHeader.qml:354
177#: qml/Dash/DashPageHeader.qml:354
169msgctxt "Button: Show the current dash scope settings"
178msgctxt "Button: Show the current dash scope settings"
170msgid "Settings"
179msgid "Settings"
171−msgstr ""
180+msgstr "Paramètres"
172
181
173#: qml/Dash/DashPageHeader.qml:361
182#: qml/Dash/DashPageHeader.qml:361
174msgid "Remove from Favorites"
183msgid "Remove from Favorites"
175−msgstr ""
184+msgstr "Levar dels favoris"
176
185
177#: qml/Dash/DashPageHeader.qml:361
186#: qml/Dash/DashPageHeader.qml:361
178msgid "Add to Favorites"
187msgid "Add to Favorites"
179−msgstr ""
188+msgstr "Apondre als favoris"
180
189
181#: qml/Dash/FiltersPopover.qml:60
190#: qml/Dash/FiltersPopover.qml:60
182msgid "Refine your results"
191msgid "Refine your results"
183−msgstr ""
192+msgstr "Afinar vòstres resultats"
184
193
185#: qml/Dash/FiltersPopover.qml:69
194#: qml/Dash/FiltersPopover.qml:69
186msgid "Reset"
195msgid "Reset"
187−msgstr ""
196+msgstr "Reïnicializar"
188
197
189#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
198#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
190msgid "See less"
199msgid "See less"
191−msgstr ""
200+msgstr "Veire mens"
192
201
193#: qml/Dash/GenericScopeView.qml:570
202#: qml/Dash/GenericScopeView.qml:570
194msgid "See all"
203msgid "See all"
195−msgstr ""
204+msgstr "Veire tot"
196
205
197#: qml/Dash/GenericScopeView.qml:627
206#: qml/Dash/GenericScopeView.qml:627
198msgctxt "Label: Hint for dash search line edit"
207msgctxt "Label: Hint for dash search line edit"
199msgid "Search"
208msgid "Search"
200−msgstr ""
209+msgstr "Recercar"
201
210
202#: qml/Dash/PageHeaderExtraPanel.qml:55
211#: qml/Dash/PageHeaderExtraPanel.qml:55
203msgid "Recent Searches"
212msgid "Recent Searches"
204−msgstr ""
213+msgstr "Recèrcas recentas"
205
214
206#: qml/Dash/PageHeaderExtraPanel.qml:66
215#: qml/Dash/PageHeaderExtraPanel.qml:66
207msgid "Clear All"
216msgid "Clear All"
208−msgstr ""
217+msgstr "Escafar tot"
209
218
210#: qml/Dash/Previews/PreviewActionCombo.qml:35
219#: qml/Dash/Previews/PreviewActionCombo.qml:35
211msgid "More..."
220msgid "More..."
212−msgstr ""
221+msgstr "Mai..."
213
222
214#: qml/Dash/Previews/PreviewActionCombo.qml:35
223#: qml/Dash/Previews/PreviewActionCombo.qml:35
215msgid "Less..."
224msgid "Less..."
216−msgstr ""
225+msgstr "Moins..."
217
226
218#: qml/Dash/Previews/PreviewCommentInput.qml:68
227#: qml/Dash/Previews/PreviewCommentInput.qml:68
219#: qml/Dash/Previews/PreviewRatingInput.qml:174
228#: qml/Dash/Previews/PreviewRatingInput.qml:174
220msgid "Send"
229msgid "Send"
221−msgstr ""
230+msgstr "Mandar"
222
231
223#: qml/Dash/Previews/PreviewRatingInput.qml:84
232#: qml/Dash/Previews/PreviewRatingInput.qml:84
224msgid "Rate this"
233msgid "Rate this"
225−msgstr ""
234+msgstr "Avaloratz aquò"
226
235
227#: qml/Dash/Previews/PreviewRatingInput.qml:129
236#: qml/Dash/Previews/PreviewRatingInput.qml:129
228msgid "Add a review"
237msgid "Add a review"
229−msgstr ""
238+msgstr "Apondre un avís"
230
239
231#: qml/Dash/Previews/PreviewSharing.qml:66
240#: qml/Dash/Previews/PreviewSharing.qml:66
232msgid "Preview Share Item"
241msgid "Preview Share Item"
233−msgstr ""
242+msgstr "Apercebut de l'element partejat"
234
243
235#: qml/Dash/PullToRefreshScopeStyle.qml:55
244#: qml/Dash/PullToRefreshScopeStyle.qml:55
236msgid "Pull to refresh…"
245msgid "Pull to refresh…"
237−msgstr ""
246+msgstr "Tirer per actualizar..."
238
247
239#: qml/Dash/PullToRefreshScopeStyle.qml:60
248#: qml/Dash/PullToRefreshScopeStyle.qml:60
240msgid "Release to refresh…"
249msgid "Release to refresh…"
241−msgstr ""
250+msgstr "Daissar anar per actualizar..."
242
251
243#: qml/Dash/ScopeSettings/ScopeSettingBoolean.qml:43
252#: qml/Dash/ScopeSettings/ScopeSettingBoolean.qml:43
244msgid "Enable location data"
253msgid "Enable location data"
245−msgstr ""
254+msgstr "Activar las donadas de localizacion"
246
255
247#: qml/Dash/ScopesList.qml:67
256#: qml/Dash/ScopesList.qml:67
248msgid "Manage"
257msgid "Manage"
249−msgstr ""
258+msgstr "Gerir"
250
259
251#: qml/Dash/ScopesList.qml:113
260#: qml/Dash/ScopesList.qml:113
252msgid "Home"
261msgid "Home"
253−msgstr ""
262+msgstr "Acuèlh"
254
263
255#: qml/Dash/ScopesList.qml:114
264#: qml/Dash/ScopesList.qml:114
256msgid "Also installed"
265msgid "Also installed"
257−msgstr ""
266+msgstr "Tanben installadas"
258
267
259#: qml/DisabledScreenNotice.qml:104
268#: qml/DisabledScreenNotice.qml:104
260msgid ""
269msgid ""
261"Your device is now connected to an external display. Use this screen as a "
270"Your device is now connected to an external display. Use this screen as a "
262"touch pad to interact with the pointer."
271"touch pad to interact with the pointer."
263msgstr ""
272msgstr ""
273+"Vòstre aparelh es ara connectat a un ecran extèrne. Utilizatz aqueste ecran "
274+"coma un pavat tactil per interagir amb lo puntador."
264
275
265#: qml/Greeter/CoverPage.qml:118
276#: qml/Greeter/CoverPage.qml:118
266msgid "Unlock"
277msgid "Unlock"
267−msgstr ""
278+msgstr "Desverrolhar"
268
279
269#: qml/Greeter/LoginList.qml:239
280#: qml/Greeter/LoginList.qml:239
270msgid "Retry"
281msgid "Retry"
271−msgstr ""
282+msgstr "Ensajar tornamai"
272
283
273#: qml/Greeter/LoginList.qml:240
284#: qml/Greeter/LoginList.qml:240
274msgid "Tap to unlock"
285msgid "Tap to unlock"
275−msgstr ""
286+msgstr "Quichar per desverrolhar"
276
287
277#: qml/Greeter/NarrowView.qml:54
288#: qml/Greeter/NarrowView.qml:54
278msgid "Sorry, incorrect passphrase."
289msgid "Sorry, incorrect passphrase."
279−msgstr ""
290+msgstr "O planhèm, frasa secreta incorrècta."
280
291
281#: qml/Greeter/NarrowView.qml:55
292#: qml/Greeter/NarrowView.qml:55
282msgid "Sorry, incorrect passcode."
293msgid "Sorry, incorrect passcode."
283−msgstr ""
294+msgstr "O planhèm, còde incorrècte."
284
295
285#: qml/Greeter/NarrowView.qml:56
296#: qml/Greeter/NarrowView.qml:56
286msgid "This will be your last attempt."
297msgid "This will be your last attempt."
287−msgstr ""
298+msgstr "Aquò serà vòstra darrièra temptativa."
288
299
289#: qml/Greeter/NarrowView.qml:58
300#: qml/Greeter/NarrowView.qml:58
290msgid ""
301msgid ""
291"If passphrase is entered incorrectly, your phone will conduct a factory "
302"If passphrase is entered incorrectly, your phone will conduct a factory "
292"reset and all personal data will be deleted."
303"reset and all personal data will be deleted."
293msgstr ""
304msgstr ""
305+"Se la frasa secreta es sasida de manièra incorrècta, vòstre telefòn "
306+"efectuarà una reïnicializacion als paramètres d'usina e totas las donadas "
307+"personalas seràn suprimidas."
294
308
295#: qml/Greeter/NarrowView.qml:59
309#: qml/Greeter/NarrowView.qml:59
296msgid ""
310msgid ""
297"If passcode is entered incorrectly, your phone will conduct a factory reset "
311"If passcode is entered incorrectly, your phone will conduct a factory reset "
298"and all personal data will be deleted."
312"and all personal data will be deleted."
299msgstr ""
313msgstr ""
314+"Se lo còde es sasit de manièra incorrècta, vòstre telefòn efectuarà una "
315+"reïnicializacion als paramètres d'usina e totas las donadas personalas "
316+"seront suprimidas."
300
317
301#: qml/Greeter/NarrowView.qml:116
318#: qml/Greeter/NarrowView.qml:116
302#, qt-format
319#, qt-format
303msgid "Enter %1"
320msgid "Enter %1"
304−msgstr ""
321+msgstr "Sasissètz %1"
305
322
306#: qml/Greeter/NarrowView.qml:117
323#: qml/Greeter/NarrowView.qml:117
307msgid "Enter passphrase"
324msgid "Enter passphrase"
308−msgstr ""
325+msgstr "Sasissètz la frasa secreta"
309
326
310#: qml/Greeter/NarrowView.qml:118
327#: qml/Greeter/NarrowView.qml:118
311msgid "Enter passcode"
328msgid "Enter passcode"
312−msgstr ""
329+msgstr "Sasissètz lo senhal"
313
330
314#: qml/Greeter/NarrowView.qml:119
331#: qml/Greeter/NarrowView.qml:119
315#, qt-format
332#, qt-format
316msgid "Sorry, incorrect %1"
333msgid "Sorry, incorrect %1"
317−msgstr ""
334+msgstr "O planhèm, %1 incorrècte"
318
335
319#: qml/Greeter/NarrowView.qml:120
336#: qml/Greeter/NarrowView.qml:120
320msgid "Sorry, incorrect passphrase"
337msgid "Sorry, incorrect passphrase"
321−msgstr ""
338+msgstr "O planhèm, frasa secreta incorrecte"
322
339
323#: qml/Greeter/NarrowView.qml:121
340#: qml/Greeter/NarrowView.qml:121
324msgctxt "passphrase"
341msgctxt "passphrase"
325msgid "Please re-enter"
342msgid "Please re-enter"
326−msgstr ""
343+msgstr "Veuillez rensagesir"
327
344
328#: qml/Greeter/NarrowView.qml:122
345#: qml/Greeter/NarrowView.qml:122
329msgid "Sorry, incorrect passcode"
346msgid "Sorry, incorrect passcode"
330−msgstr ""
347+msgstr "O planhèm, còde incorrècte"
331
348
332#: qml/Notifications/NotificationMenuItemFactory.qml:129
349#: qml/Notifications/NotificationMenuItemFactory.qml:129
333msgid "Show password"
350msgid "Show password"
334−msgstr ""
351+msgstr "Afichar lo senhal"
335
352
336#: qml/Panel/ActiveCallHint.qml:79
353#: qml/Panel/ActiveCallHint.qml:79
337msgid "Tap to return to call..."
354msgid "Tap to return to call..."
338−msgstr ""
355+msgstr "Quichatz per tornar a l'apèl..."
339
356
340#: qml/Panel/ActiveCallHint.qml:92
357#: qml/Panel/ActiveCallHint.qml:92
341msgid "Conference"
358msgid "Conference"
342−msgstr ""
359+msgstr "Conferéncia"
343
360
344#: qml/Panel/Indicators/MenuItemFactory.qml:761
361#: qml/Panel/Indicators/MenuItemFactory.qml:761
345msgid "Nothing is playing"
362msgid "Nothing is playing"
346−msgstr ""
363+msgstr "Res es pas en cors de lectura"
347
364
348#: qml/Panel/Indicators/MenuItemFactory.qml:890
365#: qml/Panel/Indicators/MenuItemFactory.qml:890
349#, qt-format
366#, qt-format
350msgid "%1 hour"
367msgid "%1 hour"
351msgid_plural "%1 hours"
368msgid_plural "%1 hours"
352−msgstr[0] ""
369+msgstr[0] "%1 ora"
353−msgstr[1] ""
370+msgstr[1] "%1 oras"
354
371
355#: qml/Panel/Indicators/MenuItemFactory.qml:894
372#: qml/Panel/Indicators/MenuItemFactory.qml:894
356#, qt-format
373#, qt-format
357msgid "%1 minute"
374msgid "%1 minute"
358msgid_plural "%1 minutes"
375msgid_plural "%1 minutes"
359−msgstr[0] ""
376+msgstr[0] "%1 minuta"
360−msgstr[1] ""
377+msgstr[1] "%1 minutas"
361
378
362#: qml/Panel/Indicators/MenuItemFactory.qml:899
379#: qml/Panel/Indicators/MenuItemFactory.qml:899
363#, qt-format
380#, qt-format
364msgid "%1 second"
381msgid "%1 second"
365msgid_plural "%1 seconds"
382msgid_plural "%1 seconds"
366−msgstr[0] ""
383+msgstr[0] "%1 segonda"
367−msgstr[1] ""
384+msgstr[1] "%1 segondas"
368
385
369#: qml/Panel/Indicators/MenuItemFactory.qml:902
386#: qml/Panel/Indicators/MenuItemFactory.qml:902
370msgid "0 seconds"
387msgid "0 seconds"
371−msgstr ""
388+msgstr "0 segonda"
372
389
373#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
390#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
374#: qml/Panel/Indicators/MenuItemFactory.qml:904
391#: qml/Panel/Indicators/MenuItemFactory.qml:904
375#, qt-format
392#, qt-format
376msgid "%1 remaining"
393msgid "%1 remaining"
377−msgstr ""
394+msgstr "Demòra %1"
378
395
379#: qml/Panel/Indicators/MenuItemFactory.qml:910
396#: qml/Panel/Indicators/MenuItemFactory.qml:910
380msgid "In queue…"
397msgid "In queue…"
381−msgstr ""
398+msgstr "Dins la fia d'espèra..."
382
399
383#: qml/Panel/Indicators/MenuItemFactory.qml:914
400#: qml/Panel/Indicators/MenuItemFactory.qml:914
384msgid "Downloading"
401msgid "Downloading"
385−msgstr ""
402+msgstr "Telecargament en cors"
386
403
387#: qml/Panel/Indicators/MenuItemFactory.qml:916
404#: qml/Panel/Indicators/MenuItemFactory.qml:916
388msgid "Paused, tap to resume"
405msgid "Paused, tap to resume"
389−msgstr ""
406+msgstr "En pausa, quichatz per reprene"
390
407
391#: qml/Panel/Indicators/MenuItemFactory.qml:918
408#: qml/Panel/Indicators/MenuItemFactory.qml:918
392msgid "Canceled"
409msgid "Canceled"
393−msgstr ""
410+msgstr "Anullat"
394
411
395#: qml/Panel/Indicators/MenuItemFactory.qml:920
412#: qml/Panel/Indicators/MenuItemFactory.qml:920
396msgid "Finished"
413msgid "Finished"
397−msgstr ""
414+msgstr "Acabat"
398
415
399#: qml/Panel/Indicators/MenuItemFactory.qml:922
416#: qml/Panel/Indicators/MenuItemFactory.qml:922
400msgid "Failed, tap to retry"
417msgid "Failed, tap to retry"
401−msgstr ""
418+msgstr "Fracàs, quichatz per reensajar"
402
419
403#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
420#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
404#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
421#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
405msgctxt "Button: Send a reply message"
422msgctxt "Button: Send a reply message"
406msgid "Send"
423msgid "Send"
407−msgstr ""
424+msgstr "Mandar"
408
425
409#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
426#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
410msgctxt "Label: Hint in message indicator line edit"
427msgctxt "Label: Hint in message indicator line edit"
411msgid "Reply"
428msgid "Reply"
412−msgstr ""
429+msgstr "Respondre"
413
430
414#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
431#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
415msgctxt "Button: Call back on phone"
432msgctxt "Button: Call back on phone"
416msgid "Call back"
433msgid "Call back"
417−msgstr ""
434+msgstr "Rapelar"
418
435
419#: qml/Stages/SideStage.qml:76
436#: qml/Stages/SideStage.qml:76
420msgid "Drag using 3 fingers any application from one window to the other"
437msgid "Drag using 3 fingers any application from one window to the other"
421msgstr ""
438msgstr ""
439+"Fasètz lisar amb 3 dets quina aplicacion que siá d'una fenèstra a l'autra"
422
440
423#: qml/Tutorial/TutorialBottom.qml:78
441#: qml/Tutorial/TutorialBottom.qml:78
424msgid "Swipe up to add a contact"
442msgid "Swipe up to add a contact"
425−msgstr ""
443+msgstr "Fasètz lisar cap amont per apondre un contact"
426
444
427#: qml/Tutorial/TutorialBottom.qml:80
445#: qml/Tutorial/TutorialBottom.qml:80
428msgid "Swipe up for favorite calculations"
446msgid "Swipe up for favorite calculations"
@@ -434,25 +452,25 @@ msgstr ""
434
452
435#: qml/Tutorial/TutorialBottom.qml:84
453#: qml/Tutorial/TutorialBottom.qml:84
436msgid "Swipe up to create a message"
454msgid "Swipe up to create a message"
437−msgstr ""
455+msgstr "Fasètz lisar cap amont per crear un messatge"
438
456
439#: qml/Tutorial/TutorialBottom.qml:85
457#: qml/Tutorial/TutorialBottom.qml:85
440msgid "Swipe up to manage the app"
458msgid "Swipe up to manage the app"
441−msgstr ""
459+msgstr "Fasètz lisar cap amont per gerir l'aplicacion"
442−
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446
460
447#: qml/Tutorial/TutorialLeftLong.qml:47
461#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
462msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
463msgstr ""
450
464
451−#: qml/Tutorial/TutorialRight.qml:54
465+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
466+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
467msgstr ""
454
468
455#: qml/Tutorial/TutorialRight.qml:55
469#: qml/Tutorial/TutorialRight.qml:55
470+msgid "Push your mouse against the right edge to view your open apps"
471+msgstr ""
472+
473+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
474msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
475msgstr ""
458
476
@@ -467,7 +485,7 @@ msgstr ""
467#: qml/Wizard/Page.qml:54
485#: qml/Wizard/Page.qml:54
468msgctxt "Button: Go back one page in the Wizard"
486msgctxt "Button: Go back one page in the Wizard"
469msgid "Back"
487msgid "Back"
470−msgstr ""
488+msgstr "Precedent"
471
489
472#: qml/Wizard/Pages/10-welcome.qml:27
490#: qml/Wizard/Pages/10-welcome.qml:27
473msgid "Language"
491msgid "Language"
@@ -480,32 +498,32 @@ msgstr ""
480#: qml/Wizard/Pages/passcode-desktop.qml:124
498#: qml/Wizard/Pages/passcode-desktop.qml:124
481#: qml/Wizard/Pages/password-set.qml:141
499#: qml/Wizard/Pages/password-set.qml:141
482msgid "Next"
500msgid "Next"
483−msgstr ""
501+msgstr "Seguent"
484
502
485#: qml/Wizard/Pages/30-wifi.qml:29
503#: qml/Wizard/Pages/30-wifi.qml:29
486msgid "Connect to Wi‑Fi"
504msgid "Connect to Wi‑Fi"
487−msgstr ""
505+msgstr "Se connecter al Wi-Fi"
488
506
489#: qml/Wizard/Pages/30-wifi.qml:130
507#: qml/Wizard/Pages/30-wifi.qml:130
490msgid "Connected"
508msgid "Connected"
491−msgstr ""
509+msgstr "Connectat"
492
510
493#: qml/Wizard/Pages/30-wifi.qml:163
511#: qml/Wizard/Pages/30-wifi.qml:163
494msgid "Available Wi-Fi networks"
512msgid "Available Wi-Fi networks"
495−msgstr ""
513+msgstr "Rets Wi-Fi disponiblas"
496
514
497#: qml/Wizard/Pages/30-wifi.qml:164
515#: qml/Wizard/Pages/30-wifi.qml:164
498msgid "No available Wi-Fi networks"
516msgid "No available Wi-Fi networks"
499−msgstr ""
517+msgstr "Cap de ret Wi-Fi pas disponibla"
500
518
501#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
519#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
502#: qml/Wizard/Pages/sim.qml:101
520#: qml/Wizard/Pages/sim.qml:101
503msgid "Skip"
521msgid "Skip"
504−msgstr ""
522+msgstr "Passar"
505
523
506#: qml/Wizard/Pages/40-location.qml:27
524#: qml/Wizard/Pages/40-location.qml:27
507msgid "Location Services"
525msgid "Location Services"
508−msgstr ""
526+msgstr "Servicis de localizacion"
509
527
510#: qml/Wizard/Pages/40-location.qml:83
528#: qml/Wizard/Pages/40-location.qml:83
511msgid ""
529msgid ""
@@ -516,12 +534,12 @@ msgstr ""
516#: qml/Wizard/Pages/40-location.qml:105
534#: qml/Wizard/Pages/40-location.qml:105
517#, qt-format
535#, qt-format
518msgid "By selecting this option you agree to the Nokia HERE %1."
536msgid "By selecting this option you agree to the Nokia HERE %1."
519−msgstr ""
537+msgstr "En seleccionant aquesta opcion, acceptatz los %1 de Nokia HERE."
520
538
521#: qml/Wizard/Pages/40-location.qml:106
539#: qml/Wizard/Pages/40-location.qml:106
522msgctxt "part of: Nokia HERE terms and conditions"
540msgctxt "part of: Nokia HERE terms and conditions"
523msgid "terms and conditions"
541msgid "terms and conditions"
524−msgstr ""
542+msgstr "condicions generalas d'utilizacion"
525
543
526#: qml/Wizard/Pages/40-location.qml:160
544#: qml/Wizard/Pages/40-location.qml:160
527msgid "GPS only"
545msgid "GPS only"
@@ -529,7 +547,7 @@ msgstr ""
529
547
530#: qml/Wizard/Pages/40-location.qml:214
548#: qml/Wizard/Pages/40-location.qml:214
531msgid "Don't use my location"
549msgid "Don't use my location"
532−msgstr ""
550+msgstr "Ne pas utilizar ma position"
533
551
534#: qml/Wizard/Pages/40-location.qml:260
552#: qml/Wizard/Pages/40-location.qml:260
535msgid "You can change it later in System Settings."
553msgid "You can change it later in System Settings."
@@ -537,7 +555,7 @@ msgstr ""
537
555
538#: qml/Wizard/Pages/50-timezone.qml:29
556#: qml/Wizard/Pages/50-timezone.qml:29
539msgid "Time Zone"
557msgid "Time Zone"
540−msgstr ""
558+msgstr "Fus orari"
541
559
542#: qml/Wizard/Pages/50-timezone.qml:178
560#: qml/Wizard/Pages/50-timezone.qml:178
543msgid "Enter your city"
561msgid "Enter your city"
@@ -572,7 +590,7 @@ msgstr ""
572
590
573#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
591#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
574msgid "Privacy Policy"
592msgid "Privacy Policy"
575−msgstr ""
593+msgstr "Politica de confidentialité"
576
594
577#: qml/Wizard/Pages/75-report-check.qml:26
595#: qml/Wizard/Pages/75-report-check.qml:26
578msgid "Help Us Improve"
596msgid "Help Us Improve"
@@ -600,7 +618,7 @@ msgstr ""
600
618
601#: qml/Wizard/Pages/here-terms.qml:25
619#: qml/Wizard/Pages/here-terms.qml:25
602msgid "Terms & Conditions"
620msgid "Terms & Conditions"
603−msgstr ""
621+msgstr "Condicions generalas d'utilizacion"
604
622
605#: qml/Wizard/Pages/here-terms.qml:69
623#: qml/Wizard/Pages/here-terms.qml:69
606msgid "Your device uses positioning technologies provided by HERE."
624msgid "Your device uses positioning technologies provided by HERE."
@@ -631,7 +649,7 @@ msgstr ""
631#: qml/Wizard/Pages/passcode-confirm.qml:43
649#: qml/Wizard/Pages/passcode-confirm.qml:43
632#: qml/Wizard/Pages/passcode-desktop.qml:80
650#: qml/Wizard/Pages/passcode-desktop.qml:80
633msgid "Confirm passcode"
651msgid "Confirm passcode"
634−msgstr ""
652+msgstr "Confirmatz vòstre còde"
635
653
636#: qml/Wizard/Pages/passcode-confirm.qml:45
654#: qml/Wizard/Pages/passcode-confirm.qml:45
637msgid "Incorrect passcode."
655msgid "Incorrect passcode."
@@ -701,7 +719,7 @@ msgstr ""
701
719
702#: qml/Wizard/Pages/sim.qml:59
720#: qml/Wizard/Pages/sim.qml:59
703msgid "Restart"
721msgid "Restart"
704−msgstr ""
722+msgstr "Reaviar"
705
723
706#: qml/Wizard/Pages/sim.qml:78
724#: qml/Wizard/Pages/sim.qml:78
707msgid "You won’t be able to make calls or use text messaging without a SIM."
725msgid "You won’t be able to make calls or use text messaging without a SIM."
@@ -734,3 +752,228 @@ msgstr ""
734#: qml/Wizard/PasswordMeter.qml:99
752#: qml/Wizard/PasswordMeter.qml:99
735msgid "Very weak password"
753msgid "Very weak password"
736msgstr ""
754msgstr ""
755+
756+#~ msgid "Unlock SIM"
757+#~ msgstr "Desverrolhar la carta SIM"
758+
759+#~ msgid "Roaming"
760+#~ msgstr "Roaming"
761+
762+#~ msgid "Are you sure you want to shut down?"
763+#~ msgstr "Sètz segur que volètz atudar ?"
764+
765+#~ msgid "Without it, you won’t be able to make calls or use text messaging."
766+#~ msgstr ""
767+#~ "Sans elle, vous ne serez pas en mesura de passer dels apèls o de mandar des "
768+#~ "SMS."
769+
770+#~ msgid "Welcome to your Ubuntu phone."
771+#~ msgstr "Benvenguda sus vòstre telefòn Ubuntu."
772+
773+#~ msgid "Let’s get started."
774+#~ msgstr "Commençons."
775+
776+#~ msgid "Continue"
777+#~ msgstr "Contunhar"
778+
779+#~ msgid "Lock security"
780+#~ msgstr "Seguretat de verrolhatge"
781+
782+#~ msgid "Please select how you’d like to unlock your phone."
783+#~ msgstr "Veuillez seleccionar comment desiratz desverrolhar vòstre telefòn."
784+
785+#~ msgid "Available networks…"
786+#~ msgstr "Rets disponibles..."
787+
788+#~ msgid "Improving your experience"
789+#~ msgstr "Amélioration de votre expérience"
790+
791+#~ msgid "Not at all"
792+#~ msgstr "Pas del tout"
793+
794+#~ msgid "No available networks."
795+#~ msgstr "Aucun ret disponible."
796+
797+#~ msgid "Using GPS only (less accurate)"
798+#~ msgstr "Utilizacion del GPS solament (mens précis)"
799+
800+#~ msgid "Add a SIM card and restart your device"
801+#~ msgstr "Apondètz una carta SIM e redémarrez votre aparelh"
802+
803+#~ msgid "Hi!"
804+#~ msgstr "Salut !"
805+
806+#~ msgid "You can change your mind later in <b>System Settings</b>."
807+#~ msgstr "Podètz cambiar d'avis pus tard dins les <b>Paramètres Sistèma</b>."
808+
809+#~ msgid ""
810+#~ "Your phone is set up to automatically report errors to Canonical and its "
811+#~ "partners, the makers of the operating system."
812+#~ msgstr ""
813+#~ "Vòstre telefòn es reglat per mandar automaticament des rapòrts d'error à "
814+#~ "Canonical e a ses partenaires, les fabricants del sistèma operatiu."
815+
816+#~ msgid ""
817+#~ "This can be disabled in <b>System Settings</b> under <b>Security &amp; "
818+#~ "Privacy</b>"
819+#~ msgstr ""
820+#~ "Aquò benlèu desactivat dins les <b>Paramètres sistèma</b> jos <b>Seguretat "
821+#~ "&amp; vida privada</b>"
822+
823+#~ msgid "Nice work!"
824+#~ msgstr "Beau trabalh !"
825+
826+#~ msgid "All done"
827+#~ msgstr "Ça y est"
828+
829+#~ msgid "Finish"
830+#~ msgstr "Acabar"
831+
832+#~ msgid "Your phone is now ready to use."
833+#~ msgstr "Vòstre telefòn es ara prèst a èsser utilizat."
834+
835+#~ msgid "Choose your passcode"
836+#~ msgstr "Causissètz vòstre còde"
837+
838+#~ msgid "Please try again."
839+#~ msgstr "Ensajatz tornamai."
840+
841+#~ msgid "Let the phone detect your location:"
842+#~ msgstr "Daissar lo telefòn detectar vòstra posicion :"
843+
844+#~ msgid ""
845+#~ "By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
846+#~ "conditions</a>."
847+#~ msgstr ""
848+#~ "En seleccionnant aquesta opcion, acceptatz las <a href='#'>conditions "
849+#~ "generalas d'utilizacion</a> de Nokia HERE."
850+
851+#~ msgid "Location"
852+#~ msgstr "Posicion"
853+
854+#~ msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
855+#~ msgstr ""
856+#~ "Utilizacion des informations del GPS, del Wi-Fi anonimizat e de la ret "
857+#~ "cellulaire (recommandé)"
858+
859+#, qt-format
860+#~ msgid "〈 %1"
861+#~ msgstr "〈 %1"
862+
863+#, qt-format
864+#~ msgid "%1 〉"
865+#~ msgstr "%1 〉"
866+
867+#~ msgid "Confirm passphrase"
868+#~ msgstr "Confirmez votre frasa secreta"
869+
870+#~ msgid "Passphrase must be 4 characters long"
871+#~ msgstr "La frasa secreta deu comportar 4 caractèrs"
872+
873+#~ msgid "This action does different things for different apps"
874+#~ msgstr "Aquesta accion fait diferentas choses per diferentas applications"
875+
876+#~ msgid "You almost got it!"
877+#~ msgstr "Vous y êtes presque !"
878+
879+#~ msgid "Short swipe from the left edge."
880+#~ msgstr "Lisatz doucement a partir del bord esquèrra."
881+
882+#~ msgid "Open the launcher"
883+#~ msgstr "Ouvrez lo aviador"
884+
885+#~ msgid "Tap here to continue."
886+#~ msgstr "Quichatz aicí per contunhar."
887+
888+#~ msgid "These are the shortcuts to favorite apps"
889+#~ msgstr "Son los acorchis cap a vos applications favorites"
890+
891+#~ msgid "Swipe up from the bottom edge."
892+#~ msgstr "Lisatz cap amont a partir del bord inferior."
893+
894+#~ msgid "Open special menus"
895+#~ msgstr "Dobrir les menus especials"
896+
897+#~ msgid "Tap here to finish."
898+#~ msgstr "Quichatz aicí per terminer."
899+
900+#~ msgid "To view open apps"
901+#~ msgstr "Per veire las aplicacions dobèrtas"
902+
903+#~ msgid "View all your running tasks."
904+#~ msgstr "Veire totas les prètzfaches en cors."
905+
906+#~ msgid "Long swipe from the right edge."
907+#~ msgstr "Lisatz en ara a partir del bord droit."
908+
909+#~ msgid "Try again."
910+#~ msgstr "Réessayez."
911+
912+#~ msgctxt "Button: Shut down the system"
913+#~ msgid "Shut down"
914+#~ msgstr "Atudar"
915+
916+#~ msgctxt "Title: Reboot/Shut down dialog"
917+#~ msgid "Shut down"
918+#~ msgstr "Atudar"
919+
920+#~ msgctxt "Button: Reboot the system"
921+#~ msgid "Reboot"
922+#~ msgstr "Reaviar"
923+
924+#~ msgctxt "Label: Type of security method"
925+#~ msgid "Swipe"
926+#~ msgstr "Lisament"
927+
928+#~ msgctxt "Label: Description of security method"
929+#~ msgid "4 digits only"
930+#~ msgstr "4 chifras solament"
931+
932+#~ msgctxt "Label: Type of security method"
933+#~ msgid "Passcode"
934+#~ msgstr "Code"
935+
936+#~ msgctxt "Label: Description of security method"
937+#~ msgid "No security"
938+#~ msgstr "Aucune seguretat"
939+
940+#~ msgctxt "Label: Type of security method"
941+#~ msgid "Passphrase"
942+#~ msgstr "Frasa secreta"
943+
944+#~ msgctxt "Label: Description of security method"
945+#~ msgid "Numbers and letters"
946+#~ msgstr "Chifras e lettres"
947+
948+#~ msgid "%a %H:%M"
949+#~ msgstr "%a %H:%M"
950+
951+#~ msgid "%a %d %b %H:%M"
952+#~ msgstr "%a %b %d %H:%M"
953+
954+#~ msgid "%a %l:%M %p"
955+#~ msgstr "%a %l:%M"
956+
957+#~ msgid "Tomorrow %l:%M %p"
958+#~ msgstr "Demain %l:%M"
959+
960+#~ msgid "%l:%M %p"
961+#~ msgstr "%l:%M"
962+
963+#~ msgid "Yesterday %l:%M %p"
964+#~ msgstr "Ièr %l:%M"
965+
966+#~ msgid "Tomorrow %H:%M"
967+#~ msgstr "Demain %H:%M"
968+
969+#~ msgid "%H:%M"
970+#~ msgstr "%H:%M"
971+
972+#~ msgid "Yesterday %H:%M"
973+#~ msgstr "Ièr %H:%M"
974+
975+#~ msgid "%a %d %b %l:%M %p"
976+#~ msgstr "%a %b %d %l:%M"
977+
978+#~ msgid "Call back"
979+#~ msgstr "Rapelar"
po/or.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-03-21 05:28+0000\n"
11"PO-Revision-Date: 2015-03-21 05:28+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Oriya <or@li.org>\n"
13"Language-Team: Oriya <or@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/pa.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-04-24 04:29+0000\n"
11"PO-Revision-Date: 2015-04-24 04:29+0000\n"
12"Last-Translator: Gursharnjit_Singh <ubuntuser13@gmail.com>\n"
12"Last-Translator: Gursharnjit_Singh <ubuntuser13@gmail.com>\n"
13"Language-Team: Punjabi <pa@li.org>\n"
13"Language-Team: Punjabi <pa@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -446,19 +446,19 @@ msgstr ""
446msgid "Swipe up to manage the app"
446msgid "Swipe up to manage the app"
447msgstr ""
447msgstr ""
448
448
449−#: qml/Tutorial/TutorialLeft.qml:47
450−msgid "Swipe from the left edge to open the launcher"
451−msgstr ""
452−
453#: qml/Tutorial/TutorialLeftLong.qml:47
449#: qml/Tutorial/TutorialLeftLong.qml:47
454msgid "Long swipe from the left edge to open the Today scope"
450msgid "Long swipe from the left edge to open the Today scope"
455msgstr ""
451msgstr ""
456
452
457−#: qml/Tutorial/TutorialRight.qml:54
453+#: qml/Tutorial/TutorialLeft.qml:47
458−msgid "Hover your mouse on the right edge to view your open apps"
454+msgid "Swipe from the left edge to open the launcher"
459msgstr ""
455msgstr ""
460
456
461#: qml/Tutorial/TutorialRight.qml:55
457#: qml/Tutorial/TutorialRight.qml:55
458+msgid "Push your mouse against the right edge to view your open apps"
459+msgstr ""
460+
461+#: qml/Tutorial/TutorialRight.qml:56
462msgid "Short or long swipe from the right edge to view your open apps"
462msgid "Short or long swipe from the right edge to view your open apps"
463msgstr ""
463msgstr ""
464
464
po/pl.po+76−56
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2016-03-28 20:45+0000\n"
11"PO-Revision-Date: 2016-03-28 20:45+0000\n"
12"Last-Translator: Krzysztof Tataradziński <Unknown>\n"
12"Last-Translator: Krzysztof Tataradziński <Unknown>\n"
13"Language-Team: Polish <pl@li.org>\n"
13"Language-Team: Polish <pl@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%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: 2016-03-29 05:41+0000\n"
19+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
20−"X-Generator: Launchpad (build 17967)\n"
20+"X-Generator: Launchpad (build 17995)\n"
21
21
22#: plugins/IntegratedLightDM/Greeter.cpp:112
22#: plugins/IntegratedLightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
@@ -140,6 +140,7 @@ msgctxt ""
140"Re-dock means connect the device again to an external screen/mouse/keyboard"
140"Re-dock means connect the device again to an external screen/mouse/keyboard"
141msgid "Re-dock, save your work and close these apps to continue."
141msgid "Re-dock, save your work and close these apps to continue."
142msgstr ""
142msgstr ""
143+"Zadokuj ponownie, zapisz co niezapisane i zamknij te aplikacje by kontynuować"
143
144
144#: qml/Components/ModeSwitchWarningDialog.qml:63
145#: qml/Components/ModeSwitchWarningDialog.qml:63
145msgid "Or force close now (unsaved data will be lost)."
146msgid "Or force close now (unsaved data will be lost)."
@@ -182,11 +183,11 @@ msgstr "Dodaj do ulubionych"
182
183
183#: qml/Dash/FiltersPopover.qml:60
184#: qml/Dash/FiltersPopover.qml:60
184msgid "Refine your results"
185msgid "Refine your results"
185−msgstr ""
186+msgstr "Przefiltruj wyniki"
186
187
187#: qml/Dash/FiltersPopover.qml:69
188#: qml/Dash/FiltersPopover.qml:69
188msgid "Reset"
189msgid "Reset"
189−msgstr ""
190+msgstr "Reset"
190
191
191#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
192#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
192msgid "See less"
193msgid "See less"
@@ -434,47 +435,51 @@ msgstr ""
434
435
435#: qml/Tutorial/TutorialBottom.qml:78
436#: qml/Tutorial/TutorialBottom.qml:78
436msgid "Swipe up to add a contact"
437msgid "Swipe up to add a contact"
437−msgstr ""
438+msgstr "Przeciągnij w górę, by dodać kontakt"
438
439
439#: qml/Tutorial/TutorialBottom.qml:80
440#: qml/Tutorial/TutorialBottom.qml:80
440msgid "Swipe up for favorite calculations"
441msgid "Swipe up for favorite calculations"
441−msgstr ""
442+msgstr "Przeciągnij w górę, by wyświetlić ostatnie obliczenia"
442
443
443#: qml/Tutorial/TutorialBottom.qml:82
444#: qml/Tutorial/TutorialBottom.qml:82
444msgid "Swipe up for recent calls"
445msgid "Swipe up for recent calls"
445−msgstr ""
446+msgstr "Przeciągnij w górę, by wyświetlić ostatnie połączenia"
446
447
447#: qml/Tutorial/TutorialBottom.qml:84
448#: qml/Tutorial/TutorialBottom.qml:84
448msgid "Swipe up to create a message"
449msgid "Swipe up to create a message"
449−msgstr ""
450+msgstr "Przeciągnij w górę, by napisać nową wiadomość"
450
451
451#: qml/Tutorial/TutorialBottom.qml:85
452#: qml/Tutorial/TutorialBottom.qml:85
452msgid "Swipe up to manage the app"
453msgid "Swipe up to manage the app"
453−msgstr ""
454+msgstr "Przeciągnij w górę, by zarządzać aplikacją"
454−
455−#: qml/Tutorial/TutorialLeft.qml:47
456−msgid "Swipe from the left edge to open the launcher"
457−msgstr ""
458
455
459#: qml/Tutorial/TutorialLeftLong.qml:47
456#: qml/Tutorial/TutorialLeftLong.qml:47
460msgid "Long swipe from the left edge to open the Today scope"
457msgid "Long swipe from the left edge to open the Today scope"
461−msgstr ""
458+msgstr "Długie przeciągnięcie od lewej krawędzi otwiera aplikacje soczewek"
462
459
463−#: qml/Tutorial/TutorialRight.qml:54
460+#: qml/Tutorial/TutorialLeft.qml:47
464−msgid "Hover your mouse on the right edge to view your open apps"
461+msgid "Swipe from the left edge to open the launcher"
465−msgstr ""
462+msgstr "Przeciągnięcie od lewej krawędzi otwiera pasek uruchamiania"
466
463
467#: qml/Tutorial/TutorialRight.qml:55
464#: qml/Tutorial/TutorialRight.qml:55
465+msgid "Push your mouse against the right edge to view your open apps"
466+msgstr ""
467+
468+#: qml/Tutorial/TutorialRight.qml:56
468msgid "Short or long swipe from the right edge to view your open apps"
469msgid "Short or long swipe from the right edge to view your open apps"
469msgstr ""
470msgstr ""
471+"Długie lub krótkie przeciągnięcie od prawej krawędzi wyświetla otwarte "
472+"aplikacje"
470
473
471#: qml/Tutorial/TutorialTop.qml:53
474#: qml/Tutorial/TutorialTop.qml:53
472msgid "Swipe from the top right edge to open the notification bar"
475msgid "Swipe from the top right edge to open the notification bar"
473−msgstr ""
476+msgstr "Przeciągnij z prawego, górnego rogu, by otworzyć menu powiadomień"
474
477
475#: qml/Tutorial/TutorialTop.qml:54
478#: qml/Tutorial/TutorialTop.qml:54
476msgid "Swipe from the top edge to open the notification bar"
479msgid "Swipe from the top edge to open the notification bar"
477msgstr ""
480msgstr ""
481+"Połóż palec na wybraną ikonę górnego paska powiadomień i przeciągnij go w "
482+"dół, by otworzyć żądane menu"
478
483
479#: qml/Wizard/Page.qml:54
484#: qml/Wizard/Page.qml:54
480msgctxt "Button: Go back one page in the Wizard"
485msgctxt "Button: Go back one page in the Wizard"
@@ -524,16 +529,19 @@ msgid ""
524"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
529"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
525"(recommended)"
530"(recommended)"
526msgstr ""
531msgstr ""
532+"Anonimowe ustalanie lokalizacji za pomocą GPS, Wi-Fi oraz GSM (zalecane)"
527
533
528#: qml/Wizard/Pages/40-location.qml:105
534#: qml/Wizard/Pages/40-location.qml:105
529#, qt-format
535#, qt-format
530msgid "By selecting this option you agree to the Nokia HERE %1."
536msgid "By selecting this option you agree to the Nokia HERE %1."
531msgstr ""
537msgstr ""
538+"Zaznaczając tę opcję zgadzasz się z postanowieniami zasad użytkowania Nokia "
539+"HERE %1"
532
540
533#: qml/Wizard/Pages/40-location.qml:106
541#: qml/Wizard/Pages/40-location.qml:106
534msgctxt "part of: Nokia HERE terms and conditions"
542msgctxt "part of: Nokia HERE terms and conditions"
535msgid "terms and conditions"
543msgid "terms and conditions"
536−msgstr ""
544+msgstr "Zasady użytkowania"
537
545
538#: qml/Wizard/Pages/40-location.qml:160
546#: qml/Wizard/Pages/40-location.qml:160
539msgid "GPS only"
547msgid "GPS only"
@@ -541,11 +549,11 @@ msgstr "Tylko GPS"
541
549
542#: qml/Wizard/Pages/40-location.qml:214
550#: qml/Wizard/Pages/40-location.qml:214
543msgid "Don't use my location"
551msgid "Don't use my location"
544−msgstr ""
552+msgstr "Nie sprawdzaj mojej lokalizacji"
545
553
546#: qml/Wizard/Pages/40-location.qml:260
554#: qml/Wizard/Pages/40-location.qml:260
547msgid "You can change it later in System Settings."
555msgid "You can change it later in System Settings."
548−msgstr ""
556+msgstr "Możesz to później zmienić w ustawianiach systemu"
549
557
550#: qml/Wizard/Pages/50-timezone.qml:29
558#: qml/Wizard/Pages/50-timezone.qml:29
551msgid "Time Zone"
559msgid "Time Zone"
@@ -553,15 +561,15 @@ msgstr "Strefa czasowa"
553
561
554#: qml/Wizard/Pages/50-timezone.qml:178
562#: qml/Wizard/Pages/50-timezone.qml:178
555msgid "Enter your city"
563msgid "Enter your city"
556−msgstr ""
564+msgstr "Podaj przybliżoną lokalizację"
557
565
558#: qml/Wizard/Pages/60-account.qml:24
566#: qml/Wizard/Pages/60-account.qml:24
559msgid "Personalize Your Device"
567msgid "Personalize Your Device"
560−msgstr ""
568+msgstr "Personalizacja urządzenia"
561
569
562#: qml/Wizard/Pages/60-account.qml:48
570#: qml/Wizard/Pages/60-account.qml:48
563msgid "Preferred Name"
571msgid "Preferred Name"
564−msgstr ""
572+msgstr "Imię"
565
573
566#: qml/Wizard/Pages/70-passwd-type.qml:39
574#: qml/Wizard/Pages/70-passwd-type.qml:39
567msgid "Lock Screen"
575msgid "Lock Screen"
@@ -570,17 +578,17 @@ msgstr "Blokada ekranu"
570#: qml/Wizard/Pages/70-passwd-type.qml:101
578#: qml/Wizard/Pages/70-passwd-type.qml:101
571msgctxt "Label: Type of security method"
579msgctxt "Label: Type of security method"
572msgid "Create new password"
580msgid "Create new password"
573−msgstr ""
581+msgstr "Hasło"
574
582
575#: qml/Wizard/Pages/70-passwd-type.qml:103
583#: qml/Wizard/Pages/70-passwd-type.qml:103
576msgctxt "Label: Type of security method"
584msgctxt "Label: Type of security method"
577msgid "Create passcode (numbers only)"
585msgid "Create passcode (numbers only)"
578−msgstr ""
586+msgstr "Kod (tylko cyfry)"
579
587
580#: qml/Wizard/Pages/70-passwd-type.qml:105
588#: qml/Wizard/Pages/70-passwd-type.qml:105
581msgctxt "Label: Type of security method"
589msgctxt "Label: Type of security method"
582msgid "No lock code"
590msgid "No lock code"
583−msgstr ""
591+msgstr "Brak zabezpieczeń"
584
592
585#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
593#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
586msgid "Privacy Policy"
594msgid "Privacy Policy"
@@ -588,11 +596,14 @@ msgstr "Polityka prywatności"
588
596
589#: qml/Wizard/Pages/75-report-check.qml:26
597#: qml/Wizard/Pages/75-report-check.qml:26
590msgid "Help Us Improve"
598msgid "Help Us Improve"
591−msgstr ""
599+msgstr "Pomóż ulepszać system"
592
600
593#: qml/Wizard/Pages/75-report-check.qml:59
601#: qml/Wizard/Pages/75-report-check.qml:59
594msgid "Improve system performance by sending us crashes and error reports."
602msgid "Improve system performance by sending us crashes and error reports."
595msgstr ""
603msgstr ""
604+"Twoje urządzenie może automatycznie wysyłać deweloperom raporty o problemach "
605+"w funkcjonowaniu systemu oraz aplikacji. Dzięki Tobie następna aktualizacja "
606+"może je rozwiązać."
596
607
597#: qml/Wizard/Pages/75-report-check.qml:60
608#: qml/Wizard/Pages/75-report-check.qml:60
598msgid "Privacy policy"
609msgid "Privacy policy"
@@ -604,7 +615,7 @@ msgstr "Witamy w Ubuntu"
604
615
605#: qml/Wizard/Pages/80-finished.qml:104
616#: qml/Wizard/Pages/80-finished.qml:104
606msgid "You are ready to use your device now"
617msgid "You are ready to use your device now"
607−msgstr ""
618+msgstr "Twoje urządzenie jest gotowe do działania!"
608
619
609#: qml/Wizard/Pages/80-finished.qml:124
620#: qml/Wizard/Pages/80-finished.qml:124
610msgid "Get Started"
621msgid "Get Started"
@@ -616,7 +627,7 @@ msgstr "Zasady i warunki"
616
627
617#: qml/Wizard/Pages/here-terms.qml:69
628#: qml/Wizard/Pages/here-terms.qml:69
618msgid "Your device uses positioning technologies provided by HERE."
629msgid "Your device uses positioning technologies provided by HERE."
619−msgstr ""
630+msgstr "Twoje urządzenie odnajduje lokalizację za pomocą serwisu HERE."
620
631
621#: qml/Wizard/Pages/here-terms.qml:81
632#: qml/Wizard/Pages/here-terms.qml:81
622msgid ""
633msgid ""
@@ -624,21 +635,25 @@ msgid ""
624"collects information about nearby cell towers and Wi-Fi hotspots around your "
635"collects information about nearby cell towers and Wi-Fi hotspots around your "
625"current location whenever your position is being found."
636"current location whenever your position is being found."
626msgstr ""
637msgstr ""
638+"Aby była ona jak najdokładniejsza, HERE szuka informacji także o nadajnikach "
639+"sieci GSM oraz sieciach Wi-Fi."
627
640
628#: qml/Wizard/Pages/here-terms.qml:93
641#: qml/Wizard/Pages/here-terms.qml:93
629msgid ""
642msgid ""
630"The information collected is used to analyze the service and to improve the "
643"The information collected is used to analyze the service and to improve the "
631"use of service, but not to identify you personally."
644"use of service, but not to identify you personally."
632msgstr ""
645msgstr ""
646+"Dzięki informacjom o dokładnym położeniu usługi lokalizacji działają lepiej. "
647+"Są one anonimowe i nie mają na celu identyfikacji użytkownika."
633
648
634#: qml/Wizard/Pages/here-terms.qml:106
649#: qml/Wizard/Pages/here-terms.qml:106
635#, qt-format
650#, qt-format
636msgid "By continuing, you agree to the HERE platform %1 and %2."
651msgid "By continuing, you agree to the HERE platform %1 and %2."
637−msgstr ""
652+msgstr "Kontynuując akcpetujesz %1 oraz %2."
638
653
639#: qml/Wizard/Pages/here-terms.qml:107
654#: qml/Wizard/Pages/here-terms.qml:107
640msgid "Service Terms"
655msgid "Service Terms"
641−msgstr ""
656+msgstr "Zasady"
642
657
643#: qml/Wizard/Pages/passcode-confirm.qml:43
658#: qml/Wizard/Pages/passcode-confirm.qml:43
644#: qml/Wizard/Pages/passcode-desktop.qml:80
659#: qml/Wizard/Pages/passcode-desktop.qml:80
@@ -647,69 +662,69 @@ msgstr "Potwierdź kod"
647
662
648#: qml/Wizard/Pages/passcode-confirm.qml:45
663#: qml/Wizard/Pages/passcode-confirm.qml:45
649msgid "Incorrect passcode."
664msgid "Incorrect passcode."
650−msgstr ""
665+msgstr "Niepoprawny kod"
651
666
652#: qml/Wizard/Pages/passcode-confirm.qml:45
667#: qml/Wizard/Pages/passcode-confirm.qml:45
653msgctxt "Enter the passcode again"
668msgctxt "Enter the passcode again"
654msgid "Please re-enter."
669msgid "Please re-enter."
655−msgstr ""
670+msgstr "Spróbuj ponownie"
656
671
657#: qml/Wizard/Pages/passcode-desktop.qml:30
672#: qml/Wizard/Pages/passcode-desktop.qml:30
658msgid "Lock Screen Passcode"
673msgid "Lock Screen Passcode"
659−msgstr ""
674+msgstr "Kod blokady ekranu"
660
675
661#: qml/Wizard/Pages/passcode-desktop.qml:56
676#: qml/Wizard/Pages/passcode-desktop.qml:56
662msgid "Enter 4 numbers to setup your passcode"
677msgid "Enter 4 numbers to setup your passcode"
663−msgstr ""
678+msgstr "Podaj 4 cyfry nowego kodu"
664
679
665#: qml/Wizard/Pages/passcode-desktop.qml:65
680#: qml/Wizard/Pages/passcode-desktop.qml:65
666#: qml/Wizard/Pages/passcode-set.qml:54
681#: qml/Wizard/Pages/passcode-set.qml:54
667msgid "Choose passcode"
682msgid "Choose passcode"
668−msgstr ""
683+msgstr "Nowy kod"
669
684
670#: qml/Wizard/Pages/passcode-desktop.qml:105
685#: qml/Wizard/Pages/passcode-desktop.qml:105
671msgid "Passcode too short"
686msgid "Passcode too short"
672−msgstr ""
687+msgstr "Kod za krótki"
673
688
674#: qml/Wizard/Pages/passcode-desktop.qml:107
689#: qml/Wizard/Pages/passcode-desktop.qml:107
675msgid "Passcodes match"
690msgid "Passcodes match"
676−msgstr ""
691+msgstr "Kody zgodne"
677
692
678#: qml/Wizard/Pages/passcode-desktop.qml:109
693#: qml/Wizard/Pages/passcode-desktop.qml:109
679msgid "Passcodes do not match"
694msgid "Passcodes do not match"
680−msgstr ""
695+msgstr "Kody nie zgadzają się"
681
696
682#: qml/Wizard/Pages/passcode-set.qml:62
697#: qml/Wizard/Pages/passcode-set.qml:62
683msgid "Passcode must be 4 characters long"
698msgid "Passcode must be 4 characters long"
684−msgstr ""
699+msgstr "Kod musi składać się z 4 cyfr"
685
700
686#: qml/Wizard/Pages/password-set.qml:30
701#: qml/Wizard/Pages/password-set.qml:30
687msgid "Lock Screen Password"
702msgid "Lock Screen Password"
688−msgstr ""
703+msgstr "Hasło blokady ekranu"
689
704
690#: qml/Wizard/Pages/password-set.qml:61
705#: qml/Wizard/Pages/password-set.qml:61
691msgid "Enter at least 8 characters"
706msgid "Enter at least 8 characters"
692−msgstr ""
707+msgstr "Podaj co najmniej 8 znaków"
693
708
694#: qml/Wizard/Pages/password-set.qml:73
709#: qml/Wizard/Pages/password-set.qml:73
695msgid "Choose password"
710msgid "Choose password"
696−msgstr ""
711+msgstr "Nowe hasło"
697
712
698#: qml/Wizard/Pages/password-set.qml:103
713#: qml/Wizard/Pages/password-set.qml:103
699msgid "Confirm password"
714msgid "Confirm password"
700−msgstr ""
715+msgstr "Potwierdź hasło"
701
716
702#: qml/Wizard/Pages/sim.qml:27
717#: qml/Wizard/Pages/sim.qml:27
703msgid "No SIM card installed"
718msgid "No SIM card installed"
704−msgstr ""
719+msgstr "Brak karty SIM"
705
720
706#: qml/Wizard/Pages/sim.qml:54
721#: qml/Wizard/Pages/sim.qml:54
707msgid "SIM card added"
722msgid "SIM card added"
708−msgstr ""
723+msgstr "Znaleziono kartę SIM"
709
724
710#: qml/Wizard/Pages/sim.qml:55
725#: qml/Wizard/Pages/sim.qml:55
711msgid "You must restart the device to access the mobile network."
726msgid "You must restart the device to access the mobile network."
712−msgstr ""
727+msgstr "Aby móc z niej korzystać należy uruchomić ponownie urządzenie."
713
728
714#: qml/Wizard/Pages/sim.qml:59
729#: qml/Wizard/Pages/sim.qml:59
715msgid "Restart"
730msgid "Restart"
@@ -718,34 +733,36 @@ msgstr "Uruchom ponownie"
718#: qml/Wizard/Pages/sim.qml:78
733#: qml/Wizard/Pages/sim.qml:78
719msgid "You won’t be able to make calls or use text messaging without a SIM."
734msgid "You won’t be able to make calls or use text messaging without a SIM."
720msgstr ""
735msgstr ""
736+"Brak karty SIM nie pozwala na wysyłanie wiadomości SMS oraz wykonywanie "
737+"połączeń przez sieć GSM."
721
738
722#: qml/Wizard/Pages/sim.qml:90
739#: qml/Wizard/Pages/sim.qml:90
723msgid "To proceed with no SIM tap Skip."
740msgid "To proceed with no SIM tap Skip."
724−msgstr ""
741+msgstr "Pomiń, by kontynuować bez karty SIM"
725
742
726#: qml/Wizard/PasswordMeter.qml:87
743#: qml/Wizard/PasswordMeter.qml:87
727msgid "Passwords match"
744msgid "Passwords match"
728−msgstr ""
745+msgstr "Hasła zgodne"
729
746
730#: qml/Wizard/PasswordMeter.qml:89
747#: qml/Wizard/PasswordMeter.qml:89
731msgid "Passwords do not match"
748msgid "Passwords do not match"
732−msgstr ""
749+msgstr "Hasła nie zgadzają się."
733
750
734#: qml/Wizard/PasswordMeter.qml:93
751#: qml/Wizard/PasswordMeter.qml:93
735msgid "Strong password"
752msgid "Strong password"
736−msgstr ""
753+msgstr "Silne hasło"
737
754
738#: qml/Wizard/PasswordMeter.qml:95
755#: qml/Wizard/PasswordMeter.qml:95
739msgid "Fair password"
756msgid "Fair password"
740−msgstr ""
757+msgstr "Dostateczne hasło"
741
758
742#: qml/Wizard/PasswordMeter.qml:97
759#: qml/Wizard/PasswordMeter.qml:97
743msgid "Weak password"
760msgid "Weak password"
744−msgstr ""
761+msgstr "Słabe hasło"
745
762
746#: qml/Wizard/PasswordMeter.qml:99
763#: qml/Wizard/PasswordMeter.qml:99
747msgid "Very weak password"
764msgid "Very weak password"
748−msgstr ""
765+msgstr "Bardzo słabe hasło"
749
766
750#~ msgid "Confirm"
767#~ msgid "Confirm"
751#~ msgstr "Potwierdź"
768#~ msgstr "Potwierdź"
@@ -1049,3 +1066,6 @@ msgstr ""
1049
1066
1050#~ msgid "Call back"
1067#~ msgid "Call back"
1051#~ msgstr "Oddzwoń"
1068#~ msgstr "Oddzwoń"
1069+
1070+#~ msgid "Hover your mouse on the right edge to view your open apps"
1071+#~ msgstr "Skieruj mysz do prawej krawędzi, by zobaczyć otwarte aplikacje"
po/pt.po+88−85
@@ -7,16 +7,16 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2016-02-18 01:11+0000\n"
11"PO-Revision-Date: 2016-02-18 01:11+0000\n"
12−"Last-Translator: Ivo Xavier <ivofernandes12@gmail.com>\n"
12+"Last-Translator: Ivo Xavier <ivoxavier.8@gmail.com>\n"
13"Language-Team: Portuguese <pt@li.org>\n"
13"Language-Team: Portuguese <pt@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -187,11 +187,11 @@ msgstr "Adicionar aos favoritos"
187
187
188#: qml/Dash/FiltersPopover.qml:60
188#: qml/Dash/FiltersPopover.qml:60
189msgid "Refine your results"
189msgid "Refine your results"
190−msgstr ""
190+msgstr "Redefina os seus resultados"
191
191
192#: qml/Dash/FiltersPopover.qml:69
192#: qml/Dash/FiltersPopover.qml:69
193msgid "Reset"
193msgid "Reset"
194−msgstr ""
194+msgstr "Repor"
195
195
196#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
196#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
197msgid "See less"
197msgid "See less"
@@ -208,11 +208,11 @@ msgstr "Procurar"
208
208
209#: qml/Dash/PageHeaderExtraPanel.qml:55
209#: qml/Dash/PageHeaderExtraPanel.qml:55
210msgid "Recent Searches"
210msgid "Recent Searches"
211−msgstr ""
211+msgstr "Procuras recentes"
212
212
213#: qml/Dash/PageHeaderExtraPanel.qml:66
213#: qml/Dash/PageHeaderExtraPanel.qml:66
214msgid "Clear All"
214msgid "Clear All"
215−msgstr ""
215+msgstr "Limpar todos"
216
216
217#: qml/Dash/Previews/PreviewActionCombo.qml:35
217#: qml/Dash/Previews/PreviewActionCombo.qml:35
218msgid "More..."
218msgid "More..."
@@ -431,51 +431,51 @@ msgstr "Ligar de volta"
431
431
432#: qml/Stages/SideStage.qml:76
432#: qml/Stages/SideStage.qml:76
433msgid "Drag using 3 fingers any application from one window to the other"
433msgid "Drag using 3 fingers any application from one window to the other"
434−msgstr ""
434+msgstr "Arraste qualquer app usando três dedos de uma janela para outra"
435
435
436#: qml/Tutorial/TutorialBottom.qml:78
436#: qml/Tutorial/TutorialBottom.qml:78
437msgid "Swipe up to add a contact"
437msgid "Swipe up to add a contact"
438−msgstr ""
438+msgstr "Deslize para adicionar um contacto"
439
439
440#: qml/Tutorial/TutorialBottom.qml:80
440#: qml/Tutorial/TutorialBottom.qml:80
441msgid "Swipe up for favorite calculations"
441msgid "Swipe up for favorite calculations"
442−msgstr ""
442+msgstr "Deslize para cima para marcar os seus cálculos"
443
443
444#: qml/Tutorial/TutorialBottom.qml:82
444#: qml/Tutorial/TutorialBottom.qml:82
445msgid "Swipe up for recent calls"
445msgid "Swipe up for recent calls"
446−msgstr ""
446+msgstr "Deslize para cima para ver as chamadas recentes"
447
447
448#: qml/Tutorial/TutorialBottom.qml:84
448#: qml/Tutorial/TutorialBottom.qml:84
449msgid "Swipe up to create a message"
449msgid "Swipe up to create a message"
450−msgstr ""
450+msgstr "Deslize para cima para criar uma mensagem nova"
451
451
452#: qml/Tutorial/TutorialBottom.qml:85
452#: qml/Tutorial/TutorialBottom.qml:85
453msgid "Swipe up to manage the app"
453msgid "Swipe up to manage the app"
454−msgstr ""
454+msgstr "Deslize para cima para gerir a app"
455−
456−#: qml/Tutorial/TutorialLeft.qml:47
457−msgid "Swipe from the left edge to open the launcher"
458−msgstr ""
459
455
460#: qml/Tutorial/TutorialLeftLong.qml:47
456#: qml/Tutorial/TutorialLeftLong.qml:47
461msgid "Long swipe from the left edge to open the Today scope"
457msgid "Long swipe from the left edge to open the Today scope"
462−msgstr ""
458+msgstr "Deslize longo da margem esquerda para abrir a scope Hoje"
463
459
464−#: qml/Tutorial/TutorialRight.qml:54
460+#: qml/Tutorial/TutorialLeft.qml:47
465−msgid "Hover your mouse on the right edge to view your open apps"
461+msgid "Swipe from the left edge to open the launcher"
466−msgstr ""
462+msgstr "Deslize da margem esquerda para abrir o Launcher"
467
463
468#: qml/Tutorial/TutorialRight.qml:55
464#: qml/Tutorial/TutorialRight.qml:55
469−msgid "Short or long swipe from the right edge to view your open apps"
465+msgid "Push your mouse against the right edge to view your open apps"
470msgstr ""
466msgstr ""
471
467
468+#: qml/Tutorial/TutorialRight.qml:56
469+msgid "Short or long swipe from the right edge to view your open apps"
470+msgstr "Deslize curto ou longo da margem direita para ver as apps abertas"
471+
472#: qml/Tutorial/TutorialTop.qml:53
472#: qml/Tutorial/TutorialTop.qml:53
473msgid "Swipe from the top right edge to open the notification bar"
473msgid "Swipe from the top right edge to open the notification bar"
474−msgstr ""
474+msgstr "Deslize da margem superior direita para abrir as notificações"
475
475
476#: qml/Tutorial/TutorialTop.qml:54
476#: qml/Tutorial/TutorialTop.qml:54
477msgid "Swipe from the top edge to open the notification bar"
477msgid "Swipe from the top edge to open the notification bar"
478−msgstr ""
478+msgstr "Deslize da margem esquerda para abrir as notificações"
479
479
480#: qml/Wizard/Page.qml:54
480#: qml/Wizard/Page.qml:54
481msgctxt "Button: Go back one page in the Wizard"
481msgctxt "Button: Go back one page in the Wizard"
@@ -484,7 +484,7 @@ msgstr "Retroceder"
484
484
485#: qml/Wizard/Pages/10-welcome.qml:27
485#: qml/Wizard/Pages/10-welcome.qml:27
486msgid "Language"
486msgid "Language"
487−msgstr ""
487+msgstr "Idioma"
488
488
489#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
489#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
490#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
490#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
@@ -493,7 +493,7 @@ msgstr ""
493#: qml/Wizard/Pages/passcode-desktop.qml:124
493#: qml/Wizard/Pages/passcode-desktop.qml:124
494#: qml/Wizard/Pages/password-set.qml:141
494#: qml/Wizard/Pages/password-set.qml:141
495msgid "Next"
495msgid "Next"
496−msgstr ""
496+msgstr "Próximo"
497
497
498#: qml/Wizard/Pages/30-wifi.qml:29
498#: qml/Wizard/Pages/30-wifi.qml:29
499msgid "Connect to Wi‑Fi"
499msgid "Connect to Wi‑Fi"
@@ -501,15 +501,15 @@ msgstr "Ligar ao Wi-Fi"
501
501
502#: qml/Wizard/Pages/30-wifi.qml:130
502#: qml/Wizard/Pages/30-wifi.qml:130
503msgid "Connected"
503msgid "Connected"
504−msgstr ""
504+msgstr "Ligado"
505
505
506#: qml/Wizard/Pages/30-wifi.qml:163
506#: qml/Wizard/Pages/30-wifi.qml:163
507msgid "Available Wi-Fi networks"
507msgid "Available Wi-Fi networks"
508−msgstr ""
508+msgstr "Redes Wi-Fi disponíveis"
509
509
510#: qml/Wizard/Pages/30-wifi.qml:164
510#: qml/Wizard/Pages/30-wifi.qml:164
511msgid "No available Wi-Fi networks"
511msgid "No available Wi-Fi networks"
512−msgstr ""
512+msgstr "Sem redes Wi-Fi disponíveis"
513
513
514#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
514#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
515#: qml/Wizard/Pages/sim.qml:101
515#: qml/Wizard/Pages/sim.qml:101
@@ -518,98 +518,101 @@ msgstr "Saltar"
518
518
519#: qml/Wizard/Pages/40-location.qml:27
519#: qml/Wizard/Pages/40-location.qml:27
520msgid "Location Services"
520msgid "Location Services"
521−msgstr ""
521+msgstr "Serviços de localização"
522
522
523#: qml/Wizard/Pages/40-location.qml:83
523#: qml/Wizard/Pages/40-location.qml:83
524msgid ""
524msgid ""
525"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
525"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
526"(recommended)"
526"(recommended)"
527msgstr ""
527msgstr ""
528+"Usar GPS, hotspots Wi-Fi e rede móvel anonimamente para detetar a sua "
529+"localização (recomendado)"
528
530
529#: qml/Wizard/Pages/40-location.qml:105
531#: qml/Wizard/Pages/40-location.qml:105
530#, qt-format
532#, qt-format
531msgid "By selecting this option you agree to the Nokia HERE %1."
533msgid "By selecting this option you agree to the Nokia HERE %1."
532−msgstr ""
534+msgstr "Ao selecionar está a concordar com os %1 do Nokia HERE."
533
535
534#: qml/Wizard/Pages/40-location.qml:106
536#: qml/Wizard/Pages/40-location.qml:106
535msgctxt "part of: Nokia HERE terms and conditions"
537msgctxt "part of: Nokia HERE terms and conditions"
536msgid "terms and conditions"
538msgid "terms and conditions"
537−msgstr ""
539+msgstr "termos e condições"
538
540
539#: qml/Wizard/Pages/40-location.qml:160
541#: qml/Wizard/Pages/40-location.qml:160
540msgid "GPS only"
542msgid "GPS only"
541−msgstr ""
543+msgstr "Apenas GPS"
542
544
543#: qml/Wizard/Pages/40-location.qml:214
545#: qml/Wizard/Pages/40-location.qml:214
544msgid "Don't use my location"
546msgid "Don't use my location"
545−msgstr ""
547+msgstr "Não use a minha localização"
546
548
547#: qml/Wizard/Pages/40-location.qml:260
549#: qml/Wizard/Pages/40-location.qml:260
548msgid "You can change it later in System Settings."
550msgid "You can change it later in System Settings."
549−msgstr ""
551+msgstr "Pode alterar mais tarde nas Definições"
550
552
551#: qml/Wizard/Pages/50-timezone.qml:29
553#: qml/Wizard/Pages/50-timezone.qml:29
552msgid "Time Zone"
554msgid "Time Zone"
553−msgstr ""
555+msgstr "Fuso horário"
554
556
555#: qml/Wizard/Pages/50-timezone.qml:178
557#: qml/Wizard/Pages/50-timezone.qml:178
556msgid "Enter your city"
558msgid "Enter your city"
557−msgstr ""
559+msgstr "Introduza a sua cidade"
558
560
559#: qml/Wizard/Pages/60-account.qml:24
561#: qml/Wizard/Pages/60-account.qml:24
560msgid "Personalize Your Device"
562msgid "Personalize Your Device"
561−msgstr ""
563+msgstr "Personalize o seu dispositivo"
562
564
563#: qml/Wizard/Pages/60-account.qml:48
565#: qml/Wizard/Pages/60-account.qml:48
564msgid "Preferred Name"
566msgid "Preferred Name"
565−msgstr ""
567+msgstr "Nome preferido"
566
568
567#: qml/Wizard/Pages/70-passwd-type.qml:39
569#: qml/Wizard/Pages/70-passwd-type.qml:39
568msgid "Lock Screen"
570msgid "Lock Screen"
569−msgstr ""
571+msgstr "Bloquear ecrã"
570
572
571#: qml/Wizard/Pages/70-passwd-type.qml:101
573#: qml/Wizard/Pages/70-passwd-type.qml:101
572msgctxt "Label: Type of security method"
574msgctxt "Label: Type of security method"
573msgid "Create new password"
575msgid "Create new password"
574−msgstr ""
576+msgstr "Criar nova palavra-passe"
575
577
576#: qml/Wizard/Pages/70-passwd-type.qml:103
578#: qml/Wizard/Pages/70-passwd-type.qml:103
577msgctxt "Label: Type of security method"
579msgctxt "Label: Type of security method"
578msgid "Create passcode (numbers only)"
580msgid "Create passcode (numbers only)"
579−msgstr ""
581+msgstr "Criar código (números apenas)"
580
582
581#: qml/Wizard/Pages/70-passwd-type.qml:105
583#: qml/Wizard/Pages/70-passwd-type.qml:105
582msgctxt "Label: Type of security method"
584msgctxt "Label: Type of security method"
583msgid "No lock code"
585msgid "No lock code"
584−msgstr ""
586+msgstr "Sem código de bloqueio"
585
587
586#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
588#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
587msgid "Privacy Policy"
589msgid "Privacy Policy"
588−msgstr ""
590+msgstr "Política de privacidade"
589
591
590#: qml/Wizard/Pages/75-report-check.qml:26
592#: qml/Wizard/Pages/75-report-check.qml:26
591msgid "Help Us Improve"
593msgid "Help Us Improve"
592−msgstr ""
594+msgstr "Ajude-nos a melhorar"
593
595
594#: qml/Wizard/Pages/75-report-check.qml:59
596#: qml/Wizard/Pages/75-report-check.qml:59
595msgid "Improve system performance by sending us crashes and error reports."
597msgid "Improve system performance by sending us crashes and error reports."
596msgstr ""
598msgstr ""
599+"Melhore a performance do sistema ao enviar-nos relatórios de erros e falhas."
597
600
598#: qml/Wizard/Pages/75-report-check.qml:60
601#: qml/Wizard/Pages/75-report-check.qml:60
599msgid "Privacy policy"
602msgid "Privacy policy"
600−msgstr ""
603+msgstr "Política de privacidade"
601
604
602#: qml/Wizard/Pages/80-finished.qml:89
605#: qml/Wizard/Pages/80-finished.qml:89
603msgid "Welcome to Ubuntu"
606msgid "Welcome to Ubuntu"
604−msgstr ""
607+msgstr "Bem-vindo (a) ao Ubuntu"
605
608
606#: qml/Wizard/Pages/80-finished.qml:104
609#: qml/Wizard/Pages/80-finished.qml:104
607msgid "You are ready to use your device now"
610msgid "You are ready to use your device now"
608−msgstr ""
611+msgstr "Está pronto (a) para usar o seu dispositivo"
609
612
610#: qml/Wizard/Pages/80-finished.qml:124
613#: qml/Wizard/Pages/80-finished.qml:124
611msgid "Get Started"
614msgid "Get Started"
612−msgstr ""
615+msgstr "Começar"
613
616
614#: qml/Wizard/Pages/here-terms.qml:25
617#: qml/Wizard/Pages/here-terms.qml:25
615msgid "Terms & Conditions"
618msgid "Terms & Conditions"
@@ -618,6 +621,7 @@ msgstr "Termos e condições"
618#: qml/Wizard/Pages/here-terms.qml:69
621#: qml/Wizard/Pages/here-terms.qml:69
619msgid "Your device uses positioning technologies provided by HERE."
622msgid "Your device uses positioning technologies provided by HERE."
620msgstr ""
623msgstr ""
624+"O seu dispositivo usa tecnologias de posicionamento fornecidas pela HERE."
621
625
622#: qml/Wizard/Pages/here-terms.qml:81
626#: qml/Wizard/Pages/here-terms.qml:81
623msgid ""
627msgid ""
@@ -625,21 +629,26 @@ msgid ""
625"collects information about nearby cell towers and Wi-Fi hotspots around your "
629"collects information about nearby cell towers and Wi-Fi hotspots around your "
626"current location whenever your position is being found."
630"current location whenever your position is being found."
627msgstr ""
631msgstr ""
632+"Para fornecer serviços de localização e melhorar a sua qualidade, a HERE "
633+"recolhe informação sobre redes e hotspots Wi-Fi próximos quando a sua "
634+"posição está a ser encontrada."
628
635
629#: qml/Wizard/Pages/here-terms.qml:93
636#: qml/Wizard/Pages/here-terms.qml:93
630msgid ""
637msgid ""
631"The information collected is used to analyze the service and to improve the "
638"The information collected is used to analyze the service and to improve the "
632"use of service, but not to identify you personally."
639"use of service, but not to identify you personally."
633msgstr ""
640msgstr ""
641+"A informação recolhida é usada analisar e melhorar o serviço, não para o "
642+"identificar."
634
643
635#: qml/Wizard/Pages/here-terms.qml:106
644#: qml/Wizard/Pages/here-terms.qml:106
636#, qt-format
645#, qt-format
637msgid "By continuing, you agree to the HERE platform %1 and %2."
646msgid "By continuing, you agree to the HERE platform %1 and %2."
638−msgstr ""
647+msgstr "Ao continuar, está a concordar com a plataforma HERE %1 e %2."
639
648
640#: qml/Wizard/Pages/here-terms.qml:107
649#: qml/Wizard/Pages/here-terms.qml:107
641msgid "Service Terms"
650msgid "Service Terms"
642−msgstr ""
651+msgstr "Termos de serviço"
643
652
644#: qml/Wizard/Pages/passcode-confirm.qml:43
653#: qml/Wizard/Pages/passcode-confirm.qml:43
645#: qml/Wizard/Pages/passcode-desktop.qml:80
654#: qml/Wizard/Pages/passcode-desktop.qml:80
@@ -648,69 +657,69 @@ msgstr "Confirme o código"
648
657
649#: qml/Wizard/Pages/passcode-confirm.qml:45
658#: qml/Wizard/Pages/passcode-confirm.qml:45
650msgid "Incorrect passcode."
659msgid "Incorrect passcode."
651−msgstr ""
660+msgstr "Código incorreto."
652
661
653#: qml/Wizard/Pages/passcode-confirm.qml:45
662#: qml/Wizard/Pages/passcode-confirm.qml:45
654msgctxt "Enter the passcode again"
663msgctxt "Enter the passcode again"
655msgid "Please re-enter."
664msgid "Please re-enter."
656−msgstr ""
665+msgstr "Por favor, volte a introduzir."
657
666
658#: qml/Wizard/Pages/passcode-desktop.qml:30
667#: qml/Wizard/Pages/passcode-desktop.qml:30
659msgid "Lock Screen Passcode"
668msgid "Lock Screen Passcode"
660−msgstr ""
669+msgstr "Código de ecrã de bloqueio"
661
670
662#: qml/Wizard/Pages/passcode-desktop.qml:56
671#: qml/Wizard/Pages/passcode-desktop.qml:56
663msgid "Enter 4 numbers to setup your passcode"
672msgid "Enter 4 numbers to setup your passcode"
664−msgstr ""
673+msgstr "Introduza 4 números para definir o seu código"
665
674
666#: qml/Wizard/Pages/passcode-desktop.qml:65
675#: qml/Wizard/Pages/passcode-desktop.qml:65
667#: qml/Wizard/Pages/passcode-set.qml:54
676#: qml/Wizard/Pages/passcode-set.qml:54
668msgid "Choose passcode"
677msgid "Choose passcode"
669−msgstr ""
678+msgstr "Escolha o código"
670
679
671#: qml/Wizard/Pages/passcode-desktop.qml:105
680#: qml/Wizard/Pages/passcode-desktop.qml:105
672msgid "Passcode too short"
681msgid "Passcode too short"
673−msgstr ""
682+msgstr "Código muito curto"
674
683
675#: qml/Wizard/Pages/passcode-desktop.qml:107
684#: qml/Wizard/Pages/passcode-desktop.qml:107
676msgid "Passcodes match"
685msgid "Passcodes match"
677−msgstr ""
686+msgstr "Códigos coincidem"
678
687
679#: qml/Wizard/Pages/passcode-desktop.qml:109
688#: qml/Wizard/Pages/passcode-desktop.qml:109
680msgid "Passcodes do not match"
689msgid "Passcodes do not match"
681−msgstr ""
690+msgstr "Códigos não coincidem"
682
691
683#: qml/Wizard/Pages/passcode-set.qml:62
692#: qml/Wizard/Pages/passcode-set.qml:62
684msgid "Passcode must be 4 characters long"
693msgid "Passcode must be 4 characters long"
685−msgstr ""
694+msgstr "Os códigos devem ter 4 dígitos"
686
695
687#: qml/Wizard/Pages/password-set.qml:30
696#: qml/Wizard/Pages/password-set.qml:30
688msgid "Lock Screen Password"
697msgid "Lock Screen Password"
689−msgstr ""
698+msgstr "Palavra-passe de ecrã de bloqueio"
690
699
691#: qml/Wizard/Pages/password-set.qml:61
700#: qml/Wizard/Pages/password-set.qml:61
692msgid "Enter at least 8 characters"
701msgid "Enter at least 8 characters"
693−msgstr ""
702+msgstr "Introduza no mínimo 8 caracteres"
694
703
695#: qml/Wizard/Pages/password-set.qml:73
704#: qml/Wizard/Pages/password-set.qml:73
696msgid "Choose password"
705msgid "Choose password"
697−msgstr ""
706+msgstr "Escolha a palavra-passe"
698
707
699#: qml/Wizard/Pages/password-set.qml:103
708#: qml/Wizard/Pages/password-set.qml:103
700msgid "Confirm password"
709msgid "Confirm password"
701−msgstr ""
710+msgstr "Confirme a palavra-passe"
702
711
703#: qml/Wizard/Pages/sim.qml:27
712#: qml/Wizard/Pages/sim.qml:27
704msgid "No SIM card installed"
713msgid "No SIM card installed"
705−msgstr ""
714+msgstr "Sem cartão SIM inserido"
706
715
707#: qml/Wizard/Pages/sim.qml:54
716#: qml/Wizard/Pages/sim.qml:54
708msgid "SIM card added"
717msgid "SIM card added"
709−msgstr ""
718+msgstr "Cartão SIM adicionado"
710
719
711#: qml/Wizard/Pages/sim.qml:55
720#: qml/Wizard/Pages/sim.qml:55
712msgid "You must restart the device to access the mobile network."
721msgid "You must restart the device to access the mobile network."
713−msgstr ""
722+msgstr "Deve reiniciar o seu dispositivo para aceder à rede móvel."
714
723
715#: qml/Wizard/Pages/sim.qml:59
724#: qml/Wizard/Pages/sim.qml:59
716msgid "Restart"
725msgid "Restart"
@@ -718,35 +727,35 @@ msgstr "Reiniciar"
718
727
719#: qml/Wizard/Pages/sim.qml:78
728#: qml/Wizard/Pages/sim.qml:78
720msgid "You won’t be able to make calls or use text messaging without a SIM."
729msgid "You won’t be able to make calls or use text messaging without a SIM."
721−msgstr ""
730+msgstr "Não conseguirá fazer chamadas ou enviar mensagens sem um cartão SIM."
722
731
723#: qml/Wizard/Pages/sim.qml:90
732#: qml/Wizard/Pages/sim.qml:90
724msgid "To proceed with no SIM tap Skip."
733msgid "To proceed with no SIM tap Skip."
725−msgstr ""
734+msgstr "Para continuar sem um cartão SIM toque em Saltar."
726
735
727#: qml/Wizard/PasswordMeter.qml:87
736#: qml/Wizard/PasswordMeter.qml:87
728msgid "Passwords match"
737msgid "Passwords match"
729−msgstr ""
738+msgstr "As palavras-passe coincidem"
730
739
731#: qml/Wizard/PasswordMeter.qml:89
740#: qml/Wizard/PasswordMeter.qml:89
732msgid "Passwords do not match"
741msgid "Passwords do not match"
733−msgstr ""
742+msgstr "As palavras-passe não coincidem"
734
743
735#: qml/Wizard/PasswordMeter.qml:93
744#: qml/Wizard/PasswordMeter.qml:93
736msgid "Strong password"
745msgid "Strong password"
737−msgstr ""
746+msgstr "Palavra-passe forte"
738
747
739#: qml/Wizard/PasswordMeter.qml:95
748#: qml/Wizard/PasswordMeter.qml:95
740msgid "Fair password"
749msgid "Fair password"
741−msgstr ""
750+msgstr "Palavra-passe razoável"
742
751
743#: qml/Wizard/PasswordMeter.qml:97
752#: qml/Wizard/PasswordMeter.qml:97
744msgid "Weak password"
753msgid "Weak password"
745−msgstr ""
754+msgstr "Palavra-passe fraca"
746
755
747#: qml/Wizard/PasswordMeter.qml:99
756#: qml/Wizard/PasswordMeter.qml:99
748msgid "Very weak password"
757msgid "Very weak password"
749−msgstr ""
758+msgstr "Palavra-passe muito fraca"
750
759
751#~ msgid "Top edge"
760#~ msgid "Top edge"
752#~ msgstr "Margem superior"
761#~ msgstr "Margem superior"
@@ -1049,15 +1058,6 @@ msgstr ""
1049#~ msgid "Loading. Please Wait..."
1058#~ msgid "Loading. Please Wait..."
1050#~ msgstr "A carregar. Por favor, aguarde..."
1059#~ msgstr "A carregar. Por favor, aguarde..."
1051
1060
1052−#~ msgid "Welcome to your Ubuntu device."
1053−#~ msgstr "Bem-vindo ao seu dispositivo Ubuntu."
1054−
1055−#~ msgid "Please select how you’d like to unlock your device."
1056−#~ msgstr "Escolha como quer desbloquear o seu dispositivo."
1057−
1058−#~ msgid "Your device is now ready to use."
1059−#~ msgstr "O seu dispositivo está pronto."
1060−
1061#~ msgid "Choose your passcode"
1061#~ msgid "Choose your passcode"
1062#~ msgstr "Escolha o código"
1062#~ msgstr "Escolha o código"
1063
1063
@@ -1070,3 +1070,6 @@ msgstr ""
1070#~ msgstr ""
1070#~ msgstr ""
1071#~ "Isto pode ser desligado nas <b>Definições</b> debaixo da <b>Segurança eamp; "
1071#~ "Isto pode ser desligado nas <b>Definições</b> debaixo da <b>Segurança eamp; "
1072#~ "Privacidade</b>"
1072#~ "Privacidade</b>"
1073+
1074+#~ msgid "Hover your mouse on the right edge to view your open apps"
1075+#~ msgstr "Passe o rato na margem direita para ver as apps abertas"
po/pt_BR.po+23−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-08-05 04:40+0000\n"
11"PO-Revision-Date: 2015-08-05 04:40+0000\n"
12"Last-Translator: Julio Alexander Sieg <julio.sieg@gmail.com>\n"
12"Last-Translator: Julio Alexander Sieg <julio.sieg@gmail.com>\n"
13"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
13"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:03+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -29,7 +29,7 @@ msgstr "Fixar atalho"
29
29
30#: plugins/Unity/Launcher/launcheritem.cpp:53
30#: plugins/Unity/Launcher/launcheritem.cpp:53
31msgid "Quit"
31msgid "Quit"
32−msgstr ""
32+msgstr "Sair"
33
33
34#: plugins/Unity/Launcher/launcheritem.cpp:107
34#: plugins/Unity/Launcher/launcheritem.cpp:107
35msgid "Unpin shortcut"
35msgid "Unpin shortcut"
@@ -135,7 +135,7 @@ msgstr "OK"
135
135
136#: qml/Components/ModeSwitchWarningDialog.qml:32
136#: qml/Components/ModeSwitchWarningDialog.qml:32
137msgid "Apps may have unsaved data:"
137msgid "Apps may have unsaved data:"
138−msgstr ""
138+msgstr "Os aplicativos podem conter dados não salvos:"
139
139
140#: qml/Components/ModeSwitchWarningDialog.qml:57
140#: qml/Components/ModeSwitchWarningDialog.qml:57
141msgctxt ""
141msgctxt ""
@@ -145,19 +145,19 @@ msgstr ""
145
145
146#: qml/Components/ModeSwitchWarningDialog.qml:63
146#: qml/Components/ModeSwitchWarningDialog.qml:63
147msgid "Or force close now (unsaved data will be lost)."
147msgid "Or force close now (unsaved data will be lost)."
148−msgstr ""
148+msgstr "Ou force para fechar agora (dados não salvos serão perdidos)."
149
149
150#: qml/Components/ModeSwitchWarningDialog.qml:75
150#: qml/Components/ModeSwitchWarningDialog.qml:75
151msgid "OK, I will reconnect"
151msgid "OK, I will reconnect"
152−msgstr ""
152+msgstr "Ok, eu irei reconectar"
153
153
154#: qml/Components/ModeSwitchWarningDialog.qml:76
154#: qml/Components/ModeSwitchWarningDialog.qml:76
155msgid "Reconnect now!"
155msgid "Reconnect now!"
156−msgstr ""
156+msgstr "Reconecte agora!"
157
157
158#: qml/Components/ModeSwitchWarningDialog.qml:88
158#: qml/Components/ModeSwitchWarningDialog.qml:88
159msgid "Close all"
159msgid "Close all"
160−msgstr ""
160+msgstr "Fechar tudo"
161
161
162#: qml/Dash/DashPageHeader.qml:337
162#: qml/Dash/DashPageHeader.qml:337
163msgctxt "Button: Open the Ubuntu Store"
163msgctxt "Button: Open the Ubuntu Store"
@@ -188,7 +188,7 @@ msgstr ""
188
188
189#: qml/Dash/FiltersPopover.qml:69
189#: qml/Dash/FiltersPopover.qml:69
190msgid "Reset"
190msgid "Reset"
191−msgstr ""
191+msgstr "Redefinir"
192
192
193#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
193#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
194msgid "See less"
194msgid "See less"
@@ -205,11 +205,11 @@ msgstr "Pesquisar"
205
205
206#: qml/Dash/PageHeaderExtraPanel.qml:55
206#: qml/Dash/PageHeaderExtraPanel.qml:55
207msgid "Recent Searches"
207msgid "Recent Searches"
208−msgstr ""
208+msgstr "Pesquisas recentes"
209
209
210#: qml/Dash/PageHeaderExtraPanel.qml:66
210#: qml/Dash/PageHeaderExtraPanel.qml:66
211msgid "Clear All"
211msgid "Clear All"
212−msgstr ""
212+msgstr "Limpar tudo"
213
213
214#: qml/Dash/Previews/PreviewActionCombo.qml:35
214#: qml/Dash/Previews/PreviewActionCombo.qml:35
215msgid "More..."
215msgid "More..."
@@ -226,7 +226,7 @@ msgstr "Enviar"
226
226
227#: qml/Dash/Previews/PreviewRatingInput.qml:84
227#: qml/Dash/Previews/PreviewRatingInput.qml:84
228msgid "Rate this"
228msgid "Rate this"
229−msgstr "Avaliar isto"
229+msgstr "Avalie"
230
230
231#: qml/Dash/Previews/PreviewRatingInput.qml:129
231#: qml/Dash/Previews/PreviewRatingInput.qml:129
232msgid "Add a review"
232msgid "Add a review"
@@ -234,7 +234,7 @@ msgstr "Adicionar uma análise"
234
234
235#: qml/Dash/Previews/PreviewSharing.qml:66
235#: qml/Dash/Previews/PreviewSharing.qml:66
236msgid "Preview Share Item"
236msgid "Preview Share Item"
237−msgstr ""
237+msgstr "Visualizar item compartilhado"
238
238
239#: qml/Dash/PullToRefreshScopeStyle.qml:55
239#: qml/Dash/PullToRefreshScopeStyle.qml:55
240msgid "Pull to refresh…"
240msgid "Pull to refresh…"
@@ -331,7 +331,7 @@ msgstr "Desculpe, senha incorreta"
331#: qml/Greeter/NarrowView.qml:121
331#: qml/Greeter/NarrowView.qml:121
332msgctxt "passphrase"
332msgctxt "passphrase"
333msgid "Please re-enter"
333msgid "Please re-enter"
334−msgstr ""
334+msgstr "Por favor, digite novamente"
335
335
336#: qml/Greeter/NarrowView.qml:122
336#: qml/Greeter/NarrowView.qml:122
337msgid "Sorry, incorrect passcode"
337msgid "Sorry, incorrect passcode"
@@ -412,7 +412,7 @@ msgstr "Falhou, toque para tentar novamente"
412#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
412#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
413msgctxt "Button: Send a reply message"
413msgctxt "Button: Send a reply message"
414msgid "Send"
414msgid "Send"
415−msgstr ""
415+msgstr "Enviar"
416
416
417#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
417#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
418msgctxt "Label: Hint in message indicator line edit"
418msgctxt "Label: Hint in message indicator line edit"
@@ -422,7 +422,7 @@ msgstr "Responder"
422#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
422#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
423msgctxt "Button: Call back on phone"
423msgctxt "Button: Call back on phone"
424msgid "Call back"
424msgid "Call back"
425−msgstr ""
425+msgstr "Retornar chamada"
426
426
427#: qml/Stages/SideStage.qml:76
427#: qml/Stages/SideStage.qml:76
428msgid "Drag using 3 fingers any application from one window to the other"
428msgid "Drag using 3 fingers any application from one window to the other"
@@ -448,19 +448,19 @@ msgstr ""
448msgid "Swipe up to manage the app"
448msgid "Swipe up to manage the app"
449msgstr ""
449msgstr ""
450
450
451−#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Swipe from the left edge to open the launcher"
453−msgstr ""
454−
455#: qml/Tutorial/TutorialLeftLong.qml:47
451#: qml/Tutorial/TutorialLeftLong.qml:47
456msgid "Long swipe from the left edge to open the Today scope"
452msgid "Long swipe from the left edge to open the Today scope"
457msgstr ""
453msgstr ""
458
454
459−#: qml/Tutorial/TutorialRight.qml:54
455+#: qml/Tutorial/TutorialLeft.qml:47
460−msgid "Hover your mouse on the right edge to view your open apps"
456+msgid "Swipe from the left edge to open the launcher"
461msgstr ""
457msgstr ""
462
458
463#: qml/Tutorial/TutorialRight.qml:55
459#: qml/Tutorial/TutorialRight.qml:55
460+msgid "Push your mouse against the right edge to view your open apps"
461+msgstr ""
462+
463+#: qml/Tutorial/TutorialRight.qml:56
464msgid "Short or long swipe from the right edge to view your open apps"
464msgid "Short or long swipe from the right edge to view your open apps"
465msgstr ""
465msgstr ""
466
466
po/ro.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-07-06 17:47+0000\n"
11"PO-Revision-Date: 2015-07-06 17:47+0000\n"
12"Last-Translator: Meriuță Cornel <meriutacornel@neacornel.eu>\n"
12"Last-Translator: Meriuță Cornel <meriutacornel@neacornel.eu>\n"
13"Language-Team: Romanian <ro@li.org>\n"
13"Language-Team: Romanian <ro@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
17"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
18"== 0) && (n != 0))) ? 2: 1));\n"
18"== 0) && (n != 0))) ? 2: 1));\n"
19−"X-Launchpad-Export-Date: 2016-03-24 06:08+0000\n"
19+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
20−"X-Generator: Launchpad (build 17958)\n"
20+"X-Generator: Launchpad (build 17995)\n"
21
21
22#: plugins/IntegratedLightDM/Greeter.cpp:112
22#: plugins/IntegratedLightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
@@ -456,19 +456,19 @@ msgstr ""
456msgid "Swipe up to manage the app"
456msgid "Swipe up to manage the app"
457msgstr ""
457msgstr ""
458
458
459−#: qml/Tutorial/TutorialLeft.qml:47
460−msgid "Swipe from the left edge to open the launcher"
461−msgstr ""
462−
463#: qml/Tutorial/TutorialLeftLong.qml:47
459#: qml/Tutorial/TutorialLeftLong.qml:47
464msgid "Long swipe from the left edge to open the Today scope"
460msgid "Long swipe from the left edge to open the Today scope"
465msgstr ""
461msgstr ""
466
462
467−#: qml/Tutorial/TutorialRight.qml:54
463+#: qml/Tutorial/TutorialLeft.qml:47
468−msgid "Hover your mouse on the right edge to view your open apps"
464+msgid "Swipe from the left edge to open the launcher"
469msgstr ""
465msgstr ""
470
466
471#: qml/Tutorial/TutorialRight.qml:55
467#: qml/Tutorial/TutorialRight.qml:55
468+msgid "Push your mouse against the right edge to view your open apps"
469+msgstr ""
470+
471+#: qml/Tutorial/TutorialRight.qml:56
472msgid "Short or long swipe from the right edge to view your open apps"
472msgid "Short or long swipe from the right edge to view your open apps"
473msgstr ""
473msgstr ""
474
474
po/ru.po+36−30
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-07-06 05:33+0000\n"
11"PO-Revision-Date: 2015-07-06 05:33+0000\n"
12"Last-Translator: ☠Jay ZDLin☠ <Unknown>\n"
12"Last-Translator: ☠Jay ZDLin☠ <Unknown>\n"
13"Language-Team: Russian <ru@li.org>\n"
13"Language-Team: Russian <ru@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%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: 2016-03-24 06:08+0000\n"
19+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
20−"X-Generator: Launchpad (build 17958)\n"
20+"X-Generator: Launchpad (build 17995)\n"
21
21
22#: plugins/IntegratedLightDM/Greeter.cpp:112
22#: plugins/IntegratedLightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
@@ -190,7 +190,7 @@ msgstr ""
190
190
191#: qml/Dash/FiltersPopover.qml:69
191#: qml/Dash/FiltersPopover.qml:69
192msgid "Reset"
192msgid "Reset"
193−msgstr ""
193+msgstr "Сбросить"
194
194
195#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
195#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
196msgid "See less"
196msgid "See less"
@@ -207,11 +207,11 @@ msgstr "Поиск"
207
207
208#: qml/Dash/PageHeaderExtraPanel.qml:55
208#: qml/Dash/PageHeaderExtraPanel.qml:55
209msgid "Recent Searches"
209msgid "Recent Searches"
210−msgstr ""
210+msgstr "Недавние поиски"
211
211
212#: qml/Dash/PageHeaderExtraPanel.qml:66
212#: qml/Dash/PageHeaderExtraPanel.qml:66
213msgid "Clear All"
213msgid "Clear All"
214−msgstr ""
214+msgstr "Очистить всё"
215
215
216#: qml/Dash/Previews/PreviewActionCombo.qml:35
216#: qml/Dash/Previews/PreviewActionCombo.qml:35
217msgid "More..."
217msgid "More..."
@@ -267,6 +267,8 @@ msgid ""
267"Your device is now connected to an external display. Use this screen as a "
267"Your device is now connected to an external display. Use this screen as a "
268"touch pad to interact with the pointer."
268"touch pad to interact with the pointer."
269msgstr ""
269msgstr ""
270+"Ваше устройство подключено к внешнему дисплею. Используйте этот экран как "
271+"сенсорную панель для управления указателем."
270
272
271#: qml/Greeter/CoverPage.qml:118
273#: qml/Greeter/CoverPage.qml:118
272msgid "Unlock"
274msgid "Unlock"
@@ -453,19 +455,19 @@ msgstr ""
453msgid "Swipe up to manage the app"
455msgid "Swipe up to manage the app"
454msgstr ""
456msgstr ""
455
457
456−#: qml/Tutorial/TutorialLeft.qml:47
457−msgid "Swipe from the left edge to open the launcher"
458−msgstr ""
459−
460#: qml/Tutorial/TutorialLeftLong.qml:47
458#: qml/Tutorial/TutorialLeftLong.qml:47
461msgid "Long swipe from the left edge to open the Today scope"
459msgid "Long swipe from the left edge to open the Today scope"
462msgstr ""
460msgstr ""
463
461
464−#: qml/Tutorial/TutorialRight.qml:54
462+#: qml/Tutorial/TutorialLeft.qml:47
465−msgid "Hover your mouse on the right edge to view your open apps"
463+msgid "Swipe from the left edge to open the launcher"
466msgstr ""
464msgstr ""
467
465
468#: qml/Tutorial/TutorialRight.qml:55
466#: qml/Tutorial/TutorialRight.qml:55
467+msgid "Push your mouse against the right edge to view your open apps"
468+msgstr ""
469+
470+#: qml/Tutorial/TutorialRight.qml:56
469msgid "Short or long swipe from the right edge to view your open apps"
471msgid "Short or long swipe from the right edge to view your open apps"
470msgstr ""
472msgstr ""
471
473
@@ -484,7 +486,7 @@ msgstr "Назад"
484
486
485#: qml/Wizard/Pages/10-welcome.qml:27
487#: qml/Wizard/Pages/10-welcome.qml:27
486msgid "Language"
488msgid "Language"
487−msgstr ""
489+msgstr "Язык"
488
490
489#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
491#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
490#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
492#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
@@ -501,7 +503,7 @@ msgstr "Подключение к Wi‑Fi"
501
503
502#: qml/Wizard/Pages/30-wifi.qml:130
504#: qml/Wizard/Pages/30-wifi.qml:130
503msgid "Connected"
505msgid "Connected"
504−msgstr ""
506+msgstr "Подключено"
505
507
506#: qml/Wizard/Pages/30-wifi.qml:163
508#: qml/Wizard/Pages/30-wifi.qml:163
507msgid "Available Wi-Fi networks"
509msgid "Available Wi-Fi networks"
@@ -538,7 +540,7 @@ msgstr ""
538
540
539#: qml/Wizard/Pages/40-location.qml:160
541#: qml/Wizard/Pages/40-location.qml:160
540msgid "GPS only"
542msgid "GPS only"
541−msgstr ""
543+msgstr "Только GPS"
542
544
543#: qml/Wizard/Pages/40-location.qml:214
545#: qml/Wizard/Pages/40-location.qml:214
544msgid "Don't use my location"
546msgid "Don't use my location"
@@ -550,11 +552,11 @@ msgstr ""
550
552
551#: qml/Wizard/Pages/50-timezone.qml:29
553#: qml/Wizard/Pages/50-timezone.qml:29
552msgid "Time Zone"
554msgid "Time Zone"
553−msgstr ""
555+msgstr "Часовой пояс"
554
556
555#: qml/Wizard/Pages/50-timezone.qml:178
557#: qml/Wizard/Pages/50-timezone.qml:178
556msgid "Enter your city"
558msgid "Enter your city"
557−msgstr ""
559+msgstr "Введите ваш город"
558
560
559#: qml/Wizard/Pages/60-account.qml:24
561#: qml/Wizard/Pages/60-account.qml:24
560msgid "Personalize Your Device"
562msgid "Personalize Your Device"
@@ -571,7 +573,7 @@ msgstr ""
571#: qml/Wizard/Pages/70-passwd-type.qml:101
573#: qml/Wizard/Pages/70-passwd-type.qml:101
572msgctxt "Label: Type of security method"
574msgctxt "Label: Type of security method"
573msgid "Create new password"
575msgid "Create new password"
574−msgstr ""
576+msgstr "Создать новый пароль"
575
577
576#: qml/Wizard/Pages/70-passwd-type.qml:103
578#: qml/Wizard/Pages/70-passwd-type.qml:103
577msgctxt "Label: Type of security method"
579msgctxt "Label: Type of security method"
@@ -601,7 +603,7 @@ msgstr ""
601
603
602#: qml/Wizard/Pages/80-finished.qml:89
604#: qml/Wizard/Pages/80-finished.qml:89
603msgid "Welcome to Ubuntu"
605msgid "Welcome to Ubuntu"
604−msgstr ""
606+msgstr "Добро пожаловать в Ubuntu"
605
607
606#: qml/Wizard/Pages/80-finished.qml:104
608#: qml/Wizard/Pages/80-finished.qml:104
607msgid "You are ready to use your device now"
609msgid "You are ready to use your device now"
@@ -653,7 +655,7 @@ msgstr ""
653#: qml/Wizard/Pages/passcode-confirm.qml:45
655#: qml/Wizard/Pages/passcode-confirm.qml:45
654msgctxt "Enter the passcode again"
656msgctxt "Enter the passcode again"
655msgid "Please re-enter."
657msgid "Please re-enter."
656−msgstr ""
658+msgstr "Введите заново."
657
659
658#: qml/Wizard/Pages/passcode-desktop.qml:30
660#: qml/Wizard/Pages/passcode-desktop.qml:30
659msgid "Lock Screen Passcode"
661msgid "Lock Screen Passcode"
@@ -682,7 +684,7 @@ msgstr ""
682
684
683#: qml/Wizard/Pages/passcode-set.qml:62
685#: qml/Wizard/Pages/passcode-set.qml:62
684msgid "Passcode must be 4 characters long"
686msgid "Passcode must be 4 characters long"
685−msgstr ""
687+msgstr "Код должен содержать 4 символа"
686
688
687#: qml/Wizard/Pages/password-set.qml:30
689#: qml/Wizard/Pages/password-set.qml:30
688msgid "Lock Screen Password"
690msgid "Lock Screen Password"
@@ -690,7 +692,7 @@ msgstr ""
690
692
691#: qml/Wizard/Pages/password-set.qml:61
693#: qml/Wizard/Pages/password-set.qml:61
692msgid "Enter at least 8 characters"
694msgid "Enter at least 8 characters"
693−msgstr ""
695+msgstr "Введите не менее 8 символов"
694
696
695#: qml/Wizard/Pages/password-set.qml:73
697#: qml/Wizard/Pages/password-set.qml:73
696msgid "Choose password"
698msgid "Choose password"
@@ -698,19 +700,19 @@ msgstr ""
698
700
699#: qml/Wizard/Pages/password-set.qml:103
701#: qml/Wizard/Pages/password-set.qml:103
700msgid "Confirm password"
702msgid "Confirm password"
701−msgstr ""
703+msgstr "Подтвердите пароль"
702
704
703#: qml/Wizard/Pages/sim.qml:27
705#: qml/Wizard/Pages/sim.qml:27
704msgid "No SIM card installed"
706msgid "No SIM card installed"
705−msgstr ""
707+msgstr "SIM-карта не вставлена"
706
708
707#: qml/Wizard/Pages/sim.qml:54
709#: qml/Wizard/Pages/sim.qml:54
708msgid "SIM card added"
710msgid "SIM card added"
709−msgstr ""
711+msgstr "Добавлена SIM-карта"
710
712
711#: qml/Wizard/Pages/sim.qml:55
713#: qml/Wizard/Pages/sim.qml:55
712msgid "You must restart the device to access the mobile network."
714msgid "You must restart the device to access the mobile network."
713−msgstr ""
715+msgstr "Необходимо перезапустить устройство для доступа к мобильной сети."
714
716
715#: qml/Wizard/Pages/sim.qml:59
717#: qml/Wizard/Pages/sim.qml:59
716msgid "Restart"
718msgid "Restart"
@@ -719,6 +721,7 @@ msgstr "Перезагрузить"
719#: qml/Wizard/Pages/sim.qml:78
721#: qml/Wizard/Pages/sim.qml:78
720msgid "You won’t be able to make calls or use text messaging without a SIM."
722msgid "You won’t be able to make calls or use text messaging without a SIM."
721msgstr ""
723msgstr ""
724+"Без SIM-карты невозможно делать звонки или отправлять текстовые сообщения."
722
725
723#: qml/Wizard/Pages/sim.qml:90
726#: qml/Wizard/Pages/sim.qml:90
724msgid "To proceed with no SIM tap Skip."
727msgid "To proceed with no SIM tap Skip."
@@ -726,11 +729,11 @@ msgstr ""
726
729
727#: qml/Wizard/PasswordMeter.qml:87
730#: qml/Wizard/PasswordMeter.qml:87
728msgid "Passwords match"
731msgid "Passwords match"
729−msgstr ""
732+msgstr "Пароли совпадают"
730
733
731#: qml/Wizard/PasswordMeter.qml:89
734#: qml/Wizard/PasswordMeter.qml:89
732msgid "Passwords do not match"
735msgid "Passwords do not match"
733−msgstr ""
736+msgstr "Пароли не совпадают"
734
737
735#: qml/Wizard/PasswordMeter.qml:93
738#: qml/Wizard/PasswordMeter.qml:93
736msgid "Strong password"
739msgid "Strong password"
@@ -742,11 +745,11 @@ msgstr ""
742
745
743#: qml/Wizard/PasswordMeter.qml:97
746#: qml/Wizard/PasswordMeter.qml:97
744msgid "Weak password"
747msgid "Weak password"
745−msgstr ""
748+msgstr "Слабый пароль"
746
749
747#: qml/Wizard/PasswordMeter.qml:99
750#: qml/Wizard/PasswordMeter.qml:99
748msgid "Very weak password"
751msgid "Very weak password"
749−msgstr ""
752+msgstr "Very weak password"
750
753
751#~ msgid "Type or say a command"
754#~ msgid "Type or say a command"
752#~ msgstr "Введите или произнесите команду"
755#~ msgstr "Введите или произнесите команду"
@@ -1067,3 +1070,6 @@ msgstr ""
1067
1070
1068#~ msgid "Call back"
1071#~ msgid "Call back"
1069#~ msgstr "Позвонить"
1072#~ msgstr "Позвонить"
1073+
1074+#~ msgid "Hover your mouse on the right edge to view your open apps"
1075+#~ msgstr "Наведите указатель на правый угол, чтобы увидеть открытые приложения"
po/shn.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-11-10 12:09+0000\n"
11"PO-Revision-Date: 2015-11-10 12:09+0000\n"
12"Last-Translator: Rockworld <sumoisrock@gmail.com>\n"
12"Last-Translator: Rockworld <sumoisrock@gmail.com>\n"
13"Language-Team: Shan <shn@li.org>\n"
13"Language-Team: Shan <shn@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/si.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2013-06-26 22:36+0000\n"
11"PO-Revision-Date: 2013-06-26 22:36+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Sinhalese <si@li.org>\n"
13"Language-Team: Sinhalese <si@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -442,19 +442,19 @@ msgstr ""
442msgid "Swipe up to manage the app"
442msgid "Swipe up to manage the app"
443msgstr ""
443msgstr ""
444
444
445−#: qml/Tutorial/TutorialLeft.qml:47
446−msgid "Swipe from the left edge to open the launcher"
447−msgstr ""
448−
449#: qml/Tutorial/TutorialLeftLong.qml:47
445#: qml/Tutorial/TutorialLeftLong.qml:47
450msgid "Long swipe from the left edge to open the Today scope"
446msgid "Long swipe from the left edge to open the Today scope"
451msgstr ""
447msgstr ""
452
448
453−#: qml/Tutorial/TutorialRight.qml:54
449+#: qml/Tutorial/TutorialLeft.qml:47
454−msgid "Hover your mouse on the right edge to view your open apps"
450+msgid "Swipe from the left edge to open the launcher"
455msgstr ""
451msgstr ""
456
452
457#: qml/Tutorial/TutorialRight.qml:55
453#: qml/Tutorial/TutorialRight.qml:55
454+msgid "Push your mouse against the right edge to view your open apps"
455+msgstr ""
456+
457+#: qml/Tutorial/TutorialRight.qml:56
458msgid "Short or long swipe from the right edge to view your open apps"
458msgid "Short or long swipe from the right edge to view your open apps"
459msgstr ""
459msgstr ""
460
460
po/sk.po+13−10
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2016-03-26 15:29+0000\n"
11"PO-Revision-Date: 2016-03-26 15:29+0000\n"
12"Last-Translator: P_E_T_O <Unknown>\n"
12"Last-Translator: P_E_T_O <Unknown>\n"
13"Language-Team: Slovak <sk@li.org>\n"
13"Language-Team: Slovak <sk@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
17"Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
18−"X-Launchpad-Export-Date: 2016-03-27 05:47+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17967)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20"Language: sk\n"
20"Language: sk\n"
21
21
22#: plugins/IntegratedLightDM/Greeter.cpp:112
22#: plugins/IntegratedLightDM/Greeter.cpp:112
@@ -459,19 +459,19 @@ msgstr "Potiahnuť dohora pre vytvorenie správy"
459msgid "Swipe up to manage the app"
459msgid "Swipe up to manage the app"
460msgstr "Potiahnuť dohora pre spravovanie aplikácie"
460msgstr "Potiahnuť dohora pre spravovanie aplikácie"
461
461
462−#: qml/Tutorial/TutorialLeft.qml:47
463−msgid "Swipe from the left edge to open the launcher"
464−msgstr "Potiahnite od ľavého okraja pre otvorenie spúšťača"
465−
466#: qml/Tutorial/TutorialLeftLong.qml:47
462#: qml/Tutorial/TutorialLeftLong.qml:47
467msgid "Long swipe from the left edge to open the Today scope"
463msgid "Long swipe from the left edge to open the Today scope"
468msgstr "Dlhé potiahnutie od ľavého okraja pre otvorenie scope Dnes"
464msgstr "Dlhé potiahnutie od ľavého okraja pre otvorenie scope Dnes"
469
465
470−#: qml/Tutorial/TutorialRight.qml:54
466+#: qml/Tutorial/TutorialLeft.qml:47
471−msgid "Hover your mouse on the right edge to view your open apps"
467+msgid "Swipe from the left edge to open the launcher"
472−msgstr "Prejdite myšou od pravého okraja pre zobrazenie otvorených aplikácií"
468+msgstr "Potiahnite od ľavého okraja pre otvorenie spúšťača"
473
469
474#: qml/Tutorial/TutorialRight.qml:55
470#: qml/Tutorial/TutorialRight.qml:55
471+msgid "Push your mouse against the right edge to view your open apps"
472+msgstr ""
473+
474+#: qml/Tutorial/TutorialRight.qml:56
475msgid "Short or long swipe from the right edge to view your open apps"
475msgid "Short or long swipe from the right edge to view your open apps"
476msgstr ""
476msgstr ""
477"Krátke alebo dlhé potiahnutie od pravého okraja pre zobrazenie otvorených "
477"Krátke alebo dlhé potiahnutie od pravého okraja pre zobrazenie otvorených "
@@ -942,3 +942,6 @@ msgstr "Heslo je veľmi slabé"
942#, qt-format
942#, qt-format
943#~ msgid "%1 〉"
943#~ msgid "%1 〉"
944#~ msgstr "%1 〉"
944#~ msgstr "%1 〉"
945+
946+#~ msgid "Hover your mouse on the right edge to view your open apps"
947+#~ msgstr "Prejdite myšou od pravého okraja pre zobrazenie otvorených aplikácií"
po/sl.po+92−75
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2016-01-31 18:34+0000\n"
11"PO-Revision-Date: 2016-01-31 18:34+0000\n"
12"Last-Translator: Bernard Banko <Unknown>\n"
12"Last-Translator: Bernard Banko <Unknown>\n"
13"Language-Team: Slovenian <sl@li.org>\n"
13"Language-Team: Slovenian <sl@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
19+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
20−"X-Generator: Launchpad (build 17958)\n"
20+"X-Generator: Launchpad (build 17995)\n"
21
21
22#: plugins/IntegratedLightDM/Greeter.cpp:112
22#: plugins/IntegratedLightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
@@ -143,6 +143,8 @@ msgctxt ""
143"Re-dock means connect the device again to an external screen/mouse/keyboard"
143"Re-dock means connect the device again to an external screen/mouse/keyboard"
144msgid "Re-dock, save your work and close these apps to continue."
144msgid "Re-dock, save your work and close these apps to continue."
145msgstr ""
145msgstr ""
146+"Za nadaljevanje ponovno usidrajte napravo, shranite svoje delo in zaprite te "
147+"programe"
146
148
147#: qml/Components/ModeSwitchWarningDialog.qml:63
149#: qml/Components/ModeSwitchWarningDialog.qml:63
148msgid "Or force close now (unsaved data will be lost)."
150msgid "Or force close now (unsaved data will be lost)."
@@ -185,11 +187,11 @@ msgstr "Dodaj med priljubljene"
185
187
186#: qml/Dash/FiltersPopover.qml:60
188#: qml/Dash/FiltersPopover.qml:60
187msgid "Refine your results"
189msgid "Refine your results"
188−msgstr ""
190+msgstr "Prečistite rezultate"
189
191
190#: qml/Dash/FiltersPopover.qml:69
192#: qml/Dash/FiltersPopover.qml:69
191msgid "Reset"
193msgid "Reset"
192−msgstr ""
194+msgstr "Ponastavi"
193
195
194#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
196#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
195msgid "See less"
197msgid "See less"
@@ -206,11 +208,11 @@ msgstr "Iskanje"
206
208
207#: qml/Dash/PageHeaderExtraPanel.qml:55
209#: qml/Dash/PageHeaderExtraPanel.qml:55
208msgid "Recent Searches"
210msgid "Recent Searches"
209−msgstr ""
211+msgstr "Zadnja iskanja"
210
212
211#: qml/Dash/PageHeaderExtraPanel.qml:66
213#: qml/Dash/PageHeaderExtraPanel.qml:66
212msgid "Clear All"
214msgid "Clear All"
213−msgstr ""
215+msgstr "Počisti vse"
214
216
215#: qml/Dash/Previews/PreviewActionCombo.qml:35
217#: qml/Dash/Previews/PreviewActionCombo.qml:35
216msgid "More..."
218msgid "More..."
@@ -266,6 +268,8 @@ msgid ""
266"Your device is now connected to an external display. Use this screen as a "
268"Your device is now connected to an external display. Use this screen as a "
267"touch pad to interact with the pointer."
269"touch pad to interact with the pointer."
268msgstr ""
270msgstr ""
271+"Vaša naprava je sedaj priključena na zunanji zaslon. S tem zaslonom pa lahko "
272+"upravljate kazalko, kot da bi imeli sledilno ploščico."
269
273
270#: qml/Greeter/CoverPage.qml:118
274#: qml/Greeter/CoverPage.qml:118
271msgid "Unlock"
275msgid "Unlock"
@@ -433,51 +437,51 @@ msgstr "Pokliči nazaj"
433
437
434#: qml/Stages/SideStage.qml:76
438#: qml/Stages/SideStage.qml:76
435msgid "Drag using 3 fingers any application from one window to the other"
439msgid "Drag using 3 fingers any application from one window to the other"
436−msgstr ""
440+msgstr "S tremi prsti povlecite program iz enega v drugo okno"
437
441
438#: qml/Tutorial/TutorialBottom.qml:78
442#: qml/Tutorial/TutorialBottom.qml:78
439msgid "Swipe up to add a contact"
443msgid "Swipe up to add a contact"
440−msgstr ""
444+msgstr "Za dodajanje stika potegnite navzgor"
441
445
442#: qml/Tutorial/TutorialBottom.qml:80
446#: qml/Tutorial/TutorialBottom.qml:80
443msgid "Swipe up for favorite calculations"
447msgid "Swipe up for favorite calculations"
444−msgstr ""
448+msgstr "Za priljubljene izračune potegnite navzgor"
445
449
446#: qml/Tutorial/TutorialBottom.qml:82
450#: qml/Tutorial/TutorialBottom.qml:82
447msgid "Swipe up for recent calls"
451msgid "Swipe up for recent calls"
448−msgstr ""
452+msgstr "Za zadnje klice potegnite navzgor"
449
453
450#: qml/Tutorial/TutorialBottom.qml:84
454#: qml/Tutorial/TutorialBottom.qml:84
451msgid "Swipe up to create a message"
455msgid "Swipe up to create a message"
452−msgstr ""
456+msgstr "Za ustvarjanje sporočila potegnite navzgor"
453
457
454#: qml/Tutorial/TutorialBottom.qml:85
458#: qml/Tutorial/TutorialBottom.qml:85
455msgid "Swipe up to manage the app"
459msgid "Swipe up to manage the app"
456−msgstr ""
460+msgstr "Za upravljanje programa potegnite navzgor"
457−
458−#: qml/Tutorial/TutorialLeft.qml:47
459−msgid "Swipe from the left edge to open the launcher"
460−msgstr ""
461
461
462#: qml/Tutorial/TutorialLeftLong.qml:47
462#: qml/Tutorial/TutorialLeftLong.qml:47
463msgid "Long swipe from the left edge to open the Today scope"
463msgid "Long swipe from the left edge to open the Today scope"
464−msgstr ""
464+msgstr "Nadolgo potegnite levi rob za odpiranje vira Danes"
465
465
466−#: qml/Tutorial/TutorialRight.qml:54
466+#: qml/Tutorial/TutorialLeft.qml:47
467−msgid "Hover your mouse on the right edge to view your open apps"
467+msgid "Swipe from the left edge to open the launcher"
468−msgstr ""
468+msgstr "Potegnite levi rob za prikaz zaganjalnika"
469
469
470#: qml/Tutorial/TutorialRight.qml:55
470#: qml/Tutorial/TutorialRight.qml:55
471−msgid "Short or long swipe from the right edge to view your open apps"
471+msgid "Push your mouse against the right edge to view your open apps"
472msgstr ""
472msgstr ""
473
473
474+#: qml/Tutorial/TutorialRight.qml:56
475+msgid "Short or long swipe from the right edge to view your open apps"
476+msgstr "Za prikaz odprtih programov nakratko ali nadolgo potegnite desni rob"
477+
474#: qml/Tutorial/TutorialTop.qml:53
478#: qml/Tutorial/TutorialTop.qml:53
475msgid "Swipe from the top right edge to open the notification bar"
479msgid "Swipe from the top right edge to open the notification bar"
476−msgstr ""
480+msgstr "Za odpiranje obvestilne plošče potegnite desni del zgornjega roba"
477
481
478#: qml/Tutorial/TutorialTop.qml:54
482#: qml/Tutorial/TutorialTop.qml:54
479msgid "Swipe from the top edge to open the notification bar"
483msgid "Swipe from the top edge to open the notification bar"
480−msgstr ""
484+msgstr "Za odpiranje obvestilne plošče potegnite zgornji rob"
481
485
482#: qml/Wizard/Page.qml:54
486#: qml/Wizard/Page.qml:54
483msgctxt "Button: Go back one page in the Wizard"
487msgctxt "Button: Go back one page in the Wizard"
@@ -486,7 +490,7 @@ msgstr "Nazaj"
486
490
487#: qml/Wizard/Pages/10-welcome.qml:27
491#: qml/Wizard/Pages/10-welcome.qml:27
488msgid "Language"
492msgid "Language"
489−msgstr ""
493+msgstr "Jezik"
490
494
491#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
495#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
492#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
496#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
@@ -495,7 +499,7 @@ msgstr ""
495#: qml/Wizard/Pages/passcode-desktop.qml:124
499#: qml/Wizard/Pages/passcode-desktop.qml:124
496#: qml/Wizard/Pages/password-set.qml:141
500#: qml/Wizard/Pages/password-set.qml:141
497msgid "Next"
501msgid "Next"
498−msgstr ""
502+msgstr "Naslednji"
499
503
500#: qml/Wizard/Pages/30-wifi.qml:29
504#: qml/Wizard/Pages/30-wifi.qml:29
501msgid "Connect to Wi‑Fi"
505msgid "Connect to Wi‑Fi"
@@ -503,15 +507,15 @@ msgstr "Poveži se z Wi-Fi-jem"
503
507
504#: qml/Wizard/Pages/30-wifi.qml:130
508#: qml/Wizard/Pages/30-wifi.qml:130
505msgid "Connected"
509msgid "Connected"
506−msgstr ""
510+msgstr "Povezano"
507
511
508#: qml/Wizard/Pages/30-wifi.qml:163
512#: qml/Wizard/Pages/30-wifi.qml:163
509msgid "Available Wi-Fi networks"
513msgid "Available Wi-Fi networks"
510−msgstr ""
514+msgstr "Razpoložljiva omrežja Wi-Fi"
511
515
512#: qml/Wizard/Pages/30-wifi.qml:164
516#: qml/Wizard/Pages/30-wifi.qml:164
513msgid "No available Wi-Fi networks"
517msgid "No available Wi-Fi networks"
514−msgstr ""
518+msgstr "Ni razpoložljivih omrežij Wi-Fi"
515
519
516#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
520#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
517#: qml/Wizard/Pages/sim.qml:101
521#: qml/Wizard/Pages/sim.qml:101
@@ -520,98 +524,100 @@ msgstr "Preskoči"
520
524
521#: qml/Wizard/Pages/40-location.qml:27
525#: qml/Wizard/Pages/40-location.qml:27
522msgid "Location Services"
526msgid "Location Services"
523−msgstr ""
527+msgstr "Storitve odkrivanja položaja"
524
528
525#: qml/Wizard/Pages/40-location.qml:83
529#: qml/Wizard/Pages/40-location.qml:83
526msgid ""
530msgid ""
527"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
531"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
528"(recommended)"
532"(recommended)"
529msgstr ""
533msgstr ""
534+"Za odkrivanje položaja anonimno uporabi GPS, vstopne točke Wi-Fi in mobilna "
535+"omrežja (priporočeno)"
530
536
531#: qml/Wizard/Pages/40-location.qml:105
537#: qml/Wizard/Pages/40-location.qml:105
532#, qt-format
538#, qt-format
533msgid "By selecting this option you agree to the Nokia HERE %1."
539msgid "By selecting this option you agree to the Nokia HERE %1."
534−msgstr ""
540+msgstr "Z izbiro te možnosti se strinjate z Nokia HERE %1."
535
541
536#: qml/Wizard/Pages/40-location.qml:106
542#: qml/Wizard/Pages/40-location.qml:106
537msgctxt "part of: Nokia HERE terms and conditions"
543msgctxt "part of: Nokia HERE terms and conditions"
538msgid "terms and conditions"
544msgid "terms and conditions"
539−msgstr ""
545+msgstr "pogoji uporabe"
540
546
541#: qml/Wizard/Pages/40-location.qml:160
547#: qml/Wizard/Pages/40-location.qml:160
542msgid "GPS only"
548msgid "GPS only"
543−msgstr ""
549+msgstr "Samo GPS"
544
550
545#: qml/Wizard/Pages/40-location.qml:214
551#: qml/Wizard/Pages/40-location.qml:214
546msgid "Don't use my location"
552msgid "Don't use my location"
547−msgstr ""
553+msgstr "Ne uporabljaj mojega položaja"
548
554
549#: qml/Wizard/Pages/40-location.qml:260
555#: qml/Wizard/Pages/40-location.qml:260
550msgid "You can change it later in System Settings."
556msgid "You can change it later in System Settings."
551−msgstr ""
557+msgstr "Izbiro lahko kasneje spremenite v Sistemskih nastavitvah."
552
558
553#: qml/Wizard/Pages/50-timezone.qml:29
559#: qml/Wizard/Pages/50-timezone.qml:29
554msgid "Time Zone"
560msgid "Time Zone"
555−msgstr ""
561+msgstr "Časovni pas"
556
562
557#: qml/Wizard/Pages/50-timezone.qml:178
563#: qml/Wizard/Pages/50-timezone.qml:178
558msgid "Enter your city"
564msgid "Enter your city"
559−msgstr ""
565+msgstr "Vnesite svoje mesto"
560
566
561#: qml/Wizard/Pages/60-account.qml:24
567#: qml/Wizard/Pages/60-account.qml:24
562msgid "Personalize Your Device"
568msgid "Personalize Your Device"
563−msgstr ""
569+msgstr "Prilagodite si svojo napravo"
564
570
565#: qml/Wizard/Pages/60-account.qml:48
571#: qml/Wizard/Pages/60-account.qml:48
566msgid "Preferred Name"
572msgid "Preferred Name"
567−msgstr ""
573+msgstr "Najljubše ime"
568
574
569#: qml/Wizard/Pages/70-passwd-type.qml:39
575#: qml/Wizard/Pages/70-passwd-type.qml:39
570msgid "Lock Screen"
576msgid "Lock Screen"
571−msgstr ""
577+msgstr "Zakleni zaslon"
572
578
573#: qml/Wizard/Pages/70-passwd-type.qml:101
579#: qml/Wizard/Pages/70-passwd-type.qml:101
574msgctxt "Label: Type of security method"
580msgctxt "Label: Type of security method"
575msgid "Create new password"
581msgid "Create new password"
576−msgstr ""
582+msgstr "Ustvari novo geslo"
577
583
578#: qml/Wizard/Pages/70-passwd-type.qml:103
584#: qml/Wizard/Pages/70-passwd-type.qml:103
579msgctxt "Label: Type of security method"
585msgctxt "Label: Type of security method"
580msgid "Create passcode (numbers only)"
586msgid "Create passcode (numbers only)"
581−msgstr ""
587+msgstr "Ustvari kodo (samo številke)"
582
588
583#: qml/Wizard/Pages/70-passwd-type.qml:105
589#: qml/Wizard/Pages/70-passwd-type.qml:105
584msgctxt "Label: Type of security method"
590msgctxt "Label: Type of security method"
585msgid "No lock code"
591msgid "No lock code"
586−msgstr ""
592+msgstr "Brez kode za zaklep"
587
593
588#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
594#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
589msgid "Privacy Policy"
595msgid "Privacy Policy"
590−msgstr ""
596+msgstr "Pravila zasebnosti"
591
597
592#: qml/Wizard/Pages/75-report-check.qml:26
598#: qml/Wizard/Pages/75-report-check.qml:26
593msgid "Help Us Improve"
599msgid "Help Us Improve"
594−msgstr ""
600+msgstr "Pomagajte nam izboljšati"
595
601
596#: qml/Wizard/Pages/75-report-check.qml:59
602#: qml/Wizard/Pages/75-report-check.qml:59
597msgid "Improve system performance by sending us crashes and error reports."
603msgid "Improve system performance by sending us crashes and error reports."
598−msgstr ""
604+msgstr "Izboljšajte delovanje sistema s poročanjem o sesutjih in napakah."
599
605
600#: qml/Wizard/Pages/75-report-check.qml:60
606#: qml/Wizard/Pages/75-report-check.qml:60
601msgid "Privacy policy"
607msgid "Privacy policy"
602−msgstr ""
608+msgstr "Pravila zasebnosti"
603
609
604#: qml/Wizard/Pages/80-finished.qml:89
610#: qml/Wizard/Pages/80-finished.qml:89
605msgid "Welcome to Ubuntu"
611msgid "Welcome to Ubuntu"
606−msgstr ""
612+msgstr "Dobrodošli v Ubuntuju"
607
613
608#: qml/Wizard/Pages/80-finished.qml:104
614#: qml/Wizard/Pages/80-finished.qml:104
609msgid "You are ready to use your device now"
615msgid "You are ready to use your device now"
610−msgstr ""
616+msgstr "Sedaj imate vse pripravljeno za uporabo svoje naprave"
611
617
612#: qml/Wizard/Pages/80-finished.qml:124
618#: qml/Wizard/Pages/80-finished.qml:124
613msgid "Get Started"
619msgid "Get Started"
614−msgstr ""
620+msgstr "Začnite"
615
621
616#: qml/Wizard/Pages/here-terms.qml:25
622#: qml/Wizard/Pages/here-terms.qml:25
617msgid "Terms & Conditions"
623msgid "Terms & Conditions"
@@ -620,6 +626,8 @@ msgstr "Pogoji uporabe"
620#: qml/Wizard/Pages/here-terms.qml:69
626#: qml/Wizard/Pages/here-terms.qml:69
621msgid "Your device uses positioning technologies provided by HERE."
627msgid "Your device uses positioning technologies provided by HERE."
622msgstr ""
628msgstr ""
629+"Vaša naprava uporablja tehnologije določanja položaja, ki jih zagotavlja "
630+"HERE."
623
631
624#: qml/Wizard/Pages/here-terms.qml:81
632#: qml/Wizard/Pages/here-terms.qml:81
625msgid ""
633msgid ""
@@ -627,21 +635,26 @@ msgid ""
627"collects information about nearby cell towers and Wi-Fi hotspots around your "
635"collects information about nearby cell towers and Wi-Fi hotspots around your "
628"current location whenever your position is being found."
636"current location whenever your position is being found."
629msgstr ""
637msgstr ""
638+"Za storitve določanja položaja in izboljševanje njihove kakovosti HERE ob "
639+"vsakokratni določitvi položaja zbira podatke o bližnjih oddajnikih mobilnega "
640+"omrežja in vstopnih točkah Wi-Fi."
630
641
631#: qml/Wizard/Pages/here-terms.qml:93
642#: qml/Wizard/Pages/here-terms.qml:93
632msgid ""
643msgid ""
633"The information collected is used to analyze the service and to improve the "
644"The information collected is used to analyze the service and to improve the "
634"use of service, but not to identify you personally."
645"use of service, but not to identify you personally."
635msgstr ""
646msgstr ""
647+"Ti podatki se zbirajo z namenom analize storitve in njene boljše izrabe in "
648+"ne za ugotavljanje vaše istovetnosti."
636
649
637#: qml/Wizard/Pages/here-terms.qml:106
650#: qml/Wizard/Pages/here-terms.qml:106
638#, qt-format
651#, qt-format
639msgid "By continuing, you agree to the HERE platform %1 and %2."
652msgid "By continuing, you agree to the HERE platform %1 and %2."
640−msgstr ""
653+msgstr "Ča nadaljujete, se strinjate s platformo HERE %1 in %2."
641
654
642#: qml/Wizard/Pages/here-terms.qml:107
655#: qml/Wizard/Pages/here-terms.qml:107
643msgid "Service Terms"
656msgid "Service Terms"
644−msgstr ""
657+msgstr "Pogoji uporabe"
645
658
646#: qml/Wizard/Pages/passcode-confirm.qml:43
659#: qml/Wizard/Pages/passcode-confirm.qml:43
647#: qml/Wizard/Pages/passcode-desktop.qml:80
660#: qml/Wizard/Pages/passcode-desktop.qml:80
@@ -650,69 +663,69 @@ msgstr "Potrdite geslo"
650
663
651#: qml/Wizard/Pages/passcode-confirm.qml:45
664#: qml/Wizard/Pages/passcode-confirm.qml:45
652msgid "Incorrect passcode."
665msgid "Incorrect passcode."
653−msgstr ""
666+msgstr "Napačna koda"
654
667
655#: qml/Wizard/Pages/passcode-confirm.qml:45
668#: qml/Wizard/Pages/passcode-confirm.qml:45
656msgctxt "Enter the passcode again"
669msgctxt "Enter the passcode again"
657msgid "Please re-enter."
670msgid "Please re-enter."
658−msgstr ""
671+msgstr "Vnesite ponovno."
659
672
660#: qml/Wizard/Pages/passcode-desktop.qml:30
673#: qml/Wizard/Pages/passcode-desktop.qml:30
661msgid "Lock Screen Passcode"
674msgid "Lock Screen Passcode"
662−msgstr ""
675+msgstr "Koda za zaklep zaslona"
663
676
664#: qml/Wizard/Pages/passcode-desktop.qml:56
677#: qml/Wizard/Pages/passcode-desktop.qml:56
665msgid "Enter 4 numbers to setup your passcode"
678msgid "Enter 4 numbers to setup your passcode"
666−msgstr ""
679+msgstr "Za določitev kode vnesite 4 številke"
667
680
668#: qml/Wizard/Pages/passcode-desktop.qml:65
681#: qml/Wizard/Pages/passcode-desktop.qml:65
669#: qml/Wizard/Pages/passcode-set.qml:54
682#: qml/Wizard/Pages/passcode-set.qml:54
670msgid "Choose passcode"
683msgid "Choose passcode"
671−msgstr ""
684+msgstr "Izberite kodo"
672
685
673#: qml/Wizard/Pages/passcode-desktop.qml:105
686#: qml/Wizard/Pages/passcode-desktop.qml:105
674msgid "Passcode too short"
687msgid "Passcode too short"
675−msgstr ""
688+msgstr "Koda prekratka"
676
689
677#: qml/Wizard/Pages/passcode-desktop.qml:107
690#: qml/Wizard/Pages/passcode-desktop.qml:107
678msgid "Passcodes match"
691msgid "Passcodes match"
679−msgstr ""
692+msgstr "Kodi se ujemata"
680
693
681#: qml/Wizard/Pages/passcode-desktop.qml:109
694#: qml/Wizard/Pages/passcode-desktop.qml:109
682msgid "Passcodes do not match"
695msgid "Passcodes do not match"
683−msgstr ""
696+msgstr "Kodi se ne ujemata"
684
697
685#: qml/Wizard/Pages/passcode-set.qml:62
698#: qml/Wizard/Pages/passcode-set.qml:62
686msgid "Passcode must be 4 characters long"
699msgid "Passcode must be 4 characters long"
687−msgstr ""
700+msgstr "Koda mora biti dolga 4 znake"
688
701
689#: qml/Wizard/Pages/password-set.qml:30
702#: qml/Wizard/Pages/password-set.qml:30
690msgid "Lock Screen Password"
703msgid "Lock Screen Password"
691−msgstr ""
704+msgstr "Geslo za zaklep zaslona"
692
705
693#: qml/Wizard/Pages/password-set.qml:61
706#: qml/Wizard/Pages/password-set.qml:61
694msgid "Enter at least 8 characters"
707msgid "Enter at least 8 characters"
695−msgstr ""
708+msgstr "Vnesite najmanj 8 znakov"
696
709
697#: qml/Wizard/Pages/password-set.qml:73
710#: qml/Wizard/Pages/password-set.qml:73
698msgid "Choose password"
711msgid "Choose password"
699−msgstr ""
712+msgstr "Izberite geslo"
700
713
701#: qml/Wizard/Pages/password-set.qml:103
714#: qml/Wizard/Pages/password-set.qml:103
702msgid "Confirm password"
715msgid "Confirm password"
703−msgstr ""
716+msgstr "Potrdite geslo"
704
717
705#: qml/Wizard/Pages/sim.qml:27
718#: qml/Wizard/Pages/sim.qml:27
706msgid "No SIM card installed"
719msgid "No SIM card installed"
707−msgstr ""
720+msgstr "Kartica SIM ni nameščena"
708
721
709#: qml/Wizard/Pages/sim.qml:54
722#: qml/Wizard/Pages/sim.qml:54
710msgid "SIM card added"
723msgid "SIM card added"
711−msgstr ""
724+msgstr "Kartica SIM dodana"
712
725
713#: qml/Wizard/Pages/sim.qml:55
726#: qml/Wizard/Pages/sim.qml:55
714msgid "You must restart the device to access the mobile network."
727msgid "You must restart the device to access the mobile network."
715−msgstr ""
728+msgstr "Za dostop do mobilnega omrežja morate napravo ponovno zagnati."
716
729
717#: qml/Wizard/Pages/sim.qml:59
730#: qml/Wizard/Pages/sim.qml:59
718msgid "Restart"
731msgid "Restart"
@@ -721,34 +734,35 @@ msgstr "Ponovni zagon"
721#: qml/Wizard/Pages/sim.qml:78
734#: qml/Wizard/Pages/sim.qml:78
722msgid "You won’t be able to make calls or use text messaging without a SIM."
735msgid "You won’t be able to make calls or use text messaging without a SIM."
723msgstr ""
736msgstr ""
737+"Brez kartice SIM ne boste mogli klicati ali uporabljati kratkih sporočil."
724
738
725#: qml/Wizard/Pages/sim.qml:90
739#: qml/Wizard/Pages/sim.qml:90
726msgid "To proceed with no SIM tap Skip."
740msgid "To proceed with no SIM tap Skip."
727−msgstr ""
741+msgstr "Za nadaljevanje brez kartice SIM tapnite Preskoči"
728
742
729#: qml/Wizard/PasswordMeter.qml:87
743#: qml/Wizard/PasswordMeter.qml:87
730msgid "Passwords match"
744msgid "Passwords match"
731−msgstr ""
745+msgstr "Gesli se ujemata"
732
746
733#: qml/Wizard/PasswordMeter.qml:89
747#: qml/Wizard/PasswordMeter.qml:89
734msgid "Passwords do not match"
748msgid "Passwords do not match"
735−msgstr ""
749+msgstr "Gesli se ne ujemata"
736
750
737#: qml/Wizard/PasswordMeter.qml:93
751#: qml/Wizard/PasswordMeter.qml:93
738msgid "Strong password"
752msgid "Strong password"
739−msgstr ""
753+msgstr "Močno geslo"
740
754
741#: qml/Wizard/PasswordMeter.qml:95
755#: qml/Wizard/PasswordMeter.qml:95
742msgid "Fair password"
756msgid "Fair password"
743−msgstr ""
757+msgstr "Sprejemljivo geslo"
744
758
745#: qml/Wizard/PasswordMeter.qml:97
759#: qml/Wizard/PasswordMeter.qml:97
746msgid "Weak password"
760msgid "Weak password"
747−msgstr ""
761+msgstr "Šibko geslo"
748
762
749#: qml/Wizard/PasswordMeter.qml:99
763#: qml/Wizard/PasswordMeter.qml:99
750msgid "Very weak password"
764msgid "Very weak password"
751−msgstr ""
765+msgstr "Zelo šibko geslo"
752
766
753#~ msgid "Confirm"
767#~ msgid "Confirm"
754#~ msgstr "Potrdi"
768#~ msgstr "Potrdi"
@@ -1059,3 +1073,6 @@ msgstr ""
1059
1073
1060#~ msgid "%a %d %b %l:%M %p"
1074#~ msgid "%a %d %b %l:%M %p"
1061#~ msgstr "%a %d %b %l:%M %p"
1075#~ msgstr "%a %d %b %l:%M %p"
1076+
1077+#~ msgid "Hover your mouse on the right edge to view your open apps"
1078+#~ msgstr "Za prikaz odprtih programov pridržite miško na desnem robu"
po/sq.po+36−35
@@ -2,21 +2,22 @@
2# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
2# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
3# This file is distributed under the same license as the unity8 package.
3# This file is distributed under the same license as the unity8 package.
4# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
4# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5−#
5+# Indrit Bashkimi <indrit.bashkimi@gmail.com>, 2016.
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11−"PO-Revision-Date: 2015-11-30 21:05+0000\n"
11+"PO-Revision-Date: 2016-04-21 06:03+0000\n"
12"Last-Translator: Indrit Bashkimi <indrit.bashkimi@gmail.com>\n"
12"Last-Translator: Indrit Bashkimi <indrit.bashkimi@gmail.com>\n"
13−"Language-Team: Albanian <sq@li.org>\n"
13+"Language-Team: sq\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: 2016-03-24 06:07+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:01+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20+"Language: sq\n"
20
21
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
23msgid "Password: "
@@ -180,11 +181,11 @@ msgstr "Shto në të preferuarit"
180
181
181#: qml/Dash/FiltersPopover.qml:60
182#: qml/Dash/FiltersPopover.qml:60
182msgid "Refine your results"
183msgid "Refine your results"
183−msgstr ""
184+msgstr "Përmirëso rezultatet"
184
185
185#: qml/Dash/FiltersPopover.qml:69
186#: qml/Dash/FiltersPopover.qml:69
186msgid "Reset"
187msgid "Reset"
187−msgstr ""
188+msgstr "Rivendos"
188
189
189#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
190#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
190msgid "See less"
191msgid "See less"
@@ -201,7 +202,7 @@ msgstr "Kërko"
201
202
202#: qml/Dash/PageHeaderExtraPanel.qml:55
203#: qml/Dash/PageHeaderExtraPanel.qml:55
203msgid "Recent Searches"
204msgid "Recent Searches"
204−msgstr ""
205+msgstr "Kërkimet e fundit"
205
206
206#: qml/Dash/PageHeaderExtraPanel.qml:66
207#: qml/Dash/PageHeaderExtraPanel.qml:66
207msgid "Clear All"
208msgid "Clear All"
@@ -209,11 +210,11 @@ msgstr ""
209
210
210#: qml/Dash/Previews/PreviewActionCombo.qml:35
211#: qml/Dash/Previews/PreviewActionCombo.qml:35
211msgid "More..."
212msgid "More..."
212−msgstr "Më Tepër..."
213+msgstr "Më tepër..."
213
214
214#: qml/Dash/Previews/PreviewActionCombo.qml:35
215#: qml/Dash/Previews/PreviewActionCombo.qml:35
215msgid "Less..."
216msgid "Less..."
216−msgstr "Më Pak..."
217+msgstr "Më pak..."
217
218
218#: qml/Dash/Previews/PreviewCommentInput.qml:68
219#: qml/Dash/Previews/PreviewCommentInput.qml:68
219#: qml/Dash/Previews/PreviewRatingInput.qml:174
220#: qml/Dash/Previews/PreviewRatingInput.qml:174
@@ -378,7 +379,7 @@ msgstr "Koha e mbetur: %1"
378
379
379#: qml/Panel/Indicators/MenuItemFactory.qml:910
380#: qml/Panel/Indicators/MenuItemFactory.qml:910
380msgid "In queue…"
381msgid "In queue…"
381−msgstr "Në pritje..."
382+msgstr "Në pritje…"
382
383
383#: qml/Panel/Indicators/MenuItemFactory.qml:914
384#: qml/Panel/Indicators/MenuItemFactory.qml:914
384msgid "Downloading"
385msgid "Downloading"
@@ -440,19 +441,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
441msgid "Swipe up to manage the app"
441msgstr ""
442msgstr ""
442
443
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
444#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
445msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
446msgstr ""
450
447
451−#: qml/Tutorial/TutorialRight.qml:54
448+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
449+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
450msgstr ""
454
451
455#: qml/Tutorial/TutorialRight.qml:55
452#: qml/Tutorial/TutorialRight.qml:55
453+msgid "Push your mouse against the right edge to view your open apps"
454+msgstr ""
455+
456+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
457msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
458msgstr ""
458
459
@@ -471,7 +472,7 @@ msgstr "Prapa"
471
472
472#: qml/Wizard/Pages/10-welcome.qml:27
473#: qml/Wizard/Pages/10-welcome.qml:27
473msgid "Language"
474msgid "Language"
474−msgstr ""
475+msgstr "Gjuha"
475
476
476#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
477#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
477#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
478#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
@@ -525,11 +526,11 @@ msgstr ""
525
526
526#: qml/Wizard/Pages/40-location.qml:160
527#: qml/Wizard/Pages/40-location.qml:160
527msgid "GPS only"
528msgid "GPS only"
528−msgstr ""
529+msgstr "vetëm GPS"
529
530
530#: qml/Wizard/Pages/40-location.qml:214
531#: qml/Wizard/Pages/40-location.qml:214
531msgid "Don't use my location"
532msgid "Don't use my location"
532−msgstr ""
533+msgstr "Mos përdor vendodhjen time"
533
534
534#: qml/Wizard/Pages/40-location.qml:260
535#: qml/Wizard/Pages/40-location.qml:260
535msgid "You can change it later in System Settings."
536msgid "You can change it later in System Settings."
@@ -549,7 +550,7 @@ msgstr ""
549
550
550#: qml/Wizard/Pages/60-account.qml:48
551#: qml/Wizard/Pages/60-account.qml:48
551msgid "Preferred Name"
552msgid "Preferred Name"
552−msgstr ""
553+msgstr "Emri i preferuar"
553
554
554#: qml/Wizard/Pages/70-passwd-type.qml:39
555#: qml/Wizard/Pages/70-passwd-type.qml:39
555msgid "Lock Screen"
556msgid "Lock Screen"
@@ -558,7 +559,7 @@ msgstr ""
558#: qml/Wizard/Pages/70-passwd-type.qml:101
559#: qml/Wizard/Pages/70-passwd-type.qml:101
559msgctxt "Label: Type of security method"
560msgctxt "Label: Type of security method"
560msgid "Create new password"
561msgid "Create new password"
561−msgstr ""
562+msgstr "Krijo fjalëkalim të ri"
562
563
563#: qml/Wizard/Pages/70-passwd-type.qml:103
564#: qml/Wizard/Pages/70-passwd-type.qml:103
564msgctxt "Label: Type of security method"
565msgctxt "Label: Type of security method"
@@ -588,11 +589,11 @@ msgstr ""
588
589
589#: qml/Wizard/Pages/80-finished.qml:89
590#: qml/Wizard/Pages/80-finished.qml:89
590msgid "Welcome to Ubuntu"
591msgid "Welcome to Ubuntu"
591−msgstr ""
592+msgstr "Mirëserdhe në Ubuntu"
592
593
593#: qml/Wizard/Pages/80-finished.qml:104
594#: qml/Wizard/Pages/80-finished.qml:104
594msgid "You are ready to use your device now"
595msgid "You are ready to use your device now"
595−msgstr ""
596+msgstr "Tani je gati për të përdorur pajisjen"
596
597
597#: qml/Wizard/Pages/80-finished.qml:124
598#: qml/Wizard/Pages/80-finished.qml:124
598msgid "Get Started"
599msgid "Get Started"
@@ -681,11 +682,11 @@ msgstr ""
681
682
682#: qml/Wizard/Pages/password-set.qml:73
683#: qml/Wizard/Pages/password-set.qml:73
683msgid "Choose password"
684msgid "Choose password"
684−msgstr ""
685+msgstr "Zgjidh fjalëkalimin"
685
686
686#: qml/Wizard/Pages/password-set.qml:103
687#: qml/Wizard/Pages/password-set.qml:103
687msgid "Confirm password"
688msgid "Confirm password"
688−msgstr ""
689+msgstr "Konfirmo fjalëkalimin"
689
690
690#: qml/Wizard/Pages/sim.qml:27
691#: qml/Wizard/Pages/sim.qml:27
691msgid "No SIM card installed"
692msgid "No SIM card installed"
@@ -693,7 +694,7 @@ msgstr ""
693
694
694#: qml/Wizard/Pages/sim.qml:54
695#: qml/Wizard/Pages/sim.qml:54
695msgid "SIM card added"
696msgid "SIM card added"
696−msgstr ""
697+msgstr "Skeda SIM u shtua"
697
698
698#: qml/Wizard/Pages/sim.qml:55
699#: qml/Wizard/Pages/sim.qml:55
699msgid "You must restart the device to access the mobile network."
700msgid "You must restart the device to access the mobile network."
@@ -705,7 +706,7 @@ msgstr ""
705
706
706#: qml/Wizard/Pages/sim.qml:78
707#: qml/Wizard/Pages/sim.qml:78
707msgid "You won’t be able to make calls or use text messaging without a SIM."
708msgid "You won’t be able to make calls or use text messaging without a SIM."
708−msgstr ""
709+msgstr "Nuk është e mundur të bëhen thirrje apo të përdoren SMS pa një SIM."
709
710
710#: qml/Wizard/Pages/sim.qml:90
711#: qml/Wizard/Pages/sim.qml:90
711msgid "To proceed with no SIM tap Skip."
712msgid "To proceed with no SIM tap Skip."
@@ -713,27 +714,27 @@ msgstr ""
713
714
714#: qml/Wizard/PasswordMeter.qml:87
715#: qml/Wizard/PasswordMeter.qml:87
715msgid "Passwords match"
716msgid "Passwords match"
716−msgstr ""
717+msgstr "Fjalëkalimet përputhen"
717
718
718#: qml/Wizard/PasswordMeter.qml:89
719#: qml/Wizard/PasswordMeter.qml:89
719msgid "Passwords do not match"
720msgid "Passwords do not match"
720−msgstr ""
721+msgstr "Fjalëkalimet nuk përputhen"
721
722
722#: qml/Wizard/PasswordMeter.qml:93
723#: qml/Wizard/PasswordMeter.qml:93
723msgid "Strong password"
724msgid "Strong password"
724−msgstr ""
725+msgstr "Fjalëkalim i fuqishëm"
725
726
726#: qml/Wizard/PasswordMeter.qml:95
727#: qml/Wizard/PasswordMeter.qml:95
727msgid "Fair password"
728msgid "Fair password"
728−msgstr ""
729+msgstr "Fjalëkalim çka"
729
730
730#: qml/Wizard/PasswordMeter.qml:97
731#: qml/Wizard/PasswordMeter.qml:97
731msgid "Weak password"
732msgid "Weak password"
732−msgstr ""
733+msgstr "Fjalëkalim i dobët"
733
734
734#: qml/Wizard/PasswordMeter.qml:99
735#: qml/Wizard/PasswordMeter.qml:99
735msgid "Very weak password"
736msgid "Very weak password"
736−msgstr ""
737+msgstr "Fjalëkalim shumë i dobët"
737
738
738#~ msgid "Top edge"
739#~ msgid "Top edge"
739#~ msgstr "Cepi i sipërm"
740#~ msgstr "Cepi i sipërm"
po/sr.po+13−19
@@ -8,7 +8,7 @@ msgid ""
8msgstr ""
8msgstr ""
9"Project-Id-Version: unity\n"
9"Project-Id-Version: unity\n"
10"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
11−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
11+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
12"PO-Revision-Date: 2016-03-24 12:36+0000\n"
12"PO-Revision-Date: 2016-03-24 12:36+0000\n"
13"Last-Translator: Bojan Bogdanović <Unknown>\n"
13"Last-Translator: Bojan Bogdanović <Unknown>\n"
14"Language-Team: српски <xfce4@xfce4.org>\n"
14"Language-Team: српски <xfce4@xfce4.org>\n"
@@ -17,8 +17,8 @@ msgstr ""
17"Content-Transfer-Encoding: 8bit\n"
17"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
19"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
20−"X-Launchpad-Export-Date: 2016-03-25 05:55+0000\n"
20+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
21−"X-Generator: Launchpad (build 17967)\n"
21+"X-Generator: Launchpad (build 17995)\n"
22"Language: sr\n"
22"Language: sr\n"
23
23
24#: plugins/IntegratedLightDM/Greeter.cpp:112
24#: plugins/IntegratedLightDM/Greeter.cpp:112
@@ -456,19 +456,19 @@ msgstr "Превуците нагоре да креирате поруку"
456msgid "Swipe up to manage the app"
456msgid "Swipe up to manage the app"
457msgstr "Превуците нагоре да урављате програмом"
457msgstr "Превуците нагоре да урављате програмом"
458
458
459−#: qml/Tutorial/TutorialLeft.qml:47
460−msgid "Swipe from the left edge to open the launcher"
461−msgstr "Превуците са леве ивице да отворите покретач"
462−
463#: qml/Tutorial/TutorialLeftLong.qml:47
459#: qml/Tutorial/TutorialLeftLong.qml:47
464msgid "Long swipe from the left edge to open the Today scope"
460msgid "Long swipe from the left edge to open the Today scope"
465msgstr "Дуго превлачење са леве ивице да отворите опсег Данас"
461msgstr "Дуго превлачење са леве ивице да отворите опсег Данас"
466
462
467−#: qml/Tutorial/TutorialRight.qml:54
463+#: qml/Tutorial/TutorialLeft.qml:47
468−msgid "Hover your mouse on the right edge to view your open apps"
464+msgid "Swipe from the left edge to open the launcher"
469−msgstr "Задржите миша инад десне ивице да видите отворене програме"
465+msgstr "Превуците са леве ивице да отворите покретач"
470
466
471#: qml/Tutorial/TutorialRight.qml:55
467#: qml/Tutorial/TutorialRight.qml:55
468+msgid "Push your mouse against the right edge to view your open apps"
469+msgstr ""
470+
471+#: qml/Tutorial/TutorialRight.qml:56
472msgid "Short or long swipe from the right edge to view your open apps"
472msgid "Short or long swipe from the right edge to view your open apps"
473msgstr ""
473msgstr ""
474"Каратко или дуго превлачење са десне ивице да видите ваше отворене програме"
474"Каратко или дуго превлачење са десне ивице да видите ваше отворене програме"
@@ -1029,12 +1029,6 @@ msgstr "Веома слаба лозинка"
1029#~ msgid "View all your running tasks."
1029#~ msgid "View all your running tasks."
1030#~ msgstr "Прегледајте све покренуте задатке."
1030#~ msgstr "Прегледајте све покренуте задатке."
1031
1031
1032−#~ msgid "Welcome to your Ubuntu device."
1033−#~ msgstr "Добро дошли у Убунту уређај."
1034−
1035−#~ msgid "Please select how you’d like to unlock your device."
1036−#~ msgstr "Изаберите како желите да откључате уређај."
1037−
1038#~ msgid "Let the phone detect your location:"
1032#~ msgid "Let the phone detect your location:"
1039#~ msgstr "Допустите да телефон препозна ваш положај:"
1033#~ msgstr "Допустите да телефон препозна ваш положај:"
1040
1034
@@ -1069,11 +1063,11 @@ msgstr "Веома слаба лозинка"
1069#~ "Ово можете да искључите у <b>Подешавањима система</b> под ставком "
1063#~ "Ово можете да искључите у <b>Подешавањима система</b> под ставком "
1070#~ "<b>Безбедност и приватност</b>"
1064#~ "<b>Безбедност и приватност</b>"
1071
1065
1072−#~ msgid "Your device is now ready to use."
1073−#~ msgstr "Ваш уређај је сада спреман за употребу."
1074−
1075#~ msgid "Please try again."
1066#~ msgid "Please try again."
1076#~ msgstr "Покушајте поново."
1067#~ msgstr "Покушајте поново."
1077
1068
1078#~ msgid "Choose your passcode"
1069#~ msgid "Choose your passcode"
1079#~ msgstr "Изаберите приступни код"
1070#~ msgstr "Изаберите приступни код"
1071+
1072+#~ msgid "Hover your mouse on the right edge to view your open apps"
1073+#~ msgstr "Задржите миша инад десне ивице да видите отворене програме"
po/sv.po+13−10
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2016-03-25 05:01+0000\n"
11"PO-Revision-Date: 2016-03-25 05:01+0000\n"
12"Last-Translator: Josef Andersson <Unknown>\n"
12"Last-Translator: Josef Andersson <Unknown>\n"
13"Language-Team: Swedish\n"
13"Language-Team: Swedish\n"
@@ -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: 2016-03-26 05:44+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17967)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20"Language: sv\n"
20"Language: sv\n"
21
21
22#: plugins/IntegratedLightDM/Greeter.cpp:112
22#: plugins/IntegratedLightDM/Greeter.cpp:112
@@ -450,19 +450,19 @@ msgstr "Svep uppåt för att skapa ett meddelande"
450msgid "Swipe up to manage the app"
450msgid "Swipe up to manage the app"
451msgstr "Svep uppåt för att hantera programmet"
451msgstr "Svep uppåt för att hantera programmet"
452
452
453−#: qml/Tutorial/TutorialLeft.qml:47
454−msgid "Swipe from the left edge to open the launcher"
455−msgstr "Svep från vänstra kanten för att öppna programstartaren"
456−
457#: qml/Tutorial/TutorialLeftLong.qml:47
453#: qml/Tutorial/TutorialLeftLong.qml:47
458msgid "Long swipe from the left edge to open the Today scope"
454msgid "Long swipe from the left edge to open the Today scope"
459msgstr "Gör ett lång svep från vänstra kanten för öppna vyn Idag"
455msgstr "Gör ett lång svep från vänstra kanten för öppna vyn Idag"
460
456
461−#: qml/Tutorial/TutorialRight.qml:54
457+#: qml/Tutorial/TutorialLeft.qml:47
462−msgid "Hover your mouse on the right edge to view your open apps"
458+msgid "Swipe from the left edge to open the launcher"
463−msgstr "Hovra din mus över högra kanten för att se dina öppna program"
459+msgstr "Svep från vänstra kanten för att öppna programstartaren"
464
460
465#: qml/Tutorial/TutorialRight.qml:55
461#: qml/Tutorial/TutorialRight.qml:55
462+msgid "Push your mouse against the right edge to view your open apps"
463+msgstr ""
464+
465+#: qml/Tutorial/TutorialRight.qml:56
466msgid "Short or long swipe from the right edge to view your open apps"
466msgid "Short or long swipe from the right edge to view your open apps"
467msgstr ""
467msgstr ""
468"Svep kort eller långt från högra kanten för att visa dina öppna program"
468"Svep kort eller långt från högra kanten för att visa dina öppna program"
@@ -1068,3 +1068,6 @@ msgstr "Väldigt svagt lösenord"
1068
1068
1069#~ msgid "Call back"
1069#~ msgid "Call back"
1070#~ msgstr "Ring upp"
1070#~ msgstr "Ring upp"
1071+
1072+#~ msgid "Hover your mouse on the right edge to view your open apps"
1073+#~ msgstr "Hovra din mus över högra kanten för att se dina öppna program"
po/sw.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-07-17 20:02+0000\n"
11"PO-Revision-Date: 2015-07-17 20:02+0000\n"
12"Last-Translator: Valentine <mwangi_valentino@yahoo.com>\n"
12"Last-Translator: Valentine <mwangi_valentino@yahoo.com>\n"
13"Language-Team: Swahili <sw@li.org>\n"
13"Language-Team: Swahili <sw@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:02+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -446,19 +446,19 @@ msgstr ""
446msgid "Swipe up to manage the app"
446msgid "Swipe up to manage the app"
447msgstr ""
447msgstr ""
448
448
449−#: qml/Tutorial/TutorialLeft.qml:47
450−msgid "Swipe from the left edge to open the launcher"
451−msgstr ""
452−
453#: qml/Tutorial/TutorialLeftLong.qml:47
449#: qml/Tutorial/TutorialLeftLong.qml:47
454msgid "Long swipe from the left edge to open the Today scope"
450msgid "Long swipe from the left edge to open the Today scope"
455msgstr ""
451msgstr ""
456
452
457−#: qml/Tutorial/TutorialRight.qml:54
453+#: qml/Tutorial/TutorialLeft.qml:47
458−msgid "Hover your mouse on the right edge to view your open apps"
454+msgid "Swipe from the left edge to open the launcher"
459msgstr ""
455msgstr ""
460
456
461#: qml/Tutorial/TutorialRight.qml:55
457#: qml/Tutorial/TutorialRight.qml:55
458+msgid "Push your mouse against the right edge to view your open apps"
459+msgstr ""
460+
461+#: qml/Tutorial/TutorialRight.qml:56
462msgid "Short or long swipe from the right edge to view your open apps"
462msgid "Short or long swipe from the right edge to view your open apps"
463msgstr ""
463msgstr ""
464
464
po/ta.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2013-10-24 11:36+0000\n"
11"PO-Revision-Date: 2013-10-24 11:36+0000\n"
12"Last-Translator: Arun Kumar - அருண் குமார் <thangam.arunx@gmail.com>\n"
12"Last-Translator: Arun Kumar - அருண் குமார் <thangam.arunx@gmail.com>\n"
13"Language-Team: Ubuntu Tamil Team/Free Tamil Computing/Thamizha\n"
13"Language-Team: Ubuntu Tamil Team/Free Tamil Computing/Thamizha\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:03+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20"Language: ta\n"
20"Language: ta\n"
21
21
22#: plugins/IntegratedLightDM/Greeter.cpp:112
22#: plugins/IntegratedLightDM/Greeter.cpp:112
@@ -441,19 +441,19 @@ msgstr ""
441msgid "Swipe up to manage the app"
441msgid "Swipe up to manage the app"
442msgstr ""
442msgstr ""
443
443
444−#: qml/Tutorial/TutorialLeft.qml:47
445−msgid "Swipe from the left edge to open the launcher"
446−msgstr ""
447−
448#: qml/Tutorial/TutorialLeftLong.qml:47
444#: qml/Tutorial/TutorialLeftLong.qml:47
449msgid "Long swipe from the left edge to open the Today scope"
445msgid "Long swipe from the left edge to open the Today scope"
450msgstr ""
446msgstr ""
451
447
452−#: qml/Tutorial/TutorialRight.qml:54
448+#: qml/Tutorial/TutorialLeft.qml:47
453−msgid "Hover your mouse on the right edge to view your open apps"
449+msgid "Swipe from the left edge to open the launcher"
454msgstr ""
450msgstr ""
455
451
456#: qml/Tutorial/TutorialRight.qml:55
452#: qml/Tutorial/TutorialRight.qml:55
453+msgid "Push your mouse against the right edge to view your open apps"
454+msgstr ""
455+
456+#: qml/Tutorial/TutorialRight.qml:56
457msgid "Short or long swipe from the right edge to view your open apps"
457msgid "Short or long swipe from the right edge to view your open apps"
458msgstr ""
458msgstr ""
459
459
po/te.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2014-07-19 10:04+0000\n"
11"PO-Revision-Date: 2014-07-19 10:04+0000\n"
12"Last-Translator: Praveen Illa <mail2ipn@gmail.com>\n"
12"Last-Translator: Praveen Illa <mail2ipn@gmail.com>\n"
13"Language-Team: Telugu <te@li.org>\n"
13"Language-Team: Telugu <te@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:03+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/th.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2014-10-02 04:55+0000\n"
11"PO-Revision-Date: 2014-10-02 04:55+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Thai <th@li.org>\n"
13"Language-Team: Thai <th@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:03+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/tr.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-03-22 15:56+0000\n"
11"PO-Revision-Date: 2015-03-22 15:56+0000\n"
12"Last-Translator: Arda Ünlü <aarda.uunlu@gmail.com>\n"
12"Last-Translator: Arda Ünlü <aarda.uunlu@gmail.com>\n"
13"Language-Team: Turkish <tr@li.org>\n"
13"Language-Team: Turkish <tr@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:03+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -444,19 +444,19 @@ msgstr ""
444msgid "Swipe up to manage the app"
444msgid "Swipe up to manage the app"
445msgstr ""
445msgstr ""
446
446
447−#: qml/Tutorial/TutorialLeft.qml:47
448−msgid "Swipe from the left edge to open the launcher"
449−msgstr ""
450−
451#: qml/Tutorial/TutorialLeftLong.qml:47
447#: qml/Tutorial/TutorialLeftLong.qml:47
452msgid "Long swipe from the left edge to open the Today scope"
448msgid "Long swipe from the left edge to open the Today scope"
453msgstr ""
449msgstr ""
454
450
455−#: qml/Tutorial/TutorialRight.qml:54
451+#: qml/Tutorial/TutorialLeft.qml:47
456−msgid "Hover your mouse on the right edge to view your open apps"
452+msgid "Swipe from the left edge to open the launcher"
457msgstr ""
453msgstr ""
458
454
459#: qml/Tutorial/TutorialRight.qml:55
455#: qml/Tutorial/TutorialRight.qml:55
456+msgid "Push your mouse against the right edge to view your open apps"
457+msgstr ""
458+
459+#: qml/Tutorial/TutorialRight.qml:56
460msgid "Short or long swipe from the right edge to view your open apps"
460msgid "Short or long swipe from the right edge to view your open apps"
461msgstr ""
461msgstr ""
462
462
po/ug.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-12-01 07:37+0000\n"
11"PO-Revision-Date: 2015-12-01 07:37+0000\n"
12"Last-Translator: Eltikin <eltikinuyghur@hotmail.com>\n"
12"Last-Translator: Eltikin <eltikinuyghur@hotmail.com>\n"
13"Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
13"Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:03+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -442,19 +442,19 @@ msgstr ""
442msgid "Swipe up to manage the app"
442msgid "Swipe up to manage the app"
443msgstr ""
443msgstr ""
444
444
445−#: qml/Tutorial/TutorialLeft.qml:47
446−msgid "Swipe from the left edge to open the launcher"
447−msgstr ""
448−
449#: qml/Tutorial/TutorialLeftLong.qml:47
445#: qml/Tutorial/TutorialLeftLong.qml:47
450msgid "Long swipe from the left edge to open the Today scope"
446msgid "Long swipe from the left edge to open the Today scope"
451msgstr ""
447msgstr ""
452
448
453−#: qml/Tutorial/TutorialRight.qml:54
449+#: qml/Tutorial/TutorialLeft.qml:47
454−msgid "Hover your mouse on the right edge to view your open apps"
450+msgid "Swipe from the left edge to open the launcher"
455msgstr ""
451msgstr ""
456
452
457#: qml/Tutorial/TutorialRight.qml:55
453#: qml/Tutorial/TutorialRight.qml:55
454+msgid "Push your mouse against the right edge to view your open apps"
455+msgstr ""
456+
457+#: qml/Tutorial/TutorialRight.qml:56
458msgid "Short or long swipe from the right edge to view your open apps"
458msgid "Short or long swipe from the right edge to view your open apps"
459msgstr ""
459msgstr ""
460
460
po/uk.po+90−81
@@ -7,8 +7,8 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11−"PO-Revision-Date: 2015-07-04 05:53+0000\n"
11+"PO-Revision-Date: 2016-04-01 17:32+0000\n"
12"Last-Translator: Yuri Chornoivan <yurchor@gmail.com>\n"
12"Last-Translator: Yuri Chornoivan <yurchor@gmail.com>\n"
13"Language-Team: Ukrainian <uk@li.org>\n"
13"Language-Team: Ukrainian <uk@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%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: 2016-03-24 06:08+0000\n"
19+"X-Launchpad-Export-Date: 2016-04-27 06:03+0000\n"
20−"X-Generator: Launchpad (build 17958)\n"
20+"X-Generator: Launchpad (build 17995)\n"
21
21
22#: plugins/IntegratedLightDM/Greeter.cpp:112
22#: plugins/IntegratedLightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
@@ -190,11 +190,11 @@ msgstr "Додати до вибраного"
190
190
191#: qml/Dash/FiltersPopover.qml:60
191#: qml/Dash/FiltersPopover.qml:60
192msgid "Refine your results"
192msgid "Refine your results"
193−msgstr ""
193+msgstr "Покращіть результати"
194
194
195#: qml/Dash/FiltersPopover.qml:69
195#: qml/Dash/FiltersPopover.qml:69
196msgid "Reset"
196msgid "Reset"
197−msgstr ""
197+msgstr "Скинути"
198
198
199#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
199#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
200msgid "See less"
200msgid "See less"
@@ -211,11 +211,11 @@ msgstr "Пошук"
211
211
212#: qml/Dash/PageHeaderExtraPanel.qml:55
212#: qml/Dash/PageHeaderExtraPanel.qml:55
213msgid "Recent Searches"
213msgid "Recent Searches"
214−msgstr ""
214+msgstr "Останні пошуки"
215
215
216#: qml/Dash/PageHeaderExtraPanel.qml:66
216#: qml/Dash/PageHeaderExtraPanel.qml:66
217msgid "Clear All"
217msgid "Clear All"
218−msgstr ""
218+msgstr "Очистити все"
219
219
220#: qml/Dash/Previews/PreviewActionCombo.qml:35
220#: qml/Dash/Previews/PreviewActionCombo.qml:35
221msgid "More..."
221msgid "More..."
@@ -437,51 +437,54 @@ msgstr "Зворотний виклик"
437
437
438#: qml/Stages/SideStage.qml:76
438#: qml/Stages/SideStage.qml:76
439msgid "Drag using 3 fingers any application from one window to the other"
439msgid "Drag using 3 fingers any application from one window to the other"
440−msgstr ""
440+msgstr "Пересувайте будь-який додаток за допомогою трьох пальців"
441
441
442#: qml/Tutorial/TutorialBottom.qml:78
442#: qml/Tutorial/TutorialBottom.qml:78
443msgid "Swipe up to add a contact"
443msgid "Swipe up to add a contact"
444−msgstr ""
444+msgstr "Проведіть догори, щоб додати контакт"
445
445
446#: qml/Tutorial/TutorialBottom.qml:80
446#: qml/Tutorial/TutorialBottom.qml:80
447msgid "Swipe up for favorite calculations"
447msgid "Swipe up for favorite calculations"
448−msgstr ""
448+msgstr "Проведіть вгору, щоб побачити список вибраних обчислень"
449
449
450#: qml/Tutorial/TutorialBottom.qml:82
450#: qml/Tutorial/TutorialBottom.qml:82
451msgid "Swipe up for recent calls"
451msgid "Swipe up for recent calls"
452−msgstr ""
452+msgstr "Проведіть догори, щоб побачити останні набрані номери"
453
453
454#: qml/Tutorial/TutorialBottom.qml:84
454#: qml/Tutorial/TutorialBottom.qml:84
455msgid "Swipe up to create a message"
455msgid "Swipe up to create a message"
456−msgstr ""
456+msgstr "Проведіть догори, щоб написати нове повідомлення"
457
457
458#: qml/Tutorial/TutorialBottom.qml:85
458#: qml/Tutorial/TutorialBottom.qml:85
459msgid "Swipe up to manage the app"
459msgid "Swipe up to manage the app"
460−msgstr ""
460+msgstr "Проведіть пальцем догори, щоб керувати додатком"
461−
462−#: qml/Tutorial/TutorialLeft.qml:47
463−msgid "Swipe from the left edge to open the launcher"
464−msgstr ""
465
461
466#: qml/Tutorial/TutorialLeftLong.qml:47
462#: qml/Tutorial/TutorialLeftLong.qml:47
467msgid "Long swipe from the left edge to open the Today scope"
463msgid "Long swipe from the left edge to open the Today scope"
468−msgstr ""
464+msgstr "Довге проведення від лівого краю відкриває область «Сьогодні»"
469
465
470−#: qml/Tutorial/TutorialRight.qml:54
466+#: qml/Tutorial/TutorialLeft.qml:47
471−msgid "Hover your mouse on the right edge to view your open apps"
467+msgid "Swipe from the left edge to open the launcher"
472−msgstr ""
468+msgstr "Проведіть від лівого краю екрану, щоб відкрити меню запуску"
473
469
474#: qml/Tutorial/TutorialRight.qml:55
470#: qml/Tutorial/TutorialRight.qml:55
471+msgid "Push your mouse against the right edge to view your open apps"
472+msgstr ""
473+
474+#: qml/Tutorial/TutorialRight.qml:56
475msgid "Short or long swipe from the right edge to view your open apps"
475msgid "Short or long swipe from the right edge to view your open apps"
476msgstr ""
476msgstr ""
477+"Коротке або довге проведення від правого краю відкриває перегляд списку "
478+"відкритих програм"
477
479
478#: qml/Tutorial/TutorialTop.qml:53
480#: qml/Tutorial/TutorialTop.qml:53
479msgid "Swipe from the top right edge to open the notification bar"
481msgid "Swipe from the top right edge to open the notification bar"
480msgstr ""
482msgstr ""
483+"Проведіть пальцем від верхнього правого краю для відкриття панелі сповіщень"
481
484
482#: qml/Tutorial/TutorialTop.qml:54
485#: qml/Tutorial/TutorialTop.qml:54
483msgid "Swipe from the top edge to open the notification bar"
486msgid "Swipe from the top edge to open the notification bar"
484−msgstr ""
487+msgstr "Проведіть пальцем від верхнього краю для відкриття панелі сповіщень"
485
488
486#: qml/Wizard/Page.qml:54
489#: qml/Wizard/Page.qml:54
487msgctxt "Button: Go back one page in the Wizard"
490msgctxt "Button: Go back one page in the Wizard"
@@ -490,7 +493,7 @@ msgstr "Назад"
490
493
491#: qml/Wizard/Pages/10-welcome.qml:27
494#: qml/Wizard/Pages/10-welcome.qml:27
492msgid "Language"
495msgid "Language"
493−msgstr ""
496+msgstr "Мова"
494
497
495#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
498#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
496#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
499#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
@@ -499,7 +502,7 @@ msgstr ""
499#: qml/Wizard/Pages/passcode-desktop.qml:124
502#: qml/Wizard/Pages/passcode-desktop.qml:124
500#: qml/Wizard/Pages/password-set.qml:141
503#: qml/Wizard/Pages/password-set.qml:141
501msgid "Next"
504msgid "Next"
502−msgstr ""
505+msgstr "Наступне"
503
506
504#: qml/Wizard/Pages/30-wifi.qml:29
507#: qml/Wizard/Pages/30-wifi.qml:29
505msgid "Connect to Wi‑Fi"
508msgid "Connect to Wi‑Fi"
@@ -507,15 +510,15 @@ msgstr "З’єднатися із Wi‑Fi"
507
510
508#: qml/Wizard/Pages/30-wifi.qml:130
511#: qml/Wizard/Pages/30-wifi.qml:130
509msgid "Connected"
512msgid "Connected"
510−msgstr ""
513+msgstr "Під’єднано"
511
514
512#: qml/Wizard/Pages/30-wifi.qml:163
515#: qml/Wizard/Pages/30-wifi.qml:163
513msgid "Available Wi-Fi networks"
516msgid "Available Wi-Fi networks"
514−msgstr ""
517+msgstr "Доступні мережі Wi-Fi"
515
518
516#: qml/Wizard/Pages/30-wifi.qml:164
519#: qml/Wizard/Pages/30-wifi.qml:164
517msgid "No available Wi-Fi networks"
520msgid "No available Wi-Fi networks"
518−msgstr ""
521+msgstr "Не доступні мережі Wi-Fi"
519
522
520#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
523#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
521#: qml/Wizard/Pages/sim.qml:101
524#: qml/Wizard/Pages/sim.qml:101
@@ -524,98 +527,101 @@ msgstr "Пропустити"
524
527
525#: qml/Wizard/Pages/40-location.qml:27
528#: qml/Wizard/Pages/40-location.qml:27
526msgid "Location Services"
529msgid "Location Services"
527−msgstr ""
530+msgstr "Сервіс Геолокації"
528
531
529#: qml/Wizard/Pages/40-location.qml:83
532#: qml/Wizard/Pages/40-location.qml:83
530msgid ""
533msgid ""
531"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
534"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
532"(recommended)"
535"(recommended)"
533msgstr ""
536msgstr ""
537+"Використовувати анонімно GPS, точки доступу Wi-Fi та мобільну мережу для "
538+"визначення місцерозташування (рекомендовано)"
534
539
535#: qml/Wizard/Pages/40-location.qml:105
540#: qml/Wizard/Pages/40-location.qml:105
536#, qt-format
541#, qt-format
537msgid "By selecting this option you agree to the Nokia HERE %1."
542msgid "By selecting this option you agree to the Nokia HERE %1."
538−msgstr ""
543+msgstr "Обравши цю опцію, Ви погоджуєтеся з Nokia HERE %1"
539
544
540#: qml/Wizard/Pages/40-location.qml:106
545#: qml/Wizard/Pages/40-location.qml:106
541msgctxt "part of: Nokia HERE terms and conditions"
546msgctxt "part of: Nokia HERE terms and conditions"
542msgid "terms and conditions"
547msgid "terms and conditions"
543−msgstr ""
548+msgstr "правила та обмеження"
544
549
545#: qml/Wizard/Pages/40-location.qml:160
550#: qml/Wizard/Pages/40-location.qml:160
546msgid "GPS only"
551msgid "GPS only"
547−msgstr ""
552+msgstr "Лише GPS"
548
553
549#: qml/Wizard/Pages/40-location.qml:214
554#: qml/Wizard/Pages/40-location.qml:214
550msgid "Don't use my location"
555msgid "Don't use my location"
551−msgstr ""
556+msgstr "Не використовувати визначення положення"
552
557
553#: qml/Wizard/Pages/40-location.qml:260
558#: qml/Wizard/Pages/40-location.qml:260
554msgid "You can change it later in System Settings."
559msgid "You can change it later in System Settings."
555−msgstr ""
560+msgstr "Ви можете змінити його пізніше в налаштуваннях системи."
556
561
557#: qml/Wizard/Pages/50-timezone.qml:29
562#: qml/Wizard/Pages/50-timezone.qml:29
558msgid "Time Zone"
563msgid "Time Zone"
559−msgstr ""
564+msgstr "Часовий пояс"
560
565
561#: qml/Wizard/Pages/50-timezone.qml:178
566#: qml/Wizard/Pages/50-timezone.qml:178
562msgid "Enter your city"
567msgid "Enter your city"
563−msgstr ""
568+msgstr "Уведіь Ваше місто"
564
569
565#: qml/Wizard/Pages/60-account.qml:24
570#: qml/Wizard/Pages/60-account.qml:24
566msgid "Personalize Your Device"
571msgid "Personalize Your Device"
567−msgstr ""
572+msgstr "Персоналізація Пристрою"
568
573
569#: qml/Wizard/Pages/60-account.qml:48
574#: qml/Wizard/Pages/60-account.qml:48
570msgid "Preferred Name"
575msgid "Preferred Name"
571−msgstr ""
576+msgstr "Бажане ім’я"
572
577
573#: qml/Wizard/Pages/70-passwd-type.qml:39
578#: qml/Wizard/Pages/70-passwd-type.qml:39
574msgid "Lock Screen"
579msgid "Lock Screen"
575−msgstr ""
580+msgstr "Заблокувати екран"
576
581
577#: qml/Wizard/Pages/70-passwd-type.qml:101
582#: qml/Wizard/Pages/70-passwd-type.qml:101
578msgctxt "Label: Type of security method"
583msgctxt "Label: Type of security method"
579msgid "Create new password"
584msgid "Create new password"
580−msgstr ""
585+msgstr "Створити новий пароль"
581
586
582#: qml/Wizard/Pages/70-passwd-type.qml:103
587#: qml/Wizard/Pages/70-passwd-type.qml:103
583msgctxt "Label: Type of security method"
588msgctxt "Label: Type of security method"
584msgid "Create passcode (numbers only)"
589msgid "Create passcode (numbers only)"
585−msgstr ""
590+msgstr "Створити парольний код (лише цифри)"
586
591
587#: qml/Wizard/Pages/70-passwd-type.qml:105
592#: qml/Wizard/Pages/70-passwd-type.qml:105
588msgctxt "Label: Type of security method"
593msgctxt "Label: Type of security method"
589msgid "No lock code"
594msgid "No lock code"
590−msgstr ""
595+msgstr "Без коду розблокування"
591
596
592#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
597#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
593msgid "Privacy Policy"
598msgid "Privacy Policy"
594−msgstr ""
599+msgstr "Правила конфіденційності"
595
600
596#: qml/Wizard/Pages/75-report-check.qml:26
601#: qml/Wizard/Pages/75-report-check.qml:26
597msgid "Help Us Improve"
602msgid "Help Us Improve"
598−msgstr ""
603+msgstr "Допоможіть нам покращити"
599
604
600#: qml/Wizard/Pages/75-report-check.qml:59
605#: qml/Wizard/Pages/75-report-check.qml:59
601msgid "Improve system performance by sending us crashes and error reports."
606msgid "Improve system performance by sending us crashes and error reports."
602msgstr ""
607msgstr ""
608+"Допоможіть нам покращити систему, відіславши нам звіт про помилки пристрою."
603
609
604#: qml/Wizard/Pages/75-report-check.qml:60
610#: qml/Wizard/Pages/75-report-check.qml:60
605msgid "Privacy policy"
611msgid "Privacy policy"
606−msgstr ""
612+msgstr "Правила конфіденційності"
607
613
608#: qml/Wizard/Pages/80-finished.qml:89
614#: qml/Wizard/Pages/80-finished.qml:89
609msgid "Welcome to Ubuntu"
615msgid "Welcome to Ubuntu"
610−msgstr ""
616+msgstr "Ласкаво просимо до Ubuntu"
611
617
612#: qml/Wizard/Pages/80-finished.qml:104
618#: qml/Wizard/Pages/80-finished.qml:104
613msgid "You are ready to use your device now"
619msgid "You are ready to use your device now"
614−msgstr ""
620+msgstr "Тепер пристрій готовий до використання"
615
621
616#: qml/Wizard/Pages/80-finished.qml:124
622#: qml/Wizard/Pages/80-finished.qml:124
617msgid "Get Started"
623msgid "Get Started"
618−msgstr ""
624+msgstr "Починаючи роботу"
619
625
620#: qml/Wizard/Pages/here-terms.qml:25
626#: qml/Wizard/Pages/here-terms.qml:25
621msgid "Terms & Conditions"
627msgid "Terms & Conditions"
@@ -623,7 +629,7 @@ msgstr "Умови користування"
623
629
624#: qml/Wizard/Pages/here-terms.qml:69
630#: qml/Wizard/Pages/here-terms.qml:69
625msgid "Your device uses positioning technologies provided by HERE."
631msgid "Your device uses positioning technologies provided by HERE."
626−msgstr ""
632+msgstr "Ваш пристрій використовує HERE для визначення місцезнаходження"
627
633
628#: qml/Wizard/Pages/here-terms.qml:81
634#: qml/Wizard/Pages/here-terms.qml:81
629msgid ""
635msgid ""
@@ -631,21 +637,29 @@ msgid ""
631"collects information about nearby cell towers and Wi-Fi hotspots around your "
637"collects information about nearby cell towers and Wi-Fi hotspots around your "
632"current location whenever your position is being found."
638"current location whenever your position is being found."
633msgstr ""
639msgstr ""
640+"Для надання послуг із позиціювання та покращення якості інших послуг HERE "
641+"збирає інформацію щодо розташованих поблизу із вами станцій мобільного "
642+"зв’язку та точок доступу Wi-Fi під час визначення вашого поточного "
643+"розташування."
634
644
635#: qml/Wizard/Pages/here-terms.qml:93
645#: qml/Wizard/Pages/here-terms.qml:93
636msgid ""
646msgid ""
637"The information collected is used to analyze the service and to improve the "
647"The information collected is used to analyze the service and to improve the "
638"use of service, but not to identify you personally."
648"use of service, but not to identify you personally."
639msgstr ""
649msgstr ""
650+"Збирана інформація використовується для аналізу та поліпшення сервісу, а не "
651+"для ідентифікації Вашої особи."
640
652
641#: qml/Wizard/Pages/here-terms.qml:106
653#: qml/Wizard/Pages/here-terms.qml:106
642#, qt-format
654#, qt-format
643msgid "By continuing, you agree to the HERE platform %1 and %2."
655msgid "By continuing, you agree to the HERE platform %1 and %2."
644msgstr ""
656msgstr ""
657+"Продовження роботи зі службою означатиме, що ви згодні із %1 і %2 платформи "
658+"HERE."
645
659
646#: qml/Wizard/Pages/here-terms.qml:107
660#: qml/Wizard/Pages/here-terms.qml:107
647msgid "Service Terms"
661msgid "Service Terms"
648−msgstr ""
662+msgstr "Умовами надання послуг"
649
663
650#: qml/Wizard/Pages/passcode-confirm.qml:43
664#: qml/Wizard/Pages/passcode-confirm.qml:43
651#: qml/Wizard/Pages/passcode-desktop.qml:80
665#: qml/Wizard/Pages/passcode-desktop.qml:80
@@ -654,69 +668,69 @@ msgstr "Підтвердіть код-пароль"
654
668
655#: qml/Wizard/Pages/passcode-confirm.qml:45
669#: qml/Wizard/Pages/passcode-confirm.qml:45
656msgid "Incorrect passcode."
670msgid "Incorrect passcode."
657−msgstr ""
671+msgstr "Невірний код."
658
672
659#: qml/Wizard/Pages/passcode-confirm.qml:45
673#: qml/Wizard/Pages/passcode-confirm.qml:45
660msgctxt "Enter the passcode again"
674msgctxt "Enter the passcode again"
661msgid "Please re-enter."
675msgid "Please re-enter."
662−msgstr ""
676+msgstr "Уведіть поновій."
663
677
664#: qml/Wizard/Pages/passcode-desktop.qml:30
678#: qml/Wizard/Pages/passcode-desktop.qml:30
665msgid "Lock Screen Passcode"
679msgid "Lock Screen Passcode"
666−msgstr ""
680+msgstr "Код блокування екрану"
667
681
668#: qml/Wizard/Pages/passcode-desktop.qml:56
682#: qml/Wizard/Pages/passcode-desktop.qml:56
669msgid "Enter 4 numbers to setup your passcode"
683msgid "Enter 4 numbers to setup your passcode"
670−msgstr ""
684+msgstr "Уведіть код блокування із 4 цифр"
671
685
672#: qml/Wizard/Pages/passcode-desktop.qml:65
686#: qml/Wizard/Pages/passcode-desktop.qml:65
673#: qml/Wizard/Pages/passcode-set.qml:54
687#: qml/Wizard/Pages/passcode-set.qml:54
674msgid "Choose passcode"
688msgid "Choose passcode"
675−msgstr ""
689+msgstr "Виберіть код-пароль"
676
690
677#: qml/Wizard/Pages/passcode-desktop.qml:105
691#: qml/Wizard/Pages/passcode-desktop.qml:105
678msgid "Passcode too short"
692msgid "Passcode too short"
679−msgstr ""
693+msgstr "Код закороткий"
680
694
681#: qml/Wizard/Pages/passcode-desktop.qml:107
695#: qml/Wizard/Pages/passcode-desktop.qml:107
682msgid "Passcodes match"
696msgid "Passcodes match"
683−msgstr ""
697+msgstr "Коди збігаються"
684
698
685#: qml/Wizard/Pages/passcode-desktop.qml:109
699#: qml/Wizard/Pages/passcode-desktop.qml:109
686msgid "Passcodes do not match"
700msgid "Passcodes do not match"
687−msgstr ""
701+msgstr "Коди не збігаються"
688
702
689#: qml/Wizard/Pages/passcode-set.qml:62
703#: qml/Wizard/Pages/passcode-set.qml:62
690msgid "Passcode must be 4 characters long"
704msgid "Passcode must be 4 characters long"
691−msgstr ""
705+msgstr "Код повинен містити 4 символи"
692
706
693#: qml/Wizard/Pages/password-set.qml:30
707#: qml/Wizard/Pages/password-set.qml:30
694msgid "Lock Screen Password"
708msgid "Lock Screen Password"
695−msgstr ""
709+msgstr "Пароль блокування екрану"
696
710
697#: qml/Wizard/Pages/password-set.qml:61
711#: qml/Wizard/Pages/password-set.qml:61
698msgid "Enter at least 8 characters"
712msgid "Enter at least 8 characters"
699−msgstr ""
713+msgstr "Уведіть не менше 8 символів"
700
714
701#: qml/Wizard/Pages/password-set.qml:73
715#: qml/Wizard/Pages/password-set.qml:73
702msgid "Choose password"
716msgid "Choose password"
703−msgstr ""
717+msgstr "Виберіть пароль"
704
718
705#: qml/Wizard/Pages/password-set.qml:103
719#: qml/Wizard/Pages/password-set.qml:103
706msgid "Confirm password"
720msgid "Confirm password"
707−msgstr ""
721+msgstr "Схваліть пароль"
708
722
709#: qml/Wizard/Pages/sim.qml:27
723#: qml/Wizard/Pages/sim.qml:27
710msgid "No SIM card installed"
724msgid "No SIM card installed"
711−msgstr ""
725+msgstr "SIM-картка не вставлена"
712
726
713#: qml/Wizard/Pages/sim.qml:54
727#: qml/Wizard/Pages/sim.qml:54
714msgid "SIM card added"
728msgid "SIM card added"
715−msgstr ""
729+msgstr "Додана SIM-картка"
716
730
717#: qml/Wizard/Pages/sim.qml:55
731#: qml/Wizard/Pages/sim.qml:55
718msgid "You must restart the device to access the mobile network."
732msgid "You must restart the device to access the mobile network."
719−msgstr ""
733+msgstr "Необхідно перезапустити пристрій для доступу до мобільної мережі."
720
734
721#: qml/Wizard/Pages/sim.qml:59
735#: qml/Wizard/Pages/sim.qml:59
722msgid "Restart"
736msgid "Restart"
@@ -725,34 +739,35 @@ msgstr "Перезапуск"
725#: qml/Wizard/Pages/sim.qml:78
739#: qml/Wizard/Pages/sim.qml:78
726msgid "You won’t be able to make calls or use text messaging without a SIM."
740msgid "You won’t be able to make calls or use text messaging without a SIM."
727msgstr ""
741msgstr ""
742+"Без SIM-картки неможливо телефонувати або відправляти текстові повідомлення."
728
743
729#: qml/Wizard/Pages/sim.qml:90
744#: qml/Wizard/Pages/sim.qml:90
730msgid "To proceed with no SIM tap Skip."
745msgid "To proceed with no SIM tap Skip."
731−msgstr ""
746+msgstr "Щоб продовжити без SIM картки, натисніть кнопку \"Пропустити\""
732
747
733#: qml/Wizard/PasswordMeter.qml:87
748#: qml/Wizard/PasswordMeter.qml:87
734msgid "Passwords match"
749msgid "Passwords match"
735−msgstr ""
750+msgstr "Паролі збігаються"
736
751
737#: qml/Wizard/PasswordMeter.qml:89
752#: qml/Wizard/PasswordMeter.qml:89
738msgid "Passwords do not match"
753msgid "Passwords do not match"
739−msgstr ""
754+msgstr "Паролі не збігаються"
740
755
741#: qml/Wizard/PasswordMeter.qml:93
756#: qml/Wizard/PasswordMeter.qml:93
742msgid "Strong password"
757msgid "Strong password"
743−msgstr ""
758+msgstr "Сильний пароль"
744
759
745#: qml/Wizard/PasswordMeter.qml:95
760#: qml/Wizard/PasswordMeter.qml:95
746msgid "Fair password"
761msgid "Fair password"
747−msgstr ""
762+msgstr "Задовільний пароль"
748
763
749#: qml/Wizard/PasswordMeter.qml:97
764#: qml/Wizard/PasswordMeter.qml:97
750msgid "Weak password"
765msgid "Weak password"
751−msgstr ""
766+msgstr "Слабкий пароль"
752
767
753#: qml/Wizard/PasswordMeter.qml:99
768#: qml/Wizard/PasswordMeter.qml:99
754msgid "Very weak password"
769msgid "Very weak password"
755−msgstr ""
770+msgstr "Дуже слабкий пароль"
756
771
757#~ msgid "Confirm"
772#~ msgid "Confirm"
758#~ msgstr "Підтвердити"
773#~ msgstr "Підтвердити"
@@ -1072,11 +1087,5 @@ msgstr ""
1072#~ msgid "Call back"
1087#~ msgid "Call back"
1073#~ msgstr "Зворотний виклик"
1088#~ msgstr "Зворотний виклик"
1074
1089
1075−#~ msgid "Your device is now ready to use."
1090+#~ msgid "Hover your mouse on the right edge to view your open apps"
1076−#~ msgstr "Пристрій готовий до використання."
1091+#~ msgstr "Наведіть вказівник на правий кут, щоб побачити відкриті застосунки"
1077−
1078−#~ msgid "Welcome to your Ubuntu device."
1079−#~ msgstr "Вітаємо у вашому пристрої Ubuntu."
1080−
1081−#~ msgid "Please select how you’d like to unlock your device."
1082−#~ msgstr "Будь ласка, виберіть спосіб розблокування вашого пристрою."
po/unity8.pot+8−8
@@ -1,6 +1,6 @@
1# SOME DESCRIPTIVE TITLE.
1# SOME DESCRIPTIVE TITLE.
2# Copyright (C) YEAR Canonical Ltd.
2# Copyright (C) YEAR Canonical Ltd.
3−# This file is distributed under the same license as the unity8 package.
3+# This file is distributed under the same license as the PACKAGE package.
4# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5#
5#
6#, fuzzy
6#, fuzzy
@@ -8,7 +8,7 @@ msgid ""
8msgstr ""
8msgstr ""
9"Project-Id-Version: unity8\n"
9"Project-Id-Version: unity8\n"
10"Report-Msgid-Bugs-To: \n"
10"Report-Msgid-Bugs-To: \n"
11−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
11+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/ur.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-05-05 03:12+0000\n"
11"PO-Revision-Date: 2015-05-05 03:12+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Urdu <ur@li.org>\n"
13"Language-Team: Urdu <ur@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:03+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/uz.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-07-04 16:03+0000\n"
11"PO-Revision-Date: 2015-07-04 16:03+0000\n"
12"Last-Translator: Learner <muzaffar.habibullayev@yandex.ru>\n"
12"Last-Translator: Learner <muzaffar.habibullayev@yandex.ru>\n"
13"Language-Team: Uzbek <uz@li.org>\n"
13"Language-Team: Uzbek <uz@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:03+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/vi.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2014-01-15 01:19+0000\n"
11"PO-Revision-Date: 2014-01-15 01:19+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Vietnamese <vi@li.org>\n"
13"Language-Team: Vietnamese <vi@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:03+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/wo.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2015-10-29 11:16+0000\n"
11"PO-Revision-Date: 2015-10-29 11:16+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Wolof <wo@li.org>\n"
13"Language-Team: Wolof <wo@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:03+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -444,19 +444,19 @@ msgstr ""
444msgid "Swipe up to manage the app"
444msgid "Swipe up to manage the app"
445msgstr ""
445msgstr ""
446
446
447−#: qml/Tutorial/TutorialLeft.qml:47
448−msgid "Swipe from the left edge to open the launcher"
449−msgstr ""
450−
451#: qml/Tutorial/TutorialLeftLong.qml:47
447#: qml/Tutorial/TutorialLeftLong.qml:47
452msgid "Long swipe from the left edge to open the Today scope"
448msgid "Long swipe from the left edge to open the Today scope"
453msgstr ""
449msgstr ""
454
450
455−#: qml/Tutorial/TutorialRight.qml:54
451+#: qml/Tutorial/TutorialLeft.qml:47
456−msgid "Hover your mouse on the right edge to view your open apps"
452+msgid "Swipe from the left edge to open the launcher"
457msgstr ""
453msgstr ""
458
454
459#: qml/Tutorial/TutorialRight.qml:55
455#: qml/Tutorial/TutorialRight.qml:55
456+msgid "Push your mouse against the right edge to view your open apps"
457+msgstr ""
458+
459+#: qml/Tutorial/TutorialRight.qml:56
460msgid "Short or long swipe from the right edge to view your open apps"
460msgid "Short or long swipe from the right edge to view your open apps"
461msgstr ""
461msgstr ""
462
462
po/xh.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2013-09-28 13:20+0000\n"
11"PO-Revision-Date: 2013-09-28 13:20+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Xhosa <xh@li.org>\n"
13"Language-Team: Xhosa <xh@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:03+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/zh_CN.po+87−93
@@ -7,16 +7,16 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11−"PO-Revision-Date: 2015-07-27 10:26+0000\n"
11+"PO-Revision-Date: 2016-04-13 06:27+0000\n"
12−"Last-Translator: Ian Li <Unknown>\n"
12+"Last-Translator: YunQiang Su <wzssyqa@gmail.com>\n"
13"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
13"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:03+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -138,7 +138,7 @@ msgstr "应用中可能有未保存数据:"
138msgctxt ""
138msgctxt ""
139"Re-dock means connect the device again to an external screen/mouse/keyboard"
139"Re-dock means connect the device again to an external screen/mouse/keyboard"
140msgid "Re-dock, save your work and close these apps to continue."
140msgid "Re-dock, save your work and close these apps to continue."
141−msgstr ""
141+msgstr "重新连接,保存你的工作并关闭这些应用并继续。"
142
142
143#: qml/Components/ModeSwitchWarningDialog.qml:63
143#: qml/Components/ModeSwitchWarningDialog.qml:63
144msgid "Or force close now (unsaved data will be lost)."
144msgid "Or force close now (unsaved data will be lost)."
@@ -181,11 +181,11 @@ msgstr "添加到收藏夹"
181
181
182#: qml/Dash/FiltersPopover.qml:60
182#: qml/Dash/FiltersPopover.qml:60
183msgid "Refine your results"
183msgid "Refine your results"
184−msgstr ""
184+msgstr "精进查找结果"
185
185
186#: qml/Dash/FiltersPopover.qml:69
186#: qml/Dash/FiltersPopover.qml:69
187msgid "Reset"
187msgid "Reset"
188−msgstr ""
188+msgstr "重置"
189
189
190#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
190#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
191msgid "See less"
191msgid "See less"
@@ -202,11 +202,11 @@ msgstr "搜索"
202
202
203#: qml/Dash/PageHeaderExtraPanel.qml:55
203#: qml/Dash/PageHeaderExtraPanel.qml:55
204msgid "Recent Searches"
204msgid "Recent Searches"
205−msgstr ""
205+msgstr "近期搜索"
206
206
207#: qml/Dash/PageHeaderExtraPanel.qml:66
207#: qml/Dash/PageHeaderExtraPanel.qml:66
208msgid "Clear All"
208msgid "Clear All"
209−msgstr ""
209+msgstr "全部清除"
210
210
211#: qml/Dash/Previews/PreviewActionCombo.qml:35
211#: qml/Dash/Previews/PreviewActionCombo.qml:35
212msgid "More..."
212msgid "More..."
@@ -261,7 +261,7 @@ msgstr "已安装"
261msgid ""
261msgid ""
262"Your device is now connected to an external display. Use this screen as a "
262"Your device is now connected to an external display. Use this screen as a "
263"touch pad to interact with the pointer."
263"touch pad to interact with the pointer."
264−msgstr ""
264+msgstr "你的设备现在已经连接到一个外部显示。将这个屏幕当作一块触控板使用来与指针互动。"
265
265
266#: qml/Greeter/CoverPage.qml:118
266#: qml/Greeter/CoverPage.qml:118
267msgid "Unlock"
267msgid "Unlock"
@@ -416,51 +416,51 @@ msgstr "回电"
416
416
417#: qml/Stages/SideStage.qml:76
417#: qml/Stages/SideStage.qml:76
418msgid "Drag using 3 fingers any application from one window to the other"
418msgid "Drag using 3 fingers any application from one window to the other"
419−msgstr ""
419+msgstr "使用三指将任何应用从一个窗口拖拽至另一个"
420
420
421#: qml/Tutorial/TutorialBottom.qml:78
421#: qml/Tutorial/TutorialBottom.qml:78
422msgid "Swipe up to add a contact"
422msgid "Swipe up to add a contact"
423−msgstr ""
423+msgstr "向上划以添加联系人"
424
424
425#: qml/Tutorial/TutorialBottom.qml:80
425#: qml/Tutorial/TutorialBottom.qml:80
426msgid "Swipe up for favorite calculations"
426msgid "Swipe up for favorite calculations"
427−msgstr ""
427+msgstr "向上划打开常用计算"
428
428
429#: qml/Tutorial/TutorialBottom.qml:82
429#: qml/Tutorial/TutorialBottom.qml:82
430msgid "Swipe up for recent calls"
430msgid "Swipe up for recent calls"
431−msgstr ""
431+msgstr "向上划打开近期通话"
432
432
433#: qml/Tutorial/TutorialBottom.qml:84
433#: qml/Tutorial/TutorialBottom.qml:84
434msgid "Swipe up to create a message"
434msgid "Swipe up to create a message"
435−msgstr ""
435+msgstr "上滑创建一条信息"
436
436
437#: qml/Tutorial/TutorialBottom.qml:85
437#: qml/Tutorial/TutorialBottom.qml:85
438msgid "Swipe up to manage the app"
438msgid "Swipe up to manage the app"
439−msgstr ""
439+msgstr "上滑管理应用"
440−
441−#: qml/Tutorial/TutorialLeft.qml:47
442−msgid "Swipe from the left edge to open the launcher"
443−msgstr ""
444
440
445#: qml/Tutorial/TutorialLeftLong.qml:47
441#: qml/Tutorial/TutorialLeftLong.qml:47
446msgid "Long swipe from the left edge to open the Today scope"
442msgid "Long swipe from the left edge to open the Today scope"
447−msgstr ""
443+msgstr "从左侧边缘长距离滑动打开“今日”分类"
448
444
449−#: qml/Tutorial/TutorialRight.qml:54
445+#: qml/Tutorial/TutorialLeft.qml:47
450−msgid "Hover your mouse on the right edge to view your open apps"
446+msgid "Swipe from the left edge to open the launcher"
451−msgstr ""
447+msgstr "从左侧边缘滑动打开启动器"
452
448
453#: qml/Tutorial/TutorialRight.qml:55
449#: qml/Tutorial/TutorialRight.qml:55
454−msgid "Short or long swipe from the right edge to view your open apps"
450+msgid "Push your mouse against the right edge to view your open apps"
455msgstr ""
451msgstr ""
456
452
453+#: qml/Tutorial/TutorialRight.qml:56
454+msgid "Short or long swipe from the right edge to view your open apps"
455+msgstr "从右侧边缘短距离或长距离滑动查看打开的应用"
456+
457#: qml/Tutorial/TutorialTop.qml:53
457#: qml/Tutorial/TutorialTop.qml:53
458msgid "Swipe from the top right edge to open the notification bar"
458msgid "Swipe from the top right edge to open the notification bar"
459−msgstr ""
459+msgstr "从顶部右侧边缘滑动打开通知栏"
460
460
461#: qml/Tutorial/TutorialTop.qml:54
461#: qml/Tutorial/TutorialTop.qml:54
462msgid "Swipe from the top edge to open the notification bar"
462msgid "Swipe from the top edge to open the notification bar"
463−msgstr ""
463+msgstr "从顶部滑动打开通知栏"
464
464
465#: qml/Wizard/Page.qml:54
465#: qml/Wizard/Page.qml:54
466msgctxt "Button: Go back one page in the Wizard"
466msgctxt "Button: Go back one page in the Wizard"
@@ -469,7 +469,7 @@ msgstr "上一步"
469
469
470#: qml/Wizard/Pages/10-welcome.qml:27
470#: qml/Wizard/Pages/10-welcome.qml:27
471msgid "Language"
471msgid "Language"
472−msgstr ""
472+msgstr "语言"
473
473
474#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
474#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
475#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
475#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
@@ -478,7 +478,7 @@ msgstr ""
478#: qml/Wizard/Pages/passcode-desktop.qml:124
478#: qml/Wizard/Pages/passcode-desktop.qml:124
479#: qml/Wizard/Pages/password-set.qml:141
479#: qml/Wizard/Pages/password-set.qml:141
480msgid "Next"
480msgid "Next"
481−msgstr ""
481+msgstr "下一步"
482
482
483#: qml/Wizard/Pages/30-wifi.qml:29
483#: qml/Wizard/Pages/30-wifi.qml:29
484msgid "Connect to Wi‑Fi"
484msgid "Connect to Wi‑Fi"
@@ -486,15 +486,15 @@ msgstr "连接 Wi-Fi"
486
486
487#: qml/Wizard/Pages/30-wifi.qml:130
487#: qml/Wizard/Pages/30-wifi.qml:130
488msgid "Connected"
488msgid "Connected"
489−msgstr ""
489+msgstr "已连接"
490
490
491#: qml/Wizard/Pages/30-wifi.qml:163
491#: qml/Wizard/Pages/30-wifi.qml:163
492msgid "Available Wi-Fi networks"
492msgid "Available Wi-Fi networks"
493−msgstr ""
493+msgstr "可用的 Wi-Fi 网络"
494
494
495#: qml/Wizard/Pages/30-wifi.qml:164
495#: qml/Wizard/Pages/30-wifi.qml:164
496msgid "No available Wi-Fi networks"
496msgid "No available Wi-Fi networks"
497−msgstr ""
497+msgstr "没有可用的 Wi-Fi 网络"
498
498
499#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
499#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
500#: qml/Wizard/Pages/sim.qml:101
500#: qml/Wizard/Pages/sim.qml:101
@@ -503,98 +503,98 @@ msgstr "跳过"
503
503
504#: qml/Wizard/Pages/40-location.qml:27
504#: qml/Wizard/Pages/40-location.qml:27
505msgid "Location Services"
505msgid "Location Services"
506−msgstr ""
506+msgstr "定位服务"
507
507
508#: qml/Wizard/Pages/40-location.qml:83
508#: qml/Wizard/Pages/40-location.qml:83
509msgid ""
509msgid ""
510"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
510"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
511"(recommended)"
511"(recommended)"
512−msgstr ""
512+msgstr "使用 GPS、Wi-Fi 热点和移动网络匿名检测位置(推荐)"
513
513
514#: qml/Wizard/Pages/40-location.qml:105
514#: qml/Wizard/Pages/40-location.qml:105
515#, qt-format
515#, qt-format
516msgid "By selecting this option you agree to the Nokia HERE %1."
516msgid "By selecting this option you agree to the Nokia HERE %1."
517−msgstr ""
517+msgstr "选择该选项同意 Nokia HERE %1。"
518
518
519#: qml/Wizard/Pages/40-location.qml:106
519#: qml/Wizard/Pages/40-location.qml:106
520msgctxt "part of: Nokia HERE terms and conditions"
520msgctxt "part of: Nokia HERE terms and conditions"
521msgid "terms and conditions"
521msgid "terms and conditions"
522−msgstr ""
522+msgstr "术语和条款"
523
523
524#: qml/Wizard/Pages/40-location.qml:160
524#: qml/Wizard/Pages/40-location.qml:160
525msgid "GPS only"
525msgid "GPS only"
526−msgstr ""
526+msgstr "仅 GPS"
527
527
528#: qml/Wizard/Pages/40-location.qml:214
528#: qml/Wizard/Pages/40-location.qml:214
529msgid "Don't use my location"
529msgid "Don't use my location"
530−msgstr ""
530+msgstr "不使用我的位置"
531
531
532#: qml/Wizard/Pages/40-location.qml:260
532#: qml/Wizard/Pages/40-location.qml:260
533msgid "You can change it later in System Settings."
533msgid "You can change it later in System Settings."
534−msgstr ""
534+msgstr "可以稍后在系统设置中更改。"
535
535
536#: qml/Wizard/Pages/50-timezone.qml:29
536#: qml/Wizard/Pages/50-timezone.qml:29
537msgid "Time Zone"
537msgid "Time Zone"
538−msgstr ""
538+msgstr "时区"
539
539
540#: qml/Wizard/Pages/50-timezone.qml:178
540#: qml/Wizard/Pages/50-timezone.qml:178
541msgid "Enter your city"
541msgid "Enter your city"
542−msgstr ""
542+msgstr "输入您的城市"
543
543
544#: qml/Wizard/Pages/60-account.qml:24
544#: qml/Wizard/Pages/60-account.qml:24
545msgid "Personalize Your Device"
545msgid "Personalize Your Device"
546−msgstr ""
546+msgstr "个性化您的设备"
547
547
548#: qml/Wizard/Pages/60-account.qml:48
548#: qml/Wizard/Pages/60-account.qml:48
549msgid "Preferred Name"
549msgid "Preferred Name"
550−msgstr ""
550+msgstr "首选名称"
551
551
552#: qml/Wizard/Pages/70-passwd-type.qml:39
552#: qml/Wizard/Pages/70-passwd-type.qml:39
553msgid "Lock Screen"
553msgid "Lock Screen"
554−msgstr ""
554+msgstr "锁屏"
555
555
556#: qml/Wizard/Pages/70-passwd-type.qml:101
556#: qml/Wizard/Pages/70-passwd-type.qml:101
557msgctxt "Label: Type of security method"
557msgctxt "Label: Type of security method"
558msgid "Create new password"
558msgid "Create new password"
559−msgstr ""
559+msgstr "创建新密码"
560
560
561#: qml/Wizard/Pages/70-passwd-type.qml:103
561#: qml/Wizard/Pages/70-passwd-type.qml:103
562msgctxt "Label: Type of security method"
562msgctxt "Label: Type of security method"
563msgid "Create passcode (numbers only)"
563msgid "Create passcode (numbers only)"
564−msgstr ""
564+msgstr "创建密码 (仅数字)"
565
565
566#: qml/Wizard/Pages/70-passwd-type.qml:105
566#: qml/Wizard/Pages/70-passwd-type.qml:105
567msgctxt "Label: Type of security method"
567msgctxt "Label: Type of security method"
568msgid "No lock code"
568msgid "No lock code"
569−msgstr ""
569+msgstr "无锁码"
570
570
571#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
571#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
572msgid "Privacy Policy"
572msgid "Privacy Policy"
573−msgstr ""
573+msgstr "隐私政策"
574
574
575#: qml/Wizard/Pages/75-report-check.qml:26
575#: qml/Wizard/Pages/75-report-check.qml:26
576msgid "Help Us Improve"
576msgid "Help Us Improve"
577−msgstr ""
577+msgstr "帮助我们改进"
578
578
579#: qml/Wizard/Pages/75-report-check.qml:59
579#: qml/Wizard/Pages/75-report-check.qml:59
580msgid "Improve system performance by sending us crashes and error reports."
580msgid "Improve system performance by sending us crashes and error reports."
581−msgstr ""
581+msgstr "向我们发送崩溃和错误报告来提高系统性能。"
582
582
583#: qml/Wizard/Pages/75-report-check.qml:60
583#: qml/Wizard/Pages/75-report-check.qml:60
584msgid "Privacy policy"
584msgid "Privacy policy"
585−msgstr ""
585+msgstr "隐私政策"
586
586
587#: qml/Wizard/Pages/80-finished.qml:89
587#: qml/Wizard/Pages/80-finished.qml:89
588msgid "Welcome to Ubuntu"
588msgid "Welcome to Ubuntu"
589−msgstr ""
589+msgstr "欢迎使用 Ubuntu"
590
590
591#: qml/Wizard/Pages/80-finished.qml:104
591#: qml/Wizard/Pages/80-finished.qml:104
592msgid "You are ready to use your device now"
592msgid "You are ready to use your device now"
593−msgstr ""
593+msgstr "现在可以使用您的设备了"
594
594
595#: qml/Wizard/Pages/80-finished.qml:124
595#: qml/Wizard/Pages/80-finished.qml:124
596msgid "Get Started"
596msgid "Get Started"
597−msgstr ""
597+msgstr "入门"
598
598
599#: qml/Wizard/Pages/here-terms.qml:25
599#: qml/Wizard/Pages/here-terms.qml:25
600msgid "Terms & Conditions"
600msgid "Terms & Conditions"
@@ -602,29 +602,29 @@ msgstr "条款与条件"
602
602
603#: qml/Wizard/Pages/here-terms.qml:69
603#: qml/Wizard/Pages/here-terms.qml:69
604msgid "Your device uses positioning technologies provided by HERE."
604msgid "Your device uses positioning technologies provided by HERE."
605−msgstr ""
605+msgstr "你的设备使用的定位技术由 HERE 提供。"
606
606
607#: qml/Wizard/Pages/here-terms.qml:81
607#: qml/Wizard/Pages/here-terms.qml:81
608msgid ""
608msgid ""
609"To provide you with positioning services and to improve their quality, HERE "
609"To provide you with positioning services and to improve their quality, HERE "
610"collects information about nearby cell towers and Wi-Fi hotspots around your "
610"collects information about nearby cell towers and Wi-Fi hotspots around your "
611"current location whenever your position is being found."
611"current location whenever your position is being found."
612−msgstr ""
612+msgstr "为提供定位服务并提高服务质量,每当你的位置被发现时,HERE会收集你周围的有关手机信号塔和 Wi-Fi 热点的信息。"
613
613
614#: qml/Wizard/Pages/here-terms.qml:93
614#: qml/Wizard/Pages/here-terms.qml:93
615msgid ""
615msgid ""
616"The information collected is used to analyze the service and to improve the "
616"The information collected is used to analyze the service and to improve the "
617"use of service, but not to identify you personally."
617"use of service, but not to identify you personally."
618−msgstr ""
618+msgstr "收集的信息用于分析服务和改进服务的使用,并不会识别你的身份。"
619
619
620#: qml/Wizard/Pages/here-terms.qml:106
620#: qml/Wizard/Pages/here-terms.qml:106
621#, qt-format
621#, qt-format
622msgid "By continuing, you agree to the HERE platform %1 and %2."
622msgid "By continuing, you agree to the HERE platform %1 and %2."
623−msgstr ""
623+msgstr "继续,你将同意 HERE 平台 %1 和 %2。"
624
624
625#: qml/Wizard/Pages/here-terms.qml:107
625#: qml/Wizard/Pages/here-terms.qml:107
626msgid "Service Terms"
626msgid "Service Terms"
627−msgstr ""
627+msgstr "服务条款"
628
628
629#: qml/Wizard/Pages/passcode-confirm.qml:43
629#: qml/Wizard/Pages/passcode-confirm.qml:43
630#: qml/Wizard/Pages/passcode-desktop.qml:80
630#: qml/Wizard/Pages/passcode-desktop.qml:80
@@ -633,105 +633,105 @@ msgstr "确认新密码"
633
633
634#: qml/Wizard/Pages/passcode-confirm.qml:45
634#: qml/Wizard/Pages/passcode-confirm.qml:45
635msgid "Incorrect passcode."
635msgid "Incorrect passcode."
636−msgstr ""
636+msgstr "不正确的密码。"
637
637
638#: qml/Wizard/Pages/passcode-confirm.qml:45
638#: qml/Wizard/Pages/passcode-confirm.qml:45
639msgctxt "Enter the passcode again"
639msgctxt "Enter the passcode again"
640msgid "Please re-enter."
640msgid "Please re-enter."
641−msgstr ""
641+msgstr "请重新输入。"
642
642
643#: qml/Wizard/Pages/passcode-desktop.qml:30
643#: qml/Wizard/Pages/passcode-desktop.qml:30
644msgid "Lock Screen Passcode"
644msgid "Lock Screen Passcode"
645−msgstr ""
645+msgstr "锁屏密码"
646
646
647#: qml/Wizard/Pages/passcode-desktop.qml:56
647#: qml/Wizard/Pages/passcode-desktop.qml:56
648msgid "Enter 4 numbers to setup your passcode"
648msgid "Enter 4 numbers to setup your passcode"
649−msgstr ""
649+msgstr "输入 4 个数字来设置你的密码"
650
650
651#: qml/Wizard/Pages/passcode-desktop.qml:65
651#: qml/Wizard/Pages/passcode-desktop.qml:65
652#: qml/Wizard/Pages/passcode-set.qml:54
652#: qml/Wizard/Pages/passcode-set.qml:54
653msgid "Choose passcode"
653msgid "Choose passcode"
654−msgstr ""
654+msgstr "选择密码"
655
655
656#: qml/Wizard/Pages/passcode-desktop.qml:105
656#: qml/Wizard/Pages/passcode-desktop.qml:105
657msgid "Passcode too short"
657msgid "Passcode too short"
658−msgstr ""
658+msgstr "密码太短"
659
659
660#: qml/Wizard/Pages/passcode-desktop.qml:107
660#: qml/Wizard/Pages/passcode-desktop.qml:107
661msgid "Passcodes match"
661msgid "Passcodes match"
662−msgstr ""
662+msgstr "密码匹配"
663
663
664#: qml/Wizard/Pages/passcode-desktop.qml:109
664#: qml/Wizard/Pages/passcode-desktop.qml:109
665msgid "Passcodes do not match"
665msgid "Passcodes do not match"
666−msgstr ""
666+msgstr "密码不匹配"
667
667
668#: qml/Wizard/Pages/passcode-set.qml:62
668#: qml/Wizard/Pages/passcode-set.qml:62
669msgid "Passcode must be 4 characters long"
669msgid "Passcode must be 4 characters long"
670−msgstr ""
670+msgstr "密码必须为 4 个字符长度"
671
671
672#: qml/Wizard/Pages/password-set.qml:30
672#: qml/Wizard/Pages/password-set.qml:30
673msgid "Lock Screen Password"
673msgid "Lock Screen Password"
674−msgstr ""
674+msgstr "锁屏密码"
675
675
676#: qml/Wizard/Pages/password-set.qml:61
676#: qml/Wizard/Pages/password-set.qml:61
677msgid "Enter at least 8 characters"
677msgid "Enter at least 8 characters"
678−msgstr ""
678+msgstr "输入至少8个字符"
679
679
680#: qml/Wizard/Pages/password-set.qml:73
680#: qml/Wizard/Pages/password-set.qml:73
681msgid "Choose password"
681msgid "Choose password"
682−msgstr ""
682+msgstr "设置密码"
683
683
684#: qml/Wizard/Pages/password-set.qml:103
684#: qml/Wizard/Pages/password-set.qml:103
685msgid "Confirm password"
685msgid "Confirm password"
686−msgstr ""
686+msgstr "确认密码"
687
687
688#: qml/Wizard/Pages/sim.qml:27
688#: qml/Wizard/Pages/sim.qml:27
689msgid "No SIM card installed"
689msgid "No SIM card installed"
690−msgstr ""
690+msgstr "没有安装 SIM 卡"
691
691
692#: qml/Wizard/Pages/sim.qml:54
692#: qml/Wizard/Pages/sim.qml:54
693msgid "SIM card added"
693msgid "SIM card added"
694−msgstr ""
694+msgstr "SIM 卡已添加"
695
695
696#: qml/Wizard/Pages/sim.qml:55
696#: qml/Wizard/Pages/sim.qml:55
697msgid "You must restart the device to access the mobile network."
697msgid "You must restart the device to access the mobile network."
698−msgstr ""
698+msgstr "你必须重启设备才能访问移动网络"
699
699
700#: qml/Wizard/Pages/sim.qml:59
700#: qml/Wizard/Pages/sim.qml:59
701msgid "Restart"
701msgid "Restart"
702−msgstr ""
702+msgstr "重启"
703
703
704#: qml/Wizard/Pages/sim.qml:78
704#: qml/Wizard/Pages/sim.qml:78
705msgid "You won’t be able to make calls or use text messaging without a SIM."
705msgid "You won’t be able to make calls or use text messaging without a SIM."
706−msgstr ""
706+msgstr "没有 SIM 卡你将不能拨打电话或使用短信。"
707
707
708#: qml/Wizard/Pages/sim.qml:90
708#: qml/Wizard/Pages/sim.qml:90
709msgid "To proceed with no SIM tap Skip."
709msgid "To proceed with no SIM tap Skip."
710−msgstr ""
710+msgstr "点击跳过继续无 SIM 卡"
711
711
712#: qml/Wizard/PasswordMeter.qml:87
712#: qml/Wizard/PasswordMeter.qml:87
713msgid "Passwords match"
713msgid "Passwords match"
714−msgstr ""
714+msgstr "密码匹配"
715
715
716#: qml/Wizard/PasswordMeter.qml:89
716#: qml/Wizard/PasswordMeter.qml:89
717msgid "Passwords do not match"
717msgid "Passwords do not match"
718−msgstr ""
718+msgstr "密码不匹配"
719
719
720#: qml/Wizard/PasswordMeter.qml:93
720#: qml/Wizard/PasswordMeter.qml:93
721msgid "Strong password"
721msgid "Strong password"
722−msgstr ""
722+msgstr "密码强度:强"
723
723
724#: qml/Wizard/PasswordMeter.qml:95
724#: qml/Wizard/PasswordMeter.qml:95
725msgid "Fair password"
725msgid "Fair password"
726−msgstr ""
726+msgstr "密码强度:合理"
727
727
728#: qml/Wizard/PasswordMeter.qml:97
728#: qml/Wizard/PasswordMeter.qml:97
729msgid "Weak password"
729msgid "Weak password"
730−msgstr ""
730+msgstr "密码强度:较弱"
731
731
732#: qml/Wizard/PasswordMeter.qml:99
732#: qml/Wizard/PasswordMeter.qml:99
733msgid "Very weak password"
733msgid "Very weak password"
734−msgstr ""
734+msgstr "密码强度:非常弱"
735
735
736#~ msgid "Confirm"
736#~ msgid "Confirm"
737#~ msgstr "确认"
737#~ msgstr "确认"
@@ -1019,11 +1019,5 @@ msgstr ""
1019#~ msgid "Call back"
1019#~ msgid "Call back"
1020#~ msgstr "回电"
1020#~ msgstr "回电"
1021
1021
1022−#~ msgid "Welcome to your Ubuntu device."
1022+#~ msgid "Hover your mouse on the right edge to view your open apps"
1023−#~ msgstr "欢迎使用您的Ubuntu设备。"
1023+#~ msgstr "将鼠标悬停在右侧边缘查看打开的应用"
1024−
1025−#~ msgid "Please select how you’d like to unlock your device."
1026−#~ msgstr "请选择你偏好的设备解锁方式。"
1027−
1028−#~ msgid "Your device is now ready to use."
1029−#~ msgstr "您的设备已就绪。"
po/zh_HK.po+9−9
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2014-08-10 11:45+0000\n"
11"PO-Revision-Date: 2014-08-10 11:45+0000\n"
12"Last-Translator: Daniel Cheung <daniel.2345@hotmail.com>\n"
12"Last-Translator: Daniel Cheung <daniel.2345@hotmail.com>\n"
13"Language-Team: Chinese (Hong Kong) <zh_HK@li.org>\n"
13"Language-Team: Chinese (Hong Kong) <zh_HK@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:03+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -440,19 +440,19 @@ msgstr ""
440msgid "Swipe up to manage the app"
440msgid "Swipe up to manage the app"
441msgstr ""
441msgstr ""
442
442
443−#: qml/Tutorial/TutorialLeft.qml:47
444−msgid "Swipe from the left edge to open the launcher"
445−msgstr ""
446−
447#: qml/Tutorial/TutorialLeftLong.qml:47
443#: qml/Tutorial/TutorialLeftLong.qml:47
448msgid "Long swipe from the left edge to open the Today scope"
444msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
445msgstr ""
450
446
451−#: qml/Tutorial/TutorialRight.qml:54
447+#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Hover your mouse on the right edge to view your open apps"
448+msgid "Swipe from the left edge to open the launcher"
453msgstr ""
449msgstr ""
454
450
455#: qml/Tutorial/TutorialRight.qml:55
451#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
453+msgstr ""
454+
455+#: qml/Tutorial/TutorialRight.qml:56
456msgid "Short or long swipe from the right edge to view your open apps"
456msgid "Short or long swipe from the right edge to view your open apps"
457msgstr ""
457msgstr ""
458
458
po/zh_TW.po+11−20
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-03-23 10:01+0000\n"
10+"POT-Creation-Date: 2016-04-21 13:47+0000\n"
11"PO-Revision-Date: 2016-02-24 04:40+0000\n"
11"PO-Revision-Date: 2016-02-24 04:40+0000\n"
12"Last-Translator: Po-Hsu Lin <po-hsu.lin@canonical.com>\n"
12"Last-Translator: Po-Hsu Lin <po-hsu.lin@canonical.com>\n"
13"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
13"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
@@ -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: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-04-27 06:03+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17995)\n"
20"Language: zh_TW\n"
20"Language: zh_TW\n"
21
21
22#: plugins/IntegratedLightDM/Greeter.cpp:112
22#: plugins/IntegratedLightDM/Greeter.cpp:112
@@ -184,7 +184,7 @@ msgstr ""
184
184
185#: qml/Dash/FiltersPopover.qml:69
185#: qml/Dash/FiltersPopover.qml:69
186msgid "Reset"
186msgid "Reset"
187−msgstr ""
187+msgstr "重設"
188
188
189#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
189#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
190msgid "See less"
190msgid "See less"
@@ -437,19 +437,19 @@ msgstr ""
437msgid "Swipe up to manage the app"
437msgid "Swipe up to manage the app"
438msgstr ""
438msgstr ""
439
439
440−#: qml/Tutorial/TutorialLeft.qml:47
441−msgid "Swipe from the left edge to open the launcher"
442−msgstr ""
443−
444#: qml/Tutorial/TutorialLeftLong.qml:47
440#: qml/Tutorial/TutorialLeftLong.qml:47
445msgid "Long swipe from the left edge to open the Today scope"
441msgid "Long swipe from the left edge to open the Today scope"
446msgstr ""
442msgstr ""
447
443
448−#: qml/Tutorial/TutorialRight.qml:54
444+#: qml/Tutorial/TutorialLeft.qml:47
449−msgid "Hover your mouse on the right edge to view your open apps"
445+msgid "Swipe from the left edge to open the launcher"
450msgstr ""
446msgstr ""
451
447
452#: qml/Tutorial/TutorialRight.qml:55
448#: qml/Tutorial/TutorialRight.qml:55
449+msgid "Push your mouse against the right edge to view your open apps"
450+msgstr ""
451+
452+#: qml/Tutorial/TutorialRight.qml:56
453msgid "Short or long swipe from the right edge to view your open apps"
453msgid "Short or long swipe from the right edge to view your open apps"
454msgstr ""
454msgstr ""
455
455
@@ -468,7 +468,7 @@ msgstr "返回"
468
468
469#: qml/Wizard/Pages/10-welcome.qml:27
469#: qml/Wizard/Pages/10-welcome.qml:27
470msgid "Language"
470msgid "Language"
471−msgstr ""
471+msgstr "語言"
472
472
473#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
473#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
474#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
474#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
@@ -1035,12 +1035,3 @@ msgstr ""
1035
1035
1036#~ msgid "%a %d %b %l:%M %p"
1036#~ msgid "%a %d %b %l:%M %p"
1037#~ msgstr "(%a) %d月%b日 %p %l:%M"
1037#~ msgstr "(%a) %d月%b日 %p %l:%M"
1038−
1039−#~ msgid "Welcome to your Ubuntu device."
1040−#~ msgstr "歡迎使用您的 Ubuntu 裝置"
1041−
1042−#~ msgid "Please select how you’d like to unlock your device."
1043−#~ msgstr "請選擇您想要的裝置解鎖方式。"
1044−
1045−#~ msgid "Your device is now ready to use."
1046−#~ msgstr "您的裝置已準備就緒。"
qml/Components/Dialogs.qml+2−2
@@ -51,8 +51,8 @@ Item {
51 var comp = Qt.createComponent(Qt.resolvedUrl("ModeSwitchWarningDialog.qml"))
51 var comp = Qt.createComponent(Qt.resolvedUrl("ModeSwitchWarningDialog.qml"))
52 d.modeSwitchWarningPopup = comp.createObject(root, {model: legacyAppsModel});
52 d.modeSwitchWarningPopup = comp.createObject(root, {model: legacyAppsModel});
53 d.modeSwitchWarningPopup.forceClose.connect(function() {
53 d.modeSwitchWarningPopup.forceClose.connect(function() {
54− while (legacyAppsModel.count > 0) {
54+ for (var i = legacyAppsModel.count - 1; i >= 0; i--) {
55− ApplicationManager.stopApplication(legacyAppsModel.get(0).appId);
55+ ApplicationManager.stopApplication(legacyAppsModel.get(i).appId);
56 }
56 }
57 d.modeSwitchWarningPopup.hide();
57 d.modeSwitchWarningPopup.hide();
58 d.modeSwitchWarningPopup.destroy();
58 d.modeSwitchWarningPopup.destroy();
qml/Components/KeymapSwitcher.qmlnew file+65
@@ -0,0 +1,65 @@
1+/*
2+ * Copyright (C) 2016 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.4
18+import AccountsService 0.1
19+import GlobalShortcut 1.0
20+import Unity.Application 0.1
21+
22+QtObject {
23+ id: root
24+
25+ property GlobalShortcut shortcutNext: GlobalShortcut {
26+ shortcut: Qt.MetaModifier|Qt.Key_Space
27+ onTriggered: root.nextKeymap()
28+ active: root.keymapCount > 1
29+ }
30+
31+ property GlobalShortcut shortcutPrevious: GlobalShortcut {
32+ shortcut: Qt.MetaModifier|Qt.ShiftModifier|Qt.Key_Space
33+ onTriggered: root.previousKeymap()
34+ active: root.keymapCount > 1
35+ }
36+
37+ readonly property var keymaps: AccountsService.keymaps
38+ readonly property int keymapCount: keymaps.length
39+ property int currentKeymapIndex: 0
40+ readonly property string currentKeymap: keymaps[currentKeymapIndex]
41+
42+ function nextKeymap() {
43+ var nextIndex = 0;
44+
45+ if (currentKeymapIndex !== -1 && currentKeymapIndex < keymapCount - 1) {
46+ nextIndex = currentKeymapIndex + 1;
47+ }
48+ currentKeymapIndex = nextIndex;
49+ }
50+
51+ function previousKeymap() {
52+ var prevIndex = keymapCount - 1;
53+
54+ if (currentKeymapIndex > 0) {
55+ prevIndex = currentKeymapIndex - 1;
56+ }
57+ currentKeymapIndex = prevIndex;
58+ }
59+
60+ property Binding surfaceKeymapBinding: Binding {
61+ target: MirFocusController.focusedSurface
62+ property: "keymap"
63+ value: root.currentKeymap
64+ }
65+}
qml/Components/Lockscreen.qml+2−2
@@ -253,10 +253,10 @@ Showable {
253
253
254 Component {
254 Component {
255 id: infoPopupComponent
255 id: infoPopupComponent
256− Dialog {
256+ ShellDialog {
257 id: dialog
257 id: dialog
258 objectName: "infoPopup"
258 objectName: "infoPopup"
259− modal: true
259+ property var dialogLoader // dummy to satisfy ShellDialog's context dependent prop
260
260
261 Button {
261 Button {
262 objectName: "infoPopupOkButton"
262 objectName: "infoPopupOkButton"
qml/Greeter/Greeter.qml+6−5
@@ -63,10 +63,10 @@ Showable {
63
63
64 function forceShow() {
64 function forceShow() {
65 showNow();
65 showNow();
66− loader.item.reset();
66+ d.selectUser(d.currentIndex, true);
67 }
67 }
68
68
69− function notifyAppFocused(appId) {
69+ function notifyAppFocusRequested(appId) {
70 if (!active) {
70 if (!active) {
71 return;
71 return;
72 }
72 }
@@ -83,19 +83,20 @@ Showable {
83 }
83 }
84 }
84 }
85
85
86− function notifyAboutToFocusApp(appId) {
86+ // Notify that the user has explicitly requested the given app through unity8 GUI.
87+ function notifyUserRequestedApp(appId) {
87 if (!active) {
88 if (!active) {
88 return;
89 return;
89 }
90 }
90
91
91 // A hint that we're about to focus an app. This way we can look
92 // A hint that we're about to focus an app. This way we can look
92 // a little more responsive, rather than waiting for the above
93 // a little more responsive, rather than waiting for the above
93− // notifyAppFocused call. We also need this in case we have a locked
94+ // notifyAppFocusRequested call. We also need this in case we have a locked
94 // app, in order to show lockscreen instead of new app.
95 // app, in order to show lockscreen instead of new app.
95 d.startUnlock(false /* toTheRight */);
96 d.startUnlock(false /* toTheRight */);
96 }
97 }
97
98
98− // This is a just a glorified notifyAboutToFocusApp(), but it does one
99+ // This is a just a glorified notifyUserRequestedApp(), but it does one
99 // other thing: it hides any cover pages to the RIGHT, because the user
100 // other thing: it hides any cover pages to the RIGHT, because the user
100 // just came from a launcher drag starting on the left.
101 // just came from a launcher drag starting on the left.
101 // It also returns a boolean value, indicating whether there was a visual
102 // It also returns a boolean value, indicating whether there was a visual
qml/Launcher/LauncherPanel.qml+1
@@ -98,6 +98,7 @@ Rectangle {
98 AbstractButton {
98 AbstractButton {
99 id: dashItem
99 id: dashItem
100 anchors.fill: parent
100 anchors.fill: parent
101+ activeFocusOnPress: false
101 onClicked: root.showDashHome()
102 onClicked: root.showDashHome()
102 }
103 }
103 Rectangle {
104 Rectangle {
qml/OrientedShell.qml+27−12
@@ -57,9 +57,17 @@ Rectangle {
57 invertedPortrait: deviceConfiguration.invertedPortraitOrientation
57 invertedPortrait: deviceConfiguration.invertedPortraitOrientation
58 }
58 }
59 }
59 }
60− // to be overwritten by tests
60+
61+ GSettings {
62+ id: unity8Settings
61− property var unity8Settings: GSettings { schema.id: "com.canonical.Unity8" }
63+ schema.id: "com.canonical.Unity8"
64+ }
65+
66+ GSettings {
67+ id: oskSettings
68+ objectName: "oskSettings"
62− property var oskSettings: GSettings { schema.id: "com.canonical.keyboard.maliit" }
69+ schema.id: "com.canonical.keyboard.maliit"
70+ }
63
71
64 property int physicalOrientation: Screen.orientation
72 property int physicalOrientation: Screen.orientation
65 property bool orientationLocked: OrientationLock.enabled
73 property bool orientationLocked: OrientationLock.enabled
@@ -90,22 +98,26 @@ Rectangle {
90 }
98 }
91
99
92 readonly property int pointerInputDevices: miceModel.count + touchPadModel.count
100 readonly property int pointerInputDevices: miceModel.count + touchPadModel.count
93− onPointerInputDevicesChanged: {
101+ onPointerInputDevicesChanged: calculateUsageMode()
102+
103+ function calculateUsageMode() {
104+ if (unity8Settings.usageMode === undefined)
105+ return; // gsettings isn't loaded yet, we'll try again in Component.onCompleted
106+
94− console.log("Pointer input devices changed:", pointerInputDevices, "current mode:", root.unity8Settings.usageMode, "old device count", miceModel.oldCount + touchPadModel.oldCount)
107+ console.log("Pointer input devices changed:", pointerInputDevices, "current mode:", unity8Settings.usageMode, "old device count", miceModel.oldCount + touchPadModel.oldCount)
95− if (root.unity8Settings.usageMode === "Windowed") {
108+ if (unity8Settings.usageMode === "Windowed") {
96 if (pointerInputDevices === 0) {
109 if (pointerInputDevices === 0) {
97 // All pointer devices have been unplugged. Move to staged.
110 // All pointer devices have been unplugged. Move to staged.
98− root.unity8Settings.usageMode = "Staged";
111+ unity8Settings.usageMode = "Staged";
99 }
112 }
100 } else {
113 } else {
101− var longEdgeWidth = Math.max(root.width, root.height)
114+ if (Math.min(root.width, root.height) > units.gu(60)) {
102− if (longEdgeWidth > units.gu(90)){
103 if (pointerInputDevices > 0 && pointerInputDevices > miceModel.oldCount + touchPadModel.oldCount) {
115 if (pointerInputDevices > 0 && pointerInputDevices > miceModel.oldCount + touchPadModel.oldCount) {
104− root.unity8Settings.usageMode = "Windowed";
116+ unity8Settings.usageMode = "Windowed";
105 }
117 }
106 } else {
118 } else {
107 // Make sure we initialize to something sane
119 // Make sure we initialize to something sane
108− root.unity8Settings.usageMode = "Staged";
120+ unity8Settings.usageMode = "Staged";
109 }
121 }
110 }
122 }
111 miceModel.oldCount = miceModel.count;
123 miceModel.oldCount = miceModel.count;
@@ -154,6 +166,9 @@ Rectangle {
154 if (orientationLocked) {
166 if (orientationLocked) {
155 orientation = orientationLock.savedOrientation;
167 orientation = orientationLock.savedOrientation;
156 }
168 }
169+
170+ calculateUsageMode();
171+
157 // We need to manually update this on startup as the binding
172 // We need to manually update this on startup as the binding
158 // below doesn't seem to have any effect at that stage
173 // below doesn't seem to have any effect at that stage
159 oskSettings.disableHeight = !shell.oskEnabled || shell.usageScenario == "desktop"
174 oskSettings.disableHeight = !shell.oskEnabled || shell.usageScenario == "desktop"
@@ -248,7 +263,7 @@ Rectangle {
248 forceOSKEnabled
263 forceOSKEnabled
249
264
250 usageScenario: {
265 usageScenario: {
251− if (root.unity8Settings.usageMode === "Windowed") {
266+ if (unity8Settings.usageMode === "Windowed") {
252 return "desktop";
267 return "desktop";
253 } else {
268 } else {
254 if (deviceConfiguration.category === "phone") {
269 if (deviceConfiguration.category === "phone") {
qml/Shell.qml+69−102
@@ -42,6 +42,7 @@ import Unity.Session 0.1
42import Unity.DashCommunicator 0.1
42import Unity.DashCommunicator 0.1
43import Unity.Indicators 0.1 as Indicators
43import Unity.Indicators 0.1 as Indicators
44import Cursor 1.0
44import Cursor 1.0
45+import WindowManager 0.1
45
46
46
47
47Item {
48Item {
@@ -96,20 +97,50 @@ Item {
96 }
97 }
97 }
98 }
98
99
99− // For autopilot consumption
100− readonly property string focusedApplicationId: ApplicationManager.focusedApplicationId
101−
102− // internal props from here onwards
103 readonly property var mainApp:
100 readonly property var mainApp:
104 applicationsDisplayLoader.item ? applicationsDisplayLoader.item.mainApp : null
101 applicationsDisplayLoader.item ? applicationsDisplayLoader.item.mainApp : null
105− readonly property var mainAppWindow:
102+ onMainAppChanged: {
106− applicationsDisplayLoader.item ? applicationsDisplayLoader.item.mainAppWindow : null
103+ if (mainApp) {
104+ _onMainAppChanged(mainApp.appId);
105+ }
106+ }
107+ Connections {
108+ target: ApplicationManager
109+ onFocusRequested: {
110+ if (shell.mainApp && shell.mainApp.appId === appId) {
111+ _onMainAppChanged(appId);
112+ }
113+ }
114+ }
115+ function _onMainAppChanged(appId) {
116+ if (wizard.active && appId != "" && appId != "unity8-dash") {
117+ // If this happens on first boot, we may be in edge
118+ // tutorial or wizard while receiving a call. But a call
119+ // is more important than wizard so just bail out of those.
120+ tutorial.finish();
121+ wizard.hide();
122+ }
123+
124+ if (appId === "dialer-app" && callManager.hasCalls && greeter.locked) {
125+ // If we are in the middle of a call, make dialer lockedApp and show it.
126+ // This can happen if user backs out of dialer back to greeter, then
127+ // launches dialer again.
128+ greeter.lockedApp = appId;
129+ }
130+ greeter.notifyAppFocusRequested(appId);
131+
132+ panel.indicators.hide();
133+ launcher.hide();
134+ }
135+
136+ // For autopilot consumption
137+ readonly property string focusedApplicationId: ApplicationManager.focusedApplicationId
107
138
108 // Disable everything while greeter is waiting, so that the user can't swipe
139 // Disable everything while greeter is waiting, so that the user can't swipe
109 // the greeter or launcher until we know whether the session is locked.
140 // the greeter or launcher until we know whether the session is locked.
110 enabled: greeter && !greeter.waiting
141 enabled: greeter && !greeter.waiting
111
142
112− property real edgeSize: units.gu(2)
143+ property real edgeSize: units.gu(settings.edgeDragWidth)
113
144
114 WallpaperResolver {
145 WallpaperResolver {
115 id: wallpaperResolver
146 id: wallpaperResolver
@@ -141,9 +172,6 @@ Item {
141
172
142 Component.onCompleted: {
173 Component.onCompleted: {
143 theme.name = "Ubuntu.Components.Themes.SuruDark"
174 theme.name = "Ubuntu.Components.Themes.SuruDark"
144− if (ApplicationManager.count > 0) {
145− ApplicationManager.focusApplication(ApplicationManager.get(0).appId);
146− }
147 finishStartUpTimer.start();
175 finishStartUpTimer.start();
148 }
176 }
149
177
@@ -199,36 +227,10 @@ Item {
199 width: parent.width
227 width: parent.width
200 height: parent.height
228 height: parent.height
201
229
202− Connections {
230+ TopLevelSurfaceList {
203− target: ApplicationManager
231+ id: topLevelSurfaceList
204−
232+ objectName: "topLevelSurfaceList"
205− // This signal is also fired when we try to focus the current app
233+ applicationsModel: ApplicationManager
206− // again. We rely on this!
207− onFocusedApplicationIdChanged: {
208− var appId = ApplicationManager.focusedApplicationId;
209−
210− if (wizard.active && appId != "" && appId != "unity8-dash") {
211− // If this happens on first boot, we may be in edge
212− // tutorial or wizard while receiving a call. But a call
213− // is more important than wizard so just bail out of those.
214− tutorial.finish();
215− wizard.hide();
216− }
217−
218− if (appId === "dialer-app" && callManager.hasCalls && greeter.locked) {
219− // If we are in the middle of a call, make dialer lockedApp and show it.
220− // This can happen if user backs out of dialer back to greeter, then
221− // launches dialer again.
222− greeter.lockedApp = appId;
223− }
224− greeter.notifyAppFocused(appId);
225−
226− panel.indicators.hide();
227− }
228−
229− onApplicationAdded: {
230− launcher.hide();
231− }
232 }
234 }
233
235
234 Loader {
236 Loader {
@@ -259,6 +261,10 @@ Item {
259 return "Stages/DesktopStage.qml";
261 return "Stages/DesktopStage.qml";
260 }
262 }
261 }
263 }
264+ // TODO: Ensure the current stage is destroyed before the new one gets loaded.
265+ // Currently the new one will get loaded while the old is still hanging
266+ // around for a bit, which might lead to conflicts where both stages
267+ // change the model simultaneously.
262 onQmlComponentChanged: {
268 onQmlComponentChanged: {
263 if (item) item.stageAboutToBeUnloaded();
269 if (item) item.stageAboutToBeUnloaded();
264 source = qmlComponent;
270 source = qmlComponent;
@@ -271,6 +277,11 @@ Item {
271
277
272 onInteractiveChanged: { if (interactive) { focus = true; } }
278 onInteractiveChanged: { if (interactive) { focus = true; } }
273
279
280+ Binding {
281+ target: applicationsDisplayLoader.item
282+ property: "focus"
283+ value: true
284+ }
274 Binding {
285 Binding {
275 target: applicationsDisplayLoader.item
286 target: applicationsDisplayLoader.item
276 property: "objectName"
287 property: "objectName"
@@ -357,6 +368,16 @@ Item {
357 property: "leftMargin"
368 property: "leftMargin"
358 value: shell.usageScenario == "desktop" && !settings.autohideLauncher ? launcher.panelWidth: 0
369 value: shell.usageScenario == "desktop" && !settings.autohideLauncher ? launcher.panelWidth: 0
359 }
370 }
371+ Binding {
372+ target: applicationsDisplayLoader.item
373+ property: "applicationManager"
374+ value: ApplicationManager
375+ }
376+ Binding {
377+ target: applicationsDisplayLoader.item
378+ property: "topLevelSurfaceList"
379+ value: topLevelSurfaceList
380+ }
360 }
381 }
361 }
382 }
362
383
@@ -371,16 +392,6 @@ Item {
371 z: notifications.useModal || panel.indicators.shown || wizard.active || tutorial.running ? overlay.z + 1 : overlay.z - 1
392 z: notifications.useModal || panel.indicators.shown || wizard.active || tutorial.running ? overlay.z + 1 : overlay.z - 1
372 }
393 }
373
394
374− Connections {
375− target: SessionManager
376− onSessionStopping: {
377− if (!session.parentSession && !session.application) {
378− // nothing is using it. delete it right away
379− session.release();
380− }
381− }
382− }
383−
384 Loader {
395 Loader {
385 id: greeterLoader
396 id: greeterLoader
386 anchors.fill: parent
397 anchors.fill: parent
@@ -472,7 +483,7 @@ Item {
472 }
483 }
473
484
474 function showHome() {
485 function showHome() {
475− greeter.notifyAboutToFocusApp("unity8-dash");
486+ greeter.notifyUserRequestedApp("unity8-dash");
476
487
477 var animate = !LightDMService.greeter.active && !stages.shown
488 var animate = !LightDMService.greeter.active && !stages.shown
478 dash.setCurrentScope(0, animate, false)
489 dash.setCurrentScope(0, animate, false)
@@ -521,9 +532,10 @@ Item {
521 greeterShown: greeter.shown
532 greeterShown: greeter.shown
522 }
533 }
523
534
524− readonly property bool topmostApplicationIsFullscreen: mainApp && mainApp.fullscreen
535+ readonly property bool focusedSurfaceIsFullscreen: MirFocusController.focusedSurface
525−
536+ ? MirFocusController.focusedSurface.state === Mir.FullscreenState
537+ : false
526− fullscreenMode: (topmostApplicationIsFullscreen && !LightDMService.greeter.active && launcher.progress == 0)
538+ fullscreenMode: (focusedSurfaceIsFullscreen && !LightDMService.greeter.active && launcher.progress == 0)
527 || greeter.hasLockedApp
539 || greeter.hasLockedApp
528 locked: greeter && greeter.active
540 locked: greeter && greeter.active
529 }
541 }
@@ -556,7 +568,7 @@ Item {
556 }
568 }
557 }
569 }
558 onLauncherApplicationSelected: {
570 onLauncherApplicationSelected: {
559− greeter.notifyAboutToFocusApp(appId);
571+ greeter.notifyUserRequestedApp(appId);
560 shell.activateApplication(appId);
572 shell.activateApplication(appId);
561 }
573 }
562 onShownChanged: {
574 onShownChanged: {
@@ -721,53 +733,8 @@ Item {
721 onMouseMoved: { cursor.opacity = 1; }
733 onMouseMoved: { cursor.opacity = 1; }
722 }
734 }
723
735
724− // keymap switching
736+ // non-visual object
725− GlobalShortcut {
737+ KeymapSwitcher {}
726− shortcut: Qt.MetaModifier|Qt.Key_Space
727− onTriggered: keymapPriv.nextKeymap()
728− active: keymapPriv.keymapCount > 1
729− }
730−
731− GlobalShortcut {
732− shortcut: Qt.MetaModifier|Qt.ShiftModifier|Qt.Key_Space
733− onTriggered: keymapPriv.previousKeymap()
734− active: keymapPriv.keymapCount > 1
735− }
736−
737− QtObject {
738− id: keymapPriv
739−
740− readonly property var keymaps: AccountsService.keymaps
741− readonly property int keymapCount: keymaps.length
742− property int currentKeymapIndex: 0 // the new one that we're setting
743− onCurrentKeymapIndexChanged: switchToKeymap();
744−
745− function nextKeymap() {
746− var nextIndex = 0;
747−
748− if (currentKeymapIndex !== -1 && currentKeymapIndex < keymapCount - 1) {
749− nextIndex = currentKeymapIndex + 1;
750− }
751− currentKeymapIndex = nextIndex;
752− }
753−
754− function previousKeymap() {
755− var prevIndex = keymapCount - 1;
756−
757− if (currentKeymapIndex > 0) {
758− prevIndex = currentKeymapIndex - 1;
759− }
760− currentKeymapIndex = prevIndex;
761− }
762−
763− function switchToKeymap() {
764− if (mainAppWindow) {
765− mainAppWindow.switchToKeymap(keymaps[currentKeymapIndex]);
766− }
767− }
768− }
769−
770− onMainAppWindowChanged: keymapPriv.switchToKeymap()
771
738
772 Rectangle {
739 Rectangle {
773 id: shutdownFadeOutRectangle
740 id: shutdownFadeOutRectangle
qml/Stages/AbstractStage.qml+9−3
@@ -18,12 +18,19 @@ import QtQuick 2.4
18import Ubuntu.Components 1.3
18import Ubuntu.Components 1.3
19import GSettings 1.0
19import GSettings 1.0
20
20
21−Rectangle {
21+FocusScope {
22 id: root
22 id: root
23
23
24+ property alias color: backRect.color
25+ Rectangle {
26+ id: backRect
24− color: "#060606"
27+ color: "#060606"
28+ anchors.fill: parent
29+ }
25
30
26 // Controls to be set from outside
31 // Controls to be set from outside
32+ property QtObject applicationManager
33+ property QtObject topLevelSurfaceList
27 property bool altTabPressed
34 property bool altTabPressed
28 property url background
35 property url background
29 property bool beingResized
36 property bool beingResized
@@ -45,7 +52,6 @@ Rectangle {
45
52
46 // To be read from outside
53 // To be read from outside
47 property var mainApp: null
54 property var mainApp: null
48− property var mainAppWindow: null
49 property int mainAppWindowOrientationAngle: 0
55 property int mainAppWindowOrientationAngle: 0
50 property bool orientationChangesEnabled
56 property bool orientationChangesEnabled
51 property int supportedOrientations: Qt.PortraitOrientation
57 property int supportedOrientations: Qt.PortraitOrientation
qml/Stages/Animations/BaseSessionAnimation.qmldeleted−96
@@ -1,96 +0,0 @@
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.4
18−
19−/* This is the base case for surface animations, used when adding/removing * child surfaces.
20− * The class is meant to be overridden and changes/animations provided for state changes.
21− * NB. It is important to release the surface at the end of the "out" animation.
22− *
23− * Example - Simple fade in/out
24− *
25− * BaseSurfaceAnimation {
26− * outChanges: [ PropertyChanges { target: animation.surface; opacity: 0.0 } ]
27− * outAnimations: [
28− SequentialAnimation {
29− * NumberAnimation { target: animation.surface; property: "opacity"; duration: 300 }
30− * ScriptAction { script: { if (animation.parent.removing) animation.surface.release(); } }
31− * }
32− * ]
33− *
34− * inChanges: [ PropertyChanges { target: animation.surface; opacity: 1.0 } ]
35− * inAnimations: [ NumberAnimation { target: animation.surface; property: "opacity"; duration: 300 } ]
36− * }
37− */
38−Item {
39− id: base
40− property var container
41− objectName: "sessionAnimation"
42−
43− // changes applied when state changes to "from"
44− property list<QtObject> fromChanges
45− // transition animations when changing state to "from"
46− property list<QtObject> fromAnimations
47−
48− // changes applied when state changes to "to"
49− property list<QtObject> toChanges
50− // transition animations when changing state to "to"
51− property list<QtObject> toAnimations
52−
53− function start() {
54− // "prep" state forces toChanges without transition animations.
55− state = "prep"
56− state = "to";
57− }
58− function end() {
59− state = "from";
60− }
61−
62− signal completed()
63−
64− states: [
65− State {
66− name: "baseAnimation"
67− PropertyChanges { target: container; anchors.fill: undefined }
68− },
69−
70− State {
71− name: "prep"
72− extend: "baseAnimation"
73− changes: fromChanges
74− },
75− State {
76− name: "from"
77− extend: "prep"
78− },
79− State {
80− name: "in"
81− extend: "baseAnimation"
82− changes: toChanges
83− }
84− ]
85−
86− transitions: [
87− Transition {
88− to: "from"
89− animations: fromAnimations
90− },
91− Transition {
92− to: "to"
93− animations: toAnimations
94− }
95− ]
96−}
qml/Stages/Animations/SwipeFromBottomAnimation.qmldeleted−53
@@ -1,53 +0,0 @@
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.4
18−import Ubuntu.Components 1.3
19−
20−BaseSessionAnimation {
21− id: animation
22−
23− fromChanges: [
24− AnchorChanges {
25− target: container;
26− anchors.top: container.parent.bottom
27− }
28− ]
29− fromAnimations: [
30− SequentialAnimation {
31− // clip so we don't go out of parent's bounds during spread
32− PropertyAction { target: container.parent; property: "clip"; value: true }
33− AnchorAnimation { easing: UbuntuAnimation.StandardEasing; duration: UbuntuAnimation.BriskDuration }
34− PropertyAction { target: container.parent; property: "clip"; value: false }
35− ScriptAction { script: { animation.completed(); } }
36− }
37− ]
38−
39− toChanges: [
40− AnchorChanges {
41− target: container;
42− anchors.top: container.parent.top
43− }
44− ]
45− toAnimations: [
46− SequentialAnimation {
47− // clip so we don't go out of parent's bounds during spread
48− PropertyAction { target: container.parent; property: "clip"; value: true }
49− AnchorAnimation { easing: UbuntuAnimation.StandardEasing; duration: UbuntuAnimation.BriskDuration }
50− PropertyAction { target: container.parent; property: "clip"; value: false }
51− }
52− ]
53−}
qml/Stages/ApplicationWindow.qml+113−77
@@ -20,39 +20,77 @@ import Unity.Application 0.1
20
20
21FocusScope {
21FocusScope {
22 id: root
22 id: root
23− implicitWidth: sessionContainer.implicitWidth
23+ implicitWidth: surfaceContainer.implicitWidth
24− implicitHeight: sessionContainer.implicitHeight
24+ implicitHeight: surfaceContainer.implicitHeight
25
25
26 // to be read from outside
26 // to be read from outside
27− property alias interactive: sessionContainer.interactive
27+ property alias interactive: surfaceContainer.interactive
28 property bool orientationChangesEnabled: d.supportsSurfaceResize ? d.surfaceOldEnoughToBeResized : true
28 property bool orientationChangesEnabled: d.supportsSurfaceResize ? d.surfaceOldEnoughToBeResized : true
29− readonly property string title: sessionContainer.surface && sessionContainer.surface.name !== "" ?
29+ readonly property string title: surface && surface.name !== "" ? surface.name : d.name
30− sessionContainer.surface.name : d.name
31
30
32 // overridable from outside
31 // overridable from outside
33− property bool fullscreen: application ? application.fullscreen : false
32+ property bool fullscreen: {
33+ if (surface) {
34+ return surface.state === Mir.FullscreenState;
35+ } else if (application) {
36+ return application.fullscreen;
37+ } else {
38+ return false;
39+ }
40+ }
34
41
35 // to be set from outside
42 // to be set from outside
43+ property QtObject surface
36 property QtObject application
44 property QtObject application
37 property int surfaceOrientationAngle
45 property int surfaceOrientationAngle
38− property alias resizeSurface: sessionContainer.resizeSurface
46+ property alias resizeSurface: surfaceContainer.resizeSurface
39 property int requestedWidth: -1
47 property int requestedWidth: -1
40 property int requestedHeight: -1
48 property int requestedHeight: -1
41
49
42− function switchToKeymap(keymap) {
50+ readonly property int minimumWidth: surface ? surface.minimumWidth : 0
43− sessionContainer.surfaceContainer.switchToKeymap(keymap);
51+ readonly property int minimumHeight: surface ? surface.minimumHeight : 0
44− }
52+ readonly property int maximumWidth: surface ? surface.maximumWidth : 0
53+ readonly property int maximumHeight: surface ? surface.maximumHeight : 0
54+ readonly property int widthIncrement: surface ? surface.widthIncrement : 0
55+ readonly property int heightIncrement: surface ? surface.heightIncrement : 0
45
56
46− readonly property int minimumWidth: sessionContainer.surface ? sessionContainer.surface.minimumWidth : 0
57+ onSurfaceChanged: {
47− readonly property int minimumHeight: sessionContainer.surface ? sessionContainer.surface.minimumHeight : 0
58+ // The order in which the instructions are executed here matters, to that the correct state
48− readonly property int maximumWidth: sessionContainer.surface ? sessionContainer.surface.maximumWidth : 0
59+ // transitions in stateGroup take place.
49− readonly property int maximumHeight: sessionContainer.surface ? sessionContainer.surface.maximumHeight : 0
60+ // More specifically, the moment surfaceContainer.surface gets updated relative to the
50− readonly property int widthIncrement: sessionContainer.surface ? sessionContainer.surface.widthIncrement : 0
61+ // other instructions.
51− readonly property int heightIncrement: sessionContainer.surface ? sessionContainer.surface.heightIncrement : 0
62+ if (surface) {
63+ surfaceContainer.surface = surface;
64+ d.liveSurface = surface.live;
65+ d.hadSurface = false;
66+ surfaceInitTimer.start();
67+ } else {
68+ if (d.surfaceInitialized) {
69+ d.hadSurface = true;
70+ }
71+ d.surfaceInitialized = false;
72+ surfaceContainer.surface = null;
73+ }
74+ }
52
75
53 QtObject {
76 QtObject {
54 id: d
77 id: d
55
78
79+ property bool liveSurface: false;
80+ property var con: Connections {
81+ target: root.surface
82+ onLiveChanged: d.liveSurface = root.surface.live
83+ }
84+ // using liveSurface instead of root.surface.live because with the latter
85+ // this expression is not reevaluated when root.surface changes
86+ readonly property bool needToTakeScreenshot: root.surface && d.surfaceInitialized && !d.liveSurface
87+ && applicationState !== ApplicationInfoInterface.Running
88+ onNeedToTakeScreenshotChanged: {
89+ if (needToTakeScreenshot && screenshotImage.status === Image.Null) {
90+ screenshotImage.take();
91+ }
92+ }
93+
56 // helpers so that we don't have to check for the existence of an application everywhere
94 // helpers so that we don't have to check for the existence of an application everywhere
57 // (in order to avoid breaking qml binding due to a javascript exception)
95 // (in order to avoid breaking qml binding due to a javascript exception)
58 readonly property string name: root.application ? root.application.name : ""
96 readonly property string name: root.application ? root.application.name : ""
@@ -66,17 +104,7 @@ FocusScope {
66 readonly property color splashColorFooter: root.application ? root.application.splashColorFooter : "#00000000"
104 readonly property color splashColorFooter: root.application ? root.application.splashColorFooter : "#00000000"
67
105
68 // Whether the Application had a surface before but lost it.
106 // Whether the Application had a surface before but lost it.
69− property bool hadSurface: sessionContainer.surfaceContainer.hadSurface
107+ property bool hadSurface: false
70−
71− readonly property bool needToTakeScreenshot:
72− ((sessionContainer.surface && d.surfaceInitialized) || d.hadSurface)
73− && screenshotImage.status === Image.Null
74− && d.applicationState === ApplicationInfoInterface.Stopped
75− onNeedToTakeScreenshotChanged: {
76− if (needToTakeScreenshot) {
77− screenshotImage.take();
78− }
79− }
80
108
81 //FIXME - this is a hack to avoid the first few rendered frames as they
109 //FIXME - this is a hack to avoid the first few rendered frames as they
82 // might show the UI accommodating due to surface resizes on startup.
110 // might show the UI accommodating due to surface resizes on startup.
@@ -103,7 +131,9 @@ FocusScope {
103 Timer {
131 Timer {
104 id: surfaceInitTimer
132 id: surfaceInitTimer
105 interval: 100
133 interval: 100
134+ onTriggered: {
106− onTriggered: { if (sessionContainer.surface) {d.surfaceInitialized = true;} }
135+ if (root.surface && root.surface.live) {d.surfaceInitialized = true;}
136+ }
107 }
137 }
108
138
109 Timer {
139 Timer {
@@ -121,13 +151,11 @@ FocusScope {
121 function take() {
151 function take() {
122 // Save memory by using a half-resolution (thus quarter size) screenshot.
152 // Save memory by using a half-resolution (thus quarter size) screenshot.
123 // Do not make this a binding, we can only take the screenshot once!
153 // Do not make this a binding, we can only take the screenshot once!
124− sourceSize.width = root.width / 2;
154+ surfaceContainer.grabToImage(
125− sourceSize.height = root.height / 2;
155+ function(result) {
126−
156+ screenshotImage.source = result.url;
127− // Format: "image://application/$APP_ID/$CURRENT_TIME_MS"
157+ },
128− // eg: "image://application/calculator-app/123456"
158+ Qt.size(root.width / 2, root.height / 2));
129− var timeMs = new Date().getTime();
130− source = "image://application/" + root.application.appId + "/" + timeMs;
131 }
159 }
132 }
160 }
133
161
@@ -150,46 +178,33 @@ FocusScope {
150 }
178 }
151 }
179 }
152
180
153− SessionContainer {
181+ SurfaceContainer {
154− id: sessionContainer
182+ id: surfaceContainer
155− // A fake application might not even have a session property.
156− session: application && application.session ? application.session : null
157−
158 requestedWidth: root.requestedWidth
183 requestedWidth: root.requestedWidth
159 requestedHeight: root.requestedHeight
184 requestedHeight: root.requestedHeight
160−
161 surfaceOrientationAngle: application && application.rotatesWindowContents ? root.surfaceOrientationAngle : 0
185 surfaceOrientationAngle: application && application.rotatesWindowContents ? root.surfaceOrientationAngle : 0
162−
163− onSurfaceChanged: {
164− if (sessionContainer.surface) {
165− surfaceInitTimer.start();
166− } else {
167− d.surfaceInitialized = false;
168− }
169− }
170−
171 focus: true
186 focus: true
172 }
187 }
173
188
174− // SessionContainer size drives ApplicationWindow size
189+ // SurfaceContainer size drives ApplicationWindow size
175 Binding {
190 Binding {
176 target: root; property: "width"
191 target: root; property: "width"
177− value: stateGroup.state === "surface" ? sessionContainer.width : root.requestedWidth
192+ value: stateGroup.state === "surface" ? surfaceContainer.width : root.requestedWidth
178 when: root.requestedWidth >= 0
193 when: root.requestedWidth >= 0
179 }
194 }
180 Binding {
195 Binding {
181 target: root; property: "height"
196 target: root; property: "height"
182− value: stateGroup.state === "surface" ? sessionContainer.height : root.requestedHeight
197+ value: stateGroup.state === "surface" ? surfaceContainer.height : root.requestedHeight
183 when: root.requestedHeight >= 0
198 when: root.requestedHeight >= 0
184 }
199 }
185
200
186− // ApplicationWindow size drives SessionContainer size
201+ // ApplicationWindow size drives SurfaceContainer size
187 Binding {
202 Binding {
188− target: sessionContainer; property: "width"; value: root.width
203+ target: surfaceContainer; property: "width"; value: root.width
189 when: root.requestedWidth < 0
204 when: root.requestedWidth < 0
190 }
205 }
191 Binding {
206 Binding {
192− target: sessionContainer; property: "height"; value: root.height
207+ target: surfaceContainer; property: "height"; value: root.height
193 when: root.requestedHeight < 0
208 when: root.requestedHeight < 0
194 }
209 }
195
210
@@ -200,32 +215,43 @@ FocusScope {
200 State {
215 State {
201 name: "void"
216 name: "void"
202 when:
217 when:
203− d.hadSurface && (!sessionContainer.surface || !d.surfaceInitialized)
218+ d.hadSurface && (!root.surface || !d.surfaceInitialized)
204 &&
219 &&
205 screenshotImage.status !== Image.Ready
220 screenshotImage.status !== Image.Ready
206 },
221 },
207 State {
222 State {
208 name: "splashScreen"
223 name: "splashScreen"
209 when:
224 when:
210− !d.hadSurface && (!sessionContainer.surface || !d.surfaceInitialized)
225+ !d.hadSurface && (!root.surface || !d.surfaceInitialized)
211 &&
226 &&
212 screenshotImage.status !== Image.Ready
227 screenshotImage.status !== Image.Ready
213 },
228 },
214 State {
229 State {
215 name: "surface"
230 name: "surface"
216 when:
231 when:
217− (sessionContainer.surface && d.surfaceInitialized)
232+ (root.surface && d.surfaceInitialized)
218 &&
233 &&
234+ (d.liveSurface ||
219− (d.applicationState !== ApplicationInfoInterface.Stopped
235+ (d.applicationState !== ApplicationInfoInterface.Running
220− || screenshotImage.status !== Image.Ready)
236+ && screenshotImage.status !== Image.Ready))
221 },
237 },
222 State {
238 State {
223 name: "screenshot"
239 name: "screenshot"
224 when:
240 when:
225 screenshotImage.status === Image.Ready
241 screenshotImage.status === Image.Ready
226 &&
242 &&
227− (d.applicationState === ApplicationInfoInterface.Stopped
243+ (d.applicationState !== ApplicationInfoInterface.Running
228− || !sessionContainer.surface || !d.surfaceInitialized)
244+ || !root.surface || !d.surfaceInitialized)
245+ },
246+ State {
247+ // This is a dead end. From here we expect the surface to be removed from the model
248+ // shortly after we stop referencing to it in our SurfaceContainer.
249+ name: "closed"
250+ when:
251+ // The surface died while the application is running. It must have been closed
252+ // by the shell or the application decided to destroy it by itself
253+ root.surface && d.surfaceInitialized && !d.liveSurface
254+ && d.applicationState === ApplicationInfoInterface.Running
229 }
255 }
230 ]
256 ]
231
257
@@ -233,17 +259,17 @@ FocusScope {
233 Transition {
259 Transition {
234 from: ""; to: "splashScreen"
260 from: ""; to: "splashScreen"
235 PropertyAction { target: splashLoader; property: "active"; value: true }
261 PropertyAction { target: splashLoader; property: "active"; value: true }
236− PropertyAction { target: sessionContainer.surfaceContainer
262+ PropertyAction { target: surfaceContainer
237 property: "visible"; value: false }
263 property: "visible"; value: false }
238 },
264 },
239 Transition {
265 Transition {
240 from: "splashScreen"; to: "surface"
266 from: "splashScreen"; to: "surface"
241 SequentialAnimation {
267 SequentialAnimation {
242− PropertyAction { target: sessionContainer.surfaceContainer
268+ PropertyAction { target: surfaceContainer
243 property: "opacity"; value: 0.0 }
269 property: "opacity"; value: 0.0 }
244− PropertyAction { target: sessionContainer.surfaceContainer
270+ PropertyAction { target: surfaceContainer
245 property: "visible"; value: true }
271 property: "visible"; value: true }
246− UbuntuNumberAnimation { target: sessionContainer.surfaceContainer; property: "opacity";
272+ UbuntuNumberAnimation { target: surfaceContainer; property: "opacity";
247 from: 0.0; to: 1.0
273 from: 0.0; to: 1.0
248 duration: UbuntuAnimation.BriskDuration }
274 duration: UbuntuAnimation.BriskDuration }
249 ScriptAction { script: {
275 ScriptAction { script: {
@@ -259,12 +285,12 @@ FocusScope {
259 surfaceIsOldTimer.stop();
285 surfaceIsOldTimer.stop();
260 d.surfaceOldEnoughToBeResized = false;
286 d.surfaceOldEnoughToBeResized = false;
261 splashLoader.active = true;
287 splashLoader.active = true;
262− sessionContainer.surfaceContainer.visible = true;
288+ surfaceContainer.visible = true;
263 } }
289 } }
264 UbuntuNumberAnimation { target: splashLoader; property: "opacity";
290 UbuntuNumberAnimation { target: splashLoader; property: "opacity";
265 from: 0.0; to: 1.0
291 from: 0.0; to: 1.0
266 duration: UbuntuAnimation.BriskDuration }
292 duration: UbuntuAnimation.BriskDuration }
267− PropertyAction { target: sessionContainer.surfaceContainer
293+ PropertyAction { target: surfaceContainer
268 property: "visible"; value: false }
294 property: "visible"; value: false }
269 }
295 }
270 },
296 },
@@ -280,15 +306,16 @@ FocusScope {
280 from: 0.0; to: 1.0
306 from: 0.0; to: 1.0
281 duration: UbuntuAnimation.BriskDuration }
307 duration: UbuntuAnimation.BriskDuration }
282 ScriptAction { script: {
308 ScriptAction { script: {
283− sessionContainer.surfaceContainer.visible = false;
309+ surfaceContainer.visible = false;
284− if (sessionContainer.session) { sessionContainer.session.release(); }
310+ surfaceContainer.surface = null;
311+ d.hadSurface = true;
285 } }
312 } }
286 }
313 }
287 },
314 },
288 Transition {
315 Transition {
289 from: "screenshot"; to: "surface"
316 from: "screenshot"; to: "surface"
290 SequentialAnimation {
317 SequentialAnimation {
291− PropertyAction { target: sessionContainer.surfaceContainer
318+ PropertyAction { target: surfaceContainer
292 property: "visible"; value: true }
319 property: "visible"; value: true }
293 UbuntuNumberAnimation { target: screenshotImage; property: "opacity";
320 UbuntuNumberAnimation { target: screenshotImage; property: "opacity";
294 from: 1.0; to: 0.0
321 from: 1.0; to: 0.0
@@ -316,22 +343,31 @@ FocusScope {
316 ScriptAction { script: {
343 ScriptAction { script: {
317 surfaceIsOldTimer.stop();
344 surfaceIsOldTimer.stop();
318 d.surfaceOldEnoughToBeResized = false;
345 d.surfaceOldEnoughToBeResized = false;
319− sessionContainer.surfaceContainer.visible = false;
346+ surfaceContainer.visible = false;
320− if (sessionContainer.session) { sessionContainer.session.release(); }
321 } }
347 } }
322 },
348 },
323 Transition {
349 Transition {
324 from: "void"; to: "surface"
350 from: "void"; to: "surface"
325 SequentialAnimation {
351 SequentialAnimation {
326− PropertyAction { target: sessionContainer.surfaceContainer; property: "opacity"; value: 0.0 }
352+ PropertyAction { target: surfaceContainer; property: "opacity"; value: 0.0 }
327− PropertyAction { target: sessionContainer.surfaceContainer; property: "visible"; value: true }
353+ PropertyAction { target: surfaceContainer; property: "visible"; value: true }
328− UbuntuNumberAnimation { target: sessionContainer.surfaceContainer; property: "opacity";
354+ UbuntuNumberAnimation { target: surfaceContainer; property: "opacity";
329 from: 0.0; to: 1.0
355 from: 0.0; to: 1.0
330 duration: UbuntuAnimation.BriskDuration }
356 duration: UbuntuAnimation.BriskDuration }
331 ScriptAction { script: {
357 ScriptAction { script: {
332 surfaceIsOldTimer.start();
358 surfaceIsOldTimer.start();
333 } }
359 } }
334 }
360 }
361+ },
362+ Transition {
363+ to: "closed"
364+ SequentialAnimation {
365+ ScriptAction { script: {
366+ surfaceContainer.visible = false;
367+ surfaceContainer.surface = null;
368+ d.hadSurface = true;
369+ } }
370+ }
335 }
371 }
336 ]
372 ]
337 }
373 }
qml/Stages/DecoratedWindow.qml+5−5
@@ -26,10 +26,10 @@ FocusScope {
26 width: applicationWindow.width
26 width: applicationWindow.width
27 height: (decorationShown ? decoration.height : 0) + applicationWindow.height
27 height: (decorationShown ? decoration.height : 0) + applicationWindow.height
28
28
29− property alias window: applicationWindow
30 property alias application: applicationWindow.application
29 property alias application: applicationWindow.application
30+ property alias surface: applicationWindow.surface
31 property alias active: decoration.active
31 property alias active: decoration.active
32− property alias title: decoration.title
32+ readonly property alias title: applicationWindow.title
33 property alias fullscreen: applicationWindow.fullscreen
33 property alias fullscreen: applicationWindow.fullscreen
34
34
35 readonly property bool decorationShown: !fullscreen
35 readonly property bool decorationShown: !fullscreen
@@ -79,11 +79,11 @@ FocusScope {
79 WindowDecoration {
79 WindowDecoration {
80 id: decoration
80 id: decoration
81 target: root.parent
81 target: root.parent
82− objectName: application ? "appWindowDecoration_" + application.appId : "appWindowDecoration_null"
82+ objectName: "appWindowDecoration"
83 anchors { left: parent.left; top: parent.top; right: parent.right }
83 anchors { left: parent.left; top: parent.top; right: parent.right }
84 height: units.gu(3)
84 height: units.gu(3)
85 width: root.width
85 width: root.width
86− title: window.title
86+ title: applicationWindow.title
87 visible: root.decorationShown
87 visible: root.decorationShown
88
88
89 onClose: root.close();
89 onClose: root.close();
@@ -94,7 +94,7 @@ FocusScope {
94
94
95 ApplicationWindow {
95 ApplicationWindow {
96 id: applicationWindow
96 id: applicationWindow
97− objectName: application ? "appWindow_" + application.appId : "appWindow_null"
97+ objectName: "appWindow"
98 anchors.top: parent.top
98 anchors.top: parent.top
99 anchors.topMargin: decoration.height
99 anchors.topMargin: decoration.height
100 anchors.left: parent.left
100 anchors.left: parent.left
qml/Stages/DesktopSpread.qml+22−18
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2015 Canonical, Ltd.
2+ * Copyright (C) 2015-2016 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -20,6 +20,7 @@ import Ubuntu.Components 1.3
20import Ubuntu.Gestures 0.1
20import Ubuntu.Gestures 0.1
21import Unity.Application 0.1
21import Unity.Application 0.1
22import "../Components"
22import "../Components"
23+import Utils 0.1
23
24
24FocusScope {
25FocusScope {
25 id: root
26 id: root
@@ -69,12 +70,12 @@ FocusScope {
69 }
70 }
70
71
71 function selectNext(isAutoRepeat) {
72 function selectNext(isAutoRepeat) {
72− if (isAutoRepeat && spreadRepeater.highlightedIndex >= ApplicationManager.count -1) {
73+ if (isAutoRepeat && spreadRepeater.highlightedIndex >= topLevelSurfaceList.count -1) {
73 return; // AutoRepeat is not allowed to wrap around
74 return; // AutoRepeat is not allowed to wrap around
74 }
75 }
75
76
76− spreadRepeater.highlightedIndex = (spreadRepeater.highlightedIndex + 1) % ApplicationManager.count;
77+ spreadRepeater.highlightedIndex = (spreadRepeater.highlightedIndex + 1) % topLevelSurfaceList.count;
77− var newContentX = ((spreadFlickable.contentWidth) / (ApplicationManager.count + 1)) * Math.max(0, Math.min(ApplicationManager.count - 5, spreadRepeater.highlightedIndex - 3));
78+ var newContentX = ((spreadFlickable.contentWidth) / (topLevelSurfaceList.count + 1)) * Math.max(0, Math.min(topLevelSurfaceList.count - 5, spreadRepeater.highlightedIndex - 3));
78 if (spreadFlickable.contentX < newContentX || spreadRepeater.highlightedIndex == 0) {
79 if (spreadFlickable.contentX < newContentX || spreadRepeater.highlightedIndex == 0) {
79 spreadFlickable.snapTo(newContentX)
80 spreadFlickable.snapTo(newContentX)
80 }
81 }
@@ -85,10 +86,10 @@ FocusScope {
85 return; // AutoRepeat is not allowed to wrap around
86 return; // AutoRepeat is not allowed to wrap around
86 }
87 }
87
88
88− var newIndex = spreadRepeater.highlightedIndex - 1 >= 0 ? spreadRepeater.highlightedIndex - 1 : ApplicationManager.count - 1;
89+ var newIndex = spreadRepeater.highlightedIndex - 1 >= 0 ? spreadRepeater.highlightedIndex - 1 : topLevelSurfaceList.count - 1;
89 spreadRepeater.highlightedIndex = newIndex;
90 spreadRepeater.highlightedIndex = newIndex;
90− var newContentX = ((spreadFlickable.contentWidth) / (ApplicationManager.count + 1)) * Math.max(0, Math.min(ApplicationManager.count - 5, spreadRepeater.highlightedIndex - 1));
91+ var newContentX = ((spreadFlickable.contentWidth) / (topLevelSurfaceList.count + 1)) * Math.max(0, Math.min(topLevelSurfaceList.count - 5, spreadRepeater.highlightedIndex - 1));
91− if (spreadFlickable.contentX > newContentX || newIndex == ApplicationManager.count -1) {
92+ if (spreadFlickable.contentX > newContentX || newIndex == topLevelSurfaceList.count -1) {
92 spreadFlickable.snapTo(newContentX)
93 spreadFlickable.snapTo(newContentX)
93 }
94 }
94 }
95 }
@@ -98,8 +99,8 @@ FocusScope {
98 if (spreadContainer.visible) {
99 if (spreadContainer.visible) {
99 root.playFocusAnimation(spreadRepeater.highlightedIndex)
100 root.playFocusAnimation(spreadRepeater.highlightedIndex)
100 }
101 }
101− var application = ApplicationManager.get(spreadRepeater.highlightedIndex);
102+ var surface = topLevelSurfaceList.surfaceAt(spreadRepeater.highlightedIndex);
102− ApplicationManager.requestFocusApplication(application.appId);
103+ surface.requestFocus();
103 }
104 }
104 }
105 }
105
106
@@ -144,7 +145,7 @@ FocusScope {
144 Repeater {
145 Repeater {
145 id: spreadRepeater
146 id: spreadRepeater
146 objectName: "spreadRepeater"
147 objectName: "spreadRepeater"
147− model: ApplicationManager
148+ model: topLevelSurfaceList
148
149
149 property int highlightedIndex: -1
150 property int highlightedIndex: -1
150 property int closingIndex: -1
151 property int closingIndex: -1
@@ -182,7 +183,8 @@ FocusScope {
182 objectName: "clippedSpreadDelegate"
183 objectName: "clippedSpreadDelegate"
183 anchors.left: parent.left
184 anchors.left: parent.left
184 anchors.top: parent.top
185 anchors.top: parent.top
185− application: ApplicationManager.get(index)
186+ application: model.application
187+ surface: model.surface
186 width: spreadMaths.spreadHeight
188 width: spreadMaths.spreadHeight
187 height: spreadMaths.spreadHeight
189 height: spreadMaths.spreadHeight
188
190
@@ -216,7 +218,7 @@ FocusScope {
216 id: spreadMaths
218 id: spreadMaths
217 flickable: spreadFlickable
219 flickable: spreadFlickable
218 itemIndex: index
220 itemIndex: index
219− totalItems: Math.max(6, ApplicationManager.count)
221+ totalItems: Math.max(6, topLevelSurfaceList.count)
220 sceneHeight: root.height
222 sceneHeight: root.height
221 itemHeight: spreadDelegate.height
223 itemHeight: spreadDelegate.height
222 }
224 }
@@ -310,7 +312,7 @@ FocusScope {
310 Layout.preferredWidth: height * 8 / 7.6
312 Layout.preferredWidth: height * 8 / 7.6
311 image: Image {
313 image: Image {
312 anchors.fill: parent
314 anchors.fill: parent
313− source: model.icon
315+ source: model.application.icon
314 Rectangle {
316 Rectangle {
315 anchors.fill: parent
317 anchors.fill: parent
316 color: "black"
318 color: "black"
@@ -324,7 +326,9 @@ FocusScope {
324 Label {
326 Label {
325 Layout.fillWidth: true
327 Layout.fillWidth: true
326 Layout.preferredHeight: units.gu(6)
328 Layout.preferredHeight: units.gu(6)
327− text: model.name
329+ property string surfaceName: model.surface ? model.surface.name : ""
330+ property string applicationName: model.application ? model.application.name : ""
331+ text: surfaceName ? surfaceName : applicationName
328 wrapMode: Text.WordWrap
332 wrapMode: Text.WordWrap
329 elide: Text.ElideRight
333 elide: Text.ElideRight
330 maximumLineCount: 2
334 maximumLineCount: 2
@@ -354,7 +358,7 @@ FocusScope {
354 anchors.margins: -units.gu(2)
358 anchors.margins: -units.gu(2)
355 onClicked: {
359 onClicked: {
356 spreadRepeater.closingIndex = index;
360 spreadRepeater.closingIndex = index;
357− ApplicationManager.stopApplication(model.appId)
361+ model.surface.close();
358 }
362 }
359 }
363 }
360 }
364 }
@@ -421,7 +425,7 @@ FocusScope {
421 objectName: "spreadFlickable"
425 objectName: "spreadFlickable"
422 anchors.fill: parent
426 anchors.fill: parent
423 property int minContentWidth: 6 * Math.min(height / 4, width / 5)
427 property int minContentWidth: 6 * Math.min(height / 4, width / 5)
424− contentWidth: Math.max(6, ApplicationManager.count) * Math.min(height / 4, width / 5)
428+ contentWidth: Math.max(6, topLevelSurfaceList.count) * Math.min(height / 4, width / 5)
425 enabled: false
429 enabled: false
426
430
427 function snapTo(contentX) {
431 function snapTo(contentX) {
@@ -523,7 +527,7 @@ FocusScope {
523 Label {
527 Label {
524 id: currentSelectedLabel
528 id: currentSelectedLabel
525 anchors { bottom: parent.bottom; bottomMargin: root.height * 0.625; horizontalCenter: parent.horizontalCenter }
529 anchors { bottom: parent.bottom; bottomMargin: root.height * 0.625; horizontalCenter: parent.horizontalCenter }
526− text: spreadRepeater.highlightedIndex >= 0 ? ApplicationManager.get(spreadRepeater.highlightedIndex).name : ""
530+ text: spreadRepeater.highlightedIndex >= 0 ? topLevelSurfaceList.surfaceAt(spreadRepeater.highlightedIndex).name : ""
527 visible: false
531 visible: false
528 fontSize: "large"
532 fontSize: "large"
529 }
533 }
@@ -545,7 +549,7 @@ FocusScope {
545 from: "*"
549 from: "*"
546 to: "altTab"
550 to: "altTab"
547 SequentialAnimation {
551 SequentialAnimation {
548− PropertyAction { target: spreadRepeater; property: "highlightedIndex"; value: Math.min(ApplicationManager.count - 1, 1) }
552+ PropertyAction { target: spreadRepeater; property: "highlightedIndex"; value: Math.min(topLevelSurfaceList.count - 1, 1) }
549 PauseAnimation { duration: spreadContainer.animateIn ? 0 : 140 }
553 PauseAnimation { duration: spreadContainer.animateIn ? 0 : 140 }
550 PropertyAction { target: workspaceSelector; property: "visible" }
554 PropertyAction { target: workspaceSelector; property: "visible" }
551 PropertyAction { target: spreadContainer; property: "visible" }
555 PropertyAction { target: spreadContainer; property: "visible" }
qml/Stages/DesktopSpreadDelegate.qml+4−3
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2014-2015 Canonical, Ltd.
2+ * Copyright (C) 2014-2016 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -25,12 +25,13 @@ Item {
25
25
26 property alias window: applicationWindow
26 property alias window: applicationWindow
27 property alias application: applicationWindow.application
27 property alias application: applicationWindow.application
28+ property alias surface: applicationWindow.surface
28
29
29 property bool highlightShown: false
30 property bool highlightShown: false
30 property real shadowOpacity: 1
31 property real shadowOpacity: 1
31
32
32− property int windowWidth: application && application.session && application.session.lastSurface ? application.session.lastSurface.size.width : 0
33+ property int windowWidth: surface ? surface.size.width : 0
33− property int windowHeight: application && application.session && application.session.lastSurface ? application.session.lastSurface.size.height : 0
34+ property int windowHeight: surface ? surface.size.height : 0
34
35
35 state: "normal"
36 state: "normal"
36 states: [
37 states: [
qml/Stages/DesktopStage.qml+160−100
@@ -36,47 +36,21 @@ AbstractStage {
36 }
36 }
37 }
37 }
38
38
39− mainApp: ApplicationManager.focusedApplicationId
39+ // Used by TutorialRight
40− ? ApplicationManager.findApplication(ApplicationManager.focusedApplicationId)
40+ property bool spreadShown: spread.state == "altTab"
41− : null
42
41
43− mainAppWindow: priv.focusedAppDelegate ? priv.focusedAppDelegate.appWindow : null
42+ mainApp: priv.focusedAppDelegate ? priv.focusedAppDelegate.application : null
44
43
45 // application windows never rotate independently
44 // application windows never rotate independently
46 mainAppWindowOrientationAngle: shellOrientationAngle
45 mainAppWindowOrientationAngle: shellOrientationAngle
47
46
48 orientationChangesEnabled: true
47 orientationChangesEnabled: true
49
48
50− Connections {
51− target: ApplicationManager
52− onApplicationAdded: {
53− if (spread.state == "altTab") {
54− spread.state = "";
55− }
56−
57− ApplicationManager.focusApplication(appId);
58− }
59−
60− onApplicationRemoved: {
61− priv.focusNext();
62− }
63−
64− onFocusRequested: {
65− var appIndex = priv.indexOf(appId);
66− var appDelegate = appRepeater.itemAt(appIndex);
67− appDelegate.restore();
68−
69− if (spread.state == "altTab") {
70− spread.cancel();
71− }
72− }
73− }
74−
75 GlobalShortcut {
49 GlobalShortcut {
76 id: closeWindowShortcut
50 id: closeWindowShortcut
77 shortcut: Qt.AltModifier|Qt.Key_F4
51 shortcut: Qt.AltModifier|Qt.Key_F4
78− onTriggered: ApplicationManager.stopApplication(priv.focusedAppId)
52+ onTriggered: { if (priv.focusedAppDelegate) { priv.focusedAppDelegate.close(); } }
79− active: priv.focusedAppId !== ""
53+ active: priv.focusedAppDelegate !== null
80 }
54 }
81
55
82 GlobalShortcut {
56 GlobalShortcut {
@@ -120,40 +94,40 @@ AbstractStage {
120 active: priv.focusedAppDelegate !== null
94 active: priv.focusedAppDelegate !== null
121 }
95 }
122
96
97+ Connections {
98+ target: root.topLevelSurfaceList
99+ onCountChanged: {
100+ if (spread.state == "altTab") {
101+ spread.cancel();
102+ }
103+ }
104+ }
105+
123 QtObject {
106 QtObject {
124 id: priv
107 id: priv
108+ objectName: "DesktopStagePrivate"
125
109
126− readonly property string focusedAppId: ApplicationManager.focusedApplicationId
127− readonly property var focusedAppDelegate: {
110+ property var focusedAppDelegate: null
128− var index = indexOf(focusedAppId);
111+ onFocusedAppDelegateChanged: {
129− return index >= 0 && index < appRepeater.count ? appRepeater.itemAt(index) : null
112+ if (spread.state == "altTab") {
113+ spread.state = "";
114+ }
130 }
115 }
131− onFocusedAppDelegateChanged: updateForegroundMaximizedApp();
132
116
133− property int foregroundMaximizedAppZ: -1
134− property int foregroundMaximizedAppIndex: -1 // for stuff like drop shadow and focusing maximized app by clicking panel
117+ property var foregroundMaximizedAppDelegate: null // for stuff like drop shadow and focusing maximized app by clicking panel
135
118
136 function updateForegroundMaximizedApp() {
119 function updateForegroundMaximizedApp() {
137− var tmp = -1;
120+ var found = false;
138− var tmpAppId = -1;
139− for (var i = appRepeater.count - 1; i >= 0; i--) {
121+ for (var i = 0; i < appRepeater.count && !found; i++) {
140 var item = appRepeater.itemAt(i);
122 var item = appRepeater.itemAt(i);
141 if (item && item.visuallyMaximized) {
123 if (item && item.visuallyMaximized) {
142− tmpAppId = i;
124+ foregroundMaximizedAppDelegate = item;
143− tmp = Math.max(tmp, item.normalZ);
125+ found = true;
144 }
126 }
145 }
127 }
146− foregroundMaximizedAppZ = tmp;
128+ if (!found) {
147− foregroundMaximizedAppIndex = tmpAppId;
129+ foregroundMaximizedAppDelegate = null;
148− }
149−
150− function indexOf(appId) {
151− for (var i = 0; i < ApplicationManager.count; i++) {
152− if (ApplicationManager.get(i).appId == appId) {
153− return i;
154− }
155 }
130 }
156− return -1;
157 }
131 }
158
132
159 function minimizeAllWindows() {
133 function minimizeAllWindows() {
@@ -163,16 +137,13 @@ AbstractStage {
163 appDelegate.minimize();
137 appDelegate.minimize();
164 }
138 }
165 }
139 }
166−
167− ApplicationManager.unfocusCurrentApplication(); // no app should have focus at this point
168 }
140 }
169
141
170 function focusNext() {
142 function focusNext() {
171− ApplicationManager.unfocusCurrentApplication();
172 for (var i = 0; i < appRepeater.count; i++) {
143 for (var i = 0; i < appRepeater.count; i++) {
173 var appDelegate = appRepeater.itemAt(i);
144 var appDelegate = appRepeater.itemAt(i);
174 if (appDelegate && !appDelegate.minimized) {
145 if (appDelegate && !appDelegate.minimized) {
175− ApplicationManager.focusApplication(appDelegate.appId);
146+ appDelegate.focus = true;
176 return;
147 return;
177 }
148 }
178 }
149 }
@@ -181,15 +152,14 @@ AbstractStage {
181
152
182 Connections {
153 Connections {
183 target: PanelState
154 target: PanelState
184− onClose: {
155+ onClose: { if (priv.focusedAppDelegate) { priv.focusedAppDelegate.close(); } }
185− ApplicationManager.stopApplication(ApplicationManager.focusedApplicationId)
156+ onMinimize: { if (priv.focusedAppDelegate) { priv.focusedAppDelegate.minimize(); } }
157+ onMaximize: { if (priv.focusedAppDelegate) { priv.focusedAppDelegate.restoreFromMaximized(); } }
158+ onFocusMaximizedApp: {
159+ if (priv.foregroundMaximizedAppDelegate) {
160+ priv.foregroundMaximizedAppDelegate.focus = true;
161+ }
186 }
162 }
187− onMinimize: priv.focusedAppDelegate && priv.focusedAppDelegate.minimize();
188− onMaximize: priv.focusedAppDelegate // don't restore minimized apps when double clicking the panel
189− && priv.focusedAppDelegate.restoreFromMaximized();
190− onFocusMaximizedApp: if (priv.foregroundMaximizedAppIndex != -1) {
191− ApplicationManager.focusApplication(appRepeater.itemAt(priv.foregroundMaximizedAppIndex).appId);
192− }
193 }
163 }
194
164
195 Binding {
165 Binding {
@@ -217,7 +187,7 @@ AbstractStage {
217 Binding {
187 Binding {
218 target: PanelState
188 target: PanelState
219 property: "dropShadow"
189 property: "dropShadow"
220− value: priv.focusedAppDelegate && !priv.focusedAppDelegate.maximized && priv.foregroundMaximizedAppIndex !== -1
190+ value: priv.focusedAppDelegate && !priv.focusedAppDelegate.maximized && priv.foregroundMaximizedAppDelegate !== null
221 }
191 }
222
192
223 Component.onDestruction: {
193 Component.onDestruction: {
@@ -226,6 +196,27 @@ AbstractStage {
226 PanelState.dropShadow = false;
196 PanelState.dropShadow = false;
227 }
197 }
228
198
199+ Instantiator {
200+ model: root.applicationManager
201+ delegate: Binding {
202+ target: model.application
203+ property: "requestedState"
204+
205+ // TODO: figure out some lifecycle policy, like suspending minimized apps
206+ // if running on a tablet or something.
207+ // TODO: If the device has a dozen suspended apps because it was running
208+ // in staged mode, when it switches to Windowed mode it will suddenly
209+ // resume all those apps at once. We might want to avoid that.
210+ value: ApplicationInfoInterface.RequestedRunning // Always running for now
211+ }
212+ }
213+
214+ Binding {
215+ target: MirFocusController
216+ property: "focusedSurface"
217+ value: priv.focusedAppDelegate ? priv.focusedAppDelegate.surface : null
218+ when: !appRepeater.startingUp && root.parent
219+ }
229
220
230 FocusScope {
221 FocusScope {
231 id: appContainer
222 id: appContainer
@@ -241,20 +232,25 @@ AbstractStage {
241 fillMode: Image.PreserveAspectCrop
232 fillMode: Image.PreserveAspectCrop
242 }
233 }
243
234
244− Repeater {
235+ TopLevelSurfaceRepeater {
245 id: appRepeater
236 id: appRepeater
246− model: ApplicationManager
237+ model: topLevelSurfaceList
247 objectName: "appRepeater"
238 objectName: "appRepeater"
248
239
249 delegate: FocusScope {
240 delegate: FocusScope {
250 id: appDelegate
241 id: appDelegate
251− objectName: "appDelegate_" + appId
242+ objectName: "appDelegate_" + model.id
252 // z might be overriden in some cases by effects, but we need z ordering
243 // z might be overriden in some cases by effects, but we need z ordering
253 // to calculate occlusion detection
244 // to calculate occlusion detection
254− property int normalZ: ApplicationManager.count - index
245+ property int normalZ: topLevelSurfaceList.count - index
246+ onNormalZChanged: {
247+ if (visuallyMaximized) {
248+ priv.updateForegroundMaximizedApp();
249+ }
250+ }
255 z: normalZ
251 z: normalZ
256 y: PanelState.panelHeight
252 y: PanelState.panelHeight
257− focus: appId === priv.focusedAppId
253+
258 width: decoratedWindow.width
254 width: decoratedWindow.width
259 height: decoratedWindow.height
255 height: decoratedWindow.height
260 property int requestedWidth: -1
256 property int requestedWidth: -1
@@ -279,38 +275,99 @@ AbstractStage {
279 readonly property alias minimized: appDelegatePrivate.minimized
275 readonly property alias minimized: appDelegatePrivate.minimized
280 readonly property alias fullscreen: decoratedWindow.fullscreen
276 readonly property alias fullscreen: decoratedWindow.fullscreen
281
277
282− readonly property string appId: model.appId
278+ readonly property var application: model.application
283 property bool animationsEnabled: true
279 property bool animationsEnabled: true
284 property alias title: decoratedWindow.title
280 property alias title: decoratedWindow.title
285− readonly property string appName: model.name
281+ readonly property string appName: model.application ? model.application.name : ""
286 property bool visuallyMaximized: false
282 property bool visuallyMaximized: false
287 property bool visuallyMinimized: false
283 property bool visuallyMinimized: false
288
284
289− readonly property alias appWindow: decoratedWindow.window
285+ readonly property var surface: model.surface
286+
287+ function claimFocus() {
288+ if (spread.state == "altTab") {
289+ spread.cancel();
290+ }
291+ appDelegate.restore();
292+ }
293+ Connections {
294+ target: model.surface
295+ onFocusRequested: claimFocus();
296+ }
297+ Connections {
298+ target: model.application
299+ onFocusRequested: {
300+ if (!model.surface) {
301+ // when an app has no surfaces, we assume there's only one entry representing it:
302+ // this delegate.
303+ claimFocus();
304+ } else {
305+ // if the application has surfaces, focus request should be at surface-level.
306+ }
307+ }
308+ }
290
309
291 onFocusChanged: {
310 onFocusChanged: {
292− if (focus && ApplicationManager.focusedApplicationId !== appId) {
311+ if (appRepeater.startingUp)
293− ApplicationManager.focusApplication(appId);
312+ return;
313+
314+ if (focus) {
315+ priv.focusedAppDelegate = appDelegate;
316+
317+ // If we're orphan (!parent) it means this stage is no longer the current one
318+ // and will be deleted shortly. So we should no longer have a say over the model
319+ if (root.parent) {
320+ topLevelSurfaceList.raiseId(model.id);
321+ }
322+ } else if (!focus && priv.focusedAppDelegate === appDelegate) {
323+ priv.focusedAppDelegate = null;
324+ // FIXME: No idea why the Binding{} doens't update when focusedAppDelegate turns null
325+ MirFocusController.focusedSurface = null;
326+ }
327+ }
328+ Component.onCompleted: {
329+ // NB: We're differentiating if this delegate was created in response to a new entry in the model
330+ // or if the Repeater is just populating itself with delegates to match the model it received.
331+ if (!appRepeater.startingUp) {
332+ // a top level window is always the focused one when it first appears, unfocusing
333+ // any preexisting one
334+ focus = true;
335+ }
336+ }
337+ Component.onDestruction: {
338+ if (!root.parent) {
339+ // This stage is about to be destroyed. Don't mess up with the model at this point
340+ return;
341+ }
342+
343+ if (visuallyMaximized) {
344+ priv.updateForegroundMaximizedApp();
345+ }
346+
347+ if (focus) {
348+ // focus some other window
349+ for (var i = 0; i < appRepeater.count; i++) {
350+ var appDelegate = appRepeater.itemAt(i);
351+ if (appDelegate && !appDelegate.minimized && i != index) {
352+ appDelegate.focus = true;
353+ return;
354+ }
355+ }
294 }
356 }
295 }
357 }
296
358
297 onVisuallyMaximizedChanged: priv.updateForegroundMaximizedApp()
359 onVisuallyMaximizedChanged: priv.updateForegroundMaximizedApp()
298
360
299− visible: !visuallyMinimized &&
361+ visible: (
300− !greeter.fullyShown &&
362+ !visuallyMinimized
301− (priv.foregroundMaximizedAppZ === -1 || priv.foregroundMaximizedAppZ <= z) ||
363+ && !greeter.fullyShown
302− decoratedWindow.fullscreen ||
364+ && (priv.foregroundMaximizedAppDelegate === null || priv.foregroundMaximizedAppDelegate.normalZ <= z)
303− (spread.state == "altTab" && index === spread.highlightedIndex)
365+ )
366+ || decoratedWindow.fullscreen
367+ || (spread.state == "altTab" && index === spread.highlightedIndex)
304
368
305− Binding {
369+ function close() {
306− target: ApplicationManager.get(index)
370+ model.surface.close();
307− property: "requestedState"
308− // TODO: figure out some lifecycle policy, like suspending minimized apps
309− // if running on a tablet or something.
310− // TODO: If the device has a dozen suspended apps because it was running
311− // in staged mode, when it switches to Windowed mode it will suddenly
312− // resume all those apps at once. We might want to avoid that.
313− value: ApplicationInfoInterface.RequestedRunning // Always running for now
314 }
371 }
315
372
316 function maximize(animated) {
373 function maximize(animated) {
@@ -352,7 +409,8 @@ AbstractStage {
352 maximizeLeft();
409 maximizeLeft();
353 else if (maximizedRight)
410 else if (maximizedRight)
354 maximizeRight();
411 maximizeRight();
355− ApplicationManager.focusApplication(appId);
412+
413+ focus = true;
356 }
414 }
357
415
358 function playFocusAnimation() {
416 function playFocusAnimation() {
@@ -370,7 +428,7 @@ AbstractStage {
370
428
371 states: [
429 states: [
372 State {
430 State {
373− name: "fullscreen"; when: decoratedWindow.fullscreen
431+ name: "fullscreen"; when: decoratedWindow.fullscreen && !appDelegate.minimized
374 PropertyChanges {
432 PropertyChanges {
375 target: appDelegate;
433 target: appDelegate;
376 x: 0;
434 x: 0;
@@ -463,6 +521,7 @@ AbstractStage {
463 ScriptAction {
521 ScriptAction {
464 script: {
522 script: {
465 if (appDelegate.minimized) {
523 if (appDelegate.minimized) {
524+ appDelegate.focus = false;
466 priv.focusNext();
525 priv.focusNext();
467 }
526 }
468 }
527 }
@@ -487,7 +546,7 @@ AbstractStage {
487 id: previewBinding
546 id: previewBinding
488 target: appDelegate
547 target: appDelegate
489 property: "z"
548 property: "z"
490− value: ApplicationManager.count + 1
549+ value: topLevelSurfaceList.count + 1
491 when: index == spread.highlightedIndex && spread.ready
550 when: index == spread.highlightedIndex && spread.ready
492 }
551 }
493
552
@@ -498,12 +557,12 @@ AbstractStage {
498 minWidth: units.gu(10)
557 minWidth: units.gu(10)
499 minHeight: units.gu(10)
558 minHeight: units.gu(10)
500 borderThickness: units.gu(2)
559 borderThickness: units.gu(2)
501− windowId: model.appId // FIXME: Change this to point to windowId once we have such a thing
560+ windowId: model.application.appId // FIXME: Change this to point to windowId once we have such a thing
502 screenWidth: appContainer.width
561 screenWidth: appContainer.width
503 screenHeight: appContainer.height
562 screenHeight: appContainer.height
504 leftMargin: root.leftMargin
563 leftMargin: root.leftMargin
505
564
506− onPressed: { ApplicationManager.focusApplication(model.appId) }
565+ onPressed: { appDelegate.focus = true; }
507
566
508 Component.onCompleted: {
567 Component.onCompleted: {
509 loadWindowState();
568 loadWindowState();
@@ -530,24 +589,25 @@ AbstractStage {
530 objectName: "decoratedWindow"
589 objectName: "decoratedWindow"
531 anchors.left: appDelegate.left
590 anchors.left: appDelegate.left
532 anchors.top: appDelegate.top
591 anchors.top: appDelegate.top
533− application: ApplicationManager.get(index)
592+ application: model.application
534− active: ApplicationManager.focusedApplicationId === model.appId
593+ surface: model.surface
594+ active: appDelegate.focus
535 focus: true
595 focus: true
536
596
537 requestedWidth: appDelegate.requestedWidth
597 requestedWidth: appDelegate.requestedWidth
538 requestedHeight: appDelegate.requestedHeight
598 requestedHeight: appDelegate.requestedHeight
539
599
540− onClose: ApplicationManager.stopApplication(model.appId)
600+ onClose: { appDelegate.close(); }
541 onMaximize: appDelegate.maximized || appDelegate.maximizedLeft || appDelegate.maximizedRight
601 onMaximize: appDelegate.maximized || appDelegate.maximizedLeft || appDelegate.maximizedRight
542 ? appDelegate.restoreFromMaximized() : appDelegate.maximize()
602 ? appDelegate.restoreFromMaximized() : appDelegate.maximize()
543 onMinimize: appDelegate.minimize()
603 onMinimize: appDelegate.minimize()
544− onDecorationPressed: { ApplicationManager.focusApplication(model.appId) }
604+ onDecorationPressed: { appDelegate.focus = true; }
545 }
605 }
546
606
547 WindowedFullscreenPolicy {
607 WindowedFullscreenPolicy {
548 id: fullscreenPolicy
608 id: fullscreenPolicy
549 active: true
609 active: true
550− application: decoratedWindow.application
610+ surface: model.surface
551 }
611 }
552 }
612 }
553 }
613 }
qml/Stages/PhoneStage.qml+152−91
@@ -26,7 +26,6 @@ import "../Components"
26AbstractStage {
26AbstractStage {
27 id: root
27 id: root
28
28
29− property QtObject applicationManager: ApplicationManager
30 property bool focusFirstApp: true // If false, focused app will appear on right edge like other apps
29 property bool focusFirstApp: true // If false, focused app will appear on right edge like other apps
31 property bool altTabEnabled: true
30 property bool altTabEnabled: true
32 property real startScale: 1.1
31 property real startScale: 1.1
@@ -107,11 +106,7 @@ AbstractStage {
107 }
106 }
108 }
107 }
109
108
110− mainApp: applicationManager.focusedApplicationId
109+ mainApp: priv.focusedAppDelegate ? priv.focusedAppDelegate.application : null
111− ? applicationManager.findApplication(applicationManager.focusedApplicationId)
112− : null
113−
114− mainAppWindow: priv.focusedAppDelegate ? priv.focusedAppDelegate.appWindow : null
115
110
116 orientationChangesEnabled: priv.focusedAppOrientationChangesEnabled
111 orientationChangesEnabled: priv.focusedAppOrientationChangesEnabled
117 && !priv.focusedAppDelegateIsDislocated
112 && !priv.focusedAppDelegateIsDislocated
@@ -160,72 +155,27 @@ AbstractStage {
160 onTriggered: { root.beingResized = false; }
155 onTriggered: { root.beingResized = false; }
161 }
156 }
162
157
163− Connections {
164− target: applicationManager
165−
166− onFocusRequested: {
167− if (spreadView.phase > 0) {
168− spreadView.snapTo(priv.indexOf(appId));
169− } else {
170− applicationManager.focusApplication(appId);
171− }
172− }
173−
174− onApplicationAdded: {
175− if (spreadView.phase == 2) {
176− spreadView.snapTo(applicationManager.count - 1);
177− } else {
178− spreadView.phase = 0;
179− spreadView.contentX = -spreadView.shift;
180− applicationManager.focusApplication(appId);
181− }
182− }
183−
184− onApplicationRemoved: {
185− // Unless we're closing the app ourselves in the spread,
186− // lets make sure the spread doesn't mess up by the changing app list.
187− if (spreadView.closingIndex == -1) {
188− spreadView.phase = 0;
189− spreadView.contentX = -spreadView.shift;
190− focusTopMostApp();
191− }
192− }
193−
194− function focusTopMostApp() {
195− if (applicationManager.count > 0) {
196− var topmostApp = applicationManager.get(0);
197− applicationManager.focusApplication(topmostApp.appId);
198− }
199− }
200− }
201−
202 QtObject {
158 QtObject {
203 id: priv
159 id: priv
204
160
205− property string focusedAppId: root.applicationManager.focusedApplicationId
206 property bool focusedAppOrientationChangesEnabled: false
161 property bool focusedAppOrientationChangesEnabled: false
207 readonly property int firstSpreadIndex: root.focusFirstApp ? 1 : 0
162 readonly property int firstSpreadIndex: root.focusFirstApp ? 1 : 0
208− readonly property var focusedAppDelegate: {
163+ property var focusedAppDelegate
209− var index = indexOf(focusedAppId);
164+ // NB! This may differ from applicationManager.focusedApplicationId if focusedAppDelegate
210− return index >= 0 && index < spreadRepeater.count ? spreadRepeater.itemAt(index) : null
165+ // contains a screenshot instead of a surface.
211− }
166+ property string focusedAppId: focusedAppDelegate ? focusedAppDelegate.application.appId : ""
212
167
213 property real oldInverseProgress: 0
168 property real oldInverseProgress: 0
214 property bool animateX: false
169 property bool animateX: false
215 property int highlightIndex: 0
170 property int highlightIndex: 0
216
171
217− onFocusedAppDelegateChanged: {
172+ property bool focusedAppDelegateIsDislocated: focusedAppDelegate ?
218− if (focusedAppDelegate) {
219− focusedAppDelegate.focus = true;
220− }
221− }
222−
223− property bool focusedAppDelegateIsDislocated: focusedAppDelegate &&
224 (focusedAppDelegate.x !== 0 || focusedAppDelegate.xBehavior.running)
173 (focusedAppDelegate.x !== 0 || focusedAppDelegate.xBehavior.running)
174+ : false
225
175
226 function indexOf(appId) {
176 function indexOf(appId) {
227− for (var i = 0; i < root.applicationManager.count; i++) {
177+ for (var i = 0; i < spreadRepeater.count; i++) {
228− if (root.applicationManager.get(i).appId == appId) {
178+ if (spreadRepeater.itemAt(i).application.appId == appId) {
229 return i;
179 return i;
230 }
180 }
231 }
181 }
@@ -239,8 +189,8 @@ AbstractStage {
239 function reset() {
189 function reset() {
240 // The app that's about to go to foreground has to be focused, otherwise
190 // The app that's about to go to foreground has to be focused, otherwise
241 // it would leave us in an inconsistent state.
191 // it would leave us in an inconsistent state.
242− if (!root.applicationManager.focusedApplicationId && root.applicationManager.count > 0) {
192+ if (!MirFocusController.focusedSurface && spreadRepeater.count > 0) {
243− root.applicationManager.focusApplication(root.applicationManager.get(0).appId);
193+ spreadRepeater.itemAt(0).focus = true;
244 }
194 }
245
195
246 spreadView.selectedIndex = -1;
196 spreadView.selectedIndex = -1;
@@ -260,6 +210,36 @@ AbstractStage {
260 }
210 }
261 }
211 }
262
212
213+ Instantiator {
214+ model: root.applicationManager
215+ delegate: QtObject {
216+ property var stateBinding: Binding {
217+ readonly property bool isDash: model.application ? model.application.appId == "unity8-dash" : false
218+ target: model.application
219+ property: "requestedState"
220+ value: (isDash && root.keepDashRunning)
221+ || (!root.suspended && model.application && priv.focusedAppId === model.application.appId)
222+ ? ApplicationInfoInterface.RequestedRunning
223+ : ApplicationInfoInterface.RequestedSuspended
224+ }
225+
226+ property var lifecycleBinding: Binding {
227+ target: model.application
228+ property: "exemptFromLifecycle"
229+ value: model.application
230+ ? (!model.application.isTouchApp || isExemptFromLifecycle(model.application.appId))
231+ : false
232+ }
233+ }
234+ }
235+
236+ Binding {
237+ target: MirFocusController
238+ property: "focusedSurface"
239+ value: priv.focusedAppDelegate ? priv.focusedAppDelegate.surface : null
240+ when: root.parent && !spreadRepeater.startingUp
241+ }
242+
263 Flickable {
243 Flickable {
264 id: spreadView
244 id: spreadView
265 objectName: "spreadView"
245 objectName: "spreadView"
@@ -310,13 +290,38 @@ AbstractStage {
310 // rely on having Flickable.contentX keeping an out-of-bounds value when it's set programatically
290 // rely on having Flickable.contentX keeping an out-of-bounds value when it's set programatically
311 // (as opposed to having contentX reaching an out-of-bounds value through dragging, which will trigger
291 // (as opposed to having contentX reaching an out-of-bounds value through dragging, which will trigger
312 // the Flickable.boundsBehavior upon release).
292 // the Flickable.boundsBehavior upon release).
313− onContentXChanged: { forceItToRemainStillIfBeingResized(); }
293+ onContentXChanged: {
294+ if (!undoContentXReset()) {
295+ forceItToRemainStillIfBeingResized();
296+ }
297+ }
314 onShiftChanged: { forceItToRemainStillIfBeingResized(); }
298 onShiftChanged: { forceItToRemainStillIfBeingResized(); }
315 function forceItToRemainStillIfBeingResized() {
299 function forceItToRemainStillIfBeingResized() {
316 if (root.beingResized && contentX != -spreadView.shift) {
300 if (root.beingResized && contentX != -spreadView.shift) {
317 contentX = -spreadView.shift;
301 contentX = -spreadView.shift;
318 }
302 }
319 }
303 }
304+ function undoContentXReset() {
305+ if (contentWidth <= 0) {
306+ contentWidthOnLastContentXChange = contentWidth;
307+ lastContentX = contentX;
308+ return false;
309+ }
310+
311+ if (contentWidth !== contentWidthOnLastContentXChange
312+ && lastContentX === -shift && contentX === 0) {
313+ // Flickable is resetting contentX because contentWidth has changed. Undo it.
314+ contentX = -shift;
315+ return true;
316+ }
317+
318+ contentWidthOnLastContentXChange = contentWidth;
319+ lastContentX = contentX;
320+ return false;
321+ }
322+ property real contentWidthOnLastContentXChange: -1
323+ property real lastContentX: 0
324+ // </FIXME-contentX>
320
325
321 Behavior on contentX {
326 Behavior on contentX {
322 enabled: root.altTabPressed
327 enabled: root.altTabPressed
@@ -379,7 +384,7 @@ AbstractStage {
379 snapAnimation.start();
384 snapAnimation.start();
380 return;
385 return;
381 }
386 }
382− if (root.applicationManager.count <= index) {
387+ if (topLevelSurfaceList.count <= index) {
383 // In case we're trying to snap to some non existing app, lets snap back to the first one
388 // In case we're trying to snap to some non existing app, lets snap back to the first one
384 index = 0;
389 index = 0;
385 }
390 }
@@ -416,7 +421,8 @@ AbstractStage {
416 ScriptAction {
421 ScriptAction {
417 script: {
422 script: {
418 if (spreadView.selectedIndex >= 0) {
423 if (spreadView.selectedIndex >= 0) {
419− root.applicationManager.focusApplication(root.applicationManager.get(spreadView.selectedIndex).appId);
424+ var delegate = spreadRepeater.itemAt(spreadView.selectedIndex)
425+ delegate.focus = true;
420
426
421 spreadView.selectedIndex = -1;
427 spreadView.selectedIndex = -1;
422 spreadView.phase = 0;
428 spreadView.phase = 0;
@@ -431,7 +437,7 @@ AbstractStage {
431 // This width controls how much the spread can be flicked left/right. It's composed of:
437 // This width controls how much the spread can be flicked left/right. It's composed of:
432 // tileDistance * app count (with a minimum of 3 apps, in order to also allow moving 1 and 2 apps a bit)
438 // tileDistance * app count (with a minimum of 3 apps, in order to also allow moving 1 and 2 apps a bit)
433 // + some constant value (still scales with the screen width) which looks good and somewhat fills the screen
439 // + some constant value (still scales with the screen width) which looks good and somewhat fills the screen
434− width: Math.max(3, root.applicationManager.count) * spreadView.tileDistance + (spreadView.width - spreadView.tileDistance) * 1.5
440+ width: Math.max(3, topLevelSurfaceList.count) * spreadView.tileDistance + (spreadView.width - spreadView.tileDistance) * 1.5
435 height: parent.height
441 height: parent.height
436 Behavior on width {
442 Behavior on width {
437 enabled: spreadView.closingIndex >= 0
443 enabled: spreadView.closingIndex >= 0
@@ -451,13 +457,30 @@ AbstractStage {
451 }
457 }
452 }
458 }
453
459
454− Repeater {
460+ TopLevelSurfaceRepeater {
455 id: spreadRepeater
461 id: spreadRepeater
456 objectName: "spreadRepeater"
462 objectName: "spreadRepeater"
457− model: root.applicationManager
463+ model: topLevelSurfaceList
464+
465+ onItemRemoved: {
466+ // Unless we're closing the app ourselves in the spread,
467+ // lets make sure the spread doesn't mess up by the changing app list.
468+ if (spreadView.closingIndex == -1) {
469+ spreadView.phase = 0;
470+ spreadView.contentX = -spreadView.shift;
471+ focusTopMostApp();
472+ }
473+ }
474+ function focusTopMostApp() {
475+ if (spreadRepeater.count > 0) {
476+ var topmostDelegate = spreadRepeater.itemAt(0);
477+ topmostDelegate.focus = true;
478+ }
479+ }
480+
458 delegate: TransformedSpreadDelegate {
481 delegate: TransformedSpreadDelegate {
459 id: appDelegate
482 id: appDelegate
460− objectName: "appDelegate" + index
483+ objectName: "spreadDelegate_" + model.id
461 startAngle: 45
484 startAngle: 45
462 endAngle: 5
485 endAngle: 5
463 startScale: root.startScale
486 startScale: root.startScale
@@ -469,28 +492,61 @@ AbstractStage {
469 selected: spreadView.selectedIndex == index
492 selected: spreadView.selectedIndex == index
470 otherSelected: spreadView.selectedIndex >= 0 && !selected
493 otherSelected: spreadView.selectedIndex >= 0 && !selected
471 interactive: !spreadView.interactive && spreadView.phase === 0
494 interactive: !spreadView.interactive && spreadView.phase === 0
472− && priv.fullyShowingFocusedApp && root.interactive && isFocused
495+ && priv.fullyShowingFocusedApp && root.interactive && focus
473 swipeToCloseEnabled: spreadView.interactive && root.interactive && !snapAnimation.running
496 swipeToCloseEnabled: spreadView.interactive && root.interactive && !snapAnimation.running
474 maximizedAppTopMargin: root.maximizedAppTopMargin
497 maximizedAppTopMargin: root.maximizedAppTopMargin
475 dropShadow: spreadView.active || priv.focusedAppDelegateIsDislocated
498 dropShadow: spreadView.active || priv.focusedAppDelegateIsDislocated
476 focusFirstApp: root.focusFirstApp
499 focusFirstApp: root.focusFirstApp
477 highlightShown: root.altTabPressed && index === priv.highlightIndex
500 highlightShown: root.altTabPressed && index === priv.highlightIndex
478
501
479− readonly property bool isDash: model.appId == "unity8-dash"
502+ readonly property bool isDash: model.application.appId == "unity8-dash"
480−
503+
481− Binding {
504+ Component.onCompleted: {
482− target: appDelegate.application
505+ // NB: We're differentiating if this delegate was created in response to a new entry in the model
483− property: "exemptFromLifecycle"
506+ // or if the Repeater is just populating itself with delegates to match the model it received.
484− value: !model.isTouchApp || isExemptFromLifecycle(model.appId)
507+ if (!spreadRepeater.startingUp) {
508+ // a top level window is always the focused one when it first appears, unfocusing
509+ // any preexisting one
510+ //
511+ // new items are appended and must be manually brought to front.
512+ // that's how it *must* be in order to get the animation for new
513+ // surfaces working
514+ claimFocus();
515+ }
485 }
516 }
486
517
487− Binding {
518+ onFocusChanged: {
488− target: appDelegate.application
519+ if (focus && !spreadRepeater.startingUp) {
489− property: "requestedState"
520+ priv.focusedAppDelegate = appDelegate;
490− value: (isDash && root.keepDashRunning)
521+ // If we're orphan (!parent) it means this stage is no longer the current one
491− || (!root.suspended && appDelegate.focus)
522+ // and will be deleted shortly. So we should no longer have a say over the model
492− ? ApplicationInfoInterface.RequestedRunning
523+ if (root.parent) {
493− : ApplicationInfoInterface.RequestedSuspended
524+ topLevelSurfaceList.raiseId(model.id);
525+ }
526+ }
527+ }
528+ function claimFocus() {
529+ if (spreadView.phase > 0) {
530+ spreadView.snapTo(model.index);
531+ } else {
532+ appDelegate.focus = true;
533+ }
534+ }
535+ Connections {
536+ target: model.surface
537+ onFocusRequested: claimFocus()
538+ }
539+ Connections {
540+ target: model.application
541+ onFocusRequested: {
542+ if (!model.surface) {
543+ // when an app has no surfaces, we assume there's only one entry representing it:
544+ // this delegate.
545+ claimFocus();
546+ } else {
547+ // if the application has surfaces, focus request should be at surface-level.
548+ }
549+ }
494 }
550 }
495
551
496 z: isDash && !spreadView.active ? -1 : behavioredIndex
552 z: isDash && !spreadView.active ? -1 : behavioredIndex
@@ -511,7 +567,8 @@ AbstractStage {
511 return spreadView.width + spreadIndex * spreadView.tileDistance;
567 return spreadView.width + spreadIndex * spreadView.tileDistance;
512 }
568 }
513
569
514− application: root.applicationManager.get(index)
570+ application: model.application
571+ surface: model.surface
515 closeable: !isDash
572 closeable: !isDash
516
573
517 property real behavioredIndex: index
574 property real behavioredIndex: index
@@ -595,11 +652,7 @@ AbstractStage {
595
652
596 onClicked: {
653 onClicked: {
597 if (root.altTabEnabled && spreadView.phase == 2) {
654 if (root.altTabEnabled && spreadView.phase == 2) {
598− if (root.applicationManager.focusedApplicationId == root.applicationManager.get(index).appId) {
655+ spreadView.snapTo(index);
599− spreadView.snapTo(index);
600− } else {
601− root.applicationManager.requestFocusApplication(root.applicationManager.get(index).appId);
602− }
603 }
656 }
604 }
657 }
605
658
@@ -613,7 +666,15 @@ AbstractStage {
613
666
614 onClosed: {
667 onClosed: {
615 spreadView.closingIndex = index;
668 spreadView.closingIndex = index;
616− root.applicationManager.stopApplication(root.applicationManager.get(index).appId);
669+ if (appDelegate.surface) {
670+ appDelegate.surface.close();
671+ } else if (appDelegate.application) {
672+ root.applicationManager.stopApplication(appDelegate.application.appId);
673+ } else {
674+ // should never happen
675+ console.warn("Can't close topLevelSurfaceList entry as it has neither"
676+ + " a surface nor an application");
677+ }
617 }
678 }
618
679
619 Binding {
680 Binding {
@@ -631,7 +692,7 @@ AbstractStage {
631
692
632 StagedFullscreenPolicy {
693 StagedFullscreenPolicy {
633 id: fullscreenPolicy
694 id: fullscreenPolicy
634− application: appDelegate.application
695+ surface: model.surface
635 }
696 }
636
697
637 Connections {
698 Connections {
@@ -639,7 +700,7 @@ AbstractStage {
639 onStageAboutToBeUnloaded: fullscreenPolicy.active = false
700 onStageAboutToBeUnloaded: fullscreenPolicy.active = false
640 }
701 }
641 }
702 }
642− }
703+ } // Repeater {
643 }
704 }
644 }
705 }
645
706
qml/Stages/PromptSurfaceAnimations.qmlnew file+81
@@ -0,0 +1,81 @@
1+/*
2+ * Copyright 2016 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+*/
16+
17+import QtQuick 2.4
18+import Ubuntu.Components 1.3
19+
20+StateGroup {
21+ id: root
22+ property var container
23+ property var surfaceItem
24+
25+ states: [
26+ State {
27+ name: "blank"
28+ when: !root.surfaceItem.surface
29+ },
30+ State {
31+ name: "ready"
32+ when: root.surfaceItem.surface && root.surfaceItem.live
33+ },
34+ State {
35+ name: "zombie"
36+ when: root.surfaceItem.surface && !root.surfaceItem.live
37+ }
38+ ]
39+ transitions: [
40+ Transition {
41+ from: "*"; to: "zombie"
42+ // Slide downwards until it's out of view, through the bottom of the window
43+ SequentialAnimation {
44+ // clip so we don't go out of parent's bounds during spread
45+ PropertyAction { target: root.container.parent; property: "clip"; value: true }
46+ UbuntuNumberAnimation { target: root.surfaceItem; property: "y"; to: root.container.height
47+ duration: UbuntuAnimation.BriskDuration }
48+ PropertyAction { target: root.surfaceItem; property: "visible"; value: false }
49+ PropertyAction { target: container.parent; property: "clip"; value: false }
50+ ScriptAction { script: {
51+ // Unity.Application can't destroy a zombie MirSurface if it's still being
52+ // referenced by a MirSurfaceItem.
53+ root.surfaceItem.surface = null;
54+ } }
55+ }
56+ },
57+ Transition {
58+ from: "*"; to: "ready"
59+ // Slide upwards into view, from the bottom of the window
60+ SequentialAnimation {
61+ // clip so we don't go out of parent's bounds during spread
62+ PropertyAction { target: root.container.parent; property: "clip"; value: true }
63+ ScriptAction { script: {
64+ root.surfaceItem.y = root.container.height;
65+ root.surfaceItem.visible = true;
66+ } }
67+ UbuntuNumberAnimation {
68+ target: root.surfaceItem; property: "y"; to: 0
69+ duration: UbuntuAnimation.BriskDuration
70+ }
71+ PropertyAction { target: container.parent; property: "clip"; value: false }
72+ }
73+ },
74+ Transition {
75+ from: "*"; to: "blank"
76+ ScriptAction { script: {
77+ root.surfaceItem.visible = false;
78+ } }
79+ }
80+ ]
81+}
qml/Stages/SessionContainer.qmldeleted−180
@@ -1,180 +0,0 @@
1−/*
2− * Copyright 2014-2015 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15−*/
16−
17−import QtQuick 2.4
18−import "Animations"
19−
20−FocusScope {
21− id: root
22− objectName: "sessionContainer"
23− implicitWidth: _surfaceContainer.implicitWidth
24− implicitHeight: _surfaceContainer.implicitHeight
25− property QtObject session
26− readonly property var childSessions: session ? session.childSessions : null
27− readonly property alias surface: _surfaceContainer.surface
28− property alias interactive: _surfaceContainer.interactive
29− property alias surfaceOrientationAngle: _surfaceContainer.surfaceOrientationAngle
30− property alias resizeSurface: _surfaceContainer.resizeSurface
31−
32− property int requestedWidth: -1
33− property int requestedHeight: -1
34−
35− readonly property alias surfaceContainer: _surfaceContainer
36− SurfaceContainer {
37− id: _surfaceContainer
38− requestedWidth: root.requestedWidth
39− requestedHeight: root.requestedHeight
40− surface: session ? session.lastSurface : null
41− }
42−
43− // SurfaceContainer size drives SessionContainer size
44− Binding {
45− target: root; property: "width"; value: _surfaceContainer.width
46− when: root.requestedWidth >= 0
47− }
48− Binding {
49− target: root; property: "height"; value: _surfaceContainer.height
50− when: root.requestedHeight >= 0
51− }
52−
53− // SessionContainer size drives SurfaceContainer size
54− Binding {
55− target: _surfaceContainer; property: "width"; value: root.width
56− when: root.requestedWidth < 0
57− }
58− Binding {
59− target: _surfaceContainer; property: "height"; value: root.height
60− when: root.requestedHeight < 0
61− }
62−
63− Repeater {
64− id: childSessionsRepeater
65− model: root.childSessions
66−
67− delegate: Loader {
68− objectName: "childDelegate" + index
69− anchors.fill: surfaceContainer
70−
71− // Only way to do recursive qml items.
72− source: Qt.resolvedUrl("SessionContainer.qml")
73−
74− z: index
75−
76− // Since a Loader is a FocusScope, propagate its focus to the loaded Item
77− Binding {
78− target: item; when: item
79− property: "focus"; value: focus
80− }
81−
82− Binding {
83− target: item; when: item
84− property: "interactive"; value: index == (childSessionsRepeater.count - 1) && root.interactive
85− }
86−
87− Binding {
88− target: item; when: item
89− property: "session"; value: modelData
90− }
91−
92− Binding {
93− target: item; when: item
94− property: "width"; value: root.width
95− }
96−
97− Binding {
98− target: item; when: item
99− property: "height"; value: root.height
100− }
101− }
102− }
103−
104− states: [
105− State {
106− name: "rootSession"
107− when: root.session && !root.session.parentSession
108− },
109−
110− State {
111− name: "childSession"
112− when: root.session && root.session.parentSession !== null && root.session.live
113− && !root.session.lastSurface
114− },
115−
116− State {
117− name: "childSessionReady"
118− when: root.session && root.session.parentSession !== null && root.session.live
119− && root.session.lastSurface !== null
120− },
121−
122− State {
123− name: "childSessionZombie"
124− when: root.session && root.session.parentSession !== null && !root.session.live
125− }
126− ]
127−
128− transitions: [
129− Transition {
130− to: "childSessionReady"
131− ScriptAction { script: { if (!surfaceContainer.hadSurface) { animateIn(swipeFromBottom); } } }
132− },
133− Transition {
134− to: "childSessionZombie"
135− ScriptAction { script: { animateOut(); } }
136− }
137− ]
138−
139− function animateIn(component) {
140− var animation = component.createObject(root, { "container": root, });
141− animation.start();
142−
143− var tmp = d.animations;
144− tmp.push(animation);
145− d.animations = tmp;
146− }
147−
148− function animateOut() {
149− if (d.animations.length > 0) {
150− var tmp = d.animations;
151− var popped = tmp.pop();
152− popped.completed.connect(function() { root.session.release(); } );
153− popped.end();
154− d.animations = tmp;
155− } else {
156− root.session.release();
157− }
158− }
159−
160− Component {
161− id: swipeFromBottom
162− SwipeFromBottomAnimation {}
163− }
164−
165− QtObject {
166− id: d
167− property var animations: []
168−
169− property var focusedChild: {
170− if (childSessionsRepeater.count == 0) {
171− return _surfaceContainer;
172− } else {
173− return childSessionsRepeater.itemAt(childSessionsRepeater.count - 1);
174− }
175− }
176− onFocusedChildChanged: {
177− focusedChild.focus = true;
178− }
179− }
180−}
qml/Stages/SpreadDelegate.qml+4−4
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright 2014-2015 Canonical Ltd.
2+ * Copyright 2014-2016 Canonical Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU Lesser General Public License as published by
5 * it under the terms of the GNU Lesser General Public License as published by
@@ -37,7 +37,6 @@ FocusScope {
37 | Qt.LandscapeOrientation
37 | Qt.LandscapeOrientation
38 | Qt.InvertedPortraitOrientation
38 | Qt.InvertedPortraitOrientation
39 | Qt.InvertedLandscapeOrientation
39 | Qt.InvertedLandscapeOrientation
40− readonly property alias appWindow: appWindow
41
40
42 // to be set from outside
41 // to be set from outside
43 property bool interactive: true
42 property bool interactive: true
@@ -46,6 +45,7 @@ FocusScope {
46 property alias swipeToCloseEnabled: dragArea.enabled
45 property alias swipeToCloseEnabled: dragArea.enabled
47 property bool closeable
46 property bool closeable
48 property alias application: appWindow.application
47 property alias application: appWindow.application
48+ property alias surface: appWindow.surface
49 property int shellOrientationAngle
49 property int shellOrientationAngle
50 property int shellOrientation
50 property int shellOrientation
51 property QtObject orientations
51 property QtObject orientations
@@ -251,7 +251,7 @@ FocusScope {
251 }
251 }
252 PropertyChanges {
252 PropertyChanges {
253 target: appWindow
253 target: appWindow
254− surfaceOrientationAngle: orientationAngle
254+ surfaceOrientationAngle: appWindowWithShadow.orientationAngle
255 }
255 }
256 },
256 },
257 State {
257 State {
@@ -293,7 +293,7 @@ FocusScope {
293
293
294 ApplicationWindow {
294 ApplicationWindow {
295 id: appWindow
295 id: appWindow
296− objectName: application ? "appWindow_" + application.appId : "appWindow_null"
296+ objectName: "appWindow"
297 focus: true
297 focus: true
298 anchors {
298 anchors {
299 fill: parent
299 fill: parent
qml/Stages/StagedFullscreenPolicy.qml+12−14
@@ -27,31 +27,29 @@ import Unity.Application 0.1
27// Chrome not set and state change to fulscreen -> client window stays "fullscreen"
27// Chrome not set and state change to fulscreen -> client window stays "fullscreen"
28QtObject {
28QtObject {
29 property bool active: true
29 property bool active: true
30− property QtObject application: null
31
30
32− readonly property var lastSurface: application && application.session ?
31+ property var surface: null
33− application.session.lastSurface : null
32+ onSurfaceChanged: {
34− onLastSurfaceChanged: {
33+ if (!active || !surface) return;
35− if (!active || !lastSurface) return;
34+ if (surface.shellChrome === Mir.LowChrome) {
36− if (lastSurface.shellChrome === Mir.LowChrome) {
35+ surface.state = Mir.FullscreenState;
37− lastSurface.state = Mir.FullscreenState;
38 }
36 }
39 }
37 }
40
38
41 property var _connections: Connections {
39 property var _connections: Connections {
42− target: lastSurface
40+ target: surface
43 onShellChromeChanged: {
41 onShellChromeChanged: {
44− if (!active || !lastSurface) return;
42+ if (!active || !surface) return;
45− if (lastSurface.shellChrome === Mir.LowChrome) {
43+ if (surface.shellChrome === Mir.LowChrome) {
46− lastSurface.state = Mir.FullscreenState;
44+ surface.state = Mir.FullscreenState;
47 } else {
45 } else {
48− lastSurface.state = Mir.RestoredState;
46+ surface.state = Mir.RestoredState;
49 }
47 }
50 }
48 }
51 onStateChanged: {
49 onStateChanged: {
52 if (!active) return;
50 if (!active) return;
53− if (lastSurface.state === Mir.RestoredState && lastSurface.shellChrome === Mir.LowChrome) {
51+ if (surface.state === Mir.RestoredState && surface.shellChrome === Mir.LowChrome) {
54− lastSurface.state = Mir.FullscreenState;
52+ surface.state = Mir.FullscreenState;
55 }
53 }
56 }
54 }
57 }
55 }
qml/Stages/SurfaceContainer.qml+97−53
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright 2014-2015 Canonical Ltd.
2+ * Copyright 2014-2016 Canonical Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU Lesser General Public License as published by
5 * it under the terms of the GNU Lesser General Public License as published by
@@ -19,39 +19,27 @@ import Ubuntu.Components 1.3
19import Ubuntu.Gestures 0.1 // For TouchGate
19import Ubuntu.Gestures 0.1 // For TouchGate
20import Utils 0.1 // for InputWatcher
20import Utils 0.1 // for InputWatcher
21import Unity.Application 0.1 // for MirSurfaceItem
21import Unity.Application 0.1 // for MirSurfaceItem
22−import AccountsService 0.1
23
22
24FocusScope {
23FocusScope {
25 id: root
24 id: root
26 objectName: "surfaceContainer"
25 objectName: "surfaceContainer"
27
26
27+ // Must be set from outside
28 property var surface: null
28 property var surface: null
29− property bool hadSurface: false
30− property bool interactive
31− property int surfaceOrientationAngle: 0
32− property string name: surface ? surface.name : ""
33− property bool resizeSurface: true
34
29
30+ // Might be changed from outside
35 property int requestedWidth: -1
31 property int requestedWidth: -1
36 property int requestedHeight: -1
32 property int requestedHeight: -1
37−
33+ property bool interactive
38− property string savedKeymap: AccountsService.keymaps[0] // start with the user default
34+ property int surfaceOrientationAngle: 0
35+ property bool resizeSurface: true
36+ property bool inPromptSession: false
39
37
40 onSurfaceChanged: {
38 onSurfaceChanged: {
41− if (surface) {
39+ // Not a binding because animations might remove the surface from the surfaceItem
42− surfaceItem.surface = surface;
40+ // programatically (in order to signal that a zombie surface is free for deletion),
43− root.hadSurface = false;
41+ // even though root.surface is still !null.
44− switchToKeymap(savedKeymap);
42+ surfaceItem.surface = surface;
45− }
46− }
47−
48− function switchToKeymap(keymap) {
49− var finalKeymap = keymap.split("+");
50− savedKeymap = keymap; // save the keymap in case the surface changes later
51−
52− if (surface) {
53− surface.setKeymap(finalKeymap[0], finalKeymap[1] || "");
54− }
55 }
43 }
56
44
57 InputWatcher {
45 InputWatcher {
@@ -96,11 +84,16 @@ FocusScope {
96 }
84 }
97
85
98 enabled: root.interactive
86 enabled: root.interactive
99− focus: true
100 antialiasing: !root.interactive
87 antialiasing: !root.interactive
101 orientationAngle: root.surfaceOrientationAngle
88 orientationAngle: root.surfaceOrientationAngle
102 }
89 }
103
90
91+ TouchGate {
92+ targetItem: surfaceItem
93+ anchors.fill: root
94+ enabled: surfaceItem.enabled
95+ }
96+
104 // MirSurface size drives SurfaceContainer size
97 // MirSurface size drives SurfaceContainer size
105 Binding {
98 Binding {
106 target: surfaceItem; property: "width"; value: root.surface ? root.surface.size.width : 0
99 target: surfaceItem; property: "width"; value: root.surface ? root.surface.size.width : 0
@@ -129,39 +122,90 @@ FocusScope {
129 when: root.requestedHeight < 0
122 when: root.requestedHeight < 0
130 }
123 }
131
124
125+ Repeater {
126+ id: childSurfacesRepeater
127+ objectName: "childSurfacesRepeater"
128+ model: root.surface ? root.surface.promptSurfaceList : null
132
129
133− TouchGate {
130+ delegate: Loader {
134− objectName: "touchGate-"+name
131+ objectName: "childDelegate" + index
135− targetItem: surfaceItem
132+ anchors.fill: root
136− anchors.fill: root
133+
137− enabled: surfaceItem.enabled
134+ // Only way to do recursive qml items.
135+ source: Qt.resolvedUrl("SurfaceContainer.qml")
136+
137+ z: index
138+
139+ // Since a Loader is a FocusScope, propagate its focus to the loaded Item
140+ Binding {
141+ target: item; when: item
142+ property: "focus"; value: focus
143+ }
144+
145+ Binding {
146+ target: item; when: item
147+ property: "interactive"; value: index == (childSurfacesRepeater.count - 1) && root.interactive
148+ }
149+
150+ Binding {
151+ target: item; when: item
152+ property: "surface"; value: model.surface
153+ }
154+
155+ Binding {
156+ target: item; when: item
157+ property: "width"; value: root.width
158+ }
159+
160+ Binding {
161+ target: item; when: item
162+ property: "height"; value: root.height
163+ }
164+
165+ Binding {
166+ target: item; when: item
167+ property: "inPromptSession"; value: true
168+ }
169+ }
138 }
170 }
139
171
140− states: [
172+ Loader {
141− State {
173+ id: animationsLoader
142− name: "zombie"
174+ objectName: "animationsLoader"
143− when: surfaceItem.surface && !surfaceItem.live
175+ active: root.surface
176+ source: {
177+ if (root.inPromptSession) {
178+ return "PromptSurfaceAnimations.qml";
179+ } else {
180+ // Let ApplicationWindow do the animations
181+ return "";
182+ }
183+ }
184+ Binding {
185+ target: animationsLoader.item
186+ when: animationsLoader.item
187+ property: "surfaceItem"
188+ value: surfaceItem
189+ }
190+ Binding {
191+ target: animationsLoader.item
192+ when: animationsLoader.item
193+ property: "container"
194+ value: root
144 }
195 }
145− ]
196+ }
146− transitions: [
197+
147− Transition {
198+ QtObject {
148− from: ""; to: "zombie"
199+ id: d
149− SequentialAnimation {
200+ property var focusedChild: {
150− UbuntuNumberAnimation { target: surfaceItem; property: "opacity"; to: 0.0
201+ if (childSurfacesRepeater.count == 0) {
151− duration: UbuntuAnimation.BriskDuration }
202+ return surfaceItem;
152− PropertyAction { target: surfaceItem; property: "visible"; value: false }
203+ } else {
153− ScriptAction { script: {
204+ return childSurfacesRepeater.itemAt(childSurfacesRepeater.count - 1);
154− surfaceItem.surface = null;
155− root.hadSurface = true;
156− } }
157 }
205 }
158− },
159− Transition {
160− from: "zombie"; to: ""
161− ScriptAction { script: {
162− surfaceItem.opacity = 1.0;
163− surfaceItem.visible = true;
164− } }
165 }
206 }
166− ]
207+ onFocusedChildChanged: {
208+ focusedChild.focus = true;
209+ }
210+ }
167}
211}
qml/Stages/TabletStage.qml+300−239
@@ -27,19 +27,24 @@ AbstractStage {
27 objectName: "stages"
27 objectName: "stages"
28 anchors.fill: parent
28 anchors.fill: parent
29
29
30+ // <tutorial-hacks> The Tutorial looks into our implementation details
30 property alias sideStageVisible: spreadView.sideStageVisible
31 property alias sideStageVisible: spreadView.sideStageVisible
31 property alias sideStageWidth: spreadView.sideStageWidth
32 property alias sideStageWidth: spreadView.sideStageWidth
33+ // The stage the currently focused surface is in
34+ property int stageFocusedSurface: priv.focusedAppDelegate ? priv.focusedAppDelegate.stage : ApplicationInfoInterface.MainStage
35+ // </tutorial-hacks>
32
36
33 // Functions to be called from outside
37 // Functions to be called from outside
34 function updateFocusedAppOrientation() {
38 function updateFocusedAppOrientation() {
35− var mainStageAppIndex = priv.indexOf(priv.mainStageAppId);
39+ var mainStageIndex = root.topLevelSurfaceList.indexForId(priv.mainStageItemId);
36− if (mainStageAppIndex >= 0 && mainStageAppIndex < spreadRepeater.count) {
40+
37− spreadRepeater.itemAt(mainStageAppIndex).matchShellOrientation();
41+ if (priv.mainStageItemId && mainStageIndex >= 0 && mainStageIndex < spreadRepeater.count) {
42+ spreadRepeater.itemAt(mainStageIndex).matchShellOrientation();
38 }
43 }
39
44
40 for (var i = 0; i < spreadRepeater.count; ++i) {
45 for (var i = 0; i < spreadRepeater.count; ++i) {
41
46
42− if (i === mainStageAppIndex) {
47+ if (i === mainStageIndex) {
43 continue;
48 continue;
44 }
49 }
45
50
@@ -60,16 +65,14 @@ AbstractStage {
60 }
65 }
61 }
66 }
62 function updateFocusedAppOrientationAnimated() {
67 function updateFocusedAppOrientationAnimated() {
63− var mainStageAppIndex = priv.indexOf(priv.mainStageAppId);
68+ var mainStageIndex = root.topLevelSurfaceList.indexForId(priv.mainStageItemId);
64− if (mainStageAppIndex >= 0 && mainStageAppIndex < spreadRepeater.count) {
69+ if (priv.mainStageItemId && mainStageIndex >= 0 && mainStageIndex < spreadRepeater.count) {
65− spreadRepeater.itemAt(mainStageAppIndex).animateToShellOrientation();
70+ spreadRepeater.itemAt(mainStageIndex).animateToShellOrientation();
66 }
71 }
67
72
68− if (priv.sideStageAppId) {
73+ var sideStageIndex = root.topLevelSurfaceList.indexForId(priv.sideStageItemId);
69− var sideStageAppIndex = priv.indexOf(priv.sideStageAppId);
74+ if (sideStageIndex >= 0 && sideStageIndex < spreadRepeater.count) {
70− if (sideStageAppIndex >= 0 && sideStageAppIndex < spreadRepeater.count) {
75+ spreadRepeater.itemAt(sideStageIndex).matchShellOrientation();
71− spreadRepeater.itemAt(sideStageAppIndex).matchShellOrientation();
72− }
73 }
76 }
74 }
77 }
75
78
@@ -79,15 +82,22 @@ AbstractStage {
79 }
82 }
80 }
83 }
81
84
82− mainAppWindow: priv.focusedAppDelegate ? priv.focusedAppDelegate.appWindow : null
83−
84 orientationChangesEnabled: priv.mainAppOrientationChangesEnabled
85 orientationChangesEnabled: priv.mainAppOrientationChangesEnabled
85
86
87+ mainApp: {
88+ if (priv.mainStageItemId > 0) {
89+ var index = root.topLevelSurfaceList.indexForId(priv.mainStageItemId);
90+ return root.topLevelSurfaceList.applicationAt(index);
91+ } else {
92+ return null;
93+ }
94+ }
95+
86 supportedOrientations: {
96 supportedOrientations: {
87 if (mainApp) {
97 if (mainApp) {
88 var orientations = mainApp.supportedOrientations;
98 var orientations = mainApp.supportedOrientations;
89 orientations |= Qt.LandscapeOrientation | Qt.InvertedLandscapeOrientation;
99 orientations |= Qt.LandscapeOrientation | Qt.InvertedLandscapeOrientation;
90− if (priv.sideStageAppId && !spreadView.surfaceDragging) {
100+ if (priv.sideStageItemId && !spreadView.surfaceDragging) {
91 // If we have a sidestage app, support Portrait orientation
101 // If we have a sidestage app, support Portrait orientation
92 // so that it will switch the sidestage app to mainstage on rotate
102 // so that it will switch the sidestage app to mainstage on rotate
93 orientations |= Qt.PortraitOrientation|Qt.InvertedPortraitOrientation;
103 orientations |= Qt.PortraitOrientation|Qt.InvertedPortraitOrientation;
@@ -118,7 +128,7 @@ AbstractStage {
118 if (inverseProgress == 0 && priv.oldInverseProgress > 0) {
128 if (inverseProgress == 0 && priv.oldInverseProgress > 0) {
119 // left edge drag released. Minimum distance is given by design.
129 // left edge drag released. Minimum distance is given by design.
120 if (priv.oldInverseProgress > units.gu(22)) {
130 if (priv.oldInverseProgress > units.gu(22)) {
121− ApplicationManager.requestFocusApplication("unity8-dash");
131+ root.applicationManager.requestFocusApplication("unity8-dash");
122 }
132 }
123 }
133 }
124 priv.oldInverseProgress = inverseProgress;
134 priv.oldInverseProgress = inverseProgress;
@@ -156,17 +166,51 @@ AbstractStage {
156 }
166 }
157 }
167 }
158
168
169+ Connections {
170+ target: root.topLevelSurfaceList
171+ onListChanged: priv.updateMainAndSideStageIndexes()
172+ }
173+
159 QtObject {
174 QtObject {
160 id: priv
175 id: priv
161 objectName: "stagesPriv"
176 objectName: "stagesPriv"
162
177
163− property string focusedAppId: ApplicationManager.focusedApplicationId
178+ function updateMainAndSideStageIndexes() {
164− readonly property var focusedAppDelegate: {
179+ var choseMainStage = false;
165− var index = indexOf(focusedAppId);
180+ var choseSideStage = false;
166− return index >= 0 && index < spreadRepeater.count ? spreadRepeater.itemAt(index) : null
181+
182+ if (!root.topLevelSurfaceList)
183+ return;
184+
185+ for (var i = 0; i < spreadRepeater.count && (!choseMainStage || !choseSideStage); ++i) {
186+ var spreadDelegate = spreadRepeater.itemAt(i);
187+ if (sideStage.shown && spreadDelegate.stage == ApplicationInfoInterface.SideStage
188+ && !choseSideStage) {
189+ priv.sideStageDelegate = spreadDelegate
190+ priv.sideStageItemId = root.topLevelSurfaceList.idAt(i);
191+ priv.sideStageAppId = root.topLevelSurfaceList.applicationAt(i).appId;
192+ choseSideStage = true;
193+ } else if (!choseMainStage && spreadDelegate.stage == ApplicationInfoInterface.MainStage) {
194+ priv.mainStageDelegate = spreadDelegate;
195+ priv.mainStageItemId = root.topLevelSurfaceList.idAt(i);
196+ priv.mainStageAppId = root.topLevelSurfaceList.applicationAt(i).appId;
197+ choseMainStage = true;
198+ }
199+ }
200+ if (!choseMainStage) {
201+ priv.mainStageDelegate = null;
202+ priv.mainStageItemId = 0;
203+ priv.mainStageAppId = "";
204+ }
205+ if (!choseSideStage) {
206+ priv.sideStageDelegate = null;
207+ priv.sideStageItemId = 0;
208+ priv.sideStageAppId = "";
209+ }
167 }
210 }
168
211
169− property string oldFocusedAppId: ""
212+ property var focusedAppDelegate: null
213+
170 property bool mainAppOrientationChangesEnabled: false
214 property bool mainAppOrientationChangesEnabled: false
171
215
172 property real landscapeHeight: root.orientations.native_ == Qt.LandscapeOrientation ?
216 property real landscapeHeight: root.orientations.native_ == Qt.LandscapeOrientation ?
@@ -175,36 +219,21 @@ AbstractStage {
175 property bool shellIsLandscape: root.shellOrientation === Qt.LandscapeOrientation
219 property bool shellIsLandscape: root.shellOrientation === Qt.LandscapeOrientation
176 || root.shellOrientation === Qt.InvertedLandscapeOrientation
220 || root.shellOrientation === Qt.InvertedLandscapeOrientation
177
221
178− property string mainStageAppId
222+ property var mainStageDelegate: null
179− property string sideStageAppId
223+ property var sideStageDelegate: null
224+
225+ property int mainStageItemId: 0
226+ property int sideStageItemId: 0
180
227
181− // For convenience, keep properties of the first two apps in the model
228+ property string mainStageAppId: ""
182− property string appId0
229+ property string sideStageAppId: ""
183− property string appId1
184
230
185 property int oldInverseProgress: 0
231 property int oldInverseProgress: 0
186
232
187 property int highlightIndex: 0
233 property int highlightIndex: 0
188
234
189− onFocusedAppIdChanged: updateStageApps()
190−
191− onFocusedAppDelegateChanged: {
192− if (focusedAppDelegate) {
193− focusedAppDelegate.focus = true;
194− }
195− }
196−
197 property bool focusedAppDelegateIsDislocated: focusedAppDelegate &&
235 property bool focusedAppDelegateIsDislocated: focusedAppDelegate &&
198 (focusedAppDelegate.dragOffset !== 0 || focusedAppDelegate.xTranslateAnimating)
236 (focusedAppDelegate.dragOffset !== 0 || focusedAppDelegate.xTranslateAnimating)
199− function indexOf(appId) {
200− for (var i = 0; i < ApplicationManager.count; i++) {
201− if (ApplicationManager.get(i).appId == appId) {
202− return i;
203− }
204− }
205− return -1;
206− }
207−
208 function evaluateOneWayFlick(gesturePoints) {
237 function evaluateOneWayFlick(gesturePoints) {
209 // Need to have at least 3 points to recognize it as a flick
238 // Need to have at least 3 points to recognize it as a flick
210 if (gesturePoints.length < 3) {
239 if (gesturePoints.length < 3) {
@@ -233,88 +262,45 @@ AbstractStage {
233 spreadView.contentX = highlightIndex * spreadView.contentWidth / (spreadRepeater.count + 2)
262 spreadView.contentX = highlightIndex * spreadView.contentWidth / (spreadRepeater.count + 2)
234 }
263 }
235
264
236− function getTopApp(stage) {
237− for (var i = 0; i < ApplicationManager.count; i++) {
238− var app = ApplicationManager.get(i)
239− if (app.stage === stage) {
240− return app;
241− }
242− }
243− return null;
244− }
245−
246− function setAppStage(appId, stage, save) {
247− var app = ApplicationManager.findApplication(appId);
248− if (app) {
249− app.stage = stage;
250− if (save) {
251− WindowStateStorage.saveStage(appId, stage);
252− }
253− }
254− }
255−
256− function updateStageApps() {
257− var app = priv.getTopApp(ApplicationInfoInterface.MainStage);
258− priv.mainStageAppId = app ? app.appId : ""
259− root.mainApp = app;
260−
261− if (sideStage.shown) {
262− app = priv.getTopApp(ApplicationInfoInterface.SideStage);
263− priv.sideStageAppId = app ? app.appId : ""
264− } else {
265− priv.sideStageAppId = "";
266− }
267−
268− appId0 = ApplicationManager.count >= 1 ? ApplicationManager.get(0).appId : "";
269− appId1 = ApplicationManager.count > 1 ? ApplicationManager.get(1).appId : "";
270− }
271−
272 readonly property bool sideStageEnabled: root.shellOrientation == Qt.LandscapeOrientation ||
265 readonly property bool sideStageEnabled: root.shellOrientation == Qt.LandscapeOrientation ||
273 root.shellOrientation == Qt.InvertedLandscapeOrientation
266 root.shellOrientation == Qt.InvertedLandscapeOrientation
274− Component.onCompleted: updateStageApps();
275 }
267 }
276
268
277− Connections {
269+ Instantiator {
278− target: ApplicationManager
270+ model: root.applicationManager
279− onFocusRequested: {
271+ delegate: QtObject {
280− if (spreadView.interactive) {
272+ property var stateBinding: Binding {
281− spreadView.snapTo(priv.indexOf(appId));
273+ readonly property bool isDash: model.application ? model.application.appId == "unity8-dash" : false
282− } else {
274+ target: model.application
283− ApplicationManager.focusApplication(appId);
275+ property: "requestedState"
276+
277+ // NB: the first application clause is just to ensure we never get warnings for trying to access
278+ // members of a null variable.
279+ value: model.application &&
280+ (
281+ (isDash && root.keepDashRunning)
282+ || (!root.suspended && (model.application.appId === priv.mainStageAppId
283+ || model.application.appId === priv.sideStageAppId))
284+ )
285+ ? ApplicationInfoInterface.RequestedRunning
286+ : ApplicationInfoInterface.RequestedSuspended
284 }
287 }
285− }
286
288
287− onApplicationAdded: {
289+ property var lifecycleBinding: Binding {
288− if (spreadView.phase == 2) {
290+ target: model.application
289− spreadView.snapTo(ApplicationManager.count - 1);
291+ property: "exemptFromLifecycle"
290− } else {
292+ value: model.application
291− spreadView.phase = 0;
293+ ? (!model.application.isTouchApp || isExemptFromLifecycle(model.application.appId))
292− spreadView.contentX = -spreadView.shift;
294+ : false
293− ApplicationManager.focusApplication(appId);
294 }
295 }
295 }
296 }
297+ }
296
298
297− onApplicationRemoved: {
299+ Binding {
298− if (priv.mainStageAppId == appId) {
300+ target: MirFocusController
299− ApplicationManager.focusApplication("unity8-dash")
301+ property: "focusedSurface"
300− }
302+ value: priv.focusedAppDelegate ? priv.focusedAppDelegate.surface : null
301− if (priv.sideStageAppId == appId) {
303+ when: root.parent && !spreadRepeater.startingUp
302− var app = priv.getTopApp(ApplicationInfoInterface.SideStage);
303− priv.sideStageAppId = app === null ? "" : app.appId;
304− }
305−
306− if (ApplicationManager.count == 0) {
307− spreadView.phase = 0;
308− spreadView.contentX = -spreadView.shift;
309− } else if (spreadView.closingIndex == -1) {
310− // Unless we're closing the app ourselves in the spread,
311− // lets make sure the spread doesn't mess up by the changing app list.
312− spreadView.phase = 0;
313− spreadView.contentX = -spreadView.shift;
314−
315− ApplicationManager.focusApplication(ApplicationManager.get(0).appId);
316− }
317− }
318 }
304 }
319
305
320 Flickable {
306 Flickable {
@@ -365,16 +351,45 @@ AbstractStage {
365 property int selectedIndex: -1
351 property int selectedIndex: -1
366 property int draggedDelegateCount: 0
352 property int draggedDelegateCount: 0
367 property int closingIndex: -1
353 property int closingIndex: -1
368− property var selectedApplication: selectedIndex !== -1 ? ApplicationManager.get(selectedIndex) : null
354+ property var selectedDelegate: selectedIndex !== -1 ? spreadRepeater.itemAt(selectedIndex) : null
369−
355+
370− // FIXME: Workaround Flickable's not keepping its contentX still when resized
356+ // <FIXME-contentX> Workaround Flickable's behavior of bringing contentX back between valid boundaries
371− onContentXChanged: { forceItToRemainStillIfBeingResized(); }
357+ // when resized. The proper way to fix this is refactoring PhoneStage so that it doesn't
358+ // rely on having Flickable.contentX keeping an out-of-bounds value when it's set programatically
359+ // (as opposed to having contentX reaching an out-of-bounds value through dragging, which will trigger
360+ // the Flickable.boundsBehavior upon release).
361+ onContentXChanged: {
362+ if (!undoContentXReset()) {
363+ forceItToRemainStillIfBeingResized();
364+ }
365+ }
372 onShiftChanged: { forceItToRemainStillIfBeingResized(); }
366 onShiftChanged: { forceItToRemainStillIfBeingResized(); }
373 function forceItToRemainStillIfBeingResized() {
367 function forceItToRemainStillIfBeingResized() {
374− if (root.beingResized && contentX != -shift) {
368+ if (root.beingResized && contentX != -spreadView.shift) {
369+ contentX = -spreadView.shift;
370+ }
371+ }
372+ function undoContentXReset() {
373+ if (contentWidth <= 0) {
374+ contentWidthOnLastContentXChange = contentWidth;
375+ lastContentX = contentX;
376+ return false;
377+ }
378+
379+ if (contentWidth != contentWidthOnLastContentXChange
380+ && lastContentX == -shift && contentX == 0) {
381+ // Flickable is resetting contentX because contentWidth has changed. Undo it.
375 contentX = -shift;
382 contentX = -shift;
383+ return true;
376 }
384 }
385+
386+ contentWidthOnLastContentXChange = contentWidth;
387+ lastContentX = contentX;
388+ return false;
377 }
389 }
390+ property real contentWidthOnLastContentXChange: -1
391+ property real lastContentX: 0
392+ // </FIXME-contentX>
378
393
379 property bool animateX: true
394 property bool animateX: true
380 property bool beingResized: root.beingResized
395 property bool beingResized: root.beingResized
@@ -387,31 +402,33 @@ AbstractStage {
387 }
402 }
388 }
403 }
389
404
390− property real sideStageDragProgress: sideStage.progress
391− property bool sideStageVisible: priv.sideStageAppId
392 property real sideStageWidth: units.gu(40)
405 property real sideStageWidth: units.gu(40)
393
406
394 property bool surfaceDragging: triGestureArea.recognisedDrag
407 property bool surfaceDragging: triGestureArea.recognisedDrag
395
408
396− // In case the ApplicationManager already holds an app when starting up we're missing animations
409+ readonly property bool sideStageVisible: priv.sideStageItemId != 0
410+
411+ // In case applicationManager already holds an app when starting up we're missing animations
397 // Make sure we end up in the same state
412 // Make sure we end up in the same state
398 Component.onCompleted: {
413 Component.onCompleted: {
399 spreadView.contentX = -spreadView.shift
414 spreadView.contentX = -spreadView.shift
400 }
415 }
401
416
402 property int nextInStack: {
417 property int nextInStack: {
418+ var mainStageIndex = priv.mainStageDelegate ? priv.mainStageDelegate.index : -1;
419+ var sideStageIndex = priv.sideStageDelegate ? priv.sideStageDelegate.index : -1;
403 switch (state) {
420 switch (state) {
404 case "main":
421 case "main":
405− if (ApplicationManager.count > 1) {
422+ if (root.topLevelSurfaceList.count > 1) {
406 return 1;
423 return 1;
407 }
424 }
408 return -1;
425 return -1;
409 case "mainAndOverlay":
426 case "mainAndOverlay":
410− if (ApplicationManager.count <= 2) {
427+ if (root.topLevelSurfaceList.count <= 2) {
411 return -1;
428 return -1;
412 }
429 }
413− if (priv.appId0 == priv.mainStageAppId || priv.appId0 == priv.sideStageAppId) {
430+ if (mainStageIndex == 0 || sideStageIndex == 0) {
414− if (priv.appId1 == priv.mainStageAppId || priv.appId1 == priv.sideStageAppId) {
431+ if (mainStageIndex == 1 || sideStageIndex == 1) {
415 return 2;
432 return 2;
416 }
433 }
417 return 1;
434 return 1;
@@ -422,7 +439,7 @@ AbstractStage {
422 }
439 }
423 return -1;
440 return -1;
424 }
441 }
425− property int nextZInStack: indexToZIndex(nextInStack)
442+ property int nextZInStack
426
443
427 states: [
444 states: [
428 State {
445 State {
@@ -442,13 +459,13 @@ AbstractStage {
442 }
459 }
443 ]
460 ]
444 state: {
461 state: {
445− if ((priv.mainStageAppId && !priv.sideStageAppId) || !priv.sideStageEnabled) {
462+ if ((priv.mainStageItemId && !priv.sideStageItemId) || !priv.sideStageEnabled) {
446 return "main";
463 return "main";
447 }
464 }
448− if (!priv.mainStageAppId && priv.sideStageAppId) {
465+ if (!priv.mainStageItemId && priv.sideStageItemId) {
449 return "overlay";
466 return "overlay";
450 }
467 }
451− if (priv.mainStageAppId && priv.sideStageAppId) {
468+ if (priv.mainStageItemId && priv.sideStageItemId) {
452 return "mainAndOverlay";
469 return "mainAndOverlay";
453 }
470 }
454 return "empty";
471 return "empty";
@@ -513,38 +530,41 @@ AbstractStage {
513 // only shuffle when we've got a main and overlay
530 // only shuffle when we've got a main and overlay
514 if (state !== "mainAndOverlay") return index;
531 if (state !== "mainAndOverlay") return index;
515
532
516− var app = ApplicationManager.get(index);
533+ var app = root.topLevelSurfaceList.applicationAt(index);
517 if (!app) {
534 if (!app) {
518 return index;
535 return index;
519 }
536 }
537+ var stage = spreadRepeater.itemAt(index) ? spreadRepeater.itemAt(index).stage : app.stage;
520
538
521 // don't shuffle indexes greater than "actives or next"
539 // don't shuffle indexes greater than "actives or next"
522 if (index > 2) return index;
540 if (index > 2) return index;
523
541
524− if (app.appId === priv.mainStageAppId) {
542+ var mainStageIndex = root.topLevelSurfaceList.indexForId(priv.mainStageItemId);
543+
544+ if (index == mainStageIndex) {
525 // Active main stage always at 0
545 // Active main stage always at 0
526 return 0;
546 return 0;
527 }
547 }
528
548
529 if (spreadView.nextInStack > 0) {
549 if (spreadView.nextInStack > 0) {
530− var nextAppInStack = ApplicationManager.get(spreadView.nextInStack);
550+ var stageOfNextInStack = spreadRepeater.itemAt(spreadView.nextInStack).stage;
531
551
532 if (index === spreadView.nextInStack) {
552 if (index === spreadView.nextInStack) {
533 // this is the next app in stack.
553 // this is the next app in stack.
534
554
535− if (app.stage === ApplicationInfoInterface.SideStage) {
555+ if (stage === ApplicationInfoInterface.SideStage) {
536 // if the next app in stack is a sidestage app, it must order on top of other side stage app
556 // if the next app in stack is a sidestage app, it must order on top of other side stage app
537− return Math.min(2, ApplicationManager.count-1);
557+ return Math.min(2, root.topLevelSurfaceList.count-1);
538 }
558 }
539 return 1;
559 return 1;
540 }
560 }
541− if (nextAppInStack.stage === ApplicationInfoInterface.SideStage) {
561+ if (stageOfNextInStack === ApplicationInfoInterface.SideStage) {
542 // if the next app in stack is a sidestage app, it must order on top of other side stage app
562 // if the next app in stack is a sidestage app, it must order on top of other side stage app
543 return 1;
563 return 1;
544 }
564 }
545− return Math.min(2, ApplicationManager.count-1);
565+ return Math.min(2, root.topLevelSurfaceList.count-1);
546 }
566 }
547− return Math.min(index+1, ApplicationManager.count-1);
567+ return Math.min(index+1, root.topLevelSurfaceList.count-1);
548 }
568 }
549
569
550 SequentialAnimation {
570 SequentialAnimation {
@@ -562,12 +582,13 @@ AbstractStage {
562 script: {
582 script: {
563 if (spreadView.selectedIndex >= 0) {
583 if (spreadView.selectedIndex >= 0) {
564 var newIndex = spreadView.selectedIndex;
584 var newIndex = spreadView.selectedIndex;
565− var application = ApplicationManager.get(newIndex);
585+ var application = root.topLevelSurfaceList.applicationAt(newIndex);
566− if (application.stage === ApplicationInfoInterface.SideStage) {
586+ var spreadDelegate = spreadRepeater.itemAt(newIndex);
587+ if (spreadDelegate.stage === ApplicationInfoInterface.SideStage) {
567 sideStage.showNow();
588 sideStage.showNow();
568 }
589 }
569 spreadView.selectedIndex = -1;
590 spreadView.selectedIndex = -1;
570− ApplicationManager.focusApplication(application.appId);
591+ spreadDelegate.focus = true;
571 spreadView.phase = 0;
592 spreadView.phase = 0;
572 spreadView.contentX = -spreadView.shift;
593 spreadView.contentX = -spreadView.shift;
573 }
594 }
@@ -583,7 +604,7 @@ AbstractStage {
583 MouseArea {
604 MouseArea {
584 id: spreadRow
605 id: spreadRow
585 x: spreadView.contentX
606 x: spreadView.contentX
586− width: spreadView.width + Math.max(spreadView.width, ApplicationManager.count * spreadView.tileDistance)
607+ width: spreadView.width + Math.max(spreadView.width, root.topLevelSurfaceList.count * spreadView.tileDistance)
587 height: root.height
608 height: root.height
588
609
589 onClicked: {
610 onClicked: {
@@ -601,8 +622,8 @@ AbstractStage {
601 enabled: priv.sideStageEnabled
622 enabled: priv.sideStageEnabled
602
623
603 onDropped: {
624 onDropped: {
604− priv.setAppStage(drag.source.appId, ApplicationInfoInterface.MainStage, true);
625+ drop.source.spreadDelegate.stage = ApplicationInfoInterface.MainStage;
605− ApplicationManager.focusApplication(drag.source.appId);
626+ drop.source.spreadDelegate.focus = true;
606 }
627 }
607 keys: "SideStage"
628 keys: "SideStage"
608 }
629 }
@@ -613,12 +634,12 @@ AbstractStage {
613 height: priv.landscapeHeight
634 height: priv.landscapeHeight
614 x: spreadView.width - width
635 x: spreadView.width - width
615 z: {
636 z: {
616− if (!priv.mainStageAppId) return 0;
637+ if (!priv.mainStageItemId) return 0;
617
638
618− if (priv.sideStageAppId && spreadView.nextInStack > 0) {
639+ if (priv.sideStageItemId && spreadView.nextInStack > 0) {
619− var nextAppInStack = ApplicationManager.get(spreadView.nextInStack);
640+ var nextDelegateInStack = spreadRepeater.itemAt(spreadView.nextInStack);
620
641
621− if (nextAppInStack.stage === ApplicationInfoInterface.MainStage) {
642+ if (nextDelegateInStack.stage === ApplicationInfoInterface.MainStage) {
622 // if the next app in stack is a main stage app, put the sidestage on top of it.
643 // if the next app in stack is a main stage app, put the sidestage on top of it.
623 return 2;
644 return 2;
624 }
645 }
@@ -633,12 +654,11 @@ AbstractStage {
633 Behavior on opacity { UbuntuNumberAnimation {} }
654 Behavior on opacity { UbuntuNumberAnimation {} }
634
655
635 onShownChanged: {
656 onShownChanged: {
636− if (!shown && ApplicationManager.focusedApplicationId == priv.sideStageAppId) {
657+ if (!shown && priv.sideStageDelegate && priv.focusedAppDelegate === priv.sideStageDelegate
637− ApplicationManager.requestFocusApplication(priv.mainStageAppId);
658+ && priv.mainStageDelegate) {
638− }
659+ priv.mainStageDelegate.focus = true;
639− priv.updateStageApps();
660+ } else if (shown && priv.sideStageDelegate) {
640− if (shown && priv.sideStageAppId) {
661+ priv.sideStageDelegate.focus = true;
641− ApplicationManager.requestFocusApplication(priv.sideStageAppId);
642 }
662 }
643 }
663 }
644
664
@@ -657,8 +677,8 @@ AbstractStage {
657 }
677 }
658 onDropped: {
678 onDropped: {
659 if (drop.keys == "MainStage") {
679 if (drop.keys == "MainStage") {
660− priv.setAppStage(drop.source.appId, ApplicationInfoInterface.SideStage, true);
680+ drop.source.spreadDelegate.stage = ApplicationInfoInterface.SideStage;
661− ApplicationManager.requestFocusApplication(drop.source.appId);
681+ drop.source.spreadDelegate.focus = true;
662 }
682 }
663 }
683 }
664 drag {
684 drag {
@@ -671,41 +691,102 @@ AbstractStage {
671 }
691 }
672 }
692 }
673
693
674− Repeater {
694+ TopLevelSurfaceRepeater {
675 id: spreadRepeater
695 id: spreadRepeater
676 objectName: "spreadRepeater"
696 objectName: "spreadRepeater"
677− model: ApplicationManager
697+ model: root.topLevelSurfaceList
698+
699+ onItemAdded: {
700+ priv.updateMainAndSideStageIndexes();
701+ if (spreadView.phase == 2) {
702+ spreadView.snapTo(index);
703+ }
704+ }
705+
706+ onItemRemoved: {
707+ priv.updateMainAndSideStageIndexes();
708+ // Unless we're closing the app ourselves in the spread,
709+ // lets make sure the spread doesn't mess up by the changing app list.
710+ if (spreadView.closingIndex == -1) {
711+ spreadView.phase = 0;
712+ spreadView.contentX = -spreadView.shift;
713+ focusTopMostApp();
714+ }
715+ }
716+ function focusTopMostApp() {
717+ if (spreadRepeater.count > 0) {
718+ var topmostDelegate = spreadRepeater.itemAt(0);
719+ topmostDelegate.focus = true;
720+ }
721+ }
678
722
679 delegate: TransformedTabletSpreadDelegate {
723 delegate: TransformedTabletSpreadDelegate {
680 id: spreadTile
724 id: spreadTile
681− objectName: model.appId ? "tabletSpreadDelegate_" + model.appId
725+ objectName: "spreadDelegate_" + model.id
682− : "tabletSpreadDelegate_null";
726+
727+ readonly property int index: model.index
683 width: spreadView.width
728 width: spreadView.width
684 height: spreadView.height
729 height: spreadView.height
685− active: appId == priv.mainStageAppId || appId == priv.sideStageAppId
730+ active: model.id == priv.mainStageItemId || model.id == priv.sideStageItemId
686 zIndex: selected && stage == ApplicationInfoInterface.MainStage ? 0 : spreadView.indexToZIndex(index)
731 zIndex: selected && stage == ApplicationInfoInterface.MainStage ? 0 : spreadView.indexToZIndex(index)
732+ onZIndexChanged: {
733+ if (spreadView.nextInStack == model.index) {
734+ spreadView.nextZInStack = zIndex;
735+ }
736+ }
687 selected: spreadView.selectedIndex == index
737 selected: spreadView.selectedIndex == index
688 otherSelected: spreadView.selectedIndex >= 0 && !selected
738 otherSelected: spreadView.selectedIndex >= 0 && !selected
689− isInSideStage: priv.sideStageAppId === appId
739+ isInSideStage: priv.sideStageItemId == model.id
690 interactive: !spreadView.interactive && spreadView.phase === 0 && root.interactive
740 interactive: !spreadView.interactive && spreadView.phase === 0 && root.interactive
691 swipeToCloseEnabled: spreadView.interactive && !snapAnimation.running
741 swipeToCloseEnabled: spreadView.interactive && !snapAnimation.running
692 maximizedAppTopMargin: root.maximizedAppTopMargin
742 maximizedAppTopMargin: root.maximizedAppTopMargin
693− dragOffset: !isDash && appId == priv.mainStageAppId && root.inverseProgress > 0 && spreadView.phase === 0 ? root.inverseProgress : 0
743+ dragOffset: !isDash && model.id == priv.mainStageItemId && root.inverseProgress > 0
694− application: ApplicationManager.get(index)
744+ && spreadView.phase === 0 ? root.inverseProgress : 0
745+ application: model.application
746+ surface: model.surface
695 closeable: !isDash
747 closeable: !isDash
696 highlightShown: root.altTabPressed && priv.highlightIndex == zIndex
748 highlightShown: root.altTabPressed && priv.highlightIndex == zIndex
697
749
698− readonly property bool wantsMainStage: model.stage == ApplicationInfoInterface.MainStage
750+ readonly property bool wantsMainStage: stage == ApplicationInfoInterface.MainStage
699
751
700− readonly property string appId: model.appId
752+ readonly property bool isDash: model.application.appId == "unity8-dash"
701− readonly property bool isDash: model.appId == "unity8-dash"
753+
754+ onFocusChanged: {
755+ if (focus && !spreadRepeater.startingUp) {
756+ priv.focusedAppDelegate = spreadTile;
757+ root.topLevelSurfaceList.raiseId(model.id);
758+ }
759+ if (focus && priv.sideStageEnabled && stage === ApplicationInfoInterface.SideStage) {
760+ sideStage.show();
761+ }
762+ }
763+ Connections {
764+ target: model.surface
765+ onFocusRequested: spreadTile.focus = true;
766+ }
767+ Connections {
768+ target: model.application
769+ onFocusRequested: {
770+ if (!model.surface) {
771+ // when an app has no surfaces, we assume there's only one entry representing it:
772+ // this delegate.
773+ spreadTile.focus = true;
774+ } else {
775+ // if the application has surfaces, focus request should be at surface-level.
776+ }
777+ }
778+ }
702
779
703− stage: model.stage
704 fullscreen: {
780 fullscreen: {
705− if (mainApp && stage === ApplicationInfoInterface.SideStage) {
781+ if (priv.mainStageDelegate && stage === ApplicationInfoInterface.SideStage) {
706− return mainApp.fullscreen;
782+ return priv.mainStageDelegate.fullscreen;
783+ } else if (surface) {
784+ return surface.state === Mir.FullscreenState;
785+ } else if (application) {
786+ return application.fullscreen;
787+ } else {
788+ return false;
707 }
789 }
708− return application ? application.fullscreen : false;
709 }
790 }
710
791
711 supportedOrientations: {
792 supportedOrientations: {
@@ -726,23 +807,6 @@ AbstractStage {
726 }
807 }
727 }
808 }
728
809
729−
730− Binding {
731− target: spreadTile.application
732− property: "exemptFromLifecycle"
733− value: !model.isTouchApp || isExemptFromLifecycle(model.appId)
734− }
735−
736− Binding {
737− target: spreadTile.application
738− property: "requestedState"
739− value: (isDash && root.keepDashRunning)
740− || (!root.suspended && (model.appId == priv.mainStageAppId
741− || model.appId == priv.sideStageAppId))
742− ? ApplicationInfoInterface.RequestedRunning
743− : ApplicationInfoInterface.RequestedSuspended
744− }
745−
746 // FIXME: A regular binding doesn't update any more after closing an app.
810 // FIXME: A regular binding doesn't update any more after closing an app.
747 // Using a Binding for now.
811 // Using a Binding for now.
748 Binding {
812 Binding {
@@ -762,34 +826,33 @@ AbstractStage {
762 onSideStageEnabledChanged: refreshStage()
826 onSideStageEnabledChanged: refreshStage()
763 }
827 }
764
828
829+ property bool _constructing: true;
830+ onStageChanged: {
831+ if (!_constructing) {
832+ priv.updateMainAndSideStageIndexes();
833+ }
834+ }
835+
765 Component.onCompleted: {
836 Component.onCompleted: {
766− refreshStage()
837+ // a top level window is always the focused one when it first appears, unfocusing
767− stageChanged.connect(priv.updateStageApps);
838+ // any preexisting one
839+ focus = true;
840+ refreshStage();
841+ _constructing = false;
842+ }
843+ Component.onDestruction: {
844+ WindowStateStorage.saveStage(model.application.appId, stage);
768 }
845 }
769
846
770 function refreshStage() {
847 function refreshStage() {
771− var stage = ApplicationInfoInterface.MainStage;
848+ var newStage = ApplicationInfoInterface.MainStage;
772 if (priv.sideStageEnabled) {
849 if (priv.sideStageEnabled) {
773 if (application && application.supportedOrientations & (Qt.PortraitOrientation|Qt.InvertedPortraitOrientation)) {
850 if (application && application.supportedOrientations & (Qt.PortraitOrientation|Qt.InvertedPortraitOrientation)) {
774− stage = WindowStateStorage.getStage(appId);
851+ newStage = WindowStateStorage.getStage(application.appId);
775 }
852 }
776 }
853 }
777
854
778− if (model.stage !== stage) {
855+ stage = newStage;
779− priv.setAppStage(appId, stage, false);
780− }
781− }
782−
783− // This is required because none of the bindings are triggered in some cases:
784− // When an app is closed, it might happen that ApplicationManager.get(nextInStack)
785− // returns a different app even though the nextInStackIndex and all the related
786− // bindings (index, mainStageApp, sideStageApp, etc) don't change. Let's force a
787− // binding update in that case.
788− Connections {
789− target: ApplicationManager
790− onApplicationRemoved: spreadTile.z = Qt.binding(function() {
791− return spreadView.indexToZIndex(index);
792− })
793 }
856 }
794
857
795 progress: {
858 progress: {
@@ -875,13 +938,10 @@ AbstractStage {
875 script: {
938 script: {
876 // rotate immediately.
939 // rotate immediately.
877 spreadTile.matchShellOrientation();
940 spreadTile.matchShellOrientation();
878− if (ApplicationManager.focusedApplicationId === spreadTile.appId &&
941+ if (priv.focusedAppDelegate === spreadTile &&
879 priv.sideStageEnabled && !sideStage.shown) {
942 priv.sideStageEnabled && !sideStage.shown) {
880 // Sidestage was focused, so show the side stage.
943 // Sidestage was focused, so show the side stage.
881 sideStage.show();
944 sideStage.show();
882− // if we've switched to a main app which doesnt support portrait, hide the side stage.
883− } else if (mainApp && (mainApp.supportedOrientations & (Qt.PortraitOrientation|Qt.InvertedPortraitOrientation)) == 0) {
884− sideStage.hideNow();
885 }
945 }
886 }
946 }
887 }
947 }
@@ -892,10 +952,10 @@ AbstractStage {
892 SequentialAnimation {
952 SequentialAnimation {
893 ScriptAction {
953 ScriptAction {
894 script: {
954 script: {
895− if (priv.sideStageAppId === spreadTile.appId &&
955+ if (priv.sideStageDelegate === spreadTile &&
896 mainApp && (mainApp.supportedOrientations & (Qt.PortraitOrientation|Qt.InvertedPortraitOrientation)) == 0) {
956 mainApp && (mainApp.supportedOrientations & (Qt.PortraitOrientation|Qt.InvertedPortraitOrientation)) == 0) {
897 // The mainstage app did not natively support portrait orientation, so focus the sidestage.
957 // The mainstage app did not natively support portrait orientation, so focus the sidestage.
898− ApplicationManager.requestFocusApplication(spreadTile.appId);
958+ spreadTile.focus = true;
899 }
959 }
900 }
960 }
901 }
961 }
@@ -924,28 +984,26 @@ AbstractStage {
924
984
925 onClosed: {
985 onClosed: {
926 spreadView.closingIndex = index;
986 spreadView.closingIndex = index;
927− ApplicationManager.stopApplication(ApplicationManager.get(index).appId);
987+ if (spreadTile.surface) {
928− }
988+ spreadTile.surface.close();
929−
989+ } else if (spreadTile.application) {
930− onFocusChanged: {
990+ root.applicationManager.stopApplication(spreadTile.application.appId);
931− if (focus && ApplicationManager.focusedApplicationId !== appId) {
991+ } else {
932− ApplicationManager.focusApplication(appId);
992+ // should never happen
933− }
993+ console.warn("Can't close topLevelSurfaceList entry as it has neither"
934−
994+ + " a surface nor an application");
935− if (focus && priv.sideStageEnabled && stage === ApplicationInfoInterface.SideStage) {
936− sideStage.show();
937 }
995 }
938 }
996 }
939
997
940 Binding {
998 Binding {
941 target: root
999 target: root
942− when: model.appId == priv.mainStageAppId
1000+ when: model.id == priv.mainStageItemId
943 property: "mainAppWindowOrientationAngle"
1001 property: "mainAppWindowOrientationAngle"
944 value: appWindowOrientationAngle
1002 value: appWindowOrientationAngle
945 }
1003 }
946 Binding {
1004 Binding {
947 target: priv
1005 target: priv
948− when: model.appId == priv.mainStageAppId
1006+ when: model.id == priv.mainStageItemId
949 property: "mainAppOrientationChangesEnabled"
1007 property: "mainAppOrientationChangesEnabled"
950 value: orientationChangesEnabled
1008 value: orientationChangesEnabled
951 }
1009 }
@@ -959,7 +1017,7 @@ AbstractStage {
959
1017
960 StagedFullscreenPolicy {
1018 StagedFullscreenPolicy {
961 id: fullscreenPolicy
1019 id: fullscreenPolicy
962− application: spreadTile.application
1020+ surface: model.surface
963 }
1021 }
964 Connections {
1022 Connections {
965 target: root
1023 target: root
@@ -975,17 +1033,19 @@ AbstractStage {
975 anchors.fill: parent
1033 anchors.fill: parent
976 enabled: priv.sideStageEnabled && !spreadView.active
1034 enabled: priv.sideStageEnabled && !spreadView.active
977 property var dragObject: null
1035 property var dragObject: null
978− property string appId: ""
1036+
1037+ property Item spreadDelegate
1038+
979 dragComponent: dragComponent
1039 dragComponent: dragComponent
980− dragComponentProperties: { "appId": appId }
1040+ dragComponentProperties: { "spreadDelegate": spreadDelegate }
981
1041
982 onPressed: {
1042 onPressed: {
983− function matchDelegate(obj) { return String(obj.objectName).indexOf("tabletSpreadDelegate") >= 0; }
1043+ function matchDelegate(obj) { return String(obj.objectName).indexOf("spreadDelegate") >= 0; }
984
1044
985 var delegateAtCenter = Functions.itemAt(spreadRow, x, y, matchDelegate);
1045 var delegateAtCenter = Functions.itemAt(spreadRow, x, y, matchDelegate);
986 if (!delegateAtCenter) return;
1046 if (!delegateAtCenter) return;
987
1047
988− appId = delegateAtCenter.appId;
1048+ spreadDelegate = delegateAtCenter;
989 }
1049 }
990
1050
991 onClicked: {
1051 onClicked: {
@@ -1005,11 +1065,11 @@ AbstractStage {
1005
1065
1006 Component {
1066 Component {
1007 id: dragComponent
1067 id: dragComponent
1008− SessionContainer {
1068+ SurfaceContainer {
1009− property string appId: ""
1069+ property Item spreadDelegate
1010− property var application: ApplicationManager.findApplication(appId)
1070+
1071+ surface: spreadDelegate ? spreadDelegate.surface : null
1011
1072
1012− session: application ? application.session : null
1013 interactive: false
1073 interactive: false
1014 resizeSurface: false
1074 resizeSurface: false
1015 focus: false
1075 focus: false
@@ -1021,10 +1081,11 @@ AbstractStage {
1021 Drag.hotSpot.y: height/2
1081 Drag.hotSpot.y: height/2
1022 // only accept opposite stage.
1082 // only accept opposite stage.
1023 Drag.keys: {
1083 Drag.keys: {
1024− if (!application) return "Disabled";
1084+ if (!surface) return "Disabled";
1025
1085
1026− if (application.stage === ApplicationInfo.MainStage) {
1086+ if (spreadDelegate.stage === ApplicationInfo.MainStage) {
1027− if (application.supportedOrientations & (Qt.PortraitOrientation|Qt.InvertedPortraitOrientation)) {
1087+ if (spreadDelegate.application.supportedOrientations
1088+ & (Qt.PortraitOrientation|Qt.InvertedPortraitOrientation)) {
1028 return "MainStage";
1089 return "MainStage";
1029 }
1090 }
1030 return "Disabled";
1091 return "Disabled";
qml/Stages/TopLevelSurfaceRepeater.qmlnew file+52
@@ -0,0 +1,52 @@
1+/*
2+ * Copyright (C) 2016 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.4
18+
19+Repeater {
20+ id: root
21+ // FIXME: This is a hack around us not knowing whether the Repeater has finished creating its
22+ // delegates on start up.
23+ // This is a problem when the stage gets a TopLevelSurfaceList already populated with several
24+ // rows.
25+ property bool startingUp: true
26+ onStartingUpChanged: {
27+ if (!startingUp) {
28+ // the top-most surface must be the focused one.
29+ var topmostDelegate = itemAt(0);
30+ topmostDelegate.focus = true;
31+ }
32+ }
33+
34+ onItemAdded: {
35+ if (startingUp) {
36+ checkIfStillStartingUp();
37+ }
38+ }
39+
40+ function checkIfStillStartingUp() {
41+ var i = 0;
42+ var missingDelegate = false;
43+ for (i = 0; i < model.count && !missingDelegate; ++i) {
44+ if (!itemAt(i)) {
45+ missingDelegate = true;
46+ }
47+ }
48+ if (!missingDelegate) {
49+ startingUp = false;
50+ }
51+ }
52+}
qml/Stages/TransformedSpreadDelegate.qml+4−4
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright 2014 Canonical Ltd.
2+ * Copyright 2014,2016 Canonical Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU Lesser General Public License as published by
5 * it under the terms of the GNU Lesser General Public License as published by
@@ -312,7 +312,7 @@ SpreadDelegate {
312 // non-fullscreen window when they're stacked on top of each other on the
312 // non-fullscreen window when they're stacked on top of each other on the
313 // far left of the spread.
313 // far left of the spread.
314 Translate {
314 Translate {
315− y: !fullscreen && appWindowRotation === 180
315+ y: !root.fullscreen && appWindowRotation === 180
316 ? priv.topMarginProgress * maximizedAppTopMargin
316 ? priv.topMarginProgress * maximizedAppTopMargin
317 : 0
317 : 0
318 },
318 },
@@ -326,7 +326,7 @@ SpreadDelegate {
326 switch (appWindowRotation) {
326 switch (appWindowRotation) {
327 case 90:
327 case 90:
328 case 270:
328 case 270:
329− if (fullscreen) {
329+ if (root.fullscreen) {
330 return 1;
330 return 1;
331 } else {
331 } else {
332 return 1 + priv.topMarginProgress * maximizedAppTopMargin / spreadView.width;
332 return 1 + priv.topMarginProgress * maximizedAppTopMargin / spreadView.width;
@@ -340,7 +340,7 @@ SpreadDelegate {
340 yScale: {
340 yScale: {
341 switch (appWindowRotation) {
341 switch (appWindowRotation) {
342 case 0:
342 case 0:
343− if (fullscreen) {
343+ if (root.fullscreen) {
344 return 1 - priv.topMarginProgress * maximizedAppTopMargin / spreadView.height;
344 return 1 - priv.topMarginProgress * maximizedAppTopMargin / spreadView.height;
345 } else {
345 } else {
346 return 1;
346 return 1;
qml/Stages/TransformedTabletSpreadDelegate.qml+29−23
@@ -31,7 +31,6 @@ SpreadDelegate {
31 // Set this to true when this tile a currently active on either the MS or the SS.
31 // Set this to true when this tile a currently active on either the MS or the SS.
32 property bool active: false
32 property bool active: false
33
33
34− property int stage
35 property int zIndex
34 property int zIndex
36 property real progress: 0
35 property real progress: 0
37 property real animatedProgress: 0
36 property real animatedProgress: 0
@@ -48,13 +47,15 @@ SpreadDelegate {
48
47
49 property bool isInSideStage: false
48 property bool isInSideStage: false
50
49
50+ property int stage: ApplicationInfoInterface.MainStage
51+
51 property int dragOffset: 0
52 property int dragOffset: 0
52 readonly property alias xTranslateAnimating: xTranslateAnimation.running
53 readonly property alias xTranslateAnimating: xTranslateAnimation.running
53 readonly property bool offScreen: priv.xTranslate >= 0
54 readonly property bool offScreen: priv.xTranslate >= 0
54
55
55 dropShadow: spreadView.active ||
56 dropShadow: spreadView.active ||
56 (active
57 (active
57− && (stage == ApplicationInfoInterface.MainStage || !priv.shellIsLandscape)
58+ && (root.stage == ApplicationInfoInterface.MainStage || !priv.shellIsLandscape)
58 && priv.xTranslate != 0)
59 && priv.xTranslate != 0)
59
60
60 onSelectedChanged: {
61 onSelectedChanged: {
@@ -90,7 +91,7 @@ SpreadDelegate {
90 id: priv
91 id: priv
91
92
92 // true if this is the next tile on the stack that comes in when dragging from the right
93 // true if this is the next tile on the stack that comes in when dragging from the right
93− property bool nextInStack: spreadView.nextZInStack == zIndex
94+ property bool nextInStack: spreadView.nextInStack == model.index
94 // true if the next tile in the stack is the nextInStack one. This one will be moved a bit to the left
95 // true if the next tile in the stack is the nextInStack one. This one will be moved a bit to the left
95 property bool movedActive: spreadView.nextZInStack == zIndex + 1
96 property bool movedActive: spreadView.nextZInStack == zIndex + 1
96 property real animatedEndDistance: linearAnimation(0, 2, root.endDistance, 0, root.progress)
97 property real animatedEndDistance: linearAnimation(0, 2, root.endDistance, 0, root.progress)
@@ -142,7 +143,7 @@ SpreadDelegate {
142 Behavior on xTranslate {
143 Behavior on xTranslate {
143 enabled: !spreadView.active &&
144 enabled: !spreadView.active &&
144 !snapAnimation.running &&
145 !snapAnimation.running &&
145− model.appId !== "unity8-dash" &&
146+ root.application.appId !== "unity8-dash" &&
146 spreadView.animateX &&
147 spreadView.animateX &&
147 !spreadView.beingResized &&
148 !spreadView.beingResized &&
148 priv.state !== "sideStage"
149 priv.state !== "sideStage"
@@ -156,8 +157,9 @@ SpreadDelegate {
156 var newTranslate = 0;
157 var newTranslate = 0;
157
158
158 // selected app or opposite stage active app.
159 // selected app or opposite stage active app.
159− if (isSelected || (otherSelected && root.active && spreadView.selectedApplication && spreadView.selectedApplication.stage !== stage)) {
160+ if (isSelected || (otherSelected && root.active && spreadView.selectedDelegate
160− if (stage == ApplicationInfoInterface.MainStage) {
161+ && spreadView.selectedDelegate.stage !== root.stage)) {
162+ if (root.stage == ApplicationInfoInterface.MainStage) {
161 return linearAnimation(selectedProgress, negativeProgress, selectedXTranslate, -spreadView.width, root.progress);
163 return linearAnimation(selectedProgress, negativeProgress, selectedXTranslate, -spreadView.width, root.progress);
162 } else {
164 } else {
163 return linearAnimation(selectedProgress, negativeProgress, selectedXTranslate, -spreadView.sideStageWidth, root.progress);
165 return linearAnimation(selectedProgress, negativeProgress, selectedXTranslate, -spreadView.sideStageWidth, root.progress);
@@ -168,8 +170,8 @@ SpreadDelegate {
168
170
169 // The tile should move a bit to the left if a new one comes on top of it, but not for the Side Stage and not
171 // The tile should move a bit to the left if a new one comes on top of it, but not for the Side Stage and not
170 // when we're only dragging the side stage in on top of a main stage app
172 // when we're only dragging the side stage in on top of a main stage app
171− var shouldMoveAway = spreadView.nextInStack >= 0 && priv.movedActive && stage === ApplicationInfoInterface.MainStage &&
173+ var shouldMoveAway = spreadView.nextInStack >= 0 && priv.movedActive && root.stage === ApplicationInfoInterface.MainStage &&
172− ApplicationManager.get(spreadView.nextInStack).stage === ApplicationInfoInterface.MainStage;
174+ topLevelSurfaceList.applicationAt(spreadView.nextInStack).stage === ApplicationInfoInterface.MainStage;
173
175
174 if (active) {
176 if (active) {
175 newTranslate -= root.width
177 newTranslate -= root.width
@@ -178,7 +180,7 @@ SpreadDelegate {
178 newTranslate += linearAnimation(0, spreadView.positionMarker2, 0, -units.gu(4), root.animatedProgress);
180 newTranslate += linearAnimation(0, spreadView.positionMarker2, 0, -units.gu(4), root.animatedProgress);
179 }
181 }
180 newTranslate += root.dragOffset;
182 newTranslate += root.dragOffset;
181− } else if (!spreadView.active && model.appId == "unity8-dash") {
183+ } else if (!spreadView.active && root.application.appId == "unity8-dash") {
182 newTranslate -= root.width;
184 newTranslate -= root.width;
183 }
185 }
184
186
@@ -190,14 +192,14 @@ SpreadDelegate {
190
192
191 if (spreadView.phase == 0) {
193 if (spreadView.phase == 0) {
192 if (nextInStack) {
194 if (nextInStack) {
193− if (stage == ApplicationInfoInterface.MainStage) {
195+ if (root.stage == ApplicationInfoInterface.MainStage) {
194 if (spreadView.sideStageVisible && root.progress > 0) {
196 if (spreadView.sideStageVisible && root.progress > 0) {
195 // Move it so it appears from behind the side stage immediately
197 // Move it so it appears from behind the side stage immediately
196 newTranslate += -spreadView.sideStageWidth;
198 newTranslate += -spreadView.sideStageWidth;
197 }
199 }
198 }
200 }
199
201
200− if (stage == ApplicationInfoInterface.SideStage && !spreadView.sideStageVisible) {
202+ if (root.stage == ApplicationInfoInterface.SideStage && !spreadView.sideStageVisible) {
201 // This is when we only drag the side stage in, without rotation or snapping
203 // This is when we only drag the side stage in, without rotation or snapping
202 newTranslate = linearAnimation(0, spreadView.positionMarker2, 0, -spreadView.sideStageWidth, root.animatedProgress);
204 newTranslate = linearAnimation(0, spreadView.positionMarker2, 0, -spreadView.sideStageWidth, root.animatedProgress);
203 } else {
205 } else {
@@ -210,7 +212,7 @@ SpreadDelegate {
210
212
211 if (spreadView.phase == 1) {
213 if (spreadView.phase == 1) {
212 if (nextInStack) {
214 if (nextInStack) {
213− if (stage == ApplicationInfoInterface.MainStage) {
215+ if (root.stage == ApplicationInfoInterface.MainStage) {
214 var startValue = -spreadView.sideStageWidth * spreadView.snapPosition + (spreadView.sideStageVisible ? -spreadView.sideStageWidth : 0);
216 var startValue = -spreadView.sideStageWidth * spreadView.snapPosition + (spreadView.sideStageVisible ? -spreadView.sideStageWidth : 0);
215 newTranslate += linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, startValue, priv.phase2StartTranslate, root.animatedProgress);
217 newTranslate += linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, startValue, priv.phase2StartTranslate, root.animatedProgress);
216 } else {
218 } else {
@@ -250,7 +252,8 @@ SpreadDelegate {
250 }
252 }
251
253
252 // selected app or opposite stage active app.
254 // selected app or opposite stage active app.
253− if (isSelected || (otherSelected && root.active && spreadView.selectedApplication && spreadView.selectedApplication.stage !== stage)) {
255+ if (isSelected || (otherSelected && root.active && spreadView.selectedDelegate
256+ && spreadView.selectedDelegate.stage !== root.stage)) {
254 return linearAnimation(selectedProgress, negativeProgress, selectedScale, 1, root.progress);
257 return linearAnimation(selectedProgress, negativeProgress, selectedScale, 1, root.progress);
255 } else if (otherSelected) {
258 } else if (otherSelected) {
256 return selectedScale;
259 return selectedScale;
@@ -258,7 +261,7 @@ SpreadDelegate {
258
261
259 if (spreadView.phase == 0) {
262 if (spreadView.phase == 0) {
260 if (nextInStack) {
263 if (nextInStack) {
261− if (stage == ApplicationInfoInterface.SideStage && !spreadView.sideStageVisible) {
264+ if (root.stage == ApplicationInfoInterface.SideStage && !spreadView.sideStageVisible) {
262 return 1;
265 return 1;
263 } else {
266 } else {
264 var targetScale = root.dragStartScale - ((root.dragStartScale - 1) * spreadView.snapPosition);
267 var targetScale = root.dragStartScale - ((root.dragStartScale - 1) * spreadView.snapPosition);
@@ -272,7 +275,7 @@ SpreadDelegate {
272 if (spreadView.phase == 1) {
275 if (spreadView.phase == 1) {
273 if (nextInStack) {
276 if (nextInStack) {
274 var startScale = 1;
277 var startScale = 1;
275− if (stage !== ApplicationInfoInterface.SideStage || spreadView.sideStageVisible) {
278+ if (root.stage !== ApplicationInfoInterface.SideStage || spreadView.sideStageVisible) {
276 startScale = root.dragStartScale - ((root.dragStartScale - 1) * spreadView.snapPosition);
279 startScale = root.dragStartScale - ((root.dragStartScale - 1) * spreadView.snapPosition);
277 }
280 }
278 return linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, startScale, priv.phase2StartScale, root.animatedProgress);
281 return linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, startScale, priv.phase2StartScale, root.animatedProgress);
@@ -295,7 +298,8 @@ SpreadDelegate {
295 }
298 }
296
299
297 // selected app or opposite stage active app.
300 // selected app or opposite stage active app.
298− if (isSelected || (otherSelected && root.active && spreadView.selectedApplication && spreadView.selectedApplication.stage !== stage)) {
301+ if (isSelected || (otherSelected && root.active && spreadView.selectedDelegate
302+ && spreadView.selectedDelegate.stage !== root.stage)) {
299 return linearAnimation(selectedProgress, negativeProgress, selectedAngle, 0, root.progress);
303 return linearAnimation(selectedProgress, negativeProgress, selectedAngle, 0, root.progress);
300 } else if (otherSelected) {
304 } else if (otherSelected) {
301 return selectedAngle;
305 return selectedAngle;
@@ -304,12 +308,12 @@ SpreadDelegate {
304 // The tile should rotate a bit when another one comes on top, but not when only dragging the side stage in
308 // The tile should rotate a bit when another one comes on top, but not when only dragging the side stage in
305 var shouldMoveAway = spreadView.nextInStack == -1 ||
309 var shouldMoveAway = spreadView.nextInStack == -1 ||
306 spreadView.nextInStack >= 0 && priv.movedActive &&
310 spreadView.nextInStack >= 0 && priv.movedActive &&
307− (ApplicationManager.get(spreadView.nextInStack).stage === ApplicationInfoInterface.MainStage ||
311+ (topLevelSurfaceList.applicationAt(spreadView.nextInStack).stage === ApplicationInfoInterface.MainStage ||
308− stage == ApplicationInfoInterface.SideStage);
312+ root.stage == ApplicationInfoInterface.SideStage);
309
313
310 if (spreadView.phase == 0) {
314 if (spreadView.phase == 0) {
311 if (nextInStack) {
315 if (nextInStack) {
312− if (stage == ApplicationInfoInterface.SideStage && !spreadView.sideStageVisible) {
316+ if (root.stage == ApplicationInfoInterface.SideStage && !spreadView.sideStageVisible) {
313 return 0;
317 return 0;
314 } else {
318 } else {
315 return linearAnimation(0, spreadView.positionMarker2, root.startAngle, root.startAngle * (1-spreadView.snapPosition), root.animatedProgress);
319 return linearAnimation(0, spreadView.positionMarker2, root.startAngle, root.startAngle * (1-spreadView.snapPosition), root.animatedProgress);
@@ -321,7 +325,7 @@ SpreadDelegate {
321 }
325 }
322 if (spreadView.phase == 1) {
326 if (spreadView.phase == 1) {
323 if (nextInStack) {
327 if (nextInStack) {
324− if (stage == ApplicationInfoInterface.SideStage && !spreadView.sideStageVisible) {
328+ if (root.stage == ApplicationInfoInterface.SideStage && !spreadView.sideStageVisible) {
325 return linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, 0, priv.phase2StartAngle, root.animatedProgress);
329 return linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, 0, priv.phase2StartAngle, root.animatedProgress);
326 } else {
330 } else {
327 return linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, root.startAngle * (1-spreadView.snapPosition), priv.phase2StartAngle, root.animatedProgress);
331 return linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, root.startAngle * (1-spreadView.snapPosition), priv.phase2StartAngle, root.animatedProgress);
@@ -345,7 +349,8 @@ SpreadDelegate {
345 if (root.isSelected) return 1;
349 if (root.isSelected) return 1;
346
350
347 if (otherSelected) {
351 if (otherSelected) {
348− if (root.active && spreadView.selectedApplication && spreadView.selectedApplication.stage !== stage) {
352+ if (root.active && spreadView.selectedDelegate
353+ && spreadView.selectedDelegate.stage !== root.stage) {
349 return 1;
354 return 1;
350 }
355 }
351 return linearAnimation(selectedProgress, negativeProgress, selectedOpacity, 0, root.progress);
356 return linearAnimation(selectedProgress, negativeProgress, selectedOpacity, 0, root.progress);
@@ -355,7 +360,8 @@ SpreadDelegate {
355
360
356 property real topMarginProgress: {
361 property real topMarginProgress: {
357 // selected app or opposite stage active app.
362 // selected app or opposite stage active app.
358− if (isSelected || (otherSelected && root.active && spreadView.selectedApplication && spreadView.selectedApplication.stage !== stage)) {
363+ if (isSelected || (otherSelected && root.active && spreadView.selectedDelegate
364+ && spreadView.selectedDelegate.stage !== root.stage)) {
359 return linearAnimation(selectedProgress, negativeProgress, selectedTopMarginProgress, 0, root.progress);
365 return linearAnimation(selectedProgress, negativeProgress, selectedTopMarginProgress, 0, root.progress);
360 }
366 }
361
367
@@ -379,7 +385,7 @@ SpreadDelegate {
379 when: root.isInSideStage && spreadView.shiftedContentX == 0 && spreadView.phase == 0
385 when: root.isInSideStage && spreadView.shiftedContentX == 0 && spreadView.phase == 0
380 PropertyChanges {
386 PropertyChanges {
381 target: priv;
387 target: priv;
382− xTranslate: -spreadView.sideStageWidth + spreadView.sideStageWidth * (1-spreadView.sideStageDragProgress)
388+ xTranslate: -spreadView.sideStageWidth + spreadView.sideStageWidth * (1-sideStage.progress)
383 }
389 }
384 }
390 }
385 ]
391 ]
qml/Stages/WindowedFullscreenPolicy.qml+5−7
@@ -23,19 +23,17 @@ import Unity.Application 0.1
23// state of the window is returned to restored.
23// state of the window is returned to restored.
24QtObject {
24QtObject {
25 property bool active: true
25 property bool active: true
26− property QtObject application: null
26+ property QtObject surface: null
27
27
28− readonly property var lastSurface: application && application.session ?
29− application.session.lastSurface : null
30 property bool _firstTimeSurface: true
28 property bool _firstTimeSurface: true
31
29
32− onLastSurfaceChanged: {
30+ onSurfaceChanged: {
33− if (!active || !lastSurface) return;
31+ if (!active || !surface) return;
34 if (!_firstTimeSurface) return;
32 if (!_firstTimeSurface) return;
35 _firstTimeSurface = false;
33 _firstTimeSurface = false;
36
34
37− if (lastSurface.state === Mir.FullscreenState && lastSurface.shellChrome === Mir.LowChrome) {
35+ if (surface.state === Mir.FullscreenState && surface.shellChrome === Mir.LowChrome) {
38− lastSurface.state = Mir.RestoredState;
36+ surface.state = Mir.RestoredState;
39 }
37 }
40 }
38 }
41}
39}
qml/Tutorial/TutorialBottom.qml+1−1
@@ -47,7 +47,7 @@ TutorialPage {
47 readonly property real sideStageWidth: root.usageScenario === "tablet" && stage.sideStageVisible ?
47 readonly property real sideStageWidth: root.usageScenario === "tablet" && stage.sideStageVisible ?
48 stage.sideStageWidth : 0
48 stage.sideStageWidth : 0
49 readonly property bool isMainStageApp: usageScenario !== "tablet" ||
49 readonly property bool isMainStageApp: usageScenario !== "tablet" ||
50− application.stage === ApplicationInfoInterface.MainStage
50+ stage.stageFocusedSurface === ApplicationInfoInterface.MainStage
51 readonly property real dragAreaHeight: units.gu(3) // based on PageWithBottomEdge.qml
51 readonly property real dragAreaHeight: units.gu(3) // based on PageWithBottomEdge.qml
52 readonly property real targetDistance: height * 0.2 + dragAreaHeight // based on PageWithBottomEdge.qml
52 readonly property real targetDistance: height * 0.2 + dragAreaHeight // based on PageWithBottomEdge.qml
53
53
qml/Tutorial/TutorialRight.qml+2−1
@@ -47,11 +47,12 @@ TutorialPage {
47 anchors.right: root.right
47 anchors.right: root.right
48 anchors.rightMargin: units.gu(2)
48 anchors.rightMargin: units.gu(2)
49 anchors.verticalCenter: root.verticalCenter
49 anchors.verticalCenter: root.verticalCenter
50+ rotation: usageScenario === "desktop" ? 180 : 0
50 }
51 }
51
52
52 label {
53 label {
53 text: root.usageScenario === "desktop" ?
54 text: root.usageScenario === "desktop" ?
54− i18n.tr("Hover your mouse on the right edge to view your open apps") :
55+ i18n.tr("Push your mouse against the right edge to view your open apps") :
55 i18n.tr("Short or long swipe from the right edge to view your open apps")
56 i18n.tr("Short or long swipe from the right edge to view your open apps")
56 anchors.right: arrow.left
57 anchors.right: arrow.left
57 anchors.rightMargin: units.gu(2) - (label.width - label.contentWidth)
58 anchors.rightMargin: units.gu(2) - (label.width - label.contentWidth)
tests/mocks/GSettings.1.0/fake_gsettings.cpp+126−38
@@ -21,9 +21,11 @@
21GSettingsControllerQml* GSettingsControllerQml::s_controllerInstance = 0;
21GSettingsControllerQml* GSettingsControllerQml::s_controllerInstance = 0;
22
22
23GSettingsControllerQml::GSettingsControllerQml()
23GSettingsControllerQml::GSettingsControllerQml()
24− : m_usageMode("Staged")
24+ : m_disableHeight(false)
25+ , m_usageMode("Staged")
25 , m_autohideLauncher(false)
26 , m_autohideLauncher(false)
26 , m_launcherWidth(8)
27 , m_launcherWidth(8)
28+ , m_edgeDragWidth(2)
27{
29{
28}
30}
29
31
@@ -38,6 +40,19 @@ GSettingsControllerQml* GSettingsControllerQml::instance() {
38 return s_controllerInstance;
40 return s_controllerInstance;
39}
41}
40
42
43+bool GSettingsControllerQml::disableHeight() const
44+{
45+ return m_disableHeight;
46+}
47+
48+void GSettingsControllerQml::setDisableHeight(bool val)
49+{
50+ if (val != m_disableHeight) {
51+ m_disableHeight = val;
52+ Q_EMIT disableHeightChanged();
53+ }
54+}
55+
41QString GSettingsControllerQml::pictureUri() const
56QString GSettingsControllerQml::pictureUri() const
42{
57{
43 return m_pictureUri;
58 return m_pictureUri;
@@ -116,6 +131,19 @@ void GSettingsControllerQml::setLauncherWidth(int launcherWidth)
116 }
131 }
117}
132}
118
133
134+uint GSettingsControllerQml::edgeDragWidth() const
135+{
136+ return m_edgeDragWidth;
137+}
138+
139+void GSettingsControllerQml::setEdgeDragWidth(uint edgeDragWidth)
140+{
141+ if (m_edgeDragWidth != edgeDragWidth) {
142+ m_edgeDragWidth = edgeDragWidth;
143+ Q_EMIT edgeDragWidthChanged(edgeDragWidth);
144+ }
145+}
146+
119GSettingsSchemaQml::GSettingsSchemaQml(QObject *parent): QObject(parent) {
147GSettingsSchemaQml::GSettingsSchemaQml(QObject *parent): QObject(parent) {
120}
148}
121
149
@@ -146,9 +174,26 @@ void GSettingsSchemaQml::setPath(const QByteArray &path) {
146}
174}
147
175
148GSettingsQml::GSettingsQml(QObject *parent)
176GSettingsQml::GSettingsQml(QObject *parent)
149− : QObject(parent)
177+ : QObject(parent),
178+ m_valid(false)
150{
179{
151 m_schema = new GSettingsSchemaQml(this);
180 m_schema = new GSettingsSchemaQml(this);
181+}
182+
183+void GSettingsQml::classBegin()
184+{
185+}
186+
187+void GSettingsQml::componentComplete()
188+{
189+ // Emulate what the real GSettings module does, and only return undefined
190+ // values until we are completed loading.
191+ m_valid = true;
192+
193+ // FIXME: We should make this dynamic, instead of hard-coding all possible
194+ // properties in one object. We should create properties based on the schema.
195+ connect(GSettingsControllerQml::instance(), &GSettingsControllerQml::disableHeightChanged,
196+ this, &GSettingsQml::disableHeightChanged);
152 connect(GSettingsControllerQml::instance(), &GSettingsControllerQml::pictureUriChanged,
197 connect(GSettingsControllerQml::instance(), &GSettingsControllerQml::pictureUriChanged,
153 this, &GSettingsQml::pictureUriChanged);
198 this, &GSettingsQml::pictureUriChanged);
154 connect(GSettingsControllerQml::instance(), &GSettingsControllerQml::usageModeChanged,
199 connect(GSettingsControllerQml::instance(), &GSettingsControllerQml::usageModeChanged,
@@ -161,104 +206,147 @@ GSettingsQml::GSettingsQml(QObject *parent)
161 this, &GSettingsQml::autohideLauncherChanged);
206 this, &GSettingsQml::autohideLauncherChanged);
162 connect(GSettingsControllerQml::instance(), &GSettingsControllerQml::launcherWidthChanged,
207 connect(GSettingsControllerQml::instance(), &GSettingsControllerQml::launcherWidthChanged,
163 this, &GSettingsQml::launcherWidthChanged);
208 this, &GSettingsQml::launcherWidthChanged);
209+ connect(GSettingsControllerQml::instance(), &GSettingsControllerQml::edgeDragWidthChanged,
210+ this, &GSettingsQml::edgeDragWidthChanged);
211+
212+ Q_EMIT disableHeightChanged();
213+ Q_EMIT pictureUriChanged();
214+ Q_EMIT usageModeChanged();
215+ Q_EMIT lockedOutTimeChanged();
216+ Q_EMIT lifecycleExemptAppidsChanged();
217+ Q_EMIT autohideLauncherChanged();
218+ Q_EMIT launcherWidthChanged();
219+ Q_EMIT edgeDragWidthChanged();
164}
220}
165
221
166GSettingsSchemaQml * GSettingsQml::schema() const {
222GSettingsSchemaQml * GSettingsQml::schema() const {
167 return m_schema;
223 return m_schema;
168}
224}
169
225
170−QString GSettingsQml::pictureUri() const
226+QVariant GSettingsQml::disableHeight() const
227+{
228+ if (m_valid && m_schema->id() == "com.canonical.keyboard.maliit") {
229+ return GSettingsControllerQml::instance()->disableHeight();
230+ } else {
231+ return QVariant();
232+ }
233+}
234+
235+void GSettingsQml::setDisableHeight(const QVariant &val)
236+{
237+ if (m_valid && m_schema->id() == "com.canonical.keyboard.maliit") {
238+ GSettingsControllerQml::instance()->setDisableHeight(val.toBool());
239+ }
240+}
241+
242+QVariant GSettingsQml::pictureUri() const
171{
243{
172− if (m_schema->id() == "org.gnome.desktop.background") {
244+ if (m_valid && m_schema->id() == "org.gnome.desktop.background") {
173 return GSettingsControllerQml::instance()->pictureUri();
245 return GSettingsControllerQml::instance()->pictureUri();
174 } else {
246 } else {
175− return "";
247+ return QVariant();
176 }
248 }
177}
249}
178
250
179−void GSettingsQml::setPictureUri(const QString &str)
251+void GSettingsQml::setPictureUri(const QVariant &str)
180{
252{
181− if (m_schema->id() == "org.gnome.desktop.background") {
253+ if (m_valid && m_schema->id() == "org.gnome.desktop.background") {
182− GSettingsControllerQml::instance()->setPictureUri(str);
254+ GSettingsControllerQml::instance()->setPictureUri(str.toString());
183 }
255 }
184}
256}
185
257
186−QString GSettingsQml::usageMode() const
258+QVariant GSettingsQml::usageMode() const
187{
259{
188− if (m_schema->id() == "com.canonical.Unity8") {
260+ if (m_valid && m_schema->id() == "com.canonical.Unity8") {
189 return GSettingsControllerQml::instance()->usageMode();
261 return GSettingsControllerQml::instance()->usageMode();
190 } else {
262 } else {
191− return "";
263+ return QVariant();
192 }
264 }
193}
265}
194
266
195−void GSettingsQml::setUsageMode(const QString &usageMode)
267+void GSettingsQml::setUsageMode(const QVariant &usageMode)
196{
268{
197− if (m_schema->id() == "com.canonical.Unity8") {
269+ if (m_valid && m_schema->id() == "com.canonical.Unity8") {
198− GSettingsControllerQml::instance()->setUsageMode(usageMode);
270+ GSettingsControllerQml::instance()->setUsageMode(usageMode.toString());
199 }
271 }
200}
272}
201
273
202−qint64 GSettingsQml::lockedOutTime() const
274+QVariant GSettingsQml::lockedOutTime() const
203{
275{
204− if (m_schema->id() == "com.canonical.Unity8.Greeter") {
276+ if (m_valid && m_schema->id() == "com.canonical.Unity8.Greeter") {
205 return GSettingsControllerQml::instance()->lockedOutTime();
277 return GSettingsControllerQml::instance()->lockedOutTime();
206 } else {
278 } else {
207− return 0;
279+ return QVariant();
208 }
280 }
209}
281}
210
282
211−void GSettingsQml::setLockedOutTime(qint64 timestamp)
283+void GSettingsQml::setLockedOutTime(const QVariant &timestamp)
212{
284{
213− if (m_schema->id() == "com.canonical.Unity8.Greeter") {
285+ if (m_valid && m_schema->id() == "com.canonical.Unity8.Greeter") {
214− GSettingsControllerQml::instance()->setLockedOutTime(timestamp);
286+ GSettingsControllerQml::instance()->setLockedOutTime(timestamp.value<qint64>());
215 }
287 }
216}
288}
217
289
218−QStringList GSettingsQml::lifecycleExemptAppids() const
290+QVariant GSettingsQml::lifecycleExemptAppids() const
219{
291{
220− if (m_schema->id() == "com.canonical.qtmir") {
292+ if (m_valid && m_schema->id() == "com.canonical.qtmir") {
221 return GSettingsControllerQml::instance()->lifecycleExemptAppids();
293 return GSettingsControllerQml::instance()->lifecycleExemptAppids();
222 } else {
294 } else {
223− return QStringList();
295+ return QVariant();
224 }
296 }
225}
297}
226
298
227−bool GSettingsQml::autohideLauncher() const
299+QVariant GSettingsQml::autohideLauncher() const
228{
300{
229− if (m_schema->id() == "com.canonical.Unity8") {
301+ if (m_valid && m_schema->id() == "com.canonical.Unity8") {
230 return GSettingsControllerQml::instance()->autohideLauncher();
302 return GSettingsControllerQml::instance()->autohideLauncher();
231 } else {
303 } else {
232− return false;
304+ return QVariant();
233 }
305 }
234}
306}
235
307
236−int GSettingsQml::launcherWidth() const
308+QVariant GSettingsQml::launcherWidth() const
237{
309{
238− if (m_schema->id() == "com.canonical.Unity8") {
310+ if (m_valid && m_schema->id() == "com.canonical.Unity8") {
239 return GSettingsControllerQml::instance()->launcherWidth();
311 return GSettingsControllerQml::instance()->launcherWidth();
240 } else {
312 } else {
241− return false;
313+ return QVariant();
314+ }
315+}
316+
317+QVariant GSettingsQml::edgeDragWidth() const
318+{
319+ if (m_valid && m_schema->id() == "com.canonical.Unity8") {
320+ return GSettingsControllerQml::instance()->edgeDragWidth();
321+ } else {
322+ return QVariant();
323+ }
324+}
325+
326+void GSettingsQml::setLifecycleExemptAppids(const QVariant &appIds)
327+{
328+ if (m_valid && m_schema->id() == "com.canonical.qtmir") {
329+ GSettingsControllerQml::instance()->setLifecycleExemptAppids(appIds.toStringList());
242 }
330 }
243}
331}
244
332
245−void GSettingsQml::setLifecycleExemptAppids(const QStringList &appIds)
333+void GSettingsQml::setAutohideLauncher(const QVariant &autohideLauncher)
246{
334{
247− if (m_schema->id() == "com.canonical.qtmir") {
335+ if (m_valid && m_schema->id() == "com.canonical.Unity8") {
248− GSettingsControllerQml::instance()->setLifecycleExemptAppids(appIds);
336+ GSettingsControllerQml::instance()->setAutohideLauncher(autohideLauncher.toBool());
249 }
337 }
250}
338}
251
339
252−void GSettingsQml::setAutohideLauncher(bool autohideLauncher)
340+void GSettingsQml::setLauncherWidth(const QVariant &launcherWidth)
253{
341{
254− if (m_schema->id() == "com.canonical.Unity8") {
342+ if (m_valid && m_schema->id() == "com.canonical.Unity8") {
255− GSettingsControllerQml::instance()->setAutohideLauncher(autohideLauncher);
343+ GSettingsControllerQml::instance()->setLauncherWidth(launcherWidth.toInt());
256 }
344 }
257}
345}
258
346
259−void GSettingsQml::setLauncherWidth(int launcherWidth)
347+void GSettingsQml::setEdgeDragWidth(const QVariant &edgeDragWidth)
260{
348{
261− if (m_schema->id() == "com.canonical.Unity8") {
349+ if (m_valid && m_schema->id() == "com.canonical.Unity8") {
262− GSettingsControllerQml::instance()->setLauncherWidth(launcherWidth);
350+ GSettingsControllerQml::instance()->setEdgeDragWidth(edgeDragWidth.toUInt());
263 }
351 }
264}
352}
tests/mocks/GSettings.1.0/fake_gsettings.h+51−26
@@ -19,7 +19,9 @@
19
19
20#include <QList>
20#include <QList>
21#include <QObject>
21#include <QObject>
22+#include <QQmlParserStatus>
22#include <QStringList>
23#include <QStringList>
24+#include <QVariant>
23
25
24class GSettingsSchemaQml: public QObject
26class GSettingsSchemaQml: public QObject
25{
27{
@@ -41,47 +43,60 @@ private:
41 QByteArray m_path;
43 QByteArray m_path;
42};
44};
43
45
44−class GSettingsQml: public QObject
46+class GSettingsQml: public QObject, public QQmlParserStatus
45{
47{
46 Q_OBJECT
48 Q_OBJECT
49+ Q_INTERFACES(QQmlParserStatus)
47
50
48 Q_PROPERTY(GSettingsSchemaQml* schema READ schema NOTIFY schemaChanged)
51 Q_PROPERTY(GSettingsSchemaQml* schema READ schema NOTIFY schemaChanged)
49− Q_PROPERTY(QString pictureUri READ pictureUri WRITE setPictureUri NOTIFY pictureUriChanged)
52+ Q_PROPERTY(QVariant disableHeight READ disableHeight WRITE setDisableHeight NOTIFY disableHeightChanged)
50− Q_PROPERTY(QString usageMode READ usageMode WRITE setUsageMode NOTIFY usageModeChanged)
53+ Q_PROPERTY(QVariant pictureUri READ pictureUri WRITE setPictureUri NOTIFY pictureUriChanged)
51− Q_PROPERTY(qint64 lockedOutTime READ lockedOutTime WRITE setLockedOutTime NOTIFY lockedOutTimeChanged)
54+ Q_PROPERTY(QVariant usageMode READ usageMode WRITE setUsageMode NOTIFY usageModeChanged)
52− Q_PROPERTY(QStringList lifecycleExemptAppids READ lifecycleExemptAppids WRITE setLifecycleExemptAppids NOTIFY lifecycleExemptAppidsChanged)
55+ Q_PROPERTY(QVariant lockedOutTime READ lockedOutTime WRITE setLockedOutTime NOTIFY lockedOutTimeChanged)
53− Q_PROPERTY(bool autohideLauncher READ autohideLauncher WRITE setAutohideLauncher NOTIFY autohideLauncherChanged)
56+ Q_PROPERTY(QVariant lifecycleExemptAppids READ lifecycleExemptAppids WRITE setLifecycleExemptAppids NOTIFY lifecycleExemptAppidsChanged)
54− Q_PROPERTY(int launcherWidth READ launcherWidth WRITE setLauncherWidth NOTIFY launcherWidthChanged)
57+ Q_PROPERTY(QVariant autohideLauncher READ autohideLauncher WRITE setAutohideLauncher NOTIFY autohideLauncherChanged)
58+ Q_PROPERTY(QVariant launcherWidth READ launcherWidth WRITE setLauncherWidth NOTIFY launcherWidthChanged)
59+ Q_PROPERTY(QVariant edgeDragWidth READ edgeDragWidth WRITE setEdgeDragWidth NOTIFY edgeDragWidthChanged)
55
60
56public:
61public:
57 GSettingsQml(QObject *parent = nullptr);
62 GSettingsQml(QObject *parent = nullptr);
58
63
59− GSettingsSchemaQml * schema() const;
64+ void classBegin();
60− QString pictureUri() const;
65+ void componentComplete();
61− QString usageMode() const;
62− qint64 lockedOutTime() const;
63− QStringList lifecycleExemptAppids() const;
64− bool autohideLauncher() const;
65− int launcherWidth() const;
66
66
67− void setPictureUri(const QString &str);
67+ GSettingsSchemaQml * schema() const;
68− void setUsageMode(const QString &usageMode);
68+ QVariant disableHeight() const;
69− void setLockedOutTime(qint64 timestamp);
69+ QVariant pictureUri() const;
70− void setLifecycleExemptAppids(const QStringList &appIds);
70+ QVariant usageMode() const;
71− void setAutohideLauncher(bool autohideLauncher);
71+ QVariant lockedOutTime() const;
72− void setLauncherWidth(int launcherWidth);
72+ QVariant lifecycleExemptAppids() const;
73+ QVariant autohideLauncher() const;
74+ QVariant launcherWidth() const;
75+ QVariant edgeDragWidth() const;
76+
77+ void setDisableHeight(const QVariant &val);
78+ void setPictureUri(const QVariant &str);
79+ void setUsageMode(const QVariant &usageMode);
80+ void setLockedOutTime(const QVariant &timestamp);
81+ void setLifecycleExemptAppids(const QVariant &appIds);
82+ void setAutohideLauncher(const QVariant &autohideLauncher);
83+ void setLauncherWidth(const QVariant &launcherWidth);
84+ void setEdgeDragWidth(const QVariant &edgeDragWidth);
73
85
74Q_SIGNALS:
86Q_SIGNALS:
87+ void disableHeightChanged();
75 void schemaChanged();
88 void schemaChanged();
76− void pictureUriChanged(const QString&);
89+ void pictureUriChanged();
77− void usageModeChanged(const QString&);
90+ void usageModeChanged();
78− void lockedOutTimeChanged(qint64);
91+ void lockedOutTimeChanged();
79− void lifecycleExemptAppidsChanged(const QStringList &);
92+ void lifecycleExemptAppidsChanged();
80− void autohideLauncherChanged(bool);
93+ void autohideLauncherChanged();
81− void launcherWidthChanged(int launcherWidth);
94+ void launcherWidthChanged();
95+ void edgeDragWidthChanged();
82
96
83private:
97private:
84 GSettingsSchemaQml* m_schema;
98 GSettingsSchemaQml* m_schema;
99+ bool m_valid;
85
100
86 friend class GSettingsSchemaQml;
101 friend class GSettingsSchemaQml;
87};
102};
@@ -94,6 +109,9 @@ public:
94 static GSettingsControllerQml* instance();
109 static GSettingsControllerQml* instance();
95 ~GSettingsControllerQml();
110 ~GSettingsControllerQml();
96
111
112+ bool disableHeight() const;
113+ Q_INVOKABLE void setDisableHeight(bool val);
114+
97 QString pictureUri() const;
115 QString pictureUri() const;
98 Q_INVOKABLE void setPictureUri(const QString &str);
116 Q_INVOKABLE void setPictureUri(const QString &str);
99
117
@@ -112,23 +130,30 @@ public:
112 int launcherWidth() const;
130 int launcherWidth() const;
113 Q_INVOKABLE void setLauncherWidth(int launcherWidth);
131 Q_INVOKABLE void setLauncherWidth(int launcherWidth);
114
132
133+ uint edgeDragWidth() const;
134+ Q_INVOKABLE void setEdgeDragWidth(uint edgeDragWidth);
135+
115Q_SIGNALS:
136Q_SIGNALS:
137+ void disableHeightChanged();
116 void pictureUriChanged(const QString&);
138 void pictureUriChanged(const QString&);
117 void usageModeChanged(const QString&);
139 void usageModeChanged(const QString&);
118 void lockedOutTimeChanged(qint64 timestamp);
140 void lockedOutTimeChanged(qint64 timestamp);
119 void lifecycleExemptAppidsChanged(const QStringList&);
141 void lifecycleExemptAppidsChanged(const QStringList&);
120 void autohideLauncherChanged(bool autohideLauncher);
142 void autohideLauncherChanged(bool autohideLauncher);
121 void launcherWidthChanged(int launcherWidth);
143 void launcherWidthChanged(int launcherWidth);
144+ void edgeDragWidthChanged(uint edgeDragWidth);
122
145
123private:
146private:
124 GSettingsControllerQml();
147 GSettingsControllerQml();
125
148
149+ bool m_disableHeight;
126 QString m_pictureUri;
150 QString m_pictureUri;
127 QString m_usageMode;
151 QString m_usageMode;
128 qint64 m_lockedOutTime;
152 qint64 m_lockedOutTime;
129 QStringList m_lifecycleExemptAppids;
153 QStringList m_lifecycleExemptAppids;
130 bool m_autohideLauncher;
154 bool m_autohideLauncher;
131 int m_launcherWidth;
155 int m_launcherWidth;
156+ uint m_edgeDragWidth;
132
157
133 static GSettingsControllerQml* s_controllerInstance;
158 static GSettingsControllerQml* s_controllerInstance;
134 QList<GSettingsQml *> m_registeredGSettings;
159 QList<GSettingsQml *> m_registeredGSettings;
tests/mocks/Unity/Application/ApplicationInfo.cpp+181−108
@@ -16,8 +16,7 @@
16
16
17#include "ApplicationInfo.h"
17#include "ApplicationInfo.h"
18#include "MirSurface.h"
18#include "MirSurface.h"
19−#include "Session.h"
19+#include "SurfaceManager.h"
20−#include "SessionManager.h"
21
20
22#include <paths.h>
21#include <paths.h>
23
22
@@ -25,97 +24,114 @@
25#include <QQuickItem>
24#include <QQuickItem>
26#include <QQuickView>
25#include <QQuickView>
27#include <QQmlComponent>
26#include <QQmlComponent>
28−#include <QTimer>
27+
28+#define APPLICATION_DEBUG 0
29+
30+#if APPLICATION_DEBUG
31+#define DEBUG_MSG(params) qDebug().nospace() << "Application["<<appId()<<"]::" << __func__ << " " << params
32+
33+QString stateToStr(ApplicationInfo::State state)
34+{
35+ switch (state) {
36+ case ApplicationInfo::Starting:
37+ return "starting";
38+ case ApplicationInfo::Running:
39+ return "running";
40+ case ApplicationInfo::Suspended:
41+ return "suspended";
42+ case ApplicationInfo::Stopped:
43+ return "stopped";
44+ default:
45+ return "???";
46+ };
47+}
48+
49+#else
50+#define DEBUG_MSG(params) ((void)0)
51+#endif
52+
53+#define WARNING_MSG(params) qWarning().nospace() << "Application["<<appId()<<"]::" << __func__ << " " << params
29
54
30ApplicationInfo::ApplicationInfo(const QString &appId, QObject *parent)
55ApplicationInfo::ApplicationInfo(const QString &appId, QObject *parent)
31 : ApplicationInfoInterface(appId, parent)
56 : ApplicationInfoInterface(appId, parent)
32 , m_appId(appId)
57 , m_appId(appId)
33− , m_stage(MainStage)
34− , m_state(Stopped)
35− , m_focused(false)
36− , m_fullscreen(false)
37− , m_session(0)
38− , m_supportedOrientations(Qt::PortraitOrientation |
39− Qt::LandscapeOrientation |
40− Qt::InvertedPortraitOrientation |
41− Qt::InvertedLandscapeOrientation)
42− , m_rotatesWindowContents(false)
43− , m_requestedState(RequestedRunning)
44− , m_isTouchApp(true)
45− , m_exemptFromLifecycle(false)
46− , m_manualSurfaceCreation(false)
47− , m_shellChrome(Mir::NormalChrome)
48{
58{
59+ connect(&m_surfaceList, &MirSurfaceListModel::countChanged,
60+ this, &ApplicationInfo::onSurfaceCountChanged, Qt::QueuedConnection);
61+
62+ m_surfaceCreationTimer.setSingleShot(true);
63+ m_surfaceCreationTimer.setInterval(500);
64+ connect(&m_surfaceCreationTimer, &QTimer::timeout, this, &ApplicationInfo::createSurface);
49}
65}
50
66
51ApplicationInfo::ApplicationInfo(QObject *parent)
67ApplicationInfo::ApplicationInfo(QObject *parent)
52− : ApplicationInfoInterface(QString(), parent)
68+ : ApplicationInfo(QString(), parent)
53− , m_stage(MainStage)
54− , m_state(Stopped)
55− , m_focused(false)
56− , m_fullscreen(false)
57− , m_session(0)
58− , m_supportedOrientations(Qt::PortraitOrientation |
59− Qt::LandscapeOrientation |
60− Qt::InvertedPortraitOrientation |
61− Qt::InvertedLandscapeOrientation)
62− , m_rotatesWindowContents(false)
63− , m_requestedState(RequestedRunning)
64− , m_isTouchApp(true)
65− , m_exemptFromLifecycle(false)
66− , m_manualSurfaceCreation(false)
67− , m_shellChrome(Mir::NormalChrome)
68{
69{
69}
70}
70
71
71ApplicationInfo::~ApplicationInfo()
72ApplicationInfo::~ApplicationInfo()
72{
73{
73− delete m_session;
74}
74}
75
75
76−void ApplicationInfo::createSession()
76+void ApplicationInfo::createSurface()
77{
77{
78− if (m_session || state() == ApplicationInfo::Stopped) { return; }
78+ if (state() == ApplicationInfo::Stopped) { return; }
79−
80− setSession(SessionManager::singleton()->createSession(appId(), m_screenshotFileName));
81−}
82
79
83−void ApplicationInfo::destroySession()
80+ QString surfaceName = name();
84−{
81+ if (m_surfaceList.count() > 0) {
85− Session *session = this->session();
82+ surfaceName.append(QString(" %1").arg(m_surfaceList.count()+1));
86− setSession(nullptr);
83+ }
87− delete session;
88−}
89
84
90−void ApplicationInfo::setSession(Session* session)
85+ auto surfaceManager = SurfaceManager::instance();
91−{
86+ if (!surfaceManager) {
92− if (m_session == session)
87+ WARNING_MSG("No SurfaceManager");
93 return;
88 return;
94−
95− if (m_session) {
96− disconnect(this, 0, m_session, 0);
97− m_session->setApplication(nullptr);
98− m_session->setParent(nullptr);
99− Q_EMIT m_session->deregister();
100 }
89 }
101
90
102− m_session = session;
91+ auto surface = surfaceManager->createSurface(surfaceName,
103−
92+ Mir::NormalType,
104− if (m_session) {
93+ fullscreen() ? Mir::FullscreenState : Mir::MaximizedState,
105− m_session->setApplication(this);
94+ m_screenshotFileName);
106− m_session->setParent(this);
95+
107− m_session->setFullscreen(m_fullscreen);
96+ surface->setShellChrome(m_shellChrome);
108− SessionManager::singleton()->registerSession(m_session);
97+
109− connect(m_session, &Session::surfaceAdded,
98+ m_surfaceList.appendSurface(surface);
110− this, &ApplicationInfo::onSessionSurfaceAdded);
99+
111− connect(m_session, &Session::fullscreenChanged, this, &ApplicationInfo::fullscreenChanged);
100+ ++m_liveSurfaceCount;
101+ connect(surface, &MirSurface::liveChanged, this, [this, surface](){
102+ if (!surface->live()) {
103+ --m_liveSurfaceCount;
104+ if (m_liveSurfaceCount == 0) {
105+ if (m_closingSurfaces.contains(surface)
106+ || (m_state == Running && m_requestedState == RequestedRunning)) {
107+ Q_EMIT closed();
108+ }
109+ setState(Stopped);
110+ } else {
111+ if (m_closingSurfaces.contains(surface) && m_requestedState == RequestedSuspended
112+ && m_closingSurfaces.count() == 1) {
113+ setState(Suspended);
114+ }
115+ }
116+ m_closingSurfaces.removeAll(surface);
117+ }
118+ });
119+ connect(surface, &MirSurface::closeRequested, this, [this, surface](){
120+ m_closingSurfaces.append(surface);
121+ if (m_state == Suspended) {
122+ // resume to allow application to close its surface
123+ setState(Running);
124+ }
125+ });
126+ connect(surface, &MirSurface::focusRequested, this, &ApplicationInfo::focusRequested);
112
127
113− if (!m_manualSurfaceCreation) {
128+ if (m_state == Starting) {
114− QTimer::singleShot(500, m_session, &Session::createSurface);
129+ if (m_requestedState == RequestedRunning) {
130+ setState(Running);
131+ } else {
132+ setState(Suspended);
115 }
133 }
116 }
134 }
117−
118− Q_EMIT sessionChanged(m_session);
119}
135}
120
136
121void ApplicationInfo::setIconId(const QString &iconId)
137void ApplicationInfo::setIconId(const QString &iconId)
@@ -138,10 +154,6 @@ void ApplicationInfo::setScreenshotId(const QString &screenshotId)
138
154
139 if (screenshotFileName != m_screenshotFileName) {
155 if (screenshotFileName != m_screenshotFileName) {
140 m_screenshotFileName = screenshotFileName;
156 m_screenshotFileName = screenshotFileName;
141−
142− if (m_session) {
143− m_session->setScreenshot(screenshotFileName);
144− }
145 }
157 }
146}
158}
147
159
@@ -172,38 +184,53 @@ void ApplicationInfo::setStage(Stage value)
172void ApplicationInfo::setState(State value)
184void ApplicationInfo::setState(State value)
173{
185{
174 if (value != m_state) {
186 if (value != m_state) {
187+ DEBUG_MSG(qPrintable(stateToStr(value)));
188+ if (!m_manualSurfaceCreation && value == ApplicationInfo::Starting) {
189+ Q_ASSERT(m_surfaceList.count() == 0);
190+ m_surfaceCreationTimer.start();
191+ } else if (value == ApplicationInfo::Stopped) {
192+ m_surfaceCreationTimer.stop();
193+ for (int i = 0; i < m_surfaceList.count(); ++i) {
194+ MirSurface *surface = static_cast<MirSurface*>(m_surfaceList.get(i));
195+ surface->setLive(false);
196+ }
197+ }
198+
175 m_state = value;
199 m_state = value;
176 Q_EMIT stateChanged(value);
200 Q_EMIT stateChanged(value);
177−
178− if (!m_manualSurfaceCreation && !m_session && m_state == ApplicationInfo::Starting) {
179− QTimer::singleShot(500, this, &ApplicationInfo::createSession);
180− } else if (m_state == ApplicationInfo::Stopped) {
181− Session *session = m_session;
182− setSession(nullptr);
183− delete session;
184− }
185 }
201 }
186}
202}
187
203
188−void ApplicationInfo::setFocused(bool value)
204+void ApplicationInfo::close()
189{
205{
190− if (value != m_focused) {
206+ DEBUG_MSG("");
191− m_focused = value;
207+
192− Q_EMIT focusedChanged(value);
208+ if (m_surfaceList.count() > 0) {
209+ for (int i = 0; i < m_surfaceList.count(); ++i) {
210+ MirSurface *surface = static_cast<MirSurface*>(m_surfaceList.get(i));
211+ surface->close();
212+ }
213+ } else {
214+ setState(Stopped);
215+ Q_EMIT closed();
193 }
216 }
194}
217}
195
218
196void ApplicationInfo::setFullscreen(bool value)
219void ApplicationInfo::setFullscreen(bool value)
197{
220{
198 m_fullscreen = value;
221 m_fullscreen = value;
199− if (m_session) {
222+ if (m_surfaceList.rowCount() > 0) {
200− m_session->setFullscreen(value);
223+ m_surfaceList.get(0)->setState(Mir::FullscreenState);
201 }
224 }
202}
225}
203
226
204bool ApplicationInfo::fullscreen() const
227bool ApplicationInfo::fullscreen() const
205{
228{
206− return m_session ? m_session->fullscreen() : m_fullscreen;
229+ if (m_surfaceList.rowCount() > 0) {
230+ return m_surfaceList.get(0)->state() == Mir::FullscreenState;
231+ } else {
232+ return m_fullscreen;
233+ }
207}
234}
208
235
209void ApplicationInfo::setManualSurfaceCreation(bool value)
236void ApplicationInfo::setManualSurfaceCreation(bool value)
@@ -241,15 +268,28 @@ ApplicationInfo::RequestedState ApplicationInfo::requestedState() const
241
268
242void ApplicationInfo::setRequestedState(RequestedState value)
269void ApplicationInfo::setRequestedState(RequestedState value)
243{
270{
244− if (m_requestedState != value) {
271+ if (m_requestedState == value) {
245− m_requestedState = value;
272+ return;
246− Q_EMIT requestedStateChanged(m_requestedState);
273+ }
274+ DEBUG_MSG((value == RequestedRunning ? "RequestedRunning" : "RequestedSuspended") );
247
275
248− if (m_requestedState == RequestedRunning && m_state == Suspended) {
276+ m_requestedState = value;
277+ Q_EMIT requestedStateChanged(m_requestedState);
278+
279+ if (m_requestedState == RequestedRunning) {
280+
281+ if (m_state == Suspended) {
282+ Q_ASSERT(m_liveSurfaceCount > 0);
249 setState(Running);
283 setState(Running);
250− } else if (m_requestedState == RequestedSuspended && m_state == Running) {
284+ } else if (m_state == Stopped) {
251− setState(Suspended);
285+ Q_ASSERT(m_liveSurfaceCount == 0);
286+ // it's restarting
287+ setState(Starting);
252 }
288 }
289+
290+ } else if (m_requestedState == RequestedSuspended && m_state == Running
291+ && m_closingSurfaces.isEmpty()) {
292+ setState(Suspended);
253 }
293 }
254}
294}
255
295
@@ -263,18 +303,6 @@ void ApplicationInfo::setIsTouchApp(bool isTouchApp)
263 m_isTouchApp = isTouchApp;
303 m_isTouchApp = isTouchApp;
264}
304}
265
305
266−void ApplicationInfo::onSessionSurfaceAdded(MirSurface* surface)
267−{
268− if (surface != nullptr && m_state == Starting) {
269− if (m_requestedState == RequestedRunning) {
270− setState(Running);
271− } else {
272− setState(Suspended);
273− }
274− surface->setShellChrome(m_shellChrome);
275− }
276−}
277−
278bool ApplicationInfo::exemptFromLifecycle() const
306bool ApplicationInfo::exemptFromLifecycle() const
279{
307{
280 return m_exemptFromLifecycle;
308 return m_exemptFromLifecycle;
@@ -305,7 +333,52 @@ void ApplicationInfo::setInitialSurfaceSize(const QSize &size)
305void ApplicationInfo::setShellChrome(Mir::ShellChrome shellChrome)
333void ApplicationInfo::setShellChrome(Mir::ShellChrome shellChrome)
306{
334{
307 m_shellChrome = shellChrome;
335 m_shellChrome = shellChrome;
308− if (m_session && m_session->lastSurface()) {
336+ if (m_surfaceList.rowCount() > 0) {
309− m_session->lastSurface()->setShellChrome(shellChrome);
337+ static_cast<MirSurface*>(m_surfaceList.get(0))->setShellChrome(shellChrome);
338+ }
339+}
340+
341+bool ApplicationInfo::focused() const
342+{
343+ bool someSurfaceHasFocus = false; // to be proven wrong
344+ for (int i = 0; i < m_surfaceList.count() && !someSurfaceHasFocus; ++i) {
345+ someSurfaceHasFocus = m_surfaceList.get(i)->focused();
346+ }
347+ return someSurfaceHasFocus;
348+}
349+
350+void ApplicationInfo::setFocused(bool value)
351+{
352+ if (focused() == value) {
353+ return;
354+ }
355+
356+ if (value) {
357+ if (m_surfaceList.count() > 0) {
358+ m_surfaceList.get(0)->requestFocus();
359+ }
360+ } else {
361+ for (int i = 0; i < m_surfaceList.count(); ++i) {
362+ MirSurface *surface = static_cast<MirSurface*>(m_surfaceList.get(i));
363+ if (surface->focused()) {
364+ surface->setFocused(false);
365+ }
366+ }
367+ }
368+}
369+
370+void ApplicationInfo::onSurfaceCountChanged()
371+{
372+ if (m_surfaceList.count() == 0 && m_state == Running) {
373+ setState(Stopped);
374+ }
375+}
376+
377+void ApplicationInfo::requestFocus()
378+{
379+ if (m_surfaceList.count() == 0) {
380+ Q_EMIT focusRequested();
381+ } else {
382+ m_surfaceList.get(0)->requestFocus();
310 }
383 }
311}
384}
tests/mocks/Unity/Application/ApplicationInfo.h+39−24
@@ -20,25 +20,32 @@
20#include <QObject>
20#include <QObject>
21
21
22class MirSurface;
22class MirSurface;
23−class Session;
24
23
25// unity-api
24// unity-api
26#include <unity/shell/application/ApplicationInfoInterface.h>
25#include <unity/shell/application/ApplicationInfoInterface.h>
27#include <unity/shell/application/Mir.h>
26#include <unity/shell/application/Mir.h>
28
27
28+#include "MirSurfaceListModel.h"
29+
30+#include <QList>
31+#include <QTimer>
32+
29using namespace unity::shell::application;
33using namespace unity::shell::application;
30
34
31class ApplicationInfo : public ApplicationInfoInterface {
35class ApplicationInfo : public ApplicationInfoInterface {
32 Q_OBJECT
36 Q_OBJECT
33
37
38+ ////
39+ // FIXME: Remove those
34 Q_PROPERTY(bool fullscreen READ fullscreen WRITE setFullscreen NOTIFY fullscreenChanged)
40 Q_PROPERTY(bool fullscreen READ fullscreen WRITE setFullscreen NOTIFY fullscreenChanged)
35− Q_PROPERTY(Session* session READ session NOTIFY sessionChanged)
36
41
37 // Only exists in this fake implementation
42 // Only exists in this fake implementation
38
43
39 // whether the test code will explicitly control the creation of the application surface
44 // whether the test code will explicitly control the creation of the application surface
40 Q_PROPERTY(bool manualSurfaceCreation READ manualSurfaceCreation WRITE setManualSurfaceCreation NOTIFY manualSurfaceCreationChanged)
45 Q_PROPERTY(bool manualSurfaceCreation READ manualSurfaceCreation WRITE setManualSurfaceCreation NOTIFY manualSurfaceCreationChanged)
41
46
47+ Q_PROPERTY(QString screenshot READ screenshot CONSTANT)
48+
42public:
49public:
43 ApplicationInfo(QObject *parent = nullptr);
50 ApplicationInfo(QObject *parent = nullptr);
44 ApplicationInfo(const QString &appId, QObject *parent = nullptr);
51 ApplicationInfo(const QString &appId, QObject *parent = nullptr);
@@ -66,8 +73,7 @@ public:
66 Q_INVOKABLE void setState(State value);
73 Q_INVOKABLE void setState(State value);
67 State state() const override { return m_state; }
74 State state() const override { return m_state; }
68
75
69− void setFocused(bool value);
76+ bool focused() const override;
70− bool focused() const override { return m_focused; }
71
77
72 QString splashTitle() const override { return QString(); }
78 QString splashTitle() const override { return QString(); }
73 QUrl splashImage() const override { return QUrl(); }
79 QUrl splashImage() const override { return QUrl(); }
@@ -100,21 +106,26 @@ public:
100 void setInitialSurfaceSize(const QSize &size) override;
106 void setInitialSurfaceSize(const QSize &size) override;
101
107
102 Q_INVOKABLE void setShellChrome(Mir::ShellChrome shellChrome);
108 Q_INVOKABLE void setShellChrome(Mir::ShellChrome shellChrome);
103−public:
109+
104− void setSession(Session* session);
110+ MirSurfaceListInterface* surfaceList() override { return &m_surfaceList; }
105− Session* session() const { return m_session; }
111+
112+ void setFocused(bool value);
113+
114+ //////
115+ // internal mock stuff
116+ void close();
117+ void requestFocus();
106
118
107Q_SIGNALS:
119Q_SIGNALS:
108− void sessionChanged(Session*);
109 void fullscreenChanged(bool value);
120 void fullscreenChanged(bool value);
110 void manualSurfaceCreationChanged(bool value);
121 void manualSurfaceCreationChanged(bool value);
122+ void closed();
111
123
112public Q_SLOTS:
124public Q_SLOTS:
113− Q_INVOKABLE void createSession();
125+ Q_INVOKABLE void createSurface();
114− Q_INVOKABLE void destroySession();
115
126
116private Q_SLOTS:
127private Q_SLOTS:
117− void onSessionSurfaceAdded(MirSurface*);
128+ void onSurfaceCountChanged();
118
129
119private:
130private:
120 void setIcon(const QUrl &value);
131 void setIcon(const QUrl &value);
@@ -124,20 +135,24 @@ private:
124 QString m_appId;
135 QString m_appId;
125 QString m_name;
136 QString m_name;
126 QUrl m_icon;
137 QUrl m_icon;
127− Stage m_stage;
138+ Stage m_stage{MainStage};
128− State m_state;
139+ State m_state{Stopped};
129− bool m_focused;
140+ bool m_fullscreen{false};
130− bool m_fullscreen;
141+ Qt::ScreenOrientations m_supportedOrientations{Qt::PortraitOrientation |
131− Session* m_session;
142+ Qt::LandscapeOrientation |
132− Qt::ScreenOrientations m_supportedOrientations;
143+ Qt::InvertedPortraitOrientation |
133− bool m_rotatesWindowContents;
144+ Qt::InvertedLandscapeOrientation};
134− RequestedState m_requestedState;
145+ bool m_rotatesWindowContents{false};
135− bool m_isTouchApp;
146+ RequestedState m_requestedState{RequestedRunning};
136− bool m_exemptFromLifecycle;
147+ bool m_isTouchApp{true};
148+ bool m_exemptFromLifecycle{false};
137 QSize m_initialSurfaceSize;
149 QSize m_initialSurfaceSize;
138−
150+ MirSurfaceListModel m_surfaceList;
139− bool m_manualSurfaceCreation;
151+ int m_liveSurfaceCount{0};
140− Mir::ShellChrome m_shellChrome;
152+ QTimer m_surfaceCreationTimer;
153+ QList<MirSurface*> m_closingSurfaces;
154+ bool m_manualSurfaceCreation{false};
155+ Mir::ShellChrome m_shellChrome{Mir::NormalChrome};
141};
156};
142
157
143Q_DECLARE_METATYPE(ApplicationInfo*)
158Q_DECLARE_METATYPE(ApplicationInfo*)
tests/mocks/Unity/Application/ApplicationManager.cpp+109−74
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2013-2015 Canonical, Ltd.
2+ * Copyright (C) 2013-2016 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -16,8 +16,7 @@
16
16
17#include "ApplicationManager.h"
17#include "ApplicationManager.h"
18#include "ApplicationInfo.h"
18#include "ApplicationInfo.h"
19−#include "Session.h"
19+#include "MirSurface.h"
20−#include "ApplicationTestInterface.h"
21
20
22#include <paths.h>
21#include <paths.h>
23#include <csignal>
22#include <csignal>
@@ -31,28 +30,20 @@
31#include <QDateTime>
30#include <QDateTime>
32#include <QtDBus/QtDBus>
31#include <QtDBus/QtDBus>
33
32
34−ApplicationManager *ApplicationManager::the_application_manager = nullptr;
33+#define APPLICATIONMANAGER_DEBUG 0
35
34
36−ApplicationManager *ApplicationManager::singleton()
35+#if APPLICATIONMANAGER_DEBUG
37−{
36+#define DEBUG_MSG(params) qDebug().nospace() << "ApplicationManager::" << __func__ << " " << params
38− if (!the_application_manager) {
37+#else
39− the_application_manager = new ApplicationManager();
38+#define DEBUG_MSG(params) ((void)0)
39+#endif
40
40
41− // Emit signal to notify Upstart that Mir is ready to receive client connections
41+namespace unityapi = unity::shell::application;
42− // see http://upstart.ubuntu.com/cookbook/#expect-stop
43− if (qgetenv("UNITY_MIR_EMITS_SIGSTOP") == "1") {
44− raise(SIGSTOP);
45− }
46− }
47− return the_application_manager;
48−}
49
42
50ApplicationManager::ApplicationManager(QObject *parent)
43ApplicationManager::ApplicationManager(QObject *parent)
51 : ApplicationManagerInterface(parent)
44 : ApplicationManagerInterface(parent)
52{
45{
53− m_roleNames.insert(RoleSession, "session");
46+ DEBUG_MSG("");
54− m_roleNames.insert(RoleFullscreen, "fullscreen");
55−
56 buildListOfAvailableApplications();
47 buildListOfAvailableApplications();
57
48
58 // polling to find out when the toplevel window has been created as there's
49 // polling to find out when the toplevel window has been created as there's
@@ -61,6 +52,19 @@ ApplicationManager::ApplicationManager(QObject *parent)
61 this, &ApplicationManager::onWindowCreatedTimerTimeout);
52 this, &ApplicationManager::onWindowCreatedTimerTimeout);
62 m_windowCreatedTimer.setSingleShot(false);
53 m_windowCreatedTimer.setSingleShot(false);
63 m_windowCreatedTimer.start(200);
54 m_windowCreatedTimer.start(200);
55+
56+ Q_ASSERT(MirFocusController::instance());
57+ connect(MirFocusController::instance(), &MirFocusController::focusedSurfaceChanged,
58+ this, &ApplicationManager::updateFocusedApplication, Qt::QueuedConnection);
59+
60+
61+ // Emit signal to notify Upstart that Mir is ready to receive client connections
62+ // see http://upstart.ubuntu.com/cookbook/#expect-stop
63+ // We do this because some autopilot tests actually use this mock Unity.Application module,
64+ // so we have to mimic what the real ApplicationManager does in that regard.
65+ if (qgetenv("UNITY_MIR_EMITS_SIGSTOP") == "1") {
66+ raise(SIGSTOP);
67+ }
64}
68}
65
69
66ApplicationManager::~ApplicationManager()
70ApplicationManager::~ApplicationManager()
@@ -78,7 +82,6 @@ void ApplicationManager::onWindowCreatedTimerTimeout()
78void ApplicationManager::onWindowCreated()
82void ApplicationManager::onWindowCreated()
79{
83{
80 startApplication("unity8-dash");
84 startApplication("unity8-dash");
81− focusApplication("unity8-dash");
82}
85}
83
86
84int ApplicationManager::rowCount(const QModelIndex& parent) const {
87int ApplicationManager::rowCount(const QModelIndex& parent) const {
@@ -109,10 +112,8 @@ QVariant ApplicationManager::data(const QModelIndex& index, int role) const {
109 return app->isTouchApp();
112 return app->isTouchApp();
110 case RoleExemptFromLifecycle:
113 case RoleExemptFromLifecycle:
111 return app->exemptFromLifecycle();
114 return app->exemptFromLifecycle();
112− case RoleSession:
115+ case RoleApplication:
113− return QVariant::fromValue(app->session());
116+ return QVariant::fromValue(static_cast<unityapi::ApplicationInfoInterface*>(app));
114− case RoleFullscreen:
115− return app->fullscreen();
116 default:
117 default:
117 return QVariant();
118 return QVariant();
118 }
119 }
@@ -144,19 +145,17 @@ QModelIndex ApplicationManager::findIndex(ApplicationInfo* application)
144 return QModelIndex();
145 return QModelIndex();
145}
146}
146
147
147−void ApplicationManager::add(ApplicationInfo *application) {
148+bool ApplicationManager::add(ApplicationInfo *application) {
148 if (!application || m_runningApplications.contains(application)) {
149 if (!application || m_runningApplications.contains(application)) {
149− return;
150+ return false;
150 }
151 }
152+ DEBUG_MSG(application->appId());
153+
154+ application->setState(ApplicationInfo::Starting);
151
155
152 beginInsertRows(QModelIndex(), m_runningApplications.size(), m_runningApplications.size());
156 beginInsertRows(QModelIndex(), m_runningApplications.size(), m_runningApplications.size());
153 m_runningApplications.append(application);
157 m_runningApplications.append(application);
154
158
155− connect(application, &ApplicationInfo::sessionChanged, this, [application, this]() {
156− QModelIndex appIndex = findIndex(application);
157− if (!appIndex.isValid()) return;
158− Q_EMIT dataChanged(appIndex, appIndex, QVector<int>() << ApplicationManager::RoleSession);
159− });
160 connect(application, &ApplicationInfo::focusedChanged, this, [application, this]() {
159 connect(application, &ApplicationInfo::focusedChanged, this, [application, this]() {
161 QModelIndex appIndex = findIndex(application);
160 QModelIndex appIndex = findIndex(application);
162 if (!appIndex.isValid()) return;
161 if (!appIndex.isValid()) return;
@@ -173,19 +172,27 @@ void ApplicationManager::add(ApplicationInfo *application) {
173 Q_EMIT dataChanged(appIndex, appIndex, QVector<int>() << ApplicationManager::RoleStage);
172 Q_EMIT dataChanged(appIndex, appIndex, QVector<int>() << ApplicationManager::RoleStage);
174 });
173 });
175
174
175+ connect(application, &ApplicationInfo::closed, this, [application, this]() {
176+ this->remove(application);
177+ });
178+ connect(application, &ApplicationInfo::focusRequested, this, [application, this]() {
179+ Q_EMIT this->focusRequested(application->appId());
180+ });
181+
176 endInsertRows();
182 endInsertRows();
177− Q_EMIT applicationAdded(application->appId());
178 Q_EMIT countChanged();
183 Q_EMIT countChanged();
179 if (count() == 1) Q_EMIT emptyChanged(isEmpty()); // was empty but not anymore
184 if (count() == 1) Q_EMIT emptyChanged(isEmpty()); // was empty but not anymore
185+
186+ return true;
180}
187}
181
188
182void ApplicationManager::remove(ApplicationInfo *application) {
189void ApplicationManager::remove(ApplicationInfo *application) {
183 int i = m_runningApplications.indexOf(application);
190 int i = m_runningApplications.indexOf(application);
184 if (i != -1) {
191 if (i != -1) {
192+ DEBUG_MSG(application->appId());
185 beginRemoveRows(QModelIndex(), i, i);
193 beginRemoveRows(QModelIndex(), i, i);
186 m_runningApplications.removeAt(i);
194 m_runningApplications.removeAt(i);
187 endRemoveRows();
195 endRemoveRows();
188− Q_EMIT applicationRemoved(application->appId());
189 Q_EMIT countChanged();
196 Q_EMIT countChanged();
190 if (isEmpty()) Q_EMIT emptyChanged(isEmpty());
197 if (isEmpty()) Q_EMIT emptyChanged(isEmpty());
191 }
198 }
@@ -209,18 +216,29 @@ void ApplicationManager::move(int from, int to) {
209ApplicationInfo* ApplicationManager::startApplication(const QString &appId,
216ApplicationInfo* ApplicationManager::startApplication(const QString &appId,
210 const QStringList &arguments)
217 const QStringList &arguments)
211{
218{
219+ DEBUG_MSG(appId);
212 Q_UNUSED(arguments)
220 Q_UNUSED(arguments)
213− ApplicationInfo *application = add(appId);
221+
222+ ApplicationInfo *application = findApplication(appId);
223+ if (application) {
224+ // the requested app is already running
225+ return application;
226+ } else {
227+ application = add(appId);
228+ }
229+
230+ // most likely not among the available ones
214 if (!application)
231 if (!application)
215− return 0;
232+ return nullptr;
216− application->setState(ApplicationInfo::Starting);
233+
234+ Q_EMIT application->focusRequested(); // we assume that an application that's starting up wants focus
217
235
218 return application;
236 return application;
219}
237}
220
238
221ApplicationInfo* ApplicationManager::add(QString appId)
239ApplicationInfo* ApplicationManager::add(QString appId)
222{
240{
223− ApplicationInfo *application = 0;
241+ ApplicationInfo *application = nullptr;
224
242
225 for (ApplicationInfo *availableApp : m_availableApplications) {
243 for (ApplicationInfo *availableApp : m_availableApplications) {
226 if (availableApp->appId() == appId) {
244 if (availableApp->appId() == appId) {
@@ -229,23 +247,23 @@ ApplicationInfo* ApplicationManager::add(QString appId)
229 }
247 }
230 }
248 }
231
249
232− if (application)
250+ if (application) {
233− add(application);
251+ if (!add(application)) {
252+ application = nullptr;
253+ }
254+ }
234
255
235 return application;
256 return application;
236}
257}
237
258
238bool ApplicationManager::stopApplication(const QString &appId)
259bool ApplicationManager::stopApplication(const QString &appId)
239{
260{
261+ DEBUG_MSG(appId);
240 ApplicationInfo *application = findApplication(appId);
262 ApplicationInfo *application = findApplication(appId);
241 if (application == nullptr)
263 if (application == nullptr)
242 return false;
264 return false;
243
265
244− if (application->appId() == focusedApplicationId()) {
266+ application->close();
245− unfocusCurrentApplication();
246− }
247− application->setState(ApplicationInfo::Stopped);
248− remove(application);
249 return true;
267 return true;
250}
268}
251
269
@@ -258,44 +276,17 @@ QString ApplicationManager::focusedApplicationId() const {
258 return QString();
276 return QString();
259}
277}
260
278
261−bool ApplicationManager::focusApplication(const QString &appId)
279+bool ApplicationManager::requestFocusApplication(const QString &appId)
262{
280{
263 ApplicationInfo *application = findApplication(appId);
281 ApplicationInfo *application = findApplication(appId);
264 if (application == nullptr)
282 if (application == nullptr)
265 return false;
283 return false;
266
284
267− // unfocus currently focused app
285+ application->requestFocus();
268− for (ApplicationInfo *app : m_runningApplications) {
269− if (app->focused()) {
270− app->setFocused(false);
271− }
272− }
273−
274− // focus this app
275− application->setFocused(true);
276
286
277− // move app to top of stack
278− move(m_runningApplications.indexOf(application), 0);
279− Q_EMIT focusedApplicationIdChanged();
280 return true;
287 return true;
281}
288}
282
289
283−bool ApplicationManager::requestFocusApplication(const QString &appId)
284−{
285− QMetaObject::invokeMethod(this, "focusRequested", Qt::QueuedConnection, Q_ARG(QString, appId));
286− return true;
287−}
288−
289−void ApplicationManager::unfocusCurrentApplication()
290−{
291− for (ApplicationInfo *app : m_runningApplications) {
292− if (app->focused()) {
293− app->setFocused(false);
294− }
295− }
296− Q_EMIT focusedApplicationIdChanged();
297−}
298−
299void ApplicationManager::buildListOfAvailableApplications()
290void ApplicationManager::buildListOfAvailableApplications()
300{
291{
301 /*
292 /*
@@ -328,7 +319,6 @@ void ApplicationManager::buildListOfAvailableApplications()
328 application->setName("Camera");
319 application->setName("Camera");
329 application->setScreenshotId("camera");
320 application->setScreenshotId("camera");
330 application->setIconId("camera");
321 application->setIconId("camera");
331− application->setShellChrome(Mir::LowChrome);
332 application->setFullscreen(true);
322 application->setFullscreen(true);
333 application->setSupportedOrientations(Qt::PortraitOrientation
323 application->setSupportedOrientations(Qt::PortraitOrientation
334 | Qt::LandscapeOrientation
324 | Qt::LandscapeOrientation
@@ -473,3 +463,48 @@ bool ApplicationManager::isEmpty() const
473{
463{
474 return m_runningApplications.isEmpty();
464 return m_runningApplications.isEmpty();
475}
465}
466+
467+void ApplicationManager::updateFocusedApplication()
468+{
469+ ApplicationInfo *focusedApplication = nullptr;
470+ ApplicationInfo *previouslyFocusedApplication = nullptr;
471+
472+ auto controller = MirFocusController::instance();
473+ if (!controller) {
474+ return;
475+ }
476+
477+ MirSurface *surface = static_cast<MirSurface*>(controller->focusedSurface());
478+ if (surface) {
479+ focusedApplication = findApplication(surface);
480+ }
481+
482+ surface = static_cast<MirSurface*>(controller->previouslyFocusedSurface());
483+ if (surface) {
484+ previouslyFocusedApplication = findApplication(surface);
485+ }
486+
487+ if (focusedApplication != previouslyFocusedApplication) {
488+ if (focusedApplication) {
489+ DEBUG_MSG("focused " << focusedApplication->appId());
490+ Q_EMIT focusedApplication->focusedChanged(true);
491+ this->move(this->m_runningApplications.indexOf(focusedApplication), 0);
492+ }
493+ if (previouslyFocusedApplication) {
494+ DEBUG_MSG("unfocused " << previouslyFocusedApplication->appId());
495+ Q_EMIT previouslyFocusedApplication->focusedChanged(false);
496+ }
497+ Q_EMIT focusedApplicationIdChanged();
498+ }
499+}
500+
501+ApplicationInfo *ApplicationManager::findApplication(MirSurface* surface)
502+{
503+ for (ApplicationInfo *app : m_runningApplications) {
504+ auto surfaceList = static_cast<MirSurfaceListModel*>(app->surfaceList());
505+ if (surfaceList->contains(surface)) {
506+ return app;
507+ }
508+ }
509+ return nullptr;
510+}
tests/mocks/Unity/Application/ApplicationManager.h+12−14
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2013-2014 Canonical, Ltd.
2+ * Copyright (C) 2013-2016 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -26,12 +26,19 @@
26// unity-api
26// unity-api
27#include <unity/shell/application/ApplicationManagerInterface.h>
27#include <unity/shell/application/ApplicationManagerInterface.h>
28
28
29+namespace unity {
30+ namespace shell {
31+ namespace application {
32+ class MirSurfaceInterface;
33+ }
34+ }
35+}
36+
29class QQuickItem;
37class QQuickItem;
30using namespace unity::shell::application;
38using namespace unity::shell::application;
31
39
32class ApplicationManager : public ApplicationManagerInterface {
40class ApplicationManager : public ApplicationManagerInterface {
33 Q_OBJECT
41 Q_OBJECT
34− Q_FLAGS(ExecFlags)
35
42
36 Q_PROPERTY(bool empty READ isEmpty NOTIFY emptyChanged)
43 Q_PROPERTY(bool empty READ isEmpty NOTIFY emptyChanged)
37 Q_PROPERTY(QStringList availableApplications READ availableApplications NOTIFY availableApplicationsChanged)
44 Q_PROPERTY(QStringList availableApplications READ availableApplications NOTIFY availableApplicationsChanged)
@@ -40,13 +47,6 @@ class ApplicationManager : public ApplicationManagerInterface {
40 ApplicationManager(QObject *parent = nullptr);
47 ApplicationManager(QObject *parent = nullptr);
41 virtual ~ApplicationManager();
48 virtual ~ApplicationManager();
42
49
43− static ApplicationManager *singleton();
44−
45− enum MoreRoles {
46− RoleSession = RoleExemptFromLifecycle+1,
47− RoleFullscreen,
48− };
49−
50 // QAbstractItemModel methods.
50 // QAbstractItemModel methods.
51 int rowCount(const QModelIndex& parent = QModelIndex()) const override;
51 int rowCount(const QModelIndex& parent = QModelIndex()) const override;
52 QVariant data(const QModelIndex& index, int role) const override;
52 QVariant data(const QModelIndex& index, int role) const override;
@@ -57,8 +57,6 @@ class ApplicationManager : public ApplicationManagerInterface {
57
57
58 // Application control methods
58 // Application control methods
59 Q_INVOKABLE bool requestFocusApplication(const QString &appId) override;
59 Q_INVOKABLE bool requestFocusApplication(const QString &appId) override;
60− Q_INVOKABLE bool focusApplication(const QString &appId) override;
61− Q_INVOKABLE void unfocusCurrentApplication() override;
62 Q_INVOKABLE ApplicationInfo *startApplication(const QString &appId, const QStringList &arguments = QStringList()) override;
60 Q_INVOKABLE ApplicationInfo *startApplication(const QString &appId, const QStringList &arguments = QStringList()) override;
63 Q_INVOKABLE bool stopApplication(const QString &appId) override;
61 Q_INVOKABLE bool stopApplication(const QString &appId) override;
64
62
@@ -79,17 +77,17 @@ class ApplicationManager : public ApplicationManagerInterface {
79
77
80 private Q_SLOTS:
78 private Q_SLOTS:
81 void onWindowCreatedTimerTimeout();
79 void onWindowCreatedTimerTimeout();
80+ void updateFocusedApplication();
82
81
83 private:
82 private:
84− void add(ApplicationInfo *application);
83+ bool add(ApplicationInfo *application);
85 void remove(ApplicationInfo* application);
84 void remove(ApplicationInfo* application);
86 void buildListOfAvailableApplications();
85 void buildListOfAvailableApplications();
87 void onWindowCreated();
86 void onWindowCreated();
87+ ApplicationInfo *findApplication(MirSurface* surface);
88 QList<ApplicationInfo*> m_runningApplications;
88 QList<ApplicationInfo*> m_runningApplications;
89 QList<ApplicationInfo*> m_availableApplications;
89 QList<ApplicationInfo*> m_availableApplications;
90 QTimer m_windowCreatedTimer;
90 QTimer m_windowCreatedTimer;
91−
92− static ApplicationManager *the_application_manager;
93};
91};
94
92
95Q_DECLARE_METATYPE(ApplicationManager*)
93Q_DECLARE_METATYPE(ApplicationManager*)
tests/mocks/Unity/Application/ApplicationScreenshotProvider.cppdeleted−79
@@ -1,79 +0,0 @@
1−/*
2− * Copyright (C) 2014 Canonical, Ltd.
3− *
4− * This program is free software: you can redistribute it and/or modify it under
5− * the terms of the GNU Lesser General Public License version 3, as published by
6− * the Free Software Foundation.
7− *
8− * This program is distributed in the hope that it will be useful, but WITHOUT
9− * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
10− * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11− * Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−#include "ApplicationScreenshotProvider.h"
18−#include "ApplicationManager.h"
19−#include "ApplicationInfo.h"
20−
21−#include "paths.h"
22−
23−#include <QDebug>
24−#include <QGuiApplication>
25−#include <QWindow>
26−#include <QQuickWindow>
27−
28−ApplicationScreenshotProvider::ApplicationScreenshotProvider(ApplicationManager *appManager)
29− : QQuickImageProvider(QQuickImageProvider::Image)
30− , m_appManager(appManager)
31−{
32−}
33−
34−QImage ApplicationScreenshotProvider::requestImage(const QString &imageId, QSize * size,
35− const QSize &requestedSize)
36−{
37− // We ignore requestedSize here intentionally to avoid keeping scaled copies around
38− Q_UNUSED(requestedSize)
39−
40− QString appId = imageId.split('/').first();
41−
42− ApplicationInfo* app = static_cast<ApplicationInfo*>(m_appManager->findApplication(appId));
43− if (app == nullptr) {
44− return QImage();
45− }
46−
47− QString screenshot = app->screenshot();
48− // QImage doesn't understand qrc:/// but we have QUrls in use which don't like the empty protcol ":/"
49− screenshot.replace("qrc:///", ":/");
50−
51− QImage image;
52− if (!image.load(screenshot)) {
53− qWarning() << "failed loading app image" << screenshot;
54− }
55−
56−
57− if (app->stage() == ApplicationInfo::SideStage) {
58− QByteArray gus = qgetenv("GRID_UNIT_PX");
59− if (gus.isEmpty() || gus.toInt() == 0) {
60− gus = "8";
61− }
62− image = image.scaledToWidth(gus.toInt() * 48);
63− } else {
64− // Lets scale main stage applications to be the size of the screen/window.
65− QGuiApplication *unity = qobject_cast<QGuiApplication*>(qApp);
66− Q_FOREACH (QWindow *win, unity->allWindows()) {
67− QQuickWindow *quickWin = qobject_cast<QQuickWindow*>(win);
68− if (quickWin) {
69− image = image.scaledToWidth(quickWin->width());
70− break;
71− }
72− }
73− }
74−
75− size->setWidth(image.width());
76− size->setHeight(image.height());
77−
78− return image;
79−}
tests/mocks/Unity/Application/ApplicationScreenshotProvider.hdeleted−34
@@ -1,34 +0,0 @@
1−/*
2− * Copyright (C) 201 Canonical, Ltd.
3− *
4− * This program is free software: you can redistribute it and/or modify it under
5− * the terms of the GNU Lesser General Public License version 3, as published by
6− * the Free Software Foundation.
7− *
8− * This program is distributed in the hope that it will be useful, but WITHOUT
9− * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
10− * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11− * Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−#ifndef APPLICATIONSCREENSHOTPROVIDER_H
18−#define APPLICATIONSCREENSHOTPROVIDER_H
19−
20−#include <QQuickImageProvider>
21−
22−class ApplicationManager;
23−class ApplicationScreenshotProvider : public QQuickImageProvider
24−{
25−public:
26− explicit ApplicationScreenshotProvider(ApplicationManager *appManager);
27−
28− QImage requestImage(const QString &appId, QSize *size, const QSize &requestedSize) override;
29−
30−private:
31− ApplicationManager* m_appManager;
32−};
33−
34−#endif // APPLICATIONSCREENSHOTPROVIDER_H
tests/mocks/Unity/Application/ApplicationTestInterface.cppdeleted−117
@@ -1,117 +0,0 @@
1−/*
2− * Copyright (C) 2014,2015 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−#include "ApplicationInfo.h"
18−#include "ApplicationTestInterface.h"
19−#include "ApplicationManager.h"
20−#include "SessionManager.h"
21−#include "SurfaceManager.h"
22−#include "Session.h"
23−#include "MirSurface.h"
24−
25−#include <paths.h>
26−
27−#include <QtDBus/QtDBus>
28−
29−quint32 nextId = 0;
30−
31−ApplicationTestInterface::ApplicationTestInterface(QObject* parent)
32− : QDBusAbstractAdaptor(parent)
33−{
34− QDBusConnection connection = QDBusConnection::sessionBus();
35− connection.registerService("com.canonical.Unity8");
36− connection.registerObject("/com/canonical/Unity8/Mocks", parent);
37−}
38−
39−Session* ApplicationTestInterface::addChildSession(Session* existingSession, const QString& surfaceImage, bool addSurface)
40−{
41− if (!existingSession) return nullptr;
42−
43− QUrl screenshotUrl = QString("qrc:///Unity/Application/screenshots/%2@12.png")
44− .arg(qmlDirectory())
45− .arg(surfaceImage);
46−
47− Session* session = SessionManager::singleton()->createSession(
48− QString("%1-Child%2").arg(existingSession->name())
49− .arg(existingSession->childSessions()->count()),
50− screenshotUrl);
51− existingSession->addChildSession(session);
52− if (addSurface) session->createSurface();
53−
54− return session;
55−}
56−
57−void ApplicationTestInterface::removeSession(Session* existingSession)
58−{
59− qDebug() << "ApplicationTestInterface::removeSession - " << existingSession;
60−
61− if (existingSession)
62− existingSession->setLive(false);
63−}
64−
65−void ApplicationTestInterface::removeSurface(MirSurface* existingSurface)
66−{
67− qDebug() << "ApplicationTestInterface::removeSurface - " << existingSurface;
68−
69− if (existingSurface)
70− existingSurface->setLive(false);
71−}
72−
73−quint32 ApplicationTestInterface::addChildSession(const QString& appId, quint32 existingSessionId, const QString& surfaceImage, bool addSurface)
74−{
75− qDebug() << "ApplicationTestInterface::addChildSession to " << appId;
76−
77− ApplicationInfo* application = ApplicationManager::singleton()->findApplication(appId);
78− if (!application) {
79− qDebug() << "ApplicationTestInterface::addChildSession - No application found for " << appId;
80− return 0;
81− }
82−
83− Session* parentSession = nullptr;
84− if (m_childSessions.contains(existingSessionId)) {
85− parentSession = m_childSessions[existingSessionId];
86− } else if (application->session()) {
87− parentSession = application->session();
88− } else {
89− qDebug() << "ApplicationTestInterface::addChildSession - No session for " << appId << ":" << existingSessionId;
90− return 0;
91− }
92−
93− QUrl screenshotUrl = QString("qrc:///Unity/Application/screenshots/%2@12.png")
94− .arg(qmlDirectory())
95− .arg(surfaceImage);
96−
97− quint32 sessionId = ++nextId;
98− Session* session = SessionManager::singleton()->createSession(
99− QString("%1-Child%2").arg(parentSession->name())
100− .arg(parentSession->childSessions()->count()),
101− screenshotUrl);
102− parentSession->addChildSession(session);
103− if (addSurface) { session->createSurface(); }
104− m_childSessions[sessionId] = session;
105−
106− return sessionId;
107−}
108−
109−void ApplicationTestInterface::removeSession(quint32 sessionId)
110−{
111− if (!m_childSessions.contains(sessionId)) {
112− qDebug() << "ApplicationTestInterface::removeSession - No added session for " << sessionId;
113− return;
114− }
115− Session* session = m_childSessions.take(sessionId);
116− removeSession(session);
117−}
tests/mocks/Unity/Application/ApplicationTestInterface.hdeleted−45
@@ -1,45 +0,0 @@
1−/*
2− * Copyright (C) 2014,2015 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−#ifndef APPLICATIONTESTINTERFACE_H
18−#define APPLICATIONTESTINTERFACE_H
19−
20−#include <QtDBus/QtDBus>
21−
22−class ApplicationManager;
23−class Session;
24−class MirSurface;
25−
26−class ApplicationTestInterface : public QDBusAbstractAdaptor
27−{
28− Q_OBJECT
29− Q_CLASSINFO("D-Bus Interface", "com.canonical.Unity8.Mocks.Application")
30−public:
31− ApplicationTestInterface(QObject* parent = 0);
32−
33− Q_INVOKABLE Session* addChildSession(Session* existingSession, const QString& surfaceImage, bool addSurface);
34− Q_INVOKABLE void removeSession(Session* existingSession);
35− Q_INVOKABLE void removeSurface(MirSurface* existingSurface);
36−
37−public Q_SLOTS:
38− quint32 addChildSession(const QString& appId, quint32 existingSessionId, const QString& surfaceImage, bool addSurface);
39− void removeSession(quint32 sessionId);
40−
41−private:
42− QHash<quint32, Session*> m_childSessions;
43−};
44−
45−#endif // APPLICATIONTESTINTERFACE_H
tests/mocks/Unity/Application/CMakeLists.txt+3−5
@@ -2,15 +2,11 @@ set(FakeUnityApplicationQml_SOURCES
2 plugin.cpp
2 plugin.cpp
3 ApplicationInfo.cpp
3 ApplicationInfo.cpp
4 ApplicationManager.cpp
4 ApplicationManager.cpp
5− ApplicationScreenshotProvider.cpp
6− ApplicationTestInterface.cpp
7 MirSurface.cpp
5 MirSurface.cpp
8 MirSurfaceItem.cpp
6 MirSurfaceItem.cpp
7+ MirSurfaceListModel.cpp
9 ObjectListModel.h
8 ObjectListModel.h
10− Session.cpp
11− SessionManager.cpp
12 SurfaceManager.cpp
9 SurfaceManager.cpp
13− SessionModel.h
14 UbuntuKeyboardInfo.cpp
10 UbuntuKeyboardInfo.cpp
15 VirtualKeyboard.cpp
11 VirtualKeyboard.cpp
16 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
12 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
@@ -18,6 +14,8 @@ set(FakeUnityApplicationQml_SOURCES
18 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/Mir.h
14 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/Mir.h
19 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceInterface.h
15 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceInterface.h
20 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceItemInterface.h
16 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceItemInterface.h
17+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceListInterface.h
18+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirFocusControllerInterface.h
21 resources/surfaces.qrc
19 resources/surfaces.qrc
22)
20)
23
21
tests/mocks/Unity/Application/MirSurface.cpp+191−30
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2015 Canonical, Ltd.
2+ * Copyright (C) 2015-2016 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -19,13 +19,49 @@
19#include <QDebug>
19#include <QDebug>
20#include <QQmlEngine>
20#include <QQmlEngine>
21
21
22+#define MIRSURFACE_DEBUG 0
23+
24+#if MIRSURFACE_DEBUG
25+#define DEBUG_MSG(params) qDebug().nospace() << "MirSurface[" << (void*)this << "," << m_name << "]::" << __func__ << " " << params
26+
27+const char *stateToStr(Mir::State state)
28+{
29+ switch(state) {
30+ case Mir::UnknownState:
31+ return "unknown";
32+ case Mir::RestoredState:
33+ return "restored";
34+ case Mir::MinimizedState:
35+ return "minimized";
36+ case Mir::MaximizedState:
37+ return "maximized";
38+ case Mir::VertMaximizedState:
39+ return "vert-maximized";
40+ case Mir::FullscreenState:
41+ return "fullscreen";
42+ case Mir::HorizMaximizedState:
43+ return "horiz-maximized";
44+ case Mir::HiddenState:
45+ return "hidden";
46+ default:
47+ return "???";
48+ };
49+}
50+
51+#else
52+#define DEBUG_MSG(params) ((void)0)
53+#endif
54+
55+using namespace unity::shell::application;
56+
57+MirFocusController *MirFocusController::m_instance = nullptr;
58+
22MirSurface::MirSurface(const QString& name,
59MirSurface::MirSurface(const QString& name,
23 Mir::Type type,
60 Mir::Type type,
24 Mir::State state,
61 Mir::State state,
25 const QUrl& screenshot,
62 const QUrl& screenshot,
26− const QUrl &qmlFilePath,
63+ const QUrl &qmlFilePath)
27− QObject *parent)
64+ : unity::shell::application::MirSurfaceInterface(nullptr)
28− : unity::shell::application::MirSurfaceInterface(parent)
29 , m_name(name)
65 , m_name(name)
30 , m_type(type)
66 , m_type(type)
31 , m_state(state)
67 , m_state(state)
@@ -40,17 +76,28 @@ MirSurface::MirSurface(const QString& name,
40 , m_slowToResize(false)
76 , m_slowToResize(false)
41 , m_shellChrome(Mir::NormalChrome)
77 , m_shellChrome(Mir::NormalChrome)
42{
78{
43−// qDebug() << "MirSurface::MirSurface() " << name;
79+ DEBUG_MSG("");
80+
44 QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
81 QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
45
82
46 m_delayedResizeTimer.setInterval(600);
83 m_delayedResizeTimer.setInterval(600);
47 m_delayedResizeTimer.setSingleShot(true);
84 m_delayedResizeTimer.setSingleShot(true);
48 connect(&m_delayedResizeTimer, &QTimer::timeout, this, &MirSurface::applyDelayedResize);
85 connect(&m_delayedResizeTimer, &QTimer::timeout, this, &MirSurface::applyDelayedResize);
86+
87+ m_zombieTimer.setInterval(100);
88+ m_zombieTimer.setSingleShot(true);
89+ connect(&m_zombieTimer, &QTimer::timeout, this, [this](){ this->setLive(false); });
49}
90}
50
91
51MirSurface::~MirSurface()
92MirSurface::~MirSurface()
52{
93{
53−// qDebug() << "MirSurface::~MirSurface() " << name();
94+ DEBUG_MSG("");
95+
96+ // controller instance might have been already destroyed by QQmlEngine destructor
97+ auto controller = MirFocusController::instance();
98+ if (controller && controller->focusedSurface() == this) {
99+ controller->clear();
100+ }
54}
101}
55
102
56QString MirSurface::name() const
103QString MirSurface::name() const
@@ -73,6 +120,7 @@ void MirSurface::setState(Mir::State state)
73 if (state == m_state)
120 if (state == m_state)
74 return;
121 return;
75
122
123+ DEBUG_MSG(stateToStr(state));
76 m_state = state;
124 m_state = state;
77 Q_EMIT stateChanged(state);
125 Q_EMIT stateChanged(state);
78}
126}
@@ -89,10 +137,10 @@ bool MirSurface::visible() const
89
137
90void MirSurface::setLive(bool live)
138void MirSurface::setLive(bool live)
91{
139{
92−// qDebug().nospace() << "MirSurface::setLive("<<live<<") " << name();
93 if (live == m_live)
140 if (live == m_live)
94 return;
141 return;
95
142
143+ DEBUG_MSG(live);
96 m_live = live;
144 m_live = live;
97 Q_EMIT liveChanged(live);
145 Q_EMIT liveChanged(live);
98
146
@@ -134,6 +182,20 @@ void MirSurface::setOrientationAngle(Mir::OrientationAngle angle)
134 Q_EMIT orientationAngleChanged(angle);
182 Q_EMIT orientationAngleChanged(angle);
135}
183}
136
184
185+void MirSurface::setKeymap(const QString &value)
186+{
187+ if (value != m_keymap) {
188+ DEBUG_MSG(value);
189+ m_keymap = value;
190+ Q_EMIT keymapChanged(m_keymap);
191+ }
192+}
193+
194+QString MirSurface::keymap() const
195+{
196+ return m_keymap;
197+}
198+
137Mir::ShellChrome MirSurface::shellChrome() const
199Mir::ShellChrome MirSurface::shellChrome() const
138{
200{
139 return m_shellChrome;
201 return m_shellChrome;
@@ -144,41 +206,21 @@ void MirSurface::setShellChrome(Mir::ShellChrome shellChrome)
144 if (shellChrome == m_shellChrome)
206 if (shellChrome == m_shellChrome)
145 return;
207 return;
146
208
209+ DEBUG_MSG(shellChrome);
147 m_shellChrome = shellChrome;
210 m_shellChrome = shellChrome;
148 Q_EMIT shellChromeChanged(shellChrome);
211 Q_EMIT shellChromeChanged(shellChrome);
149}
212}
150
213
151−QString MirSurface::keymapLayout() const
152−{
153− return m_keyMap.first;
154−}
155−
156−QString MirSurface::keymapVariant() const
157−{
158− return m_keyMap.second;
159−}
160−
161−void MirSurface::setKeymap(const QString &layout, const QString &variant)
162−{
163− if (layout.isEmpty()) {
164− return;
165− }
166− m_keyMap = qMakePair(layout, variant);
167− Q_EMIT keymapChanged(layout, variant);
168−}
169−
170void MirSurface::registerView(qintptr viewId)
214void MirSurface::registerView(qintptr viewId)
171{
215{
172 m_views.insert(viewId, MirSurface::View{false});
216 m_views.insert(viewId, MirSurface::View{false});
173−// qDebug().nospace() << "MirSurface[" << name() << "]::registerView(" << viewId << ")"
217+ DEBUG_MSG(viewId << " after=" << m_views.count());
174−// << " after=" << m_views.count();
175}
218}
176
219
177void MirSurface::unregisterView(qintptr viewId)
220void MirSurface::unregisterView(qintptr viewId)
178{
221{
179−// qDebug().nospace() << "MirSurface[" << name() << "]::unregisterView(" << viewId << ")"
180−// << " after=" << m_views.count() << " live=" << m_live;
181 m_views.remove(viewId);
222 m_views.remove(viewId);
223+ DEBUG_MSG(viewId << " after=" << m_views.count() << " live=" << m_live);
182 if (!m_live && m_views.count() == 0) {
224 if (!m_live && m_views.count() == 0) {
183 deleteLater();
225 deleteLater();
184 }
226 }
@@ -294,6 +336,7 @@ bool MirSurface::isSlowToResize() const
294void MirSurface::setSlowToResize(bool value)
336void MirSurface::setSlowToResize(bool value)
295{
337{
296 if (m_slowToResize != value) {
338 if (m_slowToResize != value) {
339+ DEBUG_MSG(value);
297 m_slowToResize = value;
340 m_slowToResize = value;
298 Q_EMIT slowToResizeChanged();
341 Q_EMIT slowToResizeChanged();
299 if (!m_slowToResize && m_delayedResizeTimer.isActive()) {
342 if (!m_slowToResize && m_delayedResizeTimer.isActive()) {
@@ -350,3 +393,121 @@ void MirSurface::setHeightIncrement(int value)
350 Q_EMIT heightIncrementChanged(m_heightIncrement);
393 Q_EMIT heightIncrementChanged(m_heightIncrement);
351 }
394 }
352}
395}
396+
397+void MirSurface::raise()
398+{
399+ Q_EMIT raiseRequested();
400+}
401+
402+void MirSurface::close()
403+{
404+ DEBUG_MSG("");
405+ if (!m_zombieTimer.isActive()) {
406+ m_zombieTimer.start();
407+ Q_EMIT closeRequested();
408+ }
409+}
410+
411+void MirSurface::createPromptSurface()
412+{
413+ QStringList screenshotIds = {"gallery", "map", "facebook", "camera", "browser", "music", "twitter"};
414+ int i = rand() % screenshotIds.count();
415+
416+ QUrl screenshotUrl = QString("qrc:///Unity/Application/screenshots/%1@12.png")
417+ .arg(screenshotIds[i]);
418+
419+ auto surface = new MirSurface(QString("prompt foo"),
420+ Mir::NormalType,
421+ Mir::RestoredState,
422+ screenshotUrl);
423+
424+ m_promptSurfaceList.appendSurface(surface);
425+}
426+
427+MirSurfaceListInterface* MirSurface::promptSurfaceList()
428+{
429+ return &m_promptSurfaceList;
430+}
431+
432+void MirSurface::requestFocus()
433+{
434+ DEBUG_MSG("");
435+ Q_EMIT focusRequested();
436+}
437+
438+void MirSurface::setFocused(bool value)
439+{
440+ DEBUG_MSG(value);
441+
442+ auto controller = MirFocusController::instance();
443+ // controller instance might have been already destroyed by QQmlEngine destructor
444+ if (!controller) {
445+ return;
446+ }
447+
448+ if (value) {
449+ controller->setFocusedSurface(this);
450+ } else if (controller->focusedSurface() == this) {
451+ controller->setFocusedSurface(nullptr);
452+ }
453+}
454+
455+bool MirSurface::focused() const
456+{
457+ auto controller = MirFocusController::instance();
458+
459+ // controller instance might have been already destroyed by QQmlEngine destructor
460+ return controller ? controller->focusedSurface() == this : false;
461+}
462+
463+#if MIRSURFACE_DEBUG
464+#undef DEBUG_MSG
465+#define DEBUG_MSG(params) qDebug().nospace() << "MirFocusController::" << __func__ << " " << params
466+#endif
467+
468+void MirFocusController::setFocusedSurface(MirSurfaceInterface *surface)
469+{
470+ if (m_focusedSurface == surface) {
471+ return;
472+ }
473+ DEBUG_MSG("MirSurface[" << (void*)surface << "," << (surface?surface->name():"") << "]");
474+
475+ m_previouslyFocusedSurface = m_focusedSurface;
476+ m_focusedSurface = surface;
477+
478+ if (m_previouslyFocusedSurface != m_focusedSurface) {
479+ Q_EMIT focusedSurfaceChanged();
480+ }
481+
482+ if (m_previouslyFocusedSurface) {
483+ Q_EMIT m_previouslyFocusedSurface->focusedChanged(false);
484+ }
485+
486+ if (m_focusedSurface) {
487+ Q_EMIT m_focusedSurface->focusedChanged(true);
488+ }
489+}
490+
491+MirFocusController* MirFocusController::instance()
492+{
493+ return m_instance;
494+}
495+
496+MirFocusController::MirFocusController()
497+{
498+ DEBUG_MSG("");
499+ Q_ASSERT(m_instance == nullptr);
500+ m_instance = this;
501+}
502+
503+MirFocusController::~MirFocusController()
504+{
505+ Q_ASSERT(m_instance == this);
506+ m_instance = nullptr;
507+}
508+
509+void MirFocusController::clear()
510+{
511+ m_focusedSurface = m_previouslyFocusedSurface = nullptr;
512+ Q_EMIT focusedSurfaceChanged();
513+}
tests/mocks/Unity/Application/MirSurface.h+56−12
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2015 Canonical, Ltd.
2+ * Copyright (C) 2015-2016 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -23,8 +23,31 @@
23#include <QHash>
23#include <QHash>
24
24
25// unity-api
25// unity-api
26+#include <unity/shell/application/MirFocusControllerInterface.h>
26#include <unity/shell/application/MirSurfaceInterface.h>
27#include <unity/shell/application/MirSurfaceInterface.h>
27
28
29+#include "MirSurfaceListModel.h"
30+
31+class MirSurface;
32+
33+class MirFocusController : public unity::shell::application::MirFocusControllerInterface
34+{
35+ Q_OBJECT
36+public:
37+ MirFocusController();
38+ virtual ~MirFocusController();
39+ static MirFocusController* instance();
40+
41+ void setFocusedSurface(unity::shell::application::MirSurfaceInterface *surface) override;
42+ unity::shell::application::MirSurfaceInterface* focusedSurface() const override { return m_focusedSurface; }
43+ unity::shell::application::MirSurfaceInterface* previouslyFocusedSurface() { return m_previouslyFocusedSurface; }
44+ void clear();
45+private:
46+ static MirFocusController *m_instance;
47+ unity::shell::application::MirSurfaceInterface* m_previouslyFocusedSurface{nullptr};
48+ unity::shell::application::MirSurfaceInterface* m_focusedSurface{nullptr};
49+};
50+
28class MirSurface : public unity::shell::application::MirSurfaceInterface
51class MirSurface : public unity::shell::application::MirSurfaceInterface
29{
52{
30 Q_OBJECT
53 Q_OBJECT
@@ -41,8 +64,7 @@ public:
41 Mir::Type type,
64 Mir::Type type,
42 Mir::State state,
65 Mir::State state,
43 const QUrl& screenshot,
66 const QUrl& screenshot,
44− const QUrl &qmlFilePath = QUrl(),
67+ const QUrl &qmlFilePath = QUrl());
45− QObject *parent = nullptr);
46 virtual ~MirSurface();
68 virtual ~MirSurface();
47
69
48 ////
70 ////
@@ -74,10 +96,20 @@ public:
74 int widthIncrement() const override { return m_widthIncrement; }
96 int widthIncrement() const override { return m_widthIncrement; }
75 int heightIncrement() const override { return m_heightIncrement; }
97 int heightIncrement() const override { return m_heightIncrement; }
76
98
99+ virtual void setKeymap(const QString &);
100+ virtual QString keymap() const;
101+
77 Mir::ShellChrome shellChrome() const override;
102 Mir::ShellChrome shellChrome() const override;
78− QString keymapLayout() const override;
103+
79− QString keymapVariant() const override;
104+ bool focused() const override;
80− Q_INVOKABLE void setKeymap(const QString &layout, const QString &variant) override;
105+
106+ Q_INVOKABLE void requestFocus() override;
107+
108+ Q_INVOKABLE void close() override;
109+
110+ unity::shell::application::MirSurfaceListInterface* promptSurfaceList() override;
111+
112+ Q_INVOKABLE void raise() override;
81
113
82 ////
114 ////
83 // API for tests
115 // API for tests
@@ -85,11 +117,6 @@ public:
85 Q_INVOKABLE void setLive(bool live);
117 Q_INVOKABLE void setLive(bool live);
86 Q_INVOKABLE void setShellChrome(Mir::ShellChrome shellChrome);
118 Q_INVOKABLE void setShellChrome(Mir::ShellChrome shellChrome);
87
119
88− void registerView(qintptr viewId);
89− void unregisterView(qintptr viewId);
90− void setViewVisibility(qintptr viewId, bool visible);
91− int viewCount() const { return m_views.count(); }
92−
93 int width() const;
120 int width() const;
94 int height() const;
121 int height() const;
95
122
@@ -103,6 +130,8 @@ public:
103 Q_INVOKABLE void setWidthIncrement(int);
130 Q_INVOKABLE void setWidthIncrement(int);
104 Q_INVOKABLE void setHeightIncrement(int);
131 Q_INVOKABLE void setHeightIncrement(int);
105
132
133+ Q_INVOKABLE void createPromptSurface();
134+
106 /////
135 /////
107 // internal mock stuff
136 // internal mock stuff
108
137
@@ -114,7 +143,16 @@ public:
114 bool activeFocus() const;
143 bool activeFocus() const;
115 void setActiveFocus(bool);
144 void setActiveFocus(bool);
116
145
146+ void registerView(qintptr viewId);
147+ void unregisterView(qintptr viewId);
148+ void setViewVisibility(qintptr viewId, bool visible);
149+ int viewCount() const { return m_views.count(); }
150+
151+ void setFocused(bool value);
152+
117Q_SIGNALS:
153Q_SIGNALS:
154+ ////
155+ // API for tests
118 void widthChanged();
156 void widthChanged();
119 void heightChanged();
157 void heightChanged();
120 void slowToResizeChanged();
158 void slowToResizeChanged();
@@ -123,6 +161,8 @@ Q_SIGNALS:
123 // internal mock stuff
161 // internal mock stuff
124 void screenshotUrlChanged(QUrl);
162 void screenshotUrlChanged(QUrl);
125 void activeFocusChanged(bool);
163 void activeFocusChanged(bool);
164+ void raiseRequested();
165+ void closeRequested();
126
166
127private Q_SLOTS:
167private Q_SLOTS:
128 void applyDelayedResize();
168 void applyDelayedResize();
@@ -135,6 +175,7 @@ private:
135 const Mir::Type m_type;
175 const Mir::Type m_type;
136 Mir::State m_state;
176 Mir::State m_state;
137 Mir::OrientationAngle m_orientationAngle;
177 Mir::OrientationAngle m_orientationAngle;
178+
138 QUrl m_screenshotUrl;
179 QUrl m_screenshotUrl;
139 QUrl m_qmlFilePath;
180 QUrl m_qmlFilePath;
140 bool m_live;
181 bool m_live;
@@ -150,19 +191,22 @@ private:
150 int m_widthIncrement{0};
191 int m_widthIncrement{0};
151 int m_heightIncrement{0};
192 int m_heightIncrement{0};
152
193
194+ QString m_keymap;
195+
153 bool m_slowToResize;
196 bool m_slowToResize;
154 QTimer m_delayedResizeTimer;
197 QTimer m_delayedResizeTimer;
155 QSize m_delayedResize;
198 QSize m_delayedResize;
156 QSize m_pendingResize;
199 QSize m_pendingResize;
157
200
158 Mir::ShellChrome m_shellChrome;
201 Mir::ShellChrome m_shellChrome;
202+ MirSurfaceListModel m_promptSurfaceList;
159
203
160 struct View {
204 struct View {
161 bool visible;
205 bool visible;
162 };
206 };
163 QHash<qintptr, View> m_views;
207 QHash<qintptr, View> m_views;
164
208
165− QPair<QString,QString> m_keyMap; // pair of layout+variant
209+ QTimer m_zombieTimer;
166};
210};
167
211
168#endif // MOCK_MIR_SURFACE_H
212#endif // MOCK_MIR_SURFACE_H
tests/mocks/Unity/Application/MirSurfaceItem.cpp+13−7
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2014-2015 Canonical, Ltd.
2+ * Copyright (C) 2014-2016 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -29,6 +29,14 @@
29
29
30using namespace unity::shell::application;
30using namespace unity::shell::application;
31
31
32+#define MIRSURFACEITEM_DEBUG 0
33+
34+#if MIRSURFACEITEM_DEBUG
35+#define DEBUG_MSG(params) qDebug().nospace() << "MirSurfaceItem::" << __func__ << " " << params
36+#else
37+#define DEBUG_MSG(params) ((void)0)
38+#endif
39+
32MirSurfaceItem::MirSurfaceItem(QQuickItem *parent)
40MirSurfaceItem::MirSurfaceItem(QQuickItem *parent)
33 : MirSurfaceItemInterface(parent)
41 : MirSurfaceItemInterface(parent)
34 , m_qmlSurface(nullptr)
42 , m_qmlSurface(nullptr)
@@ -41,7 +49,7 @@ MirSurfaceItem::MirSurfaceItem(QQuickItem *parent)
41 , m_mousePressCount(0)
49 , m_mousePressCount(0)
42 , m_mouseReleaseCount(0)
50 , m_mouseReleaseCount(0)
43{
51{
44−// qDebug() << "MirSurfaceItem::MirSurfaceItem() " << (void*)(this) << name();
52+ DEBUG_MSG((void*)(this) << name());
45 setAcceptedMouseButtons(Qt::LeftButton | Qt::MiddleButton | Qt::RightButton |
53 setAcceptedMouseButtons(Qt::LeftButton | Qt::MiddleButton | Qt::RightButton |
46 Qt::ExtraButton1 | Qt::ExtraButton2 | Qt::ExtraButton3 | Qt::ExtraButton4 |
54 Qt::ExtraButton1 | Qt::ExtraButton2 | Qt::ExtraButton3 | Qt::ExtraButton4 |
47 Qt::ExtraButton5 | Qt::ExtraButton6 | Qt::ExtraButton7 | Qt::ExtraButton8 |
55 Qt::ExtraButton5 | Qt::ExtraButton6 | Qt::ExtraButton7 | Qt::ExtraButton8 |
@@ -53,7 +61,7 @@ MirSurfaceItem::MirSurfaceItem(QQuickItem *parent)
53
61
54MirSurfaceItem::~MirSurfaceItem()
62MirSurfaceItem::~MirSurfaceItem()
55{
63{
56−// qDebug() << "MirSurfaceItem::~MirSurfaceItem() " << (void*)(this) << name();
64+ DEBUG_MSG((void*)(this) << name());
57 setSurface(nullptr);
65 setSurface(nullptr);
58}
66}
59
67
@@ -150,7 +158,7 @@ void MirSurfaceItem::onComponentStatusChanged(QQmlComponent::Status status)
150
158
151void MirSurfaceItem::createQmlContentItem()
159void MirSurfaceItem::createQmlContentItem()
152{
160{
153−// qDebug() << "MirSurfaceItem::createQmlContentItem()";
161+ DEBUG_MSG("");
154
162
155 m_qmlItem = qobject_cast<QQuickItem*>(m_qmlContentComponent->create());
163 m_qmlItem = qobject_cast<QQuickItem*>(m_qmlContentComponent->create());
156 m_qmlItem->setParentItem(this);
164 m_qmlItem->setParentItem(this);
@@ -213,9 +221,7 @@ void MirSurfaceItem::mouseReleaseEvent(QMouseEvent * event)
213
221
214void MirSurfaceItem::setSurface(MirSurfaceInterface* surface)
222void MirSurfaceItem::setSurface(MirSurfaceInterface* surface)
215{
223{
216−// qDebug().nospace() << "MirSurfaceItem::setSurface() this=" << (void*)(this)
224+ DEBUG_MSG("this=" << (void*)(this) << " name=" << name() << " surface=" << surface);
217−// << " name=" << name()
218−// << " surface=" << surface;
219
225
220 if (m_qmlSurface == surface) {
226 if (m_qmlSurface == surface) {
221 return;
227 return;
tests/mocks/Unity/Application/MirSurfaceListModel.cppnew file+121
@@ -0,0 +1,121 @@
1+/*
2+ * Copyright (C) 2016 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 "MirSurfaceListModel.h"
18+#include "ApplicationInfo.h"
19+
20+#include "MirSurface.h"
21+
22+#define MIRSURFACELISTMODEL_DEBUG 0
23+
24+#ifdef MIRSURFACELISTMODEL_DEBUG
25+#define DEBUG_MSG(params) qDebug().nospace() << "MirSurfaceListModel::" << __func__ << " " << params
26+#else
27+#define DEBUG_MSG(params) ((void)0)
28+#endif
29+
30+using namespace unity::shell::application;
31+
32+MirSurfaceListModel::MirSurfaceListModel(QObject *parent) :
33+ MirSurfaceListInterface(parent)
34+{
35+}
36+
37+int MirSurfaceListModel::rowCount(const QModelIndex &parent) const
38+{
39+ return !parent.isValid() ? m_surfaceList.size() : 0;
40+}
41+
42+QVariant MirSurfaceListModel::data(const QModelIndex& index, int role) const
43+{
44+ if (index.row() < 0 || index.row() >= m_surfaceList.size())
45+ return QVariant();
46+
47+ if (role == SurfaceRole) {
48+ MirSurface *surface = m_surfaceList.at(index.row());
49+ return QVariant::fromValue(static_cast<unity::shell::application::MirSurfaceInterface*>(surface));
50+ } else {
51+ return QVariant();
52+ }
53+}
54+
55+void MirSurfaceListModel::raise(MirSurface *surface)
56+{
57+ int i = m_surfaceList.indexOf(surface);
58+ if (i != -1) {
59+ moveSurface(i, 0);
60+ }
61+}
62+
63+void MirSurfaceListModel::appendSurface(MirSurface *surface)
64+{
65+ beginInsertRows(QModelIndex(), m_surfaceList.size(), m_surfaceList.size());
66+ m_surfaceList.append(surface);
67+ connectSurface(surface);
68+ endInsertRows();
69+ Q_EMIT countChanged();
70+}
71+
72+void MirSurfaceListModel::connectSurface(MirSurface *surface)
73+{
74+ connect(surface, &MirSurface::raiseRequested, this, [this, surface](){ this->raise(surface); });
75+ connect(surface, &QObject::destroyed, this, [this, surface](){ this->removeSurface(surface); });
76+}
77+
78+void MirSurfaceListModel::removeSurface(MirSurface *surface)
79+{
80+ int i = m_surfaceList.indexOf(surface);
81+ if (i != -1) {
82+ beginRemoveRows(QModelIndex(), i, i);
83+ m_surfaceList.removeAt(i);
84+ endRemoveRows();
85+ Q_EMIT countChanged();
86+ }
87+}
88+
89+void MirSurfaceListModel::moveSurface(int from, int to)
90+{
91+ if (from == to) return;
92+
93+ if (from >= 0 && from < m_surfaceList.size() && to >= 0 && to < m_surfaceList.size()) {
94+ QModelIndex parent;
95+ /* When moving an item down, the destination index needs to be incremented
96+ by one, as explained in the documentation:
97+ http://qt-project.org/doc/qt-5.0/qtcore/qabstractitemmodel.html#beginMoveRows */
98+
99+ beginMoveRows(parent, from, from, parent, to + (to > from ? 1 : 0));
100+ m_surfaceList.move(from, to);
101+ endMoveRows();
102+ }
103+}
104+
105+MirSurfaceInterface *MirSurfaceListModel::get(int index)
106+{
107+ if (index >=0 && index < m_surfaceList.count()) {
108+ return m_surfaceList[index];
109+ } else {
110+ return nullptr;
111+ }
112+}
113+
114+const MirSurfaceInterface *MirSurfaceListModel::get(int index) const
115+{
116+ if (index >=0 && index < m_surfaceList.count()) {
117+ return m_surfaceList.at(index);
118+ } else {
119+ return nullptr;
120+ }
121+}
tests/mocks/Unity/Application/MirSurfaceListModel.hnew file+56
@@ -0,0 +1,56 @@
1+/*
2+ * Copyright (C) 2016 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 MIRSURFACELISTMODEL_H
18+#define MIRSURFACELISTMODEL_H
19+
20+// unity-api
21+#include <unity/shell/application/MirSurfaceListInterface.h>
22+
23+#include <QAbstractListModel>
24+#include <QList>
25+
26+class MirSurface;
27+
28+class MirSurfaceListModel : public unity::shell::application::MirSurfaceListInterface
29+{
30+ Q_OBJECT
31+public:
32+ explicit MirSurfaceListModel(QObject *parent = 0);
33+
34+ Q_INVOKABLE unity::shell::application::MirSurfaceInterface *get(int index) override;
35+ const unity::shell::application::MirSurfaceInterface *get(int index) const;
36+
37+ // QAbstractItemModel methods
38+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
39+ QVariant data(const QModelIndex& index, int role) const override;
40+
41+ void appendSurface(MirSurface *surface);
42+ void removeSurface(MirSurface *surface);
43+
44+ bool contains(MirSurface *surface) const { return m_surfaceList.contains(surface); }
45+
46+private:
47+ void raise(MirSurface *surface);
48+ void moveSurface(int from, int to);
49+ void connectSurface(MirSurface *surface);
50+
51+ QList<MirSurface*> m_surfaceList;
52+};
53+
54+Q_DECLARE_METATYPE(MirSurfaceListModel*)
55+
56+#endif // MIRSURFACELISTMODEL_H
tests/mocks/Unity/Application/ObjectListModel.h+2
@@ -20,6 +20,8 @@
20// Qt
20// Qt
21#include <QAbstractListModel>
21#include <QAbstractListModel>
22
22
23+#include <QDebug>
24+
23template<class TYPE>
25template<class TYPE>
24class ObjectListModel : public QAbstractListModel
26class ObjectListModel : public QAbstractListModel
25{
27{
tests/mocks/Unity/Application/Session.cppdeleted−209
@@ -1,209 +0,0 @@
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 "Session.h"
18−#include "ApplicationInfo.h"
19−#include "SessionManager.h"
20−#include "SurfaceManager.h"
21−
22−#include <QPainter>
23−#include <QQmlEngine>
24−#include <QTimer>
25−
26−Session::Session(const QString &name,
27− const QUrl& screenshot,
28− QObject *parent)
29− : QObject(parent)
30− , m_name(name)
31− , m_live(true)
32− , m_screenshot(screenshot)
33− , m_application(nullptr)
34− , m_surface(nullptr)
35− , m_parentSession(nullptr)
36− , m_children(new SessionModel(this))
37− , m_fullscreen(false)
38−{
39−// qDebug() << "Session::Session() " << this->name();
40−
41− QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
42−}
43−
44−Session::~Session()
45−{
46−// qDebug() << "Session::~Session() " << name();
47−
48− QList<Session*> children(m_children->list());
49− for (Session* child : children) {
50− delete child;
51− }
52− if (m_parentSession) {
53− m_parentSession->removeChildSession(this);
54− }
55− if (m_application) {
56− m_application->setSession(nullptr);
57− }
58− delete m_children;
59−
60− if (m_surface) {
61− if (m_surface->viewCount() == 0) {
62− delete m_surface;
63− } else {
64− m_surface->setLive(false);
65− }
66− }
67−}
68−
69−void Session::release()
70−{
71−// qDebug() << "Session::release " << name();
72− deleteLater();
73−}
74−
75−void Session::updateFullscreenProperty()
76−{
77− if (m_surfaces.rowCount() > 0) {
78− // TODO: Figure out something better
79− setFullscreen(lastSurface()->state() == Mir::FullscreenState);
80− } else {
81− // Keep the current value of the fullscreen property until we get a new
82− // surface
83− }
84−}
85−
86−void Session::setFullscreen(bool fullscreen)
87−{
88− if (m_fullscreen != fullscreen) {
89− m_fullscreen = fullscreen;
90− Q_EMIT fullscreenChanged(m_fullscreen);
91− }
92−}
93−
94−void Session::setApplication(ApplicationInfo* application)
95−{
96− if (m_application == application)
97− return;
98−
99− m_application = application;
100− Q_EMIT applicationChanged(application);
101−}
102−
103−void Session::appendSurface(MirSurface* surface)
104−{
105− qDebug() << "Session::appendSurface - session=" << name() << "surface=" << surface;
106−
107− m_surfaces.insert(m_surfaces.rowCount(), surface);
108−
109− connect(surface, &MirSurfaceInterface::stateChanged, this, &Session::updateFullscreenProperty);
110− connect(surface, &QObject::destroyed,
111− this, [this, surface]() { this->removeSurface(surface); });
112−
113− Q_EMIT lastSurfaceChanged(surface);
114− Q_EMIT surfaceAdded(surface);
115−
116− updateFullscreenProperty();
117−}
118−
119−void Session::removeSurface(MirSurface* surface)
120−{
121− disconnect(surface, nullptr, this, nullptr);
122− if (m_surfaces.contains(surface)) {
123− m_surfaces.remove(surface);
124− }
125−
126− updateFullscreenProperty();
127−}
128−
129−void Session::setScreenshot(const QUrl& screenshot)
130−{
131− if (screenshot != m_screenshot) {
132− m_screenshot = screenshot;
133− if (m_surface) {
134− m_surface->setScreenshotUrl(m_screenshot);
135− }
136− }
137−}
138−
139−void Session::setLive(bool live)
140−{
141− if (m_live != live) {
142− m_live = live;
143− Q_EMIT liveChanged(m_live);
144− }
145−}
146−
147−void Session::setParentSession(Session* session)
148−{
149− if (m_parentSession == session || session == this)
150− return;
151−
152− m_parentSession = session;
153− Q_EMIT parentSessionChanged(session);
154−}
155−
156−void Session::createSurface()
157−{
158− if (m_surface) return;
159−
160− appendSurface(SurfaceManager::singleton()->createSurface(name(),
161− Mir::NormalType,
162− m_application && m_application->fullscreen() ? Mir::FullscreenState :
163− Mir::MaximizedState,
164− m_screenshot));
165−}
166−
167−void Session::addChildSession(Session* session)
168−{
169− insertChildSession(m_children->rowCount(), session);
170−}
171−
172−void Session::insertChildSession(uint index, Session* session)
173−{
174− qDebug() << "Session::insertChildSession - " << session->name() << " to " << name() << " @ " << index;
175−
176− session->setParentSession(this);
177− m_children->insert(index, session);
178− SessionManager::singleton()->registerSession(session);
179−}
180−
181−void Session::removeChildSession(Session* session)
182−{
183− qDebug() << "Session::removeChildSession - " << session->name() << " from " << name();
184−
185− if (m_children->contains(session)) {
186− m_children->remove(session);
187− session->setParentSession(nullptr);
188− Q_EMIT session->deregister();
189− }
190−}
191−
192−SessionModel* Session::childSessions() const
193−{
194− return m_children;
195−}
196−
197−ObjectListModel<MirSurface>* Session::surfaces() const
198−{
199− return const_cast<ObjectListModel<MirSurface>*>(&m_surfaces);
200−}
201−
202−MirSurface *Session::lastSurface() const
203−{
204− if (m_surfaces.rowCount() > 0) {
205− return m_surfaces.list().last();
206− } else {
207− return nullptr;
208− }
209−}
tests/mocks/Unity/Application/Session.hdeleted−104
@@ -1,104 +0,0 @@
1−/*
2− * Copyright (C) 2014,2015 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−#ifndef SESSION_H
18−#define SESSION_H
19−
20−#include "ObjectListModel.h"
21−#include "SessionModel.h"
22−
23−#include <QQuickItem>
24−
25−class ApplicationInfo;
26−class MirSurface;
27−
28−class Session : public QObject
29−{
30− Q_OBJECT
31− Q_PROPERTY(QString name READ name CONSTANT)
32− Q_PROPERTY(MirSurface* lastSurface READ lastSurface NOTIFY lastSurfaceChanged)
33− Q_PROPERTY(ObjectListModel<MirSurface>* surfaces READ surfaces CONSTANT)
34− Q_PROPERTY(ApplicationInfo* application READ application NOTIFY applicationChanged)
35− Q_PROPERTY(Session* parentSession READ parentSession NOTIFY parentSessionChanged DESIGNABLE false)
36− Q_PROPERTY(SessionModel* childSessions READ childSessions DESIGNABLE false CONSTANT)
37− Q_PROPERTY(bool live READ live NOTIFY liveChanged)
38−
39−public:
40− explicit Session(const QString &name,
41− const QUrl& screenshot,
42− QObject *parent = 0);
43− ~Session();
44−
45− Q_INVOKABLE void release();
46−
47− //getters
48− QString name() const { return m_name; }
49− bool live() const { return m_live; }
50− bool fullscreen() const { return m_fullscreen; }
51− ApplicationInfo* application() const { return m_application; }
52− MirSurface *lastSurface() const;
53− ObjectListModel<MirSurface>* surfaces() const;
54− Session* parentSession() const { return m_parentSession; }
55−
56− void setApplication(ApplicationInfo* item);
57− void appendSurface(MirSurface* surface);
58− void removeSurface(MirSurface* surface);
59− void setScreenshot(const QUrl& m_screenshot);
60− void setLive(bool live);
61− void setFullscreen(bool fullscreen);
62−
63− Q_INVOKABLE void addChildSession(Session* session);
64− void insertChildSession(uint index, Session* session);
65− Q_INVOKABLE void removeChildSession(Session* session);
66−
67−Q_SIGNALS:
68− void applicationChanged(ApplicationInfo*);
69− void parentSessionChanged(Session*);
70− void liveChanged(bool live);
71− void surfaceAdded(MirSurface *surface);
72− void lastSurfaceChanged(MirSurface *surface);
73− void fullscreenChanged(bool fullscreen);
74−
75− // internal mock use
76− void deregister();
77−
78−public Q_SLOTS:
79− Q_INVOKABLE void createSurface();
80−
81−private Q_SLOTS:
82− void updateFullscreenProperty();
83−
84−private:
85− SessionModel* childSessions() const;
86− void setParentSession(Session* session);
87−
88− QString m_name;
89− bool m_live;
90− QUrl m_screenshot;
91− ApplicationInfo* m_application;
92− MirSurface* m_surface;
93− Session* m_parentSession;
94− SessionModel* m_children;
95− ObjectListModel<MirSurface> m_surfaces;
96− bool m_fullscreen;
97−
98− friend class ApplicationTestInterface;
99−};
100−
101−Q_DECLARE_METATYPE(Session*)
102−Q_DECLARE_METATYPE(ObjectListModel<MirSurface>*)
103−
104−#endif // SESSION_H
tests/mocks/Unity/Application/SessionManager.cppdeleted−55
@@ -1,55 +0,0 @@
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 "SessionManager.h"
18−
19−#include "Session.h"
20−
21−SessionManager *SessionManager::the_session_manager = nullptr;
22−
23−SessionManager *SessionManager::singleton()
24−{
25− if (!the_session_manager) {
26− the_session_manager = new SessionManager();
27− }
28− return the_session_manager;
29−}
30−
31−SessionManager::SessionManager(QObject *parent) :
32− QObject(parent)
33−{
34−}
35−
36−
37−Session *SessionManager::createSession(const QString& name,
38− const QUrl& screenshot)
39−{
40− Session* session = new Session(name, screenshot);
41− Q_EMIT sessionStarting(session);
42− return session;
43−}
44−
45−void SessionManager::registerSession(Session *session)
46−{
47− connect(session, &Session::deregister, this, [this] {
48− Session* session = qobject_cast<Session*>(sender());
49−
50− disconnect(session, 0, this, 0);
51−
52− session->setLive(false);
53− Q_EMIT sessionStopping(session);
54− });
55−}
tests/mocks/Unity/Application/SessionModel.hdeleted−35
@@ -1,35 +0,0 @@
1−/*
2− * Copyright (C) 2014 Canonical, Ltd.
3− *
4− * This program is free software: you can redistribute it and/or modify it under
5− * the terms of the GNU Lesser General Public License version 3, as published by
6− * the Free Software Foundation.
7− *
8− * This program is distributed in the hope that it will be useful, but WITHOUT
9− * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
10− * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11− * Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−#ifndef SESSIONMODEL_H
18−#define SESSIONMODEL_H
19−
20−// Local
21−#include "ObjectListModel.h"
22−
23−class Session;
24−class SessionModel: public ObjectListModel<Session>
25−{
26− Q_OBJECT
27−public:
28− SessionModel(QObject *parent = 0): ObjectListModel(parent) {}
29−
30− Q_INVOKABLE int count() const { return rowCount(); }
31−};
32−
33−Q_DECLARE_METATYPE(SessionModel*)
34−
35−#endif // SESSIONMODEL_H
tests/mocks/Unity/Application/SurfaceManager.cpp+16−9
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2014-2015 Canonical, Ltd.
2+ * Copyright (C) 2014-2016 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -16,17 +16,15 @@
16
16
17#include "SurfaceManager.h"
17#include "SurfaceManager.h"
18
18
19+#include "ApplicationInfo.h"
19#include "VirtualKeyboard.h"
20#include "VirtualKeyboard.h"
20
21
21#include <paths.h>
22#include <paths.h>
22
23
23SurfaceManager *SurfaceManager::the_surface_manager = nullptr;
24SurfaceManager *SurfaceManager::the_surface_manager = nullptr;
24
25
25−SurfaceManager *SurfaceManager::singleton()
26+SurfaceManager *SurfaceManager::instance()
26{
27{
27− if (!the_surface_manager) {
28− the_surface_manager = new SurfaceManager();
29− }
30 return the_surface_manager;
28 return the_surface_manager;
31}
29}
32
30
@@ -34,7 +32,10 @@ SurfaceManager::SurfaceManager(QObject *parent) :
34 QObject(parent)
32 QObject(parent)
35 , m_virtualKeyboard(nullptr)
33 , m_virtualKeyboard(nullptr)
36{
34{
37− m_virtualKeyboard = new VirtualKeyboard(this);
35+ Q_ASSERT(the_surface_manager == nullptr);
36+ the_surface_manager = this;
37+
38+ m_virtualKeyboard = new VirtualKeyboard;
38 connect(m_virtualKeyboard, &QObject::destroyed, this, [this](QObject *obj) {
39 connect(m_virtualKeyboard, &QObject::destroyed, this, [this](QObject *obj) {
39 MirSurface* surface = qobject_cast<MirSurface*>(obj);
40 MirSurface* surface = qobject_cast<MirSurface*>(obj);
40 m_virtualKeyboard = nullptr;
41 m_virtualKeyboard = nullptr;
@@ -43,10 +44,16 @@ SurfaceManager::SurfaceManager(QObject *parent) :
43 });
44 });
44}
45}
45
46
47+SurfaceManager::~SurfaceManager()
48+{
49+ Q_ASSERT(the_surface_manager == this);
50+ the_surface_manager = nullptr;
51+}
52+
46MirSurface *SurfaceManager::createSurface(const QString& name,
53MirSurface *SurfaceManager::createSurface(const QString& name,
47− Mir::Type type,
54+ Mir::Type type,
48− Mir::State state,
55+ Mir::State state,
49− const QUrl& screenshot)
56+ const QUrl& screenshot)
50{
57{
51 MirSurface* surface = new MirSurface(name, type, state, screenshot);
58 MirSurface* surface = new MirSurface(name, type, state, screenshot);
52 connect(surface, &QObject::destroyed, this, [this](QObject *obj) {
59 connect(surface, &QObject::destroyed, this, [this](QObject *obj) {
tests/mocks/Unity/Application/SurfaceManager.h+5−2
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2014-2015 Canonical, Ltd.
2+ * Copyright (C) 2014-2016 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -22,6 +22,8 @@
22#include "MirSurface.h"
22#include "MirSurface.h"
23#include "VirtualKeyboard.h"
23#include "VirtualKeyboard.h"
24
24
25+class ApplicationInfo;
26+
25class SurfaceManager : public QObject
27class SurfaceManager : public QObject
26{
28{
27 Q_OBJECT
29 Q_OBJECT
@@ -35,8 +37,9 @@ class SurfaceManager : public QObject
35
37
36public:
38public:
37 explicit SurfaceManager(QObject *parent = 0);
39 explicit SurfaceManager(QObject *parent = 0);
40+ virtual ~SurfaceManager();
38
41
39− static SurfaceManager *singleton();
42+ static SurfaceManager *instance();
40
43
41 Q_INVOKABLE MirSurface* createSurface(const QString& name,
44 Q_INVOKABLE MirSurface* createSurface(const QString& name,
42 Mir::Type type,
45 Mir::Type type,
tests/mocks/Unity/Application/UbuntuKeyboardInfo.cpp−2
@@ -16,8 +16,6 @@
16
16
17#include "UbuntuKeyboardInfo.h"
17#include "UbuntuKeyboardInfo.h"
18
18
19−UbuntuKeyboardInfo *UbuntuKeyboardInfo::m_instance = nullptr;
20−
21UbuntuKeyboardInfo::UbuntuKeyboardInfo(QObject *parent)
19UbuntuKeyboardInfo::UbuntuKeyboardInfo(QObject *parent)
22 : QObject(parent),
20 : QObject(parent),
23 m_x(0),
21 m_x(0),
tests/mocks/Unity/Application/UbuntuKeyboardInfo.h−9
@@ -40,13 +40,6 @@ public:
40 void setWidth(qreal value);
40 void setWidth(qreal value);
41 void setHeight(qreal value);
41 void setHeight(qreal value);
42
42
43− static UbuntuKeyboardInfo *singleton() {
44− if (!m_instance) {
45− m_instance = new UbuntuKeyboardInfo;
46− }
47− return m_instance;
48− }
49−
50Q_SIGNALS:
43Q_SIGNALS:
51 void xChanged(qreal x);
44 void xChanged(qreal x);
52 void yChanged(qreal y);
45 void yChanged(qreal y);
@@ -59,8 +52,6 @@ private:
59 qint32 m_y;
52 qint32 m_y;
60 qint32 m_width;
53 qint32 m_width;
61 qint32 m_height;
54 qint32 m_height;
62−
63− static UbuntuKeyboardInfo *m_instance;
64};
55};
65
56
66#endif // UBUNTU_KEYBOARD_INFO_H
57#endif // UBUNTU_KEYBOARD_INFO_H
tests/mocks/Unity/Application/VirtualKeyboard.cpp+2−3
@@ -22,13 +22,12 @@
22
22
23#include <QDebug>
23#include <QDebug>
24
24
25−VirtualKeyboard::VirtualKeyboard(QObject *parent)
25+VirtualKeyboard::VirtualKeyboard()
26 : MirSurface("input-method",
26 : MirSurface("input-method",
27 Mir::InputMethodType,
27 Mir::InputMethodType,
28 Mir::MinimizedState,
28 Mir::MinimizedState,
29 QUrl("qrc:///Unity/Application/vkb_portrait.png"),
29 QUrl("qrc:///Unity/Application/vkb_portrait.png"),
30− QUrl("qrc:///Unity/Application/VirtualKeyboard.qml"),
30+ QUrl("qrc:///Unity/Application/VirtualKeyboard.qml"))
31− parent)
32{
31{
33}
32}
34
33
tests/mocks/Unity/Application/VirtualKeyboard.h+1−1
@@ -25,7 +25,7 @@ class VirtualKeyboard : public MirSurface
25{
25{
26 Q_OBJECT
26 Q_OBJECT
27public:
27public:
28− explicit VirtualKeyboard(QObject *parent = nullptr);
28+ explicit VirtualKeyboard();
29 ~VirtualKeyboard();
29 ~VirtualKeyboard();
30};
30};
31
31
tests/mocks/Unity/Application/plugin.cpp+33−38
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2013-2015 Canonical, Ltd.
2+ * Copyright (C) 2013-2016 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -17,12 +17,8 @@
17#include "plugin.h"
17#include "plugin.h"
18#include "ApplicationInfo.h"
18#include "ApplicationInfo.h"
19#include "ApplicationManager.h"
19#include "ApplicationManager.h"
20−#include "ApplicationScreenshotProvider.h"
21−#include "Session.h"
22#include "MirSurfaceItem.h"
20#include "MirSurfaceItem.h"
23#include "SurfaceManager.h"
21#include "SurfaceManager.h"
24−#include "SessionManager.h"
25−#include "ApplicationTestInterface.h"
26#include "UbuntuKeyboardInfo.h"
22#include "UbuntuKeyboardInfo.h"
27
23
28// unity-api
24// unity-api
@@ -31,62 +27,65 @@
31#include <qqml.h>
27#include <qqml.h>
32#include <QQmlEngine>
28#include <QQmlEngine>
33
29
34−static QObject* applicationManagerSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
30+namespace {
35− Q_UNUSED(engine);
36− Q_UNUSED(scriptEngine);
37− return ApplicationManager::singleton();
38−}
39
31
40−static QObject* surfaceManagerSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
32+// Creates the singletons that are called throughout C++ code
41− Q_UNUSED(engine);
33+void createUnityApplicationSharedSingletons()
42− Q_UNUSED(scriptEngine);
34+{
43− return SurfaceManager::singleton();
35+ // they have to be created in a specific order
36+ if (!MirFocusController::instance()) {
37+ new MirFocusController;
38+ }
39+ if (!SurfaceManager::instance()) {
40+ new SurfaceManager;
41+ }
44}
42}
45
43
46−static QObject* sessionManagerSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
44+QObject* applicationManagerSingleton(QQmlEngine*, QJSEngine*)
47− Q_UNUSED(engine);
45+{
48− Q_UNUSED(scriptEngine);
46+ createUnityApplicationSharedSingletons();
49− return SessionManager::singleton();
47+ return new ApplicationManager;
50}
48}
51
49
52−static QObject* ubuntuKeyboardInfoSingleton(QQmlEngine*, QJSEngine*) {
50+QObject* surfaceManagerSingleton(QQmlEngine*, QJSEngine*)
53− return UbuntuKeyboardInfo::singleton();
51+{
52+ createUnityApplicationSharedSingletons();
53+ return SurfaceManager::instance();
54}
54}
55
55
56+QObject* ubuntuKeyboardInfoSingleton(QQmlEngine*, QJSEngine*)
57+{
58+ createUnityApplicationSharedSingletons();
59+ return new UbuntuKeyboardInfo;
60+}
56
61
57−ApplicationTestInterface* s_appTestInterface = nullptr;
62+QObject* mirFocusControllerSingleton(QQmlEngine*, QJSEngine*)
58−
63+{
59−static QObject* applicationTestInterface(QQmlEngine* engine, QJSEngine* scriptEngine) {
64+ createUnityApplicationSharedSingletons();
60− Q_UNUSED(engine);
65+ return MirFocusController::instance();
61− Q_UNUSED(scriptEngine);
62− if (!s_appTestInterface) {
63− s_appTestInterface = new ApplicationTestInterface(engine);
64− }
65− return s_appTestInterface;
66}
66}
67
67
68+} // anonymous namespace
69+
68void FakeUnityApplicationQmlPlugin::registerTypes(const char *uri)
70void FakeUnityApplicationQmlPlugin::registerTypes(const char *uri)
69{
71{
70− qRegisterMetaType<Session*>("Session*");
71 qRegisterMetaType<ApplicationInfo*>("ApplicationInfo*");
72 qRegisterMetaType<ApplicationInfo*>("ApplicationInfo*");
72− qRegisterMetaType<SessionModel*>("SessionModel*");
73 qRegisterMetaType<unity::shell::application::MirSurfaceInterface*>("unity::shell::application::MirSurfaceInterface*");
73 qRegisterMetaType<unity::shell::application::MirSurfaceInterface*>("unity::shell::application::MirSurfaceInterface*");
74+ qRegisterMetaType<unity::shell::application::MirSurfaceListInterface*>("unity::shell::application::MirSurfaceListInterface*");
74 qRegisterMetaType<Mir::Type>("Mir::Type");
75 qRegisterMetaType<Mir::Type>("Mir::Type");
75 qRegisterMetaType<Mir::State>("Mir::State");
76 qRegisterMetaType<Mir::State>("Mir::State");
76
77
77 qmlRegisterUncreatableType<unity::shell::application::ApplicationManagerInterface>(uri, 0, 1, "ApplicationManagerInterface", "Abstract interface. Cannot be created in QML");
78 qmlRegisterUncreatableType<unity::shell::application::ApplicationManagerInterface>(uri, 0, 1, "ApplicationManagerInterface", "Abstract interface. Cannot be created in QML");
78 qmlRegisterUncreatableType<unity::shell::application::ApplicationInfoInterface>(uri, 0, 1, "ApplicationInfoInterface", "Abstract interface. Cannot be created in QML");
79 qmlRegisterUncreatableType<unity::shell::application::ApplicationInfoInterface>(uri, 0, 1, "ApplicationInfoInterface", "Abstract interface. Cannot be created in QML");
79− qmlRegisterUncreatableType<Session>(uri, 0, 1, "Session", "Session can't be instantiated from QML");
80 qmlRegisterUncreatableType<MirSurface>(uri, 0, 1, "MirSurface", "MirSurface can't be instantiated from QML");
80 qmlRegisterUncreatableType<MirSurface>(uri, 0, 1, "MirSurface", "MirSurface can't be instantiated from QML");
81 qmlRegisterUncreatableType<unity::shell::application::MirSurfaceInterface>(
81 qmlRegisterUncreatableType<unity::shell::application::MirSurfaceInterface>(
82 uri, 0, 1, "MirSurface", "MirSurface can't be instantiated from QML");
82 uri, 0, 1, "MirSurface", "MirSurface can't be instantiated from QML");
83+ qmlRegisterSingletonType<MirFocusController>(uri, 0, 1, "MirFocusController", mirFocusControllerSingleton);
83 qmlRegisterType<MirSurfaceItem>(uri, 0, 1, "MirSurfaceItem");
84 qmlRegisterType<MirSurfaceItem>(uri, 0, 1, "MirSurfaceItem");
84 qmlRegisterType<ApplicationInfo>(uri, 0, 1, "ApplicationInfo");
85 qmlRegisterType<ApplicationInfo>(uri, 0, 1, "ApplicationInfo");
85
86
86 qmlRegisterSingletonType<ApplicationManager>(uri, 0, 1, "ApplicationManager", applicationManagerSingleton);
87 qmlRegisterSingletonType<ApplicationManager>(uri, 0, 1, "ApplicationManager", applicationManagerSingleton);
87 qmlRegisterSingletonType<SurfaceManager>(uri, 0, 1, "SurfaceManager", surfaceManagerSingleton);
88 qmlRegisterSingletonType<SurfaceManager>(uri, 0, 1, "SurfaceManager", surfaceManagerSingleton);
88− qmlRegisterSingletonType<SessionManager>(uri, 0, 1, "SessionManager", sessionManagerSingleton);
89− qmlRegisterSingletonType<ApplicationTestInterface>(uri, 0, 1, "ApplicationTest", applicationTestInterface);
90 qmlRegisterSingletonType<UbuntuKeyboardInfo>(uri, 0, 1, "UbuntuKeyboardInfo", ubuntuKeyboardInfoSingleton);
89 qmlRegisterSingletonType<UbuntuKeyboardInfo>(uri, 0, 1, "UbuntuKeyboardInfo", ubuntuKeyboardInfoSingleton);
91
90
92 qmlRegisterUncreatableType<Mir>(uri, 0, 1, "Mir", "Mir provides enum values, it can't be instantiated");
91 qmlRegisterUncreatableType<Mir>(uri, 0, 1, "Mir", "Mir provides enum values, it can't be instantiated");
@@ -95,8 +94,4 @@ void FakeUnityApplicationQmlPlugin::registerTypes(const char *uri)
95void FakeUnityApplicationQmlPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
94void FakeUnityApplicationQmlPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
96{
95{
97 QQmlExtensionPlugin::initializeEngine(engine, uri);
96 QQmlExtensionPlugin::initializeEngine(engine, uri);
98−
99− engine->addImageProvider(QLatin1String("application"), new ApplicationScreenshotProvider(ApplicationManager::singleton()));
100− // make sure we initialise our test interface.
101− applicationTestInterface(engine, nullptr);
102}
97}
tests/mocks/Utils/CMakeLists.txt+4
@@ -22,6 +22,10 @@ set(QMLPLUGIN_SRC
22 ${CMAKE_SOURCE_DIR}/plugins/Utils/deviceconfigparser.cpp
22 ${CMAKE_SOURCE_DIR}/plugins/Utils/deviceconfigparser.cpp
23 ${CMAKE_SOURCE_DIR}/plugins/Utils/globalfunctions.cpp
23 ${CMAKE_SOURCE_DIR}/plugins/Utils/globalfunctions.cpp
24 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationManagerInterface.h
24 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationManagerInterface.h
25+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
26+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceInterface.h
27+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceListInterface.h
28+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/Mir.h
25 constants.cpp
29 constants.cpp
26 plugin.cpp
30 plugin.cpp
27 windowstatestorage.cpp
31 windowstatestorage.cpp
tests/mocks/Utils/plugin.cpp+1−1
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2015 Canonical, Ltd.
2+ * Copyright (C) 2015-2016 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
tests/plugins/AccountsService/CMakeLists.txt+2−1
@@ -5,7 +5,7 @@ else()
5endif()
5endif()
6macro(make_dbus_class NAME INTERFACE)
6macro(make_dbus_class NAME INTERFACE)
7 if(${CMAKE_CURRENT_SOURCE_DIR}/interfaces.xml IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/${NAME}Adaptor.h)
7 if(${CMAKE_CURRENT_SOURCE_DIR}/interfaces.xml IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/${NAME}Adaptor.h)
8− execute_process(COMMAND ${QDBUSXML2CPP_EXECUTABLE} -c ${NAME}Adaptor -a ${CMAKE_CURRENT_BINARY_DIR}/${NAME}Adaptor ${CMAKE_CURRENT_SOURCE_DIR}/interfaces.xml ${INTERFACE})
8+ execute_process(COMMAND ${QDBUSXML2CPP_EXECUTABLE} -c ${NAME}Adaptor -i types.h -a ${CMAKE_CURRENT_BINARY_DIR}/${NAME}Adaptor ${CMAKE_CURRENT_SOURCE_DIR}/interfaces.xml ${INTERFACE})
9 endif()
9 endif()
10endmacro(make_dbus_class)
10endmacro(make_dbus_class)
11
11
@@ -20,6 +20,7 @@ make_dbus_class(UscInput com.canonical.Unity.Input)
20
20
21include_directories(
21include_directories(
22 ${CMAKE_CURRENT_BINARY_DIR}
22 ${CMAKE_CURRENT_BINARY_DIR}
23+ ${CMAKE_CURRENT_SOURCE_DIR}
23 ${CMAKE_SOURCE_DIR}/plugins/AccountsService
24 ${CMAKE_SOURCE_DIR}/plugins/AccountsService
24 )
25 )
25
26
tests/plugins/AccountsService/PropertiesServer.cpp+36−7
@@ -25,9 +25,7 @@
25#include <QDBusMessage>
25#include <QDBusMessage>
26#include <QDBusMetaType>
26#include <QDBusMetaType>
27
27
28−using StringMap = QMap<QString,QString>;
28+#define IFACE_ACCOUNTS_USER QStringLiteral("org.freedesktop.Accounts.User")
29−using StringMapList = QList<StringMap>;
30−Q_DECLARE_METATYPE(StringMapList)
31
29
32PropertiesServer::PropertiesServer(QObject *parent)
30PropertiesServer::PropertiesServer(QObject *parent)
33 : QObject(parent)
31 : QObject(parent)
@@ -62,6 +60,38 @@ void PropertiesServer::Set(const QString &interface, const QString &property, co
62{
60{
63 QVariant newValue = variant.variant();
61 QVariant newValue = variant.variant();
64
62
63+ if (interface == IFACE_ACCOUNTS_USER) {
64+ sendErrorReply(QDBusError::InvalidArgs, QStringLiteral("Property is not writable"));
65+ return;
66+ }
67+
68+ internalSet(interface, property, newValue);
69+}
70+
71+void PropertiesServer::SetBackgroundFile(const QString &backgroundFile)
72+{
73+ internalSet(IFACE_ACCOUNTS_USER, QStringLiteral("BackgroundFile"), backgroundFile);
74+}
75+
76+void PropertiesServer::SetEmail(const QString &email)
77+{
78+ internalSet(IFACE_ACCOUNTS_USER, QStringLiteral("Email"), email);
79+}
80+
81+void PropertiesServer::SetInputSources(const StringMapList &inputSources)
82+{
83+ internalSet(IFACE_ACCOUNTS_USER, QStringLiteral("InputSources"), QVariant::fromValue(inputSources));
84+}
85+
86+void PropertiesServer::SetRealName(const QString &realName)
87+{
88+ internalSet(IFACE_ACCOUNTS_USER, QStringLiteral("RealName"), realName);
89+}
90+
91+void PropertiesServer::internalSet(const QString &interface, const QString &property, const QVariant &variant)
92+{
93+ QVariant newValue = variant;
94+
65 if (m_properties[interface].contains(property)) {
95 if (m_properties[interface].contains(property)) {
66 QVariant& oldValue = m_properties[interface][property];
96 QVariant& oldValue = m_properties[interface][property];
67 if (oldValue != newValue) {
97 if (oldValue != newValue) {
@@ -69,14 +99,12 @@ void PropertiesServer::Set(const QString &interface, const QString &property, co
69 if (interface == QStringLiteral("com.canonical.unity.AccountsService") &&
99 if (interface == QStringLiteral("com.canonical.unity.AccountsService") &&
70 property == QStringLiteral("LauncherItems")) {
100 property == QStringLiteral("LauncherItems")) {
71 newValue = QVariant::fromValue(qdbus_cast<QList<QVariantMap>>(newValue.value<QDBusArgument>()));
101 newValue = QVariant::fromValue(qdbus_cast<QList<QVariantMap>>(newValue.value<QDBusArgument>()));
72− } else if (interface == "org.freedesktop.Accounts.User" && property == "InputSources") {
73− newValue = QVariant::fromValue(qdbus_cast<StringMapList>(newValue.value<QDBusArgument>()));
74 }
102 }
75
103
76 oldValue = newValue;
104 oldValue = newValue;
77
105
78 // Special case for user properties.
106 // Special case for user properties.
79− if (interface == "org.freedesktop.Accounts.User") {
107+ if (interface == IFACE_ACCOUNTS_USER) {
80 Q_EMIT Changed();
108 Q_EMIT Changed();
81 } else {
109 } else {
82 QVariantMap propertyChanges;
110 QVariantMap propertyChanges;
@@ -108,6 +136,7 @@ void PropertiesServer::Reset()
108 m_properties["com.ubuntu.location.providers.here.AccountsService"]["LicenseAccepted"] = false;
136 m_properties["com.ubuntu.location.providers.here.AccountsService"]["LicenseAccepted"] = false;
109 m_properties["com.ubuntu.location.providers.here.AccountsService"]["LicenseBasePath"] = "";
137 m_properties["com.ubuntu.location.providers.here.AccountsService"]["LicenseBasePath"] = "";
110 m_properties["org.freedesktop.Accounts.User"]["BackgroundFile"] = "";
138 m_properties["org.freedesktop.Accounts.User"]["BackgroundFile"] = "";
111− m_properties["org.freedesktop.Accounts.User"]["RealName"] = "";
139+ m_properties["org.freedesktop.Accounts.User"]["Email"] = "";
112 m_properties["org.freedesktop.Accounts.User"]["InputSources"] = QVariant::fromValue(StringMapList());
140 m_properties["org.freedesktop.Accounts.User"]["InputSources"] = QVariant::fromValue(StringMapList());
141+ m_properties["org.freedesktop.Accounts.User"]["RealName"] = "";
113}
142}
tests/plugins/AccountsService/PropertiesServer.h+7
@@ -24,6 +24,7 @@
24#include <QDBusVariant>
24#include <QDBusVariant>
25#include <QObject>
25#include <QObject>
26#include <QString>
26#include <QString>
27+#include "types.h"
27
28
28class PropertiesServer: public QObject, protected QDBusContext
29class PropertiesServer: public QObject, protected QDBusContext
29{
30{
@@ -36,6 +37,10 @@ public Q_SLOTS:
36 QDBusVariant Get(const QString &interface, const QString &property) const;
37 QDBusVariant Get(const QString &interface, const QString &property) const;
37 QVariantMap GetAll(const QString &interface) const;
38 QVariantMap GetAll(const QString &interface) const;
38 void Set(const QString &interface, const QString &property, const QDBusVariant &variant);
39 void Set(const QString &interface, const QString &property, const QDBusVariant &variant);
40+ void SetBackgroundFile(const QString &backgroundFile);
41+ void SetEmail(const QString &email);
42+ void SetInputSources(const StringMapList &inputSources);
43+ void SetRealName(const QString &realName);
39
44
40 // mock only.
45 // mock only.
41 void Reset();
46 void Reset();
@@ -45,6 +50,8 @@ Q_SIGNALS:
45 void Changed();
50 void Changed();
46
51
47private:
52private:
53+ void internalSet(const QString &interface, const QString &property, const QVariant &variant);
54+
48 QHash<QString, QVariantMap> m_properties;
55 QHash<QString, QVariantMap> m_properties;
49};
56};
50
57
tests/plugins/AccountsService/client.cpp+46−12
@@ -19,16 +19,13 @@
19
19
20#include "AccountsService.h"
20#include "AccountsService.h"
21#include "AccountsServiceDBusAdaptor.h"
21#include "AccountsServiceDBusAdaptor.h"
22+#include "types.h"
22#include <QSignalSpy>
23#include <QSignalSpy>
23#include <QTest>
24#include <QTest>
24#include <QDebug>
25#include <QDebug>
25#include <QDBusReply>
26#include <QDBusReply>
26#include <QDBusMetaType>
27#include <QDBusMetaType>
27
28
28−using StringMap = QMap<QString,QString>;
29−using StringMapList = QList<StringMap>;
30−Q_DECLARE_METATYPE(StringMapList)
31−
32template <class T>
29template <class T>
33QVariant dbusVariant(const T& value) { return QVariant::fromValue(QDBusVariant(value)); }
30QVariant dbusVariant(const T& value) { return QVariant::fromValue(QDBusVariant(value)); }
34
31
@@ -263,10 +260,13 @@ private Q_SLOTS:
263 AccountsService session(this, QTest::currentTestFunction());
260 AccountsService session(this, QTest::currentTestFunction());
264
261
265 QCOMPARE(session.backgroundFile(), QString());
262 QCOMPARE(session.backgroundFile(), QString());
266− ASSERT_DBUS_CALL(m_userInterface->asyncCall("Set",
263+
267− "org.freedesktop.Accounts.User",
264+ QDBusInterface accountsIface(m_userInterface->service(),
268− "BackgroundFile",
265+ m_userInterface->path(),
269− dbusVariant("/test/BackgroundFile")));
266+ "org.freedesktop.Accounts.User");
267+ ASSERT_DBUS_CALL(accountsIface.asyncCall("SetBackgroundFile",
268+ "/test/BackgroundFile"));
269+
270 QTRY_COMPARE(session.backgroundFile(), QString("/test/BackgroundFile"));
270 QTRY_COMPARE(session.backgroundFile(), QString("/test/BackgroundFile"));
271 }
271 }
272
272
@@ -311,6 +311,39 @@ private Q_SLOTS:
311 QCOMPARE(arguments.at(0).toInt(), 0);
311 QCOMPARE(arguments.at(0).toInt(), 0);
312 }
312 }
313
313
314+ void testSetRealName()
315+ {
316+ AccountsService session(this, QTest::currentTestFunction());
317+
318+ // Just confirm that we can't set normal way
319+ auto message = m_userInterface->call("Set",
320+ "org.freedesktop.Accounts.User",
321+ "RealName",
322+ dbusVariant("Stallman"));
323+ QCOMPARE(message.type(), QDBusMessage::ErrorMessage);
324+ QCOMPARE(message.errorName(), QStringLiteral("org.freedesktop.DBus.Error.InvalidArgs"));
325+
326+ message = m_userInterface->call("Get",
327+ "org.freedesktop.Accounts.User",
328+ "RealName");
329+ QCOMPARE(message.type(), QDBusMessage::ReplyMessage);
330+ auto response = message.arguments().first().value<QDBusVariant>().variant().toString();
331+ QCOMPARE(response, QStringLiteral(""));
332+
333+ // Now try it via our AS wrapper and confirm it did get through, unlike above
334+ session.setRealName("Stallman");
335+
336+ QCOMPARE(session.realName(), QStringLiteral("Stallman"));
337+
338+ message = m_userInterface->call("Get",
339+ "org.freedesktop.Accounts.User",
340+ "RealName");
341+ QCOMPARE(message.type(), QDBusMessage::ReplyMessage);
342+ response = message.arguments().first().value<QDBusVariant>().variant().toString();
343+ QCOMPARE(response, QStringLiteral("Stallman"));
344+
345+ }
346+
314 void testAsynchronousChangeForKeymaps()
347 void testAsynchronousChangeForKeymaps()
315 {
348 {
316 AccountsService session(this, QTest::currentTestFunction());
349 AccountsService session(this, QTest::currentTestFunction());
@@ -325,10 +358,11 @@ private Q_SLOTS:
325 map2.insert("xkb", "fr");
358 map2.insert("xkb", "fr");
326 inputSources.append(map2);
359 inputSources.append(map2);
327
360
328− ASSERT_DBUS_CALL(m_userInterface->asyncCall("Set",
361+ QDBusInterface accountsIface(m_userInterface->service(),
329− "org.freedesktop.Accounts.User",
362+ m_userInterface->path(),
330− "InputSources",
363+ "org.freedesktop.Accounts.User");
331− QVariant::fromValue(QDBusVariant(QVariant::fromValue(inputSources)))));
364+ ASSERT_DBUS_CALL(accountsIface.asyncCall("SetInputSources",
365+ QVariant::fromValue(inputSources)));
332 QStringList result = {"cz+qwerty", "fr"};
366 QStringList result = {"cz+qwerty", "fr"};
333 QTRY_COMPARE(session.keymaps(), result);
367 QTRY_COMPARE(session.keymaps(), result);
334 }
368 }
tests/plugins/AccountsService/interfaces.xml+13
@@ -42,6 +42,19 @@
42 <interface name="com.ubuntu.location.providers.here.AccountsService" />
42 <interface name="com.ubuntu.location.providers.here.AccountsService" />
43 <interface name="org.freedesktop.Accounts.User">
43 <interface name="org.freedesktop.Accounts.User">
44 <signal name="Changed" />
44 <signal name="Changed" />
45+ <method name="SetBackgroundFile">
46+ <arg name="backgroundFile" type="s" direction="in" />
47+ </method>
48+ <method name="SetEmail">
49+ <arg name="email" type="s" direction="in" />
50+ </method>
51+ <method name="SetInputSources">
52+ <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="StringMapList"/>
53+ <arg name="inputSources" type="aa{ss}" direction="in" />
54+ </method>
55+ <method name="SetRealName">
56+ <arg name="realName" type="s" direction="in" />
57+ </method>
45 </interface>
58 </interface>
46 <interface name="com.canonical.unity.AccountsService.Private" />
59 <interface name="com.canonical.unity.AccountsService.Private" />
47
60
tests/plugins/AccountsService/types.hnew file+25
@@ -0,0 +1,25 @@
1+/*
2+ * Copyright 2016 Canonical Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it
5+ * under the terms of the GNU General Public License version 3, as published
6+ * by the Free Software Foundation.
7+ *
8+ * This program is distributed in the hope that it will be useful, but
9+ * WITHOUT ANY WARRANTY; without even the implied warranties of
10+ * MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
11+ * PURPOSE. See the GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * version 3 along with this program. If not, see
15+ * <http://www.gnu.org/licenses/>
16+ */
17+
18+#ifndef UNITY_ASMOCKTYPES_H
19+#define UNITY_ASMOCKTYPES_H
20+
21+using StringMap = QMap<QString,QString>;
22+using StringMapList = QList<StringMap>;
23+Q_DECLARE_METATYPE(StringMapList)
24+
25+#endif
tests/plugins/LightDM/IntegratedLightDM/integrated.cpp+5−8
@@ -66,14 +66,11 @@ private Q_SLOTS:
66 QCOMPARE(m_model->data(index, QLightDM::UsersModel::RealNameRole).toString(),
66 QCOMPARE(m_model->data(index, QLightDM::UsersModel::RealNameRole).toString(),
67 QStringLiteral(""));
67 QStringLiteral(""));
68
68
69− // The real AccountsService doesn't let you set via dbus properties. You
69+ QDBusInterface accountsIface(m_user->service(),
70− // have to call SetRealName instead (so that they can protect the call
70+ m_user->path(),
71− // via policykit). But our test server does let us.
71+ "org.freedesktop.Accounts.User");
72− QVariant wrapped = QVariant::fromValue(QDBusVariant(QStringLiteral("Test User")));
72+ QDBusReply<void> reply = accountsIface.call(QStringLiteral("SetRealName"),
73− QDBusReply<void> reply = m_user->call(QStringLiteral("Set"),
73+ QStringLiteral("Test User"));
74− QStringLiteral("org.freedesktop.Accounts.User"),
75− QStringLiteral("RealName"),
76− wrapped);
77 QVERIFY(reply.isValid());
74 QVERIFY(reply.isValid());
78
75
79 QTRY_COMPARE(m_model->data(index, QLightDM::UsersModel::RealNameRole).toString(),
76 QTRY_COMPARE(m_model->data(index, QLightDM::UsersModel::RealNameRole).toString(),
tests/plugins/Ubuntu/Gestures/tst_FloatingFlickable.cpp+2
@@ -64,6 +64,7 @@ void tst_FloatingFlickable::tapGoesThrough()
64
64
65void tst_FloatingFlickable::flickChangesContentX()
65void tst_FloatingFlickable::flickChangesContentX()
66{
66{
67+ QSKIP("This fails due to bug #1564571");
67 FloatingFlickable *floatingFlickable =
68 FloatingFlickable *floatingFlickable =
68 m_view->rootObject()->findChild<FloatingFlickable*>("floatingFlickable");
69 m_view->rootObject()->findChild<FloatingFlickable*>("floatingFlickable");
69 QVERIFY(floatingFlickable != nullptr);
70 QVERIFY(floatingFlickable != nullptr);
@@ -91,6 +92,7 @@ void tst_FloatingFlickable::flickChangesContentX()
91
92
92void tst_FloatingFlickable::flickChangesContentY()
93void tst_FloatingFlickable::flickChangesContentY()
93{
94{
95+ QSKIP("This fails due to bug #1564571");
94 FloatingFlickable *floatingFlickable =
96 FloatingFlickable *floatingFlickable =
95 m_view->rootObject()->findChild<FloatingFlickable*>("floatingFlickable");
97 m_view->rootObject()->findChild<FloatingFlickable*>("floatingFlickable");
96 QVERIFY(floatingFlickable != nullptr);
98 QVERIFY(floatingFlickable != nullptr);
tests/plugins/Unity/Launcher/launchermodeltest.cpp+2−3
@@ -64,6 +64,7 @@ public:
64 void setExemptFromLifecycle(bool) override {}
64 void setExemptFromLifecycle(bool) override {}
65 QSize initialSurfaceSize() const override { return QSize(); }
65 QSize initialSurfaceSize() const override { return QSize(); }
66 void setInitialSurfaceSize(const QSize &) override {}
66 void setInitialSurfaceSize(const QSize &) override {}
67+ MirSurfaceListInterface* surfaceList() override { return nullptr; }
67
68
68 // Methods used for mocking (not in the interface)
69 // Methods used for mocking (not in the interface)
69 void setFocused(bool focused) { m_focused = focused; Q_EMIT focusedChanged(focused); }
70 void setFocused(bool focused) { m_focused = focused; Q_EMIT focusedChanged(focused); }
@@ -106,7 +107,7 @@ public:
106 }
107 }
107 return false;
108 return false;
108 }
109 }
109− bool focusApplication(const QString &appId) override {
110+ bool focusApplication(const QString &appId) {
110 Q_FOREACH(MockApp* app, m_list) {
111 Q_FOREACH(MockApp* app, m_list) {
111 app->setFocused(app->appId() == appId);
112 app->setFocused(app->appId() == appId);
112 }
113 }
@@ -114,8 +115,6 @@ public:
114 return true;
115 return true;
115 }
116 }
116
117
117− void unfocusCurrentApplication() override { }
118−
119 void addApplication(MockApp *app) {
118 void addApplication(MockApp *app) {
120 beginInsertRows(QModelIndex(), count(), count());
119 beginInsertRows(QModelIndex(), count(), count());
121 m_list.append(app);
120 m_list.append(app);
tests/qmltests/CMakeLists.txt−1
@@ -88,7 +88,6 @@ add_unity8_qmltest(Stages DesktopStage)
88add_unity8_qmltest(Stages PhoneStage)
88add_unity8_qmltest(Stages PhoneStage)
89add_unity8_qmltest(Stages SpreadDelegate)
89add_unity8_qmltest(Stages SpreadDelegate)
90add_unity8_qmltest(Stages SurfaceContainer)
90add_unity8_qmltest(Stages SurfaceContainer)
91−add_unity8_qmltest(Stages SessionContainer)
92add_unity8_qmltest(Stages TabletStage)
91add_unity8_qmltest(Stages TabletStage)
93add_unity8_qmltest(Stages WindowResizeArea)
92add_unity8_qmltest(Stages WindowResizeArea)
94add_unity8_qmltest(Stages Splash)
93add_unity8_qmltest(Stages Splash)
tests/qmltests/Dash/tst_DashShell.qml+6−2
@@ -91,8 +91,12 @@ Item {
91 var stopY = startY;
91 var stopY = startY;
92 touchFlick(shell, startX, startY, stopX, stopY);
92 touchFlick(shell, startX, startY, stopX, stopY);
93
93
94− // Now do a long launcher movement
94+ // bring in the launcher
95− touchFlick(shell, stopX, startY, startX, stopY);
95+ var startX = units.gu(1);
96+ var startY = shell.height / 2;
97+ var stopX = shell.width / 3;
98+ var stopY = startY;
99+ touchFlick(shell, startX, startY, stopX, stopY);
96
100
97 var launcher = findChild(shell, "launcher");
101 var launcher = findChild(shell, "launcher");
98 var buttonShowDashHome = findChild(launcher, "buttonShowDashHome");
102 var buttonShowDashHome = findChild(launcher, "buttonShowDashHome");
tests/qmltests/Greeter/tst_Greeter.qml+3−2
@@ -361,7 +361,7 @@ Item {
361 }
361 }
362
362
363 function test_notifyAboutToFocusApp() {
363 function test_notifyAboutToFocusApp() {
364− greeter.notifyAboutToFocusApp("fake-app");
364+ greeter.notifyUserRequestedApp("fake-app");
365 compare(viewTryToUnlockSpy.count, 1);
365 compare(viewTryToUnlockSpy.count, 1);
366 compare(viewTryToUnlockSpy.signalArguments[0][0], false);
366 compare(viewTryToUnlockSpy.signalArguments[0][0], false);
367 }
367 }
@@ -500,7 +500,7 @@ Item {
500
500
501 // Test opening a locked app
501 // Test opening a locked app
502 greeter.lockedApp = "test-app";
502 greeter.lockedApp = "test-app";
503− greeter.notifyAppFocused("test-app");
503+ greeter.notifyAppFocusRequested("test-app");
504 verify(greeter.hasLockedApp);
504 verify(greeter.hasLockedApp);
505 verify(!greeter.shown);
505 verify(!greeter.shown);
506
506
@@ -551,6 +551,7 @@ Item {
551
551
552 LightDM.Greeter.showGreeter();
552 LightDM.Greeter.showGreeter();
553 compare(viewResetSpy.count, 1);
553 compare(viewResetSpy.count, 1);
554+ tryCompare(viewShowPromptSpy, "count", 1);
554 }
555 }
555 }
556 }
556}
557}
tests/qmltests/Greeter/tst_NarrowView.qml+3−1
@@ -27,6 +27,8 @@ Item {
27 width: units.gu(90)
27 width: units.gu(90)
28 height: units.gu(80)
28 height: units.gu(80)
29
29
30+ Component.onCompleted: theme.name = "Ubuntu.Components.Themes.SuruDark" // use the same theme as the real shell
31+
30 Row {
32 Row {
31 anchors.fill: parent
33 anchors.fill: parent
32 Loader {
34 Loader {
@@ -61,7 +63,7 @@ Item {
61
63
62 Rectangle {
64 Rectangle {
63 id: controls
65 id: controls
64− color: "white"
66+ color: theme.palette.normal.background
65 width: units.gu(40)
67 width: units.gu(40)
66 height: parent.height
68 height: parent.height
67
69
tests/qmltests/Panel/tst_ActiveCallHint.qml+3−2
@@ -96,11 +96,12 @@ Item {
96 function test_activeHint(data) {
96 function test_activeHint(data) {
97 if (data.dialer) {
97 if (data.dialer) {
98 var application = ApplicationManager.startApplication("dialer-app");
98 var application = ApplicationManager.startApplication("dialer-app");
99− ApplicationManager.focusApplication("dialer-app");
99+ tryCompare(application.surfaceList, "count", 1);
100+ MirFocusController.focusedSurface = application.surfaceList.get(0);
100 tryCompare(ApplicationManager, "focusedApplicationId", "dialer-app");
101 tryCompare(ApplicationManager, "focusedApplicationId", "dialer-app");
101 tryCompare(application, "state", ApplicationInfoInterface.Running);
102 tryCompare(application, "state", ApplicationInfoInterface.Running);
102
103
103− if (!data.focused) { ApplicationManager.unfocusCurrentApplication(); }
104+ if (!data.focused) { MirFocusController.focusedSurface = null; }
104 }
105 }
105 callManager.foregroundCall = data.call;
106 callManager.foregroundCall = data.call;
106 callManager.callIndicatorVisible = data.visible;
107 callManager.callIndicatorVisible = data.visible;
tests/qmltests/Panel/tst_Panel.qml+2−2
@@ -29,7 +29,7 @@ IndicatorTest {
29 id: root
29 id: root
30 width: units.gu(100)
30 width: units.gu(100)
31 height: units.gu(71)
31 height: units.gu(71)
32− color: "white"
32+ color: "black"
33
33
34 Component.onCompleted: theme.name = "Ubuntu.Components.Themes.SuruDark"
34 Component.onCompleted: theme.name = "Ubuntu.Components.Themes.SuruDark"
35
35
@@ -464,7 +464,7 @@ IndicatorTest {
464
464
465 callManager.foregroundCall = phoneCall;
465 callManager.foregroundCall = phoneCall;
466
466
467− ApplicationManager.focusApplication("unity8-dash");
467+ MirFocusController.focusedSurface = ApplicationManager.findApplication("unity8-dash").surfaceList.get(0);
468 tryCompare(ApplicationManager, "focusedApplicationId", "unity8-dash");
468 tryCompare(ApplicationManager, "focusedApplicationId", "unity8-dash");
469
469
470 mouseClick(panel.indicators,
470 mouseClick(panel.indicators,
tests/qmltests/Stages/ApplicationCheckBox.qml+104−58
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2015 Canonical, Ltd.
2+ * Copyright (C) 2015-2016 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -19,11 +19,17 @@ import QtQuick.Layouts 1.1
19import Ubuntu.Components 1.3
19import Ubuntu.Components 1.3
20import Unity.Application 0.1
20import Unity.Application 0.1
21
21
22−RowLayout {
22+Column {
23 id: root
23 id: root
24 property string appId
24 property string appId
25 property bool checked: false
25 property bool checked: false
26
26
27+ function createSurface() {
28+ if (d.application) {
29+ d.application.createSurface();
30+ }
31+ }
32+
27 enabled: appId !== "unity8-dash"
33 enabled: appId !== "unity8-dash"
28
34
29 onCheckedChanged: {
35 onCheckedChanged: {
@@ -38,77 +44,117 @@ RowLayout {
38 d.bindGuard = false;
44 d.bindGuard = false;
39 }
45 }
40
46
41− QtObject {
47+ RowLayout {
42− id: d
48+
43− property bool bindGuard: false
49+ QtObject {
44− property var application: null
50+ id: d
45− Component.onCompleted: {
51+ property bool bindGuard: false
46− application = ApplicationManager.findApplication(root.appId);
52+ property var application: null
53+ Component.onCompleted: {
54+ application = ApplicationManager.findApplication(root.appId);
55+ }
47 }
56 }
48− }
49
57
50− Connections {
58+ Connections {
51− target: ApplicationManager
59+ target: ApplicationManager
52− onCountChanged: {
60+ onCountChanged: {
53− d.application = ApplicationManager.findApplication(root.appId);
61+ d.application = ApplicationManager.findApplication(root.appId);
62+ }
54 }
63 }
55− }
56
64
57− Layout.fillWidth: true
65+ Layout.fillWidth: true
58− CheckBox {
66+ CheckBox {
59− id: checkbox
67+ id: checkbox
60− checked: false
68+ checked: false
61− activeFocusOnPress: false
69+ activeFocusOnPress: false
62
70
63− onTriggered: {
71+ onTriggered: {
64− if (d.bindGuard) { return; }
72+ if (d.bindGuard) { return; }
65− d.bindGuard = true;
73+ d.bindGuard = true;
66
74
67− if (checked) {
75+ if (checked) {
68− ApplicationManager.startApplication(root.appId);
76+ ApplicationManager.startApplication(root.appId);
69− } else {
77+ } else {
70− ApplicationManager.stopApplication(root.appId);
78+ ApplicationManager.stopApplication(root.appId);
79+ }
80+ d.bindGuard = false;
71 }
81 }
72− d.bindGuard = false;
82+ onCheckedChanged: {
73− }
83+ if (d.bindGuard) { return; }
74− onCheckedChanged: {
84+ d.bindGuard = true;
75− if (d.bindGuard) { return; }
76− d.bindGuard = true;
77
85
78− root.checked = checked;
86+ root.checked = checked;
79
87
80− d.bindGuard = false;
88+ d.bindGuard = false;
89+ }
90+ Binding {
91+ target: checkbox
92+ property: "checked"
93+ value: d.application != null
94+ }
81 }
95 }
82− Binding {
96+ Label {
83− target: checkbox
97+ id: appIdLabel
84− property: "checked"
98+ text: root.appId
85− value: d.application != null
99+ color: "white"
100+ anchors.verticalCenter: parent.verticalCenter
86 }
101 }
87− }
102+ Rectangle {
88− Label {
103+ color: {
89− id: appIdLabel
104+ if (d.application) {
90− text: root.appId
105+ if (d.application.state === ApplicationInfoInterface.Starting) {
91− color: "white"
106+ return "yellow";
92− anchors.verticalCenter: parent.verticalCenter
107+ } else if (d.application.state === ApplicationInfoInterface.Running) {
93− }
108+ return "green";
94− Rectangle {
109+ } else if (d.application.state === ApplicationInfoInterface.Suspended) {
95− color: {
110+ return "blue";
96− if (d.application) {
111+ } else {
97− if (d.application.state === ApplicationInfoInterface.Starting) {
112+ return "darkred";
98− return "yellow";
113+ }
99− } else if (d.application.state === ApplicationInfoInterface.Running) {
100− return "green";
101− } else if (d.application.state === ApplicationInfoInterface.Suspended) {
102− return "blue";
103 } else {
114 } else {
104 return "darkred";
115 return "darkred";
105 }
116 }
106− } else {
117+ }
107− return "darkred";
118+ width: height
119+ height: appIdLabel.height * 0.7
120+ anchors.verticalCenter: parent.verticalCenter
121+ }
122+
123+ MouseArea {
124+ width: height
125+ height: appIdLabel.height * 0.7
126+ anchors.verticalCenter: parent.verticalCenter
127+ onClicked: root.createSurface()
128+ enabled: d.application && d.application.state === ApplicationInfoInterface.Running
129+ visible: enabled
130+ Label {
131+ text: "➕"
132+ color: "white"
133+ anchors.centerIn: parent
134+ }
135+ }
136+ }
137+ Repeater {
138+ model: d.application ? d.application.surfaceList : null
139+ RowLayout {
140+ spacing: units.gu(1)
141+ Label {
142+ color: "white"
143+ text: "- " + model.surface.name
144+ }
145+ MouseArea {
146+ width: height
147+ height: appIdLabel.height * 0.7
148+ anchors.verticalCenter: parent.verticalCenter
149+ enabled: model.surface.live
150+ visible: enabled
151+ onClicked: model.surface.setLive(false);
152+ Label {
153+ text: "⛒"
154+ color: "white"
155+ anchors.centerIn: parent
156+ }
108 }
157 }
109 }
158 }
110− width: height
111− height: appIdLabel.height * 0.7
112− anchors.verticalCenter: parent.verticalCenter
113 }
159 }
114}
160}
tests/qmltests/Stages/RecursingChildSessionControl.qml+10−61
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright 2014 Canonical Ltd.
2+ * Copyright 2014,2016 Canonical Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -22,16 +22,7 @@ import Unity.Application 0.1
22ColumnLayout {
22ColumnLayout {
23 id: root
23 id: root
24
24
25− property var session
25+ property var surface
26− property var childSessions: session ? session.childSessions : 0
27− property bool removable: false
28− property alias surfaceCheckbox: _surfaceCheckbox
29−
30− property var screenshotIds: [ "gallery", "map", "facebook", "camera", "browser", "music", "twitter"]
31−
32− onSessionChanged: {
33− if (!session) surfaceCheckbox.checked = false;
34− }
35
26
36 Column {
27 Column {
37 id: column
28 id: column
@@ -41,7 +32,7 @@ ColumnLayout {
41
32
42 Repeater {
33 Repeater {
43 id: repeater
34 id: repeater
44− model: root.childSessions
35+ model: root.surface ? root.surface.promptSurfaceList : null
45 delegate: Rectangle {
36 delegate: Rectangle {
46 border {
37 border {
47 color: "black"
38 color: "black"
@@ -71,8 +62,7 @@ ColumnLayout {
71 }
62 }
72
63
73 onLoaded: {
64 onLoaded: {
74− item.session = modelData;
65+ item.surface = model.surface;
75− item.removable = true;
76 }
66 }
77 }
67 }
78 }
68 }
@@ -83,62 +73,21 @@ ColumnLayout {
83 Layout.fillWidth: true
73 Layout.fillWidth: true
84 spacing: units.gu(1)
74 spacing: units.gu(1)
85
75
86− RowLayout {
87− Layout.fillWidth: true
88−
89− CheckBox {
90− id: _surfaceCheckbox;
91− checked: root.session.lastSurface ? true : false
92− activeFocusOnPress: false
93− enabled: root.session
94− onCheckedChanged: {
95− if (checked) {
96− root.session.createSurface();
97− } else if (root.session && root.session.lastSurface) {
98− ApplicationTest.removeSurface(root.session.lastSurface);
99− }
100− }
101−
102− Connections {
103− target: root.session ? root.session : null
104− onLastSurfaceChanged: {
105− surfaceCheckbox.checked = root.session.lastSurface !== null
106− }
107− }
108− }
109−
110− Label {
111− text: "Surface"
112− anchors.verticalCenter: parent.verticalCenter
113− }
114− }
115−
116 RowLayout {
76 RowLayout {
117 id: buttonLayout
77 id: buttonLayout
118
78
119 Button {
79 Button {
120− enabled: root.session
80+ enabled: root.surface
121 activeFocusOnPress: false
81 activeFocusOnPress: false
122− text: removable ? "Remove" : "Release"
82+ text: "Remove"
123− onClicked: {
83+ onClicked: { root.surface.close(); }
124− if (removable) {
125− // release the surface first. simulates mir app closing
126− if (root.session.lastSurface) ApplicationTest.removeSurface(root.session.lastSurface);
127− ApplicationTest.removeSession(root.session);
128− } else {
129− root.session.release();
130− }
131− }
132 }
84 }
133
85
134 Button {
86 Button {
135− enabled: root.session !== null
87+ enabled: root.surface !== null
136 activeFocusOnPress: false
88 activeFocusOnPress: false
137− text: "Add Child"
89+ text: "Add Prompt Surface"
138− onClicked: {
90+ onClicked: { root.surface.createPromptSurface(); }
139− var screenshot = Math.round(Math.random()*100 % (screenshotIds.length-1));
140− var session = ApplicationTest.addChildSession(root.session, root.screenshotIds[screenshot], true);
141− }
142 }
91 }
143 }
92 }
144 }
93 }
tests/qmltests/Stages/tst_ApplicationWindow.qml+73−59

This diff is too big to show here.

tests/qmltests/Stages/tst_DesktopStage.qml+243−161

This diff is too big to show here.

tests/qmltests/Stages/tst_PhoneStage.qml+272−82

This diff is too big to show here.

tests/qmltests/Stages/tst_SessionContainer.qmldeleted−331

This diff is too big to show here.

tests/qmltests/Stages/tst_SpreadDelegate.qml+3−2

This diff is too big to show here.

tests/qmltests/Stages/tst_SurfaceContainer.qml+242−46

This diff is too big to show here.

tests/qmltests/Stages/tst_TabletStage.qml+252−89

This diff is too big to show here.

tests/qmltests/Tutorial/tst_Tutorial.qml+21−9

This diff is too big to show here.

tests/qmltests/tst_OrientedShell.qml+124−87

This diff is too big to show here.

tests/qmltests/tst_Shell.qml+239−171

This diff is too big to show here.

tests/qmltests/tst_ShellWithPin.qml+9−13

This diff is too big to show here.

tests/utils/modules/Unity/Test/UnityTestCase.qml+20−2

This diff is too big to show here.