on xenial help sign in
Merge
d981831Albert Astals Cid
CMakeLists.txt+2−1
@@ -13,8 +13,9 @@ endif()
13
13
14set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)
14set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)
15
15
16−# Instruct CMake to run moc automatically when needed.
16+# Instruct CMake to run moc and rcc automatically when needed.
17set(CMAKE_AUTOMOC ON)
17set(CMAKE_AUTOMOC ON)
18+set(CMAKE_AUTORCC ON)
18
19
19# enable QML debugging
20# enable QML debugging
20string(TOLOWER "${CMAKE_BUILD_TYPE}" cmake_build_type_lower) # Build types should always be lowercase but sometimes they are not.
21string(TOLOWER "${CMAKE_BUILD_TYPE}" cmake_build_type_lower) # Build types should always be lowercase but sometimes they are not.
cmake/modules/QmlTest.cmake+1
@@ -127,6 +127,7 @@ function(add_executable_test COMPONENT_NAME TARGET)
127 file(MAKE_DIRECTORY ${ARTIFACTS_DIR}/${path})
127 file(MAKE_DIRECTORY ${ARTIFACTS_DIR}/${path})
128 set(file_logger -o ${ARTIFACTS_DIR}/${path}/test${COMPONENT_NAME}.xml,xunitxml)
128 set(file_logger -o ${ARTIFACTS_DIR}/${path}/test${COMPONENT_NAME}.xml,xunitxml)
129 else()
129 else()
130+ file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
130 set(file_logger -o ${CMAKE_CURRENT_BINARY_DIR}/test${COMPONENT_NAME}.xml,xunitxml)
131 set(file_logger -o ${CMAKE_CURRENT_BINARY_DIR}/test${COMPONENT_NAME}.xml,xunitxml)
131 endif()
132 endif()
132
133
debian/changelog+51
@@ -1,3 +1,54 @@
1+unity8 (8.11+15.10.20150925-0ubuntu1) wily; urgency=medium
2+
3+ [ Albert Astals Cid ]
4+ * Improvements from running clazy over the code
5+
6+ [ Daniel d'Andrada ]
7+ * PhoneStage: ensure you're left in a consistent state after being
8+ reset (LP: #1476757)
9+
10+ [ Lukáš Tinkl ]
11+ * Improve the appearance and functionality of datetime and session
12+ indicators in Unity8 desktop.
13+ * Using InputInfo, determine if we need swipe or click to dismiss the
14+ notifications (e.g. incoming phone call)
15+
16+ [ Michael Zanetti ]
17+ * further development on the Desktop Spread (LP: #1488147)
18+
19+ [ Michał Sawicz ]
20+ * Bump application API version
21+ * Skip bluetooth check under wily, use expectFailure to notice when
22+ it's back
23+
24+ [ Richard Somlói ]
25+ * Fix translator comments in time formatter
26+
27+ -- Michał Sawicz <michal.sawicz@canonical.com> Fri, 25 Sep 2015 12:13:20 +0000
28+
29+unity8 (8.11+15.10.20150922.1-0ubuntu1) wily; urgency=medium
30+
31+ [ Albert Astals Cid ]
32+ * Adapt test to code changes
33+ * Add DEP-8 test for all our UI and unit tests
34+ * Keep the PreviewStack around to avoid mem leaks (LP: #1495467)
35+
36+ [ CI Train Bot ]
37+ * Resync trunk.
38+
39+ [ Michael Terry ]
40+ * When libusermetrics gives us an empty string, still show the
41+ infographic circle rather than hiding it. This is a follow-on to a
42+ branch [1] that changes the "no data available" label to the empty
43+ string.
44+
45+ [ Michał Sawicz ]
46+ * Add DEP-8 test for all our UI and unit tests
47+ * Fix integrated LightDM path
48+ * Resync trunk
49+
50+ -- Michał Sawicz <michal.sawicz@canonical.com> Tue, 22 Sep 2015 12:57:15 +0000
51+
1unity8 (8.11+15.10.20150915-0ubuntu1) wily; urgency=medium
52unity8 (8.11+15.10.20150915-0ubuntu1) wily; urgency=medium
2
53
3 [ Albert Astals Cid ]
54 [ Albert Astals Cid ]
debian/control+2−2
@@ -125,7 +125,7 @@ Depends: qml-module-qtquick-layouts,
125 qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 1.1.1239) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 1.1.1239),
125 qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 1.1.1239) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 1.1.1239),
126 qtdeclarative5-unity-notifications-plugin (>= 0.1.2) | unity-notifications-impl,
126 qtdeclarative5-unity-notifications-plugin (>= 0.1.2) | unity-notifications-impl,
127 ubuntu-thumbnailer-impl-0,
127 ubuntu-thumbnailer-impl-0,
128− unity-application-impl-6,
128+ unity-application-impl-8,
129 unity-notifications-impl-3,
129 unity-notifications-impl-3,
130 unity-plugin-scopes | unity-scopes-impl,
130 unity-plugin-scopes | unity-scopes-impl,
131 unity-scopes-impl-7,
131 unity-scopes-impl-7,
@@ -171,7 +171,7 @@ Pre-Depends: ${misc:Pre-Depends},
171Depends: ${misc:Depends},
171Depends: ${misc:Depends},
172 ${shlibs:Depends},
172 ${shlibs:Depends},
173Provides: unity-application-impl,
173Provides: unity-application-impl,
174− unity-application-impl-6,
174+ unity-application-impl-8,
175Replaces: unity8-autopilot (<< 8.02+15.04.20150422-0ubuntu1)
175Replaces: unity8-autopilot (<< 8.02+15.04.20150422-0ubuntu1)
176Description: Fake environment for running Unity 8 shell
176Description: Fake environment for running Unity 8 shell
177 Provides fake implementations of some QML modules used by Unity 8 shell
177 Provides fake implementations of some QML modules used by Unity 8 shell
debian/tests/controlnew file+5
@@ -0,0 +1,5 @@
1+Tests: qmluitests.sh
2+Restrictions: allow-stderr
3+Depends: @,
4+ @builddeps@,
5+ xvfb,
debian/tests/qmluitests.shnew file+19
@@ -0,0 +1,19 @@
1+#!/bin/sh
2+
3+SHELL_QML_PATH=$(pkg-config --variable=plugindir unity-shell-api)
4+UNITY_SOURCE_DIR=$(readlink -f $(dirname $(readlink -f $0))/../..)
5+
6+dh_auto_configure -- -DCMAKE_INSTALL_LOCALSTATEDIR="/var" \
7+ -DARTIFACTS_DIR=${ADT_ARTIFACTS} \
8+ -DUNITY_PLUGINPATH=${SHELL_QML_PATH} \
9+ -DUNITY_MOCKPATH=${SHELL_QML_PATH}/mocks
10+dh_auto_build --parallel -- -C tests/mocks
11+dh_auto_build --parallel -- -C tests/plugins
12+dh_auto_build --parallel -- -C tests/qmltests
13+dh_auto_build --parallel -- -C tests/uqmlscene
14+dh_auto_build --parallel -- -C tests/utils
15+
16+export UNITY_SOURCE_DIR
17+
18+# FIXME: --parallel here causes some failures
19+dh_auto_build -- -k xvfballtests
include/paths.h.in+27−21
@@ -29,30 +29,40 @@
29
29
30inline bool isRunningInstalled() {
30inline bool isRunningInstalled() {
31 static bool installed = (QCoreApplication::applicationDirPath() ==
31 static bool installed = (QCoreApplication::applicationDirPath() ==
32− QDir(("@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@")).canonicalPath());
32+ QDir(QStringLiteral("@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@")).canonicalPath());
33 return installed;
33 return installed;
34}
34}
35
35
36+inline QString buildDirectory() {
37+ if (!qEnvironmentVariableIsEmpty("UNITY_BINARY_DIR")) return qgetenv("UNITY_BINARY_DIR");
38+ return QStringLiteral("@CMAKE_BINARY_DIR@");
39+}
40+
41+inline QString sourceDirectory() {
42+ if (!qEnvironmentVariableIsEmpty("UNITY_SOURCE_DIR")) return qgetenv("UNITY_SOURCE_DIR");
43+ return QStringLiteral("@CMAKE_SOURCE_DIR@");
44+}
45+
36inline QString translationDirectory() {
46inline QString translationDirectory() {
37 if (isRunningInstalled()) {
47 if (isRunningInstalled()) {
38− return QString("@CMAKE_INSTALL_PREFIX@/share/locale");
48+ return QStringLiteral("@CMAKE_INSTALL_PREFIX@/share/locale");
39 } else {
49 } else {
40− return QString("@CMAKE_BINARY_DIR@/po/locale");
50+ return QString(buildDirectory() + "/po/locale");
41 }
51 }
42}
52}
43
53
44inline QString qmlDirectory() {
54inline QString qmlDirectory() {
45 if (isRunningInstalled()) {
55 if (isRunningInstalled()) {
46− return QString("@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/");
56+ return QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/");
47 } else {
57 } else {
48− return QString("@CMAKE_SOURCE_DIR@/qml/");
58+ return QString(sourceDirectory() + "/qml");
49 }
59 }
50}
60}
51
61
52inline QStringList overrideImportPaths() {
62inline QStringList overrideImportPaths() {
53 QStringList paths;
63 QStringList paths;
54 if (!isRunningInstalled()) {
64 if (!isRunningInstalled()) {
55− paths << QString("@CMAKE_BINARY_DIR@/plugins");
65+ paths << QString(buildDirectory() + "/plugins");
56 }
66 }
57 return paths;
67 return paths;
58}
68}
@@ -60,9 +70,9 @@ inline QStringList overrideImportPaths() {
60inline QStringList nonMirImportPaths() {
70inline QStringList nonMirImportPaths() {
61 QStringList paths;
71 QStringList paths;
62 if (isRunningInstalled()) {
72 if (isRunningInstalled()) {
63− paths << QString("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/nonmirplugins");
73+ paths << QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/nonmirplugins");
64 } else {
74 } else {
65− paths << QString("@CMAKE_BINARY_DIR@/nonmirplugins");
75+ paths << QString(buildDirectory() + "/nonmirplugins");
66 }
76 }
67 return paths;
77 return paths;
68}
78}
@@ -70,23 +80,23 @@ inline QStringList nonMirImportPaths() {
70inline QStringList fallbackImportPaths() {
80inline QStringList fallbackImportPaths() {
71 QStringList paths;
81 QStringList paths;
72 if (isRunningInstalled()) {
82 if (isRunningInstalled()) {
73− paths << QString("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@");
83+ paths << QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@");
74− paths << QString("@USS_PRIVATE_PLUGINDIR@");
84+ paths << QStringLiteral("@USS_PRIVATE_PLUGINDIR@");
75− paths << QString("@SHELL_PLUGINDIR@");
85+ paths << QStringLiteral("@SHELL_PLUGINDIR@");
76− paths << QString("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
86+ paths << QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
77 } else {
87 } else {
78− paths << QString("@USS_PRIVATE_PLUGINDIR@");
88+ paths << QStringLiteral("@USS_PRIVATE_PLUGINDIR@");
79− paths << QString("@SHELL_PLUGINDIR@");
89+ paths << QStringLiteral("@SHELL_PLUGINDIR@");
80− paths << QString("@CMAKE_BINARY_DIR@/tests/mocks");
90+ paths << QString(buildDirectory() + "/tests/mocks");
81 }
91 }
82 return paths;
92 return paths;
83}
93}
84
94
85inline QString mockPluginsDir() {
95inline QString mockPluginsDir() {
86 if (isRunningInstalled()) {
96 if (isRunningInstalled()) {
87− return QString("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
97+ return QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
88 } else {
98 } else {
89− return QString("@CMAKE_BINARY_DIR@/tests/mocks");
99+ return QString(buildDirectory() + "/tests/mocks");
90 }
100 }
91}
101}
92
102
@@ -99,10 +109,6 @@ inline QStringList shellDataDirs() {
99 return dirs;
109 return dirs;
100}
110}
101
111
102−inline QString sourceDirectory() {
103− return QString("@CMAKE_SOURCE_DIR@/");
104−}
105−
106inline void prependImportPaths(QQmlEngine *engine, const QStringList &paths)
112inline void prependImportPaths(QQmlEngine *engine, const QStringList &paths)
107{
113{
108 QStringList importPathList = engine->importPathList();
114 QStringList importPathList = engine->importPathList();
libs/UbuntuGestures/DebugHelpers.cpp+7−7
@@ -22,15 +22,15 @@ QString touchPointStateToString(Qt::TouchPointState state)
22{
22{
23 switch (state) {
23 switch (state) {
24 case Qt::TouchPointPressed:
24 case Qt::TouchPointPressed:
25− return QString("pressed");
25+ return QStringLiteral("pressed");
26 case Qt::TouchPointMoved:
26 case Qt::TouchPointMoved:
27− return QString("moved");
27+ return QStringLiteral("moved");
28 case Qt::TouchPointStationary:
28 case Qt::TouchPointStationary:
29− return QString("stationary");
29+ return QStringLiteral("stationary");
30 case Qt::TouchPointReleased:
30 case Qt::TouchPointReleased:
31− return QString("released");
31+ return QStringLiteral("released");
32 default:
32 default:
33− return QString("INVALID_STATE");
33+ return QStringLiteral("INVALID_STATE");
34 }
34 }
35}
35}
36
36
@@ -57,7 +57,7 @@ QString touchEventToString(const QTouchEvent *ev)
57
57
58 foreach(const QTouchEvent::TouchPoint& touchPoint, ev->touchPoints()) {
58 foreach(const QTouchEvent::TouchPoint& touchPoint, ev->touchPoints()) {
59 message.append(
59 message.append(
60− QString("(id:%1, state:%2, scenePos:(%3,%4)) ")
60+ QStringLiteral("(id:%1, state:%2, scenePos:(%3,%4)) ")
61 .arg(touchPoint.id())
61 .arg(touchPoint.id())
62 .arg(touchPointStateToString(touchPoint.state()))
62 .arg(touchPointStateToString(touchPoint.state()))
63 .arg(touchPoint.scenePos().x())
63 .arg(touchPoint.scenePos().x())
@@ -89,7 +89,7 @@ QString mouseEventToString(const QMouseEvent *ev)
89 message.append("INVALID_MOUSE_EVENT_TYPE ");
89 message.append("INVALID_MOUSE_EVENT_TYPE ");
90 }
90 }
91
91
92− message.append(QString("pos(%1, %2)").arg(ev->x()).arg(ev->y()));
92+ message.append(QStringLiteral("pos(%1, %2)").arg(ev->x()).arg(ev->y()));
93
93
94 return message;
94 return message;
95}
95}
libs/UbuntuGestures/TouchRegistry.cpp+1−1
@@ -105,7 +105,7 @@ void TouchRegistry::deliverTouchUpdatesToUndecidedCandidatesAndWatchers(const QT
105 // E.g.: a QTouchEvent might have three touches but a given item might be interested in only
105 // E.g.: a QTouchEvent might have three touches but a given item might be interested in only
106 // one of them. So he will get a UnownedTouchEvent from this QTouchEvent containing only that
106 // one of them. So he will get a UnownedTouchEvent from this QTouchEvent containing only that
107 // touch point.
107 // touch point.
108− QMap<QQuickItem*, QList<int>> touchIdsForItems;
108+ QHash<QQuickItem*, QList<int>> touchIdsForItems;
109
109
110 // Build touchIdsForItems
110 // Build touchIdsForItems
111 m_touchInfoPool.forEach([&](Pool<TouchInfo>::Iterator &touchInfo) {
111 m_touchInfoPool.forEach([&](Pool<TouchInfo>::Iterator &touchInfo) {
plugins/AccountsService/AccountsService.cpp+35−35
@@ -74,7 +74,7 @@ void AccountsService::setDemoEdges(bool demoEdges)
74{
74{
75 if (m_demoEdges != demoEdges) {
75 if (m_demoEdges != demoEdges) {
76 m_demoEdges = demoEdges;
76 m_demoEdges = demoEdges;
77− m_service->setUserProperty(m_user, "com.canonical.unity.AccountsService", "demo-edges", demoEdges);
77+ m_service->setUserProperty(m_user, QStringLiteral("com.canonical.unity.AccountsService"), QStringLiteral("demo-edges"), demoEdges);
78
78
79 Q_EMIT demoEdgesChanged();
79 Q_EMIT demoEdgesChanged();
80 }
80 }
@@ -114,7 +114,7 @@ void AccountsService::setHereEnabled(bool enabled)
114{
114{
115 if (m_hereEnabled != enabled) {
115 if (m_hereEnabled != enabled) {
116 m_hereEnabled = enabled;
116 m_hereEnabled = enabled;
117− m_service->setUserProperty(m_user, "com.ubuntu.location.providers.here.AccountsService", "LicenseAccepted", enabled);
117+ m_service->setUserProperty(m_user, QStringLiteral("com.ubuntu.location.providers.here.AccountsService"), QStringLiteral("LicenseAccepted"), enabled);
118
118
119 Q_EMIT hereEnabledChanged();
119 Q_EMIT hereEnabledChanged();
120 }
120 }
@@ -133,8 +133,8 @@ bool AccountsService::hereLicensePathValid() const
133void AccountsService::updateDemoEdges(bool async)
133void AccountsService::updateDemoEdges(bool async)
134{
134{
135 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
135 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
136− "com.canonical.unity.AccountsService",
136+ QStringLiteral("com.canonical.unity.AccountsService"),
137− "demo-edges");
137+ QStringLiteral("demo-edges"));
138 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
138 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
139
139
140 connect(watcher, &QDBusPendingCallWatcher::finished,
140 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -162,8 +162,8 @@ void AccountsService::updateDemoEdges(bool async)
162void AccountsService::updateEnableLauncherWhileLocked(bool async)
162void AccountsService::updateEnableLauncherWhileLocked(bool async)
163{
163{
164 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
164 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
165− "com.ubuntu.AccountsService.SecurityPrivacy",
165+ QStringLiteral("com.ubuntu.AccountsService.SecurityPrivacy"),
166− "EnableLauncherWhileLocked");
166+ QStringLiteral("EnableLauncherWhileLocked"));
167 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
167 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
168
168
169 connect(watcher, &QDBusPendingCallWatcher::finished,
169 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -191,8 +191,8 @@ void AccountsService::updateEnableLauncherWhileLocked(bool async)
191void AccountsService::updateEnableIndicatorsWhileLocked(bool async)
191void AccountsService::updateEnableIndicatorsWhileLocked(bool async)
192{
192{
193 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
193 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
194− "com.ubuntu.AccountsService.SecurityPrivacy",
194+ QStringLiteral("com.ubuntu.AccountsService.SecurityPrivacy"),
195− "EnableIndicatorsWhileLocked");
195+ QStringLiteral("EnableIndicatorsWhileLocked"));
196 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
196 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
197
197
198 connect(watcher, &QDBusPendingCallWatcher::finished,
198 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -220,8 +220,8 @@ void AccountsService::updateEnableIndicatorsWhileLocked(bool async)
220void AccountsService::updateBackgroundFile(bool async)
220void AccountsService::updateBackgroundFile(bool async)
221{
221{
222 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
222 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
223− "org.freedesktop.Accounts.User",
223+ QStringLiteral("org.freedesktop.Accounts.User"),
224− "BackgroundFile");
224+ QStringLiteral("BackgroundFile"));
225 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
225 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
226
226
227 connect(watcher, &QDBusPendingCallWatcher::finished,
227 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -249,8 +249,8 @@ void AccountsService::updateBackgroundFile(bool async)
249void AccountsService::updateStatsWelcomeScreen(bool async)
249void AccountsService::updateStatsWelcomeScreen(bool async)
250{
250{
251 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
251 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
252− "com.ubuntu.touch.AccountsService.SecurityPrivacy",
252+ QStringLiteral("com.ubuntu.touch.AccountsService.SecurityPrivacy"),
253− "StatsWelcomeScreen");
253+ QStringLiteral("StatsWelcomeScreen"));
254 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
254 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
255
255
256 connect(watcher, &QDBusPendingCallWatcher::finished,
256 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -278,8 +278,8 @@ void AccountsService::updateStatsWelcomeScreen(bool async)
278void AccountsService::updatePasswordDisplayHint(bool async)
278void AccountsService::updatePasswordDisplayHint(bool async)
279{
279{
280 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
280 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
281− "com.ubuntu.AccountsService.SecurityPrivacy",
281+ QStringLiteral("com.ubuntu.AccountsService.SecurityPrivacy"),
282− "PasswordDisplayHint");
282+ QStringLiteral("PasswordDisplayHint"));
283 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
283 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
284
284
285 connect(watcher, &QDBusPendingCallWatcher::finished,
285 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -307,8 +307,8 @@ void AccountsService::updatePasswordDisplayHint(bool async)
307void AccountsService::updateFailedLogins(bool async)
307void AccountsService::updateFailedLogins(bool async)
308{
308{
309 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
309 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
310− "com.canonical.unity.AccountsService.Private",
310+ QStringLiteral("com.canonical.unity.AccountsService.Private"),
311− "FailedLogins");
311+ QStringLiteral("FailedLogins"));
312 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
312 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
313
313
314 connect(watcher, &QDBusPendingCallWatcher::finished,
314 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -336,8 +336,8 @@ void AccountsService::updateFailedLogins(bool async)
336void AccountsService::updateHereEnabled(bool async)
336void AccountsService::updateHereEnabled(bool async)
337{
337{
338 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
338 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
339− "com.ubuntu.location.providers.here.AccountsService",
339+ QStringLiteral("com.ubuntu.location.providers.here.AccountsService"),
340− "LicenseAccepted");
340+ QStringLiteral("LicenseAccepted"));
341 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
341 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
342
342
343 connect(watcher, &QDBusPendingCallWatcher::finished,
343 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -365,8 +365,8 @@ void AccountsService::updateHereEnabled(bool async)
365void AccountsService::updateHereLicensePath(bool async)
365void AccountsService::updateHereLicensePath(bool async)
366{
366{
367 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
367 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
368− "com.ubuntu.location.providers.here.AccountsService",
368+ QStringLiteral("com.ubuntu.location.providers.here.AccountsService"),
369− "LicenseBasePath");
369+ QStringLiteral("LicenseBasePath"));
370 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
370 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
371
371
372 connect(watcher, &QDBusPendingCallWatcher::finished,
372 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -381,7 +381,7 @@ void AccountsService::updateHereLicensePath(bool async)
381
381
382 QString hereLicensePath = reply.value().toString();
382 QString hereLicensePath = reply.value().toString();
383 if (hereLicensePath.isEmpty() || !QFile::exists(hereLicensePath))
383 if (hereLicensePath.isEmpty() || !QFile::exists(hereLicensePath))
384− hereLicensePath = "";
384+ hereLicensePath = QLatin1String("");
385
385
386 if (m_hereLicensePath.isNull() || m_hereLicensePath != hereLicensePath) {
386 if (m_hereLicensePath.isNull() || m_hereLicensePath != hereLicensePath) {
387 m_hereLicensePath = hereLicensePath;
387 m_hereLicensePath = hereLicensePath;
@@ -403,7 +403,7 @@ void AccountsService::setFailedLogins(uint failedLogins)
403{
403{
404 if (m_failedLogins != failedLogins) {
404 if (m_failedLogins != failedLogins) {
405 m_failedLogins = failedLogins;
405 m_failedLogins = failedLogins;
406− m_service->setUserProperty(m_user, "com.canonical.unity.AccountsService.Private", "FailedLogins", failedLogins);
406+ m_service->setUserProperty(m_user, QStringLiteral("com.canonical.unity.AccountsService.Private"), QStringLiteral("FailedLogins"), failedLogins);
407
407
408 Q_EMIT failedLoginsChanged();
408 Q_EMIT failedLoginsChanged();
409 }
409 }
@@ -415,33 +415,33 @@ void AccountsService::onPropertiesChanged(const QString &user, const QString &in
415 return;
415 return;
416 }
416 }
417
417
418− if (interface == "com.canonical.unity.AccountsService") {
418+ if (interface == QLatin1String("com.canonical.unity.AccountsService")) {
419− if (changed.contains("demo-edges")) {
419+ if (changed.contains(QStringLiteral("demo-edges"))) {
420 updateDemoEdges();
420 updateDemoEdges();
421 }
421 }
422− } else if (interface == "com.canonical.unity.AccountsService.Private") {
422+ } else if (interface == QLatin1String("com.canonical.unity.AccountsService.Private")) {
423− if (changed.contains("FailedLogins")) {
423+ if (changed.contains(QStringLiteral("FailedLogins"))) {
424 updateFailedLogins();
424 updateFailedLogins();
425 }
425 }
426− } else if (interface == "com.ubuntu.touch.AccountsService.SecurityPrivacy") {
426+ } else if (interface == QLatin1String("com.ubuntu.touch.AccountsService.SecurityPrivacy")) {
427− if (changed.contains("StatsWelcomeScreen")) {
427+ if (changed.contains(QStringLiteral("StatsWelcomeScreen"))) {
428 updateStatsWelcomeScreen();
428 updateStatsWelcomeScreen();
429 }
429 }
430− } else if (interface == "com.ubuntu.AccountsService.SecurityPrivacy") {
430+ } else if (interface == QLatin1String("com.ubuntu.AccountsService.SecurityPrivacy")) {
431− if (changed.contains("PasswordDisplayHint")) {
431+ if (changed.contains(QStringLiteral("PasswordDisplayHint"))) {
432 updatePasswordDisplayHint();
432 updatePasswordDisplayHint();
433 }
433 }
434− if (changed.contains("EnableLauncherWhileLocked")) {
434+ if (changed.contains(QStringLiteral("EnableLauncherWhileLocked"))) {
435 updateEnableLauncherWhileLocked();
435 updateEnableLauncherWhileLocked();
436 }
436 }
437− if (changed.contains("EnableIndicatorsWhileLocked")) {
437+ if (changed.contains(QStringLiteral("EnableIndicatorsWhileLocked"))) {
438 updateEnableIndicatorsWhileLocked();
438 updateEnableIndicatorsWhileLocked();
439 }
439 }
440− } else if (interface == "com.ubuntu.location.providers.here.AccountsService") {
440+ } else if (interface == QLatin1String("com.ubuntu.location.providers.here.AccountsService")) {
441− if (changed.contains("LicenseAccepted")) {
441+ if (changed.contains(QStringLiteral("LicenseAccepted"))) {
442 updateHereEnabled();
442 updateHereEnabled();
443 }
443 }
444− if (changed.contains("LicenseBasePath")) {
444+ if (changed.contains(QStringLiteral("LicenseBasePath"))) {
445 updateHereLicensePath();
445 updateHereLicensePath();
446 }
446 }
447 }
447 }
plugins/AccountsService/AccountsServiceDBusAdaptor.cpp+17−17
@@ -30,10 +30,10 @@ AccountsServiceDBusAdaptor::AccountsServiceDBusAdaptor(QObject* parent)
30{
30{
31 QDBusConnection connection = QDBusConnection::SM_BUSNAME();
31 QDBusConnection connection = QDBusConnection::SM_BUSNAME();
32 QDBusConnectionInterface *interface = connection.interface();
32 QDBusConnectionInterface *interface = connection.interface();
33− interface->startService("org.freedesktop.Accounts");
33+ interface->startService(QStringLiteral("org.freedesktop.Accounts"));
34− m_accountsManager = new QDBusInterface("org.freedesktop.Accounts",
34+ m_accountsManager = new QDBusInterface(QStringLiteral("org.freedesktop.Accounts"),
35− "/org/freedesktop/Accounts",
35+ QStringLiteral("/org/freedesktop/Accounts"),
36− "org.freedesktop.Accounts",
36+ QStringLiteral("org.freedesktop.Accounts"),
37 connection, this);
37 connection, this);
38}
38}
39
39
@@ -41,7 +41,7 @@ QVariant AccountsServiceDBusAdaptor::getUserProperty(const QString &user, const
41{
41{
42 QDBusInterface *iface = getUserInterface(user);
42 QDBusInterface *iface = getUserInterface(user);
43 if (iface != nullptr && iface->isValid()) {
43 if (iface != nullptr && iface->isValid()) {
44− QDBusReply<QVariant> answer = iface->call("Get", interface, property);
44+ QDBusReply<QVariant> answer = iface->call(QStringLiteral("Get"), interface, property);
45 if (answer.isValid()) {
45 if (answer.isValid()) {
46 return answer;
46 return answer;
47 }
47 }
@@ -53,9 +53,9 @@ QDBusPendingReply<QVariant> AccountsServiceDBusAdaptor::getUserPropertyAsync(con
53{
53{
54 QDBusInterface *iface = getUserInterface(user);
54 QDBusInterface *iface = getUserInterface(user);
55 if (iface != nullptr && iface->isValid()) {
55 if (iface != nullptr && iface->isValid()) {
56− return iface->asyncCall("Get", interface, property);
56+ return iface->asyncCall(QStringLiteral("Get"), interface, property);
57 }
57 }
58− return QDBusPendingReply<QVariant>(QDBusMessage::createError(QDBusError::Other, "Invalid Interface"));
58+ return QDBusPendingReply<QVariant>(QDBusMessage::createError(QDBusError::Other, QStringLiteral("Invalid Interface")));
59}
59}
60
60
61void AccountsServiceDBusAdaptor::setUserProperty(const QString &user, const QString &interface, const QString &property, const QVariant &value)
61void AccountsServiceDBusAdaptor::setUserProperty(const QString &user, const QString &interface, const QString &property, const QVariant &value)
@@ -63,7 +63,7 @@ void AccountsServiceDBusAdaptor::setUserProperty(const QString &user, const QStr
63 QDBusInterface *iface = getUserInterface(user);
63 QDBusInterface *iface = getUserInterface(user);
64 if (iface != nullptr && iface->isValid()) {
64 if (iface != nullptr && iface->isValid()) {
65 // The value needs to be carefully wrapped
65 // The value needs to be carefully wrapped
66− iface->call("Set", interface, property, QVariant::fromValue(QDBusVariant(value)));
66+ iface->call(QStringLiteral("Set"), interface, property, QVariant::fromValue(QDBusVariant(value)));
67 }
67 }
68}
68}
69
69
@@ -72,9 +72,9 @@ QDBusPendingCall AccountsServiceDBusAdaptor::setUserPropertyAsync(const QString
72 QDBusInterface *iface = getUserInterface(user);
72 QDBusInterface *iface = getUserInterface(user);
73 if (iface != nullptr && iface->isValid()) {
73 if (iface != nullptr && iface->isValid()) {
74 // The value needs to be carefully wrapped
74 // The value needs to be carefully wrapped
75− return iface->asyncCall("Set", interface, property, QVariant::fromValue(QDBusVariant(value)));
75+ return iface->asyncCall(QStringLiteral("Set"), interface, property, QVariant::fromValue(QDBusVariant(value)));
76 }
76 }
77− return QDBusPendingCall::fromCompletedCall(QDBusMessage::createError(QDBusError::Other, "Invalid Interface"));
77+ return QDBusPendingCall::fromCompletedCall(QDBusMessage::createError(QDBusError::Other, QStringLiteral("Invalid Interface")));
78}
78}
79
79
80void AccountsServiceDBusAdaptor::propertiesChangedSlot(const QString &interface, const QVariantMap &changed, const QStringList &invalid)
80void AccountsServiceDBusAdaptor::propertiesChangedSlot(const QString &interface, const QVariantMap &changed, const QStringList &invalid)
@@ -116,13 +116,13 @@ QDBusInterface *AccountsServiceDBusAdaptor::getUserInterface(const QString &user
116{
116{
117 QDBusInterface *iface = m_users.value(user);
117 QDBusInterface *iface = m_users.value(user);
118 if (iface == nullptr && m_accountsManager->isValid()) {
118 if (iface == nullptr && m_accountsManager->isValid()) {
119− QDBusReply<QDBusObjectPath> answer = m_accountsManager->asyncCall("FindUserByName", user);
119+ QDBusReply<QDBusObjectPath> answer = m_accountsManager->asyncCall(QStringLiteral("FindUserByName"), user);
120 if (answer.isValid()) {
120 if (answer.isValid()) {
121 const QString path = answer.value().path();
121 const QString path = answer.value().path();
122
122
123− iface = new QDBusInterface("org.freedesktop.Accounts",
123+ iface = new QDBusInterface(QStringLiteral("org.freedesktop.Accounts"),
124 path,
124 path,
125− "org.freedesktop.DBus.Properties",
125+ QStringLiteral("org.freedesktop.DBus.Properties"),
126 m_accountsManager->connection(), this);
126 m_accountsManager->connection(), this);
127
127
128 // With its own pre-defined properties, AccountsService is oddly
128 // With its own pre-defined properties, AccountsService is oddly
@@ -132,8 +132,8 @@ QDBusInterface *AccountsServiceDBusAdaptor::getUserInterface(const QString &user
132 iface->connection().connect(
132 iface->connection().connect(
133 iface->service(),
133 iface->service(),
134 path,
134 path,
135− "org.freedesktop.Accounts.User",
135+ QStringLiteral("org.freedesktop.Accounts.User"),
136− "Changed",
136+ QStringLiteral("Changed"),
137 this,
137 this,
138 SLOT(maybeChangedSlot()));
138 SLOT(maybeChangedSlot()));
139
139
@@ -142,8 +142,8 @@ QDBusInterface *AccountsServiceDBusAdaptor::getUserInterface(const QString &user
142 iface->connection().connect(
142 iface->connection().connect(
143 iface->service(),
143 iface->service(),
144 path,
144 path,
145− "org.freedesktop.DBus.Properties",
145+ QStringLiteral("org.freedesktop.DBus.Properties"),
146− "PropertiesChanged",
146+ QStringLiteral("PropertiesChanged"),
147 this,
147 this,
148 SLOT(propertiesChangedSlot(QString, QVariantMap, QStringList)));
148 SLOT(propertiesChangedSlot(QString, QVariantMap, QStringList)));
149
149
plugins/Dash/horizontaljournal.cpp−2
@@ -33,8 +33,6 @@
33#include <private/qquickitem_p.h>
33#include <private/qquickitem_p.h>
34#pragma GCC diagnostic pop
34#pragma GCC diagnostic pop
35
35
36−static const qreal bufferRatio = 0.5;
37−
38HorizontalJournal::HorizontalJournal()
36HorizontalJournal::HorizontalJournal()
39 : m_firstVisibleIndex(-1)
37 : m_firstVisibleIndex(-1)
40 , m_rowHeight(0)
38 , m_rowHeight(0)
plugins/Dash/listviewwithpageheader.cpp+12−12
@@ -164,7 +164,7 @@ ListViewWithPageHeader::ListViewWithPageHeader()
164
164
165 m_contentYAnimation = new QQuickNumberAnimation(this);
165 m_contentYAnimation = new QQuickNumberAnimation(this);
166 m_contentYAnimation->setEasing(QEasingCurve::OutQuad);
166 m_contentYAnimation->setEasing(QEasingCurve::OutQuad);
167− m_contentYAnimation->setProperty("contentY");
167+ m_contentYAnimation->setProperty(QStringLiteral("contentY"));
168 m_contentYAnimation->setDuration(200);
168 m_contentYAnimation->setDuration(200);
169 m_contentYAnimation->setTargetObject(this);
169 m_contentYAnimation->setTargetObject(this);
170
170
@@ -745,8 +745,8 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(const QString &sectionText)
745
745
746 QQmlContext *creationContext = m_sectionDelegate->creationContext();
746 QQmlContext *creationContext = m_sectionDelegate->creationContext();
747 QQmlContext *context = new QQmlContext(creationContext ? creationContext : qmlContext(this));
747 QQmlContext *context = new QQmlContext(creationContext ? creationContext : qmlContext(this));
748− context->setContextProperty(QLatin1String("section"), sectionText);
748+ context->setContextProperty(QStringLiteral("section"), sectionText);
749− context->setContextProperty(QLatin1String("delegateIndex"), -1);
749+ context->setContextProperty(QStringLiteral("delegateIndex"), -1);
750 QObject *nobj = m_sectionDelegate->beginCreate(context);
750 QObject *nobj = m_sectionDelegate->beginCreate(context);
751 if (nobj) {
751 if (nobj) {
752 QQml_setParent_noEvent(context, nobj);
752 QQml_setParent_noEvent(context, nobj);
@@ -879,7 +879,7 @@ ListViewWithPageHeader::ListItem *ListViewWithPageHeader::createItem(int modelIn
879 }
879 }
880 if (listItem->sectionItem()) {
880 if (listItem->sectionItem()) {
881 QQmlContext *context = QQmlEngine::contextForObject(listItem->sectionItem())->parentContext();
881 QQmlContext *context = QQmlEngine::contextForObject(listItem->sectionItem())->parentContext();
882− context->setContextProperty(QLatin1String("delegateIndex"), modelIndex);
882+ context->setContextProperty(QStringLiteral("delegateIndex"), modelIndex);
883 }
883 }
884 adjustMinYExtent();
884 adjustMinYExtent();
885 m_contentHeightDirty = true;
885 m_contentHeightDirty = true;
@@ -904,8 +904,8 @@ void ListViewWithPageHeader::itemCreated(int modelIndex, QObject *object)
904
904
905 item->setParentItem(m_clipItem);
905 item->setParentItem(m_clipItem);
906 QQmlContext *context = QQmlEngine::contextForObject(item)->parentContext();
906 QQmlContext *context = QQmlEngine::contextForObject(item)->parentContext();
907− context->setContextProperty(QLatin1String("ListViewWithPageHeader"), this);
907+ context->setContextProperty(QStringLiteral("ListViewWithPageHeader"), this);
908− context->setContextProperty(QLatin1String("heightToClip"), QVariant::fromValue<int>(0));
908+ context->setContextProperty(QStringLiteral("heightToClip"), QVariant::fromValue<int>(0));
909 if (modelIndex == m_asyncRequestedIndex) {
909 if (modelIndex == m_asyncRequestedIndex) {
910 createItem(modelIndex, false);
910 createItem(modelIndex, false);
911 refill();
911 refill();
@@ -1059,7 +1059,7 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
1059 if (item && item->sectionItem()) {
1059 if (item && item->sectionItem()) {
1060 QQmlContext *context = QQmlEngine::contextForObject(item->sectionItem())->parentContext();
1060 QQmlContext *context = QQmlEngine::contextForObject(item->sectionItem())->parentContext();
1061 const QString sectionText = m_delegateModel->stringValue(i, m_sectionProperty);
1061 const QString sectionText = m_delegateModel->stringValue(i, m_sectionProperty);
1062− context->setContextProperty(QLatin1String("section"), sectionText);
1062+ context->setContextProperty(QStringLiteral("section"), sectionText);
1063 }
1063 }
1064 }
1064 }
1065 }
1065 }
@@ -1072,7 +1072,7 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
1072 ListItem *item = m_visibleItems[i];
1072 ListItem *item = m_visibleItems[i];
1073 if (item->sectionItem()) {
1073 if (item->sectionItem()) {
1074 QQmlContext *context = QQmlEngine::contextForObject(item->sectionItem())->parentContext();
1074 QQmlContext *context = QQmlEngine::contextForObject(item->sectionItem())->parentContext();
1075− context->setContextProperty(QLatin1String("delegateIndex"), m_firstVisibleIndex + i);
1075+ context->setContextProperty(QStringLiteral("delegateIndex"), m_firstVisibleIndex + i);
1076 }
1076 }
1077 }
1077 }
1078
1078
@@ -1235,7 +1235,7 @@ void ListViewWithPageHeader::layout()
1235 // Update the top sticky section header
1235 // Update the top sticky section header
1236 const QString section = m_delegateModel->stringValue(modelIndex, m_sectionProperty);
1236 const QString section = m_delegateModel->stringValue(modelIndex, m_sectionProperty);
1237 QQmlContext *context = QQmlEngine::contextForObject(m_topSectionItem)->parentContext();
1237 QQmlContext *context = QQmlEngine::contextForObject(m_topSectionItem)->parentContext();
1238− context->setContextProperty(QLatin1String("section"), section);
1238+ context->setContextProperty(QStringLiteral("section"), section);
1239
1239
1240 QQuickItemPrivate::get(m_topSectionItem)->setCulled(false);
1240 QQuickItemPrivate::get(m_topSectionItem)->setCulled(false);
1241 m_topSectionItem->setY(topSectionStickPos);
1241 m_topSectionItem->setY(topSectionStickPos);
@@ -1247,7 +1247,7 @@ void ListViewWithPageHeader::layout()
1247 break;
1247 break;
1248 delegateIndex--;
1248 delegateIndex--;
1249 }
1249 }
1250− context->setContextProperty(QLatin1String("delegateIndex"), delegateIndex);
1250+ context->setContextProperty(QStringLiteral("delegateIndex"), delegateIndex);
1251 if (item->sectionItem()) {
1251 if (item->sectionItem()) {
1252 QQuickItemPrivate::get(item->sectionItem())->setCulled(true);
1252 QQuickItemPrivate::get(item->sectionItem())->setCulled(true);
1253 }
1253 }
@@ -1257,9 +1257,9 @@ void ListViewWithPageHeader::layout()
1257 QQmlContext *context = QQmlEngine::contextForObject(item->m_item)->parentContext();
1257 QQmlContext *context = QQmlEngine::contextForObject(item->m_item)->parentContext();
1258 const qreal clipFrom = visibleFrom + (!item->sectionItem() && m_topSectionItem && !QQuickItemPrivate::get(m_topSectionItem)->culled ? m_topSectionItem->height() : 0);
1258 const qreal clipFrom = visibleFrom + (!item->sectionItem() && m_topSectionItem && !QQuickItemPrivate::get(m_topSectionItem)->culled ? m_topSectionItem->height() : 0);
1259 if (!cull && pos < clipFrom) {
1259 if (!cull && pos < clipFrom) {
1260− context->setContextProperty(QLatin1String("heightToClip"), clipFrom - pos);
1260+ context->setContextProperty(QStringLiteral("heightToClip"), clipFrom - pos);
1261 } else {
1261 } else {
1262− context->setContextProperty(QLatin1String("heightToClip"), QVariant::fromValue<int>(0));
1262+ context->setContextProperty(QStringLiteral("heightToClip"), QVariant::fromValue<int>(0));
1263 }
1263 }
1264// qDebug() << "ListViewWithPageHeader::layout" << item->m_item;
1264// qDebug() << "ListViewWithPageHeader::layout" << item->m_item;
1265 pos += item->height();
1265 pos += item->height();
plugins/Dash/organicgrid.cpp−2
@@ -21,8 +21,6 @@
21#include <private/qquickitem_p.h>
21#include <private/qquickitem_p.h>
22#pragma GCC diagnostic pop
22#pragma GCC diagnostic pop
23
23
24−static const qreal bufferRatio = 0.5;
25−
26OrganicGrid::OrganicGrid()
24OrganicGrid::OrganicGrid()
27 : m_firstVisibleIndex(-1)
25 : m_firstVisibleIndex(-1)
28 , m_numberOfModulesPerRow(-1)
26 , m_numberOfModulesPerRow(-1)
plugins/Dash/verticaljournal.cpp−2
@@ -32,8 +32,6 @@
32#include <private/qquickitem_p.h>
32#include <private/qquickitem_p.h>
33#pragma GCC diagnostic pop
33#pragma GCC diagnostic pop
34
34
35−static const qreal bufferRatio = 0.5;
36−
37VerticalJournal::VerticalJournal()
35VerticalJournal::VerticalJournal()
38 : m_columnWidth(0)
36 : m_columnWidth(0)
39{
37{
plugins/GlobalShortcut/globalshortcut.cpp+1−1
@@ -72,7 +72,7 @@ void GlobalShortcut::keyPressEvent(QKeyEvent * event)
72void GlobalShortcut::setupFilterOnWindow(QQuickWindow *window)
72void GlobalShortcut::setupFilterOnWindow(QQuickWindow *window)
73{
73{
74 if (!window) {
74 if (!window) {
75− qWarning() << Q_FUNC_INFO << "Failed to setup filter on window";
75+// qWarning() << Q_FUNC_INFO << "Failed to setup filter on window";
76 return;
76 return;
77 }
77 }
78
78
plugins/Greeter/Unity/Launcher/launcheritem.cpp+2−2
@@ -35,7 +35,7 @@ LauncherItem::LauncherItem(const QString &appId, const QString &name, const QStr
35 m_quickList(new QuickListModel(this))
35 m_quickList(new QuickListModel(this))
36{
36{
37 QuickListEntry nameAction;
37 QuickListEntry nameAction;
38− nameAction.setActionId("launch_item");
38+ nameAction.setActionId(QStringLiteral("launch_item"));
39 nameAction.setText(m_name);
39 nameAction.setText(m_name);
40 m_quickList->appendAction(nameAction);
40 m_quickList->appendAction(nameAction);
41}
41}
@@ -55,7 +55,7 @@ void LauncherItem::setName(const QString &name)
55 if (m_name != name) {
55 if (m_name != name) {
56 m_name = name;
56 m_name = name;
57 QuickListEntry entry;
57 QuickListEntry entry;
58− entry.setActionId("launch_item");
58+ entry.setActionId(QStringLiteral("launch_item"));
59 entry.setText(m_name);
59 entry.setText(m_name);
60 m_quickList->updateAction(entry);
60 m_quickList->updateAction(entry);
61 Q_EMIT nameChanged(name);
61 Q_EMIT nameChanged(name);
plugins/Greeter/Unity/Launcher/launchermodelas.cpp+22−22
@@ -122,7 +122,7 @@ void LauncherModel::quickListActionInvoked(const QString &appId, int actionIndex
122 QString actionId = model->get(actionIndex).actionId();
122 QString actionId = model->get(actionIndex).actionId();
123
123
124 // Check if this is one of the launcher actions we handle ourselves
124 // Check if this is one of the launcher actions we handle ourselves
125− if (actionId == "launch_item") {
125+ if (actionId == QLatin1String("launch_item")) {
126 QDesktopServices::openUrl(getUrlForAppId(appId));
126 QDesktopServices::openUrl(getUrlForAppId(appId));
127
127
128 // Nope, we don't know this action, let the backend forward it to the application
128 // Nope, we don't know this action, let the backend forward it to the application
@@ -147,13 +147,13 @@ QString LauncherModel::getUrlForAppId(const QString &appId) const
147 return QString();
147 return QString();
148 }
148 }
149
149
150− if (!appId.contains("_")) {
150+ if (!appId.contains('_')) {
151 return "application:///" + appId + ".desktop";
151 return "application:///" + appId + ".desktop";
152 }
152 }
153
153
154 QStringList parts = appId.split('_');
154 QStringList parts = appId.split('_');
155 QString package = parts.value(0);
155 QString package = parts.value(0);
156− QString app = parts.value(1, "first-listed-app");
156+ QString app = parts.value(1, QStringLiteral("first-listed-app"));
157 return "appid://" + package + "/" + app + "/current-user-version";
157 return "appid://" + package + "/" + app + "/current-user-version";
158}
158}
159
159
@@ -200,7 +200,7 @@ void LauncherModel::refresh()
200 QList<QVariantMap> items;
200 QList<QVariantMap> items;
201
201
202 if (m_accounts && !m_user.isEmpty()) {
202 if (m_accounts && !m_user.isEmpty()) {
203− items = m_accounts->getUserProperty<VariantMapList>(m_user, "com.canonical.unity.AccountsService", "LauncherItems");
203+ items = m_accounts->getUserProperty<VariantMapList>(m_user, QStringLiteral("com.canonical.unity.AccountsService"), QStringLiteral("LauncherItems"));
204 }
204 }
205
205
206 // First walk through all the existing items and see if we need to remove something
206 // First walk through all the existing items and see if we need to remove something
@@ -210,16 +210,16 @@ void LauncherModel::refresh()
210 bool found = false;
210 bool found = false;
211 Q_FOREACH(const QVariant &asItem, items) {
211 Q_FOREACH(const QVariant &asItem, items) {
212 QVariantMap cachedMap = asItem.toMap();
212 QVariantMap cachedMap = asItem.toMap();
213− if (cachedMap.value("id").toString() == item->appId()) {
213+ if (cachedMap.value(QStringLiteral("id")).toString() == item->appId()) {
214 // Only keep and update it if we either show unpinned or it is pinned
214 // Only keep and update it if we either show unpinned or it is pinned
215− if (!m_onlyPinned || cachedMap.value("pinned").toBool()) {
215+ if (!m_onlyPinned || cachedMap.value(QStringLiteral("pinned")).toBool()) {
216 found = true;
216 found = true;
217− item->setName(cachedMap.value("name").toString());
217+ item->setName(cachedMap.value(QStringLiteral("name")).toString());
218− item->setIcon(cachedMap.value("icon").toString());
218+ item->setIcon(cachedMap.value(QStringLiteral("icon")).toString());
219− item->setCount(cachedMap.value("count").toInt());
219+ item->setCount(cachedMap.value(QStringLiteral("count")).toInt());
220− item->setCountVisible(cachedMap.value("countVisible").toBool());
220+ item->setCountVisible(cachedMap.value(QStringLiteral("countVisible")).toBool());
221− item->setProgress(cachedMap.value("progress").toInt());
221+ item->setProgress(cachedMap.value(QStringLiteral("progress")).toInt());
222− item->setRunning(cachedMap.value("running").toBool());
222+ item->setRunning(cachedMap.value(QStringLiteral("running")).toBool());
223
223
224 int idx = m_list.indexOf(item);
224 int idx = m_list.indexOf(item);
225 Q_EMIT dataChanged(index(idx), index(idx), {RoleName, RoleIcon, RoleCount, RoleCountVisible, RoleRunning, RoleProgress});
225 Q_EMIT dataChanged(index(idx), index(idx), {RoleName, RoleIcon, RoleCount, RoleCountVisible, RoleRunning, RoleProgress});
@@ -244,7 +244,7 @@ void LauncherModel::refresh()
244 for (int asIndex = 0; asIndex < items.count(); ++asIndex) {
244 for (int asIndex = 0; asIndex < items.count(); ++asIndex) {
245 QVariant entry = items.at(asIndex);
245 QVariant entry = items.at(asIndex);
246
246
247− if (m_onlyPinned && !entry.toMap().value("pinned").toBool()) {
247+ if (m_onlyPinned && !entry.toMap().value(QStringLiteral("pinned")).toBool()) {
248 // Skipping it as we only show pinned and it is not
248 // Skipping it as we only show pinned and it is not
249 skipped++;
249 skipped++;
250 continue;
250 continue;
@@ -253,7 +253,7 @@ void LauncherModel::refresh()
253
253
254 int itemIndex = -1;
254 int itemIndex = -1;
255 for (int i = 0; i < m_list.count(); ++i) {
255 for (int i = 0; i < m_list.count(); ++i) {
256− if (m_list.at(i)->appId() == entry.toMap().value("id").toString()) {
256+ if (m_list.at(i)->appId() == entry.toMap().value(QStringLiteral("id")).toString()) {
257 itemIndex = i;
257 itemIndex = i;
258 break;
258 break;
259 }
259 }
@@ -262,15 +262,15 @@ void LauncherModel::refresh()
262 if (itemIndex == -1) {
262 if (itemIndex == -1) {
263 QVariantMap cachedMap = entry.toMap();
263 QVariantMap cachedMap = entry.toMap();
264 // Need to add it. Just add it into the addedIndex to keep same ordering as the list in AS.
264 // Need to add it. Just add it into the addedIndex to keep same ordering as the list in AS.
265− LauncherItem *item = new LauncherItem(cachedMap.value("id").toString(),
265+ LauncherItem *item = new LauncherItem(cachedMap.value(QStringLiteral("id")).toString(),
266− cachedMap.value("name").toString(),
266+ cachedMap.value(QStringLiteral("name")).toString(),
267− cachedMap.value("icon").toString(),
267+ cachedMap.value(QStringLiteral("icon")).toString(),
268 this);
268 this);
269 item->setPinned(true);
269 item->setPinned(true);
270− item->setCount(cachedMap.value("count").toInt());
270+ item->setCount(cachedMap.value(QStringLiteral("count")).toInt());
271− item->setCountVisible(cachedMap.value("countVisible").toBool());
271+ item->setCountVisible(cachedMap.value(QStringLiteral("countVisible")).toBool());
272− item->setProgress(cachedMap.value("progress").toInt());
272+ item->setProgress(cachedMap.value(QStringLiteral("progress")).toInt());
273− item->setRunning(cachedMap.value("running").toBool());
273+ item->setRunning(cachedMap.value(QStringLiteral("running")).toBool());
274 beginInsertRows(QModelIndex(), newPosition, newPosition);
274 beginInsertRows(QModelIndex(), newPosition, newPosition);
275 m_list.insert(newPosition, item);
275 m_list.insert(newPosition, item);
276 endInsertRows();
276 endInsertRows();
@@ -286,7 +286,7 @@ void LauncherModel::refresh()
286
286
287void LauncherModel::propertiesChanged(const QString &user, const QString &interface, const QStringList &changed)
287void LauncherModel::propertiesChanged(const QString &user, const QString &interface, const QStringList &changed)
288{
288{
289− if (user != m_user || interface != "com.canonical.unity.AccountsService" || !changed.contains("LauncherItems")) {
289+ if (user != m_user || interface != QLatin1String("com.canonical.unity.AccountsService") || !changed.contains(QStringLiteral("LauncherItems"))) {
290 return;
290 return;
291 }
291 }
292 refresh();
292 refresh();
plugins/Greeter/Unity/Launcher/plugin.cpp+5−5
@@ -36,11 +36,11 @@ void UnityLauncherPlugin::registerTypes(const char *uri)
36{
36{
37 Q_ASSERT(uri == QLatin1String("Unity.Launcher"));
37 Q_ASSERT(uri == QLatin1String("Unity.Launcher"));
38
38
39− qmlRegisterUncreatableType<LauncherModelInterface>(uri, 0, 1, "LauncherModelInterface", "Abstract Interface. Cannot be instantiated.");
39+ qmlRegisterUncreatableType<LauncherModelInterface>(uri, 0, 1, "LauncherModelInterface", QStringLiteral("Abstract Interface. Cannot be instantiated."));
40− qmlRegisterUncreatableType<LauncherItemInterface>(uri, 0, 1, "LauncherItemInterface", "Abstract Interface. Cannot be instantiated.");
40+ qmlRegisterUncreatableType<LauncherItemInterface>(uri, 0, 1, "LauncherItemInterface", QStringLiteral("Abstract Interface. Cannot be instantiated."));
41− qmlRegisterUncreatableType<QuickListModelInterface>(uri, 0, 1, "QuickListInterface", "Abstract Interface. Cannot be instantiated.");
41+ qmlRegisterUncreatableType<QuickListModelInterface>(uri, 0, 1, "QuickListInterface", QStringLiteral("Abstract Interface. Cannot be instantiated."));
42
42
43 qmlRegisterSingletonType<LauncherModel>(uri, 0, 1, "LauncherModel", modelProvider);
43 qmlRegisterSingletonType<LauncherModel>(uri, 0, 1, "LauncherModel", modelProvider);
44− qmlRegisterUncreatableType<LauncherItem>(uri, 0, 1, "LauncherItem", "Can't create new Launcher Items in QML. Get them from the LauncherModel.");
44+ qmlRegisterUncreatableType<LauncherItem>(uri, 0, 1, "LauncherItem", QStringLiteral("Can't create new Launcher Items in QML. Get them from the LauncherModel."));
45− qmlRegisterUncreatableType<QuickListModel>(uri, 0, 1, "QuickListModel", "Can't create a QuickListModel in QML. Get them from the LauncherItems.");
45+ qmlRegisterUncreatableType<QuickListModel>(uri, 0, 1, "QuickListModel", QStringLiteral("Can't create a QuickListModel in QML. Get them from the LauncherItems."));
46}
46}
plugins/IntegratedLightDM/DBusGreeter.cpp+2−2
@@ -21,7 +21,7 @@
21#include <QStringList>
21#include <QStringList>
22
22
23DBusGreeter::DBusGreeter(Greeter *greeter, const QString &path)
23DBusGreeter::DBusGreeter(Greeter *greeter, const QString &path)
24− : UnityDBusObject(path, "com.canonical.UnityGreeter", true, greeter),
24+ : UnityDBusObject(path, QStringLiteral("com.canonical.UnityGreeter"), true, greeter),
25 m_greeter(greeter)
25 m_greeter(greeter)
26{
26{
27 connect(m_greeter, &Greeter::isActiveChanged, this, &DBusGreeter::isActiveChangedHandler);
27 connect(m_greeter, &Greeter::isActiveChanged, this, &DBusGreeter::isActiveChangedHandler);
@@ -44,6 +44,6 @@ void DBusGreeter::HideGreeter()
44
44
45void DBusGreeter::isActiveChangedHandler()
45void DBusGreeter::isActiveChangedHandler()
46{
46{
47− notifyPropertyChanged("IsActive", isActive());
47+ notifyPropertyChanged(QStringLiteral("IsActive"), isActive());
48 Q_EMIT isActiveChanged();
48 Q_EMIT isActiveChanged();
49}
49}
plugins/IntegratedLightDM/DBusGreeterList.cpp+3−3
@@ -21,7 +21,7 @@
21#include <QStringList>
21#include <QStringList>
22
22
23DBusGreeterList::DBusGreeterList(Greeter *greeter, const QString &path)
23DBusGreeterList::DBusGreeterList(Greeter *greeter, const QString &path)
24− : UnityDBusObject(path, "com.canonical.UnityGreeter", true, greeter),
24+ : UnityDBusObject(path, QStringLiteral("com.canonical.UnityGreeter"), true, greeter),
25 m_greeter(greeter)
25 m_greeter(greeter)
26{
26{
27 connect(m_greeter, &Greeter::authenticationUserChanged, this, &DBusGreeterList::authenticationUserChangedHandler);
27 connect(m_greeter, &Greeter::authenticationUserChanged, this, &DBusGreeterList::authenticationUserChangedHandler);
@@ -45,12 +45,12 @@ bool DBusGreeterList::entryIsLocked() const
45
45
46void DBusGreeterList::authenticationUserChangedHandler(const QString &user)
46void DBusGreeterList::authenticationUserChangedHandler(const QString &user)
47{
47{
48− notifyPropertyChanged("ActiveEntry", user);
48+ notifyPropertyChanged(QStringLiteral("ActiveEntry"), user);
49 Q_EMIT EntrySelected(user);
49 Q_EMIT EntrySelected(user);
50}
50}
51
51
52void DBusGreeterList::promptlessChangedHandler()
52void DBusGreeterList::promptlessChangedHandler()
53{
53{
54− notifyPropertyChanged("EntryIsLocked", entryIsLocked());
54+ notifyPropertyChanged(QStringLiteral("EntryIsLocked"), entryIsLocked());
55 Q_EMIT entryIsLockedChanged();
55 Q_EMIT entryIsLockedChanged();
56}
56}
plugins/IntegratedLightDM/Greeter.cpp+1−1
@@ -113,7 +113,7 @@ void Greeter::showPromptFilter(const QString &text, QLightDM::Greeter::PromptTyp
113
113
114 // Strip prompt of any colons at the end
114 // Strip prompt of any colons at the end
115 QString trimmedText = text.trimmed();
115 QString trimmedText = text.trimmed();
116− if (trimmedText.endsWith(":") || trimmedText.endsWith(":")) {
116+ if (trimmedText.endsWith(':') || trimmedText.endsWith(QStringLiteral(":"))) {
117 trimmedText.chop(1);
117 trimmedText.chop(1);
118 }
118 }
119
119
plugins/IntegratedLightDM/liblightdm/CMakeLists.txt+1−1
@@ -33,5 +33,5 @@ set_target_properties(MockLightDM-demo-shared PROPERTIES
33 OUTPUT_NAME lightdm-qt5-2)
33 OUTPUT_NAME lightdm-qt5-2)
34
34
35install(TARGETS MockLightDM-demo-shared
35install(TARGETS MockLightDM-demo-shared
36− DESTINATION ${SHELL_INSTALL_QML}/mocks/LightDM/demo
36+ DESTINATION ${SHELL_INSTALL_QML}/mocks/IntegratedLightDM/demo
37 )
37 )
plugins/IntegratedLightDM/liblightdm/Greeter.cpp+5−5
@@ -55,12 +55,12 @@ bool Greeter::hasGuestAccountHint() const
55QString Greeter::getHint(const QString &name) const
55QString Greeter::getHint(const QString &name) const
56{
56{
57 Q_UNUSED(name)
57 Q_UNUSED(name)
58− return "";
58+ return QLatin1String("");
59}
59}
60
60
61QString Greeter::defaultSessionHint() const
61QString Greeter::defaultSessionHint() const
62{
62{
63− return "ubuntu";
63+ return QStringLiteral("ubuntu");
64}
64}
65
65
66bool Greeter::hideUsersHint() const
66bool Greeter::hideUsersHint() const
@@ -85,7 +85,7 @@ bool Greeter::lockHint () const
85
85
86QString Greeter::selectUserHint() const
86QString Greeter::selectUserHint() const
87{
87{
88− return "";
88+ return QLatin1String("");
89}
89}
90
90
91bool Greeter::selectGuestHint() const
91bool Greeter::selectGuestHint() const
@@ -95,7 +95,7 @@ bool Greeter::selectGuestHint() const
95
95
96QString Greeter::autologinUserHint() const
96QString Greeter::autologinUserHint() const
97{
97{
98− return "";
98+ return QLatin1String("");
99}
99}
100
100
101bool Greeter::autologinGuestHint() const
101bool Greeter::autologinGuestHint() const
@@ -115,7 +115,7 @@ bool Greeter::inAuthentication() const
115
115
116QString Greeter::hostname() const
116QString Greeter::hostname() const
117{
117{
118− return "hostname1";
118+ return QStringLiteral("hostname1");
119}
119}
120
120
121bool Greeter::isAuthenticated() const
121bool Greeter::isAuthenticated() const
plugins/IntegratedLightDM/liblightdm/GreeterPrivate.cpp+1−1
@@ -91,7 +91,7 @@ public:
91 } else {
91 } else {
92 delete appData;
92 delete appData;
93 greeterPrivate->authenticated = false;
93 greeterPrivate->authenticated = false;
94− Q_EMIT greeter->showMessage("Internal error: could not start PAM authentication", QLightDM::Greeter::MessageTypeError);
94+ Q_EMIT greeter->showMessage(QStringLiteral("Internal error: could not start PAM authentication"), QLightDM::Greeter::MessageTypeError);
95 Q_EMIT greeter->authenticationComplete();
95 Q_EMIT greeter->authenticationComplete();
96 }
96 }
97 }
97 }
plugins/IntegratedLightDM/liblightdm/UsersModel.cpp+1−1
@@ -55,7 +55,7 @@ UsersModel::UsersModel(QObject *parent) :
55 setRoleNames(roles);
55 setRoleNames(roles);
56
56
57 // Now modify our mock user backgrounds
57 // Now modify our mock user backgrounds
58− QDir bgdir = QDir("/usr/share/demo-assets/shell/backgrounds/");
58+ QDir bgdir = QDir(QStringLiteral("/usr/share/demo-assets/shell/backgrounds/"));
59 QStringList backgrounds = bgdir.entryList(QDir::Files | QDir::NoDotAndDotDot);
59 QStringList backgrounds = bgdir.entryList(QDir::Files | QDir::NoDotAndDotDot);
60
60
61 for (int i = 0, j = 0; i < d->entries.size(); i++) {
61 for (int i = 0, j = 0; i < d->entries.size(); i++) {
plugins/IntegratedLightDM/liblightdm/UsersModelPrivate.cpp+2−1
@@ -29,8 +29,9 @@ UsersModelPrivate::UsersModelPrivate(UsersModel* parent)
29 : q_ptr(parent)
29 : q_ptr(parent)
30{
30{
31 QSettings settings(QDir::homePath() + "/.unity8-greeter-demo", QSettings::NativeFormat);
31 QSettings settings(QDir::homePath() + "/.unity8-greeter-demo", QSettings::NativeFormat);
32− QStringList users = settings.value("users", QStringList() << qgetenv("USER")).toStringList();
32+ QStringList users = settings.value(QStringLiteral("users"), QStringList() << qgetenv("USER")).toStringList();
33
33
34+ entries.reserve(users.count());
34 Q_FOREACH(const QString &user, users)
35 Q_FOREACH(const QString &user, users)
35 {
36 {
36 QString name = settings.value(user + "/name", user[0].toUpper() + user.mid(1)).toString();
37 QString name = settings.value(user + "/name", user[0].toUpper() + user.mid(1)).toString();
plugins/IntegratedLightDM/plugin.cpp+3−3
@@ -34,8 +34,8 @@ static QObject *greeter_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
34 Q_UNUSED(scriptEngine)
34 Q_UNUSED(scriptEngine)
35
35
36 Greeter *greeter = new Greeter();
36 Greeter *greeter = new Greeter();
37− new DBusGreeter(greeter, "/");
37+ new DBusGreeter(greeter, QStringLiteral("/"));
38− new DBusGreeterList(greeter, "/list");
38+ new DBusGreeterList(greeter, QStringLiteral("/list"));
39
39
40 return greeter;
40 return greeter;
41}
41}
@@ -64,6 +64,6 @@ void IntegratedLightDMPlugin::registerTypes(const char *uri)
64 qRegisterMetaType<QLightDM::Greeter::PromptType>("QLightDM::Greeter::PromptType");
64 qRegisterMetaType<QLightDM::Greeter::PromptType>("QLightDM::Greeter::PromptType");
65 qmlRegisterSingletonType<Greeter>(uri, 0, 1, "Greeter", greeter_provider);
65 qmlRegisterSingletonType<Greeter>(uri, 0, 1, "Greeter", greeter_provider);
66 qmlRegisterSingletonType<UsersModel>(uri, 0, 1, "Users", users_provider);
66 qmlRegisterSingletonType<UsersModel>(uri, 0, 1, "Users", users_provider);
67− qmlRegisterUncreatableType<QLightDM::UsersModel>(uri, 0, 1, "UserRoles", "Type is not instantiable");
67+ qmlRegisterUncreatableType<QLightDM::UsersModel>(uri, 0, 1, "UserRoles", QStringLiteral("Type is not instantiable"));
68 qmlRegisterSingletonType<UserMetricsOutput::UserMetrics>(uri, 0, 1, "Infographic", infographic_provider);
68 qmlRegisterSingletonType<UserMetricsOutput::UserMetrics>(uri, 0, 1, "Infographic", infographic_provider);
69}
69}
plugins/Powerd/Powerd.cpp+11−11
@@ -22,19 +22,19 @@
22void autoBrightnessChanged(GSettings *settings, const gchar *key, QDBusInterface *unityScreen)
22void autoBrightnessChanged(GSettings *settings, const gchar *key, QDBusInterface *unityScreen)
23{
23{
24 bool value = g_settings_get_boolean(settings, key);
24 bool value = g_settings_get_boolean(settings, key);
25− unityScreen->asyncCall("userAutobrightnessEnable", QVariant(value));
25+ unityScreen->asyncCall(QStringLiteral("userAutobrightnessEnable"), QVariant(value));
26}
26}
27
27
28void activityTimeoutChanged(GSettings *settings, const gchar *key, QDBusInterface *unityScreen)
28void activityTimeoutChanged(GSettings *settings, const gchar *key, QDBusInterface *unityScreen)
29{
29{
30 int value = g_settings_get_uint(settings, key);
30 int value = g_settings_get_uint(settings, key);
31− unityScreen->asyncCall("setInactivityTimeouts", QVariant(value), QVariant(-1));
31+ unityScreen->asyncCall(QStringLiteral("setInactivityTimeouts"), QVariant(value), QVariant(-1));
32}
32}
33
33
34void dimTimeoutChanged(GSettings *settings, const gchar *key, QDBusInterface *unityScreen)
34void dimTimeoutChanged(GSettings *settings, const gchar *key, QDBusInterface *unityScreen)
35{
35{
36 int value = g_settings_get_uint(settings, key);
36 int value = g_settings_get_uint(settings, key);
37− unityScreen->asyncCall("setInactivityTimeouts", QVariant(-1), QVariant(value));
37+ unityScreen->asyncCall(QStringLiteral("setInactivityTimeouts"), QVariant(-1), QVariant(value));
38}
38}
39
39
40Powerd::Powerd(QObject* parent)
40Powerd::Powerd(QObject* parent)
@@ -42,15 +42,15 @@ Powerd::Powerd(QObject* parent)
42 unityScreen(nullptr),
42 unityScreen(nullptr),
43 cachedStatus(Status::On)
43 cachedStatus(Status::On)
44{
44{
45− unityScreen = new QDBusInterface("com.canonical.Unity.Screen",
45+ unityScreen = new QDBusInterface(QStringLiteral("com.canonical.Unity.Screen"),
46− "/com/canonical/Unity/Screen",
46+ QStringLiteral("/com/canonical/Unity/Screen"),
47− "com.canonical.Unity.Screen",
47+ QStringLiteral("com.canonical.Unity.Screen"),
48 QDBusConnection::SM_BUSNAME(), this);
48 QDBusConnection::SM_BUSNAME(), this);
49
49
50− unityScreen->connection().connect("com.canonical.Unity.Screen",
50+ unityScreen->connection().connect(QStringLiteral("com.canonical.Unity.Screen"),
51− "/com/canonical/Unity/Screen",
51+ QStringLiteral("/com/canonical/Unity/Screen"),
52− "com.canonical.Unity.Screen",
52+ QStringLiteral("com.canonical.Unity.Screen"),
53− "DisplayPowerStateChange",
53+ QStringLiteral("DisplayPowerStateChange"),
54 this,
54 this,
55 SLOT(handleDisplayPowerStateChange(int, int)));
55 SLOT(handleDisplayPowerStateChange(int, int)));
56
56
@@ -76,7 +76,7 @@ Powerd::Status Powerd::status() const
76
76
77void Powerd::setStatus(Powerd::Status status, DisplayStateChangeReason reason)
77void Powerd::setStatus(Powerd::Status status, DisplayStateChangeReason reason)
78{
78{
79− unityScreen->asyncCall("setScreenPowerMode",
79+ unityScreen->asyncCall(QStringLiteral("setScreenPowerMode"),
80 status == Powerd::On ? "on" : "off",
80 status == Powerd::On ? "on" : "off",
81 static_cast<qint32>(reason));
81 static_cast<qint32>(reason));
82}
82}
plugins/ScreenGrabber/screengrabber.cpp+8−6
@@ -19,6 +19,7 @@
19#include <QDir>
19#include <QDir>
20#include <QDateTime>
20#include <QDateTime>
21#include <QStandardPaths>
21#include <QStandardPaths>
22+#include <QTemporaryDir>
22#include <QtGui/QImage>
23#include <QtGui/QImage>
23#include <QtGui/QGuiApplication>
24#include <QtGui/QGuiApplication>
24#include <QtQuick/QQuickWindow>
25#include <QtQuick/QQuickWindow>
@@ -42,14 +43,15 @@ ScreenGrabber::ScreenGrabber(QObject *parent)
42 QDir screenshotsDir;
43 QDir screenshotsDir;
43 if (qEnvironmentVariableIsSet("UNITY_TESTING")) {
44 if (qEnvironmentVariableIsSet("UNITY_TESTING")) {
44 qDebug() << "Using test environment";
45 qDebug() << "Using test environment";
45− QStandardPaths::setTestModeEnabled(true);
46+ QTemporaryDir tDir;
46− screenshotsDir = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
47+ tDir.setAutoRemove(false);
48+ screenshotsDir = tDir.path();
47 } else {
49 } else {
48 qDebug() << "Using real environment";
50 qDebug() << "Using real environment";
49 screenshotsDir = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation);
51 screenshotsDir = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation);
50 }
52 }
51− screenshotsDir.mkpath("Screenshots");
53+ screenshotsDir.mkpath(QStringLiteral("Screenshots"));
52− screenshotsDir.cd("Screenshots");
54+ screenshotsDir.cd(QStringLiteral("Screenshots"));
53 if (screenshotsDir.exists()) {
55 if (screenshotsDir.exists()) {
54 fileNamePrefix = screenshotsDir.absolutePath();
56 fileNamePrefix = screenshotsDir.absolutePath();
55 fileNamePrefix.append("/screenshot");
57 fileNamePrefix.append("/screenshot");
@@ -92,7 +94,7 @@ void ScreenGrabber::captureAndSave()
92QString ScreenGrabber::makeFileName() const
94QString ScreenGrabber::makeFileName() const
93{
95{
94 QString fileName(fileNamePrefix);
96 QString fileName(fileNamePrefix);
95− fileName.append(QDateTime::currentDateTime().toString("yyyyMMdd_hhmmsszzz"));
97+ fileName.append(QDateTime::currentDateTime().toString(QStringLiteral("yyyyMMdd_hhmmsszzz")));
96 fileName.append(".");
98 fileName.append(".");
97 fileName.append(getFormat());
99 fileName.append(getFormat());
98 return fileName;
100 return fileName;
@@ -101,5 +103,5 @@ QString ScreenGrabber::makeFileName() const
101QString ScreenGrabber::getFormat() const
103QString ScreenGrabber::getFormat() const
102{
104{
103 //TODO: This should be configurable (perhaps through gsettings?)
105 //TODO: This should be configurable (perhaps through gsettings?)
104− return "png";
106+ return QStringLiteral("png");
105}
107}
plugins/SessionBroadcast/SessionBroadcast.cpp+4−4
@@ -24,10 +24,10 @@ SessionBroadcast::SessionBroadcast(QObject* parent)
24{
24{
25 auto connection = QDBusConnection::SM_BUSNAME();
25 auto connection = QDBusConnection::SM_BUSNAME();
26
26
27− connection.connect("com.canonical.Unity.Greeter.Broadcast",
27+ connection.connect(QStringLiteral("com.canonical.Unity.Greeter.Broadcast"),
28− "/com/canonical/Unity/Greeter/Broadcast",
28+ QStringLiteral("/com/canonical/Unity/Greeter/Broadcast"),
29− "com.canonical.Unity.Greeter.Broadcast",
29+ QStringLiteral("com.canonical.Unity.Greeter.Broadcast"),
30− "ShowHome",
30+ QStringLiteral("ShowHome"),
31 this,
31 this,
32 SLOT(onShowHome(const QString &)));
32 SLOT(onShowHome(const QString &)));
33}
33}
plugins/Ubuntu/DownloadDaemonListener/interface/downloadtrackeradaptor.h+11−11
@@ -41,68 +41,68 @@ public Q_SLOTS: // METHODS
41 {
41 {
42 QList<QVariant> argumentList;
42 QList<QVariant> argumentList;
43 argumentList << QVariant::fromValue(allowed);
43 argumentList << QVariant::fromValue(allowed);
44− return asyncCallWithArgumentList(QLatin1String("allowGSMDownload"), argumentList);
44+ return asyncCallWithArgumentList(QStringLiteral("allowGSMDownload"), argumentList);
45 }
45 }
46
46
47 inline QDBusPendingReply<> cancel()
47 inline QDBusPendingReply<> cancel()
48 {
48 {
49 QList<QVariant> argumentList;
49 QList<QVariant> argumentList;
50− return asyncCallWithArgumentList(QLatin1String("cancel"), argumentList);
50+ return asyncCallWithArgumentList(QStringLiteral("cancel"), argumentList);
51 }
51 }
52
52
53 inline QDBusPendingReply<bool> isGSMDownloadAllowed()
53 inline QDBusPendingReply<bool> isGSMDownloadAllowed()
54 {
54 {
55 QList<QVariant> argumentList;
55 QList<QVariant> argumentList;
56− return asyncCallWithArgumentList(QLatin1String("isGSMDownloadAllowed"), argumentList);
56+ return asyncCallWithArgumentList(QStringLiteral("isGSMDownloadAllowed"), argumentList);
57 }
57 }
58
58
59 inline QDBusPendingReply<QVariantMap> metadata()
59 inline QDBusPendingReply<QVariantMap> metadata()
60 {
60 {
61 QList<QVariant> argumentList;
61 QList<QVariant> argumentList;
62− return asyncCallWithArgumentList(QLatin1String("metadata"), argumentList);
62+ return asyncCallWithArgumentList(QStringLiteral("metadata"), argumentList);
63 }
63 }
64
64
65 inline QDBusPendingReply<> pause()
65 inline QDBusPendingReply<> pause()
66 {
66 {
67 QList<QVariant> argumentList;
67 QList<QVariant> argumentList;
68− return asyncCallWithArgumentList(QLatin1String("pause"), argumentList);
68+ return asyncCallWithArgumentList(QStringLiteral("pause"), argumentList);
69 }
69 }
70
70
71 inline QDBusPendingReply<qulonglong> progress()
71 inline QDBusPendingReply<qulonglong> progress()
72 {
72 {
73 QList<QVariant> argumentList;
73 QList<QVariant> argumentList;
74− return asyncCallWithArgumentList(QLatin1String("progress"), argumentList);
74+ return asyncCallWithArgumentList(QStringLiteral("progress"), argumentList);
75 }
75 }
76
76
77 inline QDBusPendingReply<> resume()
77 inline QDBusPendingReply<> resume()
78 {
78 {
79 QList<QVariant> argumentList;
79 QList<QVariant> argumentList;
80− return asyncCallWithArgumentList(QLatin1String("resume"), argumentList);
80+ return asyncCallWithArgumentList(QStringLiteral("resume"), argumentList);
81 }
81 }
82
82
83 inline QDBusPendingReply<> setThrottle(qulonglong speed)
83 inline QDBusPendingReply<> setThrottle(qulonglong speed)
84 {
84 {
85 QList<QVariant> argumentList;
85 QList<QVariant> argumentList;
86 argumentList << QVariant::fromValue(speed);
86 argumentList << QVariant::fromValue(speed);
87− return asyncCallWithArgumentList(QLatin1String("setThrottle"), argumentList);
87+ return asyncCallWithArgumentList(QStringLiteral("setThrottle"), argumentList);
88 }
88 }
89
89
90 inline QDBusPendingReply<> start()
90 inline QDBusPendingReply<> start()
91 {
91 {
92 QList<QVariant> argumentList;
92 QList<QVariant> argumentList;
93− return asyncCallWithArgumentList(QLatin1String("start"), argumentList);
93+ return asyncCallWithArgumentList(QStringLiteral("start"), argumentList);
94 }
94 }
95
95
96 inline QDBusPendingReply<qulonglong> throttle()
96 inline QDBusPendingReply<qulonglong> throttle()
97 {
97 {
98 QList<QVariant> argumentList;
98 QList<QVariant> argumentList;
99− return asyncCallWithArgumentList(QLatin1String("throttle"), argumentList);
99+ return asyncCallWithArgumentList(QStringLiteral("throttle"), argumentList);
100 }
100 }
101
101
102 inline QDBusPendingReply<qulonglong> totalSize()
102 inline QDBusPendingReply<qulonglong> totalSize()
103 {
103 {
104 QList<QVariant> argumentList;
104 QList<QVariant> argumentList;
105− return asyncCallWithArgumentList(QLatin1String("totalSize"), argumentList);
105+ return asyncCallWithArgumentList(QStringLiteral("totalSize"), argumentList);
106 }
106 }
107
107
108Q_SIGNALS: // SIGNALS
108Q_SIGNALS: // SIGNALS
plugins/Ubuntu/SystemImage/SystemImage.cpp+4−4
@@ -25,9 +25,9 @@ SystemImage::SystemImage(QObject *parent)
25
25
26void SystemImage::factoryReset()
26void SystemImage::factoryReset()
27{
27{
28− const QDBusMessage msg = QDBusMessage::createMethodCall("com.canonical.SystemImage",
28+ const QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("com.canonical.SystemImage"),
29− "/Service",
29+ QStringLiteral("/Service"),
30− "com.canonical.SystemImage",
30+ QStringLiteral("com.canonical.SystemImage"),
31− "FactoryReset");
31+ QStringLiteral("FactoryReset"));
32 QDBusConnection::systemBus().asyncCall(msg);
32 QDBusConnection::systemBus().asyncCall(msg);
33}
33}
plugins/Unity/Connectivity/Connectivity.cpp+4−4
@@ -25,9 +25,9 @@ Connectivity::Connectivity(QObject *parent)
25
25
26void Connectivity::unlockAllModems()
26void Connectivity::unlockAllModems()
27{
27{
28− const QDBusMessage msg = QDBusMessage::createMethodCall("com.ubuntu.connectivity1",
28+ const QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("com.ubuntu.connectivity1"),
29− "/com/ubuntu/connectivity1/Private",
29+ QStringLiteral("/com/ubuntu/connectivity1/Private"),
30− "com.ubuntu.connectivity1.Private",
30+ QStringLiteral("com.ubuntu.connectivity1.Private"),
31− "UnlockAllModems");
31+ QStringLiteral("UnlockAllModems"));
32 QDBusConnection::sessionBus().asyncCall(msg);
32 QDBusConnection::sessionBus().asyncCall(msg);
33}
33}
plugins/Unity/DashCommunicator/dashcommunicator.cpp+3−3
@@ -41,9 +41,9 @@ void DashCommunicator::setCurrentScope(int index, bool animate, bool isSwipe)
41
41
42void DashCommunicator::run()
42void DashCommunicator::run()
43{
43{
44− m_dashConnection = new DashConnection("com.canonical.UnityDash",
44+ m_dashConnection = new DashConnection(QStringLiteral("com.canonical.UnityDash"),
45− "/com/canonical/UnityDash",
45+ QStringLiteral("/com/canonical/UnityDash"),
46− "", this);
46+ QLatin1String(""), this);
47 m_mutex.lock();
47 m_mutex.lock();
48 m_created = true;
48 m_created = true;
49 m_mutex.unlock();
49 m_mutex.unlock();
plugins/Unity/DashCommunicator/dashconnection.cpp+1−1
@@ -58,6 +58,6 @@ QDBusAbstractInterface* DashConnection::createInterface(const QString &service,
58void DashConnection::setCurrentScope(int index, bool animate, bool isSwipe)
58void DashConnection::setCurrentScope(int index, bool animate, bool isSwipe)
59{
59{
60 if (dbusInterface()) {
60 if (dbusInterface()) {
61− dbusInterface()->asyncCall("SetCurrentScope", index, animate, isSwipe);
61+ dbusInterface()->asyncCall(QStringLiteral("SetCurrentScope"), index, animate, isSwipe);
62 }
62 }
63}
63}
plugins/Unity/DashCommunicator/dbusdashcommunicatorservice.cpp+1−1
@@ -21,7 +21,7 @@
21#include <QDebug>
21#include <QDebug>
22
22
23DBusDashCommunicatorService::DBusDashCommunicatorService(QObject *parent):
23DBusDashCommunicatorService::DBusDashCommunicatorService(QObject *parent):
24− UnityDBusObject("/com/canonical/UnityDash", "com.canonical.UnityDash", false, parent)
24+ UnityDBusObject(QStringLiteral("/com/canonical/UnityDash"), QStringLiteral("com.canonical.UnityDash"), false, parent)
25{
25{
26}
26}
27
27
plugins/Unity/Indicators/indicator.cpp+8−8
@@ -37,20 +37,20 @@ void Indicator::init(const QString& busName, const QSettings& settings)
37 // that we can't just copy the object.
37 // that we can't just copy the object.
38 m_settings.clear();
38 m_settings.clear();
39 Q_FOREACH(const QString& key, settings.allKeys()) {
39 Q_FOREACH(const QString& key, settings.allKeys()) {
40− if (key.endsWith("/Position") || key.endsWith("/ObjectPath")) {
40+ if (key.endsWith(QLatin1String("/Position")) || key.endsWith(QLatin1String("/ObjectPath"))) {
41 m_settings.insert(key, settings.value(key));
41 m_settings.insert(key, settings.value(key));
42 }
42 }
43 }
43 }
44
44
45− setId(settings.value("Indicator Service/Name").toString());
45+ setId(settings.value(QStringLiteral("Indicator Service/Name")).toString());
46
46
47− QString actionObjectPath = settings.value("Indicator Service/ObjectPath").toString();
47+ QString actionObjectPath = settings.value(QStringLiteral("Indicator Service/ObjectPath")).toString();
48
48
49 QVariantMap properties;
49 QVariantMap properties;
50 properties.clear();
50 properties.clear();
51− properties.insert("busType", 1);
51+ properties.insert(QStringLiteral("busType"), 1);
52− properties.insert("busName", busName);
52+ properties.insert(QStringLiteral("busName"), busName);
53− properties.insert("actionsObjectPath", actionObjectPath);
53+ properties.insert(QStringLiteral("actionsObjectPath"), actionObjectPath);
54 setIndicatorProperties(properties);
54 setIndicatorProperties(properties);
55}
55}
56
56
@@ -84,12 +84,12 @@ void Indicator::setProfile(const QString& profile)
84{
84{
85 QVariant pos = m_settings.value(profile + "/Position");
85 QVariant pos = m_settings.value(profile + "/Position");
86 if (!pos.isValid())
86 if (!pos.isValid())
87− pos = m_settings.value("Indicator Service/Position", QVariant::fromValue(0));
87+ pos = m_settings.value(QStringLiteral("Indicator Service/Position"), QVariant::fromValue(0));
88 setPosition(pos.toInt());
88 setPosition(pos.toInt());
89
89
90 QString menuObjectPath = m_settings.value(profile + "/ObjectPath").toString();
90 QString menuObjectPath = m_settings.value(profile + "/ObjectPath").toString();
91 QVariantMap map = m_properties.toMap();
91 QVariantMap map = m_properties.toMap();
92− map.insert("menuObjectPath", menuObjectPath);
92+ map.insert(QStringLiteral("menuObjectPath"), menuObjectPath);
93 setIndicatorProperties(map);
93 setIndicatorProperties(map);
94}
94}
95
95
plugins/Unity/Indicators/indicatorsmanager.cpp+4−4
@@ -44,7 +44,7 @@ public:
44IndicatorsManager::IndicatorsManager(QObject* parent)
44IndicatorsManager::IndicatorsManager(QObject* parent)
45 : QObject(parent)
45 : QObject(parent)
46 , m_loaded(false)
46 , m_loaded(false)
47− , m_profile("phone")
47+ , m_profile(QStringLiteral("phone"))
48{
48{
49}
49}
50
50
@@ -115,7 +115,7 @@ void IndicatorsManager::loadDir(const QDir& dir)
115void IndicatorsManager::loadFile(const QFileInfo& file_info)
115void IndicatorsManager::loadFile(const QFileInfo& file_info)
116{
116{
117 QSettings indicator_settings(file_info.absoluteFilePath(), QSettings::IniFormat, this);
117 QSettings indicator_settings(file_info.absoluteFilePath(), QSettings::IniFormat, this);
118− QString name = indicator_settings.value("Indicator Service/Name").toString();
118+ QString name = indicator_settings.value(QStringLiteral("Indicator Service/Name")).toString();
119
119
120 auto iter = m_indicatorsData.find(name);
120 auto iter = m_indicatorsData.find(name);
121 if (iter != m_indicatorsData.end())
121 if (iter != m_indicatorsData.end())
@@ -286,9 +286,9 @@ Indicator::Ptr IndicatorsManager::indicator(const QString& indicator_name)
286 return new_indicator;
286 return new_indicator;
287}
287}
288
288
289−QList<Indicator::Ptr> IndicatorsManager::indicators()
289+QVector<Indicator::Ptr> IndicatorsManager::indicators()
290{
290{
291− QList<Indicator::Ptr> list;
291+ QVector<Indicator::Ptr> list;
292 Q_FOREACH(IndicatorData* data, m_indicatorsData)
292 Q_FOREACH(IndicatorData* data, m_indicatorsData)
293 {
293 {
294 Indicator::Ptr ret = indicator(data->m_name);
294 Indicator::Ptr ret = indicator(data->m_name);
plugins/Unity/Indicators/indicatorsmanager.h+1−1
@@ -45,7 +45,7 @@ public:
45
45
46 Indicator::Ptr indicator(const QString& indicator_name);
46 Indicator::Ptr indicator(const QString& indicator_name);
47
47
48− QList<Indicator::Ptr> indicators();
48+ QVector<Indicator::Ptr> indicators();
49
49
50 bool isLoaded() const;
50 bool isLoaded() const;
51
51
plugins/Unity/Indicators/modelprinter.cpp+3−3
@@ -60,7 +60,7 @@ QString ModelPrinter::text()
60
60
61QString tabify(int level) { QString str;
61QString tabify(int level) { QString str;
62 for (int i = 0; i < level; i++) {
62 for (int i = 0; i < level; i++) {
63− str += " ";
63+ str += QLatin1String(" ");
64 }
64 }
65 return str;
65 return str;
66}
66}
@@ -68,7 +68,7 @@ QString tabify(int level) { QString str;
68QString ModelPrinter::getModelDataString(UnityMenuModel* sourceModel, int level)
68QString ModelPrinter::getModelDataString(UnityMenuModel* sourceModel, int level)
69{
69{
70 if (!sourceModel)
70 if (!sourceModel)
71− return "";
71+ return QLatin1String("");
72
72
73 QString str;
73 QString str;
74 QTextStream stream(&str);
74 QTextStream stream(&str);
@@ -110,7 +110,7 @@ QString ModelPrinter::getRowSring(UnityMenuModel* sourceModel, int row, int dept
110 return str;
110 return str;
111}
111}
112
112
113−QString ModelPrinter::getVariantString(const QString& roleName, const QVariant vData ) const
113+QString ModelPrinter::getVariantString(const QString& roleName, const QVariant &vData) const
114{
114{
115 QString str;
115 QString str;
116 QTextStream stream(&str);
116 QTextStream stream(&str);
plugins/Unity/Indicators/modelprinter.h+2−2
@@ -46,10 +46,10 @@ Q_SIGNALS:
46private:
46private:
47 QString getModelDataString(UnityMenuModel* sourceModel, int level);
47 QString getModelDataString(UnityMenuModel* sourceModel, int level);
48 QString getRowSring(UnityMenuModel* sourceModel, int index, int depth) const;
48 QString getRowSring(UnityMenuModel* sourceModel, int index, int depth) const;
49− QString getVariantString(const QString& roleName, const QVariant vData ) const;
49+ QString getVariantString(const QString& roleName, const QVariant &vData) const;
50
50
51 UnityMenuModel* m_model;
51 UnityMenuModel* m_model;
52 QList<UnityMenuModel*> m_children;
52 QList<UnityMenuModel*> m_children;
53};
53};
54
54
55−#endif // MODELPRINTER_H
55+#endif // MODELPRINTER_H
plugins/Unity/Indicators/plugin.cpp+6−6
@@ -58,10 +58,10 @@ void IndicatorsPlugin::registerTypes(const char *uri)
58
58
59 qmlRegisterSingletonType<UnityMenuModelCache>(uri, 0, 1, "UnityMenuModelCache", menuModelCacheSingleton);
59 qmlRegisterSingletonType<UnityMenuModelCache>(uri, 0, 1, "UnityMenuModelCache", menuModelCacheSingleton);
60
60
61− qmlRegisterUncreatableType<MenuContentState>(uri, 0, 1, "MenuContentState", "Can't create MenuContentState class");
61+ qmlRegisterUncreatableType<MenuContentState>(uri, 0, 1, "MenuContentState", QStringLiteral("Can't create MenuContentState class"));
62− qmlRegisterUncreatableType<ActionState>(uri, 0, 1, "ActionState", "Can't create ActionState class");
62+ qmlRegisterUncreatableType<ActionState>(uri, 0, 1, "ActionState", QStringLiteral("Can't create ActionState class"));
63− qmlRegisterUncreatableType<NetworkActionState>(uri, 0, 1, "NetworkActionState", "Can't create NetworkActionState class");
63+ qmlRegisterUncreatableType<NetworkActionState>(uri, 0, 1, "NetworkActionState", QStringLiteral("Can't create NetworkActionState class"));
64− qmlRegisterUncreatableType<NetworkConnection>(uri, 0, 1, "NetworkConnection", "Can't create NetworkConnection class");
64+ qmlRegisterUncreatableType<NetworkConnection>(uri, 0, 1, "NetworkConnection", QStringLiteral("Can't create NetworkConnection class"));
65− qmlRegisterUncreatableType<IndicatorsModelRole>(uri, 0, 1, "IndicatorsModelRole", "Can't create IndicatorsModelRole class");
65+ qmlRegisterUncreatableType<IndicatorsModelRole>(uri, 0, 1, "IndicatorsModelRole", QStringLiteral("Can't create IndicatorsModelRole class"));
66− qmlRegisterUncreatableType<FlatMenuProxyModelRole>(uri, 0, 1, "FlatMenuProxyModelRole", "Can't create FlatMenuProxyModelRole class");
66+ qmlRegisterUncreatableType<FlatMenuProxyModelRole>(uri, 0, 1, "FlatMenuProxyModelRole", QStringLiteral("Can't create FlatMenuProxyModelRole class"));
67}
67}
plugins/Unity/Indicators/rootstateparser.cpp+16−16
@@ -39,7 +39,7 @@ static QString iconUri(GIcon *icon)
39 }
39 }
40
40
41 if (!iconNameList.empty()) {
41 if (!iconNameList.empty()) {
42− uri = QString("image://theme/%1").arg(iconNameList.join(","));
42+ uri = QStringLiteral("image://theme/%1").arg(iconNameList.join(QStringLiteral(",")));
43 }
43 }
44 }
44 }
45 else if (G_IS_FILE_ICON (icon)) {
45 else if (G_IS_FILE_ICON (icon)) {
@@ -63,7 +63,7 @@ static QString iconUri(GIcon *icon)
63 data = g_bytes_get_data (g_bytes_icon_get_bytes (G_BYTES_ICON (icon)), &size);
63 data = g_bytes_get_data (g_bytes_icon_get_bytes (G_BYTES_ICON (icon)), &size);
64 base64 = g_base64_encode ((const guchar *) data, size);
64 base64 = g_base64_encode ((const guchar *) data, size);
65
65
66− uri = QString("data://");
66+ uri = QStringLiteral("data://");
67 uri.append (base64);
67 uri.append (base64);
68
68
69 g_free (base64);
69 g_free (base64);
@@ -88,7 +88,7 @@ QVariant RootStateParser::toQVariant(GVariant* state) const
88 while (g_variant_iter_loop (&iter, "{sv}", &key, &vvalue))
88 while (g_variant_iter_loop (&iter, "{sv}", &key, &vvalue))
89 {
89 {
90 QString str = QString::fromUtf8(key);
90 QString str = QString::fromUtf8(key);
91− if (str == "icon" && !qmap.contains("icons")) {
91+ if (str == QLatin1String("icon") && !qmap.contains(QStringLiteral("icons"))) {
92 QStringList icons;
92 QStringList icons;
93
93
94 // FIXME - should be sending a url.
94 // FIXME - should be sending a url.
@@ -97,9 +97,9 @@ QVariant RootStateParser::toQVariant(GVariant* state) const
97 icons << iconUri(gicon);
97 icons << iconUri(gicon);
98 g_object_unref (gicon);
98 g_object_unref (gicon);
99 }
99 }
100− qmap.insert("icons", icons);
100+ qmap.insert(QStringLiteral("icons"), icons);
101
101
102− } else if (str == "icons") {
102+ } else if (str == QLatin1String("icons")) {
103
103
104 QStringList icons;
104 QStringList icons;
105
105
@@ -118,7 +118,7 @@ QVariant RootStateParser::toQVariant(GVariant* state) const
118 }
118 }
119 }
119 }
120 // will overwrite icon.
120 // will overwrite icon.
121− qmap.insert("icons", icons);
121+ qmap.insert(QStringLiteral("icons"), icons);
122
122
123 } else {
123 } else {
124 qmap.insert(str, ActionStateParser::toQVariant(vvalue));
124 qmap.insert(str, ActionStateParser::toQVariant(vvalue));
@@ -141,13 +141,13 @@ QVariant RootStateParser::toQVariant(GVariant* state) const
141 &accessible_name,
141 &accessible_name,
142 &visible);
142 &visible);
143
143
144− qmap["label"] = label ? QString::fromUtf8(label) : "";
144+ qmap[QStringLiteral("label")] = label ? QString::fromUtf8(label) : QLatin1String("");
145− qmap["accessible-desc"] = accessible_name ? QString::fromUtf8(accessible_name) : "";
145+ qmap[QStringLiteral("accessible-desc")] = accessible_name ? QString::fromUtf8(accessible_name) : QLatin1String("");
146− qmap["visible"] = visible;
146+ qmap[QStringLiteral("visible")] = visible;
147
147
148 gicon = g_icon_new_for_string (icon, nullptr);
148 gicon = g_icon_new_for_string (icon, nullptr);
149 if (gicon) {
149 if (gicon) {
150− qmap["icons"] = QStringList() << iconUri(gicon);
150+ qmap[QStringLiteral("icons")] = QStringList() << iconUri(gicon);
151 g_object_unref (gicon);
151 g_object_unref (gicon);
152 }
152 }
153
153
@@ -170,42 +170,42 @@ QString RootStateObject::title() const
170{
170{
171 if (!valid()) return QString();
171 if (!valid()) return QString();
172
172
173− return m_currentState.value("title", QVariant::fromValue(QString())).toString();
173+ return m_currentState.value(QStringLiteral("title"), QVariant::fromValue(QString())).toString();
174}
174}
175
175
176QString RootStateObject::leftLabel() const
176QString RootStateObject::leftLabel() const
177{
177{
178 if (!valid()) return QString();
178 if (!valid()) return QString();
179
179
180− return m_currentState.value("pre-label", QVariant::fromValue(QString())).toString();
180+ return m_currentState.value(QStringLiteral("pre-label"), QVariant::fromValue(QString())).toString();
181}
181}
182
182
183QString RootStateObject::rightLabel() const
183QString RootStateObject::rightLabel() const
184{
184{
185 if (!valid()) return QString();
185 if (!valid()) return QString();
186
186
187− return m_currentState.value("label", QVariant::fromValue(QString())).toString();
187+ return m_currentState.value(QStringLiteral("label"), QVariant::fromValue(QString())).toString();
188}
188}
189
189
190QStringList RootStateObject::icons() const
190QStringList RootStateObject::icons() const
191{
191{
192 if (!valid()) return QStringList();
192 if (!valid()) return QStringList();
193
193
194− return m_currentState.value("icons", QVariant::fromValue(QStringList())).toStringList();
194+ return m_currentState.value(QStringLiteral("icons"), QVariant::fromValue(QStringList())).toStringList();
195}
195}
196
196
197QString RootStateObject::accessibleName() const
197QString RootStateObject::accessibleName() const
198{
198{
199 if (!valid()) return QString();
199 if (!valid()) return QString();
200
200
201− return m_currentState.value("accessible-desc", QVariant::fromValue(QString())).toString();
201+ return m_currentState.value(QStringLiteral("accessible-desc"), QVariant::fromValue(QString())).toString();
202}
202}
203
203
204bool RootStateObject::indicatorVisible() const
204bool RootStateObject::indicatorVisible() const
205{
205{
206 if (!valid()) return false;
206 if (!valid()) return false;
207
207
208− return m_currentState.value("visible", QVariant::fromValue(true)).toBool();
208+ return m_currentState.value(QStringLiteral("visible"), QVariant::fromValue(true)).toBool();
209}
209}
210
210
211void RootStateObject::setCurrentState(const QVariantMap& newState)
211void RootStateObject::setCurrentState(const QVariantMap& newState)
plugins/Unity/Launcher/asadapter.cpp+10−9
@@ -38,25 +38,26 @@ void ASAdapter::syncItems(const QList<LauncherItem*> &list)
38{
38{
39 if (m_accounts && !m_user.isEmpty()) {
39 if (m_accounts && !m_user.isEmpty()) {
40 QList<QVariantMap> items;
40 QList<QVariantMap> items;
41+ items.reserve(list.count());
41
42
42 Q_FOREACH(LauncherItem *item, list) {
43 Q_FOREACH(LauncherItem *item, list) {
43 items << itemToVariant(item);
44 items << itemToVariant(item);
44 }
45 }
45
46
46− m_accounts->setUserPropertyAsync(m_user, "com.canonical.unity.AccountsService", "LauncherItems", QVariant::fromValue(items));
47+ m_accounts->setUserPropertyAsync(m_user, QStringLiteral("com.canonical.unity.AccountsService"), QStringLiteral("LauncherItems"), QVariant::fromValue(items));
47 }
48 }
48}
49}
49
50
50QVariantMap ASAdapter::itemToVariant(LauncherItem *item) const
51QVariantMap ASAdapter::itemToVariant(LauncherItem *item) const
51{
52{
52 QVariantMap details;
53 QVariantMap details;
53− details.insert("id", item->appId());
54+ details.insert(QStringLiteral("id"), item->appId());
54− details.insert("name", item->name());
55+ details.insert(QStringLiteral("name"), item->name());
55− details.insert("icon", item->icon());
56+ details.insert(QStringLiteral("icon"), item->icon());
56− details.insert("count", item->count());
57+ details.insert(QStringLiteral("count"), item->count());
57− details.insert("countVisible", item->countVisible());
58+ details.insert(QStringLiteral("countVisible"), item->countVisible());
58− details.insert("pinned", item->pinned());
59+ details.insert(QStringLiteral("pinned"), item->pinned());
59− details.insert("running", item->running());
60+ details.insert(QStringLiteral("running"), item->running());
60− details.insert("progress", item->progress());
61+ details.insert(QStringLiteral("progress"), item->progress());
61 return details;
62 return details;
62}
63}
plugins/Unity/Launcher/dbusinterface.cpp+33−33
@@ -27,7 +27,7 @@
27#include <QDebug>
27#include <QDebug>
28
28
29DBusInterface::DBusInterface(LauncherModel *parent):
29DBusInterface::DBusInterface(LauncherModel *parent):
30− UnityDBusVirtualObject("/com/canonical/Unity/Launcher", "com.canonical.Unity.Launcher", true, parent),
30+ UnityDBusVirtualObject(QStringLiteral("/com/canonical/Unity/Launcher"), QStringLiteral("com.canonical.Unity.Launcher"), true, parent),
31 m_launcherModel(parent)
31 m_launcherModel(parent)
32{
32{
33}
33}
@@ -35,13 +35,13 @@ DBusInterface::DBusInterface(LauncherModel *parent):
35QString DBusInterface::introspect(const QString &path) const
35QString DBusInterface::introspect(const QString &path) const
36{
36{
37 /* This case we should just list the nodes */
37 /* This case we should just list the nodes */
38− if (path == "/com/canonical/Unity/Launcher/" || path == "/com/canonical/Unity/Launcher") {
38+ if (path == QLatin1String("/com/canonical/Unity/Launcher/") || path == QLatin1String("/com/canonical/Unity/Launcher")) {
39 QString nodes;
39 QString nodes;
40
40
41 // Add Refresh to introspect
41 // Add Refresh to introspect
42− nodes = "<interface name=\"com.canonical.Unity.Launcher\">"
42+ nodes = QStringLiteral("<interface name=\"com.canonical.Unity.Launcher\">"
43 "<method name=\"Refresh\"/>"
43 "<method name=\"Refresh\"/>"
44− "</interface>";
44+ "</interface>");
45
45
46 // Add dynamic properties for launcher emblems
46 // Add dynamic properties for launcher emblems
47 for (int i = 0; i < m_launcherModel->rowCount(); i++) {
47 for (int i = 0; i < m_launcherModel->rowCount(); i++) {
@@ -53,18 +53,18 @@ QString DBusInterface::introspect(const QString &path) const
53 }
53 }
54
54
55 /* Should not happen, but let's handle it */
55 /* Should not happen, but let's handle it */
56− if (!path.startsWith("/com/canonical/Unity/Launcher")) {
56+ if (!path.startsWith(QLatin1String("/com/canonical/Unity/Launcher"))) {
57− return "";
57+ return QLatin1String("");
58 }
58 }
59
59
60 /* Now we should be looking at a node */
60 /* Now we should be looking at a node */
61 QString nodeiface =
61 QString nodeiface =
62− "<interface name=\"com.canonical.Unity.Launcher.Item\">"
62+ QStringLiteral("<interface name=\"com.canonical.Unity.Launcher.Item\">"
63 "<property name=\"count\" type=\"i\" access=\"readwrite\" />"
63 "<property name=\"count\" type=\"i\" access=\"readwrite\" />"
64 "<property name=\"countVisible\" type=\"b\" access=\"readwrite\" />"
64 "<property name=\"countVisible\" type=\"b\" access=\"readwrite\" />"
65 "<property name=\"progress\" type=\"i\" access=\"readwrite\" />"
65 "<property name=\"progress\" type=\"i\" access=\"readwrite\" />"
66 "<method name=\"Alert\" />"
66 "<method name=\"Alert\" />"
67− "</interface>";
67+ "</interface>");
68 return nodeiface;
68 return nodeiface;
69}
69}
70
70
@@ -109,7 +109,7 @@ QString DBusInterface::encodeAppId(const QString& appId)
109 (chr >= '0' && chr <= '9'&& i != 0)) {
109 (chr >= '0' && chr <= '9'&& i != 0)) {
110 encoded.append(chr);
110 encoded.append(chr);
111 } else {
111 } else {
112− QString hexval = QString("_%1").arg(chr, 2, 16, QChar('0'));
112+ QString hexval = QStringLiteral("_%1").arg(chr, 2, 16, QChar('0'));
113 encoded.append(hexval.toUpper());
113 encoded.append(hexval.toUpper());
114 }
114 }
115 }
115 }
@@ -127,10 +127,10 @@ bool DBusInterface::handleMessage(const QDBusMessage& message, const QDBusConnec
127 /* Break down the path to just the app id */
127 /* Break down the path to just the app id */
128 bool validpath = true;
128 bool validpath = true;
129 QString pathtemp = message.path();
129 QString pathtemp = message.path();
130− if (!pathtemp.startsWith("/com/canonical/Unity/Launcher/")) {
130+ if (!pathtemp.startsWith(QLatin1String("/com/canonical/Unity/Launcher/"))) {
131 validpath = false;
131 validpath = false;
132 }
132 }
133− pathtemp.remove("/com/canonical/Unity/Launcher/");
133+ pathtemp.remove(QStringLiteral("/com/canonical/Unity/Launcher/"));
134 if (pathtemp.indexOf('/') >= 0) {
134 if (pathtemp.indexOf('/') >= 0) {
135 validpath = false;
135 validpath = false;
136 }
136 }
@@ -139,15 +139,15 @@ bool DBusInterface::handleMessage(const QDBusMessage& message, const QDBusConnec
139 QString appid = decodeAppId(pathtemp);
139 QString appid = decodeAppId(pathtemp);
140
140
141 // First handle methods of the Launcher interface
141 // First handle methods of the Launcher interface
142− if (message.interface() == "com.canonical.Unity.Launcher") {
142+ if (message.interface() == QLatin1String("com.canonical.Unity.Launcher")) {
143− if (message.member() == "Refresh") {
143+ if (message.member() == QLatin1String("Refresh")) {
144 QDBusMessage reply = message.createReply();
144 QDBusMessage reply = message.createReply();
145 Q_EMIT refreshCalled();
145 Q_EMIT refreshCalled();
146 return connection.send(reply);
146 return connection.send(reply);
147 }
147 }
148− } else if (message.interface() == "com.canonical.Unity.Launcher.Item") {
148+ } else if (message.interface() == QLatin1String("com.canonical.Unity.Launcher.Item")) {
149 // Handle methods of the Launcher-Item interface
149 // Handle methods of the Launcher-Item interface
150− if (message.member() == "Alert" && validpath) {
150+ if (message.member() == QLatin1String("Alert") && validpath) {
151 QDBusMessage reply = message.createReply();
151 QDBusMessage reply = message.createReply();
152 Q_EMIT alertCalled(appid);
152 Q_EMIT alertCalled(appid);
153 return connection.send(reply);
153 return connection.send(reply);
@@ -155,15 +155,15 @@ bool DBusInterface::handleMessage(const QDBusMessage& message, const QDBusConnec
155 }
155 }
156
156
157 // Now handle dynamic properties (for launcher emblems)
157 // Now handle dynamic properties (for launcher emblems)
158− if (message.interface() != "org.freedesktop.DBus.Properties") {
158+ if (message.interface() != QLatin1String("org.freedesktop.DBus.Properties")) {
159 return false;
159 return false;
160 }
160 }
161
161
162− if (message.member() == "Get" && (message.arguments().count() != 2 || message.arguments()[0].toString() != "com.canonical.Unity.Launcher.Item")) {
162+ if (message.member() == QLatin1String("Get") && (message.arguments().count() != 2 || message.arguments()[0].toString() != QLatin1String("com.canonical.Unity.Launcher.Item"))) {
163 return false;
163 return false;
164 }
164 }
165
165
166− if (message.member() == "Set" && (message.arguments().count() != 3 || message.arguments()[0].toString() != "com.canonical.Unity.Launcher.Item")) {
166+ if (message.member() == QLatin1String("Set") && (message.arguments().count() != 3 || message.arguments()[0].toString() != QLatin1String("com.canonical.Unity.Launcher.Item"))) {
167 return false;
167 return false;
168 }
168 }
169
169
@@ -175,45 +175,45 @@ bool DBusInterface::handleMessage(const QDBusMessage& message, const QDBusConnec
175 LauncherItem *item = static_cast<LauncherItem*>(m_launcherModel->get(index));
175 LauncherItem *item = static_cast<LauncherItem*>(m_launcherModel->get(index));
176
176
177 QVariantList retval;
177 QVariantList retval;
178− if (message.member() == "Get") {
178+ if (message.member() == QLatin1String("Get")) {
179 QString cachedString = message.arguments()[1].toString();
179 QString cachedString = message.arguments()[1].toString();
180 if (!item) {
180 if (!item) {
181 return false;
181 return false;
182 }
182 }
183− if (cachedString == "count") {
183+ if (cachedString == QLatin1String("count")) {
184 retval.append(QVariant::fromValue(QDBusVariant(item->count())));
184 retval.append(QVariant::fromValue(QDBusVariant(item->count())));
185− } else if (cachedString == "countVisible") {
185+ } else if (cachedString == QLatin1String("countVisible")) {
186 retval.append(QVariant::fromValue(QDBusVariant(item->countVisible())));
186 retval.append(QVariant::fromValue(QDBusVariant(item->countVisible())));
187− } else if (cachedString == "progress") {
187+ } else if (cachedString == QLatin1String("progress")) {
188 retval.append(QVariant::fromValue(QDBusVariant(item->progress())));
188 retval.append(QVariant::fromValue(QDBusVariant(item->progress())));
189 }
189 }
190− } else if (message.member() == "Set") {
190+ } else if (message.member() == QLatin1String("Set")) {
191 QString cachedString = message.arguments()[1].toString();
191 QString cachedString = message.arguments()[1].toString();
192− if (cachedString == "count") {
192+ if (cachedString == QLatin1String("count")) {
193 int newCount = message.arguments()[2].value<QDBusVariant>().variant().toInt();
193 int newCount = message.arguments()[2].value<QDBusVariant>().variant().toInt();
194 if (!item || newCount != item->count()) {
194 if (!item || newCount != item->count()) {
195 Q_EMIT countChanged(appid, newCount);
195 Q_EMIT countChanged(appid, newCount);
196− notifyPropertyChanged("com.canonical.Unity.Launcher.Item", encodeAppId(appid), "count", QVariant(newCount));
196+ notifyPropertyChanged(QStringLiteral("com.canonical.Unity.Launcher.Item"), encodeAppId(appid), QStringLiteral("count"), QVariant(newCount));
197 }
197 }
198− } else if (cachedString == "countVisible") {
198+ } else if (cachedString == QLatin1String("countVisible")) {
199 bool newVisible = message.arguments()[2].value<QDBusVariant>().variant().toBool();
199 bool newVisible = message.arguments()[2].value<QDBusVariant>().variant().toBool();
200 if (!item || newVisible != item->countVisible()) {
200 if (!item || newVisible != item->countVisible()) {
201 Q_EMIT countVisibleChanged(appid, newVisible);
201 Q_EMIT countVisibleChanged(appid, newVisible);
202− notifyPropertyChanged("com.canonical.Unity.Launcher.Item", encodeAppId(appid), "countVisible", newVisible);
202+ notifyPropertyChanged(QStringLiteral("com.canonical.Unity.Launcher.Item"), encodeAppId(appid), QStringLiteral("countVisible"), newVisible);
203 }
203 }
204− } else if (cachedString == "progress") {
204+ } else if (cachedString == QLatin1String("progress")) {
205 int newProgress = message.arguments()[2].value<QDBusVariant>().variant().toInt();
205 int newProgress = message.arguments()[2].value<QDBusVariant>().variant().toInt();
206 if (!item || newProgress != item->progress()) {
206 if (!item || newProgress != item->progress()) {
207 Q_EMIT progressChanged(appid, newProgress);
207 Q_EMIT progressChanged(appid, newProgress);
208− notifyPropertyChanged("com.canonical.Unity.Launcher.Item", encodeAppId(appid), "progress", QVariant(newProgress));
208+ notifyPropertyChanged(QStringLiteral("com.canonical.Unity.Launcher.Item"), encodeAppId(appid), QStringLiteral("progress"), QVariant(newProgress));
209 }
209 }
210 }
210 }
211− } else if (message.member() == "GetAll") {
211+ } else if (message.member() == QLatin1String("GetAll")) {
212 if (item) {
212 if (item) {
213 QVariantMap all;
213 QVariantMap all;
214− all.insert("count", item->count());
214+ all.insert(QStringLiteral("count"), item->count());
215− all.insert("countVisible", item->countVisible());
215+ all.insert(QStringLiteral("countVisible"), item->countVisible());
216− all.insert("progress", item->progress());
216+ all.insert(QStringLiteral("progress"), item->progress());
217 retval.append(all);
217 retval.append(all);
218 }
218 }
219 } else {
219 } else {
plugins/Unity/Launcher/desktopfilehandler.cpp+17−16
@@ -70,7 +70,7 @@ void DesktopFileHandler::load()
70
70
71 QStringList searchDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
71 QStringList searchDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
72#ifdef LAUNCHER_TESTING
72#ifdef LAUNCHER_TESTING
73− searchDirs << ".";
73+ searchDirs << QStringLiteral(".");
74#endif
74#endif
75
75
76 QString path;
76 QString path;
@@ -79,14 +79,15 @@ void DesktopFileHandler::load()
79 helper.replace(dashPos, 1, '/');
79 helper.replace(dashPos, 1, '/');
80 }
80 }
81
81
82− if (helper.contains("/")) {
82+ if (helper.contains('/')) {
83− path += helper.split('/').first() + '/';
83+ path += helper.split('/').at(0) + '/';
84 helper.remove(QRegExp("^" + path));
84 helper.remove(QRegExp("^" + path));
85 }
85 }
86
86
87 Q_FOREACH(const QString &searchDirName, searchDirs) {
87 Q_FOREACH(const QString &searchDirName, searchDirs) {
88 QDir searchDir(searchDirName + "/" + path);
88 QDir searchDir(searchDirName + "/" + path);
89+ const QString desktop = QStringLiteral("*.desktop");
89− Q_FOREACH(const QString &desktopFile, searchDir.entryList(QStringList() << "*.desktop")) {
90+ Q_FOREACH(const QString &desktopFile, searchDir.entryList(QStringList() << desktop)) {
90 if (desktopFile.startsWith(helper)) {
91 if (desktopFile.startsWith(helper)) {
91 QFileInfo fileInfo(searchDir, desktopFile);
92 QFileInfo fileInfo(searchDir, desktopFile);
92 m_filename = fileInfo.absoluteFilePath();
93 m_filename = fileInfo.absoluteFilePath();
@@ -95,7 +96,7 @@ void DesktopFileHandler::load()
95 }
96 }
96 }
97 }
97
98
98− dashPos = helper.indexOf("-");
99+ dashPos = helper.indexOf('-');
99 } while (dashPos != -1);
100 } while (dashPos != -1);
100}
101}
101
102
@@ -107,25 +108,25 @@ QString DesktopFileHandler::displayName() const
107
108
108 QSettings settings(m_filename, QSettings::IniFormat);
109 QSettings settings(m_filename, QSettings::IniFormat);
109 settings.setIniCodec("UTF-8");
110 settings.setIniCodec("UTF-8");
110− settings.beginGroup("Desktop Entry");
111+ settings.beginGroup(QStringLiteral("Desktop Entry"));
111
112
112 // First try to find Name[xx_YY] and Name[xx] in .desktop file
113 // First try to find Name[xx_YY] and Name[xx] in .desktop file
113 QString locale = QLocale().name();
114 QString locale = QLocale().name();
114 QString shortLocale = locale.split('_').first();
115 QString shortLocale = locale.split('_').first();
115
116
116− if (locale != shortLocale && settings.contains(QString("Name[%1]").arg(locale))) {
117+ if (locale != shortLocale && settings.contains(QStringLiteral("Name[%1]").arg(locale))) {
117− return settings.value(QString("Name[%1]").arg(locale)).toString();
118+ return settings.value(QStringLiteral("Name[%1]").arg(locale)).toString();
118 }
119 }
119
120
120− if (settings.contains(QString("Name[%1]").arg(shortLocale))) {
121+ if (settings.contains(QStringLiteral("Name[%1]").arg(shortLocale))) {
121− return settings.value(QString("Name[%1]").arg(shortLocale)).toString();
122+ return settings.value(QStringLiteral("Name[%1]").arg(shortLocale)).toString();
122 }
123 }
123
124
124 // No translation found in desktop file. Get the untranslated one and have a go with gettext.
125 // No translation found in desktop file. Get the untranslated one and have a go with gettext.
125− QString displayName = settings.value("Name").toString();
126+ QString displayName = settings.value(QStringLiteral("Name")).toString();
126
127
127− if (settings.contains("X-Ubuntu-Gettext-Domain")) {
128+ if (settings.contains(QStringLiteral("X-Ubuntu-Gettext-Domain"))) {
128− const QString domain = settings.value("X-Ubuntu-Gettext-Domain").toString();
129+ const QString domain = settings.value(QStringLiteral("X-Ubuntu-Gettext-Domain")).toString();
129 return dgettext(domain.toUtf8().constData(), displayName.toUtf8().constData());
130 return dgettext(domain.toUtf8().constData(), displayName.toUtf8().constData());
130 }
131 }
131
132
@@ -140,9 +141,9 @@ QString DesktopFileHandler::icon() const
140
141
141 QSettings settings(m_filename, QSettings::IniFormat);
142 QSettings settings(m_filename, QSettings::IniFormat);
142 settings.setIniCodec("UTF-8");
143 settings.setIniCodec("UTF-8");
143− settings.beginGroup("Desktop Entry");
144+ settings.beginGroup(QStringLiteral("Desktop Entry"));
144− QString iconString = settings.value("Icon").toString();
145+ QString iconString = settings.value(QStringLiteral("Icon")).toString();
145− QString pathString = settings.value("Path").toString();
146+ QString pathString = settings.value(QStringLiteral("Path")).toString();
146
147
147 if (QFileInfo(iconString).exists()) {
148 if (QFileInfo(iconString).exists()) {
148 return QFileInfo(iconString).absoluteFilePath();
149 return QFileInfo(iconString).absoluteFilePath();
plugins/Unity/Launcher/gsettings.cpp+15−12
@@ -32,20 +32,22 @@ QStringList GSettings::storedApplications() const
32{
32{
33 QStringList storedApps;
33 QStringList storedApps;
34
34
35+ const QString items = QStringLiteral("items");
35− Q_FOREACH(const QString &entry, m_gSettings->get("items").toStringList()) {
36+ Q_FOREACH(const QString &entry, m_gSettings->get(items).toStringList()) {
36− if (entry.startsWith("application:///")) {
37+ if (entry.startsWith(QLatin1String("application:///"))) {
37 // convert legacy entries to new world appids
38 // convert legacy entries to new world appids
38 QString appId = entry;
39 QString appId = entry;
39 // Transform "application://foobar.desktop" to "foobar"
40 // Transform "application://foobar.desktop" to "foobar"
40− appId.remove(QRegExp("^application:///"));
41+ appId.remove(QRegExp(QStringLiteral("^application:///")));
41− appId.remove(QRegExp(".desktop$"));
42+ appId.remove(QRegExp(QStringLiteral(".desktop$")));
42 storedApps << appId;
43 storedApps << appId;
43− } else if (entry.startsWith("appid://")) {
44+ } else if (entry.startsWith(QLatin1String("appid://"))) {
44 QString appId = entry;
45 QString appId = entry;
45− appId.remove("appid://");
46+ appId.remove(QStringLiteral("appid://"));
46− if (appId.split('/').count() == 3) {
47+ const QStringList splittedAppId = appId.split('/');
48+ if (splittedAppId.count() == 3) {
47 // Strip current-user-version in case its there
49 // Strip current-user-version in case its there
48− appId = appId.split('/').first() + "_" + appId.split('/').at(1);
50+ appId = splittedAppId.first() + "_" + splittedAppId.at(1);
49 }
51 }
50 storedApps << appId;
52 storedApps << appId;
51 }
53 }
@@ -56,19 +58,20 @@ QStringList GSettings::storedApplications() const
56void GSettings::setStoredApplications(const QStringList &storedApplications)
58void GSettings::setStoredApplications(const QStringList &storedApplications)
57{
59{
58 QStringList gSettingsList;
60 QStringList gSettingsList;
61+ gSettingsList.reserve(storedApplications.count());
59 Q_FOREACH(const QString &entry, storedApplications) {
62 Q_FOREACH(const QString &entry, storedApplications) {
60− gSettingsList << QString("appid://%1").arg(entry);
63+ gSettingsList << QStringLiteral("appid://%1").arg(entry);
61 }
64 }
62 // GSettings will emit a changed signal to ourselves. Let's cache the items
65 // GSettings will emit a changed signal to ourselves. Let's cache the items
63 // and only forward the changed signal when the list did actually change.
66 // and only forward the changed signal when the list did actually change.
64 m_cachedItems = gSettingsList;
67 m_cachedItems = gSettingsList;
65− m_gSettings->set("items", gSettingsList);
68+ m_gSettings->set(QStringLiteral("items"), gSettingsList);
66}
69}
67
70
68void GSettings::onSettingsChanged(const QString &key)
71void GSettings::onSettingsChanged(const QString &key)
69{
72{
70− if (key == "items") {
73+ if (key == QLatin1String("items")) {
71− const QStringList cachedItems = m_gSettings->get("items").toStringList();
74+ const QStringList cachedItems = m_gSettings->get(QStringLiteral("items")).toStringList();
72 if (m_cachedItems != cachedItems) {
75 if (m_cachedItems != cachedItems) {
73 m_cachedItems = cachedItems;
76 m_cachedItems = cachedItems;
74 Q_EMIT changed();
77 Q_EMIT changed();
plugins/Unity/Launcher/launcheritem.cpp+6−6
@@ -38,17 +38,17 @@ LauncherItem::LauncherItem(const QString &appId, const QString &name, const QStr
38 m_quickList(new QuickListModel(this))
38 m_quickList(new QuickListModel(this))
39{
39{
40 QuickListEntry nameAction;
40 QuickListEntry nameAction;
41− nameAction.setActionId("launch_item");
41+ nameAction.setActionId(QStringLiteral("launch_item"));
42 nameAction.setText(m_name);
42 nameAction.setText(m_name);
43 m_quickList->appendAction(nameAction);
43 m_quickList->appendAction(nameAction);
44
44
45 QuickListEntry pinningAction;
45 QuickListEntry pinningAction;
46− pinningAction.setActionId("pin_item");
46+ pinningAction.setActionId(QStringLiteral("pin_item"));
47 pinningAction.setText(gettext("Pin shortcut"));
47 pinningAction.setText(gettext("Pin shortcut"));
48 m_quickList->appendAction(pinningAction);
48 m_quickList->appendAction(pinningAction);
49
49
50− m_quitAction.setActionId("stop_item");
50+ m_quitAction.setActionId(QStringLiteral("stop_item"));
51− m_quitAction.setIcon("application-exit");
51+ m_quitAction.setIcon(QStringLiteral("application-exit"));
52 m_quitAction.setText(gettext("Quit"));
52 m_quitAction.setText(gettext("Quit"));
53}
53}
54
54
@@ -67,7 +67,7 @@ void LauncherItem::setName(const QString &name)
67 if (m_name != name) {
67 if (m_name != name) {
68 m_name = name;
68 m_name = name;
69 QuickListEntry entry;
69 QuickListEntry entry;
70− entry.setActionId("launch_item");
70+ entry.setActionId(QStringLiteral("launch_item"));
71 entry.setText(m_name);
71 entry.setText(m_name);
72 m_quickList->updateAction(entry);
72 m_quickList->updateAction(entry);
73 Q_EMIT nameChanged(name);
73 Q_EMIT nameChanged(name);
@@ -102,7 +102,7 @@ void LauncherItem::setPinned(bool pinned)
102 // Even if pinned status didn't change, we want to update text in case
102 // Even if pinned status didn't change, we want to update text in case
103 // the locale has changed since we last set pinned status.
103 // the locale has changed since we last set pinned status.
104 QuickListEntry entry;
104 QuickListEntry entry;
105− entry.setActionId("pin_item");
105+ entry.setActionId(QStringLiteral("pin_item"));
106 entry.setText(pinned ? gettext("Unpin shortcut") : gettext("Pin shortcut"));
106 entry.setText(pinned ? gettext("Unpin shortcut") : gettext("Pin shortcut"));
107 m_quickList->updateAction(entry);
107 m_quickList->updateAction(entry);
108}
108}
plugins/Unity/Launcher/launchermodel.cpp+6−6
@@ -204,15 +204,15 @@ void LauncherModel::quickListActionInvoked(const QString &appId, int actionIndex
204 const QString actionId = model->get(actionIndex).actionId();
204 const QString actionId = model->get(actionIndex).actionId();
205
205
206 // Check if this is one of the launcher actions we handle ourselves
206 // Check if this is one of the launcher actions we handle ourselves
207− if (actionId == "pin_item") {
207+ if (actionId == QLatin1String("pin_item")) {
208 if (item->pinned()) {
208 if (item->pinned()) {
209 requestRemove(appId);
209 requestRemove(appId);
210 } else {
210 } else {
211 pin(appId);
211 pin(appId);
212 }
212 }
213− } else if (actionId == "launch_item") {
213+ } else if (actionId == QLatin1String("launch_item")) {
214 QDesktopServices::openUrl(getUrlForAppId(appId));
214 QDesktopServices::openUrl(getUrlForAppId(appId));
215− } else if (actionId == "stop_item") { // Quit
215+ } else if (actionId == QLatin1String("stop_item")) { // Quit
216 if (m_appManager) {
216 if (m_appManager) {
217 m_appManager->stopApplication(appId);
217 m_appManager->stopApplication(appId);
218 }
218 }
@@ -236,13 +236,13 @@ QString LauncherModel::getUrlForAppId(const QString &appId) const
236 return QString();
236 return QString();
237 }
237 }
238
238
239− if (!appId.contains("_")) {
239+ if (!appId.contains('_')) {
240 return "application:///" + appId + ".desktop";
240 return "application:///" + appId + ".desktop";
241 }
241 }
242
242
243 QStringList parts = appId.split('_');
243 QStringList parts = appId.split('_');
244 QString package = parts.value(0);
244 QString package = parts.value(0);
245− QString app = parts.value(1, "first-listed-app");
245+ QString app = parts.value(1, QStringLiteral("first-listed-app"));
246 return "appid://" + package + "/" + app + "/current-user-version";
246 return "appid://" + package + "/" + app + "/current-user-version";
247}
247}
248
248
@@ -503,7 +503,7 @@ void LauncherModel::applicationAdded(const QModelIndex &parent, int row)
503 return;
503 return;
504 }
504 }
505
505
506− if (app->appId() == "unity8-dash") {
506+ if (app->appId() == QLatin1String("unity8-dash")) {
507 // Not adding the dash app
507 // Not adding the dash app
508 return;
508 return;
509 }
509 }
plugins/Unity/Launcher/plugin.cpp+5−5
@@ -39,11 +39,11 @@ void UnityLauncherPlugin::registerTypes(const char *uri)
39{
39{
40 Q_ASSERT(uri == QLatin1String("Unity.Launcher"));
40 Q_ASSERT(uri == QLatin1String("Unity.Launcher"));
41
41
42− qmlRegisterUncreatableType<LauncherModelInterface>(uri, 0, 1, "LauncherModelInterface", "Abstract Interface. Cannot be instantiated.");
42+ qmlRegisterUncreatableType<LauncherModelInterface>(uri, 0, 1, "LauncherModelInterface", QStringLiteral("Abstract Interface. Cannot be instantiated."));
43− qmlRegisterUncreatableType<LauncherItemInterface>(uri, 0, 1, "LauncherItemInterface", "Abstract Interface. Cannot be instantiated.");
43+ qmlRegisterUncreatableType<LauncherItemInterface>(uri, 0, 1, "LauncherItemInterface", QStringLiteral("Abstract Interface. Cannot be instantiated."));
44− qmlRegisterUncreatableType<QuickListModelInterface>(uri, 0, 1, "QuickListInterface", "Abstract Interface. Cannot be instantiated.");
44+ qmlRegisterUncreatableType<QuickListModelInterface>(uri, 0, 1, "QuickListInterface", QStringLiteral("Abstract Interface. Cannot be instantiated."));
45
45
46 qmlRegisterSingletonType<LauncherModel>(uri, 0, 1, "LauncherModel", modelProvider);
46 qmlRegisterSingletonType<LauncherModel>(uri, 0, 1, "LauncherModel", modelProvider);
47− qmlRegisterUncreatableType<LauncherItem>(uri, 0, 1, "LauncherItem", "Can't create new Launcher Items in QML. Get them from the LauncherModel.");
47+ qmlRegisterUncreatableType<LauncherItem>(uri, 0, 1, "LauncherItem", QStringLiteral("Can't create new Launcher Items in QML. Get them from the LauncherModel."));
48− qmlRegisterUncreatableType<QuickListModel>(uri, 0, 1, "QuickListModel", "Can't create a QuickListModel in QML. Get them from the LauncherItems.");
48+ qmlRegisterUncreatableType<QuickListModel>(uri, 0, 1, "QuickListModel", QStringLiteral("Can't create a QuickListModel in QML. Get them from the LauncherItems."));
49}
49}
plugins/Unity/Session/dbusunitysessionservice.cpp+41−41
@@ -58,7 +58,7 @@ public:
58 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE,
58 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE,
59 LOGIN1_PATH,
59 LOGIN1_PATH,
60 LOGIN1_IFACE,
60 LOGIN1_IFACE,
61− "GetSessionByPID");
61+ QStringLiteral("GetSessionByPID"));
62 msg << (quint32) getpid();
62 msg << (quint32) getpid();
63
63
64 QDBusReply<QDBusObjectPath> reply = QDBusConnection::systemBus().asyncCall(msg);
64 QDBusReply<QDBusObjectPath> reply = QDBusConnection::systemBus().asyncCall(msg);
@@ -66,13 +66,13 @@ public:
66 logindSessionPath = reply.value().path();
66 logindSessionPath = reply.value().path();
67
67
68 // start watching the Active property
68 // start watching the Active property
69− QDBusConnection::systemBus().connect(LOGIN1_SERVICE, logindSessionPath, "org.freedesktop.DBus.Properties", "PropertiesChanged",
69+ QDBusConnection::systemBus().connect(LOGIN1_SERVICE, logindSessionPath, QStringLiteral("org.freedesktop.DBus.Properties"), QStringLiteral("PropertiesChanged"),
70 this, SLOT(onPropertiesChanged(QString,QVariantMap,QStringList)));
70 this, SLOT(onPropertiesChanged(QString,QVariantMap,QStringList)));
71
71
72 setupSystemdInhibition();
72 setupSystemdInhibition();
73
73
74 // re-enable the inhibition upon resume from sleep
74 // re-enable the inhibition upon resume from sleep
75− QDBusConnection::systemBus().connect(LOGIN1_SERVICE, LOGIN1_PATH, LOGIN1_IFACE, "PrepareForSleep",
75+ QDBusConnection::systemBus().connect(LOGIN1_SERVICE, LOGIN1_PATH, LOGIN1_IFACE, QStringLiteral("PrepareForSleep"),
76 this, SLOT(onResuming(bool)));
76 this, SLOT(onResuming(bool)));
77 } else {
77 } else {
78 qWarning() << "Failed to get logind session path" << reply.error().message();
78 qWarning() << "Failed to get logind session path" << reply.error().message();
@@ -87,7 +87,7 @@ public:
87 // inhibit systemd handling of power/sleep/lid buttons
87 // inhibit systemd handling of power/sleep/lid buttons
88 // http://www.freedesktop.org/wiki/Software/systemd/inhibit
88 // http://www.freedesktop.org/wiki/Software/systemd/inhibit
89
89
90− QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE, LOGIN1_PATH, LOGIN1_IFACE, "Inhibit");
90+ QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE, LOGIN1_PATH, LOGIN1_IFACE, QStringLiteral("Inhibit"));
91 msg << "handle-power-key:handle-suspend-key:handle-hibernate-key:handle-lid-switch"; // what
91 msg << "handle-power-key:handle-suspend-key:handle-hibernate-key:handle-lid-switch"; // what
92 msg << "Unity"; // who
92 msg << "Unity"; // who
93 msg << "Unity8 handles power events"; // why
93 msg << "Unity8 handles power events"; // why
@@ -128,8 +128,8 @@ public:
128
128
129 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE,
129 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE,
130 logindSessionPath,
130 logindSessionPath,
131− "org.freedesktop.DBus.Properties",
131+ QStringLiteral("org.freedesktop.DBus.Properties"),
132− "Get");
132+ QStringLiteral("Get"));
133 msg << LOGIN1_SESSION_IFACE;
133 msg << LOGIN1_SESSION_IFACE;
134 msg << ACTIVE_KEY;
134 msg << ACTIVE_KEY;
135
135
@@ -154,8 +154,8 @@ public:
154 {
154 {
155 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE,
155 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE,
156 logindSessionPath,
156 logindSessionPath,
157− "org.freedesktop.DBus.Properties",
157+ QStringLiteral("org.freedesktop.DBus.Properties"),
158− "Get");
158+ QStringLiteral("Get"));
159 msg << LOGIN1_SESSION_IFACE;
159 msg << LOGIN1_SESSION_IFACE;
160 msg << IDLE_SINCE_KEY;
160 msg << IDLE_SINCE_KEY;
161
161
@@ -174,7 +174,7 @@ public:
174 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE,
174 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE,
175 logindSessionPath,
175 logindSessionPath,
176 LOGIN1_SESSION_IFACE,
176 LOGIN1_SESSION_IFACE,
177− "SetIdleHint");
177+ QStringLiteral("SetIdleHint"));
178 msg << idle;
178 msg << idle;
179 QDBusConnection::systemBus().asyncCall(msg);
179 QDBusConnection::systemBus().asyncCall(msg);
180 }
180 }
@@ -217,14 +217,14 @@ Q_SIGNALS:
217Q_GLOBAL_STATIC(DBusUnitySessionServicePrivate, d)
217Q_GLOBAL_STATIC(DBusUnitySessionServicePrivate, d)
218
218
219DBusUnitySessionService::DBusUnitySessionService()
219DBusUnitySessionService::DBusUnitySessionService()
220− : UnityDBusObject("/com/canonical/Unity/Session", "com.canonical.Unity")
220+ : UnityDBusObject(QStringLiteral("/com/canonical/Unity/Session"), QStringLiteral("com.canonical.Unity"))
221{
221{
222 if (!d->logindSessionPath.isEmpty()) {
222 if (!d->logindSessionPath.isEmpty()) {
223 // connect our Lock() slot to the logind's session Lock() signal
223 // connect our Lock() slot to the logind's session Lock() signal
224− QDBusConnection::systemBus().connect(LOGIN1_SERVICE, d->logindSessionPath, LOGIN1_SESSION_IFACE, "Lock", this, SLOT(Lock()));
224+ QDBusConnection::systemBus().connect(LOGIN1_SERVICE, d->logindSessionPath, LOGIN1_SESSION_IFACE, QStringLiteral("Lock"), this, SLOT(Lock()));
225 // ... and our Unlocked() signal to the logind's session Unlock() signal
225 // ... and our Unlocked() signal to the logind's session Unlock() signal
226 // (lightdm handles the unlocking by calling logind's Unlock method which in turn emits this signal we connect to)
226 // (lightdm handles the unlocking by calling logind's Unlock method which in turn emits this signal we connect to)
227− QDBusConnection::systemBus().connect(LOGIN1_SERVICE, d->logindSessionPath, LOGIN1_SESSION_IFACE, "Unlock", this, SIGNAL(Unlocked()));
227+ QDBusConnection::systemBus().connect(LOGIN1_SERVICE, d->logindSessionPath, LOGIN1_SESSION_IFACE, QStringLiteral("Unlock"), this, SIGNAL(Unlocked()));
228 } else {
228 } else {
229 qWarning() << "Failed to connect to logind's session Lock/Unlock signals";
229 qWarning() << "Failed to connect to logind's session Lock/Unlock signals";
230 }
230 }
@@ -239,36 +239,36 @@ void DBusUnitySessionService::Logout()
239
239
240void DBusUnitySessionService::EndSession()
240void DBusUnitySessionService::EndSession()
241{
241{
242− const QDBusMessage msg = QDBusMessage::createMethodCall("com.ubuntu.Upstart",
242+ const QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("com.ubuntu.Upstart"),
243− "/com/ubuntu/Upstart",
243+ QStringLiteral("/com/ubuntu/Upstart"),
244− "com.ubuntu.Upstart0_6",
244+ QStringLiteral("com.ubuntu.Upstart0_6"),
245− "EndSession");
245+ QStringLiteral("EndSession"));
246 QDBusConnection::sessionBus().asyncCall(msg);
246 QDBusConnection::sessionBus().asyncCall(msg);
247}
247}
248
248
249bool DBusUnitySessionService::CanHibernate() const
249bool DBusUnitySessionService::CanHibernate() const
250{
250{
251− return d->checkLogin1Call("CanHibernate");
251+ return d->checkLogin1Call(QStringLiteral("CanHibernate"));
252}
252}
253
253
254bool DBusUnitySessionService::CanSuspend() const
254bool DBusUnitySessionService::CanSuspend() const
255{
255{
256− return d->checkLogin1Call("CanSuspend");
256+ return d->checkLogin1Call(QStringLiteral("CanSuspend"));
257}
257}
258
258
259bool DBusUnitySessionService::CanHybridSleep() const
259bool DBusUnitySessionService::CanHybridSleep() const
260{
260{
261− return d->checkLogin1Call("CanHybridSleep");
261+ return d->checkLogin1Call(QStringLiteral("CanHybridSleep"));
262}
262}
263
263
264bool DBusUnitySessionService::CanReboot() const
264bool DBusUnitySessionService::CanReboot() const
265{
265{
266− return d->checkLogin1Call("CanReboot");
266+ return d->checkLogin1Call(QStringLiteral("CanReboot"));
267}
267}
268
268
269bool DBusUnitySessionService::CanShutdown() const
269bool DBusUnitySessionService::CanShutdown() const
270{
270{
271− return d->checkLogin1Call("CanPowerOff");
271+ return d->checkLogin1Call(QStringLiteral("CanPowerOff"));
272}
272}
273
273
274bool DBusUnitySessionService::CanLock() const
274bool DBusUnitySessionService::CanLock() const
@@ -320,10 +320,10 @@ void DBusUnitySessionService::Lock()
320{
320{
321 // lock the session using the org.freedesktop.DisplayManager system DBUS service
321 // lock the session using the org.freedesktop.DisplayManager system DBUS service
322 const QString sessionPath = QString::fromLocal8Bit(qgetenv("XDG_SESSION_PATH"));
322 const QString sessionPath = QString::fromLocal8Bit(qgetenv("XDG_SESSION_PATH"));
323− QDBusMessage msg = QDBusMessage::createMethodCall("org.freedesktop.DisplayManager",
323+ QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.DisplayManager"),
324 sessionPath,
324 sessionPath,
325− "org.freedesktop.DisplayManager.Session",
325+ QStringLiteral("org.freedesktop.DisplayManager.Session"),
326− "Lock");
326+ QStringLiteral("Lock"));
327 QDBusReply<void> reply = QDBusConnection::systemBus().asyncCall(msg);
327 QDBusReply<void> reply = QDBusConnection::systemBus().asyncCall(msg);
328 if (!reply.isValid()) {
328 if (!reply.isValid()) {
329 qWarning() << "Lock call failed" << reply.error().message();
329 qWarning() << "Lock call failed" << reply.error().message();
@@ -346,7 +346,7 @@ void DBusUnitySessionService::RequestLogout()
346
346
347void DBusUnitySessionService::Reboot()
347void DBusUnitySessionService::Reboot()
348{
348{
349− d->makeLogin1Call("Reboot", {false});
349+ d->makeLogin1Call(QStringLiteral("Reboot"), {false});
350}
350}
351
351
352void DBusUnitySessionService::RequestReboot()
352void DBusUnitySessionService::RequestReboot()
@@ -357,22 +357,22 @@ void DBusUnitySessionService::RequestReboot()
357
357
358void DBusUnitySessionService::Shutdown()
358void DBusUnitySessionService::Shutdown()
359{
359{
360− d->makeLogin1Call("PowerOff", {false});
360+ d->makeLogin1Call(QStringLiteral("PowerOff"), {false});
361}
361}
362
362
363void DBusUnitySessionService::Suspend()
363void DBusUnitySessionService::Suspend()
364{
364{
365− d->makeLogin1Call("Suspend", {false});
365+ d->makeLogin1Call(QStringLiteral("Suspend"), {false});
366}
366}
367
367
368void DBusUnitySessionService::Hibernate()
368void DBusUnitySessionService::Hibernate()
369{
369{
370− d->makeLogin1Call("Hibernate", {false});
370+ d->makeLogin1Call(QStringLiteral("Hibernate"), {false});
371}
371}
372
372
373void DBusUnitySessionService::HybridSleep()
373void DBusUnitySessionService::HybridSleep()
374{
374{
375− d->makeLogin1Call("HybridSleep", {false});
375+ d->makeLogin1Call(QStringLiteral("HybridSleep"), {false});
376}
376}
377
377
378void DBusUnitySessionService::RequestShutdown()
378void DBusUnitySessionService::RequestShutdown()
@@ -392,16 +392,16 @@ enum class Action : unsigned
392
392
393void performAsyncUnityCall(const QString &method)
393void performAsyncUnityCall(const QString &method)
394{
394{
395− const QDBusMessage msg = QDBusMessage::createMethodCall("com.canonical.Unity",
395+ const QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("com.canonical.Unity"),
396− "/com/canonical/Unity/Session",
396+ QStringLiteral("/com/canonical/Unity/Session"),
397− "com.canonical.Unity.Session",
397+ QStringLiteral("com.canonical.Unity.Session"),
398 method);
398 method);
399 QDBusConnection::sessionBus().asyncCall(msg);
399 QDBusConnection::sessionBus().asyncCall(msg);
400}
400}
401
401
402
402
403DBusGnomeSessionManagerWrapper::DBusGnomeSessionManagerWrapper()
403DBusGnomeSessionManagerWrapper::DBusGnomeSessionManagerWrapper()
404− : UnityDBusObject("/org/gnome/SessionManager/EndSessionDialog", "com.canonical.Unity")
404+ : UnityDBusObject(QStringLiteral("/org/gnome/SessionManager/EndSessionDialog"), QStringLiteral("com.canonical.Unity"))
405{
405{
406}
406}
407
407
@@ -414,15 +414,15 @@ void DBusGnomeSessionManagerWrapper::Open(const unsigned type, const unsigned ar
414 switch (static_cast<Action>(type))
414 switch (static_cast<Action>(type))
415 {
415 {
416 case Action::LOGOUT:
416 case Action::LOGOUT:
417− performAsyncUnityCall("RequestLogout");
417+ performAsyncUnityCall(QStringLiteral("RequestLogout"));
418 break;
418 break;
419
419
420 case Action::REBOOT:
420 case Action::REBOOT:
421− performAsyncUnityCall("RequestReboot");
421+ performAsyncUnityCall(QStringLiteral("RequestReboot"));
422 break;
422 break;
423
423
424 case Action::SHUTDOWN:
424 case Action::SHUTDOWN:
425− performAsyncUnityCall("RequestShutdown");
425+ performAsyncUnityCall(QStringLiteral("RequestShutdown"));
426 break;
426 break;
427
427
428 default:
428 default:
@@ -432,7 +432,7 @@ void DBusGnomeSessionManagerWrapper::Open(const unsigned type, const unsigned ar
432
432
433
433
434DBusGnomeScreensaverWrapper::DBusGnomeScreensaverWrapper()
434DBusGnomeScreensaverWrapper::DBusGnomeScreensaverWrapper()
435− : UnityDBusObject("/org/gnome/ScreenSaver", "org.gnome.ScreenSaver")
435+ : UnityDBusObject(QStringLiteral("/org/gnome/ScreenSaver"), QStringLiteral("org.gnome.ScreenSaver"))
436{
436{
437 connect(d, &DBusUnitySessionServicePrivate::screensaverActiveChanged, this, &DBusGnomeScreensaverWrapper::ActiveChanged);
437 connect(d, &DBusUnitySessionServicePrivate::screensaverActiveChanged, this, &DBusGnomeScreensaverWrapper::ActiveChanged);
438}
438}
@@ -451,7 +451,7 @@ void DBusGnomeScreensaverWrapper::SetActive(bool lock)
451
451
452void DBusGnomeScreensaverWrapper::Lock()
452void DBusGnomeScreensaverWrapper::Lock()
453{
453{
454− performAsyncUnityCall("Lock");
454+ performAsyncUnityCall(QStringLiteral("Lock"));
455}
455}
456
456
457quint32 DBusGnomeScreensaverWrapper::GetActiveTime() const
457quint32 DBusGnomeScreensaverWrapper::GetActiveTime() const
@@ -466,9 +466,9 @@ void DBusGnomeScreensaverWrapper::SimulateUserActivity()
466
466
467
467
468DBusScreensaverWrapper::DBusScreensaverWrapper()
468DBusScreensaverWrapper::DBusScreensaverWrapper()
469− : UnityDBusObject("/org/freedesktop/ScreenSaver", "org.freedesktop.ScreenSaver")
469+ : UnityDBusObject(QStringLiteral("/org/freedesktop/ScreenSaver"), QStringLiteral("org.freedesktop.ScreenSaver"))
470{
470{
471− QDBusConnection::sessionBus().registerObject("/ScreenSaver", this, QDBusConnection::ExportScriptableContents); // compat path, also register here
471+ QDBusConnection::sessionBus().registerObject(QStringLiteral("/ScreenSaver"), this, QDBusConnection::ExportScriptableContents); // compat path, also register here
472 connect(d, &DBusUnitySessionServicePrivate::screensaverActiveChanged, this, &DBusScreensaverWrapper::ActiveChanged);
472 connect(d, &DBusUnitySessionServicePrivate::screensaverActiveChanged, this, &DBusScreensaverWrapper::ActiveChanged);
473}
473}
474
474
@@ -488,7 +488,7 @@ bool DBusScreensaverWrapper::SetActive(bool lock)
488
488
489void DBusScreensaverWrapper::Lock()
489void DBusScreensaverWrapper::Lock()
490{
490{
491− performAsyncUnityCall("Lock");
491+ performAsyncUnityCall(QStringLiteral("Lock"));
492}
492}
493
493
494quint32 DBusScreensaverWrapper::GetActiveTime() const
494quint32 DBusScreensaverWrapper::GetActiveTime() const
plugins/Utils/CMakeLists.txt+1
@@ -23,6 +23,7 @@ set(QMLPLUGIN_SRC
23 windowscreenshotprovider.cpp
23 windowscreenshotprovider.cpp
24 easingcurve.cpp
24 easingcurve.cpp
25 windowstatestorage.cpp
25 windowstatestorage.cpp
26+ timezoneFormatter.cpp
26 plugin.cpp
27 plugin.cpp
27 )
28 )
28
29
plugins/Utils/plugin.cpp+4−1
@@ -36,6 +36,7 @@
36#include "windowscreenshotprovider.h"
36#include "windowscreenshotprovider.h"
37#include "windowstatestorage.h"
37#include "windowstatestorage.h"
38#include "constants.h"
38#include "constants.h"
39+#include "timezoneFormatter.h"
39
40
40static QObject *createWindowStateStorage(QQmlEngine *engine, QJSEngine *scriptEngine)
41static QObject *createWindowStateStorage(QQmlEngine *engine, QJSEngine *scriptEngine)
41{
42{
@@ -67,6 +68,8 @@ void UtilsPlugin::registerTypes(const char *uri)
67 qmlRegisterSingletonType<WindowStateStorage>(uri, 0, 1, "WindowStateStorage", createWindowStateStorage);
68 qmlRegisterSingletonType<WindowStateStorage>(uri, 0, 1, "WindowStateStorage", createWindowStateStorage);
68 qmlRegisterType<InputWatcher>(uri, 0, 1, "InputWatcher");
69 qmlRegisterType<InputWatcher>(uri, 0, 1, "InputWatcher");
69 qmlRegisterSingletonType<Constants>(uri, 0, 1, "Constants", createConstants);
70 qmlRegisterSingletonType<Constants>(uri, 0, 1, "Constants", createConstants);
71+ qmlRegisterSingletonType<TimezoneFormatter>(uri, 0, 1, "TimezoneFormatter",
72+ [](QQmlEngine*, QJSEngine*) -> QObject* { return new TimezoneFormatter; });
70 qmlRegisterType<ActiveFocusLogger>(uri, 0, 1, "ActiveFocusLogger");
73 qmlRegisterType<ActiveFocusLogger>(uri, 0, 1, "ActiveFocusLogger");
71}
74}
72
75
@@ -74,5 +77,5 @@ void UtilsPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
74{
77{
75 QQmlExtensionPlugin::initializeEngine(engine, uri);
78 QQmlExtensionPlugin::initializeEngine(engine, uri);
76
79
77− engine->addImageProvider(QLatin1String("window"), new WindowScreenshotProvider);
80+ engine->addImageProvider(QStringLiteral("window"), new WindowScreenshotProvider);
78}
81}
plugins/Utils/relativetimeformatter.cpp+4−4
@@ -185,8 +185,8 @@ char* generate_full_format_string_at_time (GDateTime* now,
185 /* Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
185 /* Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
186 This format string is used for showing, on a 12-hour clock, times that happened before a week from now.
186 This format string is used for showing, on a 12-hour clock, times that happened before a week from now.
187 (\u2003 is a unicode em space which is slightly wider than a normal space.)
187 (\u2003 is a unicode em space which is slightly wider than a normal space.)
188− en_US example: "%a %d %b\u2003%l:%M %p" --> "Fri Oct 31 1:00 PM"
188+ en_US example: "%a %b %d\u2003%l:%M %p" --> "Fri Oct 31 1:00 PM"
189− en_GB example: "%a %b %d\u2003%l:%M %p" --> "Fri 31 Oct 1:00 PM" */
189+ en_GB example: "%a %d %b\u2003%l:%M %p" --> "Fri 31 Oct 1:00 PM" */
190 g_string_assign (ret, dgettext_datetime("%a %d %b\u2003%l:%M %p"));
190 g_string_assign (ret, dgettext_datetime("%a %d %b\u2003%l:%M %p"));
191 break;
191 break;
192 }
192 }
@@ -229,8 +229,8 @@ char* generate_full_format_string_at_time (GDateTime* now,
229 /* Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
229 /* Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
230 This format string is used for showing, on a 24-hour clock, times that happened before a week from now.
230 This format string is used for showing, on a 24-hour clock, times that happened before a week from now.
231 (\u2003 is a unicode em space which is slightly wider than a normal space.)
231 (\u2003 is a unicode em space which is slightly wider than a normal space.)
232− en_US example: "%a %d %b\u2003%H:%M" --> "Fri Oct 31 13:00"
232+ en_US example: "%a %b %d\u2003%H:%M" --> "Fri Oct 31 13:00"
233− en_GB example: "%a %b %d\u2003%H:%M" --> "Fri 31 Oct 13:00" */
233+ en_GB example: "%a %d %b\u2003%H:%M" --> "Fri 31 Oct 13:00" */
234 g_string_assign (ret, dgettext_datetime("%a %d %b\u2003%H:%M"));
234 g_string_assign (ret, dgettext_datetime("%a %d %b\u2003%H:%M"));
235 break;
235 break;
236 }
236 }
plugins/Utils/timeformatter.cpp+3−3
@@ -113,7 +113,7 @@ TimeFormatter::TimeFormatter(QObject *parent): QObject(parent)
113 priv = new TimeFormatterPrivate;
113 priv = new TimeFormatterPrivate;
114 priv->formatter = this;
114 priv->formatter = this;
115 priv->time = 0;
115 priv->time = 0;
116− priv->format = "yyyy-MM-dd hh:mm";
116+ priv->format = QStringLiteral("yyyy-MM-dd hh:mm");
117 priv->system_bus = nullptr;
117 priv->system_bus = nullptr;
118 priv->subscription_id = 0;
118 priv->subscription_id = 0;
119 priv->cancellable = g_cancellable_new ();
119 priv->cancellable = g_cancellable_new ();
@@ -182,7 +182,7 @@ QString TimeFormatter::formatTime() const
182}
182}
183
183
184GDateTimeFormatter::GDateTimeFormatter(QObject* parent)
184GDateTimeFormatter::GDateTimeFormatter(QObject* parent)
185−: TimeFormatter("%d-%m-%Y %I:%M%p", parent)
185+: TimeFormatter(QStringLiteral("%d-%m-%Y %I:%M%p"), parent)
186{
186{
187}
187}
188
188
@@ -194,7 +194,7 @@ QString GDateTimeFormatter::formatTime() const
194
194
195 datetime = g_date_time_new_from_unix_local(time());
195 datetime = g_date_time_new_from_unix_local(time());
196 if (!datetime) {
196 if (!datetime) {
197− return "";
197+ return QLatin1String("");
198 }
198 }
199
199
200 time_string = g_date_time_format(datetime, formatBytes.constData());
200 time_string = g_date_time_format(datetime, formatBytes.constData());
plugins/Utils/timezoneFormatter.cppnew file+35
@@ -0,0 +1,35 @@
1+/*
2+ * Copyright 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 <QTimeZone>
18+
19+#include "timezoneFormatter.h"
20+
21+TimezoneFormatter::TimezoneFormatter(QObject *parent)
22+ : QObject(parent)
23+{
24+}
25+
26+QString TimezoneFormatter::currentTimeInTimezone(const QVariant &tzId) const
27+{
28+ QTimeZone tz(tzId.toByteArray());
29+ if (tz.isValid()) {
30+ const QDateTime now = QDateTime::currentDateTime().toTimeZone(tz);
31+ // return locale-aware string in the form "day, hh:mm", e.g. "Mon 14:30" or "Mon 1:30 pm"
32+ return QStringLiteral("%1 %2").arg(now.toString("ddd")).arg(now.time().toString(Qt::DefaultLocaleShortDate));
33+ }
34+ return QString();
35+}
plugins/Utils/timezoneFormatter.hnew file+32
@@ -0,0 +1,32 @@
1+/*
2+ * Copyright 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 TIMEZONE_FORMATTER_H
18+#define TIMEZONE_FORMATTER_H
19+
20+#include <QObject>
21+
22+class TimezoneFormatter : public QObject
23+{
24+ Q_OBJECT
25+public:
26+ TimezoneFormatter(QObject * parent = nullptr);
27+ ~TimezoneFormatter() = default;
28+
29+ Q_INVOKABLE QString currentTimeInTimezone(const QVariant &tzId) const;
30+};
31+
32+#endif
plugins/Utils/windowstatestorage.cpp+6−6
@@ -30,7 +30,7 @@ WindowStateStorage::WindowStateStorage(QObject *parent):
30 QObject(parent)
30 QObject(parent)
31{
31{
32 QString dbPath = QDir::homePath() + "/.cache/unity8/";
32 QString dbPath = QDir::homePath() + "/.cache/unity8/";
33− m_db = QSqlDatabase::addDatabase("QSQLITE");
33+ m_db = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"));
34 QDir dir;
34 QDir dir;
35 dir.mkpath(dbPath);
35 dir.mkpath(dbPath);
36 m_db.setDatabaseName(dbPath + "windowstatestorage.sqlite");
36 m_db.setDatabaseName(dbPath + "windowstatestorage.sqlite");
@@ -51,7 +51,7 @@ void WindowStateStorage::saveGeometry(const QString &windowId, const QRect &rect
51{
51{
52 QMutexLocker mutexLocker(&s_mutex);
52 QMutexLocker mutexLocker(&s_mutex);
53
53
54− QString queryString = QString("INSERT OR REPLACE INTO geometry (windowId, x, y, width, height) values ('%1', '%2', '%3', '%4', '%5');")
54+ QString queryString = QStringLiteral("INSERT OR REPLACE INTO geometry (windowId, x, y, width, height) values ('%1', '%2', '%3', '%4', '%5');")
55 .arg(windowId)
55 .arg(windowId)
56 .arg(rect.x())
56 .arg(rect.x())
57 .arg(rect.y())
57 .arg(rect.y())
@@ -85,7 +85,7 @@ void WindowStateStorage::executeAsyncQuery(const QString &queryString)
85QRect WindowStateStorage::getGeometry(const QString &windowId, const QRect &defaultValue)
85QRect WindowStateStorage::getGeometry(const QString &windowId, const QRect &defaultValue)
86{
86{
87 QMutexLocker l(&s_mutex);
87 QMutexLocker l(&s_mutex);
88− QString queryString = QString("SELECT * FROM geometry WHERE windowId = '%1';")
88+ QString queryString = QStringLiteral("SELECT * FROM geometry WHERE windowId = '%1';")
89 .arg(windowId);
89 .arg(windowId);
90 QSqlQuery query;
90 QSqlQuery query;
91
91
@@ -99,7 +99,7 @@ QRect WindowStateStorage::getGeometry(const QString &windowId, const QRect &defa
99 if (!query.first()) {
99 if (!query.first()) {
100 return defaultValue;
100 return defaultValue;
101 }
101 }
102− return QRect(query.value("x").toInt(), query.value("y").toInt(), query.value("width").toInt(), query.value("height").toInt());
102+ return QRect(query.value(QStringLiteral("x")).toInt(), query.value(QStringLiteral("y")).toInt(), query.value(QStringLiteral("width")).toInt(), query.value(QStringLiteral("height")).toInt());
103}
103}
104
104
105void WindowStateStorage::initdb()
105void WindowStateStorage::initdb()
@@ -110,8 +110,8 @@ void WindowStateStorage::initdb()
110 return;
110 return;
111 }
111 }
112
112
113− if (!m_db.tables().contains("geometry")) {
113+ if (!m_db.tables().contains(QStringLiteral("geometry"))) {
114 QSqlQuery query;
114 QSqlQuery query;
115− query.exec("CREATE TABLE geometry(windowId TEXT UNIQUE, x INTEGER, y INTEGER, width INTEGER, height INTEGER);");
115+ query.exec(QStringLiteral("CREATE TABLE geometry(windowId TEXT UNIQUE, x INTEGER, y INTEGER, width INTEGER, height INTEGER);"));
116 }
116 }
117}
117}
plugins/Wizard/PageList.cpp+3−3
@@ -40,8 +40,8 @@ PageList::PageList(QObject *parent)
40 m_index(-1),
40 m_index(-1),
41 m_pages()
41 m_pages()
42{
42{
43− QString qmlSuffix = ".qml";
43+ QString qmlSuffix = QStringLiteral(".qml");
44− QString disabledSuffix = ".disabled";
44+ QString disabledSuffix = QStringLiteral(".disabled");
45 QSet<QString> disabledPages;
45 QSet<QString> disabledPages;
46 QStringList dataDirs;
46 QStringList dataDirs;
47
47
@@ -53,7 +53,7 @@ PageList::PageList(QObject *parent)
53
53
54 Q_FOREACH(const QString &dataDir, dataDirs) {
54 Q_FOREACH(const QString &dataDir, dataDirs) {
55 QDir dir(dataDir + "/Wizard/Pages");
55 QDir dir(dataDir + "/Wizard/Pages");
56− QStringList entries = dir.entryList(QStringList("[0-9]*"), QDir::Files | QDir::Readable);
56+ QStringList entries = dir.entryList(QStringList(QStringLiteral("[0-9]*")), QDir::Files | QDir::Readable);
57 Q_FOREACH(const QString &entry, entries) {
57 Q_FOREACH(const QString &entry, entries) {
58 if (!m_pages.contains(entry) && entry.endsWith(qmlSuffix))
58 if (!m_pages.contains(entry) && entry.endsWith(qmlSuffix))
59 m_pages.insert(entry, dir.absoluteFilePath(entry));
59 m_pages.insert(entry, dir.absoluteFilePath(entry));
plugins/Wizard/System.cpp+23−15
@@ -33,14 +33,16 @@ System::System()
33 // Register the argument needed for UpdateActivationEnvironment below
33 // Register the argument needed for UpdateActivationEnvironment below
34 qDBusRegisterMetaType<QMap<QString,QString>>();
34 qDBusRegisterMetaType<QMap<QString,QString>>();
35
35
36+ if(!wizardEnabled()) {
36− m_fsWatcher.addPath(wizardEnabledPath());
37+ m_fsWatcher.addPath(wizardEnabledPath());
38+ }
37− connect(&m_fsWatcher, &QFileSystemWatcher::fileChanged, this, &System::wizardEnabledChanged);
39+ connect(&m_fsWatcher, &QFileSystemWatcher::fileChanged, this, &System::watcherFileChanged);
38}
40}
39
41
40QString System::wizardEnabledPath()
42QString System::wizardEnabledPath()
41{
43{
42 // Uses ubuntu-system-settings namespace for historic compatibility reasons
44 // Uses ubuntu-system-settings namespace for historic compatibility reasons
43− return QDir::home().filePath(".config/ubuntu-system-settings/wizard-has-run");
45+ return QDir::home().filePath(QStringLiteral(".config/ubuntu-system-settings/wizard-has-run"));
44}
46}
45
47
46bool System::wizardEnabled() const
48bool System::wizardEnabled() const
@@ -56,13 +58,19 @@ void System::setWizardEnabled(bool enabled)
56 if (enabled) {
58 if (enabled) {
57 QFile::remove(wizardEnabledPath());
59 QFile::remove(wizardEnabledPath());
58 } else {
60 } else {
59− QDir(wizardEnabledPath()).mkpath("..");
61+ QDir(wizardEnabledPath()).mkpath(QStringLiteral(".."));
60 QFile(wizardEnabledPath()).open(QIODevice::WriteOnly);
62 QFile(wizardEnabledPath()).open(QIODevice::WriteOnly);
61 m_fsWatcher.addPath(wizardEnabledPath());
63 m_fsWatcher.addPath(wizardEnabledPath());
62− wizardEnabledChanged();
64+ Q_EMIT wizardEnabledChanged();
63 }
65 }
64}
66}
65
67
68+void System::watcherFileChanged()
69+{
70+ Q_EMIT wizardEnabledChanged();
71+ m_fsWatcher.removePath(wizardEnabledPath());
72+}
73+
66void System::setSessionVariable(const QString &variable, const QString &value)
74void System::setSessionVariable(const QString &variable, const QString &value)
67{
75{
68 // We need to update both upstart's and DBus's environment
76 // We need to update both upstart's and DBus's environment
@@ -71,10 +79,10 @@ void System::setSessionVariable(const QString &variable, const QString &value)
71 QMap<QString,QString> valueMap;
79 QMap<QString,QString> valueMap;
72 valueMap.insert(variable, value);
80 valueMap.insert(variable, value);
73
81
74− QDBusMessage msg = QDBusMessage::createMethodCall("org.freedesktop.DBus",
82+ QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.DBus"),
75− "/org/freedesktop/DBus",
83+ QStringLiteral("/org/freedesktop/DBus"),
76− "org.freedesktop.DBus",
84+ QStringLiteral("org.freedesktop.DBus"),
77− "UpdateActivationEnvironment");
85+ QStringLiteral("UpdateActivationEnvironment"));
78
86
79 msg << QVariant::fromValue(valueMap);
87 msg << QVariant::fromValue(valueMap);
80 QDBusConnection::sessionBus().asyncCall(msg);
88 QDBusConnection::sessionBus().asyncCall(msg);
@@ -82,21 +90,21 @@ void System::setSessionVariable(const QString &variable, const QString &value)
82
90
83void System::updateSessionLanguage(const QString &locale)
91void System::updateSessionLanguage(const QString &locale)
84{
92{
85− const QString language = locale.split(".")[0];
93+ const QString language = locale.split(QStringLiteral("."))[0];
86
94
87− setSessionVariable("LANGUAGE", language);
95+ setSessionVariable(QStringLiteral("LANGUAGE"), language);
88− setSessionVariable("LANG", locale);
96+ setSessionVariable(QStringLiteral("LANG"), locale);
89− setSessionVariable("LC_ALL", locale);
97+ setSessionVariable(QStringLiteral("LC_ALL"), locale);
90
98
91 // QLocale caches the default locale on startup, and Qt uses that cached
99 // QLocale caches the default locale on startup, and Qt uses that cached
92 // copy when formatting dates. So manually update it here.
100 // copy when formatting dates. So manually update it here.
93 QLocale::setDefault(QLocale(locale));
101 QLocale::setDefault(QLocale(locale));
94
102
95 // Restart bits of the session to pick up new language.
103 // Restart bits of the session to pick up new language.
96− QProcess::startDetached("sh -c \"initctl emit indicator-services-end; \
104+ QProcess::startDetached(QStringLiteral("sh -c \"initctl emit indicator-services-end; \
97 initctl stop scope-registry; \
105 initctl stop scope-registry; \
98 initctl stop smart-scopes-proxy; \
106 initctl stop smart-scopes-proxy; \
99 initctl emit --no-wait indicator-services-start; \
107 initctl emit --no-wait indicator-services-start; \
100 initctl restart --no-wait maliit-server; \
108 initctl restart --no-wait maliit-server; \
101− initctl restart --no-wait unity8-dash\"");
109+ initctl restart --no-wait unity8-dash\""));
102}
110}
plugins/Wizard/System.h+3
@@ -38,6 +38,9 @@ public Q_SLOTS:
38Q_SIGNALS:
38Q_SIGNALS:
39 void wizardEnabledChanged();
39 void wizardEnabledChanged();
40
40
41+private Q_SLOTS:
42+ void watcherFileChanged();
43+
41private:
44private:
42 Q_DISABLE_COPY(System)
45 Q_DISABLE_COPY(System)
43
46
po/am.po+4−9
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11"PO-Revision-Date: 2015-07-04 14:46+0000\n"
11"PO-Revision-Date: 2015-07-04 14:46+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"
14−"Language: am\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -794,8 +793,7 @@ msgstr "%1 〉"
794#~ "You have now mastered the edge gestures and can start using the "
793#~ "You have now mastered the edge gestures and can start using the "
795#~ "phone<br><br>Tap on the screen to start"
794#~ "phone<br><br>Tap on the screen to start"
796#~ msgstr ""
795#~ msgstr ""
797−#~ "አሁን የ ጠርዝ እንቅስቃሴን አውቀዋል እና መጀመር ይችላሉ ስልኩን መጠቀም <br><br>መመልከቻውን መታ ያድርጉ "
796+#~ "አሁን የ ጠርዝ እንቅስቃሴን አውቀዋል እና መጀመር ይችላሉ ስልኩን መጠቀም <br><br>መመልከቻውን መታ ያድርጉ ለመጀመር"
798−#~ "ለመጀመር"
799
797
800#~ msgid "Restart"
798#~ msgid "Restart"
801#~ msgstr "እንደገና ማስጀመሪያ"
799#~ msgstr "እንደገና ማስጀመሪያ"
@@ -805,6 +803,3 @@ msgstr "%1 〉"
805
803
806#~ msgid "Please re-enter"
804#~ msgid "Please re-enter"
807#~ msgstr "እባክዎን እንደገና-ያስገቡ"
805#~ msgstr "እባክዎን እንደገና-ያስገቡ"
808−
809−#~ msgid "Click here to finish."
810−#~ msgstr "ለመጨረስ እዚህ ይጫኑ"
po/ar.po+7−10
@@ -6,19 +6,18 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\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"
14−"Language: ar\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"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 >= "
19"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"
20−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
21−"X-Generator: Launchpad (build 17737)\n"
20+"X-Generator: Launchpad (build 17746)\n"
22
21
23#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
24msgid "Password: "
23msgid "Password: "
@@ -593,7 +592,8 @@ msgstr "أدخِل شريحة SIM ثم أعِد تشغيل الجهاز"
593
592
594#: qml/Wizard/Pages/20-sim.qml:59
593#: qml/Wizard/Pages/20-sim.qml:59
595msgid "Without it, you won’t be able to make calls or use text messaging."
594msgid "Without it, you won’t be able to make calls or use text messaging."
595+msgstr ""
596−msgstr "بدونها لن تتمكن من إجراء أي مكالمات هاتفية أو استخدام الرسائل النصية."
596+"بدونها لن تتمكن من إجراء أي مكالمات هاتفية أو استخدام الرسائل النصية."
597
597
598#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
598#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
599msgid "Skip"
599msgid "Skip"
@@ -783,11 +783,8 @@ msgstr ""
783#~ "You have now mastered the edge gestures and can start using the "
783#~ "You have now mastered the edge gestures and can start using the "
784#~ "phone<br><br>Tap on the screen to start"
784#~ "phone<br><br>Tap on the screen to start"
785#~ msgstr ""
785#~ msgstr ""
786−#~ "أنت الآن بارع في إيماءات الحواف ويمكنك البدء باستخدام هاتفك<br><br>انقر "
786+#~ "أنت الآن بارع في إيماءات الحواف ويمكنك البدء باستخدام هاتفك<br><br>انقر على "
787−#~ "على الشاشة للبدء"
787+#~ "الشاشة للبدء"
788
788
789#~ msgid "Please re-enter"
789#~ msgid "Please re-enter"
790#~ msgstr "برجاء إعادة إدخالها"
790#~ msgstr "برجاء إعادة إدخالها"
791−
792−#~ msgid "Click here to finish."
793−#~ msgstr "انقر هنا للإنهاء."
po/ast.po+9−11
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11"PO-Revision-Date: 2015-06-11 23:39+0000\n"
11"PO-Revision-Date: 2015-06-11 23:39+0000\n"
12"Last-Translator: enolp <enolp@softastur.org>\n"
12"Last-Translator: enolp <enolp@softastur.org>\n"
13"Language-Team: Asturian <ast@li.org>\n"
13"Language-Team: Asturian <ast@li.org>\n"
14−"Language: ast\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -126,7 +125,8 @@ msgstr "Quedasti bloquiáu polos escesivos intentos fallíos de fras de pasu."
126
125
127#: qml/Components/DelayedLockscreen.qml:65
126#: qml/Components/DelayedLockscreen.qml:65
128msgid "You have been locked out due to too many failed passcode attempts."
127msgid "You have been locked out due to too many failed passcode attempts."
128+msgstr ""
129−msgstr "Quedasti bloquiáu polos escesivos intentos fallíos de códigu de pasu."
129+"Quedasti bloquiáu polos escesivos intentos fallíos de códigu de pasu."
130
130
131#: qml/Components/DelayedLockscreen.qml:74
131#: qml/Components/DelayedLockscreen.qml:74
132#, qt-format
132#, qt-format
@@ -648,7 +648,8 @@ msgstr "Namái usando GPS (menos precisión)"
648
648
649#: qml/Wizard/Pages/50-location.qml:86
649#: qml/Wizard/Pages/50-location.qml:86
650msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
650msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
651+msgstr ""
651−msgstr "Usando GPS, Wi-fi anónimes ya información de redes móviles (aconseyao)"
652+"Usando GPS, Wi-fi anónimes ya información de redes móviles (aconseyao)"
652
653
653#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
654#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
654#: qml/Wizard/Pages/50-location.qml:103
655#: qml/Wizard/Pages/50-location.qml:103
@@ -741,8 +742,8 @@ msgstr "%1 〉"
741
742
742#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
743#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
743#~ msgstr ""
744#~ msgstr ""
744−#~ "Esliza'l deu dende la esquierda p'amosar el llanzador y acceder "
745+#~ "Esliza'l deu dende la esquierda p'amosar el llanzador y acceder rápidamente "
745−#~ "rápidamente a les aplicaciones"
746+#~ "a les aplicaciones"
746
747
747#~ msgid "Well done"
748#~ msgid "Well done"
748#~ msgstr "Bien fecho"
749#~ msgstr "Bien fecho"
@@ -808,8 +809,5 @@ msgstr "%1 〉"
808#~ msgid "Manage Scopes"
809#~ msgid "Manage Scopes"
809#~ msgstr "Xestionar ámbitos"
810#~ msgstr "Xestionar ámbitos"
810
811
811−#~ msgid "Click here to finish."
812−#~ msgstr "Primi equí pa finar."
813−
814#~ msgid "Please re-enter"
812#~ msgid "Please re-enter"
815#~ msgstr "Por favor, reintroduzla"
813#~ msgstr "Por favor, reintroduzla"
po/az.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/be.po+36−36
@@ -6,19 +6,18 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11−"PO-Revision-Date: 2015-04-27 14:34+0000\n"
11+"PO-Revision-Date: 2015-09-24 14:32+0000\n"
12−"Last-Translator: Arsień Šachalevič <semen.shah@gmail.com>\n"
12+"Last-Translator: Siamion Šachalevič <semen.shah@gmail.com>\n"
13"Language-Team: Belarusian <be@li.org>\n"
13"Language-Team: Belarusian <be@li.org>\n"
14−"Language: be\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18−"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
17+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
19−"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
18+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
20−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
19+"X-Launchpad-Export-Date: 2015-09-25 05:51+0000\n"
21−"X-Generator: Launchpad (build 17737)\n"
20+"X-Generator: Launchpad (build 17754)\n"
22
21
23#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
24msgid "Password: "
23msgid "Password: "
@@ -31,7 +30,7 @@ msgstr "Замацаваць кнопку"
31
30
32#: plugins/Unity/Launcher/launcheritem.cpp:52
31#: plugins/Unity/Launcher/launcheritem.cpp:52
33msgid "Quit"
32msgid "Quit"
34−msgstr ""
33+msgstr "Выйсці"
35
34
36#: plugins/Unity/Launcher/launcheritem.cpp:106
35#: plugins/Unity/Launcher/launcheritem.cpp:106
37msgid "Unpin shortcut"
36msgid "Unpin shortcut"
@@ -43,14 +42,14 @@ msgstr "Адмацаваць кнопку"
43#. en_US example: "Yesterday\u2003%l:%M %p" --> "Yesterday 1:00 PM"
42#. en_US example: "Yesterday\u2003%l:%M %p" --> "Yesterday 1:00 PM"
44#: plugins/Utils/relativetimeformatter.cpp:157
43#: plugins/Utils/relativetimeformatter.cpp:157
45msgid "Yesterday %l:%M %p"
44msgid "Yesterday %l:%M %p"
46−msgstr ""
45+msgstr "Учора a %H:%M"
47
46
48#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
47#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
49#. This format string is used for showing, on a 12-hour clock, times that happened today.
48#. This format string is used for showing, on a 12-hour clock, times that happened today.
50#. en_US example: "%l:%M %p" --> "1:00 PM"
49#. en_US example: "%l:%M %p" --> "1:00 PM"
51#: plugins/Utils/relativetimeformatter.cpp:164
50#: plugins/Utils/relativetimeformatter.cpp:164
52msgid "%l:%M %p"
51msgid "%l:%M %p"
53−msgstr ""
52+msgstr "%H:%M"
54
53
55#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
54#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
56#. This format string is used for showing, on a 12-hour clock, events/appointments that happen tomorrow.
55#. This format string is used for showing, on a 12-hour clock, events/appointments that happen tomorrow.
@@ -58,7 +57,7 @@ msgstr ""
58#. en_US example: "Tomorrow\u2003%l:%M %p" --> "Tomorrow 1:00 PM"
57#. en_US example: "Tomorrow\u2003%l:%M %p" --> "Tomorrow 1:00 PM"
59#: plugins/Utils/relativetimeformatter.cpp:172
58#: plugins/Utils/relativetimeformatter.cpp:172
60msgid "Tomorrow %l:%M %p"
59msgid "Tomorrow %l:%M %p"
61−msgstr ""
60+msgstr "Заўтра a %H:%M"
62
61
63#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
62#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
64#. This format string is used for showing, on a 12-hour clock, times that happened in the last week.
63#. This format string is used for showing, on a 12-hour clock, times that happened in the last week.
@@ -66,7 +65,7 @@ msgstr ""
66#. en_US example: "%a\u2003%l:%M %p" --> "Fri 1:00 PM"
65#. en_US example: "%a\u2003%l:%M %p" --> "Fri 1:00 PM"
67#: plugins/Utils/relativetimeformatter.cpp:181
66#: plugins/Utils/relativetimeformatter.cpp:181
68msgid "%a %l:%M %p"
67msgid "%a %l:%M %p"
69−msgstr ""
68+msgstr "%a a %H:%M"
70
69
71#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
70#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
72#. This format string is used for showing, on a 12-hour clock, times that happened before a week from now.
71#. This format string is used for showing, on a 12-hour clock, times that happened before a week from now.
@@ -75,7 +74,7 @@ msgstr ""
75#. en_GB example: "%a %b %d\u2003%l:%M %p" --> "Fri 31 Oct 1:00 PM"
74#. en_GB example: "%a %b %d\u2003%l:%M %p" --> "Fri 31 Oct 1:00 PM"
76#: plugins/Utils/relativetimeformatter.cpp:190
75#: plugins/Utils/relativetimeformatter.cpp:190
77msgid "%a %d %b %l:%M %p"
76msgid "%a %d %b %l:%M %p"
78−msgstr ""
77+msgstr "%a, %b %d a %H:%M"
79
78
80#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
79#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
81#. This format string is used for showing, on a 24-hour clock, times that happen yesterday.
80#. This format string is used for showing, on a 24-hour clock, times that happen yesterday.
@@ -83,14 +82,14 @@ msgstr ""
83#. en_US example: "Yesterday\u2003%l:%M %p" --> "Yesterday 13:00"
82#. en_US example: "Yesterday\u2003%l:%M %p" --> "Yesterday 13:00"
84#: plugins/Utils/relativetimeformatter.cpp:201
83#: plugins/Utils/relativetimeformatter.cpp:201
85msgid "Yesterday %H:%M"
84msgid "Yesterday %H:%M"
86−msgstr ""
85+msgstr "Учора а %H:%M"
87
86
88#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
87#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
89#. This format string is used for showing, on a 24-hour clock, times that happened today.
88#. This format string is used for showing, on a 24-hour clock, times that happened today.
90#. en_US example: "%H:%M" --> "13:00"
89#. en_US example: "%H:%M" --> "13:00"
91#: plugins/Utils/relativetimeformatter.cpp:208
90#: plugins/Utils/relativetimeformatter.cpp:208
92msgid "%H:%M"
91msgid "%H:%M"
93−msgstr ""
92+msgstr "%H:%M"
94
93
95#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
94#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
96#. This format string is used for showing, on a 24-hour clock, events/appointments that happen tomorrow.
95#. This format string is used for showing, on a 24-hour clock, events/appointments that happen tomorrow.
@@ -98,7 +97,7 @@ msgstr ""
98#. en_US example: "Tomorrow\u2003%l:%M %p" --> "Tomorrow 13:00"
97#. en_US example: "Tomorrow\u2003%l:%M %p" --> "Tomorrow 13:00"
99#: plugins/Utils/relativetimeformatter.cpp:216
98#: plugins/Utils/relativetimeformatter.cpp:216
100msgid "Tomorrow %H:%M"
99msgid "Tomorrow %H:%M"
101−msgstr ""
100+msgstr "Заўтра a %H:%M"
102
101
103#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
102#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
104#. This format string is used for showing, on a 24-hour clock, times that happened in the last week.
103#. This format string is used for showing, on a 24-hour clock, times that happened in the last week.
@@ -106,7 +105,7 @@ msgstr ""
106#. en_US example: "%a\u2003%H:%M" --> "Fri 13:00"
105#. en_US example: "%a\u2003%H:%M" --> "Fri 13:00"
107#: plugins/Utils/relativetimeformatter.cpp:225
106#: plugins/Utils/relativetimeformatter.cpp:225
108msgid "%a %H:%M"
107msgid "%a %H:%M"
109−msgstr ""
108+msgstr "%a а %H:%M"
110
109
111#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
110#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
112#. This format string is used for showing, on a 24-hour clock, times that happened before a week from now.
111#. This format string is used for showing, on a 24-hour clock, times that happened before a week from now.
@@ -115,7 +114,7 @@ msgstr ""
115#. en_GB example: "%a %b %d\u2003%H:%M" --> "Fri 31 Oct 13:00"
114#. en_GB example: "%a %b %d\u2003%H:%M" --> "Fri 31 Oct 13:00"
116#: plugins/Utils/relativetimeformatter.cpp:234
115#: plugins/Utils/relativetimeformatter.cpp:234
117msgid "%a %d %b %H:%M"
116msgid "%a %d %b %H:%M"
118−msgstr ""
117+msgstr "%a, %b %d а %H:%M"
119
118
120#: qml/Components/DelayedLockscreen.qml:49
119#: qml/Components/DelayedLockscreen.qml:49
121msgid "Device Locked"
120msgid "Device Locked"
@@ -123,7 +122,8 @@ msgstr "Прылада заблакаваная"
123
122
124#: qml/Components/DelayedLockscreen.qml:64
123#: qml/Components/DelayedLockscreen.qml:64
125msgid "You have been locked out due to too many failed passphrase attempts."
124msgid "You have been locked out due to too many failed passphrase attempts."
125+msgstr ""
126−msgstr "Вы былі заблакаваныя з-за занадта вялікай колькасці няўдалых спробаў."
126+"Вы былі заблакаваныя з-за занадта вялікай колькасці няўдалых спробаў."
127
127
128#: qml/Components/DelayedLockscreen.qml:65
128#: qml/Components/DelayedLockscreen.qml:65
129msgid "You have been locked out due to too many failed passcode attempts."
129msgid "You have been locked out due to too many failed passcode attempts."
@@ -146,7 +146,7 @@ msgstr "Выйсці"
146
146
147#: qml/Components/Dialogs.qml:113
147#: qml/Components/Dialogs.qml:113
148msgid "Are you sure you want to log out?"
148msgid "Are you sure you want to log out?"
149−msgstr "Вы ўпэўнены, што хочаце выйсці?"
149+msgstr "Вы ўпэўненыя, што хочаце выйсці?"
150
150
151#: qml/Components/Dialogs.qml:115
151#: qml/Components/Dialogs.qml:115
152msgctxt "Button: Lock the system"
152msgctxt "Button: Lock the system"
@@ -380,7 +380,7 @@ msgstr "Даруйце, няслушны пароль"
380#: qml/Greeter/NarrowView.qml:121
380#: qml/Greeter/NarrowView.qml:121
381msgctxt "passphrase"
381msgctxt "passphrase"
382msgid "Please re-enter"
382msgid "Please re-enter"
383−msgstr ""
383+msgstr "Калі ласка, паўтарыце ўвод"
384
384
385#: qml/Greeter/NarrowView.qml:122
385#: qml/Greeter/NarrowView.qml:122
386msgid "Sorry, incorrect passcode"
386msgid "Sorry, incorrect passcode"
@@ -406,32 +406,35 @@ msgstr "Нішто не грае"
406#, qt-format
406#, qt-format
407msgid "%1 hour"
407msgid "%1 hour"
408msgid_plural "%1 hours"
408msgid_plural "%1 hours"
409−msgstr[0] ""
409+msgstr[0] "%1 гадзіна"
410−msgstr[1] ""
410+msgstr[1] "%1 гадзіны"
411+msgstr[2] "%1 гадзінаў"
411
412
412#: qml/Panel/Indicators/MenuItemFactory.qml:807
413#: qml/Panel/Indicators/MenuItemFactory.qml:807
413#, qt-format
414#, qt-format
414msgid "%1 minute"
415msgid "%1 minute"
415msgid_plural "%1 minutes"
416msgid_plural "%1 minutes"
416−msgstr[0] ""
417+msgstr[0] "%1 хвіліна"
417−msgstr[1] ""
418+msgstr[1] "%1 хвіліны"
419+msgstr[2] "%1 хвілінаў"
418
420
419#: qml/Panel/Indicators/MenuItemFactory.qml:812
421#: qml/Panel/Indicators/MenuItemFactory.qml:812
420#, qt-format
422#, qt-format
421msgid "%1 second"
423msgid "%1 second"
422msgid_plural "%1 seconds"
424msgid_plural "%1 seconds"
423−msgstr[0] ""
425+msgstr[0] "%1 секунда"
424−msgstr[1] ""
426+msgstr[1] "%1 секунды"
427+msgstr[2] "%1 секундаў"
425
428
426#: qml/Panel/Indicators/MenuItemFactory.qml:815
429#: qml/Panel/Indicators/MenuItemFactory.qml:815
427msgid "0 seconds"
430msgid "0 seconds"
428−msgstr ""
431+msgstr "0 секунд"
429
432
430#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
433#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
431#: qml/Panel/Indicators/MenuItemFactory.qml:817
434#: qml/Panel/Indicators/MenuItemFactory.qml:817
432#, qt-format
435#, qt-format
433msgid "%1 remaining"
436msgid "%1 remaining"
434−msgstr ""
437+msgstr "%1 засталося"
435
438
436#: qml/Panel/Indicators/MenuItemFactory.qml:823
439#: qml/Panel/Indicators/MenuItemFactory.qml:823
437msgid "In queue…"
440msgid "In queue…"
@@ -464,7 +467,7 @@ msgstr "Адказаць"
464
467
465#: qml/Panel/Indicators/MessageMenuItemFactory.qml:204
468#: qml/Panel/Indicators/MessageMenuItemFactory.qml:204
466msgid "Call back"
469msgid "Call back"
467−msgstr ""
470+msgstr "Зваротны выклік"
468
471
469#: qml/Panel/Indicators/ModemInfoItem.qml:105
472#: qml/Panel/Indicators/ModemInfoItem.qml:105
470msgid "Unlock SIM"
473msgid "Unlock SIM"
@@ -773,8 +776,8 @@ msgstr "%1 〉"
773
776
774#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
777#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
775#~ msgstr ""
778#~ msgstr ""
776−#~ "Правядзіце пальцам ад левага краю, каб адкрыць панэль запуску для "
779+#~ "Правядзіце пальцам ад левага краю, каб адкрыць панэль запуску для паскарэння "
777−#~ "паскарэння доступу да праграм"
780+#~ "доступу да праграм"
778
781
779#~ msgid "Skip intro"
782#~ msgid "Skip intro"
780#~ msgstr "Прапусціць уводзіны"
783#~ msgstr "Прапусціць уводзіны"
@@ -804,6 +807,3 @@ msgstr "%1 〉"
804
807
805#~ msgid "Please re-enter"
808#~ msgid "Please re-enter"
806#~ msgstr "Калі ласка, паўтарыце ўвод"
809#~ msgstr "Калі ласка, паўтарыце ўвод"
807−
808−#~ msgid "Click here to finish."
809−#~ msgstr "Націсніце тут для завяршэння."
po/bg.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/br.po+11−15
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11"PO-Revision-Date: 2015-08-25 14:12+0000\n"
11"PO-Revision-Date: 2015-08-25 14:12+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−"Language: br\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -594,7 +593,8 @@ msgstr "Surentez ar prennañ"
594
593
595#: qml/Wizard/Pages/30-passwd-type.qml:74
594#: qml/Wizard/Pages/30-passwd-type.qml:74
596msgid "Please select how you’d like to unlock your phone."
595msgid "Please select how you’d like to unlock your phone."
596+msgstr ""
597−msgstr "Diuzit e peseurt mod e fell deoc'h dibrennañ ho pellgomzer, mar plij."
597+"Diuzit e peseurt mod e fell deoc'h dibrennañ ho pellgomzer, mar plij."
598
598
599#: qml/Wizard/Pages/30-passwd-type.qml:97
599#: qml/Wizard/Pages/30-passwd-type.qml:97
600msgctxt "Label: Type of security method"
600msgctxt "Label: Type of security method"
@@ -652,7 +652,8 @@ msgstr "Implijout ar GPS hepken (n'eo ket ken resis)"
652
652
653#: qml/Wizard/Pages/50-location.qml:86
653#: qml/Wizard/Pages/50-location.qml:86
654msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
654msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
655+msgstr ""
655−msgstr "Implijout ar GPS, Wi-Fi dizanv pe titouroù ar rouedad kelligel (aliet)"
656+"Implijout ar GPS, Wi-Fi dizanv pe titouroù ar rouedad kelligel (aliet)"
656
657
657#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
658#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
658#: qml/Wizard/Pages/50-location.qml:103
659#: qml/Wizard/Pages/50-location.qml:103
@@ -758,13 +759,11 @@ msgstr "%1 〉"
758
759
759#~ msgid "Try swiping from the top edge to access the indicators"
760#~ msgid "Try swiping from the top edge to access the indicators"
760#~ msgstr ""
761#~ msgstr ""
761−#~ "Lakait ho piz da riklañ adalek ar bord uhelañ da lakaat ar merkerioù war "
762+#~ "Lakait ho piz da riklañ adalek ar bord uhelañ da lakaat ar merkerioù war wel."
762−#~ "wel."
763
763
764#~ msgid "Swipe up again to close the settings screen"
764#~ msgid "Swipe up again to close the settings screen"
765#~ msgstr ""
765#~ msgstr ""
766−#~ "Lakait ho piz da riklañ war-du ar bord uhelañ da serriñ skramm an "
766+#~ "Lakait ho piz da riklañ war-du ar bord uhelañ da serriñ skramm an arventennoù"
767−#~ "arventennoù"
768
767
769#~ msgid "Try swiping from the right edge to unlock the phone"
768#~ msgid "Try swiping from the right edge to unlock the phone"
770#~ msgstr ""
769#~ msgstr ""
@@ -772,8 +771,8 @@ msgstr "%1 〉"
772
771
773#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
772#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
774#~ msgstr ""
773#~ msgstr ""
775−#~ "Lakait ho piz da riklañ adalek ar bord kleiz da ziskouez al lañser "
774+#~ "Lakait ho piz da riklañ adalek ar bord kleiz da ziskouez al lañser arloadoù "
776−#~ "arloadoù prim."
775+#~ "prim."
777
776
778#~ msgid "Well done"
777#~ msgid "Well done"
779#~ msgstr "Gourc'hemennoù !"
778#~ msgstr "Gourc'hemennoù !"
@@ -819,6 +818,3 @@ msgstr "%1 〉"
819
818
820#~ msgid "Please re-enter"
819#~ msgid "Please re-enter"
821#~ msgstr "Adverkañ, mar plij"
820#~ msgstr "Adverkañ, mar plij"
822−
823−#~ msgid "Click here to finish."
824−#~ msgstr "Klikit amañ evit echuiñ."
po/bs.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
20+"X-Generator: Launchpad (build 17746)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
po/ca.po+6−11
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\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"
14−"Language: ca\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -756,8 +755,7 @@ msgstr "%1 〉"
756
755
757#~ msgid "Try swiping from the top edge to access the indicators"
756#~ msgid "Try swiping from the top edge to access the indicators"
758#~ msgstr ""
757#~ msgstr ""
759−#~ "Proveu de lliscar el dit des de la vora superior per accedir als "
758+#~ "Proveu de lliscar el dit des de la vora superior per accedir als indicadors"
760−#~ "indicadors"
761
759
762#~ msgid "Close"
760#~ msgid "Close"
763#~ msgstr "Tanca"
761#~ msgstr "Tanca"
@@ -769,8 +767,8 @@ msgstr "%1 〉"
769
767
770#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
768#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
771#~ msgstr ""
769#~ msgstr ""
772−#~ "Llisqueu el dit des de la vora esquerra per mostrar el llançador i "
770+#~ "Llisqueu el dit des de la vora esquerra per mostrar el llançador i accedir "
773−#~ "accedir ràpidament a les aplicacions"
771+#~ "ràpidament a les aplicacions"
774
772
775#~ msgid "Skip intro"
773#~ msgid "Skip intro"
776#~ msgstr "Omet la introducció"
774#~ msgstr "Omet la introducció"
@@ -824,6 +822,3 @@ msgstr "%1 〉"
824
822
825#~ msgid "Manage Scopes"
823#~ msgid "Manage Scopes"
826#~ msgstr "Gestioneu les lents"
824#~ msgstr "Gestioneu les lents"
827−
828−#~ msgid "Click here to finish."
829−#~ msgstr "Feu un toc aquí per finalitzar"
po/ca@valencia.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/ce.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/ckb.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/cs.po+10−11
@@ -6,18 +6,18 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\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"
14−"Language: cs\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"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"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20+"Language: cs\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
@@ -122,11 +122,13 @@ msgstr "Zařízení uzamčeno"
122
122
123#: qml/Components/DelayedLockscreen.qml:64
123#: qml/Components/DelayedLockscreen.qml:64
124msgid "You have been locked out due to too many failed passphrase attempts."
124msgid "You have been locked out due to too many failed passphrase attempts."
125+msgstr ""
125−msgstr "Zařízení bylo uzamčeno z důvodu mnoha neúspěšných pokusů o přihlášení."
126+"Zařízení bylo uzamčeno z důvodu mnoha neúspěšných pokusů o přihlášení."
126
127
127#: qml/Components/DelayedLockscreen.qml:65
128#: qml/Components/DelayedLockscreen.qml:65
128msgid "You have been locked out due to too many failed passcode attempts."
129msgid "You have been locked out due to too many failed passcode attempts."
130+msgstr ""
129−msgstr "Zařízení bylo uzamčeno z důvodu mnoha neúspěšných pokusů o přihlášení."
131+"Zařízení bylo uzamčeno z důvodu mnoha neúspěšných pokusů o přihlášení."
130
132
131#: qml/Components/DelayedLockscreen.qml:74
133#: qml/Components/DelayedLockscreen.qml:74
132#, qt-format
134#, qt-format
@@ -689,8 +691,8 @@ msgid ""
689"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
691"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
690"Privacy</b>"
692"Privacy</b>"
691msgstr ""
693msgstr ""
692−"To může být vypnuto v <b>Nastavení systému</b> v <b>Zabezpečení a soukromí</"
694+"To může být vypnuto v <b>Nastavení systému</b> v <b>Zabezpečení a "
693−"b>"
695+"soukromí</b>"
694
696
695#: qml/Wizard/Pages/80-finished.qml:24
697#: qml/Wizard/Pages/80-finished.qml:24
696msgid "All done"
698msgid "All done"
@@ -770,6 +772,3 @@ msgstr "%1 〉"
770
772
771#~ msgid "Please re-enter"
773#~ msgid "Please re-enter"
772#~ msgstr "Vložte znovu"
774#~ msgstr "Vložte znovu"
773−
774−#~ msgid "Click here to finish."
775−#~ msgstr "Klikněte zde pro dokončení."
po/cy.po+5−9
@@ -6,19 +6,18 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\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"
14−"Language: cy\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"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) ? "
19"2 : 3;\n"
18"2 : 3;\n"
20−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
21−"X-Generator: Launchpad (build 17737)\n"
20+"X-Generator: Launchpad (build 17746)\n"
22
21
23#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
24msgid "Password: "
23msgid "Password: "
@@ -668,8 +667,8 @@ msgid ""
668"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
667"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
669"conditions</a>."
668"conditions</a>."
670msgstr ""
669msgstr ""
671−"Drwy ddewis yr opsiwn yma rydych yn cytuno i <a href='#'>dermau ac amodau</"
670+"Drwy ddewis yr opsiwn yma rydych yn cytuno i <a href='#'>dermau ac "
672−"a> Nokia HERE."
671+"amodau</a> Nokia HERE."
673
672
674#: qml/Wizard/Pages/50-location.qml:112
673#: qml/Wizard/Pages/50-location.qml:112
675msgid "Not at all"
674msgid "Not at all"
@@ -726,6 +725,3 @@ msgstr "〈 %1"
726#, qt-format
725#, qt-format
727msgid "%1 〉"
726msgid "%1 〉"
728msgstr "%1 〉"
727msgstr "%1 〉"
729−
730−#~ msgid "Click here to finish."
731−#~ msgstr "Cliciwch yma i orffen."
po/da.po+6−11
@@ -7,18 +7,17 @@
7msgid ""
7msgid ""
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: FULL NAME <EMAIL@ADDRESS>\n"
11"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11"POT-Creation-Date: 2015-08-25 14:53+0200\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"
15−"Language: da\n"
16"MIME-Version: 1.0\n"
15"MIME-Version: 1.0\n"
17"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Type: text/plain; charset=UTF-8\n"
18"Content-Transfer-Encoding: 8bit\n"
17"Content-Transfer-Encoding: 8bit\n"
19"Plural-Forms: nplurals=2; plural=n != 1;\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
20−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
21−"X-Generator: Launchpad (build 17737)\n"
20+"X-Generator: Launchpad (build 17746)\n"
22
21
23#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
24msgid "Password: "
23msgid "Password: "
@@ -757,8 +756,7 @@ msgstr "%1 〉"
757#~ msgstr "Stryg op igen for at låse indstillingsskærmen"
756#~ msgstr "Stryg op igen for at låse indstillingsskærmen"
758
757
759#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
758#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
760−#~ msgstr ""
761−#~ "Stryg fra venstre for at vise opstarteren med hurtig adgang til apps"
759+#~ msgstr "Stryg fra venstre for at vise opstarteren med hurtig adgang til apps"
762
760
763#~ msgid "Well done"
761#~ msgid "Well done"
764#~ msgstr "Godt gjort"
762#~ msgstr "Godt gjort"
@@ -776,11 +774,8 @@ msgstr "%1 〉"
776#~ "You have now mastered the edge gestures and can start using the "
774#~ "You have now mastered the edge gestures and can start using the "
777#~ "phone<br><br>Tap on the screen to start"
775#~ "phone<br><br>Tap on the screen to start"
778#~ msgstr ""
776#~ msgstr ""
779−#~ "Du mestrer nu kantbevægelserne og kan begynde at bruge "
777+#~ "Du mestrer nu kantbevægelserne og kan begynde at bruge telefonen<br><br>Tryk "
780−#~ "telefonen<br><br>Tryk på skærmen for at starte"
778+#~ "på skærmen for at starte"
781
779
782#~ msgid "Please re-enter"
780#~ msgid "Please re-enter"
783#~ msgstr "Vær venlig at genindtaste"
781#~ msgstr "Vær venlig at genindtaste"
784−
785−#~ msgid "Click here to finish."
786−#~ msgstr "Tryk her for at afslutte."
po/de.po+5−8
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11"PO-Revision-Date: 2015-07-24 18:03+0000\n"
11"PO-Revision-Date: 2015-07-24 18:03+0000\n"
12"Last-Translator: Torsten Franz <Unknown>\n"
12"Last-Translator: Torsten Franz <Unknown>\n"
13"Language-Team: German <de@li.org>\n"
13"Language-Team: German <de@li.org>\n"
14−"Language: de\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -476,7 +475,8 @@ msgstr "Roaming"
476
475
477#: qml/Tutorial/TutorialBottomFinish.qml:24
476#: qml/Tutorial/TutorialBottomFinish.qml:24
478msgid "This action does different things for different apps"
477msgid "This action does different things for different apps"
478+msgstr ""
479−msgstr "Diese Aktion bewirkt verschiedene Dinge in verschiedenen Anwendungen."
479+"Diese Aktion bewirkt verschiedene Dinge in verschiedenen Anwendungen."
480
480
481#: qml/Tutorial/TutorialBottomFinish.qml:25
481#: qml/Tutorial/TutorialBottomFinish.qml:25
482msgid "Tap here to finish."
482msgid "Tap here to finish."
@@ -817,6 +817,3 @@ msgstr "%1 〉"
817
817
818#~ msgid "Please re-enter"
818#~ msgid "Please re-enter"
819#~ msgstr "Bitte erneut eingeben"
819#~ msgstr "Bitte erneut eingeben"
820−
821−#~ msgid "Click here to finish."
822−#~ msgstr "Zum Abschließen bitte hier klicken."
po/el.po+5−8
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11"PO-Revision-Date: 2015-07-05 21:52+0000\n"
11"PO-Revision-Date: 2015-07-05 21:52+0000\n"
12"Last-Translator: Simos Xenitellis <Unknown>\n"
12"Last-Translator: Simos Xenitellis <Unknown>\n"
13"Language-Team: Greek <el@li.org>\n"
13"Language-Team: Greek <el@li.org>\n"
14−"Language: el\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -478,7 +477,8 @@ msgstr "Περιαγωγή"
478
477
479#: qml/Tutorial/TutorialBottomFinish.qml:24
478#: qml/Tutorial/TutorialBottomFinish.qml:24
480msgid "This action does different things for different apps"
479msgid "This action does different things for different apps"
480+msgstr ""
481−msgstr "Αυτή η ενέργεια κάνει διαφορετικά πράγματα για διαφορετικές εφαρμογές"
481+"Αυτή η ενέργεια κάνει διαφορετικά πράγματα για διαφορετικές εφαρμογές"
482
482
483#: qml/Tutorial/TutorialBottomFinish.qml:25
483#: qml/Tutorial/TutorialBottomFinish.qml:25
484msgid "Tap here to finish."
484msgid "Tap here to finish."
@@ -819,6 +819,3 @@ msgstr "%1 〉"
819
819
820#~ msgid "Power"
820#~ msgid "Power"
821#~ msgstr "Ενέργεια"
821#~ msgstr "Ενέργεια"
822−
823−#~ msgid "Click here to finish."
824−#~ msgstr "Πατήστε εδώ για τέλος."
po/en_AU.po+3−7
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11"PO-Revision-Date: 2015-07-12 07:17+0000\n"
11"PO-Revision-Date: 2015-07-12 07:17+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"
14−"Language: \n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -808,6 +807,3 @@ msgstr "%1 〉"
808
807
809#~ msgid "Please re-enter"
808#~ msgid "Please re-enter"
810#~ msgstr "Please re-enter"
809#~ msgstr "Please re-enter"
811−
812−#~ msgid "Click here to finish."
813−#~ msgstr "Click here to finish."
po/en_GB.po+5−9
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11"PO-Revision-Date: 2015-04-23 12:59+0000\n"
11"PO-Revision-Date: 2015-04-23 12:59+0000\n"
12"Last-Translator: Andi Chandler <Unknown>\n"
12"Last-Translator: Andi Chandler <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−"Language: \n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -30,7 +29,7 @@ msgstr "Pin shortcut"
30
29
31#: plugins/Unity/Launcher/launcheritem.cpp:52
30#: plugins/Unity/Launcher/launcheritem.cpp:52
32msgid "Quit"
31msgid "Quit"
33−msgstr ""
32+msgstr "Quit"
34
33
35#: plugins/Unity/Launcher/launcheritem.cpp:106
34#: plugins/Unity/Launcher/launcheritem.cpp:106
36msgid "Unpin shortcut"
35msgid "Unpin shortcut"
@@ -460,7 +459,7 @@ msgstr "Reply"
460
459
461#: qml/Panel/Indicators/MessageMenuItemFactory.qml:204
460#: qml/Panel/Indicators/MessageMenuItemFactory.qml:204
462msgid "Call back"
461msgid "Call back"
463−msgstr ""
462+msgstr "Call back"
464
463
465#: qml/Panel/Indicators/ModemInfoItem.qml:105
464#: qml/Panel/Indicators/ModemInfoItem.qml:105
466msgid "Unlock SIM"
465msgid "Unlock SIM"
@@ -808,6 +807,3 @@ msgstr "%1 〉"
808
807
809#~ msgid "Please re-enter"
808#~ msgid "Please re-enter"
810#~ msgstr "Please re-enter"
809#~ msgstr "Please re-enter"
811−
812−#~ msgid "Click here to finish."
813−#~ msgstr "Click here to finish."
po/eo.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/es.po+5−9
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11"PO-Revision-Date: 2015-07-04 06:08+0000\n"
11"PO-Revision-Date: 2015-07-04 06:08+0000\n"
12"Last-Translator: Paco Molinero <paco@byasl.com>\n"
12"Last-Translator: Paco Molinero <paco@byasl.com>\n"
13"Language-Team: Spanish <es@li.org>\n"
13"Language-Team: Spanish <es@li.org>\n"
14−"Language: es\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -774,8 +773,8 @@ msgstr "%1 〉"
774#~ "You have now mastered the edge gestures and can start using the "
773#~ "You have now mastered the edge gestures and can start using the "
775#~ "phone<br><br>Tap on the screen to start"
774#~ "phone<br><br>Tap on the screen to start"
776#~ msgstr ""
775#~ msgstr ""
777−#~ "Ahora domina los gestos de los bordes y puede usar el "
776+#~ "Ahora domina los gestos de los bordes y puede usar el teléfono<br><br>Toque "
778−#~ "teléfono<br><br>Toque la pantalla para comenzar"
777+#~ "la pantalla para comenzar"
779
778
780#~ msgid "Power off"
779#~ msgid "Power off"
781#~ msgstr "Apagar"
780#~ msgstr "Apagar"
@@ -815,6 +814,3 @@ msgstr "%1 〉"
815
814
816#~ msgid "Manage Scopes"
815#~ msgid "Manage Scopes"
817#~ msgstr "Administrar Scopes"
816#~ msgstr "Administrar Scopes"
818−
819−#~ msgid "Click here to finish."
820−#~ msgstr "Pulse aquí para finalizar."
po/eu.po+5−9
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\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"
14−"Language: eu\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -803,8 +802,8 @@ msgstr "%1 〉"
803
802
804#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
803#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
805#~ msgstr ""
804#~ msgstr ""
806−#~ "Pasatu hatza ezkerretik abiarazlea erakutsi eta aplikazioak berehala "
805+#~ "Pasatu hatza ezkerretik abiarazlea erakutsi eta aplikazioak berehala eskura "
807−#~ "eskura izateko"
806+#~ "izateko"
808
807
809#~ msgid "Confirm"
808#~ msgid "Confirm"
810#~ msgstr "Berretsi"
809#~ msgstr "Berretsi"
@@ -814,6 +813,3 @@ msgstr "%1 〉"
814
813
815#~ msgid "Please re-enter"
814#~ msgid "Please re-enter"
816#~ msgstr "Errepikatu"
815#~ msgstr "Errepikatu"
817−
818−#~ msgid "Click here to finish."
819−#~ msgstr "Egin klik hemen amaitzeko."
po/fa.po+13−13
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11"PO-Revision-Date: 2015-07-11 15:43+0000\n"
11"PO-Revision-Date: 2015-07-11 15:43+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−"Language: fa\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -122,7 +121,8 @@ msgstr "دستگاه قفل شد"
122
121
123#: qml/Components/DelayedLockscreen.qml:64
122#: qml/Components/DelayedLockscreen.qml:64
124msgid "You have been locked out due to too many failed passphrase attempts."
123msgid "You have been locked out due to too many failed passphrase attempts."
124+msgstr ""
125−msgstr "شما به دلیل تلاش‌های بسیار زیاد شکست خورده برای عبارت‌عبور قفل شده‌اید."
125+"شما به دلیل تلاش‌های بسیار زیاد شکست خورده برای عبارت‌عبور قفل شده‌اید."
126
126
127#: qml/Components/DelayedLockscreen.qml:65
127#: qml/Components/DelayedLockscreen.qml:65
128msgid "You have been locked out due to too many failed passcode attempts."
128msgid "You have been locked out due to too many failed passcode attempts."
@@ -574,7 +574,8 @@ msgstr "سیم‌کارتی افزوده و دستگاهتان را شروع م
574
574
575#: qml/Wizard/Pages/20-sim.qml:59
575#: qml/Wizard/Pages/20-sim.qml:59
576msgid "Without it, you won’t be able to make calls or use text messaging."
576msgid "Without it, you won’t be able to make calls or use text messaging."
577+msgstr ""
577−msgstr "بدون آن، نخواهید توانست تماس گرفته با از پیام‌رسانی متنی استفاده کنید."
578+"بدون آن، نخواهید توانست تماس گرفته با از پیام‌رسانی متنی استفاده کنید."
578
579
579#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
580#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
580msgid "Skip"
581msgid "Skip"
@@ -644,7 +645,8 @@ msgstr "فقط با استفاده از جی‌پی‌اس (دقّت کم‌تر
644
645
645#: qml/Wizard/Pages/50-location.qml:86
646#: qml/Wizard/Pages/50-location.qml:86
646msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
647msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
648+msgstr ""
647−msgstr "با استفاده از جی‌پی‌اس، بی‌سیم ناشناس و اطّلاعات شبکه‌ی سلّولی (پیشنهاد شده)"
649+"با استفاده از جی‌پی‌اس، بی‌سیم ناشناس و اطّلاعات شبکه‌ی سلّولی (پیشنهاد شده)"
648
650
649#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
651#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
650#: qml/Wizard/Pages/50-location.qml:103
652#: qml/Wizard/Pages/50-location.qml:103
@@ -680,7 +682,8 @@ msgid ""
680"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
682"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
681"Privacy</b>"
683"Privacy</b>"
682msgstr ""
684msgstr ""
683−"این می‌تواند در <b>تنظیمات سامانه</b> ذیل <b>امنیت و محرمانگی</b> غیرفعَال شود"
685+"این می‌تواند در <b>تنظیمات سامانه</b> ذیل <b>امنیت و محرمانگی</b> غیرفعَال "
686+"شود"
684
687
685#: qml/Wizard/Pages/80-finished.qml:24
688#: qml/Wizard/Pages/80-finished.qml:24
686msgid "All done"
689msgid "All done"
@@ -747,8 +750,8 @@ msgstr "%1 〉"
747#~ "You have now mastered the edge gestures and can start using the "
750#~ "You have now mastered the edge gestures and can start using the "
748#~ "phone<br><br>Tap on the screen to start"
751#~ "phone<br><br>Tap on the screen to start"
749#~ msgstr ""
752#~ msgstr ""
750−#~ "هم اکنون در استفاده از ژست های حرکتی مهارت لازم را دارید و می‌توانید "
753+#~ "هم اکنون در استفاده از ژست های حرکتی مهارت لازم را دارید و می‌توانید استفاده "
751−#~ "استفاده از تلفن را آغاز کنید<br><br>برای شروع صفحه را لمس کنید"
754+#~ "از تلفن را آغاز کنید<br><br>برای شروع صفحه را لمس کنید"
752
755
753#~ msgid "Confirm"
756#~ msgid "Confirm"
754#~ msgstr "تأیید"
757#~ msgstr "تأیید"
@@ -803,6 +806,3 @@ msgstr "%1 〉"
803
806
804#~ msgid "Manage Scopes"
807#~ msgid "Manage Scopes"
805#~ msgstr "مدیریت حوزه‌ها"
808#~ msgstr "مدیریت حوزه‌ها"
806−
807−#~ msgid "Click here to finish."
808−#~ msgstr "برای پایان اینجا کلیک کنید."
po/fi.po+5−8
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\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"
14−"Language: fi\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -127,7 +126,8 @@ msgstr ""
127
126
128#: qml/Components/DelayedLockscreen.qml:65
127#: qml/Components/DelayedLockscreen.qml:65
129msgid "You have been locked out due to too many failed passcode attempts."
128msgid "You have been locked out due to too many failed passcode attempts."
129+msgstr ""
130−msgstr "Laite on lukittu liian monen virheellisen suojakoodiyrityksen jälkeen."
130+"Laite on lukittu liian monen virheellisen suojakoodiyrityksen jälkeen."
131
131
132#: qml/Components/DelayedLockscreen.qml:74
132#: qml/Components/DelayedLockscreen.qml:74
133#, qt-format
133#, qt-format
@@ -810,6 +810,3 @@ msgstr "%1 〉"
810
810
811#~ msgid "Please re-enter"
811#~ msgid "Please re-enter"
812#~ msgstr "Anna uudelleen"
812#~ msgstr "Anna uudelleen"
813−
814−#~ msgid "Click here to finish."
815−#~ msgstr "Viimeistele napsauttamalla tästä."
po/fo.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/fr.po+5−9
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11"PO-Revision-Date: 2015-07-27 11:47+0000\n"
11"PO-Revision-Date: 2015-07-27 11:47+0000\n"
12"Last-Translator: Anne <anneonyme017@gmail.com>\n"
12"Last-Translator: Anne <anneonyme017@gmail.com>\n"
13"Language-Team: French <fr@li.org>\n"
13"Language-Team: French <fr@li.org>\n"
14−"Language: fr\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -786,8 +785,8 @@ msgstr "%1 〉"
786
785
787#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
786#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
788#~ msgstr ""
787#~ msgstr ""
789−#~ "Faites glisser votre doigt à partir du bord gauche pour afficher le "
788+#~ "Faites glisser votre doigt à partir du bord gauche pour afficher le lanceur "
790−#~ "lanceur d'applications."
789+#~ "d'applications."
791
790
792#~ msgid "Power off"
791#~ msgid "Power off"
793#~ msgstr "Éteindre"
792#~ msgstr "Éteindre"
@@ -827,6 +826,3 @@ msgstr "%1 〉"
827
826
828#~ msgid "Please re-enter"
827#~ msgid "Please re-enter"
829#~ msgstr "Veuillez ressaisir"
828#~ msgstr "Veuillez ressaisir"
830−
831−#~ msgid "Click here to finish."
832−#~ msgstr "Cliquez ici pour terminer."
po/ga.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;\n"
17"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/gd.po+8−12
@@ -6,19 +6,19 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11"PO-Revision-Date: 2015-07-16 10:56+0000\n"
11"PO-Revision-Date: 2015-07-16 10:56+0000\n"
12"Last-Translator: GunChleoc <Unknown>\n"
12"Last-Translator: GunChleoc <Unknown>\n"
13"Language-Team: Fòram na Gàidhlig\n"
13"Language-Team: Fòram na Gàidhlig\n"
14−"Language: gd\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"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 : "
19"(n > 2 && n < 20) ? 2 : 3;\n"
18"(n > 2 && n < 20) ? 2 : 3;\n"
20−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
21−"X-Generator: Launchpad (build 17737)\n"
20+"X-Generator: Launchpad (build 17746)\n"
21+"Language: gd\n"
22
22
23#: plugins/LightDM/Greeter.cpp:112
23#: plugins/LightDM/Greeter.cpp:112
24msgid "Password: "
24msgid "Password: "
@@ -740,8 +740,8 @@ msgstr "%1 〉"
740
740
741#~ msgid "Try swiping from the right edge to unlock the phone"
741#~ msgid "Try swiping from the right edge to unlock the phone"
742#~ msgstr ""
742#~ msgstr ""
743−#~ "Feuch is dèan grad-shlaighdeadh a-steach on oir dheas gus a' ghlas a "
743+#~ "Feuch is dèan grad-shlaighdeadh a-steach on oir dheas gus a' ghlas a thoirt "
744−#~ "thoirt far an fhòn"
744+#~ "far an fhòn"
745
745
746#~ msgid "Right edge"
746#~ msgid "Right edge"
747#~ msgstr "An oir dheas"
747#~ msgstr "An oir dheas"
@@ -793,9 +793,8 @@ msgstr "%1 〉"
793#~ "You have now mastered the edge gestures and can start using the "
793#~ "You have now mastered the edge gestures and can start using the "
794#~ "phone<br><br>Tap on the screen to start"
794#~ "phone<br><br>Tap on the screen to start"
795#~ msgstr ""
795#~ msgstr ""
796−#~ "Fhuair thu air na gluasadan oire ceart a dhèanamh a-nis agus is urrainn "
796+#~ "Fhuair thu air na gluasadan oire ceart a dhèanamh a-nis agus is urrainn dhut "
797−#~ "dhut am fòn a chleachdadh<br><br>Thoir gnogag air an sgrìn airson "
797+#~ "am fòn a chleachdadh<br><br>Thoir gnogag air an sgrìn airson tòiseachadh"
798−#~ "tòiseachadh"
799
798
800#~ msgid "All"
799#~ msgid "All"
801#~ msgstr "Na h-uile"
800#~ msgstr "Na h-uile"
@@ -833,8 +832,5 @@ msgstr "%1 〉"
833#~ msgid "Manage Scopes"
832#~ msgid "Manage Scopes"
834#~ msgstr "Stiùirich na sgòpaichean"
833#~ msgstr "Stiùirich na sgòpaichean"
835
834
836−#~ msgid "Click here to finish."
837−#~ msgstr "Briog an-seo gus crìoch a chur air."
838−
839#~ msgid "Please re-enter"
835#~ msgid "Please re-enter"
840#~ msgstr "Cuir a-steach i a-rithist"
836#~ msgstr "Cuir a-steach i a-rithist"
po/gl.po+5−8
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11"PO-Revision-Date: 2015-08-01 03:25+0000\n"
11"PO-Revision-Date: 2015-08-01 03:25+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"
14−"Language: gl\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -576,7 +575,8 @@ msgstr "Engada unha tarxeta SIM e reinicie o dispositivo"
576
575
577#: qml/Wizard/Pages/20-sim.qml:59
576#: qml/Wizard/Pages/20-sim.qml:59
578msgid "Without it, you won’t be able to make calls or use text messaging."
577msgid "Without it, you won’t be able to make calls or use text messaging."
578+msgstr ""
579−msgstr "Sen ela, non poderá realizar chamadas nin usar a mensaxería de texto."
579+"Sen ela, non poderá realizar chamadas nin usar a mensaxería de texto."
580
580
581#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
581#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
582msgid "Skip"
582msgid "Skip"
@@ -808,6 +808,3 @@ msgstr "%1 〉"
808
808
809#~ msgid "Please re-enter"
809#~ msgid "Please re-enter"
810#~ msgstr "Introducir de novo"
810#~ msgstr "Introducir de novo"
811−
812−#~ msgid "Click here to finish."
813−#~ msgstr "Prema aquí para rematar."
po/gv.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : (n == 2 ? 1 : 2);\n"
17"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : (n == 2 ? 1 : 2);\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/he.po+5−9
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\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"
14−"Language: he\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -755,8 +754,8 @@ msgstr ""
755#~ "You have now mastered the edge gestures and can start using the "
754#~ "You have now mastered the edge gestures and can start using the "
756#~ "phone<br><br>Tap on the screen to start"
755#~ "phone<br><br>Tap on the screen to start"
757#~ msgstr ""
756#~ msgstr ""
758−#~ "ברגעים אלו סיימת את התמחותך בשימוש במחוות קצה והטלפון פתוח "
757+#~ "ברגעים אלו סיימת את התמחותך בשימוש במחוות קצה והטלפון פתוח לשימושך<br><br>נא "
759−#~ "לשימושך<br><br>נא לגעת במסך כדי להתחיל"
758+#~ "לגעת במסך כדי להתחיל"
760
759
761#~ msgid "Power off"
760#~ msgid "Power off"
762#~ msgstr "כיבוי"
761#~ msgstr "כיבוי"
@@ -772,6 +771,3 @@ msgstr ""
772
771
773#~ msgid "Favorites"
772#~ msgid "Favorites"
774#~ msgstr "מועדפים"
773#~ msgstr "מועדפים"
775−
776−#~ msgid "Click here to finish."
777−#~ msgstr "יש ללחוץ כאן כדי לסיים."
po/hi.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/hr.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
20+"X-Generator: Launchpad (build 17746)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
po/hu.po+14−18
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11−"PO-Revision-Date: 2015-08-26 07:51+0000\n"
11+"PO-Revision-Date: 2015-09-21 12:40+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"
14−"Language: hu\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-22 06:01+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17749)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -74,7 +73,7 @@ msgstr "%a %p. %I.%M"
74#. en_GB example: "%a %b %d\u2003%l:%M %p" --> "Fri 31 Oct 1:00 PM"
73#. en_GB example: "%a %b %d\u2003%l:%M %p" --> "Fri 31 Oct 1:00 PM"
75#: plugins/Utils/relativetimeformatter.cpp:190
74#: plugins/Utils/relativetimeformatter.cpp:190
76msgid "%a %d %b %l:%M %p"
75msgid "%a %d %b %l:%M %p"
77−msgstr "%d. %b. %a, %p. %I.%M"
76+msgstr "%b. %d., %a %p. %I.%M"
78
77
79#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
78#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
80#. This format string is used for showing, on a 24-hour clock, times that happen yesterday.
79#. This format string is used for showing, on a 24-hour clock, times that happen yesterday.
@@ -114,11 +113,11 @@ msgstr "%a %H.%M"
114#. en_GB example: "%a %b %d\u2003%H:%M" --> "Fri 31 Oct 13:00"
113#. en_GB example: "%a %b %d\u2003%H:%M" --> "Fri 31 Oct 13:00"
115#: plugins/Utils/relativetimeformatter.cpp:234
114#: plugins/Utils/relativetimeformatter.cpp:234
116msgid "%a %d %b %H:%M"
115msgid "%a %d %b %H:%M"
117−msgstr "%d. %b., %a %H.%M"
116+msgstr "%b. %d., %a %H.%M"
118
117
119#: qml/Components/DelayedLockscreen.qml:49
118#: qml/Components/DelayedLockscreen.qml:49
120msgid "Device Locked"
119msgid "Device Locked"
121−msgstr "Eszköz lezárva"
120+msgstr "Az eszköz zárolva"
122
121
123#: qml/Components/DelayedLockscreen.qml:64
122#: qml/Components/DelayedLockscreen.qml:64
124msgid "You have been locked out due to too many failed passphrase attempts."
123msgid "You have been locked out due to too many failed passphrase attempts."
@@ -554,7 +553,7 @@ msgstr "Folytatás"
554
553
555#: qml/Wizard/Pages/passwd-set.qml:61
554#: qml/Wizard/Pages/passwd-set.qml:61
556msgid "Choose your passcode"
555msgid "Choose your passcode"
557−msgstr "Jelkód kiválasztása"
556+msgstr "Jelkód megadása"
558
557
559#: qml/Wizard/Pages/passwd-set.qml:68
558#: qml/Wizard/Pages/passwd-set.qml:68
560msgid "Passphrase must be 4 characters long"
559msgid "Passphrase must be 4 characters long"
@@ -562,11 +561,11 @@ msgstr "A jelmondat legalább 4 karakter hosszú legyen"
562
561
563#: qml/Wizard/Pages/10-welcome.qml:27
562#: qml/Wizard/Pages/10-welcome.qml:27
564msgid "Hi!"
563msgid "Hi!"
565−msgstr "Üdv!"
564+msgstr "Üdvözöljük!"
566
565
567#: qml/Wizard/Pages/10-welcome.qml:44
566#: qml/Wizard/Pages/10-welcome.qml:44
568msgid "Welcome to your Ubuntu phone."
567msgid "Welcome to your Ubuntu phone."
569−msgstr "Üdvözöljük az Ubuntu telefonos változatában."
568+msgstr "Köszöntjük az Ubuntu telefonos változatában."
570
569
571#: qml/Wizard/Pages/10-welcome.qml:52
570#: qml/Wizard/Pages/10-welcome.qml:52
572msgid "Let’s get started."
571msgid "Let’s get started."
@@ -574,12 +573,12 @@ msgstr "Kezdjünk is bele."
574
573
575#: qml/Wizard/Pages/20-sim.qml:25
574#: qml/Wizard/Pages/20-sim.qml:25
576msgid "Add a SIM card and restart your device"
575msgid "Add a SIM card and restart your device"
577−msgstr "Helyezzen be egy SIM kártyát és indítsa újra az eszközét"
576+msgstr "Helyezzen be egy SIM kártyát és indítsa újra az eszközt"
578
577
579#: qml/Wizard/Pages/20-sim.qml:59
578#: qml/Wizard/Pages/20-sim.qml:59
580msgid "Without it, you won’t be able to make calls or use text messaging."
579msgid "Without it, you won’t be able to make calls or use text messaging."
581msgstr ""
580msgstr ""
582−"Anélkül nem indíthat vagy fogadhat hívásokat és nem küldhet vagy fogadhat "
581+"Anélkül nem indíthat vagy fogadhat hívásokat, és nem küldhet vagy fogadhat "
583"üzeneteket."
582"üzeneteket."
584
583
585#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
584#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
@@ -768,8 +767,8 @@ msgstr "%1 〉"
768#~ "You have now mastered the edge gestures and can start using the "
767#~ "You have now mastered the edge gestures and can start using the "
769#~ "phone<br><br>Tap on the screen to start"
768#~ "phone<br><br>Tap on the screen to start"
770#~ msgstr ""
769#~ msgstr ""
771−#~ "Elsajátította a gesztusokat, és megkezdheti a telefon használatát."
770+#~ "Elsajátította a gesztusokat, és megkezdheti a telefon "
772−#~ "<br><br>Koppintson a képernyőre a kezdéshez."
771+#~ "használatát.<br><br>Koppintson a képernyőre a kezdéshez."
773
772
774#~ msgid "Try swiping from the top edge to access the indicators"
773#~ msgid "Try swiping from the top edge to access the indicators"
775#~ msgstr "Az állapotmenük eléréséhez csúsztassa ujját a felső szélről"
774#~ msgstr "Az állapotmenük eléréséhez csúsztassa ujját a felső szélről"
@@ -812,6 +811,3 @@ msgstr "%1 〉"
812
811
813#~ msgid "Please re-enter"
812#~ msgid "Please re-enter"
814#~ msgstr "Próbálja újra"
813#~ msgstr "Próbálja újra"
815−
816−#~ msgid "Click here to finish."
817−#~ msgstr "Kattintson ide a befejezéshez."
po/hy.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/ia.po+5−9
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\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"
14−"Language: ia\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -671,8 +670,8 @@ msgstr "No, del toto"
671#: qml/Wizard/Pages/50-location.qml:124
670#: qml/Wizard/Pages/50-location.qml:124
672msgid "You can change your mind later in <b>System Settings</b>."
671msgid "You can change your mind later in <b>System Settings</b>."
673msgstr ""
672msgstr ""
674−"Tu pote cambiar tu desiderata plus tarde in <b>Configurationes del systema</"
673+"Tu pote cambiar tu desiderata plus tarde in <b>Configurationes del "
675−"b>."
674+"systema</b>."
676
675
677#: qml/Wizard/Pages/60-reporting.qml:24
676#: qml/Wizard/Pages/60-reporting.qml:24
678msgid "Improving your experience"
677msgid "Improving your experience"
@@ -805,6 +804,3 @@ msgstr "%1 〉"
805#~ msgstr ""
804#~ msgstr ""
806#~ "Tu es ora maestrate le gestos del bordo e pote initiar usar le "
805#~ "Tu es ora maestrate le gestos del bordo e pote initiar usar le "
807#~ "telephono<br><br>colpar sur le schermo pro initiar"
806#~ "telephono<br><br>colpar sur le schermo pro initiar"
808−
809−#~ msgid "Click here to finish."
810−#~ msgstr "Clicca ci pro finir"
po/id.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/is.po+2−2
@@ -17,8 +17,8 @@ msgstr ""
17"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Type: text/plain; charset=UTF-8\n"
18"Content-Transfer-Encoding: 8bit\n"
18"Content-Transfer-Encoding: 8bit\n"
19"Plural-Forms: nplurals=2; plural=n != 1;\n"
19"Plural-Forms: nplurals=2; plural=n != 1;\n"
20−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
20+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
21−"X-Generator: Launchpad (build 17737)\n"
21+"X-Generator: Launchpad (build 17746)\n"
22"Language: is\n"
22"Language: is\n"
23
23
24#: plugins/LightDM/Greeter.cpp:112
24#: plugins/LightDM/Greeter.cpp:112
po/it.po+6−10
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11−"PO-Revision-Date: 2015-07-04 11:34+0000\n"
11+"PO-Revision-Date: 2015-09-18 08:24+0000\n"
12"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>\n"
12"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>\n"
13"Language-Team: Italian <it@li.org>\n"
13"Language-Team: Italian <it@li.org>\n"
14−"Language: it\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -30,7 +29,7 @@ msgstr "Blocca scorciatoia"
30
29
31#: plugins/Unity/Launcher/launcheritem.cpp:52
30#: plugins/Unity/Launcher/launcheritem.cpp:52
32msgid "Quit"
31msgid "Quit"
33−msgstr ""
32+msgstr "Esci"
34
33
35#: plugins/Unity/Launcher/launcheritem.cpp:106
34#: plugins/Unity/Launcher/launcheritem.cpp:106
36msgid "Unpin shortcut"
35msgid "Unpin shortcut"
@@ -464,7 +463,7 @@ msgstr "Rispondi"
464
463
465#: qml/Panel/Indicators/MessageMenuItemFactory.qml:204
464#: qml/Panel/Indicators/MessageMenuItemFactory.qml:204
466msgid "Call back"
465msgid "Call back"
467−msgstr ""
466+msgstr "Richiama"
468
467
469#: qml/Panel/Indicators/ModemInfoItem.qml:105
468#: qml/Panel/Indicators/ModemInfoItem.qml:105
470msgid "Unlock SIM"
469msgid "Unlock SIM"
@@ -817,9 +816,6 @@ msgstr "%1 〉"
817#~ msgid "Please re-enter"
816#~ msgid "Please re-enter"
818#~ msgstr "Inserire nuovamente"
817#~ msgstr "Inserire nuovamente"
819
818
820−#~ msgid "Click here to finish."
821−#~ msgstr "Fare clic qui per terminare."
822−
823#~ msgid "Swipe up again to close the settings screen"
819#~ msgid "Swipe up again to close the settings screen"
824#~ msgstr ""
820#~ msgstr ""
825#~ "Far scorrere nuovamente verso l'alto per chiudere la schermata delle "
821#~ "Far scorrere nuovamente verso l'alto per chiudere la schermata delle "
po/ja.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/km.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/kn.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/ko.po+9−23
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\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"
14−"Language: ko\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -336,17 +335,13 @@ msgstr "마지막 시도입니다."
336msgid ""
335msgid ""
337"If passphrase is entered incorrectly, your phone will conduct a factory "
336"If passphrase is entered incorrectly, your phone will conduct a factory "
338"reset and all personal data will be deleted."
337"reset and all personal data will be deleted."
339−msgstr ""
340−"이번에도 올바르지 않은 암호문을 입력하면 휴대 전화를 공장 초기화하여 모든 개"
338+msgstr "이번에도 올바르지 않은 암호문을 입력하면 휴대 전화를 공장 초기화하여 모든 개인 정보를 삭제합니다."
341−"인 정보를 삭제합니다."
342
339
343#: qml/Greeter/NarrowView.qml:59
340#: qml/Greeter/NarrowView.qml:59
344msgid ""
341msgid ""
345"If passcode is entered incorrectly, your phone will conduct a factory reset "
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
346"and all personal data will be deleted."
343"and all personal data will be deleted."
347−msgstr ""
348−"이번에도 올바르지 않은 패스코드를 입력하면 휴대 전화를 공장 초기화하여 모든 "
344+msgstr "이번에도 올바르지 않은 패스코드를 입력하면 휴대 전화를 공장 초기화하여 모든 개인 정보를 삭제합니다."
349−"개인 정보를 삭제합니다."
350
345
351#: qml/Greeter/NarrowView.qml:116
346#: qml/Greeter/NarrowView.qml:116
352#, qt-format
347#, qt-format
@@ -649,8 +644,7 @@ msgstr "GPS와 익명 와이파이 통신사 네트워크를 사용(추천)"
649msgid ""
644msgid ""
650"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
645"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
651"conditions</a>."
646"conditions</a>."
652−msgstr ""
653−"이 옵션을 선택하면 자동으로 <a href='%1'>노키아 HERE 사용 조건에 동의합니다."
647+msgstr "이 옵션을 선택하면 자동으로 <a href='%1'>노키아 HERE 사용 조건에 동의합니다."
654
648
655#: qml/Wizard/Pages/50-location.qml:112
649#: qml/Wizard/Pages/50-location.qml:112
656msgid "Not at all"
650msgid "Not at all"
@@ -668,17 +662,13 @@ msgstr "사용자 경험 개선"
668msgid ""
662msgid ""
669"Your phone is set up to automatically report errors to Canonical and its "
663"Your phone is set up to automatically report errors to Canonical and its "
670"partners, the makers of the operating system."
664"partners, the makers of the operating system."
671−msgstr ""
672−"사용자의 전화를 자동으로 오류 보고를 운영 체제를 만든 캐노니컬 사와 협력사로 "
665+msgstr "사용자의 전화를 자동으로 오류 보고를 운영 체제를 만든 캐노니컬 사와 협력사로 보내도록 설정했습니다."
673−"보내도록 설정했습니다."
674
666
675#: qml/Wizard/Pages/60-reporting.qml:43
667#: qml/Wizard/Pages/60-reporting.qml:43
676msgid ""
668msgid ""
677"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
669"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
678"Privacy</b>"
670"Privacy</b>"
679−msgstr ""
680−"이 서비스는 <b>보안 &amp; 사생활 보호</b>에서 언제든 사용하지 않도록 설정할 "
671+msgstr "이 서비스는 <b>보안 &amp; 사생활 보호</b>에서 언제든 사용하지 않도록 설정할 수 있습니다."
681−"수 있습니다."
682
672
683#: qml/Wizard/Pages/80-finished.qml:24
673#: qml/Wizard/Pages/80-finished.qml:24
684msgid "All done"
674msgid "All done"
@@ -775,8 +765,7 @@ msgstr "%1 〉"
775#~ "You have now mastered the edge gestures and can start using the "
765#~ "You have now mastered the edge gestures and can start using the "
776#~ "phone<br><br>Tap on the screen to start"
766#~ "phone<br><br>Tap on the screen to start"
777#~ msgstr ""
767#~ msgstr ""
778−#~ "여러분은 가장자리에서 끌어오기 제스쳐를 완벽히 익히셨고 휴대 전화를 사용"
768+#~ "여러분은 가장자리에서 끌어오기 제스쳐를 완벽히 익히셨고 휴대 전화를 사용할 수 있습니다. <br><br> 스크린을 터치해서 시작하세요."
779−#~ "할 수 있습니다. <br><br> 스크린을 터치해서 시작하세요."
780
769
781#~ msgid "Loading. Please Wait..."
770#~ msgid "Loading. Please Wait..."
782#~ msgstr "불러오는 중 입니다. 짐시 기다려주십시오..."
771#~ msgstr "불러오는 중 입니다. 짐시 기다려주십시오..."
@@ -801,6 +790,3 @@ msgstr "%1 〉"
801
790
802#~ msgid "Please re-enter"
791#~ msgid "Please re-enter"
803#~ msgstr "다시 입력해주십시오."
792#~ msgstr "다시 입력해주십시오."
804−
805−#~ msgid "Click here to finish."
806−#~ msgstr "끝내려면 눌러주십시오."
po/ku.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/ky.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/lo.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/lt.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"(n%100<10 || n%100>=20) ? 1 : 2;\n"
18"(n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
20+"X-Generator: Launchpad (build 17746)\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
po/lv.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/ml.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/mr.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/ms.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/my.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/nb.po+3−7
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11"PO-Revision-Date: 2015-07-05 19:44+0000\n"
11"PO-Revision-Date: 2015-07-05 19:44+0000\n"
12"Last-Translator: Mathias Bynke <Unknown>\n"
12"Last-Translator: Mathias Bynke <Unknown>\n"
13"Language-Team: Norwegian Bokmal <nb@li.org>\n"
13"Language-Team: Norwegian Bokmal <nb@li.org>\n"
14−"Language: nb\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -810,6 +809,3 @@ msgstr "%1 〉"
810
809
811#~ msgid "Please re-enter"
810#~ msgid "Please re-enter"
812#~ msgstr "Skriv inn på nytt"
811#~ msgstr "Skriv inn på nytt"
813−
814−#~ msgid "Click here to finish."
815−#~ msgstr "Trykk her for å fullføre."
po/nl.po+6−11
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\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"
14−"Language: nl\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -759,8 +758,7 @@ msgstr "%1 〉"
759#~ msgstr "Linkerrand"
758#~ msgstr "Linkerrand"
760
759
761#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
760#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
762−#~ msgstr ""
763−#~ "Veeg vanaf links om de Starter te tonen voor snelle toegang tot apps"
761+#~ msgstr "Veeg vanaf links om de Starter te tonen voor snelle toegang tot apps"
764
762
765#~ msgid "Right edge"
763#~ msgid "Right edge"
766#~ msgstr "Rechterrand"
764#~ msgstr "Rechterrand"
@@ -769,8 +767,8 @@ msgstr "%1 〉"
769#~ "You have now mastered the edge gestures and can start using the "
767#~ "You have now mastered the edge gestures and can start using the "
770#~ "phone<br><br>Tap on the screen to start"
768#~ "phone<br><br>Tap on the screen to start"
771#~ msgstr ""
769#~ msgstr ""
772−#~ "Nu u de bewegingen vanuit de randen onder de knie heeft, kunt u beginnen "
770+#~ "Nu u de bewegingen vanuit de randen onder de knie heeft, kunt u beginnen met "
773−#~ "met het gebruiken van de telefoon<br><br>Tik op het scherm om te beginnen"
771+#~ "het gebruiken van de telefoon<br><br>Tik op het scherm om te beginnen"
774
772
775#~ msgid "Try swiping from the top edge to access the indicators"
773#~ msgid "Try swiping from the top edge to access the indicators"
776#~ msgstr "Veeg vanuit de bovenrand om de indicatoren te bekijken"
774#~ msgstr "Veeg vanuit de bovenrand om de indicatoren te bekijken"
@@ -816,6 +814,3 @@ msgstr "%1 〉"
816
814
817#~ msgid "Please re-enter"
815#~ msgid "Please re-enter"
818#~ msgstr "Herhaal deze a.u.b."
816#~ msgstr "Herhaal deze a.u.b."
819−
820−#~ msgid "Click here to finish."
821−#~ msgstr "Klik hier om te stoppen."
po/nn.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/oc.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/or.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n!=1;\n"
17"Plural-Forms: nplurals=2; plural=n!=1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/pa.po+15−16
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\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"
14−"Language: pa\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -340,16 +339,16 @@ msgid ""
340"If passphrase is entered incorrectly, your phone will conduct a factory "
339"If passphrase is entered incorrectly, your phone will conduct a factory "
341"reset and all personal data will be deleted."
340"reset and all personal data will be deleted."
342msgstr ""
341msgstr ""
343−"ਜੇਕਰ ਗਲਤ ਵਾਕ ਦਰਜ ਹੋਇਆ, ਤੁਹਾਡਾ ਫ਼ੋਨ ਇੱਕ ਫ਼ੋਨ ਇੱਕ ਫ਼ੈਕਟਰੀ ਰੀਸੈੱਟ ਚਾਲੂ ਕਰੇਗਾ ਅਤੇ ਸਾਰਾ ਨਿੱਜੀ ਡਾਟਾ "
342+"ਜੇਕਰ ਗਲਤ ਵਾਕ ਦਰਜ ਹੋਇਆ, ਤੁਹਾਡਾ ਫ਼ੋਨ ਇੱਕ ਫ਼ੋਨ ਇੱਕ ਫ਼ੈਕਟਰੀ ਰੀਸੈੱਟ ਚਾਲੂ ਕਰੇਗਾ ਅਤੇ "
344−"ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।"
343+"ਸਾਰਾ ਨਿੱਜੀ ਡਾਟਾ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।"
345
344
346#: qml/Greeter/NarrowView.qml:59
345#: qml/Greeter/NarrowView.qml:59
347msgid ""
346msgid ""
348"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
349"and all personal data will be deleted."
348"and all personal data will be deleted."
350msgstr ""
349msgstr ""
351−"ਜੇਕਰ ਗਲਤ ਪਾਸਕੋਡ ਦਰਜ ਹੋਇਆ, ਤੁਹਾਡਾ ਫ਼ੋਨ ਇੱਕ ਫ਼ੋਨ ਇੱਕ ਫ਼ੈਕਟਰੀ ਰੀਸੈੱਟ ਚਾਲੂ ਕਰੇਗਾ ਅਤੇ ਸਾਰਾ ਨਿੱਜੀ "
350+"ਜੇਕਰ ਗਲਤ ਪਾਸਕੋਡ ਦਰਜ ਹੋਇਆ, ਤੁਹਾਡਾ ਫ਼ੋਨ ਇੱਕ ਫ਼ੋਨ ਇੱਕ ਫ਼ੈਕਟਰੀ ਰੀਸੈੱਟ ਚਾਲੂ ਕਰੇਗਾ "
352−"ਡਾਟਾ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।"
351+"ਅਤੇ ਸਾਰਾ ਨਿੱਜੀ ਡਾਟਾ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।"
353
352
354#: qml/Greeter/NarrowView.qml:116
353#: qml/Greeter/NarrowView.qml:116
355#, qt-format
354#, qt-format
@@ -590,7 +589,8 @@ msgstr "ਲਾਕ ਸੁਰੱਖਿਆ"
590
589
591#: qml/Wizard/Pages/30-passwd-type.qml:74
590#: qml/Wizard/Pages/30-passwd-type.qml:74
592msgid "Please select how you’d like to unlock your phone."
591msgid "Please select how you’d like to unlock your phone."
592+msgstr ""
593−msgstr "ਕਿਰਪਾ ਕਰਕੇ ਚੁਣੋ ਤੁਸੀਂ ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਕਿਸ ਤਰ੍ਹਾਂ ਅਣ-ਲਾਕ ਕਰਨਾ ਪਸੰਦ ਕਰੋਗੇ।"
593+"ਕਿਰਪਾ ਕਰਕੇ ਚੁਣੋ ਤੁਸੀਂ ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਕਿਸ ਤਰ੍ਹਾਂ ਅਣ-ਲਾਕ ਕਰਨਾ ਪਸੰਦ ਕਰੋਗੇ।"
594
594
595#: qml/Wizard/Pages/30-passwd-type.qml:97
595#: qml/Wizard/Pages/30-passwd-type.qml:97
596msgctxt "Label: Type of security method"
596msgctxt "Label: Type of security method"
@@ -656,7 +656,8 @@ msgid ""
656"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
656"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
657"conditions</a>."
657"conditions</a>."
658msgstr ""
658msgstr ""
659−"ਇਸ ਵਿਕਲਪ ਨੂੰ ਚੁਣਨ ਦੁਆਰਾ, ਤੁਸੀਂ ਨੋਕੀਆ HERE <a href='#'>ਨਿਯਮ ਅਤੇ ਸ਼ਰਤਾਂ</a>ਨੂੰ ਪ੍ਰਵਾਨ ਕਰਦੇ ਹੋ।"
659+"ਇਸ ਵਿਕਲਪ ਨੂੰ ਚੁਣਨ ਦੁਆਰਾ, ਤੁਸੀਂ ਨੋਕੀਆ HERE <a href='#'>ਨਿਯਮ ਅਤੇ ਸ਼ਰਤਾਂ</a>ਨੂੰ "
660+"ਪ੍ਰਵਾਨ ਕਰਦੇ ਹੋ।"
660
661
661#: qml/Wizard/Pages/50-location.qml:112
662#: qml/Wizard/Pages/50-location.qml:112
662msgid "Not at all"
663msgid "Not at all"
@@ -675,15 +676,16 @@ msgid ""
675"Your phone is set up to automatically report errors to Canonical and its "
676"Your phone is set up to automatically report errors to Canonical and its "
676"partners, the makers of the operating system."
677"partners, the makers of the operating system."
677msgstr ""
678msgstr ""
678−"ਤੁਹਾਡੇ ਫ਼ੋਨ ਨੂੰ ਕੈਨੋਨੀਕਲ ਅਤੇ ਉਸਦੇ ਸਾਥੀਆਂ, ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਦੇ ਨਿਰਮਾਤਾਵਾਂ ਨੂੰ ਆਪਣੇ ਆਪ ਖਾਮੀ ਸੂਚਨਾਵਾਂ "
679+"ਤੁਹਾਡੇ ਫ਼ੋਨ ਨੂੰ ਕੈਨੋਨੀਕਲ ਅਤੇ ਉਸਦੇ ਸਾਥੀਆਂ, ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਦੇ ਨਿਰਮਾਤਾਵਾਂ ਨੂੰ "
679−"ਭੇਜਣ ਲਈ ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਹੈ।"
680+"ਆਪਣੇ ਆਪ ਖਾਮੀ ਸੂਚਨਾਵਾਂ ਭੇਜਣ ਲਈ ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਹੈ।"
680
681
681#: qml/Wizard/Pages/60-reporting.qml:43
682#: qml/Wizard/Pages/60-reporting.qml:43
682msgid ""
683msgid ""
683"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
684"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
684"Privacy</b>"
685"Privacy</b>"
685msgstr ""
686msgstr ""
686−"ਇਸ ਨੂੰ <b>ਸਿਸਟਮ ਸੈਟਿੰਗ</b> ਅਧੀਨ <b>ਸੁਰੱਖਿਆ &amp; ਪਰਦੇਦਾਰੀ</b>ਵਿੱਚ ਬੰਦ ਕੀਤਾ ਜਾ ਸਕਦਾ"
687+"ਇਸ ਨੂੰ <b>ਸਿਸਟਮ ਸੈਟਿੰਗ</b> ਅਧੀਨ <b>ਸੁਰੱਖਿਆ &amp; ਪਰਦੇਦਾਰੀ</b>ਵਿੱਚ ਬੰਦ ਕੀਤਾ "
688+"ਜਾ ਸਕਦਾ"
687
689
688#: qml/Wizard/Pages/80-finished.qml:24
690#: qml/Wizard/Pages/80-finished.qml:24
689msgid "All done"
691msgid "All done"
@@ -751,6 +753,3 @@ msgstr "%1 〉"
751
753
752#~ msgid "Please re-enter"
754#~ msgid "Please re-enter"
753#~ msgstr "ਕਿਰਪਾ ਕਰਕੇ ਮੁੜ-ਦਰਜ ਕਰੋ"
755#~ msgstr "ਕਿਰਪਾ ਕਰਕੇ ਮੁੜ-ਦਰਜ ਕਰੋ"
754−
755−#~ msgid "Click here to finish."
756−#~ msgstr "ਸਮਾਪਤੀ ਲਈ ਇੱਥੇ ਕਲਿੱਕ ਕਰੋ।"
po/pl.po+7−11
@@ -6,19 +6,18 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11"PO-Revision-Date: 2015-07-12 09:46+0000\n"
11"PO-Revision-Date: 2015-07-12 09:46+0000\n"
12"Last-Translator: Seweryn Opyd <Unknown>\n"
12"Last-Translator: Seweryn Opyd <Unknown>\n"
13"Language-Team: Polish <pl@li.org>\n"
13"Language-Team: Polish <pl@li.org>\n"
14−"Language: pl\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"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 "
19"|| n%100>=20) ? 1 : 2;\n"
18"|| n%100>=20) ? 1 : 2;\n"
20−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
21−"X-Generator: Launchpad (build 17737)\n"
20+"X-Generator: Launchpad (build 17746)\n"
22
21
23#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
24msgid "Password: "
23msgid "Password: "
@@ -757,8 +756,8 @@ msgstr "%1 〉"
757
756
758#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
757#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
759#~ msgstr ""
758#~ msgstr ""
760−#~ "Przeciągnięcie od lewej krawędzi, uruchamia aktywator szybkiego dostępu "
759+#~ "Przeciągnięcie od lewej krawędzi, uruchamia aktywator szybkiego dostępu do "
761−#~ "do aplikacji"
760+#~ "aplikacji"
762
761
763#~ msgid "Well done"
762#~ msgid "Well done"
764#~ msgstr "Udało się!"
763#~ msgstr "Udało się!"
@@ -773,8 +772,8 @@ msgstr "%1 〉"
773#~ "You have now mastered the edge gestures and can start using the "
772#~ "You have now mastered the edge gestures and can start using the "
774#~ "phone<br><br>Tap on the screen to start"
773#~ "phone<br><br>Tap on the screen to start"
775#~ msgstr ""
774#~ msgstr ""
776−#~ "Wydawanie poleceń krawędzi zostało opanowane. Urządzenie gotowe do pracy."
775+#~ "Wydawanie poleceń krawędzi zostało opanowane. Urządzenie gotowe do "
777−#~ "<br><br>Dotknij ekranu by rozpocząć"
776+#~ "pracy.<br><br>Dotknij ekranu by rozpocząć"
778
777
779#~ msgid "Log out"
778#~ msgid "Log out"
780#~ msgstr "Wyloguj"
779#~ msgstr "Wyloguj"
@@ -802,6 +801,3 @@ msgstr "%1 〉"
802
801
803#~ msgid "Please re-enter"
802#~ msgid "Please re-enter"
804#~ msgstr "Proszę wprowadź ponownie"
803#~ msgstr "Proszę wprowadź ponownie"
805−
806−#~ msgid "Click here to finish."
807−#~ msgstr "Kliknij tutaj, by zakończyć."
po/pt.po+6−11
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11"PO-Revision-Date: 2015-07-29 10:01+0000\n"
11"PO-Revision-Date: 2015-07-29 10:01+0000\n"
12"Last-Translator: Ivo Xavier <ivofernandes12@gmail.com>\n"
12"Last-Translator: Ivo Xavier <ivofernandes12@gmail.com>\n"
13"Language-Team: Portuguese <pt@li.org>\n"
13"Language-Team: Portuguese <pt@li.org>\n"
14−"Language: pt\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -802,19 +801,15 @@ msgstr "%1 〉"
802#~ "You have now mastered the edge gestures and can start using the "
801#~ "You have now mastered the edge gestures and can start using the "
803#~ "phone<br><br>Tap on the screen to start"
802#~ "phone<br><br>Tap on the screen to start"
804#~ msgstr ""
803#~ msgstr ""
805−#~ "Já domina os gestos das margens, pode começar a usar o "
804+#~ "Já domina os gestos das margens, pode começar a usar o telefone<br><br>Toque "
806−#~ "telefone<br><br>Toque no ecrã para começar"
805+#~ "no ecrã para começar"
807
806
808#~ msgid "Store"
807#~ msgid "Store"
809#~ msgstr "Store"
808#~ msgstr "Store"
810
809
811#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
810#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
812#~ msgstr ""
811#~ msgstr ""
813−#~ "Deslize da margem esquerda para mostrar o lançador para acesso rápido às "
812+#~ "Deslize da margem esquerda para mostrar o lançador para acesso rápido às apps"
814−#~ "apps"
815−
816−#~ msgid "Click here to finish."
817−#~ msgstr "Clique aqui para finalizar."
818
813
819#~ msgid "Shut down"
814#~ msgid "Shut down"
820#~ msgstr "Desligar"
815#~ msgstr "Desligar"
po/pt_BR.po+3−7
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\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"
14−"Language: pt_BR\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -815,6 +814,3 @@ msgstr "%1 〉"
815
814
816#~ msgid "Please re-enter"
815#~ msgid "Please re-enter"
817#~ msgstr "Por favor, digite novamente"
816#~ msgstr "Por favor, digite novamente"
818−
819−#~ msgid "Click here to finish."
820−#~ msgstr "Clique aqui para finalizar."
po/ro.po+7−9
@@ -6,19 +6,18 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\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"
14−"Language: ro\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"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 "
19"== 0) && (n != 0))) ? 2: 1));\n"
18"== 0) && (n != 0))) ? 2: 1));\n"
20−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
21−"X-Generator: Launchpad (build 17737)\n"
20+"X-Generator: Launchpad (build 17746)\n"
22
21
23#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
24msgid "Password: "
23msgid "Password: "
@@ -588,7 +587,8 @@ msgstr "Adăugați un card SIM și reporniți dispozitivul dumneavoastră"
588
587
589#: qml/Wizard/Pages/20-sim.qml:59
588#: qml/Wizard/Pages/20-sim.qml:59
590msgid "Without it, you won’t be able to make calls or use text messaging."
589msgid "Without it, you won’t be able to make calls or use text messaging."
590+msgstr ""
591−msgstr "Fără acesta, nu veți putea efectua apeluri sau utiliza mesajele text."
591+"Fără acesta, nu veți putea efectua apeluri sau utiliza mesajele text."
592
592
593#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
593#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
594msgid "Skip"
594msgid "Skip"
@@ -677,7 +677,8 @@ msgstr "Deloc"
677
677
678#: qml/Wizard/Pages/50-location.qml:124
678#: qml/Wizard/Pages/50-location.qml:124
679msgid "You can change your mind later in <b>System Settings</b>."
679msgid "You can change your mind later in <b>System Settings</b>."
680+msgstr ""
680−msgstr "Puteți să modificați opțiunea utilizând <b>Configurări de sistem</b>."
681+"Puteți să modificați opțiunea utilizând <b>Configurări de sistem</b>."
681
682
682#: qml/Wizard/Pages/60-reporting.qml:24
683#: qml/Wizard/Pages/60-reporting.qml:24
683msgid "Improving your experience"
684msgid "Improving your experience"
@@ -824,6 +825,3 @@ msgstr "%1 〉"
824
825
825#~ msgid "Please re-enter"
826#~ msgid "Please re-enter"
826#~ msgstr "Introduceți din nou"
827#~ msgstr "Introduceți din nou"
827−
828−#~ msgid "Click here to finish."
829−#~ msgstr "Apăsați aici pentru a termina."
po/ru.po+10−14
@@ -6,19 +6,18 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\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"
14−"Language: ru\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18−"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
17+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
19−"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
20−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
21−"X-Generator: Launchpad (build 17737)\n"
20+"X-Generator: Launchpad (build 17746)\n"
22
21
23#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
24msgid "Password: "
23msgid "Password: "
@@ -674,7 +673,8 @@ msgstr "Нет (никогда)"
674
673
675#: qml/Wizard/Pages/50-location.qml:124
674#: qml/Wizard/Pages/50-location.qml:124
676msgid "You can change your mind later in <b>System Settings</b>."
675msgid "You can change your mind later in <b>System Settings</b>."
676+msgstr ""
677−msgstr "Изменить свой выбор можно позднее, перейдя в <b>Параметры системы</b>."
677+"Изменить свой выбор можно позднее, перейдя в <b>Параметры системы</b>."
678
678
679#: qml/Wizard/Pages/60-reporting.qml:24
679#: qml/Wizard/Pages/60-reporting.qml:24
680msgid "Improving your experience"
680msgid "Improving your experience"
@@ -755,8 +755,7 @@ msgstr "%1 〉"
755
755
756#~ msgid "Try swiping from the top edge to access the indicators"
756#~ msgid "Try swiping from the top edge to access the indicators"
757#~ msgstr ""
757#~ msgstr ""
758−#~ "Попробуйте переместить палец от верхнего края вниз для доступа к "
758+#~ "Попробуйте переместить палец от верхнего края вниз для доступа к индикаторам"
759−#~ "индикаторам"
760
759
761#~ msgid "Close"
760#~ msgid "Close"
762#~ msgstr "Закрыть"
761#~ msgstr "Закрыть"
@@ -775,8 +774,8 @@ msgstr "%1 〉"
775
774
776#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
775#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
777#~ msgstr ""
776#~ msgstr ""
778−#~ "Переместите палец от левого края вправо для открытия лаунчера для "
777+#~ "Переместите палец от левого края вправо для открытия лаунчера для быстрого "
779−#~ "быстрого доступа к приложениям"
778+#~ "доступа к приложениям"
780
779
781#~ msgid ""
780#~ msgid ""
782#~ "You have now mastered the edge gestures and can start using the "
781#~ "You have now mastered the edge gestures and can start using the "
@@ -823,6 +822,3 @@ msgstr "%1 〉"
823
822
824#~ msgid "Manage Scopes"
823#~ msgid "Manage Scopes"
825#~ msgstr "Настройки поиска"
824#~ msgstr "Настройки поиска"
826−
827−#~ msgid "Click here to finish."
828−#~ msgstr "Нажмите для завершения."
po/shn.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=(n == 1) ? 0 : 1;\n"
17"Plural-Forms: nplurals=2; plural=(n == 1) ? 0 : 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/si.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/sk.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
17"Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/sl.po+5−9
@@ -6,19 +6,18 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11"PO-Revision-Date: 2015-07-06 21:10+0000\n"
11"PO-Revision-Date: 2015-07-06 21:10+0000\n"
12"Last-Translator: Sasa Batistic <Unknown>\n"
12"Last-Translator: Sasa Batistic <Unknown>\n"
13"Language-Team: Slovenian <sl@li.org>\n"
13"Language-Team: Slovenian <sl@li.org>\n"
14−"Language: sl\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18−"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
17+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
19−"%100==4 ? 3 : 0);\n"
18+"n%100==4 ? 3 : 0);\n"
20−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
21−"X-Generator: Launchpad (build 17737)\n"
20+"X-Generator: Launchpad (build 17746)\n"
22
21
23#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
24msgid "Password: "
23msgid "Password: "
@@ -818,6 +817,3 @@ msgstr "%1 〉"
818
817
819#~ msgid "Please re-enter"
818#~ msgid "Please re-enter"
820#~ msgstr "Ponovno vnesite"
819#~ msgstr "Ponovno vnesite"
821−
822−#~ msgid "Click here to finish."
823−#~ msgstr "Kliknite tu za zaključek."
po/sq.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/sr.po+6−6
@@ -7,19 +7,19 @@
7msgid ""
7msgid ""
8msgstr ""
8msgstr ""
9"Project-Id-Version: unity\n"
9"Project-Id-Version: unity\n"
10−"Report-Msgid-Bugs-To: \n"
10+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
11"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11"POT-Creation-Date: 2015-08-25 14:53+0200\n"
12"PO-Revision-Date: 2015-09-16 16:20+0000\n"
12"PO-Revision-Date: 2015-09-16 16:20+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"
15−"Language: sr\n"
16"MIME-Version: 1.0\n"
15"MIME-Version: 1.0\n"
17"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Type: text/plain; charset=UTF-8\n"
18"Content-Transfer-Encoding: 8bit\n"
17"Content-Transfer-Encoding: 8bit\n"
19−"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
18+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
20−"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
21−"X-Launchpad-Export-Date: 2015-09-17 05:46+0000\n"
20+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
22−"X-Generator: Launchpad (build 17737)\n"
21+"X-Generator: Launchpad (build 17746)\n"
22+"Language: sr\n"
23
23
24#: plugins/LightDM/Greeter.cpp:112
24#: plugins/LightDM/Greeter.cpp:112
25msgid "Password: "
25msgid "Password: "
po/sv.po+10−11
@@ -6,18 +6,18 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11"PO-Revision-Date: 2015-07-12 22:17+0000\n"
11"PO-Revision-Date: 2015-07-12 22:17+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"
14−"Language: sv\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20+"Language: sv\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
23msgid "Password: "
@@ -578,7 +578,8 @@ msgstr "Lägg till ett SIM-kort och starta om din enhet"
578
578
579#: qml/Wizard/Pages/20-sim.qml:59
579#: qml/Wizard/Pages/20-sim.qml:59
580msgid "Without it, you won’t be able to make calls or use text messaging."
580msgid "Without it, you won’t be able to make calls or use text messaging."
581+msgstr ""
581−msgstr "Utan det kommer du inte att kunna ringa eller skicka textmeddelanden."
582+"Utan det kommer du inte att kunna ringa eller skicka textmeddelanden."
582
583
583#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
584#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
584msgid "Skip"
585msgid "Skip"
@@ -648,7 +649,8 @@ msgstr "Använd endast GPS (sämre precision)"
648
649
649#: qml/Wizard/Pages/50-location.qml:86
650#: qml/Wizard/Pages/50-location.qml:86
650msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
651msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
652+msgstr ""
651−msgstr "Använd GPS, anonymiserad Wi-Fi och mobil nätverksinfo (rekommenderas)"
653+"Använd GPS, anonymiserad Wi-Fi och mobil nätverksinfo (rekommenderas)"
652
654
653#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
655#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
654#: qml/Wizard/Pages/50-location.qml:103
656#: qml/Wizard/Pages/50-location.qml:103
@@ -656,8 +658,8 @@ msgid ""
656"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
658"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
657"conditions</a>."
659"conditions</a>."
658msgstr ""
660msgstr ""
659−"Genom att välja detta alternativ godkänner du <a href='#'>användarvillkoren</"
661+"Genom att välja detta alternativ godkänner du <a "
660−"a> för Nokia HERE."
662+"href='#'>användarvillkoren</a> för Nokia HERE."
661
663
662#: qml/Wizard/Pages/50-location.qml:112
664#: qml/Wizard/Pages/50-location.qml:112
663msgid "Not at all"
665msgid "Not at all"
@@ -808,6 +810,3 @@ msgstr "%1 〉"
808
810
809#~ msgid "Please re-enter"
811#~ msgid "Please re-enter"
810#~ msgstr "Ange igen"
812#~ msgstr "Ange igen"
811−
812−#~ msgid "Click here to finish."
813−#~ msgstr "Klicka här för att slutföra."
po/sw.po+3−7
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\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"
14−"Language: sw\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -720,6 +719,3 @@ msgstr ""
720
719
721#~ msgid "Please re-enter"
720#~ msgid "Please re-enter"
722#~ msgstr "Tafadhali bonyeza tena"
721#~ msgstr "Tafadhali bonyeza tena"
723−
724−#~ msgid "Click here to finish."
725−#~ msgstr "Click hapa umalize."
po/ta.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20"Language: ta\n"
20"Language: ta\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
po/te.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/th.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/tr.po+3−7
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\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"
14−"Language: tr\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -802,6 +801,3 @@ msgstr "%1 〉"
802
801
803#~ msgid "Please re-enter"
802#~ msgid "Please re-enter"
804#~ msgstr "Lütfen yeniden girin"
803#~ msgstr "Lütfen yeniden girin"
805−
806−#~ msgid "Click here to finish."
807−#~ msgstr "Bitirmek için buraya tıklayın."
po/ug.po+88−85
@@ -8,15 +8,15 @@ msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11−"PO-Revision-Date: 2014-10-07 09:00+0000\n"
11+"PO-Revision-Date: 2015-09-24 05:59+0000\n"
12−"Last-Translator: Gheyret T.Kenji <Unknown>\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"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-25 05:51+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17754)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -29,7 +29,7 @@ msgstr "تېزلەتمىنى قوي"
29
29
30#: plugins/Unity/Launcher/launcheritem.cpp:52
30#: plugins/Unity/Launcher/launcheritem.cpp:52
31msgid "Quit"
31msgid "Quit"
32−msgstr ""
32+msgstr "چېكىن"
33
33
34#: plugins/Unity/Launcher/launcheritem.cpp:106
34#: plugins/Unity/Launcher/launcheritem.cpp:106
35msgid "Unpin shortcut"
35msgid "Unpin shortcut"
@@ -56,7 +56,7 @@ msgstr ""
56#. en_US example: "Tomorrow\u2003%l:%M %p" --> "Tomorrow 1:00 PM"
56#. en_US example: "Tomorrow\u2003%l:%M %p" --> "Tomorrow 1:00 PM"
57#: plugins/Utils/relativetimeformatter.cpp:172
57#: plugins/Utils/relativetimeformatter.cpp:172
58msgid "Tomorrow %l:%M %p"
58msgid "Tomorrow %l:%M %p"
59−msgstr ""
59+msgstr "ئەتە %l:%M %p"
60
60
61#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
61#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
62#. This format string is used for showing, on a 12-hour clock, times that happened in the last week.
62#. This format string is used for showing, on a 12-hour clock, times that happened in the last week.
@@ -125,7 +125,7 @@ msgstr "خاتا ئىم جۈملىسى كۆپ قېتىم كىرگۈزۈلگەن
125
125
126#: qml/Components/DelayedLockscreen.qml:65
126#: qml/Components/DelayedLockscreen.qml:65
127msgid "You have been locked out due to too many failed passcode attempts."
127msgid "You have been locked out due to too many failed passcode attempts."
128−msgstr "خاتا ئىم كودى(passcode) كۆپ قېتىم كىرگۈزۈلگەنلىكى ئۈچۈن قۇلۇپلاندى."
128+msgstr "ھىساباتىڭز قۇلۇپلاندى.ئىم كىرگۈزۈشتە كۆپ قېتىم خاتالاشتىڭز."
129
129
130#: qml/Components/DelayedLockscreen.qml:74
130#: qml/Components/DelayedLockscreen.qml:74
131#, qt-format
131#, qt-format
@@ -136,7 +136,7 @@ msgstr[0] "%1 مىنۇت كۈتۈپ ئاندىن قايتا سىناڭ…"
136#: qml/Components/Dialogs.qml:112
136#: qml/Components/Dialogs.qml:112
137msgctxt "Title: Lock/Log out dialog"
137msgctxt "Title: Lock/Log out dialog"
138msgid "Log out"
138msgid "Log out"
139−msgstr ""
139+msgstr "تىزىمدىن چىق"
140
140
141#: qml/Components/Dialogs.qml:113
141#: qml/Components/Dialogs.qml:113
142msgid "Are you sure you want to log out?"
142msgid "Are you sure you want to log out?"
@@ -145,22 +145,22 @@ msgstr "راستلا چىقىپ كېتەمسىز؟"
145#: qml/Components/Dialogs.qml:115
145#: qml/Components/Dialogs.qml:115
146msgctxt "Button: Lock the system"
146msgctxt "Button: Lock the system"
147msgid "Lock"
147msgid "Lock"
148−msgstr ""
148+msgstr "قۇلۇپلا"
149
149
150#: qml/Components/Dialogs.qml:122
150#: qml/Components/Dialogs.qml:122
151msgctxt "Button: Log out from the system"
151msgctxt "Button: Log out from the system"
152msgid "Log Out"
152msgid "Log Out"
153−msgstr ""
153+msgstr "تىزىمدىن چىق"
154
154
155#: qml/Components/Dialogs.qml:129 qml/Components/Dialogs.qml:162
155#: qml/Components/Dialogs.qml:129 qml/Components/Dialogs.qml:162
156#: qml/Components/Dialogs.qml:221
156#: qml/Components/Dialogs.qml:221
157msgid "Cancel"
157msgid "Cancel"
158−msgstr "ئەمەلدىن قالدۇر"
158+msgstr "بولدىلا"
159
159
160#: qml/Components/Dialogs.qml:141
160#: qml/Components/Dialogs.qml:141
161msgctxt "Title: Reboot/Shut down dialog"
161msgctxt "Title: Reboot/Shut down dialog"
162msgid "Shut down"
162msgid "Shut down"
163−msgstr ""
163+msgstr "تاقا"
164
164
165#: qml/Components/Dialogs.qml:142
165#: qml/Components/Dialogs.qml:142
166msgid "Are you sure you want to shut down?"
166msgid "Are you sure you want to shut down?"
@@ -169,17 +169,17 @@ msgstr "راستلا تاقامسىز؟"
169#: qml/Components/Dialogs.qml:144
169#: qml/Components/Dialogs.qml:144
170msgctxt "Button: Reboot the system"
170msgctxt "Button: Reboot the system"
171msgid "Reboot"
171msgid "Reboot"
172−msgstr ""
172+msgstr "قايتا قوزغات"
173
173
174#: qml/Components/Dialogs.qml:153
174#: qml/Components/Dialogs.qml:153
175msgctxt "Button: Shut down the system"
175msgctxt "Button: Shut down the system"
176msgid "Shut down"
176msgid "Shut down"
177−msgstr ""
177+msgstr "تاقا"
178
178
179#: qml/Components/Dialogs.qml:175
179#: qml/Components/Dialogs.qml:175
180msgctxt "Title: Reboot dialog"
180msgctxt "Title: Reboot dialog"
181msgid "Reboot"
181msgid "Reboot"
182−msgstr ""
182+msgstr "قايتا قوزغات"
183
183
184#: qml/Components/Dialogs.qml:176
184#: qml/Components/Dialogs.qml:176
185msgid "Are you sure you want to reboot?"
185msgid "Are you sure you want to reboot?"
@@ -196,7 +196,7 @@ msgstr "ھەئە"
196#: qml/Components/Dialogs.qml:200
196#: qml/Components/Dialogs.qml:200
197msgctxt "Title: Power off/Restart dialog"
197msgctxt "Title: Power off/Restart dialog"
198msgid "Power"
198msgid "Power"
199−msgstr ""
199+msgstr "توك مەنبە"
200
200
201#: qml/Components/Dialogs.qml:201
201#: qml/Components/Dialogs.qml:201
202msgid ""
202msgid ""
@@ -209,12 +209,12 @@ msgstr ""
209#: qml/Components/Dialogs.qml:203
209#: qml/Components/Dialogs.qml:203
210msgctxt "Button: Power off the system"
210msgctxt "Button: Power off the system"
211msgid "Power off"
211msgid "Power off"
212−msgstr ""
212+msgstr "توكنى ئۈز"
213
213
214#: qml/Components/Dialogs.qml:212
214#: qml/Components/Dialogs.qml:212
215msgctxt "Button: Restart the system"
215msgctxt "Button: Restart the system"
216msgid "Restart"
216msgid "Restart"
217−msgstr ""
217+msgstr "قايتا قوزغات"
218
218
219#: qml/Components/Lockscreen.qml:245
219#: qml/Components/Lockscreen.qml:245
220msgid "Return to Call"
220msgid "Return to Call"
@@ -239,22 +239,22 @@ msgstr "ھەممىنى كۆرۈش…"
239#: qml/Dash/GenericScopeView.qml:631
239#: qml/Dash/GenericScopeView.qml:631
240msgctxt "Label: Hint for dash search line edit"
240msgctxt "Label: Hint for dash search line edit"
241msgid "Search"
241msgid "Search"
242−msgstr ""
242+msgstr "ئىزدە"
243
243
244#: qml/Dash/PageHeader.qml:269
244#: qml/Dash/PageHeader.qml:269
245msgctxt "Button: Open the Ubuntu Store"
245msgctxt "Button: Open the Ubuntu Store"
246msgid "Store"
246msgid "Store"
247−msgstr ""
247+msgstr "ساقلا"
248
248
249#: qml/Dash/PageHeader.qml:276
249#: qml/Dash/PageHeader.qml:276
250msgctxt "Button: Start a search in the current dash scope"
250msgctxt "Button: Start a search in the current dash scope"
251msgid "Search"
251msgid "Search"
252−msgstr ""
252+msgstr "ئىزدە"
253
253
254#: qml/Dash/PageHeader.qml:286
254#: qml/Dash/PageHeader.qml:286
255msgctxt "Button: Show the current dash scope settings"
255msgctxt "Button: Show the current dash scope settings"
256msgid "Settings"
256msgid "Settings"
257−msgstr ""
257+msgstr "تەڭشەك"
258
258
259#: qml/Dash/PageHeader.qml:293
259#: qml/Dash/PageHeader.qml:293
260msgid "Remove from Favorites"
260msgid "Remove from Favorites"
@@ -295,19 +295,19 @@ msgstr "قويۇۋەتسە يېڭىلىنىدۇ…"
295
295
296#: qml/Dash/ScopeSettings/ScopeSettingBoolean.qml:43
296#: qml/Dash/ScopeSettings/ScopeSettingBoolean.qml:43
297msgid "Enable location data"
297msgid "Enable location data"
298−msgstr ""
298+msgstr "ئۇرۇن سانلىق مەلۇمات ئىلىتشكە باشلىدى"
299
299
300#: qml/Dash/ScopesList.qml:67
300#: qml/Dash/ScopesList.qml:67
301msgid "Manage"
301msgid "Manage"
302−msgstr ""
302+msgstr "باشقۇرۇش"
303
303
304#: qml/Dash/ScopesList.qml:113
304#: qml/Dash/ScopesList.qml:113
305msgid "Home"
305msgid "Home"
306−msgstr ""
306+msgstr "ماكان"
307
307
308#: qml/Dash/ScopesList.qml:114
308#: qml/Dash/ScopesList.qml:114
309msgid "Also installed"
309msgid "Also installed"
310−msgstr ""
310+msgstr "قايتىدىن ئورنات"
311
311
312#: qml/Greeter/CoverPage.qml:107
312#: qml/Greeter/CoverPage.qml:107
313msgid "Unlock"
313msgid "Unlock"
@@ -315,11 +315,11 @@ msgstr "قۇلۇپسىزلا"
315
315
316#: qml/Greeter/LoginList.qml:236
316#: qml/Greeter/LoginList.qml:236
317msgid "Retry"
317msgid "Retry"
318−msgstr ""
318+msgstr "قايتا سىنا"
319
319
320#: qml/Greeter/LoginList.qml:237
320#: qml/Greeter/LoginList.qml:237
321msgid "Tap to unlock"
321msgid "Tap to unlock"
322−msgstr ""
322+msgstr "قۇلۇپسىزلا"
323
323
324#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:53
324#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:53
325msgid "Sorry, incorrect passphrase."
325msgid "Sorry, incorrect passphrase."
@@ -374,7 +374,7 @@ msgstr "كەچۈرۈڭ، ئىم توغرا ئەمەس"
374#: qml/Greeter/NarrowView.qml:121
374#: qml/Greeter/NarrowView.qml:121
375msgctxt "passphrase"
375msgctxt "passphrase"
376msgid "Please re-enter"
376msgid "Please re-enter"
377−msgstr ""
377+msgstr "قايتا كىرگۈزۈڭ"
378
378
379#: qml/Greeter/NarrowView.qml:122
379#: qml/Greeter/NarrowView.qml:122
380msgid "Sorry, incorrect passcode"
380msgid "Sorry, incorrect passcode"
@@ -400,32 +400,29 @@ msgstr "ھېچ نېمە قويۇلمايۋاتىدۇ"
400#, qt-format
400#, qt-format
401msgid "%1 hour"
401msgid "%1 hour"
402msgid_plural "%1 hours"
402msgid_plural "%1 hours"
403−msgstr[0] ""
403+msgstr[0] "%1 سائەت"
404−msgstr[1] ""
405
404
406#: qml/Panel/Indicators/MenuItemFactory.qml:807
405#: qml/Panel/Indicators/MenuItemFactory.qml:807
407#, qt-format
406#, qt-format
408msgid "%1 minute"
407msgid "%1 minute"
409msgid_plural "%1 minutes"
408msgid_plural "%1 minutes"
410−msgstr[0] ""
409+msgstr[0] "%1 مىنۇت"
411−msgstr[1] ""
412
410
413#: qml/Panel/Indicators/MenuItemFactory.qml:812
411#: qml/Panel/Indicators/MenuItemFactory.qml:812
414#, qt-format
412#, qt-format
415msgid "%1 second"
413msgid "%1 second"
416msgid_plural "%1 seconds"
414msgid_plural "%1 seconds"
417−msgstr[0] ""
415+msgstr[0] "%1 سېكۇنت"
418−msgstr[1] ""
419
416
420#: qml/Panel/Indicators/MenuItemFactory.qml:815
417#: qml/Panel/Indicators/MenuItemFactory.qml:815
421msgid "0 seconds"
418msgid "0 seconds"
422−msgstr ""
419+msgstr "0 سېكۇنت"
423
420
424#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
421#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
425#: qml/Panel/Indicators/MenuItemFactory.qml:817
422#: qml/Panel/Indicators/MenuItemFactory.qml:817
426#, qt-format
423#, qt-format
427msgid "%1 remaining"
424msgid "%1 remaining"
428−msgstr ""
425+msgstr "%1 قالدۇقى"
429
426
430#: qml/Panel/Indicators/MenuItemFactory.qml:823
427#: qml/Panel/Indicators/MenuItemFactory.qml:823
431msgid "In queue…"
428msgid "In queue…"
@@ -454,11 +451,11 @@ msgstr "مەغلۇپ بولدى، چېكىپ قايتا سىناڭ"
454#: qml/Panel/Indicators/MessageMenuItemFactory.qml:149
451#: qml/Panel/Indicators/MessageMenuItemFactory.qml:149
455msgctxt "Label: Hint in message indicator line edit"
452msgctxt "Label: Hint in message indicator line edit"
456msgid "Reply"
453msgid "Reply"
457−msgstr ""
454+msgstr "جاۋاب قايتۇر"
458
455
459#: qml/Panel/Indicators/MessageMenuItemFactory.qml:204
456#: qml/Panel/Indicators/MessageMenuItemFactory.qml:204
460msgid "Call back"
457msgid "Call back"
461−msgstr ""
458+msgstr "تىلفۇن ئۇرلىۋاتىدۇ"
462
459
463#: qml/Panel/Indicators/ModemInfoItem.qml:105
460#: qml/Panel/Indicators/ModemInfoItem.qml:105
464msgid "Unlock SIM"
461msgid "Unlock SIM"
@@ -474,28 +471,28 @@ msgstr ""
474
471
475#: qml/Tutorial/TutorialBottomFinish.qml:25
472#: qml/Tutorial/TutorialBottomFinish.qml:25
476msgid "Tap here to finish."
473msgid "Tap here to finish."
477−msgstr ""
474+msgstr "بۇ يەرنى چېكىپ ئاخىرلاشتۇرۇڭ"
478
475
479#: qml/Tutorial/TutorialBottom.qml:28
476#: qml/Tutorial/TutorialBottom.qml:28
480msgid "Open special menus"
477msgid "Open special menus"
481−msgstr ""
478+msgstr "تىزملىكنى ئاچ"
482
479
483#: qml/Tutorial/TutorialBottom.qml:29
480#: qml/Tutorial/TutorialBottom.qml:29
484msgid "Swipe up from the bottom edge."
481msgid "Swipe up from the bottom edge."
485−msgstr ""
482+msgstr "ئاستى تەرەپكە سېرىل"
486
483
487#: qml/Tutorial/TutorialContent.qml:80 qml/Tutorial/TutorialLeftFinish.qml:25
484#: qml/Tutorial/TutorialContent.qml:80 qml/Tutorial/TutorialLeftFinish.qml:25
488#: qml/Tutorial/TutorialRight.qml:144
485#: qml/Tutorial/TutorialRight.qml:144
489msgid "Tap here to continue."
486msgid "Tap here to continue."
490−msgstr ""
487+msgstr "داۋاملاشتۇر"
491
488
492#: qml/Tutorial/TutorialLeftFinish.qml:24
489#: qml/Tutorial/TutorialLeftFinish.qml:24
493msgid "These are the shortcuts to favorite apps"
490msgid "These are the shortcuts to favorite apps"
494−msgstr ""
491+msgstr "بۇ سىز ئەڭ ياخشى كۆردىغان دېتاللارتېزلەتمە كۆنۇپكىلار"
495
492
496#: qml/Tutorial/TutorialLeft.qml:26
493#: qml/Tutorial/TutorialLeft.qml:26
497msgid "Open the launcher"
494msgid "Open the launcher"
498−msgstr ""
495+msgstr "تارقىتىش ئاپراتنى ئاچ"
499
496
500#: qml/Tutorial/TutorialLeft.qml:27
497#: qml/Tutorial/TutorialLeft.qml:27
501msgid "Short swipe from the left edge."
498msgid "Short swipe from the left edge."
@@ -507,11 +504,11 @@ msgstr ""
507
504
508#: qml/Tutorial/TutorialPage.qml:195
505#: qml/Tutorial/TutorialPage.qml:195
509msgid "Try again."
506msgid "Try again."
510−msgstr ""
507+msgstr "قايتا سىناڭ"
511
508
512#: qml/Tutorial/TutorialRight.qml:31
509#: qml/Tutorial/TutorialRight.qml:31
513msgid "To view open apps"
510msgid "To view open apps"
514−msgstr ""
511+msgstr "قوزغىتىلغان دېتاللارنى كۆرۈش"
515
512
516#: qml/Tutorial/TutorialRight.qml:32
513#: qml/Tutorial/TutorialRight.qml:32
517msgid "Long swipe from the right edge."
514msgid "Long swipe from the right edge."
@@ -519,134 +516,136 @@ msgstr ""
519
516
520#: qml/Tutorial/TutorialRight.qml:122
517#: qml/Tutorial/TutorialRight.qml:122
521msgid "View all your running tasks."
518msgid "View all your running tasks."
522−msgstr ""
519+msgstr "ئىجىرا بۇلۇۋاتقان بارلىق ۋەزىپىلەرنى كۆرۈش"
523
520
524#: qml/Wizard/Page.qml:89
521#: qml/Wizard/Page.qml:89
525msgctxt "Button: Go back one page in the Wizard"
522msgctxt "Button: Go back one page in the Wizard"
526msgid "Back"
523msgid "Back"
527−msgstr ""
524+msgstr "قايتىش"
528
525
529#: qml/Wizard/Pages/here-terms.qml:27
526#: qml/Wizard/Pages/here-terms.qml:27
530msgid "Terms & Conditions"
527msgid "Terms & Conditions"
531−msgstr ""
528+msgstr "قائىدە ۋە شەرتلەر"
532
529
533#: qml/Wizard/Pages/passwd-confirm.qml:49
530#: qml/Wizard/Pages/passwd-confirm.qml:49
534msgid "Confirm passphrase"
531msgid "Confirm passphrase"
535−msgstr ""
532+msgstr "ئىم جۈملىسىنى جەزملەڭ"
536
533
537#: qml/Wizard/Pages/passwd-confirm.qml:50
534#: qml/Wizard/Pages/passwd-confirm.qml:50
538msgid "Confirm passcode"
535msgid "Confirm passcode"
539−msgstr ""
536+msgstr "ئىمنى جەزملەڭ"
540
537
541#: qml/Wizard/Pages/passwd-confirm.qml:53
538#: qml/Wizard/Pages/passwd-confirm.qml:53
542#: qml/Wizard/Pages/passwd-confirm.qml:54
539#: qml/Wizard/Pages/passwd-confirm.qml:54
543msgid "Please try again."
540msgid "Please try again."
544−msgstr ""
541+msgstr "قايتا سىناڭ."
545
542
546#: qml/Wizard/Pages/passwd-confirm.qml:82 qml/Wizard/Pages/passwd-set.qml:90
543#: qml/Wizard/Pages/passwd-confirm.qml:82 qml/Wizard/Pages/passwd-set.qml:90
547#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:128
544#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:128
548#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
545#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
549#: qml/Wizard/Pages/60-reporting.qml:50
546#: qml/Wizard/Pages/60-reporting.qml:50
550msgid "Continue"
547msgid "Continue"
551−msgstr ""
548+msgstr "داۋاملاشتۇر"
552
549
553#: qml/Wizard/Pages/passwd-set.qml:61
550#: qml/Wizard/Pages/passwd-set.qml:61
554msgid "Choose your passcode"
551msgid "Choose your passcode"
555−msgstr ""
552+msgstr "ئىم كودى(passcode) تاللاڭ"
556
553
557#: qml/Wizard/Pages/passwd-set.qml:68
554#: qml/Wizard/Pages/passwd-set.qml:68
558msgid "Passphrase must be 4 characters long"
555msgid "Passphrase must be 4 characters long"
559−msgstr ""
556+msgstr "ئىم كودى چوقۇم 4 ھەرپ بولسۇن"
560
557
561#: qml/Wizard/Pages/10-welcome.qml:27
558#: qml/Wizard/Pages/10-welcome.qml:27
562msgid "Hi!"
559msgid "Hi!"
563−msgstr ""
560+msgstr "سالام!"
564
561
565#: qml/Wizard/Pages/10-welcome.qml:44
562#: qml/Wizard/Pages/10-welcome.qml:44
566msgid "Welcome to your Ubuntu phone."
563msgid "Welcome to your Ubuntu phone."
567−msgstr ""
564+msgstr "ئۇبۇنتۇ تېلېفونىغا مەرھابا."
568
565
569#: qml/Wizard/Pages/10-welcome.qml:52
566#: qml/Wizard/Pages/10-welcome.qml:52
570msgid "Let’s get started."
567msgid "Let’s get started."
571−msgstr ""
568+msgstr "باشلايلى"
572
569
573#: qml/Wizard/Pages/20-sim.qml:25
570#: qml/Wizard/Pages/20-sim.qml:25
574msgid "Add a SIM card and restart your device"
571msgid "Add a SIM card and restart your device"
575−msgstr ""
572+msgstr "سىم كارتىسى قوشۇپ، ئۈسكۈنىنى قايتا قوزغىتىڭ"
576
573
577#: qml/Wizard/Pages/20-sim.qml:59
574#: qml/Wizard/Pages/20-sim.qml:59
578msgid "Without it, you won’t be able to make calls or use text messaging."
575msgid "Without it, you won’t be able to make calls or use text messaging."
579−msgstr ""
576+msgstr "ئۇ بولمىسا، تېلېفون قىلىشقا ۋە ئۇچۇر ئەۋەتىشكە بولمايدۇ."
580
577
581#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
578#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
582msgid "Skip"
579msgid "Skip"
583−msgstr ""
580+msgstr "ئۆتكۈزۈۋەت"
584
581
585#: qml/Wizard/Pages/30-passwd-type.qml:39
582#: qml/Wizard/Pages/30-passwd-type.qml:39
586msgid "Lock security"
583msgid "Lock security"
587−msgstr ""
584+msgstr "قۇلۇپلاش بىخەتەرلىكى"
588
585
589#: qml/Wizard/Pages/30-passwd-type.qml:74
586#: qml/Wizard/Pages/30-passwd-type.qml:74
590msgid "Please select how you’d like to unlock your phone."
587msgid "Please select how you’d like to unlock your phone."
591−msgstr ""
588+msgstr "تېلېفوننى قانداق قۇلۇپسىزلاشنى تاللاڭ."
592
589
593#: qml/Wizard/Pages/30-passwd-type.qml:97
590#: qml/Wizard/Pages/30-passwd-type.qml:97
594msgctxt "Label: Type of security method"
591msgctxt "Label: Type of security method"
595msgid "Swipe"
592msgid "Swipe"
596−msgstr ""
593+msgstr "تېز سىيرىش"
597
594
598#: qml/Wizard/Pages/30-passwd-type.qml:98
595#: qml/Wizard/Pages/30-passwd-type.qml:98
599msgctxt "Label: Description of security method"
596msgctxt "Label: Description of security method"
600msgid "No security"
597msgid "No security"
601−msgstr ""
598+msgstr "بىخەتەرلىكى يوق"
602
599
603#: qml/Wizard/Pages/30-passwd-type.qml:100
600#: qml/Wizard/Pages/30-passwd-type.qml:100
604msgctxt "Label: Type of security method"
601msgctxt "Label: Type of security method"
605msgid "Passcode"
602msgid "Passcode"
606−msgstr ""
603+msgstr "ئىم"
607
604
608#: qml/Wizard/Pages/30-passwd-type.qml:101
605#: qml/Wizard/Pages/30-passwd-type.qml:101
609msgctxt "Label: Description of security method"
606msgctxt "Label: Description of security method"
610msgid "4 digits only"
607msgid "4 digits only"
611−msgstr ""
608+msgstr "4 خانىلىق سان"
612
609
613#: qml/Wizard/Pages/30-passwd-type.qml:103
610#: qml/Wizard/Pages/30-passwd-type.qml:103
614msgctxt "Label: Type of security method"
611msgctxt "Label: Type of security method"
615msgid "Passphrase"
612msgid "Passphrase"
616−msgstr ""
613+msgstr "ئىم"
617
614
618#: qml/Wizard/Pages/30-passwd-type.qml:104
615#: qml/Wizard/Pages/30-passwd-type.qml:104
619msgctxt "Label: Description of security method"
616msgctxt "Label: Description of security method"
620msgid "Numbers and letters"
617msgid "Numbers and letters"
621−msgstr ""
618+msgstr "رەقەم ۋە ھەرپلەر"
622
619
623#: qml/Wizard/Pages/40-wifi.qml:29
620#: qml/Wizard/Pages/40-wifi.qml:29
624msgid "Connect to Wi‑Fi"
621msgid "Connect to Wi‑Fi"
625−msgstr ""
622+msgstr "سىمسىز تورغا(Wi-Fi) باغلان"
626
623
627#: qml/Wizard/Pages/40-wifi.qml:168
624#: qml/Wizard/Pages/40-wifi.qml:168
628msgid "Available networks…"
625msgid "Available networks…"
629−msgstr ""
626+msgstr "ئىشلەتكىلى بولىدىغان تورلار…"
630
627
631#: qml/Wizard/Pages/40-wifi.qml:169
628#: qml/Wizard/Pages/40-wifi.qml:169
632msgid "No available networks."
629msgid "No available networks."
633−msgstr ""
630+msgstr "ئىشلەتكىلى بولىدىغان تور يوق."
634
631
635#: qml/Wizard/Pages/50-location.qml:27
632#: qml/Wizard/Pages/50-location.qml:27
636msgid "Location"
633msgid "Location"
637−msgstr ""
634+msgstr "ئورنى"
638
635
639#: qml/Wizard/Pages/50-location.qml:62
636#: qml/Wizard/Pages/50-location.qml:62
640msgid "Let the phone detect your location:"
637msgid "Let the phone detect your location:"
641−msgstr ""
638+msgstr "تىلفۇن ئورنىڭزنى بىكتىۋاتدۇ:"
642
639
643#: qml/Wizard/Pages/50-location.qml:69
640#: qml/Wizard/Pages/50-location.qml:69
644msgid "Using GPS only (less accurate)"
641msgid "Using GPS only (less accurate)"
645−msgstr ""
642+msgstr "GPS ئىشلىتىش (توپ توغرا چىقمايدۇ)"
646
643
647#: qml/Wizard/Pages/50-location.qml:86
644#: qml/Wizard/Pages/50-location.qml:86
648msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
645msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
649msgstr ""
646msgstr ""
647+"GPS ئىشلىەتكەندە سېمسىز تور ياكى كۆچمە تىلفۇن تورنى ئېچىش كېرەك (تەۋسىيە "
648+"قىلىندۇ)"
650
649
651#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
650#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
652#: qml/Wizard/Pages/50-location.qml:103
651#: qml/Wizard/Pages/50-location.qml:103
@@ -657,55 +656,59 @@ msgstr ""
657
656
658#: qml/Wizard/Pages/50-location.qml:112
657#: qml/Wizard/Pages/50-location.qml:112
659msgid "Not at all"
658msgid "Not at all"
660−msgstr ""
659+msgstr "پەقەت ئۇنداق ئەمەس"
661
660
662#: qml/Wizard/Pages/50-location.qml:124
661#: qml/Wizard/Pages/50-location.qml:124
663msgid "You can change your mind later in <b>System Settings</b>."
662msgid "You can change your mind later in <b>System Settings</b>."
664−msgstr ""
663+msgstr "سىز <b>سىستېما تەڭشەك</b> تىن ھەرخىل ئۆزگەرتىشلەرنى ئىلىپ بارالايسىز"
665
664
666#: qml/Wizard/Pages/60-reporting.qml:24
665#: qml/Wizard/Pages/60-reporting.qml:24
667msgid "Improving your experience"
666msgid "Improving your experience"
668−msgstr ""
667+msgstr "سەۋىيەيىڭىز ئاشىدۇ"
669
668
670#: qml/Wizard/Pages/60-reporting.qml:36
669#: qml/Wizard/Pages/60-reporting.qml:36
671msgid ""
670msgid ""
672"Your phone is set up to automatically report errors to Canonical and its "
671"Your phone is set up to automatically report errors to Canonical and its "
673"partners, the makers of the operating system."
672"partners, the makers of the operating system."
674msgstr ""
673msgstr ""
674+"تېلېفونىڭىز خاتالىقلارنى Canonical ۋە ئۇنىڭ بىلەن ھەمكارلاشقانلارغا ۋە "
675+"مەشغۇلات سىستېمىسىنى ياسىغۇچىلارغا ئاپتوماتىك مەلۇم قىلىدىغان قىلىپ تەڭشەلدى."
675
676
676#: qml/Wizard/Pages/60-reporting.qml:43
677#: qml/Wizard/Pages/60-reporting.qml:43
677msgid ""
678msgid ""
678"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
679"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
679"Privacy</b>"
680"Privacy</b>"
680msgstr ""
681msgstr ""
682+"بۇنى <b>بىخەتەرلىك &amp; شەخسىيەت</b>نىڭ ئاستىدىكى <b>سىستېما تەڭشىكى</b>دە "
683+"ئىناۋەتسىز قىلىشقا بولىدۇ."
681
684
682#: qml/Wizard/Pages/80-finished.qml:24
685#: qml/Wizard/Pages/80-finished.qml:24
683msgid "All done"
686msgid "All done"
684−msgstr ""
687+msgstr "ھەممىسى تامام"
685
688
686#: qml/Wizard/Pages/80-finished.qml:39
689#: qml/Wizard/Pages/80-finished.qml:39
687msgid "Nice work!"
690msgid "Nice work!"
688−msgstr ""
691+msgstr "جاپا چەكتىڭىز!"
689
692
690#: qml/Wizard/Pages/80-finished.qml:46
693#: qml/Wizard/Pages/80-finished.qml:46
691msgid "Your phone is now ready to use."
694msgid "Your phone is now ready to use."
692−msgstr ""
695+msgstr "تېلېفونىڭىز ئىشلىتىشكە ھازىرلاندى."
693
696
694#: qml/Wizard/Pages/80-finished.qml:53
697#: qml/Wizard/Pages/80-finished.qml:53
695msgid "Finish"
698msgid "Finish"
696−msgstr ""
699+msgstr "تامام"
697
700
698#. Translators: This is the arrow for "Back" buttons
701#. Translators: This is the arrow for "Back" buttons
699#: qml/Wizard/StackButton.qml:39
702#: qml/Wizard/StackButton.qml:39
700#, qt-format
703#, qt-format
701msgid "〈 %1"
704msgid "〈 %1"
702−msgstr ""
705+msgstr "〈 %1"
703
706
704#. Translators: This is the arrow for "Forward" buttons
707#. Translators: This is the arrow for "Forward" buttons
705#: qml/Wizard/StackButton.qml:42
708#: qml/Wizard/StackButton.qml:42
706#, qt-format
709#, qt-format
707msgid "%1 〉"
710msgid "%1 〉"
708−msgstr ""
711+msgstr "%1 〉"
709
712
710#~ msgid "Confirm"
713#~ msgid "Confirm"
711#~ msgstr "جەزملە"
714#~ msgstr "جەزملە"
po/uk.po+8−13
@@ -6,19 +6,18 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11"PO-Revision-Date: 2015-07-04 05:53+0000\n"
11"PO-Revision-Date: 2015-07-04 05:53+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−"Language: uk\n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18−"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
17+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
19−"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
20−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
21−"X-Generator: Launchpad (build 17737)\n"
20+"X-Generator: Launchpad (build 17746)\n"
22
21
23#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
24msgid "Password: "
23msgid "Password: "
@@ -773,8 +772,7 @@ msgstr "%1 〉"
773#~ msgstr "Пропустити вступ"
772#~ msgstr "Пропустити вступ"
774
773
775#~ msgid "Try swiping from the right edge to unlock the phone"
774#~ msgid "Try swiping from the right edge to unlock the phone"
776−#~ msgstr ""
777−#~ "Спробуйте провести пальцем від правою краю, щоб розблокувати телефон"
775+#~ msgstr "Спробуйте провести пальцем від правою краю, щоб розблокувати телефон"
778
776
779#~ msgid "Right edge"
777#~ msgid "Right edge"
780#~ msgstr "Правий край"
778#~ msgstr "Правий край"
@@ -783,8 +781,8 @@ msgstr "%1 〉"
783#~ "You have now mastered the edge gestures and can start using the "
781#~ "You have now mastered the edge gestures and can start using the "
784#~ "phone<br><br>Tap on the screen to start"
782#~ "phone<br><br>Tap on the screen to start"
785#~ msgstr ""
783#~ msgstr ""
786−#~ "Вами налаштовано дії у відповідь на дотики на краях екрана. Тепер "
784+#~ "Вами налаштовано дії у відповідь на дотики на краях екрана. Тепер телефоном "
787−#~ "телефоном можна користуватися.<br><br>Торкніться екрана, щоб розпочати."
785+#~ "можна користуватися.<br><br>Торкніться екрана, щоб розпочати."
788
786
789#~ msgid "All"
787#~ msgid "All"
790#~ msgstr "Все"
788#~ msgstr "Все"
@@ -824,6 +822,3 @@ msgstr "%1 〉"
824
822
825#~ msgid "Please re-enter"
823#~ msgid "Please re-enter"
826#~ msgstr "Ввведіть ще раз"
824#~ msgstr "Ввведіть ще раз"
827−
828−#~ msgid "Click here to finish."
829−#~ msgstr "Натисніть тут, щоб завершити."
po/unity8.pot+36−34
@@ -8,7 +8,7 @@ msgid ""
8msgstr ""
8msgstr ""
9"Project-Id-Version: unity8\n"
9"Project-Id-Version: unity8\n"
10"Report-Msgid-Bugs-To: \n"
10"Report-Msgid-Bugs-To: \n"
11−"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11+"POT-Creation-Date: 2015-09-16 00:49+0200\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"
@@ -18,7 +18,7 @@ msgstr ""
18"Content-Transfer-Encoding: 8bit\n"
18"Content-Transfer-Encoding: 8bit\n"
19"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
19"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
20
20
21−#: plugins/LightDM/Greeter.cpp:112
21+#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
23msgstr ""
23msgstr ""
24
24
@@ -134,83 +134,83 @@ msgid_plural "Please wait %1 minutes and then try again…"
134msgstr[0] ""
134msgstr[0] ""
135msgstr[1] ""
135msgstr[1] ""
136
136
137−#: qml/Components/Dialogs.qml:112
137+#: qml/Components/Dialogs.qml:115
138msgctxt "Title: Lock/Log out dialog"
138msgctxt "Title: Lock/Log out dialog"
139msgid "Log out"
139msgid "Log out"
140msgstr ""
140msgstr ""
141
141
142−#: qml/Components/Dialogs.qml:113
142+#: qml/Components/Dialogs.qml:116
143msgid "Are you sure you want to log out?"
143msgid "Are you sure you want to log out?"
144msgstr ""
144msgstr ""
145
145
146−#: qml/Components/Dialogs.qml:115
146+#: qml/Components/Dialogs.qml:118
147msgctxt "Button: Lock the system"
147msgctxt "Button: Lock the system"
148msgid "Lock"
148msgid "Lock"
149msgstr ""
149msgstr ""
150
150
151−#: qml/Components/Dialogs.qml:122
151+#: qml/Components/Dialogs.qml:125
152msgctxt "Button: Log out from the system"
152msgctxt "Button: Log out from the system"
153msgid "Log Out"
153msgid "Log Out"
154msgstr ""
154msgstr ""
155
155
156−#: qml/Components/Dialogs.qml:129 qml/Components/Dialogs.qml:162
156+#: qml/Components/Dialogs.qml:132 qml/Components/Dialogs.qml:165
157−#: qml/Components/Dialogs.qml:221
157+#: qml/Components/Dialogs.qml:224
158msgid "Cancel"
158msgid "Cancel"
159msgstr ""
159msgstr ""
160
160
161−#: qml/Components/Dialogs.qml:141
161+#: qml/Components/Dialogs.qml:144
162msgctxt "Title: Reboot/Shut down dialog"
162msgctxt "Title: Reboot/Shut down dialog"
163msgid "Shut down"
163msgid "Shut down"
164msgstr ""
164msgstr ""
165
165
166−#: qml/Components/Dialogs.qml:142
166+#: qml/Components/Dialogs.qml:145
167msgid "Are you sure you want to shut down?"
167msgid "Are you sure you want to shut down?"
168msgstr ""
168msgstr ""
169
169
170−#: qml/Components/Dialogs.qml:144
170+#: qml/Components/Dialogs.qml:147
171msgctxt "Button: Reboot the system"
171msgctxt "Button: Reboot the system"
172msgid "Reboot"
172msgid "Reboot"
173msgstr ""
173msgstr ""
174
174
175−#: qml/Components/Dialogs.qml:153
175+#: qml/Components/Dialogs.qml:156
176msgctxt "Button: Shut down the system"
176msgctxt "Button: Shut down the system"
177msgid "Shut down"
177msgid "Shut down"
178msgstr ""
178msgstr ""
179
179
180−#: qml/Components/Dialogs.qml:175
180+#: qml/Components/Dialogs.qml:178
181msgctxt "Title: Reboot dialog"
181msgctxt "Title: Reboot dialog"
182msgid "Reboot"
182msgid "Reboot"
183msgstr ""
183msgstr ""
184
184
185−#: qml/Components/Dialogs.qml:176
185+#: qml/Components/Dialogs.qml:179
186msgid "Are you sure you want to reboot?"
186msgid "Are you sure you want to reboot?"
187msgstr ""
187msgstr ""
188
188
189−#: qml/Components/Dialogs.qml:178
189+#: qml/Components/Dialogs.qml:181
190msgid "No"
190msgid "No"
191msgstr ""
191msgstr ""
192
192
193−#: qml/Components/Dialogs.qml:185
193+#: qml/Components/Dialogs.qml:188
194msgid "Yes"
194msgid "Yes"
195msgstr ""
195msgstr ""
196
196
197−#: qml/Components/Dialogs.qml:200
197+#: qml/Components/Dialogs.qml:203
198msgctxt "Title: Power off/Restart dialog"
198msgctxt "Title: Power off/Restart dialog"
199msgid "Power"
199msgid "Power"
200msgstr ""
200msgstr ""
201
201
202−#: qml/Components/Dialogs.qml:201
202+#: qml/Components/Dialogs.qml:204
203msgid ""
203msgid ""
204"Are you sure you would like\n"
204"Are you sure you would like\n"
205"to power off?"
205"to power off?"
206msgstr ""
206msgstr ""
207
207
208−#: qml/Components/Dialogs.qml:203
208+#: qml/Components/Dialogs.qml:206
209msgctxt "Button: Power off the system"
209msgctxt "Button: Power off the system"
210msgid "Power off"
210msgid "Power off"
211msgstr ""
211msgstr ""
212
212
213−#: qml/Components/Dialogs.qml:212
213+#: qml/Components/Dialogs.qml:215
214msgctxt "Button: Restart the system"
214msgctxt "Button: Restart the system"
215msgid "Restart"
215msgid "Restart"
216msgstr ""
216msgstr ""
@@ -271,8 +271,10 @@ msgstr ""
271msgid "Less..."
271msgid "Less..."
272msgstr ""
272msgstr ""
273
273
274−#: qml/Dash/Previews/PreviewCommentInput.qml:61
274+#: qml/Dash/Previews/PreviewCommentInput.qml:68
275−#: qml/Dash/Previews/PreviewRatingInput.qml:169
275+#: qml/Dash/Previews/PreviewRatingInput.qml:174
276+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:148
277+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:205
276msgid "Send"
278msgid "Send"
277msgstr ""
279msgstr ""
278
280
@@ -387,62 +389,62 @@ msgstr ""
387msgid "Conference"
389msgid "Conference"
388msgstr ""
390msgstr ""
389
391
390−#: qml/Panel/Indicators/MenuItemFactory.qml:674
392+#: qml/Panel/Indicators/MenuItemFactory.qml:718
391msgid "Nothing is playing"
393msgid "Nothing is playing"
392msgstr ""
394msgstr ""
393
395
394−#: qml/Panel/Indicators/MenuItemFactory.qml:803
396+#: qml/Panel/Indicators/MenuItemFactory.qml:847
395#, qt-format
397#, qt-format
396msgid "%1 hour"
398msgid "%1 hour"
397msgid_plural "%1 hours"
399msgid_plural "%1 hours"
398msgstr[0] ""
400msgstr[0] ""
399msgstr[1] ""
401msgstr[1] ""
400
402
401−#: qml/Panel/Indicators/MenuItemFactory.qml:807
403+#: qml/Panel/Indicators/MenuItemFactory.qml:851
402#, qt-format
404#, qt-format
403msgid "%1 minute"
405msgid "%1 minute"
404msgid_plural "%1 minutes"
406msgid_plural "%1 minutes"
405msgstr[0] ""
407msgstr[0] ""
406msgstr[1] ""
408msgstr[1] ""
407
409
408−#: qml/Panel/Indicators/MenuItemFactory.qml:812
410+#: qml/Panel/Indicators/MenuItemFactory.qml:856
409#, qt-format
411#, qt-format
410msgid "%1 second"
412msgid "%1 second"
411msgid_plural "%1 seconds"
413msgid_plural "%1 seconds"
412msgstr[0] ""
414msgstr[0] ""
413msgstr[1] ""
415msgstr[1] ""
414
416
415−#: qml/Panel/Indicators/MenuItemFactory.qml:815
417+#: qml/Panel/Indicators/MenuItemFactory.qml:859
416msgid "0 seconds"
418msgid "0 seconds"
417msgstr ""
419msgstr ""
418
420
419#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
421#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
420−#: qml/Panel/Indicators/MenuItemFactory.qml:817
422+#: qml/Panel/Indicators/MenuItemFactory.qml:861
421#, qt-format
423#, qt-format
422msgid "%1 remaining"
424msgid "%1 remaining"
423msgstr ""
425msgstr ""
424
426
425−#: qml/Panel/Indicators/MenuItemFactory.qml:823
427+#: qml/Panel/Indicators/MenuItemFactory.qml:867
426msgid "In queue…"
428msgid "In queue…"
427msgstr ""
429msgstr ""
428
430
429−#: qml/Panel/Indicators/MenuItemFactory.qml:827
431+#: qml/Panel/Indicators/MenuItemFactory.qml:871
430msgid "Downloading"
432msgid "Downloading"
431msgstr ""
433msgstr ""
432
434
433−#: qml/Panel/Indicators/MenuItemFactory.qml:829
435+#: qml/Panel/Indicators/MenuItemFactory.qml:873
434msgid "Paused, tap to resume"
436msgid "Paused, tap to resume"
435msgstr ""
437msgstr ""
436
438
437−#: qml/Panel/Indicators/MenuItemFactory.qml:831
439+#: qml/Panel/Indicators/MenuItemFactory.qml:875
438msgid "Canceled"
440msgid "Canceled"
439msgstr ""
441msgstr ""
440
442
441−#: qml/Panel/Indicators/MenuItemFactory.qml:833
443+#: qml/Panel/Indicators/MenuItemFactory.qml:877
442msgid "Finished"
444msgid "Finished"
443msgstr ""
445msgstr ""
444
446
445−#: qml/Panel/Indicators/MenuItemFactory.qml:835
447+#: qml/Panel/Indicators/MenuItemFactory.qml:879
446msgid "Failed, tap to retry"
448msgid "Failed, tap to retry"
447msgstr ""
449msgstr ""
448
450
po/ur.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/uz.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/vi.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/xh.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/zh_CN.po+7−15
@@ -6,18 +6,17 @@
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
10"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11"PO-Revision-Date: 2015-07-27 10:26+0000\n"
11"PO-Revision-Date: 2015-07-27 10:26+0000\n"
12"Last-Translator: Ian Li <Unknown>\n"
12"Last-Translator: Ian Li <Unknown>\n"
13"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
13"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
14−"Language: \n"
15"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
21
20
22#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
23msgid "Password: "
22msgid "Password: "
@@ -338,15 +337,13 @@ msgstr "这是您最后的尝试机会。"
338msgid ""
337msgid ""
339"If passphrase is entered incorrectly, your phone will conduct a factory "
338"If passphrase is entered incorrectly, your phone will conduct a factory "
340"reset and all personal data will be deleted."
339"reset and all personal data will be deleted."
341−msgstr ""
342−"如果输入的密语不正确,您的手机将恢复到出厂设置并且所有的个人数据将被删除。"
340+msgstr "如果输入的密语不正确,您的手机将恢复到出厂设置并且所有的个人数据将被删除。"
343
341
344#: qml/Greeter/NarrowView.qml:59
342#: qml/Greeter/NarrowView.qml:59
345msgid ""
343msgid ""
346"If passcode is entered incorrectly, your phone will conduct a factory reset "
344"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"and all personal data will be deleted."
345"and all personal data will be deleted."
348−msgstr ""
349−"如果输入的密码不正确,您的手机将恢复到出厂设置并且所有的个人数据将被删除。"
346+msgstr "如果输入的密码不正确,您的手机将恢复到出厂设置并且所有的个人数据将被删除。"
350
347
351#: qml/Greeter/NarrowView.qml:116
348#: qml/Greeter/NarrowView.qml:116
352#, qt-format
349#, qt-format
@@ -667,8 +664,7 @@ msgstr "改善您的体验"
667msgid ""
664msgid ""
668"Your phone is set up to automatically report errors to Canonical and its "
665"Your phone is set up to automatically report errors to Canonical and its "
669"partners, the makers of the operating system."
666"partners, the makers of the operating system."
670−msgstr ""
671−"您的手机设置为自动向操作系统的制造商Canonical 及其合作伙伴发送错误报告。"
667+msgstr "您的手机设置为自动向操作系统的制造商Canonical 及其合作伙伴发送错误报告。"
672
668
673#: qml/Wizard/Pages/60-reporting.qml:43
669#: qml/Wizard/Pages/60-reporting.qml:43
674msgid ""
670msgid ""
@@ -755,8 +751,7 @@ msgstr "%1 〉"
755#~ msgid ""
751#~ msgid ""
756#~ "You have now mastered the edge gestures and can start using the "
752#~ "You have now mastered the edge gestures and can start using the "
757#~ "phone<br><br>Tap on the screen to start"
753#~ "phone<br><br>Tap on the screen to start"
758−#~ msgstr ""
759−#~ "您现在已经掌握了边缘滑动手势,可以开始使用手机了<br><br>请点击屏幕开始使用"
754+#~ msgstr "您现在已经掌握了边缘滑动手势,可以开始使用手机了<br><br>请点击屏幕开始使用"
760
755
761#~ msgid "All"
756#~ msgid "All"
762#~ msgstr "所有"
757#~ msgstr "所有"
@@ -775,6 +770,3 @@ msgstr "%1 〉"
775
770
776#~ msgid "Please re-enter"
771#~ msgid "Please re-enter"
777#~ msgstr "请重新输入"
772#~ msgstr "请重新输入"
778−
779−#~ msgid "Click here to finish."
780−#~ msgstr "点击这里完成。"
po/zh_HK.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:112
21#: plugins/LightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
po/zh_TW.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
19+"X-Generator: Launchpad (build 17746)\n"
20"Language: zh_TW\n"
20"Language: zh_TW\n"
21
21
22#: plugins/LightDM/Greeter.cpp:112
22#: plugins/LightDM/Greeter.cpp:112
qml/Components/BlurLayer.qmlnew file+69
@@ -0,0 +1,69 @@
1+/*
2+ * Copyright (C) 2015 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.4
18+import QtGraphicalEffects 1.0
19+
20+Item {
21+ id: root
22+
23+ property alias source: shaderEffectSource.sourceItem
24+ property alias saturation: desaturateEffect.saturationValue
25+ property alias blurRadius: fastBlur.radius
26+
27+ readonly property alias ready: shaderEffectSource.ready
28+
29+ ShaderEffect {
30+ id: desaturateEffect
31+ anchors.fill: root
32+
33+ property real saturationValue: 1
34+
35+ property variant source: ShaderEffectSource {
36+ id: shaderEffectSource
37+ hideSource: root.visible
38+ live: !root.visible
39+ property bool ready: false;
40+ onLiveChanged: {
41+ if (!live) {
42+ ready = false;
43+ scheduleUpdate();
44+ }
45+ }
46+ onScheduledUpdateCompleted: ready = true;
47+ }
48+
49+ fragmentShader: "
50+ varying highp vec2 qt_TexCoord0;
51+ uniform sampler2D source;
52+ uniform lowp float saturationValue;
53+ void main(void)
54+ {
55+ highp vec4 sourceColor = texture2D(source, qt_TexCoord0);
56+ highp vec4 scaledColor = sourceColor * vec4(0.3, 0.59, 0.11, 1.0);
57+ lowp float luminance = scaledColor.r + scaledColor.g + scaledColor.b ;
58+ gl_FragColor = mix(vec4(luminance, luminance, luminance, sourceColor.a), sourceColor, saturationValue);
59+ }"
60+ }
61+
62+ FastBlur {
63+ id: fastBlur
64+ anchors.fill: parent
65+ source: desaturateEffect
66+ visible: radius > 0
67+ radius: 0
68+ }
69+}
qml/Dash/PreviewListView.qml+12−4
@@ -101,18 +101,26 @@ Item {
101
101
102 isCurrent: ListView.isCurrentItem
102 isCurrent: ListView.isCurrentItem
103
103
104− previewModel: {
104+ readonly property var previewStack: {
105 if (root.open) {
105 if (root.open) {
106 if (index === root.initialIndex) {
106 if (index === root.initialIndex) {
107− return root.initialIndexPreviewStack.getPreviewModel(0);
107+ return root.initialIndexPreviewStack;
108 } else {
108 } else {
109− var previewStack = root.scope.preview(result, root.categoryId);
109+ return root.scope.preview(result, root.categoryId);
110− return previewStack.getPreviewModel(0);
111 }
110 }
112 } else {
111 } else {
113 return null;
112 return null;
114 }
113 }
115 }
114 }
115+
116+ previewModel: {
117+ if (previewStack) {
118+ return previewStack.getPreviewModel(0);
119+ } else {
120+ return null;
121+ }
122+ }
123+
116 scopeStyle: root.scopeStyle
124 scopeStyle: root.scopeStyle
117 }
125 }
118 }
126 }
qml/Greeter/Infographics.qml+1−1
@@ -73,7 +73,7 @@ Item {
73 notification.hideAnim.start()
73 notification.hideAnim.start()
74 }
74 }
75
75
76− visible: model.label !== ""
76+ visible: model.username !== ""
77
77
78 Component.onCompleted: startShowAnimation()
78 Component.onCompleted: startShowAnimation()
79
79
qml/Notifications/Notification.qml+11−7
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2013,2015 Canonical, Ltd.
2+ * Copyright (C) 2013, 2015 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -18,12 +18,11 @@ import QtQuick 2.0
18import QtMultimedia 5.0
18import QtMultimedia 5.0
19import Powerd 0.1
19import Powerd 0.1
20import Ubuntu.Components 1.3
20import Ubuntu.Components 1.3
21+import Ubuntu.Components.ListItems 1.3 as ListItem
21import Unity.Notifications 1.0
22import Unity.Notifications 1.0
22import QMenuModel 0.1
23import QMenuModel 0.1
23import Utils 0.1
24import Utils 0.1
24
25
25−import Ubuntu.Components.ListItems 1.3 as ListItem
26−
27Item {
26Item {
28 id: notification
27 id: notification
29
28
@@ -49,6 +48,8 @@ Item {
49 readonly property color sdDarkGrey: "#dddddd"
48 readonly property color sdDarkGrey: "#dddddd"
50 readonly property color sdFontColor: "#5d5d5d"
49 readonly property color sdFontColor: "#5d5d5d"
51 readonly property real contentSpacing: units.gu(2)
50 readonly property real contentSpacing: units.gu(2)
51+ readonly property bool canBeClosed: type === Notification.Ephemeral
52+ property bool hasMouse
52
53
53 objectName: "background"
54 objectName: "background"
54 implicitHeight: type !== Notification.PlaceHolder ? (fullscreen ? maxHeight : outterColumn.height - shapedBack.anchors.topMargin + contentSpacing * 2) : 0
55 implicitHeight: type !== Notification.PlaceHolder ? (fullscreen ? maxHeight : outterColumn.height - shapedBack.anchors.topMargin + contentSpacing * 2) : 0
@@ -216,6 +217,8 @@ Item {
216 onClicked: {
217 onClicked: {
217 if (notification.type == Notification.Interactive) {
218 if (notification.type == Notification.Interactive) {
218 notification.notification.invokeAction(actionRepeater.itemAt(0).actionId)
219 notification.notification.invokeAction(actionRepeater.itemAt(0).actionId)
220+ } else if (hasMouse && canBeClosed) {
221+ notification.notification.close()
219 } else {
222 } else {
220 notificationList.currentIndex = index;
223 notificationList.currentIndex = index;
221 }
224 }
@@ -280,7 +283,7 @@ Item {
280 fontSize: "medium"
283 fontSize: "medium"
281 color: darkOnBright ? sdFontColor : theme.palette.selected.backgroundText
284 color: darkOnBright ? sdFontColor : theme.palette.selected.backgroundText
282 elide: Text.ElideRight
285 elide: Text.ElideRight
283− textFormat: Text.PlainText
286+ textFormat: Text.StyledText
284 }
287 }
285
288
286 Label {
289 Label {
@@ -297,7 +300,7 @@ Item {
297 wrapMode: Text.WordWrap
300 wrapMode: Text.WordWrap
298 maximumLineCount: type == Notification.SnapDecision ? 12 : 2
301 maximumLineCount: type == Notification.SnapDecision ? 12 : 2
299 elide: Text.ElideRight
302 elide: Text.ElideRight
300− textFormat: Text.PlainText
303+ textFormat: Text.StyledText
301 }
304 }
302 }
305 }
303
306
@@ -471,7 +474,7 @@ Item {
471 onClicked: notification.notification.invokeAction(oneOverTwoLoaderBottom.actionId)
474 onClicked: notification.notification.invokeAction(oneOverTwoLoaderBottom.actionId)
472 }
475 }
473 }
476 }
474− sourceComponent: (index == 1 || index == 2) ? oneOverTwoButtonBottom : undefined
477+ sourceComponent: (index == 1 || index == 2) ? oneOverTwoButtonBottom : undefined
475 }
478 }
476 }
479 }
477 }
480 }
@@ -487,7 +490,7 @@ Item {
487 margins: contentSpacing
490 margins: contentSpacing
488 }
491 }
489 visible: notification.type === Notification.SnapDecision && actionRepeater.count > 0 && !oneOverTwoCase.visible
492 visible: notification.type === Notification.SnapDecision && actionRepeater.count > 0 && !oneOverTwoCase.visible
490− spacing: units.gu(2)
493+ spacing: contentSpacing
491 layoutDirection: Qt.RightToLeft
494 layoutDirection: Qt.RightToLeft
492
495
493 Loader {
496 Loader {
@@ -499,6 +502,7 @@ Item {
499 width: buttonRow.width
502 width: buttonRow.width
500 leftIconName: "call-end"
503 leftIconName: "call-end"
501 rightIconName: "call-start"
504 rightIconName: "call-start"
505+ clickToAct: notification.hasMouse
502 onRightTriggered: {
506 onRightTriggered: {
503 notification.notification.invokeAction(notification.actions.data(0, ActionModel.RoleActionId))
507 notification.notification.invokeAction(notification.actions.data(0, ActionModel.RoleActionId))
504 }
508 }
qml/Notifications/Notifications.qml+3−1
@@ -28,6 +28,7 @@ ListView {
28
28
29 property real margin
29 property real margin
30 property bool useModal: snapDecisionProxyModel.count > 0
30 property bool useModal: snapDecisionProxyModel.count > 0
31+ property bool hasMouse
31
32
32 UnitySortFilterProxyModel {
33 UnitySortFilterProxyModel {
33 id: snapDecisionProxyModel
34 id: snapDecisionProxyModel
@@ -52,12 +53,13 @@ ListView {
52 secondaryIconSource: model.secondaryIcon
53 secondaryIconSource: model.secondaryIcon
53 summary: model.summary
54 summary: model.summary
54 body: model.body
55 body: model.body
55− value: model.value
56+ value: model.value ? model.value : -1
56 actions: model.actions
57 actions: model.actions
57 notificationId: model.id
58 notificationId: model.id
58 notification: notificationList.model.getRaw(notificationId)
59 notification: notificationList.model.getRaw(notificationId)
59 maxHeight: notificationList.height
60 maxHeight: notificationList.height
60 margins: notificationList.margin
61 margins: notificationList.margin
62+ hasMouse: notificationList.hasMouse
61
63
62 // make sure there's no opacity-difference between the several
64 // make sure there's no opacity-difference between the several
63 // elements in a notification
65 // elements in a notification
qml/Notifications/SwipeToAct.qml+37−2
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 20014-2015 Canonical, Ltd.
2+ * Copyright (C) 2014-2015 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -20,7 +20,7 @@ import Ubuntu.Components 1.3
20Item {
20Item {
21 id: swipeToAct
21 id: swipeToAct
22
22
23− height: childrenRect.height
23+ height: clickToAct ? leftButton.height : childrenRect.height
24
24
25 signal leftTriggered()
25 signal leftTriggered()
26 signal rightTriggered()
26 signal rightTriggered()
@@ -28,6 +28,8 @@ Item {
28 property string leftIconName
28 property string leftIconName
29 property string rightIconName
29 property string rightIconName
30
30
31+ property bool clickToAct
32+
31 QtObject {
33 QtObject {
32 id: priv
34 id: priv
33
35
@@ -64,15 +66,45 @@ Item {
64 }
66 }
65 }
67 }
66
68
69+ Button {
70+ id: leftButton
71+ objectName: "leftButton"
72+ anchors.verticalCenter: parent.verticalCenter
73+ anchors.left: parent.left
74+ iconName: leftIconName
75+ visible: clickToAct
76+ width: (parent.width / 2) - priv.gap
77+ color: UbuntuColors.red
78+ onClicked: {
79+ leftTriggered()
80+ }
81+ }
82+
83+ Button {
84+ id: rightButton
85+ objectName: "rightButton"
86+ anchors.verticalCenter: parent.verticalCenter
87+ anchors.right: parent.right
88+ iconName: rightIconName
89+ visible: clickToAct
90+ width: (parent.width / 2) - priv.gap
91+ color: UbuntuColors.green
92+ onClicked: {
93+ rightTriggered()
94+ }
95+ }
96+
67 UbuntuShape {
97 UbuntuShape {
68 id: row
98 id: row
69 width: parent.width
99 width: parent.width
70 height: priv.sliderHeight
100 height: priv.sliderHeight
71 color: priv.sliderBGColor
101 color: priv.sliderBGColor
72 borderSource: "none"
102 borderSource: "none"
103+ visible: !clickToAct
73
104
74 UbuntuShape {
105 UbuntuShape {
75 id: leftShape
106 id: leftShape
107+ objectName: "leftArea"
76 anchors.top: parent.top
108 anchors.top: parent.top
77 anchors.left: parent.left
109 anchors.left: parent.left
78 anchors.margins: priv.gap
110 anchors.margins: priv.gap
@@ -167,6 +199,7 @@ Item {
167 color: "white"
199 color: "white"
168 }
200 }
169 }
201 }
202+
170 Row {
203 Row {
171 anchors.verticalCenter: parent.verticalCenter
204 anchors.verticalCenter: parent.verticalCenter
172 anchors.left: slider.right
205 anchors.left: slider.right
@@ -189,6 +222,7 @@ Item {
189
222
190 UbuntuShape {
223 UbuntuShape {
191 id: rightShape
224 id: rightShape
225+ objectName: "rightArea"
192 anchors.top: parent.top
226 anchors.top: parent.top
193 anchors.right: parent.right
227 anchors.right: parent.right
194 anchors.margins: priv.gap
228 anchors.margins: priv.gap
@@ -214,6 +248,7 @@ Item {
214 MouseArea {
248 MouseArea {
215 id: mouseArea
249 id: mouseArea
216 objectName: "swipeMouseArea"
250 objectName: "swipeMouseArea"
251+ enabled: !clickToAct
217
252
218 anchors.fill: row
253 anchors.fill: row
219 drag.target: slider
254 drag.target: slider
qml/OrientedShell.qml+1
@@ -155,6 +155,7 @@ Rectangle {
155 nativeWidth: root.width
155 nativeWidth: root.width
156 nativeHeight: root.height
156 nativeHeight: root.height
157 mode: applicationArguments.mode
157 mode: applicationArguments.mode
158+ hasMouse: UnityInputInfo.mice > deviceConfiguration.ignoredMice
158
159
159 // TODO: Factor in the connected input devices (eg: physical keyboard, mouse, touchscreen),
160 // TODO: Factor in the connected input devices (eg: physical keyboard, mouse, touchscreen),
160 // what's the output device (eg: big TV, desktop monitor, phone display), etc.
161 // what's the output device (eg: big TV, desktop monitor, phone display), etc.
qml/Panel/IndicatorItem.qml+1−1
@@ -243,7 +243,7 @@ IndicatorDelegate {
243 return;
243 return;
244 }
244 }
245
245
246− title = rootActionState.title ? rootActionState.title : "";
246+ title = rootActionState.title ? rootActionState.title : rootActionState.accessibleName;
247 leftLabel = rootActionState.leftLabel ? rootActionState.leftLabel : "";
247 leftLabel = rootActionState.leftLabel ? rootActionState.leftLabel : "";
248 rightLabel = rootActionState.rightLabel ? rootActionState.rightLabel : "";
248 rightLabel = rootActionState.rightLabel ? rootActionState.rightLabel : "";
249 icons = rootActionState.icons;
249 icons = rootActionState.icons;
qml/Panel/IndicatorPage.qml+1−1
@@ -23,7 +23,7 @@ IndicatorBase {
23 id: main
23 id: main
24
24
25 //const
25 //const
26− property string title: rootActionState.title
26+ property string title: rootActionState.title || rootActionState.accessibleName // some indicators don't expose a title but only the accessible-desc
27 property alias highlightFollowsCurrentItem : mainMenu.highlightFollowsCurrentItem
27 property alias highlightFollowsCurrentItem : mainMenu.highlightFollowsCurrentItem
28 readonly property alias factory: _factory
28 readonly property alias factory: _factory
29
29
qml/Panel/Indicators/IndicatorDelegate.qml+1−1
@@ -21,5 +21,5 @@ import QtQuick 2.0
21
21
22IndicatorBase {
22IndicatorBase {
23 readonly property bool indicatorVisible: rootActionState.indicatorVisible
23 readonly property bool indicatorVisible: rootActionState.indicatorVisible
24− readonly property string title: rootActionState.title
24+ readonly property string title: rootActionState.title || rootActionState.accessibleName
25}
25}
qml/Panel/Indicators/MenuItemFactory.qml+91−3
@@ -12,9 +12,6 @@
12 *
12 *
13 * You should have received a copy of the GNU Lesser General Public License
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/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Nick Dedekind <nick.dedekind@canonical.com>
18 */
15 */
19
16
20import QtQuick 2.0
17import QtQuick 2.0
@@ -24,6 +21,7 @@ import QMenuModel 0.1
24import Utils 0.1 as Utils
21import Utils 0.1 as Utils
25import Ubuntu.Components.ListItems 1.3 as ListItems
22import Ubuntu.Components.ListItems 1.3 as ListItems
26import Ubuntu.Components 1.3
23import Ubuntu.Components 1.3
24+import Unity.Session 0.1
27
25
28Item {
26Item {
29 id: menuFactory
27 id: menuFactory
@@ -60,6 +58,12 @@ Item {
60 "unity.widgets.systemsettings.tablet.wifisection" : wifiSection,
58 "unity.widgets.systemsettings.tablet.wifisection" : wifiSection,
61 "unity.widgets.systemsettings.tablet.accesspoint" : accessPoint,
59 "unity.widgets.systemsettings.tablet.accesspoint" : accessPoint,
62 "com.canonical.indicator.network.modeminfoitem" : modeminfoitem,
60 "com.canonical.indicator.network.modeminfoitem" : modeminfoitem,
61+
62+ "com.canonical.indicator.calendar": calendarMenu,
63+ "com.canonical.indicator.location": timezoneMenu,
64+
65+ "indicator.user-menu-item": userMenuItem,
66+ "indicator.guest-menu-item": userMenuItem
63 },
67 },
64 "indicator-messages" : {
68 "indicator-messages" : {
65 "com.canonical.indicator.button" : messagesButtonMenu
69 "com.canonical.indicator.button" : messagesButtonMenu
@@ -422,6 +426,90 @@ Item {
422 }
426 }
423 }
427 }
424
428
429+ Component {
430+ id: userMenuItem
431+
432+ Menus.UserSessionMenu {
433+ objectName: "userSessionMenu"
434+ highlightWhenPressed: false
435+
436+ property QtObject menuData: null
437+ property var menuModel: menuFactory.menuModel
438+ property int menuIndex: -1
439+
440+ name: menuData && menuData.label || "" // label is the user's real name
441+ iconSource: menuData && menuData.icon || ""
442+
443+ // would be better to compare with the logname but sadly the indicator doesn't expose that
444+ active: DBusUnitySessionService.RealName() !== "" ? DBusUnitySessionService.RealName() == name
445+ : DBusUnitySessionService.UserName() == name
446+
447+ onTriggered: {
448+ menuModel.activate(menuIndex);
449+ }
450+ }
451+ }
452+
453+ Component {
454+ id: calendarMenu
455+
456+ Menus.CalendarMenu {
457+ objectName: "calendarMenu"
458+ highlightWhenPressed: false
459+ focus: true
460+ }
461+ }
462+
463+ Component {
464+ id: timezoneMenu
465+
466+ Menus.TimeZoneMenu {
467+ id: tzMenuItem
468+ objectName: "timezoneMenu"
469+
470+ property QtObject menuData: null
471+ property var menuModel: menuFactory.menuModel
472+ property int menuIndex: -1
473+ property var extendedData: menuData && menuData.ext || undefined
474+ readonly property string tz: getExtendedProperty(extendedData, "xCanonicalTimezone", "UTC")
475+ property var updateTimer: Timer {
476+ repeat: true
477+ running: tzMenuItem.visible // only run when we're open
478+ onTriggered: tzMenuItem.time = Utils.TimezoneFormatter.currentTimeInTimezone(tzMenuItem.tz)
479+ }
480+
481+ city: menuData && menuData.label || ""
482+ time: Utils.TimezoneFormatter.currentTimeInTimezone(tz)
483+ enabled: menuData && menuData.sensitive || false
484+
485+ onMenuModelChanged: {
486+ loadAttributes();
487+ }
488+ onMenuIndexChanged: {
489+ loadAttributes();
490+ }
491+ onTriggered: {
492+ tzActionGroup.setLocation.activate(tz);
493+ }
494+
495+ QDBusActionGroup {
496+ id: tzActionGroup
497+ busType: DBus.SessionBus
498+ busName: "com.canonical.indicator.datetime"
499+ objectPath: "/com/canonical/indicator/datetime"
500+
501+ property variant setLocation: action("set-location")
502+
503+ Component.onCompleted: tzActionGroup.start()
504+ }
505+
506+ function loadAttributes() {
507+ if (!menuModel || menuIndex == -1) return;
508+ menuModel.loadExtendedAttributes(menuIndex, {'x-canonical-timezone': 'string'});
509+ }
510+ }
511+ }
512+
425 Component {
513 Component {
426 id: wifiSection;
514 id: wifiSection;
427
515
qml/Panel/Indicators/MessageMenuItemFactory.qml+1−1
@@ -145,7 +145,7 @@ Loader {
145 title: menuData && menuData.label || ""
145 title: menuData && menuData.label || ""
146 time: timeFormatter.timeString
146 time: timeFormatter.timeString
147 body: getExtendedProperty(extendedData, "xCanonicalText", "")
147 body: getExtendedProperty(extendedData, "xCanonicalText", "")
148− replyButtonText: getExtendedProperty(replyActionDescription, "label", "Send")
148+ replyButtonText: getExtendedProperty(replyActionDescription, "label", i18n.tr("Send"))
149 replyHintText: i18n.ctr("Label: Hint in message indicator line edit", "Reply")
149 replyHintText: i18n.ctr("Label: Hint in message indicator line edit", "Reply")
150 // icons
150 // icons
151 avatar: getExtendedProperty(extendedData, "icon", "image://theme/contact")
151 avatar: getExtendedProperty(extendedData, "icon", "image://theme/contact")
qml/Panel/Indicators/client/IndicatorRepresentation.qml+3−1
@@ -26,7 +26,9 @@ import "../.."
26Page {
26Page {
27 id: root
27 id: root
28
28
29− title: indicatorProperties && indicatorProperties.title ? indicatorProperties.title : ""
29+ title: indicatorProperties && indicatorProperties.title ? indicatorProperties.title :
30+ indicatorProperties && indicatorProperties.accessibleName ? indicatorProperties.accessibleName
31+ : ""
30 property variant indicatorProperties
32 property variant indicatorProperties
31
33
32 anchors.fill: parent
34 anchors.fill: parent
qml/Shell.qml+2
@@ -63,6 +63,7 @@ Item {
63 function updateFocusedAppOrientationAnimated() {
63 function updateFocusedAppOrientationAnimated() {
64 applicationsDisplayLoader.item.updateFocusedAppOrientationAnimated();
64 applicationsDisplayLoader.item.updateFocusedAppOrientationAnimated();
65 }
65 }
66+ property bool hasMouse
66
67
67 // to be read from outside
68 // to be read from outside
68 readonly property int mainAppWindowOrientationAngle:
69 readonly property int mainAppWindowOrientationAngle:
@@ -636,6 +637,7 @@ Item {
636
637
637 model: NotificationBackend.Model
638 model: NotificationBackend.Model
638 margin: units.gu(1)
639 margin: units.gu(1)
640+ hasMouse: shell.hasMouse
639
641
640 y: topmostIsFullscreen ? 0 : panel.panelHeight
642 y: topmostIsFullscreen ? 0 : panel.panelHeight
641 height: parent.height - (topmostIsFullscreen ? 0 : panel.panelHeight)
643 height: parent.height - (topmostIsFullscreen ? 0 : panel.panelHeight)
qml/Stages/ApplicationWindow.qml+3
@@ -20,6 +20,8 @@ import Unity.Application 0.1
20
20
21FocusScope {
21FocusScope {
22 id: root
22 id: root
23+ implicitWidth: sessionContainer.implicitWidth
24+ implicitHeight: sessionContainer.implicitHeight
23
25
24 // to be read from outside
26 // to be read from outside
25 readonly property bool fullscreen: application ? application.fullscreen : false
27 readonly property bool fullscreen: application ? application.fullscreen : false
@@ -29,6 +31,7 @@ FocusScope {
29 // to be set from outside
31 // to be set from outside
30 property QtObject application
32 property QtObject application
31 property int surfaceOrientationAngle
33 property int surfaceOrientationAngle
34+ property alias resizeSurface: sessionContainer.resizeSurface
32
35
33 QtObject {
36 QtObject {
34 id: d
37 id: d
qml/Stages/DecoratedWindow.qml+10−51
@@ -31,37 +31,10 @@ FocusScope {
31 property bool highlightShown: false
31 property bool highlightShown: false
32 property real shadowOpacity: 1
32 property real shadowOpacity: 1
33
33
34− property int windowWidth: width
35− property int windowHeight: height
36−
37 signal close();
34 signal close();
38 signal maximize();
35 signal maximize();
39 signal minimize();
36 signal minimize();
40
37
41− state: "normal"
42− states: [
43− State {
44− name: "normal"
45− PropertyChanges {
46− target: root
47− width: windowWidth
48− height: windowHeight
49− }
50− },
51− State {
52− name: "transformed"
53− PropertyChanges {
54− target: applicationWindow
55− itemScale: Math.max(root.width / root.windowWidth, root.height / root.windowHeight)
56− interactive: false
57− }
58− PropertyChanges {
59− target: clipper
60− clip: true
61− }
62− }
63− ]
64−
65 BorderImage {
38 BorderImage {
66 anchors {
39 anchors {
67 fill: root
40 fill: root
@@ -98,29 +71,15 @@ FocusScope {
98 visible: decorationShown
71 visible: decorationShown
99 }
72 }
100
73
101− Item {
102− id: clipper
103− anchors.fill: parent
104−
105− ApplicationWindow {
74+ ApplicationWindow {
106− id: applicationWindow
75+ id: applicationWindow
107− objectName: application ? "appWindow_" + application.appId : "appWindow_null"
76+ objectName: application ? "appWindow_" + application.appId : "appWindow_null"
108− anchors.top: parent.top
77+ anchors.top: parent.top
109− anchors.topMargin: root.decorationShown ? decoration.height : 0
78+ anchors.topMargin: decoration.height
110− anchors.left: parent.left
79+ anchors.left: parent.left
111− width: root.windowWidth
80+ width: root.width
112− height: root.windowHeight - (root.decorationShown ? decoration.height : 0)
81+ height: root.height - decoration.height
113− interactive: true
82+ interactive: true
114− focus: true
83+ focus: true
115−
116− property real itemScale: 1
117− transform: [
118− Scale {
119− origin.x: 0; origin.y: 0
120− xScale: applicationWindow.itemScale
121− yScale: applicationWindow.itemScale
122− }
123− ]
124− }
125 }
84 }
126}
85}
qml/Stages/DesktopSpread.qmlnew file+537
@@ -0,0 +1,537 @@
1+/*
2+ * Copyright (C) 2015 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.4
18+import QtQuick.Layouts 1.1
19+import Ubuntu.Components 1.3
20+import Ubuntu.Gestures 0.1
21+import Unity.Application 0.1
22+
23+FocusScope {
24+ id: root
25+
26+ property bool altTabPressed: false
27+ property Item workspace: null
28+
29+ readonly property alias highlightedIndex: spreadRepeater.highlightedIndex
30+
31+ onFocusChanged: {
32+ // When the spread comes active, we want to keep focus to the input handler below
33+ // Make sure nothing inside the ApplicationWindow grabs our focus!
34+ if (focus) {
35+ forceActiveFocus();
36+ }
37+ }
38+
39+ Keys.onPressed: {
40+ switch (event.key) {
41+ case Qt.Key_Left:
42+ case Qt.Key_Backtab:
43+ selectPrevious(event.isAutoRepeat)
44+ event.accepted = true;
45+ break;
46+ case Qt.Key_Right:
47+ case Qt.Key_Tab:
48+ selectNext(event.isAutoRepeat)
49+ event.accepted = true;
50+ break;
51+ case Qt.Key_Escape:
52+ spreadRepeater.highlightedIndex = -1
53+ // Falling through intentionally
54+ case Qt.Key_Enter:
55+ case Qt.Key_Return:
56+ case Qt.Key_Space:
57+ root.state = ""
58+ event.accepted = true;
59+ }
60+ }
61+
62+ function selectNext(isAutoRepeat) {
63+ if (isAutoRepeat && spreadRepeater.highlightedIndex >= ApplicationManager.count -1) {
64+ return; // AutoRepeat is not allowed to wrap around
65+ }
66+
67+ spreadRepeater.highlightedIndex = (spreadRepeater.highlightedIndex + 1) % ApplicationManager.count;
68+ var newContentX = ((spreadFlickable.contentWidth) / (ApplicationManager.count + 1)) * Math.max(0, Math.min(ApplicationManager.count - 5, spreadRepeater.highlightedIndex - 3));
69+ if (spreadFlickable.contentX < newContentX || spreadRepeater.highlightedIndex == 0) {
70+ spreadFlickable.snapTo(newContentX)
71+ }
72+ }
73+
74+ function selectPrevious(isAutoRepeat) {
75+ if (isAutoRepeat && spreadRepeater.highlightedIndex == 0) {
76+ return; // AutoRepeat is not allowed to wrap around
77+ }
78+
79+ var newIndex = spreadRepeater.highlightedIndex - 1 >= 0 ? spreadRepeater.highlightedIndex - 1 : ApplicationManager.count - 1;
80+ spreadRepeater.highlightedIndex = newIndex;
81+ var newContentX = ((spreadFlickable.contentWidth) / (ApplicationManager.count + 1)) * Math.max(0, Math.min(ApplicationManager.count - 5, spreadRepeater.highlightedIndex - 1));
82+ if (spreadFlickable.contentX > newContentX || newIndex == ApplicationManager.count -1) {
83+ spreadFlickable.snapTo(newContentX)
84+ }
85+ }
86+
87+ function focusSelected() {
88+ if (spreadRepeater.highlightedIndex != -1) {
89+ var application = ApplicationManager.get(spreadRepeater.highlightedIndex);
90+ ApplicationManager.focusApplication(application.appId);
91+ }
92+ }
93+
94+ function cancel() {
95+ spreadRepeater.highlightedIndex = -1;
96+ state = ""
97+ }
98+
99+ Item {
100+ id: spreadContainer
101+ objectName: "spreadContainer"
102+ anchors.fill: parent
103+ visible: false
104+
105+ property bool animateIn: false
106+
107+ Repeater {
108+ id: spreadRepeater
109+ objectName: "spreadRepeater"
110+ model: ApplicationManager
111+
112+ property int highlightedIndex: -1
113+ property int closingIndex: -1
114+
115+ function indexOf(delegateItem) {
116+ for (var i = 0; i < spreadRepeater.count; i++) {
117+ if (spreadRepeater.itemAt(i) === delegateItem) {
118+ return i;
119+ }
120+ }
121+ return -1;
122+ }
123+
124+ delegate: Item {
125+ id: spreadDelegate
126+ objectName: "spreadDelegate"
127+ width: units.gu(20)
128+ height: units.gu(20)
129+
130+ property real angle: 0
131+ property real itemScale: 1
132+ property int itemScaleOriginX: 0
133+ property int itemScaleOriginY: 0
134+
135+ Behavior on x {
136+ id: closeBehavior
137+ enabled: spreadRepeater.closingIndex >= 0
138+ UbuntuNumberAnimation {
139+ onRunningChanged: if (!running) spreadRepeater.closingIndex = -1
140+ }
141+ }
142+
143+ DesktopSpreadDelegate {
144+ id: clippedSpreadDelegate
145+ objectName: "clippedSpreadDelegate"
146+ anchors.left: parent.left
147+ anchors.top: parent.top
148+ application: ApplicationManager.get(index)
149+ width: spreadMaths.spreadHeight
150+ height: spreadMaths.spreadHeight
151+
152+ transform: [
153+ Scale {
154+ origin.x: itemScaleOriginX
155+ origin.y: itemScaleOriginY
156+ xScale: itemScale
157+ yScale: itemScale
158+ },
159+ Rotation {
160+ origin { x: 0; y: (clippedSpreadDelegate.height - (clippedSpreadDelegate.height * itemScale / 2)) }
161+ axis { x: 0; y: 1; z: 0 }
162+ angle: spreadDelegate.angle
163+ }
164+ ]
165+
166+ MouseArea {
167+ id: spreadSelectArea
168+ anchors.fill: parent
169+ anchors.margins: -units.gu(2)
170+ enabled: false
171+ onClicked: {
172+ spreadRepeater.highlightedIndex = index;
173+ root.state = "";
174+ }
175+ }
176+ }
177+
178+ SpreadMaths {
179+ id: spreadMaths
180+ flickable: spreadFlickable
181+ itemIndex: index
182+ totalItems: Math.max(6, ApplicationManager.count)
183+ sceneHeight: root.height
184+ itemHeight: spreadDelegate.height
185+ }
186+
187+ states: [
188+ State {
189+ name: "altTab"; when: root.state == "altTab" && spreadContainer.visible
190+ PropertyChanges {
191+ target: spreadDelegate
192+ x: spreadMaths.animatedX
193+ y: spreadMaths.animatedY + (spreadDelegate.height - clippedSpreadDelegate.height) - units.gu(2)
194+ width: spreadMaths.spreadHeight
195+ height: spreadMaths.sceneHeight
196+ angle: spreadMaths.animatedAngle
197+ itemScale: spreadMaths.scale
198+ itemScaleOriginY: clippedSpreadDelegate.height / 2;
199+ z: index
200+ visible: spreadMaths.itemVisible
201+ }
202+ PropertyChanges {
203+ target: clippedSpreadDelegate
204+ highlightShown: index == spreadRepeater.highlightedIndex
205+ state: "transformed"
206+ shadowOpacity: spreadMaths.shadowOpacity
207+ anchors.topMargin: units.gu(2)
208+ }
209+ PropertyChanges {
210+ target: tileInfo
211+ visible: true
212+ opacity: spreadMaths.tileInfoOpacity
213+ }
214+ PropertyChanges {
215+ target: spreadSelectArea
216+ enabled: true
217+ }
218+ }
219+ ]
220+ transitions: [
221+ Transition {
222+ from: ""
223+ to: "altTab"
224+ PropertyAction { target: spreadDelegate; properties: "y,height,width,angle,z,itemScale,itemScaleOriginY,visible" }
225+ PropertyAction { target: clippedSpreadDelegate; properties: "anchors.topMargin" }
226+ PropertyAnimation {
227+ target: spreadDelegate; properties: "x"
228+ from: root.width
229+ duration: spreadContainer.animateIn ? UbuntuAnimation.FastDuration :0
230+ easing: UbuntuAnimation.StandardEasing
231+ }
232+ }
233+ ]
234+
235+ MouseArea {
236+ id: tileInfo
237+ objectName: "tileInfo"
238+ anchors { left: parent.left; top: clippedSpreadDelegate.bottom; topMargin: units.gu(5) }
239+ property int nextItemX: spreadRepeater.count > index + 1 ? spreadRepeater.itemAt(index + 1).x : spreadDelegate.x + units.gu(30)
240+ width: Math.min(units.gu(30), nextItemX - spreadDelegate.x)
241+ height: titleInfoColumn.height
242+ visible: false
243+ hoverEnabled: true
244+
245+ onContainsMouseChanged: {
246+ if (containsMouse) {
247+ spreadRepeater.highlightedIndex = index
248+ }
249+ }
250+
251+ onClicked: {
252+ root.state = ""
253+ }
254+
255+ ColumnLayout {
256+ id: titleInfoColumn
257+ anchors { left: parent.left; top: parent.top; right: parent.right }
258+ spacing: units.gu(1)
259+
260+ UbuntuShape {
261+ Layout.preferredHeight: Math.min(units.gu(6), root.height * .05)
262+ Layout.preferredWidth: height * 8 / 7.6
263+ image: Image {
264+ anchors.fill: parent
265+ source: model.icon
266+ }
267+ }
268+ Label {
269+ Layout.fillWidth: true
270+ Layout.preferredHeight: units.gu(6)
271+ text: model.name
272+ wrapMode: Text.WordWrap
273+ elide: Text.ElideRight
274+ maximumLineCount: 2
275+ }
276+ }
277+ }
278+
279+ Image {
280+ id: closeImage
281+ anchors { left: parent.left; top: parent.top; leftMargin: -height / 2; topMargin: -height / 2 + spreadMaths.closeIconOffset + units.gu(2) }
282+ source: "graphics/window-close.svg"
283+ readonly property var mousePos: hoverMouseArea.mapToItem(spreadDelegate, hoverMouseArea.mouseX, hoverMouseArea.mouseY)
284+ visible: index == spreadRepeater.highlightedIndex
285+ && mousePos.y < (clippedSpreadDelegate.height / 3)
286+ && mousePos.y > -units.gu(4)
287+ && mousePos.x > -units.gu(4)
288+ && mousePos.x < (clippedSpreadDelegate.width * 2 / 3)
289+ height: units.gu(1.5)
290+ width: height
291+ sourceSize.width: width
292+ sourceSize.height: height
293+
294+ MouseArea {
295+ id: closeMouseArea
296+ objectName: "closeMouseArea"
297+ anchors.fill: closeImage
298+ anchors.margins: -units.gu(2)
299+ onClicked: {
300+ spreadRepeater.closingIndex = index;
301+ ApplicationManager.stopApplication(model.appId)
302+ }
303+ }
304+ }
305+ }
306+ }
307+ }
308+
309+
310+ MouseArea {
311+ id: hoverMouseArea
312+ objectName: "hoverMouseArea"
313+ anchors.fill: spreadContainer
314+ propagateComposedEvents: true
315+ hoverEnabled: true
316+ enabled: false
317+ visible: enabled
318+
319+ property int scrollAreaWidth: root.width / 3
320+ property bool progressiveScrollingEnabled: false
321+
322+ onMouseXChanged: {
323+ mouse.accepted = false
324+
325+ if (hoverMouseArea.pressed) {
326+ return;
327+ }
328+
329+ // Find the hovered item and mark it active
330+ var mapped = mapToItem(spreadContainer, hoverMouseArea.mouseX, hoverMouseArea.mouseY)
331+ var itemUnder = spreadContainer.childAt(mapped.x, mapped.y)
332+ if (itemUnder) {
333+ mapped = mapToItem(itemUnder, hoverMouseArea.mouseX, hoverMouseArea.mouseY)
334+ var delegateChild = itemUnder.childAt(mapped.x, mapped.y)
335+ if (delegateChild && (delegateChild.objectName === "clippedSpreadDelegate" || delegateChild.objectName === "tileInfo")) {
336+ spreadRepeater.highlightedIndex = spreadRepeater.indexOf(itemUnder)
337+ }
338+ }
339+
340+ if (spreadFlickable.contentWidth > spreadFlickable.minContentWidth) {
341+ var margins = spreadFlickable.width * 0.05;
342+
343+ if (!progressiveScrollingEnabled && mouseX < spreadFlickable.width - scrollAreaWidth) {
344+ progressiveScrollingEnabled = true
345+ }
346+
347+ // do we need to scroll?
348+ if (mouseX < scrollAreaWidth + margins) {
349+ var progress = Math.min(1, (scrollAreaWidth + margins - mouseX) / (scrollAreaWidth - margins));
350+ var contentX = (1 - progress) * (spreadFlickable.contentWidth - spreadFlickable.width)
351+ spreadFlickable.contentX = Math.max(0, Math.min(spreadFlickable.contentX, contentX))
352+ }
353+ if (mouseX > spreadFlickable.width - scrollAreaWidth && progressiveScrollingEnabled) {
354+ var progress = Math.min(1, (mouseX - (spreadFlickable.width - scrollAreaWidth)) / (scrollAreaWidth - margins))
355+ var contentX = progress * (spreadFlickable.contentWidth - spreadFlickable.width)
356+ spreadFlickable.contentX = Math.min(spreadFlickable.contentWidth - spreadFlickable.width, Math.max(spreadFlickable.contentX, contentX))
357+ }
358+ }
359+ }
360+ onPressed: mouse.accepted = false
361+ }
362+
363+ FloatingFlickable {
364+ id: spreadFlickable
365+ objectName: "spreadFlickable"
366+ anchors.fill: parent
367+ property int minContentWidth: 6 * Math.min(height / 4, width / 5)
368+ contentWidth: Math.max(6, ApplicationManager.count) * Math.min(height / 4, width / 5)
369+ enabled: false
370+
371+ function snapTo(contentX) {
372+ snapAnimation.stop();
373+ snapAnimation.to = contentX
374+ snapAnimation.start();
375+ }
376+
377+ UbuntuNumberAnimation {
378+ id: snapAnimation
379+ target: spreadFlickable
380+ property: "contentX"
381+ }
382+ }
383+
384+ Item {
385+ id: workspaceSelector
386+ anchors {
387+ left: parent.left
388+ top: parent.top
389+ right: parent.right
390+ topMargin: units.gu(3.5)
391+ }
392+ height: root.height * 0.25
393+ visible: false
394+
395+ RowLayout {
396+ anchors.fill: parent
397+ spacing: units.gu(1)
398+ Item { Layout.fillWidth: true }
399+ Repeater {
400+ model: 1 // TODO: will be a workspacemodel in the future
401+ Item {
402+ Layout.fillHeight: true
403+ Layout.preferredWidth: ((height - units.gu(6)) * root.width / root.height)
404+ Image {
405+ source: root.background
406+ anchors {
407+ left: parent.left
408+ right: parent.right
409+ verticalCenter: parent.verticalCenter
410+ }
411+ height: parent.height * 0.75
412+
413+ ShaderEffect {
414+ anchors.fill: parent
415+
416+ property var source: ShaderEffectSource {
417+ id: shaderEffectSource
418+ sourceItem: appContainer
419+ }
420+
421+ fragmentShader: "
422+ varying highp vec2 qt_TexCoord0;
423+ uniform sampler2D source;
424+ void main(void)
425+ {
426+ highp vec4 sourceColor = texture2D(source, qt_TexCoord0);
427+ gl_FragColor = sourceColor;
428+ }"
429+ }
430+ }
431+
432+ // TODO: This is the bar for the currently selected workspace
433+ // Enable this once the workspace stuff is implemented
434+ // Rectangle {
435+ // anchors { left: parent.left; right: parent.right; bottom: parent.bottom }
436+ // height: units.dp(2)
437+ // color: UbuntuColors.orange
438+ // visible: index == 0 // TODO: should be active workspace index
439+ // }
440+ }
441+
442+ }
443+ // TODO: This is the "new workspace" button. Enable this once workspaces are implemented
444+ // Item {
445+ // Layout.fillHeight: true
446+ // Layout.preferredWidth: ((height - units.gu(6)) * root.width / root.height)
447+ // Rectangle {
448+ // anchors {
449+ // left: parent.left
450+ // right: parent.right
451+ // verticalCenter: parent.verticalCenter
452+ // }
453+ // height: parent.height * 0.75
454+ // color: "#22ffffff"
455+
456+ // Label {
457+ // anchors.centerIn: parent
458+ // font.pixelSize: parent.height / 2
459+ // text: "+"
460+ // }
461+ // }
462+ // }
463+ Item { Layout.fillWidth: true }
464+ }
465+ }
466+
467+ Label {
468+ id: currentSelectedLabel
469+ anchors { bottom: parent.bottom; bottomMargin: root.height * 0.625; horizontalCenter: parent.horizontalCenter }
470+ text: spreadRepeater.highlightedIndex >= 0 ? ApplicationManager.get(spreadRepeater.highlightedIndex).name : ""
471+ visible: false
472+ fontSize: "large"
473+ }
474+
475+ states: [
476+ State {
477+ name: "altTab"; when: root.altTabPressed
478+ PropertyChanges { target: blurLayer; saturation: 0.8; blurRadius: 60; visible: true }
479+ PropertyChanges { target: workspaceSelector; visible: true }
480+ PropertyChanges { target: spreadContainer; visible: true }
481+ PropertyChanges { target: spreadFlickable; enabled: spreadFlickable.contentWidth > spreadFlickable.minContentWidth }
482+ PropertyChanges { target: currentSelectedLabel; visible: true }
483+ PropertyChanges { target: spreadBackground; visible: true }
484+ PropertyChanges { target: hoverMouseArea; enabled: true }
485+ }
486+ ]
487+ transitions: [
488+ Transition {
489+ from: "*"
490+ to: "altTab"
491+ SequentialAnimation {
492+ PropertyAction { target: hoverMouseArea; property: "progressiveScrollingEnabled"; value: false }
493+ PropertyAction { target: spreadRepeater; property: "highlightedIndex"; value: Math.min(ApplicationManager.count - 1, 1) }
494+ PauseAnimation { duration: 140 }
495+ PropertyAction { target: workspaceSelector; property: "visible" }
496+ PropertyAction { target: spreadContainer; property: "visible" }
497+ ParallelAnimation {
498+ UbuntuNumberAnimation {
499+ target: blurLayer; properties: "saturation,blurRadius";
500+ duration: spreadContainer.animateIn ? UbuntuAnimation.FastDuration : 0
501+ }
502+ PropertyAction { target: spreadFlickable; property: "visible" }
503+ PropertyAction { targets: [currentSelectedLabel,spreadBackground]; property: "visible" }
504+ PropertyAction { target: spreadFlickable; property: "contentX"; value: 0 }
505+ }
506+ }
507+ },
508+ Transition {
509+ from: "*"
510+ to: "*"
511+ PropertyAnimation { property: "opacity" }
512+ ScriptAction { script: { root.focusSelected() } }
513+ PropertyAction { target: spreadRepeater; property: "highlightedIndex"; value: -1 }
514+ PropertyAction { target: spreadContainer; property: "animateIn"; value: false }
515+ }
516+
517+ ]
518+
519+ MouseArea {
520+ id: rightEdgePushArea
521+ anchors {
522+ top: parent.top
523+ right: parent.right
524+ bottom: parent.bottom
525+ }
526+ // TODO: Make this a push to edge thing like the launcher when we can,
527+ // for now, yes, we want 1 pixel, regardless of the scaling
528+ width: 1
529+ hoverEnabled: true
530+ onContainsMouseChanged: {
531+ if (containsMouse) {
532+ spreadContainer.animateIn = true;
533+ root.state = "altTab";
534+ }
535+ }
536+ }
537+}
qml/Stages/DesktopSpreadDelegate.qmlnew file+111
@@ -0,0 +1,111 @@
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+ * Authors: Michael Zanetti <michael.zanetti@canonical.com>
17+ */
18+
19+import QtQuick 2.3
20+import Ubuntu.Components 1.3
21+import Unity.Application 0.1
22+
23+Item {
24+ id: root
25+
26+ property alias window: applicationWindow
27+ property alias application: applicationWindow.application
28+
29+ property bool highlightShown: false
30+ property real shadowOpacity: 1
31+
32+ property int windowWidth: application.session && application.session.surface ? application.session.surface.size.width : 0
33+ property int windowHeight: application.session && application.session.surface ? application.session.surface.size.height : 0
34+
35+ state: "normal"
36+ states: [
37+ State {
38+ name: "normal"
39+ PropertyChanges {
40+ target: root
41+ width: windowWidth
42+ height: windowHeight
43+ }
44+ },
45+ State {
46+ name: "transformed"
47+ PropertyChanges {
48+ target: applicationWindow
49+ itemScale: Math.max(root.width / root.windowWidth, root.height / root.windowHeight)
50+ interactive: false
51+ }
52+ PropertyChanges {
53+ target: clipper
54+ clip: true
55+ }
56+ }
57+ ]
58+
59+ BorderImage {
60+ anchors {
61+ fill: root
62+ margins: -units.gu(2)
63+ }
64+ source: "graphics/dropshadow2gu.sci"
65+ opacity: root.shadowOpacity * .3
66+ }
67+
68+ Rectangle {
69+ id: selectionHighlight
70+ anchors.fill: parent
71+ anchors.margins: -units.gu(1)
72+ color: "white"
73+ opacity: highlightShown ? 0.15 : 0
74+ antialiasing: true
75+ }
76+
77+ Rectangle {
78+ anchors { left: selectionHighlight.left; right: selectionHighlight.right; bottom: selectionHighlight.bottom; }
79+ height: units.dp(2)
80+ color: UbuntuColors.orange
81+ visible: root.highlightShown
82+ antialiasing: true
83+ }
84+
85+ Item {
86+ id: clipper
87+ anchors.fill: parent
88+
89+ ApplicationWindow {
90+ id: applicationWindow
91+ objectName: application ? "appWindow_" + application.appId : "appWindow_null"
92+ anchors.top: parent.top
93+ anchors.topMargin: 0
94+ anchors.left: parent.left
95+ width: root.windowWidth
96+ height: root.windowHeight
97+ interactive: false
98+ resizeSurface: false
99+ focus: false
100+
101+ property real itemScale: 1
102+ transform: [
103+ Scale {
104+ origin.x: 0; origin.y: 0
105+ xScale: applicationWindow.itemScale
106+ yScale: applicationWindow.itemScale
107+ }
108+ ]
109+ }
110+ }
111+}
qml/Stages/DesktopStage.qml+49−469
@@ -20,6 +20,7 @@ import QtQuick 2.4
20import QtQuick.Layouts 1.1
20import QtQuick.Layouts 1.1
21import Ubuntu.Components 1.3
21import Ubuntu.Components 1.3
22import Unity.Application 0.1
22import Unity.Application 0.1
23+import "../Components"
23import "../Components/PanelState"
24import "../Components/PanelState"
24import Utils 0.1
25import Utils 0.1
25import Ubuntu.Gestures 0.1
26import Ubuntu.Gestures 0.1
@@ -41,6 +42,8 @@ Rectangle {
41 property bool beingResized: false
42 property bool beingResized: false
42 property bool keepDashRunning: true
43 property bool keepDashRunning: true
43 property bool suspended: false
44 property bool suspended: false
45+ property alias background: wallpaper.source
46+ property alias altTabPressed: spread.altTabPressed
44
47
45 // functions to be called from outside
48 // functions to be called from outside
46 function updateFocusedAppOrientation() { /* TODO */ }
49 function updateFocusedAppOrientation() { /* TODO */ }
@@ -53,21 +56,11 @@ Rectangle {
53 property int mainAppWindowOrientationAngle: 0
56 property int mainAppWindowOrientationAngle: 0
54 readonly property bool orientationChangesEnabled: false
57 readonly property bool orientationChangesEnabled: false
55
58
56− property alias background: wallpaper.source
57− property bool altTabPressed: false
58−
59− CrossFadeImage {
60− id: wallpaper
61− anchors.fill: parent
62− sourceSize { height: root.height; width: root.width }
63− fillMode: Image.PreserveAspectCrop
64− }
65−
66 Connections {
59 Connections {
67 target: ApplicationManager
60 target: ApplicationManager
68 onApplicationAdded: {
61 onApplicationAdded: {
69− if (root.state == "altTab") {
62+ if (spread.state == "altTab") {
70− root.state = "";
63+ spread.state = "";
71 }
64 }
72
65
73 ApplicationManager.requestFocusApplication(appId)
66 ApplicationManager.requestFocusApplication(appId)
@@ -77,7 +70,11 @@ Rectangle {
77 var appIndex = priv.indexOf(appId);
70 var appIndex = priv.indexOf(appId);
78 var appDelegate = appRepeater.itemAt(appIndex);
71 var appDelegate = appRepeater.itemAt(appIndex);
79 appDelegate.minimized = false;
72 appDelegate.minimized = false;
80− appDelegate.focus = true;
73+ ApplicationManager.focusApplication(appId)
74+
75+ if (spread.state == "altTab") {
76+ spread.cancel()
77+ }
81 }
78 }
82 }
79 }
83
80
@@ -115,72 +112,17 @@ Rectangle {
115 value: priv.focusedAppDelegate !== null && priv.focusedAppDelegate.state === "maximized"
112 value: priv.focusedAppDelegate !== null && priv.focusedAppDelegate.state === "maximized"
116 }
113 }
117
114
118− Rectangle {
119− id: spreadBackground
120− anchors.fill: parent
121− color: "#55000000"
122− visible: false
123− }
124−
125 FocusScope {
115 FocusScope {
126 id: appContainer
116 id: appContainer
127 objectName: "appContainer"
117 objectName: "appContainer"
128 anchors.fill: parent
118 anchors.fill: parent
129− focus: true
119+ focus: spread.state !== "altTab"
130−
131− Keys.onPressed: {
132− switch (event.key) {
133− case Qt.Key_Left:
134− case Qt.Key_Backtab:
135− selectPrevious(event.isAutoRepeat)
136− event.accepted = true;
137− break;
138− case Qt.Key_Right:
139− case Qt.Key_Tab:
140− selectNext(event.isAutoRepeat)
141− event.accepted = true;
142− break;
143− case Qt.Key_Escape:
144− appRepeater.highlightedIndex = -1
145− event.accepted = true;
146− case Qt.Key_Enter:
147− case Qt.Key_Return:
148− case Qt.Key_Space:
149− root.state = ""
150− event.accepted = true;
151− }
152− }
153−
154− function selectNext(isAutoRepeat) {
155− if (isAutoRepeat && appRepeater.highlightedIndex >= ApplicationManager.count -1) {
156− return; // AutoRepeat is not allowed to wrap around
157− }
158−
159− appRepeater.highlightedIndex = (appRepeater.highlightedIndex + 1) % ApplicationManager.count;
160− var newContentX = ((spreadFlickable.contentWidth) / (ApplicationManager.count + 1)) * Math.max(0, Math.min(ApplicationManager.count - 5, appRepeater.highlightedIndex - 3));
161− if (spreadFlickable.contentX < newContentX || appRepeater.highlightedIndex == 0) {
162− spreadFlickable.snapTo(newContentX)
163− }
164− }
165
120
166− function selectPrevious(isAutoRepeat) {
121+ CrossFadeImage {
167− if (isAutoRepeat && appRepeater.highlightedIndex == 0) {
122+ id: wallpaper
168− return; // AutoRepeat is not allowed to wrap around
123+ anchors.fill: parent
169− }
124+ sourceSize { height: root.height; width: root.width }
170−
125+ fillMode: Image.PreserveAspectCrop
171− var newIndex = appRepeater.highlightedIndex - 1 >= 0 ? appRepeater.highlightedIndex - 1 : ApplicationManager.count - 1;
172− appRepeater.highlightedIndex = newIndex;
173− var newContentX = ((spreadFlickable.contentWidth) / (ApplicationManager.count + 1)) * Math.max(0, Math.min(ApplicationManager.count - 5, appRepeater.highlightedIndex - 1));
174− if (spreadFlickable.contentX > newContentX || newIndex == ApplicationManager.count -1) {
175− spreadFlickable.snapTo(newContentX)
176− }
177− }
178−
179− function focusSelected() {
180− if (appRepeater.highlightedIndex != -1) {
181− var application = ApplicationManager.get(appRepeater.highlightedIndex);
182− ApplicationManager.requestFocusApplication(application.appId)
183− }
184 }
126 }
185
127
186 Repeater {
128 Repeater {
@@ -188,30 +130,13 @@ Rectangle {
188 model: ApplicationManager
130 model: ApplicationManager
189 objectName: "appRepeater"
131 objectName: "appRepeater"
190
132
191− property int highlightedIndex: -1
192− property int closingIndex: -1
193−
194− function indexOf(delegateItem) {
195− for (var i = 0; i < appRepeater.count; i++) {
196− if (appRepeater.itemAt(i) === delegateItem) {
197− return i;
198− }
199− }
200− return -1;
201− }
202−
203 delegate: FocusScope {
133 delegate: FocusScope {
204 id: appDelegate
134 id: appDelegate
205 z: ApplicationManager.count - index
135 z: ApplicationManager.count - index
206 y: units.gu(3)
136 y: units.gu(3)
207 width: units.gu(60)
137 width: units.gu(60)
208 height: units.gu(50)
138 height: units.gu(50)
209−
139+ focus: model.appId === priv.focusedAppId
210− property int windowWidth: 0
211− property int windowHeight: 0
212− // We don't want to resize the actual application when we're transforming things for the spread only
213− onWidthChanged: if (appDelegate.state !== "altTab") windowWidth = width
214− onHeightChanged: if (appDelegate.state !== "altTab") windowHeight = height
215
140
216 readonly property int minWidth: units.gu(10)
141 readonly property int minWidth: units.gu(10)
217 readonly property int minHeight: units.gu(10)
142 readonly property int minHeight: units.gu(10)
@@ -225,13 +150,6 @@ Rectangle {
225 }
150 }
226 }
151 }
227
152
228− Component.onCompleted: {
229− // Focus the top-most or AppMan-focused application on start up.
230− if (ApplicationManager.focusedApplicationId === model.appId && !focus) {
231− focus = true;
232− }
233− }
234−
235 Binding {
153 Binding {
236 target: ApplicationManager.get(index)
154 target: ApplicationManager.get(index)
237 property: "requestedState"
155 property: "requestedState"
@@ -256,63 +174,17 @@ Rectangle {
256 maximized = false;
174 maximized = false;
257 }
175 }
258
176
259− Behavior on x {
260− id: closeBehavior
261− enabled: appRepeater.closingIndex >= 0
262− UbuntuNumberAnimation {
263− onRunningChanged: if (!running) appRepeater.closingIndex = -1
264− }
265− }
266−
267 states: [
177 states: [
268 State {
178 State {
269− name: "normal"; when: !appDelegate.maximized && !appDelegate.minimized && root.state !== "altTab"
179+ name: "normal"; when: !appDelegate.maximized && !appDelegate.minimized
270 },
180 },
271 State {
181 State {
272− name: "maximized"; when: appDelegate.maximized && (root.state !== "altTab" || (root.state == "altTab" && !root.workspacesUpdated))
182+ name: "maximized"; when: appDelegate.maximized
273 PropertyChanges { target: appDelegate; x: 0; y: 0; width: root.width; height: root.height }
183 PropertyChanges { target: appDelegate; x: 0; y: 0; width: root.width; height: root.height }
274 },
184 },
275 State {
185 State {
276− name: "minimized"; when: appDelegate.minimized && (root.state !== "altTab" || (root.state == "altTab" && !root.workspacesUpdated))
186+ name: "minimized"; when: appDelegate.minimized
277 PropertyChanges { target: appDelegate; x: -appDelegate.width / 2; scale: units.gu(5) / appDelegate.width; opacity: 0 }
187 PropertyChanges { target: appDelegate; x: -appDelegate.width / 2; scale: units.gu(5) / appDelegate.width; opacity: 0 }
278− },
279− State {
280− name: "altTab"; when: root.state == "altTab" && root.workspacesUpdated
281− PropertyChanges {
282− target: appDelegate
283− x: spreadMaths.animatedX
284− y: spreadMaths.animatedY + (appDelegate.height - decoratedWindow.height) - units.gu(2)
285− width: spreadMaths.spreadHeight
286− height: spreadMaths.sceneHeight
287− angle: spreadMaths.animatedAngle
288− itemScale: spreadMaths.scale
289− itemScaleOriginY: decoratedWindow.height / 2;
290− z: index
291− visible: spreadMaths.itemVisible
292− }
293− PropertyChanges {
294− target: decoratedWindow
295− decorationShown: false
296− highlightShown: index == appRepeater.highlightedIndex
297− state: "transformed"
298− width: spreadMaths.spreadHeight
299− height: spreadMaths.spreadHeight
300− shadowOpacity: spreadMaths.shadowOpacity
301− anchors.topMargin: units.gu(2)
302− }
303− PropertyChanges {
304− target: tileInfo
305− visible: true
306− opacity: spreadMaths.tileInfoOpacity
307− }
308− PropertyChanges {
309− target: spreadSelectArea
310− enabled: true
311− }
312− PropertyChanges {
313− target: windowMoveResizeArea
314− enabled: false
315− }
316 }
188 }
317 ]
189 ]
318 transitions: [
190 transitions: [
@@ -334,18 +206,13 @@ Rectangle {
334 }
206 }
335 }
207 }
336 ]
208 ]
337− property real angle: 0
209+
338− property real itemScale: 1
210+ Binding {
339− property int itemScaleOriginX: 0
211+ id: previewBinding
340− property int itemScaleOriginY: 0
212+ target: appDelegate
341−
213+ property: "z"
342− SpreadMaths {
343− id: spreadMaths
344− flickable: spreadFlickable
345− itemIndex: index
346− totalItems: Math.max(6, ApplicationManager.count)
214+ value: ApplicationManager.count + 1
347− sceneHeight: root.height
215+ when: index == spread.highlightedIndex && blurLayer.ready
348− itemHeight: appDelegate.height
349 }
216 }
350
217
351 WindowMoveResizeArea {
218 WindowMoveResizeArea {
@@ -356,7 +223,7 @@ Rectangle {
356 resizeHandleWidth: units.gu(2)
223 resizeHandleWidth: units.gu(2)
357 windowId: model.appId // FIXME: Change this to point to windowId once we have such a thing
224 windowId: model.appId // FIXME: Change this to point to windowId once we have such a thing
358
225
359− onPressed: { appDelegate.focus = true; }
226+ onPressed: { ApplicationManager.focusApplication(model.appId) }
360 }
227 }
361
228
362 DecoratedWindow {
229 DecoratedWindow {
@@ -364,8 +231,8 @@ Rectangle {
364 objectName: "decoratedWindow"
231 objectName: "decoratedWindow"
365 anchors.left: appDelegate.left
232 anchors.left: appDelegate.left
366 anchors.top: appDelegate.top
233 anchors.top: appDelegate.top
367− windowWidth: appDelegate.windowWidth
234+ width: appDelegate.width
368− windowHeight: appDelegate.windowHeight
235+ height: appDelegate.height
369 application: ApplicationManager.get(index)
236 application: ApplicationManager.get(index)
370 active: ApplicationManager.focusedApplicationId === model.appId
237 active: ApplicationManager.focusedApplicationId === model.appId
371 focus: true
238 focus: true
@@ -373,324 +240,37 @@ Rectangle {
373 onClose: ApplicationManager.stopApplication(model.appId)
240 onClose: ApplicationManager.stopApplication(model.appId)
374 onMaximize: appDelegate.maximize()
241 onMaximize: appDelegate.maximize()
375 onMinimize: appDelegate.minimize()
242 onMinimize: appDelegate.minimize()
376−
377− transform: [
378− Scale {
379− origin.x: itemScaleOriginX
380− origin.y: itemScaleOriginY
381− xScale: itemScale
382− yScale: itemScale
383− },
384− Rotation {
385− origin { x: 0; y: (decoratedWindow.height - (decoratedWindow.height * itemScale / 2)) }
386− axis { x: 0; y: 1; z: 0 }
387− angle: appDelegate.angle
388− }
389− ]
390−
391− MouseArea {
392− id: spreadSelectArea
393− anchors.fill: parent
394− anchors.margins: -units.gu(2)
395− enabled: false
396− onClicked: {
397− appRepeater.highlightedIndex = index;
398− root.state = ""
399− }
400− }
401− }
402−
403− Image {
404− id: closeImage
405− anchors { left: parent.left; top: parent.top; leftMargin: -height / 2; topMargin: -height / 2 + spreadMaths.closeIconOffset + units.gu(2) }
406− source: "graphics/window-close.svg"
407− readonly property var mousePos: hoverMouseArea.mapToItem(appDelegate, hoverMouseArea.mouseX, hoverMouseArea.mouseY)
408− visible: index == appRepeater.highlightedIndex
409− && mousePos.y < (decoratedWindow.height / 3)
410− && mousePos.y > -units.gu(4)
411− && mousePos.x > -units.gu(4)
412− && mousePos.x < (decoratedWindow.width * 2 / 3)
413− height: units.gu(1.5)
414− width: height
415− sourceSize.width: width
416− sourceSize.height: height
417−
418− MouseArea {
419− id: closeMouseArea
420− objectName: "closeMouseArea"
421− anchors.fill: closeImage
422− anchors.margins: -units.gu(2)
423− onClicked: {
424− appRepeater.closingIndex = index;
425− ApplicationManager.stopApplication(model.appId)
426− }
427− }
428− }
429−
430− MouseArea {
431− id: tileInfo
432− objectName: "tileInfo"
433− anchors { left: parent.left; top: decoratedWindow.bottom; topMargin: units.gu(5) }
434− width: units.gu(30)
435− height: titleInfoColumn.height
436− visible: false
437− hoverEnabled: true
438−
439− onContainsMouseChanged: {
440− if (containsMouse) {
441− appRepeater.highlightedIndex = index
442− }
443− }
444−
445− onClicked: {
446− root.state = ""
447− }
448−
449− ColumnLayout {
450− id: titleInfoColumn
451− anchors { left: parent.left; top: parent.top; right: parent.right }
452− spacing: units.gu(1)
453−
454− UbuntuShape {
455− Layout.preferredHeight: Math.min(units.gu(6), root.height * .05)
456− Layout.preferredWidth: height * 8 / 7.6
457− image: Image {
458− anchors.fill: parent
459− source: model.icon
460− }
461− }
462− Label {
463− Layout.fillWidth: true
464− Layout.preferredHeight: units.gu(6)
465− text: model.name
466− wrapMode: Text.WordWrap
467− maximumLineCount: 2
468− }
469− }
470 }
243 }
471 }
244 }
472 }
245 }
473 }
246 }
474
247
475− MouseArea {
248+ BlurLayer {
476− id: hoverMouseArea
249+ id: blurLayer
477− anchors.fill: appContainer
478− propagateComposedEvents: true
479− hoverEnabled: true
480− enabled: false
481−
482− property int scrollAreaWidth: root.width / 3
483− property bool progressiveScrollingEnabled: false
484−
485− onMouseXChanged: {
486− mouse.accepted = false
487− if (hoverMouseArea.pressed) return;
488−
489− // Find the hovered item and mark it active
490− var mapped = mapToItem(appContainer, hoverMouseArea.mouseX, hoverMouseArea.mouseY)
491− var itemUnder = appContainer.childAt(mapped.x, mapped.y)
492− if (itemUnder) {
493− mapped = mapToItem(itemUnder, hoverMouseArea.mouseX, hoverMouseArea.mouseY)
494− var delegateChild = itemUnder.childAt(mapped.x, mapped.y)
495− if (delegateChild.objectName === "decoratedWindow" || delegateChild.objectName === "tileInfo") {
496− appRepeater.highlightedIndex = appRepeater.indexOf(itemUnder)
497− }
498− }
499−
500− if (spreadFlickable.contentWidth > spreadFlickable.minContentWidth) {
501− var margins = spreadFlickable.width * 0.05;
502−
503− if (!progressiveScrollingEnabled && mouseX < spreadFlickable.width - scrollAreaWidth) {
504− progressiveScrollingEnabled = true
505− }
506−
507− // do we need to scroll?
508− if (mouseX < scrollAreaWidth) {
509− var progress = Math.min(1, (scrollAreaWidth + margins - mouseX) / (scrollAreaWidth - margins));
510− var contentX = (1 - progress) * (spreadFlickable.contentWidth - spreadFlickable.width)
511− spreadFlickable.contentX = Math.max(0, Math.min(spreadFlickable.contentX, contentX))
512− }
513− if (mouseX > spreadFlickable.width - scrollAreaWidth && progressiveScrollingEnabled) {
514− var progress = Math.min(1, (mouseX - (spreadFlickable.width - scrollAreaWidth)) / (scrollAreaWidth - margins))
515− var contentX = progress * (spreadFlickable.contentWidth - spreadFlickable.width)
516− spreadFlickable.contentX = Math.min(spreadFlickable.contentWidth - spreadFlickable.width, Math.max(spreadFlickable.contentX, contentX))
517− }
518− }
519− }
520− onPressed: mouse.accepted = false
521− }
522−
523− FloatingFlickable {
524− id: spreadFlickable
525− objectName: "spreadFlickable"
526 anchors.fill: parent
250 anchors.fill: parent
527− property int minContentWidth: 6 * Math.min(height / 4, width / 5)
251+ source: appContainer
528− contentWidth: Math.max(6, ApplicationManager.count) * Math.min(height / 4, width / 5)
529− enabled: false
530−
531− function snapTo(contentX) {
532− snapAnimation.stop();
533− snapAnimation.to = contentX
534− snapAnimation.start();
535− }
536−
537− UbuntuNumberAnimation {
538− id: snapAnimation
539− target: spreadFlickable
540− property: "contentX"
541− }
542− }
543−
544− Item {
545− id: workspaceSelector
546− anchors {
547− left: parent.left
548− top: parent.top
549− right: parent.right
550− topMargin: units.gu(3.5) // TODO: should be root.panelHeight
551− }
552− height: root.height * 0.25
553 visible: false
252 visible: false
554−
555− RowLayout {
556− anchors.fill: parent
557− spacing: units.gu(1)
558− Item { Layout.fillWidth: true }
559− Repeater {
560− model: 1 // TODO: will be a workspacemodel in the future
561− Item {
562− Layout.fillHeight: true
563− Layout.preferredWidth: ((height - units.gu(6)) * root.width / root.height)
564− Image {
565− source: root.background
566− anchors {
567− left: parent.left
568− right: parent.right
569− verticalCenter: parent.verticalCenter
570− }
571− height: parent.height * 0.75
572−
573− // FIXME: This is temporary until we can have multiple Items per surface
574− ShaderEffect {
575− anchors.fill: parent
576−
577− property var source: ShaderEffectSource {
578− id: shaderEffectSource
579− live: false
580− sourceItem: appContainer
581− Connections { target: root; onUpdateWorkspaces: shaderEffectSource.scheduleUpdate() }
582− }
583−
584− fragmentShader: "
585− varying highp vec2 qt_TexCoord0;
586− uniform sampler2D source;
587− void main(void)
588− {
589− highp vec4 sourceColor = texture2D(source, qt_TexCoord0);
590− gl_FragColor = sourceColor;
591− }"
592− }
593− }
594−
595− // TODO: This is the bar for the currently selected workspace
596− // Enable this once the workspace stuff is implemented
597−// Rectangle {
598−// anchors { left: parent.left; right: parent.right; bottom: parent.bottom }
599−// height: units.dp(2)
600−// color: UbuntuColors.orange
601−// visible: index == 0 // TODO: should be active workspace index
602−// }
603− }
604−
605− }
606− // TODO: This is the "new workspace" button. Enable this once workspaces are implemented
607−// Item {
608−// Layout.fillHeight: true
609−// Layout.preferredWidth: ((height - units.gu(6)) * root.width / root.height)
610−// Rectangle {
611−// anchors {
612−// left: parent.left
613−// right: parent.right
614−// verticalCenter: parent.verticalCenter
615−// }
616−// height: parent.height * 0.75
617−// color: "#22ffffff"
618−
619−// Label {
620−// anchors.centerIn: parent
621−// font.pixelSize: parent.height / 2
622−// text: "+"
623−// }
624−// }
625−// }
626− Item { Layout.fillWidth: true }
627− }
628 }
253 }
629
254
630− Label {
255+ Rectangle {
631− id: currentSelectedLabel
256+ id: spreadBackground
632− anchors { bottom: parent.bottom; bottomMargin: root.height * 0.625; horizontalCenter: parent.horizontalCenter }
257+ anchors.fill: parent
633− text: appRepeater.highlightedIndex >= 0 ? ApplicationManager.get(appRepeater.highlightedIndex).name : ""
258+ color: "#55000000"
634 visible: false
259 visible: false
635− fontSize: "large"
636 }
260 }
637
261
638− states: [
639− State {
640− name: "altTab"; when: root.altTabPressed
641− PropertyChanges { target: workspaceSelector; visible: true }
642− PropertyChanges { target: spreadFlickable; enabled: spreadFlickable.contentWidth > spreadFlickable.minContentWidth }
643− PropertyChanges { target: currentSelectedLabel; visible: true }
644− PropertyChanges { target: spreadBackground; visible: true }
645− PropertyChanges { target: hoverMouseArea; enabled: true }
646− }
647− ]
648− signal updateWorkspaces();
649− property bool workspacesUpdated: false
650− transitions: [
651− Transition {
652− from: "*"
653− to: "altTab"
654− SequentialAnimation {
655− PropertyAction { target: hoverMouseArea; property: "progressiveScrollingEnabled"; value: false }
656− PropertyAction { target: appRepeater; property: "highlightedIndex"; value: Math.min(ApplicationManager.count - 1, 1) }
657− PauseAnimation { duration: 50 }
658− PropertyAction { target: workspaceSelector; property: "visible" }
659− ScriptAction { script: root.updateWorkspaces() }
660− // FIXME: Updating of shaderEffectSource take a bit of time. This is temporary until we can paint multiple items per surface
661− PauseAnimation { duration: 10 }
662− PropertyAction { target: root; property: "workspacesUpdated"; value: true }
663− PropertyAction { target: spreadFlickable; property: "visible" }
664− PropertyAction { targets: [currentSelectedLabel,spreadBackground]; property: "visible" }
665− PropertyAction { target: spreadFlickable; property: "contentX"; value: 0 }
666− }
667− },
668− Transition {
669− from: "*"
670− to: "*"
671− PropertyAnimation { property: "opacity" }
672− PropertyAction { target: root; property: "workspacesUpdated"; value: false }
673− ScriptAction { script: { appContainer.focusSelected() } }
674− PropertyAction { target: appRepeater; property: "highlightedIndex"; value: -1 }
675− }
676−
677− ]
678−
679 MouseArea {
262 MouseArea {
680− id: rightEdgePushArea
263+ id: eventEater
681− anchors {
264+ anchors.fill: parent
682− top: parent.top
265+ visible: spreadBackground.visible
683− right: parent.right
266+ enabled: visible
684− bottom: parent.bottom
685− }
267+ }
686− // TODO: Make this a push to edge thing like the launcher when we can,
268+
687− // for now, yes, we want 1 pixel, regardless of the scaling
269+ DesktopSpread {
688− width: 1
270+ id: spread
689− hoverEnabled: true
271+ objectName: "spread"
690− onContainsMouseChanged: {
272+ anchors.fill: parent
691− if (containsMouse) {
273+ workspace: appContainer
692− root.state = "altTab";
274+ focus: state == "altTab"
693− }
694− }
695 }
275 }
696}
276}
qml/Stages/PhoneStage.qml+15−7
@@ -48,17 +48,12 @@ Rectangle {
48 onBeingResizedChanged: {
48 onBeingResizedChanged: {
49 if (beingResized) {
49 if (beingResized) {
50 // Brace yourselves for impact!
50 // Brace yourselves for impact!
51− spreadView.selectedIndex = -1;
51+ priv.reset();
52− spreadView.phase = 0;
53− spreadView.contentX = -spreadView.shift;
54 }
52 }
55 }
53 }
56 onSpreadEnabledChanged: {
54 onSpreadEnabledChanged: {
57 if (!spreadEnabled) {
55 if (!spreadEnabled) {
58− // reset. go back to display the focused app
56+ priv.reset();
59− spreadView.selectedIndex = -1;
60− spreadView.phase = 0;
61− spreadView.contentX = -spreadView.shift;
62 }
57 }
63 }
58 }
64 function updateFocusedAppOrientation() {
59 function updateFocusedAppOrientation() {
@@ -94,6 +89,7 @@ Rectangle {
94 readonly property var mainApp: applicationManager.focusedApplicationId
89 readonly property var mainApp: applicationManager.focusedApplicationId
95 ? applicationManager.findApplication(applicationManager.focusedApplicationId)
90 ? applicationManager.findApplication(applicationManager.focusedApplicationId)
96 : null
91 : null
92+
97 property int mainAppWindowOrientationAngle: 0
93 property int mainAppWindowOrientationAngle: 0
98 readonly property bool orientationChangesEnabled: priv.focusedAppOrientationChangesEnabled
94 readonly property bool orientationChangesEnabled: priv.focusedAppOrientationChangesEnabled
99 && !priv.focusedAppDelegateIsDislocated
95 && !priv.focusedAppDelegateIsDislocated
@@ -216,6 +212,18 @@ Rectangle {
216 // Is more stable than "spreadView.shiftedContentX === 0" as it filters out noise caused by
212 // Is more stable than "spreadView.shiftedContentX === 0" as it filters out noise caused by
217 // Flickable.contentX changing due to resizes.
213 // Flickable.contentX changing due to resizes.
218 property bool fullyShowingFocusedApp: true
214 property bool fullyShowingFocusedApp: true
215+
216+ function reset() {
217+ // The app that's about to go to foreground has to be focused, otherwise
218+ // it would leave us in an inconsistent state.
219+ if (!root.applicationManager.focusedApplicationId && root.applicationManager.count > 0) {
220+ root.applicationManager.focusApplication(root.applicationManager.get(0).appId);
221+ }
222+
223+ spreadView.selectedIndex = -1;
224+ spreadView.phase = 0;
225+ spreadView.contentX = -spreadView.shift;
226+ }
219 }
227 }
220 Timer {
228 Timer {
221 id: fullyShowingFocusedAppUpdateTimer
229 id: fullyShowingFocusedAppUpdateTimer
qml/Stages/SessionContainer.qml+3
@@ -20,11 +20,14 @@ import "Animations"
20FocusScope {
20FocusScope {
21 id: root
21 id: root
22 objectName: "sessionContainer"
22 objectName: "sessionContainer"
23+ implicitWidth: _surfaceContainer.implicitWidth
24+ implicitHeight: _surfaceContainer.implicitHeight
23 property QtObject session
25 property QtObject session
24 readonly property var childSessions: session ? session.childSessions : null
26 readonly property var childSessions: session ? session.childSessions : null
25 readonly property alias surface: _surfaceContainer.surface
27 readonly property alias surface: _surfaceContainer.surface
26 property alias interactive: _surfaceContainer.interactive
28 property alias interactive: _surfaceContainer.interactive
27 property alias surfaceOrientationAngle: _surfaceContainer.surfaceOrientationAngle
29 property alias surfaceOrientationAngle: _surfaceContainer.surfaceOrientationAngle
30+ property alias resizeSurface: _surfaceContainer.resizeSurface
28
31
29 readonly property alias surfaceContainer: _surfaceContainer
32 readonly property alias surfaceContainer: _surfaceContainer
30 SurfaceContainer {
33 SurfaceContainer {
qml/Stages/SpreadDelegate.qml+1−1
@@ -268,7 +268,7 @@ FocusScope {
268 focus: true
268 focus: true
269 anchors {
269 anchors {
270 fill: parent
270 fill: parent
271− topMargin: appWindow.fullscreen || application.rotatesWindowContents
271+ topMargin: appWindow.fullscreen || (application && application.rotatesWindowContents)
272 ? 0 : maximizedAppTopMargin
272 ? 0 : maximizedAppTopMargin
273 }
273 }
274
274
qml/Stages/SurfaceContainer.qml+3−2
@@ -28,6 +28,7 @@ FocusScope {
28 property bool hadSurface: false
28 property bool hadSurface: false
29 property bool interactive
29 property bool interactive
30 property int surfaceOrientationAngle: 0
30 property int surfaceOrientationAngle: 0
31+ property bool resizeSurface: true
31
32
32 onSurfaceChanged: {
33 onSurfaceChanged: {
33 if (surface) {
34 if (surface) {
@@ -52,8 +53,8 @@ FocusScope {
52
53
53 consumesInput: true
54 consumesInput: true
54
55
55− surfaceWidth: width
56+ surfaceWidth: root.resizeSurface ? width : -1
56− surfaceHeight: height
57+ surfaceHeight: root.resizeSurface ? height : -1
57
58
58 anchors.fill: root
59 anchors.fill: root
59 enabled: root.interactive
60 enabled: root.interactive
qml/Stages/WindowMoveResizeArea.qml+1−1
@@ -104,6 +104,6 @@ MouseArea {
104 }
104 }
105
105
106 Component.onDestruction: {
106 Component.onDestruction: {
107− windowStateStorage.saveGeometry(root.windowId, Qt.rect(target.x, target.y, target.windowWidth, target.windowHeight))
107+ windowStateStorage.saveGeometry(root.windowId, Qt.rect(target.x, target.y, target.width, target.height))
108 }
108 }
109}
109}
src/ApplicationArguments.h+2−2
@@ -31,10 +31,10 @@ class ApplicationArguments : public QObject
31public:
31public:
32 ApplicationArguments(QObject *parent = nullptr);
32 ApplicationArguments(QObject *parent = nullptr);
33
33
34− void setDeviceName(QString deviceName) { m_deviceName = deviceName; }
34+ void setDeviceName(const QString &deviceName) { m_deviceName = deviceName; }
35 QString deviceName() const { return m_deviceName; }
35 QString deviceName() const { return m_deviceName; }
36
36
37− void setMode(QString mode) { m_mode = mode; }
37+ void setMode(const QString &mode) { m_mode = mode; }
38 QString mode() const { return m_mode; }
38 QString mode() const { return m_mode; }
39
39
40private:
40private:
src/CachingNetworkManagerFactory.cpp+1−1
@@ -46,7 +46,7 @@ QNetworkAccessManager *CachingNetworkManagerFactory::create(QObject *parent) {
46 QNetworkAccessManager *manager = new CachingNetworkAccessManager(parent);
46 QNetworkAccessManager *manager = new CachingNetworkAccessManager(parent);
47
47
48 QNetworkDiskCache* cache = new QNetworkDiskCache(manager);
48 QNetworkDiskCache* cache = new QNetworkDiskCache(manager);
49− cache->setCacheDirectory(QString("%1/network").arg(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)));
49+ cache->setCacheDirectory(QStringLiteral("%1/network").arg(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)));
50
50
51 manager->setCache(cache);
51 manager->setCache(cache);
52 return manager;
52 return manager;
src/Dash/main.cpp+11−11
@@ -36,20 +36,20 @@ int main(int argc, const char *argv[])
36 QGuiApplication *application = new QGuiApplication(argc, (char**)argv);
36 QGuiApplication *application = new QGuiApplication(argc, (char**)argv);
37
37
38 QCommandLineParser parser;
38 QCommandLineParser parser;
39− parser.setApplicationDescription("Description: Unity 8 Shell Dash");
39+ parser.setApplicationDescription(QStringLiteral("Description: Unity 8 Shell Dash"));
40 parser.addHelpOption();
40 parser.addHelpOption();
41
41
42− QCommandLineOption mousetouchOption("mousetouch",
42+ QCommandLineOption mousetouchOption(QStringLiteral("mousetouch"),
43− "Allow the mouse to provide touch input");
43+ QStringLiteral("Allow the mouse to provide touch input"));
44 parser.addOption(mousetouchOption);
44 parser.addOption(mousetouchOption);
45
45
46− QCommandLineOption windowGeometryOption(QStringList() << "windowgeometry",
46+ QCommandLineOption windowGeometryOption(QStringList() << QStringLiteral("windowgeometry"),
47− "Specify the window geometry as [<width>x<height>]", "windowgeometry", "1");
47+ QStringLiteral("Specify the window geometry as [<width>x<height>]"), QStringLiteral("windowgeometry"), QStringLiteral("1"));
48 parser.addOption(windowGeometryOption);
48 parser.addOption(windowGeometryOption);
49
49
50 // FIXME Remove once we drop the need of the hint
50 // FIXME Remove once we drop the need of the hint
51− QCommandLineOption desktopFileHintOption("desktop_file_hint",
51+ QCommandLineOption desktopFileHintOption(QStringLiteral("desktop_file_hint"),
52− "The desktop_file_hint option for QtMir", "hint_file");
52+ QStringLiteral("The desktop_file_hint option for QtMir"), QStringLiteral("hint_file"));
53 parser.addOption(desktopFileHintOption);
53 parser.addOption(desktopFileHintOption);
54
54
55 // Treat args with single dashes the same as arguments with two dashes
55 // Treat args with single dashes the same as arguments with two dashes
@@ -60,7 +60,7 @@ int main(int argc, const char *argv[])
60 ApplicationArguments qmlArgs;
60 ApplicationArguments qmlArgs;
61
61
62 if (getenv("QT_LOAD_TESTABILITY")) {
62 if (getenv("QT_LOAD_TESTABILITY")) {
63− QLibrary testLib(QLatin1String("qttestability"));
63+ QLibrary testLib(QStringLiteral("qttestability"));
64 if (testLib.load()) {
64 if (testLib.load()) {
65 typedef void (*TasInitialize)(void);
65 typedef void (*TasInitialize)(void);
66 TasInitialize initFunction = (TasInitialize)testLib.resolve("qt_testability_init");
66 TasInitialize initFunction = (TasInitialize)testLib.resolve("qt_testability_init");
@@ -91,8 +91,8 @@ int main(int argc, const char *argv[])
91 }
91 }
92 }
92 }
93
93
94− view->setTitle("Scopes");
94+ view->setTitle(QStringLiteral("Scopes"));
95− view->rootContext()->setContextProperty("applicationArguments", &qmlArgs);
95+ view->rootContext()->setContextProperty(QStringLiteral("applicationArguments"), &qmlArgs);
96
96
97 // You will need this if you want to interact with touch-only components using a mouse
97 // You will need this if you want to interact with touch-only components using a mouse
98 // Needed only when manually testing on a desktop.
98 // Needed only when manually testing on a desktop.
@@ -101,7 +101,7 @@ int main(int argc, const char *argv[])
101 mouseTouchAdaptor = MouseTouchAdaptor::instance();
101 mouseTouchAdaptor = MouseTouchAdaptor::instance();
102 }
102 }
103
103
104− QUrl source(::qmlDirectory()+"Dash/DashApplication.qml");
104+ QUrl source(::qmlDirectory() + "/Dash/DashApplication.qml");
105 prependImportPaths(view->engine(), ::overrideImportPaths());
105 prependImportPaths(view->engine(), ::overrideImportPaths());
106 appendImportPaths(view->engine(), ::fallbackImportPaths());
106 appendImportPaths(view->engine(), ::fallbackImportPaths());
107
107
src/Panel/Indicators/client/indicatorsclient.cpp+8−8
@@ -36,20 +36,20 @@ IndicatorsClient::IndicatorsClient(int &argc, char **argv)
36 QStringList args = m_application->arguments();
36 QStringList args = m_application->arguments();
37
37
38 m_view = new QQuickView;
38 m_view = new QQuickView;
39− m_view->engine()->setBaseUrl(QUrl::fromLocalFile(::qmlDirectory()+"Panel/Indicators/client/"));
39+ m_view->engine()->setBaseUrl(QUrl::fromLocalFile(::qmlDirectory() + "/Panel/Indicators/client/"));
40 prependImportPaths(m_view->engine(), ::overrideImportPaths());
40 prependImportPaths(m_view->engine(), ::overrideImportPaths());
41 appendImportPaths(m_view->engine(), ::fallbackImportPaths());
41 appendImportPaths(m_view->engine(), ::fallbackImportPaths());
42
42
43− QString profile = "phone";
43+ QString profile = QStringLiteral("phone");
44− if (args.contains(QLatin1String("-profile")) && args.size() > args.indexOf(QLatin1String("-profile")) + 1) {
44+ if (args.contains(QStringLiteral("-profile")) && args.size() > args.indexOf(QStringLiteral("-profile")) + 1) {
45− profile = args.at(args.indexOf(QLatin1String("-profile")) + 1);
45+ profile = args.at(args.indexOf(QStringLiteral("-profile")) + 1);
46 }
46 }
47− m_view->rootContext()->setContextProperty("indicatorProfile", profile);
47+ m_view->rootContext()->setContextProperty(QStringLiteral("indicatorProfile"), profile);
48
48
49− m_view->setSource(QUrl("IndicatorsClient.qml"));
49+ m_view->setSource(QUrl(QStringLiteral("IndicatorsClient.qml")));
50 m_view->setResizeMode(QQuickView::SizeRootObjectToView);
50 m_view->setResizeMode(QQuickView::SizeRootObjectToView);
51− if (args.contains(QLatin1String("-windowgeometry")) && args.size() > args.indexOf(QLatin1String("-windowgeometry")) + 1) {
51+ if (args.contains(QStringLiteral("-windowgeometry")) && args.size() > args.indexOf(QStringLiteral("-windowgeometry")) + 1) {
52− QStringList geometryArg = args.at(args.indexOf(QLatin1String("-windowgeometry")) + 1).split('x');
52+ QStringList geometryArg = args.at(args.indexOf(QStringLiteral("-windowgeometry")) + 1).split('x');
53 if (geometryArg.size() == 2) {
53 if (geometryArg.size() == 2) {
54 m_view->resize(geometryArg.at(0).toInt(), geometryArg.at(1).toInt());
54 m_view->resize(geometryArg.at(0).toInt(), geometryArg.at(1).toInt());
55 }
55 }
src/UnityCommandLineParser.cpp+25−24
@@ -26,36 +26,36 @@ UnityCommandLineParser::UnityCommandLineParser(const QCoreApplication &app)
26 m_gridUnit = getenvFloat(ENV_GRID_UNIT_PX, DEFAULT_GRID_UNIT_PX);
26 m_gridUnit = getenvFloat(ENV_GRID_UNIT_PX, DEFAULT_GRID_UNIT_PX);
27
27
28 QCommandLineParser parser;
28 QCommandLineParser parser;
29− parser.setApplicationDescription("Description: Unity 8 Shell");
29+ parser.setApplicationDescription(QStringLiteral("Description: Unity 8 Shell"));
30 parser.addHelpOption();
30 parser.addHelpOption();
31
31
32− QCommandLineOption fullscreenOption("fullscreen",
32+ QCommandLineOption fullscreenOption(QStringLiteral("fullscreen"),
33− "Run in fullscreen");
33+ QStringLiteral("Run in fullscreen"));
34 parser.addOption(fullscreenOption);
34 parser.addOption(fullscreenOption);
35
35
36− QCommandLineOption framelessOption("frameless",
36+ QCommandLineOption framelessOption(QStringLiteral("frameless"),
37− "Run without window borders");
37+ QStringLiteral("Run without window borders"));
38 parser.addOption(framelessOption);
38 parser.addOption(framelessOption);
39
39
40− QCommandLineOption mousetouchOption("mousetouch",
40+ QCommandLineOption mousetouchOption(QStringLiteral("mousetouch"),
41− "Allow the mouse to provide touch input");
41+ QStringLiteral("Allow the mouse to provide touch input"));
42 parser.addOption(mousetouchOption);
42 parser.addOption(mousetouchOption);
43
43
44− QCommandLineOption windowGeometryOption(QStringList() << "windowgeometry",
44+ QCommandLineOption windowGeometryOption(QStringList() << QStringLiteral("windowgeometry"),
45− "Specify the window geometry as [<width>x<height>]", "windowgeometry", "1");
45+ QStringLiteral("Specify the window geometry as [<width>x<height>]"), QStringLiteral("windowgeometry"), QStringLiteral("1"));
46 parser.addOption(windowGeometryOption);
46 parser.addOption(windowGeometryOption);
47
47
48− QCommandLineOption testabilityOption("testability",
48+ QCommandLineOption testabilityOption(QStringLiteral("testability"),
49− "DISCOURAGED: Please set QT_LOAD_TESTABILITY instead.\nLoad the testability driver");
49+ QStringLiteral("DISCOURAGED: Please set QT_LOAD_TESTABILITY instead.\nLoad the testability driver"));
50 parser.addOption(testabilityOption);
50 parser.addOption(testabilityOption);
51
51
52− QCommandLineOption devicenameOption(QStringList() << "devicename",
52+ QCommandLineOption devicenameOption(QStringList() << QStringLiteral("devicename"),
53− "Specify the device name instead of letting Unity 8 find it out", "devicename", "");
53+ QStringLiteral("Specify the device name instead of letting Unity 8 find it out"), QStringLiteral("devicename"), QLatin1String(""));
54 parser.addOption(devicenameOption);
54 parser.addOption(devicenameOption);
55
55
56− QCommandLineOption modeOption("mode",
56+ QCommandLineOption modeOption(QStringLiteral("mode"),
57− "Whether to run greeter and/or shell [full-greeter, full-shell, greeter, shell]",
57+ QStringLiteral("Whether to run greeter and/or shell [full-greeter, full-shell, greeter, shell]"),
58− "mode", "full-greeter");
58+ QStringLiteral("mode"), QStringLiteral("full-greeter"));
59 parser.addOption(modeOption);
59 parser.addOption(modeOption);
60
60
61 // Treat args with single dashes the same as arguments with two dashes
61 // Treat args with single dashes the same as arguments with two dashes
@@ -83,7 +83,7 @@ UnityCommandLineParser::UnityCommandLineParser(const QCoreApplication &app)
83
83
84int UnityCommandLineParser::parsePixelsValue(const QString &str)
84int UnityCommandLineParser::parsePixelsValue(const QString &str)
85{
85{
86− if (str.endsWith("gu", Qt::CaseInsensitive)) {
86+ if (str.endsWith(QLatin1String("gu"), Qt::CaseInsensitive)) {
87 QString numStr = str;
87 QString numStr = str;
88 numStr.remove(numStr.size() - 2, 2);
88 numStr.remove(numStr.size() - 2, 2);
89 return numStr.toInt() * m_gridUnit;
89 return numStr.toInt() * m_gridUnit;
@@ -105,13 +105,14 @@ void UnityCommandLineParser::resolveMode(QCommandLineParser &parser, QCommandLin
105 // If an invalid option was specified, set it to the default
105 // If an invalid option was specified, set it to the default
106 // If no default was provided in the QCommandLineOption constructor, abort.
106 // If no default was provided in the QCommandLineOption constructor, abort.
107 if (!parser.isSet(modeOption) ||
107 if (!parser.isSet(modeOption) ||
108− (parser.value(modeOption) != "full-greeter" &&
108+ (parser.value(modeOption) != QLatin1String("full-greeter") &&
109− parser.value(modeOption) != "full-shell" &&
109+ parser.value(modeOption) != QLatin1String("full-shell") &&
110− parser.value(modeOption) != "greeter" &&
110+ parser.value(modeOption) != QLatin1String("greeter") &&
111− parser.value(modeOption) != "shell")) {
111+ parser.value(modeOption) != QLatin1String("shell"))) {
112−
112+
113+ const QStringList defaultValues = modeOption.defaultValues();
113− if (modeOption.defaultValues().first() != nullptr) {
114+ if (!defaultValues.isEmpty()) {
114− m_mode = modeOption.defaultValues().first();
115+ m_mode = defaultValues.first();
115 qWarning() << "Mode argument was not provided or was set to an illegal value."
116 qWarning() << "Mode argument was not provided or was set to an illegal value."
116 " Using default value of --mode=" << m_mode;
117 " Using default value of --mode=" << m_mode;
117 } else {
118 } else {
src/libunity8-private/unitydbusobject.cpp+2−2
@@ -64,8 +64,8 @@ void UnityDBusObject::notifyPropertyChanged(const QString& propertyName, const Q
64 changedProps.insert(propertyName, value);
64 changedProps.insert(propertyName, value);
65
65
66 message = QDBusMessage::createSignal(path(),
66 message = QDBusMessage::createSignal(path(),
67− "org.freedesktop.DBus.Properties",
67+ QStringLiteral("org.freedesktop.DBus.Properties"),
68− "PropertiesChanged");
68+ QStringLiteral("PropertiesChanged"));
69 message << interface;
69 message << interface;
70 message << changedProps;
70 message << changedProps;
71 message << QStringList();
71 message << QStringList();
src/libunity8-private/unitydbusvirtualobject.cpp+2−2
@@ -61,8 +61,8 @@ void UnityDBusVirtualObject::notifyPropertyChanged(const QString& interface, con
61 changedProps.insert(propertyName, value);
61 changedProps.insert(propertyName, value);
62
62
63 message = QDBusMessage::createSignal(path() + "/" + node,
63 message = QDBusMessage::createSignal(path() + "/" + node,
64− "org.freedesktop.DBus.Properties",
64+ QStringLiteral("org.freedesktop.DBus.Properties"),
65− "PropertiesChanged");
65+ QStringLiteral("PropertiesChanged"));
66 message << interface;
66 message << interface;
67 message << changedProps;
67 message << changedProps;
68 message << QStringList();
68 message << QStringList();
src/main.cpp+5−5
@@ -43,7 +43,7 @@ int main(int argc, const char *argv[])
43 isMirServer = true;
43 isMirServer = true;
44 }
44 }
45
45
46− QGuiApplication::setApplicationName("unity8");
46+ QGuiApplication::setApplicationName(QStringLiteral("unity8"));
47 QGuiApplication *application;
47 QGuiApplication *application;
48
48
49 application = new QGuiApplication(argc, (char**)argv);
49 application = new QGuiApplication(argc, (char**)argv);
@@ -65,7 +65,7 @@ int main(int argc, const char *argv[])
65 // The testability driver is only loaded by QApplication but not by QGuiApplication.
65 // The testability driver is only loaded by QApplication but not by QGuiApplication.
66 // However, QApplication depends on QWidget which would add some unneeded overhead => Let's load the testability driver on our own.
66 // However, QApplication depends on QWidget which would add some unneeded overhead => Let's load the testability driver on our own.
67 if (parser.hasTestability() || getenv("QT_LOAD_TESTABILITY")) {
67 if (parser.hasTestability() || getenv("QT_LOAD_TESTABILITY")) {
68− QLibrary testLib(QLatin1String("qttestability"));
68+ QLibrary testLib(QStringLiteral("qttestability"));
69 if (testLib.load()) {
69 if (testLib.load()) {
70 typedef void (*TasInitialize)(void);
70 typedef void (*TasInitialize)(void);
71 TasInitialize initFunction = (TasInitialize)testLib.resolve("qt_testability_init");
71 TasInitialize initFunction = (TasInitialize)testLib.resolve("qt_testability_init");
@@ -85,7 +85,7 @@ int main(int argc, const char *argv[])
85 QQuickView* view = new QQuickView();
85 QQuickView* view = new QQuickView();
86 view->setResizeMode(QQuickView::SizeRootObjectToView);
86 view->setResizeMode(QQuickView::SizeRootObjectToView);
87 view->setColor("black");
87 view->setColor("black");
88− view->setTitle("Unity8 Shell");
88+ view->setTitle(QStringLiteral("Unity8 Shell"));
89
89
90 if (parser.windowGeometry().isValid()) {
90 if (parser.windowGeometry().isValid()) {
91 view->setWidth(parser.windowGeometry().width());
91 view->setWidth(parser.windowGeometry().width());
@@ -93,7 +93,7 @@ int main(int argc, const char *argv[])
93 }
93 }
94
94
95 view->engine()->setBaseUrl(QUrl::fromLocalFile(::qmlDirectory()));
95 view->engine()->setBaseUrl(QUrl::fromLocalFile(::qmlDirectory()));
96− view->rootContext()->setContextProperty("applicationArguments", &qmlArgs);
96+ view->rootContext()->setContextProperty(QStringLiteral("applicationArguments"), &qmlArgs);
97 if (parser.hasFrameless()) {
97 if (parser.hasFrameless()) {
98 view->setFlags(Qt::FramelessWindowHint);
98 view->setFlags(Qt::FramelessWindowHint);
99 }
99 }
@@ -105,7 +105,7 @@ int main(int argc, const char *argv[])
105 mouseTouchAdaptor = MouseTouchAdaptor::instance();
105 mouseTouchAdaptor = MouseTouchAdaptor::instance();
106 }
106 }
107
107
108− QUrl source(::qmlDirectory()+"OrientedShell.qml");
108+ QUrl source(::qmlDirectory() + "/OrientedShell.qml");
109 prependImportPaths(view->engine(), ::overrideImportPaths());
109 prependImportPaths(view->engine(), ::overrideImportPaths());
110 if (!isMirServer) {
110 if (!isMirServer) {
111 prependImportPaths(view->engine(), ::nonMirImportPaths());
111 prependImportPaths(view->engine(), ::nonMirImportPaths());
tests/CMakeLists.txt+9−3
@@ -22,11 +22,17 @@ add_subdirectory(uqmlscene)
22add_executable(qmlscene ALIAS uqmlscene)
22add_executable(qmlscene ALIAS uqmlscene)
23import_executables(dbus-test-runner)
23import_executables(dbus-test-runner)
24
24
25+set(UNITY_PLUGINPATH "${CMAKE_BINARY_DIR}/plugins" CACHE PATH "Path to pre-built unity8 plugin dir.")
26+set(UNITY_MOCKPATH "${CMAKE_BINARY_DIR}/tests/mocks" CACHE PATH "Path to pre-built unity8 mock dir.")
27+
28+# Pre-built mocks have preference, pre-built plugins replace local build
25set(UNITY_IMPORT_PATHS
29set(UNITY_IMPORT_PATHS
30+ ${UNITY_MOCKPATH}
26 ${CMAKE_BINARY_DIR}/tests/mocks
31 ${CMAKE_BINARY_DIR}/tests/mocks
27 ${CMAKE_BINARY_DIR}/tests/utils/modules
32 ${CMAKE_BINARY_DIR}/tests/utils/modules
28− ${CMAKE_BINARY_DIR}/plugins
33+ ${UNITY_PLUGINPATH}
29)
34)
35+list(REMOVE_DUPLICATES UNITY_IMPORT_PATHS)
30set(UNITY_IMPORT_PATHS ${UNITY_IMPORT_PATHS} CACHE INTERNAL "")
36set(UNITY_IMPORT_PATHS ${UNITY_IMPORT_PATHS} CACHE INTERNAL "")
31
37
32macro(unity8_parse_arguments)
38macro(unity8_parse_arguments)
@@ -40,8 +46,8 @@ macro(unity8_parse_arguments)
40 set(ld_paths)
46 set(ld_paths)
41 if(U8TEST_LIGHTDM)
47 if(U8TEST_LIGHTDM)
42 list(APPEND ld_paths
48 list(APPEND ld_paths
43− ${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics
49+ ${UNITY_MOCKPATH}/libusermetrics
44− ${CMAKE_BINARY_DIR}/tests/mocks/LightDM/liblightdm
50+ ${UNITY_MOCKPATH}/IntegratedLightDM/liblightdm
45 )
51 )
46 endif()
52 endif()
47
53
tests/autopilot/unity8/fixture_setup.py+1−1
@@ -74,7 +74,7 @@ class LaunchUnityWithFakeSensors(fixtures.Fixture):
74 def _get_lightdm_mock_path(self):
74 def _get_lightdm_mock_path(self):
75 lib_path = get_mocks_library_path()
75 lib_path = get_mocks_library_path()
76 lightdm_mock_path = os.path.abspath(
76 lightdm_mock_path = os.path.abspath(
77− os.path.join(lib_path, "LightDM", "liblightdm")
77+ os.path.join(lib_path, "IntegratedLightDM", "liblightdm")
78 )
78 )
79
79
80 if not os.path.exists(lightdm_mock_path):
80 if not os.path.exists(lightdm_mock_path):
tests/autopilot/unity8/indicators/tests/test_indicators.py+10−13
@@ -16,9 +16,11 @@
16# You should have received a copy of the GNU General Public License
16# You should have received a copy of the GNU General Public License
17# along with this program. If not, see <http://www.gnu.org/licenses/>.
17# along with this program. If not, see <http://www.gnu.org/licenses/>.
18
18
19+import platform
20+
19from testscenarios import multiply_scenarios
21from testscenarios import multiply_scenarios
20
22
21−from autopilot import platform
23+import autopilot.platform
22
24
23from unity8.indicators import tests
25from unity8.indicators import tests
24
26
@@ -39,12 +41,6 @@ class IndicatorExistsTestCase(tests.DeviceIndicatorTestCase):
39 tests.IndicatorTestCase.device_emulation_scenarios
41 tests.IndicatorTestCase.device_emulation_scenarios
40 )
42 )
41
43
42− def setUp(self):
43− super().setUp()
44− if (platform.model() == 'Nexus 10' and
45− self.indicator_name == 'indicator-bluetooth'):
46− self.skipTest('Nexus 10 does not have bluetooth at the moment.')
47−
48 def test_indicator_exists(self):
44 def test_indicator_exists(self):
49 self.main_window._get_indicator_panel_item(
45 self.main_window._get_indicator_panel_item(
50 self.indicator_name
46 self.indicator_name
@@ -74,12 +70,6 @@ class IndicatorPageTitleMatchesWidgetTestCase(tests.DeviceIndicatorTestCase):
74 tests.IndicatorTestCase.device_emulation_scenarios
70 tests.IndicatorTestCase.device_emulation_scenarios
75 )
71 )
76
72
77− def setUp(self):
78− super().setUp()
79− if (platform.model() == 'Nexus 10' and
80− self.indicator_name == 'indicator-bluetooth'):
81− self.skipTest('Nexus 10 does not have bluetooth at the moment.')
82−
83 def test_indicator_page_title_matches_widget(self):
73 def test_indicator_page_title_matches_widget(self):
84 """Swiping open an indicator must show its correct title.
74 """Swiping open an indicator must show its correct title.
85
75
@@ -87,5 +77,12 @@ class IndicatorPageTitleMatchesWidgetTestCase(tests.DeviceIndicatorTestCase):
87 """
77 """
88 indicator_page = self.main_window.open_indicator_page(
78 indicator_page = self.main_window.open_indicator_page(
89 self.indicator_name)
79 self.indicator_name)
80+ if self.indicator_name == 'indicator-bluetooth':
81+ if autopilot.platform.model() == 'Nexus 10':
82+ self.expectFailure('Nexus 10 does not have bluetooth at the moment.',
83+ self.assertTrue, indicator_page.visible)
84+ if platform.linux_distribution()[2] == 'wily':
85+ self.expectFailure('Bluetooth doesn\'t work on wily at the moment.',
86+ self.assertTrue, indicator_page.visible)
90 self.assertTrue(indicator_page.visible)
87 self.assertTrue(indicator_page.visible)
91 self.assertEqual(indicator_page.title, self.title)
88 self.assertEqual(indicator_page.title, self.title)
tests/autopilot/unity8/shell/tests/__init__.py+1−1
@@ -261,7 +261,7 @@ class UnityTestCase(AutopilotTestCase):
261 def _get_lightdm_mock_path(self):
261 def _get_lightdm_mock_path(self):
262 lib_path = get_mocks_library_path()
262 lib_path = get_mocks_library_path()
263 lightdm_mock_path = os.path.abspath(
263 lightdm_mock_path = os.path.abspath(
264− os.path.join(lib_path, "LightDM", "liblightdm")
264+ os.path.join(lib_path, "IntegratedLightDM", "liblightdm")
265 )
265 )
266
266
267 if not os.path.exists(lightdm_mock_path):
267 if not os.path.exists(lightdm_mock_path):
tests/mocks/AccountsService/AccountsService.cpp+1−1
@@ -24,7 +24,7 @@ AccountsService::AccountsService(QObject* parent)
24 : QObject(parent),
24 : QObject(parent),
25 m_enableLauncherWhileLocked(true),
25 m_enableLauncherWhileLocked(true),
26 m_enableIndicatorsWhileLocked(true),
26 m_enableIndicatorsWhileLocked(true),
27− m_backgroundFile(qmlDirectory() + "graphics/phone_background.jpg"),
27+ m_backgroundFile(qmlDirectory() + "/graphics/phone_background.jpg"),
28 m_statsWelcomeScreen(true),
28 m_statsWelcomeScreen(true),
29 m_failedLogins(0),
29 m_failedLogins(0),
30 m_demoEdges(false),
30 m_demoEdges(false),
tests/mocks/IntegratedLightDM/liblightdm/CMakeLists.txt+1−1
@@ -14,5 +14,5 @@ set_target_properties(MockLightDM PROPERTIES
14 OUTPUT_NAME lightdm-qt5-2)
14 OUTPUT_NAME lightdm-qt5-2)
15
15
16install(TARGETS MockLightDM
16install(TARGETS MockLightDM
17− DESTINATION ${SHELL_INSTALL_QML}/mocks/LightDM/liblightdm
17+ DESTINATION ${SHELL_INSTALL_QML}/mocks/IntegratedLightDM/liblightdm
18 )
18 )
tests/mocks/Ubuntu/CMakeLists.txt+1
@@ -5,3 +5,4 @@ add_subdirectory(SystemImage)
5add_subdirectory(SystemSettings)
5add_subdirectory(SystemSettings)
6add_subdirectory(Telephony)
6add_subdirectory(Telephony)
7add_subdirectory(Thumbnailer)
7add_subdirectory(Thumbnailer)
8+add_subdirectory(Web)
tests/mocks/Ubuntu/Web/CMakeLists.txtnew file+1
@@ -0,0 +1 @@
1+add_unity8_mock(Ubuntu.Web 0.2 Ubuntu/Web)
tests/mocks/Ubuntu/Web/WebView.qmlnew file+25
@@ -0,0 +1,25 @@
1+/*
2+ * Copyright (C) 2015 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ */
17+
18+import QtQuick 2.0
19+
20+Item {
21+ property url url
22+ property int loadProgress: 0
23+
24+ onUrlChanged: loadProgress = 100
25+}
tests/mocks/Ubuntu/Web/qmldirnew file+4
@@ -0,0 +1,4 @@
1+module Ubuntu.Web
2+typeinfo Web.qmltypes
3+
4+WebView 0.2 WebView.qml
tests/mocks/Unity/Application/CMakeLists.txt+1
@@ -18,6 +18,7 @@ set(FakeUnityApplicationQml_SOURCES
18 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/Mir.h
18 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/Mir.h
19 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceInterface.h
19 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceInterface.h
20 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceItemInterface.h
20 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceItemInterface.h
21+ resources/surfaces.qrc
21)
22)
22
23
23add_library(FakeUnityApplicationQml MODULE ${FakeUnityApplicationQml_SOURCES})
24add_library(FakeUnityApplicationQml MODULE ${FakeUnityApplicationQml_SOURCES})
tests/mocks/Unity/Application/MirSurface.cpp+14−7
@@ -22,7 +22,7 @@ MirSurface::MirSurface(const QString& name,
22 Mir::Type type,
22 Mir::Type type,
23 Mir::State state,
23 Mir::State state,
24 const QUrl& screenshot,
24 const QUrl& screenshot,
25− const QString &qmlFilePath)
25+ const QUrl &qmlFilePath)
26 : unity::shell::application::MirSurfaceInterface(nullptr)
26 : unity::shell::application::MirSurfaceInterface(nullptr)
27 , m_name(name)
27 , m_name(name)
28 , m_type(type)
28 , m_type(type)
@@ -36,12 +36,12 @@ MirSurface::MirSurface(const QString& name,
36 , m_width(-1)
36 , m_width(-1)
37 , m_height(-1)
37 , m_height(-1)
38{
38{
39− qDebug() << "MirSurface::MirSurface() " << name;
39+// qDebug() << "MirSurface::MirSurface() " << name;
40}
40}
41
41
42MirSurface::~MirSurface()
42MirSurface::~MirSurface()
43{
43{
44− qDebug() << "MirSurface::~MirSurface() " << name();
44+// qDebug() << "MirSurface::~MirSurface() " << name();
45}
45}
46
46
47QString MirSurface::name() const
47QString MirSurface::name() const
@@ -75,7 +75,7 @@ bool MirSurface::live() const
75
75
76void MirSurface::setLive(bool live)
76void MirSurface::setLive(bool live)
77{
77{
78− qDebug().nospace() << "MirSurface::setLive("<<live<<") " << name();
78+// qDebug().nospace() << "MirSurface::setLive("<<live<<") " << name();
79 if (live == m_live)
79 if (live == m_live)
80 return;
80 return;
81
81
@@ -87,7 +87,7 @@ void MirSurface::setLive(bool live)
87 }
87 }
88}
88}
89
89
90−QString MirSurface::qmlFilePath() const
90+QUrl MirSurface::qmlFilePath() const
91{
91{
92 return m_qmlFilePath;
92 return m_qmlFilePath;
93}
93}
@@ -123,13 +123,13 @@ void MirSurface::setOrientationAngle(Mir::OrientationAngle angle)
123void MirSurface::incrementViewCount()
123void MirSurface::incrementViewCount()
124{
124{
125 ++m_viewCount;
125 ++m_viewCount;
126− qDebug().nospace() << "MirSurface::incrementViewCount() viewCount(after)=" << m_viewCount << " " << name();
126+// qDebug().nospace() << "MirSurface::incrementViewCount() viewCount(after)=" << m_viewCount << " " << name();
127}
127}
128
128
129void MirSurface::decrementViewCount()
129void MirSurface::decrementViewCount()
130{
130{
131 --m_viewCount;
131 --m_viewCount;
132− qDebug().nospace() << "MirSurface::decrementViewCount() viewCount(after)=" << m_viewCount << " " << name();
132+// qDebug().nospace() << "MirSurface::decrementViewCount() viewCount(after)=" << m_viewCount << " " << name();
133
133
134 Q_ASSERT(m_viewCount >= 0);
134 Q_ASSERT(m_viewCount >= 0);
135
135
@@ -170,13 +170,20 @@ int MirSurface::height() const
170
170
171void MirSurface::resize(int width, int height)
171void MirSurface::resize(int width, int height)
172{
172{
173+ bool changed = false;
173 if (width != m_width) {
174 if (width != m_width) {
174 m_width = width;
175 m_width = width;
175 Q_EMIT widthChanged();
176 Q_EMIT widthChanged();
177+ changed = true;
176 }
178 }
177
179
178 if (m_height != height) {
180 if (m_height != height) {
179 m_height = height;
181 m_height = height;
180 Q_EMIT heightChanged();
182 Q_EMIT heightChanged();
183+ changed = true;
184+ }
185+
186+ if (changed) {
187+ Q_EMIT sizeChanged(QSize(width, height));
181 }
188 }
182}
189}
tests/mocks/Unity/Application/MirSurface.h+3−3
@@ -38,7 +38,7 @@ public:
38 Mir::Type type,
38 Mir::Type type,
39 Mir::State state,
39 Mir::State state,
40 const QUrl& screenshot,
40 const QUrl& screenshot,
41− const QString &qmlFilePath = QString());
41+ const QUrl &qmlFilePath = QUrl());
42 virtual ~MirSurface();
42 virtual ~MirSurface();
43
43
44 ////
44 ////
@@ -76,7 +76,7 @@ public:
76 /////
76 /////
77 // internal mock stuff
77 // internal mock stuff
78
78
79− QString qmlFilePath() const;
79+ QUrl qmlFilePath() const;
80
80
81 QUrl screenshotUrl() const;
81 QUrl screenshotUrl() const;
82 void setScreenshotUrl(QUrl);
82 void setScreenshotUrl(QUrl);
@@ -102,7 +102,7 @@ private:
102 Mir::State m_state;
102 Mir::State m_state;
103 Mir::OrientationAngle m_orientationAngle;
103 Mir::OrientationAngle m_orientationAngle;
104 QUrl m_screenshotUrl;
104 QUrl m_screenshotUrl;
105− QString m_qmlFilePath;
105+ QUrl m_qmlFilePath;
106 bool m_live;
106 bool m_live;
107 int m_viewCount;
107 int m_viewCount;
108 bool m_activeFocus;
108 bool m_activeFocus;
tests/mocks/Unity/Application/MirSurfaceItem.cpp+11−12
@@ -38,7 +38,7 @@ MirSurfaceItem::MirSurfaceItem(QQuickItem *parent)
38 , m_touchPressCount(0)
38 , m_touchPressCount(0)
39 , m_touchReleaseCount(0)
39 , m_touchReleaseCount(0)
40{
40{
41− qDebug() << "MirSurfaceItem::MirSurfaceItem() " << (void*)(this) << name();
41+// qDebug() << "MirSurfaceItem::MirSurfaceItem() " << (void*)(this) << name();
42 setAcceptedMouseButtons(Qt::LeftButton | Qt::MiddleButton | Qt::RightButton |
42 setAcceptedMouseButtons(Qt::LeftButton | Qt::MiddleButton | Qt::RightButton |
43 Qt::ExtraButton1 | Qt::ExtraButton2 | Qt::ExtraButton3 | Qt::ExtraButton4 |
43 Qt::ExtraButton1 | Qt::ExtraButton2 | Qt::ExtraButton3 | Qt::ExtraButton4 |
44 Qt::ExtraButton5 | Qt::ExtraButton6 | Qt::ExtraButton7 | Qt::ExtraButton8 |
44 Qt::ExtraButton5 | Qt::ExtraButton6 | Qt::ExtraButton7 | Qt::ExtraButton8 |
@@ -48,7 +48,7 @@ MirSurfaceItem::MirSurfaceItem(QQuickItem *parent)
48
48
49MirSurfaceItem::~MirSurfaceItem()
49MirSurfaceItem::~MirSurfaceItem()
50{
50{
51− qDebug() << "MirSurfaceItem::~MirSurfaceItem() " << (void*)(this) << name();
51+// qDebug() << "MirSurfaceItem::~MirSurfaceItem() " << (void*)(this) << name();
52 setSurface(nullptr);
52 setSurface(nullptr);
53}
53}
54
54
@@ -136,7 +136,7 @@ void MirSurfaceItem::onComponentStatusChanged(QQmlComponent::Status status)
136
136
137void MirSurfaceItem::createQmlContentItem()
137void MirSurfaceItem::createQmlContentItem()
138{
138{
139− qDebug() << "MirSurfaceItem::createQmlContentItem()";
139+// qDebug() << "MirSurfaceItem::createQmlContentItem()";
140
140
141 m_qmlItem = qobject_cast<QQuickItem*>(m_qmlContentComponent->create());
141 m_qmlItem = qobject_cast<QQuickItem*>(m_qmlContentComponent->create());
142 m_qmlItem->setParentItem(this);
142 m_qmlItem->setParentItem(this);
@@ -178,9 +178,9 @@ void MirSurfaceItem::mouseReleaseEvent(QMouseEvent * event)
178
178
179void MirSurfaceItem::setSurface(MirSurfaceInterface* surface)
179void MirSurfaceItem::setSurface(MirSurfaceInterface* surface)
180{
180{
181− qDebug().nospace() << "MirSurfaceItem::setSurface() this=" << (void*)(this)
181+// qDebug().nospace() << "MirSurfaceItem::setSurface() this=" << (void*)(this)
182− << " name=" << name()
182+// << " name=" << name()
183− << " surface=" << surface;
183+// << " surface=" << surface;
184
184
185 if (m_qmlSurface == surface) {
185 if (m_qmlSurface == surface) {
186 return;
186 return;
@@ -215,12 +215,11 @@ void MirSurfaceItem::setSurface(MirSurfaceInterface* surface)
215 QQuickView *quickView =
215 QQuickView *quickView =
216 qobject_cast<QQuickView*>(QGuiApplication::topLevelWindows()[0]);
216 qobject_cast<QQuickView*>(QGuiApplication::topLevelWindows()[0]);
217
217
218− QString qmlComponentFilePath;
218+ QUrl qmlComponentFilePath;
219 if (!m_qmlSurface->qmlFilePath().isEmpty()) {
219 if (!m_qmlSurface->qmlFilePath().isEmpty()) {
220− qmlComponentFilePath.append(m_qmlSurface->qmlFilePath());
220+ qmlComponentFilePath = m_qmlSurface->qmlFilePath();
221 } else {
221 } else {
222− qmlComponentFilePath = QString("%1/Unity/Application/MirSurfaceItem.qml")
222+ qmlComponentFilePath = QUrl("qrc:///Unity/Application/MirSurfaceItem.qml");
223− .arg(mockPluginsDir());
224 }
223 }
225
224
226 m_qmlContentComponent = new QQmlComponent(quickView->engine(), qmlComponentFilePath);
225 m_qmlContentComponent = new QQmlComponent(quickView->engine(), qmlComponentFilePath);
@@ -269,7 +268,7 @@ int MirSurfaceItem::surfaceWidth() const
269
268
270void MirSurfaceItem::setSurfaceWidth(int value)
269void MirSurfaceItem::setSurfaceWidth(int value)
271{
270{
272− if (m_surfaceWidth != value) {
271+ if (value != -1 && m_surfaceWidth != value) {
273 m_surfaceWidth = value;
272 m_surfaceWidth = value;
274 Q_EMIT surfaceWidthChanged(m_surfaceWidth);
273 Q_EMIT surfaceWidthChanged(m_surfaceWidth);
275 updateSurfaceSize();
274 updateSurfaceSize();
@@ -283,7 +282,7 @@ int MirSurfaceItem::surfaceHeight() const
283
282
284void MirSurfaceItem::setSurfaceHeight(int value)
283void MirSurfaceItem::setSurfaceHeight(int value)
285{
284{
286− if (m_surfaceHeight != value) {
285+ if (value != -1 && m_surfaceHeight != value) {
287 m_surfaceHeight = value;
286 m_surfaceHeight = value;
288 Q_EMIT surfaceHeightChanged(m_surfaceHeight);
287 Q_EMIT surfaceHeightChanged(m_surfaceHeight);
289 updateSurfaceSize();
288 updateSurfaceSize();
tests/mocks/Unity/Application/Session.cpp+4−4
@@ -35,14 +35,14 @@ Session::Session(const QString &name,
35 , m_parentSession(nullptr)
35 , m_parentSession(nullptr)
36 , m_children(new SessionModel(this))
36 , m_children(new SessionModel(this))
37{
37{
38− qDebug() << "Session::Session() " << this->name();
38+// qDebug() << "Session::Session() " << this->name();
39
39
40 QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
40 QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
41}
41}
42
42
43Session::~Session()
43Session::~Session()
44{
44{
45− qDebug() << "Session::~Session() " << name();
45+// qDebug() << "Session::~Session() " << name();
46
46
47 QList<Session*> children(m_children->list());
47 QList<Session*> children(m_children->list());
48 for (Session* child : children) {
48 for (Session* child : children) {
@@ -67,7 +67,7 @@ Session::~Session()
67
67
68void Session::release()
68void Session::release()
69{
69{
70− qDebug() << "Session::release " << name();
70+// qDebug() << "Session::release " << name();
71 deleteLater();
71 deleteLater();
72}
72}
73
73
@@ -82,7 +82,7 @@ void Session::setApplication(ApplicationInfo* application)
82
82
83void Session::setSurface(MirSurface* surface)
83void Session::setSurface(MirSurface* surface)
84{
84{
85− qDebug() << "Session::setSurface - session=" << name() << "surface=" << surface;
85+// qDebug() << "Session::setSurface - session=" << name() << "surface=" << surface;
86 if (m_surface == surface)
86 if (m_surface == surface)
87 return;
87 return;
88
88
tests/mocks/Unity/Application/VirtualKeyboard.cpp+2−4
@@ -26,10 +26,8 @@ VirtualKeyboard::VirtualKeyboard()
26 : MirSurface("input-method",
26 : MirSurface("input-method",
27 Mir::InputMethodType,
27 Mir::InputMethodType,
28 Mir::MinimizedState,
28 Mir::MinimizedState,
29− QString("file://%1/Dash/graphics/phone/screenshots/vkb_portrait.png")
29+ QUrl("qrc:///Unity/Application/vkb_portrait.png"),
30− .arg(qmlDirectory()),
31− QString("%1/Unity/Application/VirtualKeyboard.qml")
30+ QUrl("qrc:///Unity/Application/VirtualKeyboard.qml"))
32− .arg(mockPluginsDir()))
33{
31{
34}
32}
35
33
tests/mocks/Unity/Application/MirSurfaceItem.qml → tests/mocks/Unity/Application/resources/MirSurfaceItem.qmlrenamed

The content is the same.

tests/mocks/Unity/Application/VirtualKeyboard.qml → tests/mocks/Unity/Application/resources/VirtualKeyboard.qmlrenamed

The content is the same.

tests/mocks/Unity/Application/resources/surfaces.qrcnew file+7
@@ -0,0 +1,7 @@
1+<RCC>
2+ <qresource prefix="/Unity/Application">
3+ <file>VirtualKeyboard.qml</file>
4+ <file>MirSurfaceItem.qml</file>
5+ <file>vkb_portrait.png</file>
6+ </qresource>
7+</RCC>
tests/mocks/Unity/Application/resources/vkb_portrait.pngnew file

Binary file not shown.

tests/mocks/Unity/Launcher/MockLauncherItem.cpp+1−1
@@ -29,7 +29,7 @@ MockLauncherItem::MockLauncherItem(const QString &appId, const QString& desktopF
29 m_appId(appId),
29 m_appId(appId),
30 m_desktopFile(desktopFile),
30 m_desktopFile(desktopFile),
31 m_name(name),
31 m_name(name),
32− m_icon(qmlDirectory() + "graphics/applicationIcons/" + icon + ".png"),
32+ m_icon(qmlDirectory() + "/graphics/applicationIcons/" + icon + ".png"),
33 m_pinned(false),
33 m_pinned(false),
34 m_running(false),
34 m_running(false),
35 m_recent(false),
35 m_recent(false),
tests/mocks/Unity/Notifications/MockActionModel.cpp+1−1
@@ -59,7 +59,7 @@ QHash<int, QByteArray> ActionModel::roleNames() const {
59 return roles;
59 return roles;
60}
60}
61
61
62−Q_INVOKABLE QVariant ActionModel::data(int row, int role) const
62+QVariant ActionModel::data(int row, int role) const
63{
63{
64 return data(index(row, 0), role);
64 return data(index(row, 0), role);
65}
65}
tests/mocks/Unity/Notifications/MockNotification.cpp+1
@@ -39,6 +39,7 @@ MockNotification::MockNotification(QObject *parent) : QObject(parent), p(new Moc
39}
39}
40
40
41MockNotification::~MockNotification() {
41MockNotification::~MockNotification() {
42+ delete p->actionsModel;
42}
43}
43
44
44QString MockNotification::getSummary() const {
45QString MockNotification::getSummary() const {
tests/mocks/Unity/Notifications/MockNotification.h+1−1
@@ -30,7 +30,7 @@ struct MockNotificationPrivate;
30
30
31class MockNotification : public QObject {
31class MockNotification : public QObject {
32 Q_OBJECT
32 Q_OBJECT
33− Q_ENUMS(Type)
33+ Q_ENUMS(Type Urgency)
34 Q_PROPERTY(QString summary READ getSummary WRITE setSummary NOTIFY summaryChanged)
34 Q_PROPERTY(QString summary READ getSummary WRITE setSummary NOTIFY summaryChanged)
35 Q_PROPERTY(QString body READ getBody WRITE setBody NOTIFY bodyChanged)
35 Q_PROPERTY(QString body READ getBody WRITE setBody NOTIFY bodyChanged)
36 Q_PROPERTY(int nid READ getID WRITE setID NOTIFY idChanged)
36 Q_PROPERTY(int nid READ getID WRITE setID NOTIFY idChanged)
tests/mocks/Unity/Notifications/MockNotificationModel.cpp+5−1
@@ -35,6 +35,10 @@ MockNotificationModel::MockNotificationModel(QObject *parent) : QAbstractListMod
35}
35}
36
36
37MockNotificationModel::~MockNotificationModel() {
37MockNotificationModel::~MockNotificationModel() {
38+ Q_FOREACH(MockNotification *n, m_queue) {
39+ n->deleteLater();
40+ }
41+ m_queue.clear();
38}
42}
39
43
40int MockNotificationModel::rowCount(const QModelIndex &) const {
44int MockNotificationModel::rowCount(const QModelIndex &) const {
@@ -47,7 +51,7 @@ int MockNotificationModel::getCount() const {
47
51
48QVariant MockNotificationModel::data(const QModelIndex &index, int role) const {
52QVariant MockNotificationModel::data(const QModelIndex &index, int role) const {
49 if (!index.isValid())
53 if (!index.isValid())
50− return QVariant();
54+ return QVariant();
51
55
52 switch(role) {
56 switch(role) {
53 case ModelInterface::RoleType:
57 case ModelInterface::RoleType:
tests/mocks/Unity/fake_previewstack.cpp+2−2
@@ -21,8 +21,8 @@
21#include "fake_previewmodel.h"
21#include "fake_previewmodel.h"
22#include "fake_scope.h"
22#include "fake_scope.h"
23
23
24−PreviewStack::PreviewStack(QObject* parent, Scope *scope)
24+PreviewStack::PreviewStack(Scope *scope)
25− : unity::shell::scopes::PreviewStackInterface(parent)
25+ : unity::shell::scopes::PreviewStackInterface(nullptr)
26{
26{
27 m_previews << new PreviewModel(this, scope);
27 m_previews << new PreviewModel(this, scope);
28}
28}
tests/mocks/Unity/fake_previewstack.h+1−1
@@ -32,7 +32,7 @@ class PreviewStack : public unity::shell::scopes::PreviewStackInterface
32 Q_OBJECT
32 Q_OBJECT
33
33
34public:
34public:
35− explicit PreviewStack(QObject* parent = 0, Scope* scope = 0);
35+ explicit PreviewStack(Scope* scope = 0);
36 virtual ~PreviewStack();
36 virtual ~PreviewStack();
37
37
38 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
38 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
tests/mocks/Unity/fake_resultsmodel.cpp+1−1
@@ -78,7 +78,7 @@ ResultsModel::data(const QModelIndex& index, int role) const
78 case RoleTitle:
78 case RoleTitle:
79 return QString("Title.%1.%2").arg(m_categoryId).arg(index.row());
79 return QString("Title.%1.%2").arg(m_categoryId).arg(index.row());
80 case RoleArt:
80 case RoleArt:
81− return qmlDirectory() + "graphics/applicationIcons/dash.png";
81+ return qmlDirectory() + "/graphics/applicationIcons/dash.png";
82 case RoleSubtitle:
82 case RoleSubtitle:
83 return QString("Subtitle.%1.%2").arg(m_categoryId).arg(index.row());
83 return QString("Subtitle.%1.%2").arg(m_categoryId).arg(index.row());
84 case RoleMascot:
84 case RoleMascot:
tests/mocks/Unity/fake_scope.cpp+3−5
@@ -201,9 +201,7 @@ PreviewStack* Scope::preview(QVariant const& result, QString const& /*categoryId
201 if (m_returnNullPreview) {
201 if (m_returnNullPreview) {
202 return nullptr;
202 return nullptr;
203 } else {
203 } else {
204− // This probably leaks, do we don't care
205− // it's a test after all
206− return new PreviewStack(this, this);
204+ return new PreviewStack(this);
207 }
205 }
208}
206}
209
207
@@ -253,11 +251,11 @@ QVariantMap Scope::customizations() const
253 m["foreground-color"] = "blue";
251 m["foreground-color"] = "blue";
254 m["page-header"] = h;
252 m["page-header"] = h;
255 } else if (m_id == "MockScope4") {
253 } else if (m_id == "MockScope4") {
256− h["navigation-background"] = QUrl(sourceDirectory() + "tests/qmltests/Dash/artwork/background.png");
254+ h["navigation-background"] = QUrl(sourceDirectory() + "/tests/qmltests/Dash/artwork/background.png");
257 m["page-header"] = h;
255 m["page-header"] = h;
258 } else if (m_id == "MockScope5") {
256 } else if (m_id == "MockScope5") {
259 h["background"] = "gradient:///lightgrey/grey";
257 h["background"] = "gradient:///lightgrey/grey";
260− h["logo"] = QUrl(sourceDirectory() + "tests/qmltests/Dash/tst_PageHeader/logo-ubuntu-orange.svg");
258+ h["logo"] = QUrl(sourceDirectory() + "/tests/qmltests/Dash/tst_PageHeader/logo-ubuntu-orange.svg");
261 h["divider-color"] = "red";
259 h["divider-color"] = "red";
262 h["navigation-background"] = "color:///black";
260 h["navigation-background"] = "color:///black";
263 m["page-header"] = h;
261 m["page-header"] = h;
tests/mocks/Unity/fake_scopesoverview.cpp+1−1
@@ -308,7 +308,7 @@ QVariant ScopesOverviewResultsModel::data(const QModelIndex& index, int role) co
308 case RoleSubtitle:
308 case RoleSubtitle:
309 return scope && scope->name() == "Videos this is long ab cd ef gh ij kl" ? "tube, movies, cinema, pictures, art, moving images, magic in a box" : QString();
309 return scope && scope->name() == "Videos this is long ab cd ef gh ij kl" ? "tube, movies, cinema, pictures, art, moving images, magic in a box" : QString();
310 case RoleArt:
310 case RoleArt:
311− return qmlDirectory() + "graphics/applicationIcons/dash.png";
311+ return qmlDirectory() + "/graphics/applicationIcons/dash.png";
312 case RoleMascot:
312 case RoleMascot:
313 case RoleEmblem:
313 case RoleEmblem:
314 case RoleSummary:
314 case RoleSummary:
tests/mocks/libusermetrics/UserMetrics.cpp+1−5
@@ -416,11 +416,7 @@ UserMetrics::~UserMetrics()
416
416
417QString UserMetrics::label() const
417QString UserMetrics::label() const
418{
418{
419− if (d_ptr->m_label.isEmpty()) {
420− return "No data";
421− } else {
422− return d_ptr->m_label;
419+ return d_ptr->m_label;
423− }
424}
420}
425
421
426QString UserMetrics::username() const
422QString UserMetrics::username() const
tests/plugins/Dash/CMakeLists.txt−1
@@ -23,7 +23,6 @@ include_directories(
23remove_definitions(-DQT_NO_KEYWORDS)
23remove_definitions(-DQT_NO_KEYWORDS)
24
24
25add_definitions(-DDASHVIEWSTEST_FOLDER="${CMAKE_CURRENT_SOURCE_DIR}")
25add_definitions(-DDASHVIEWSTEST_FOLDER="${CMAKE_CURRENT_SOURCE_DIR}")
26−add_definitions(-DBUILT_PLUGINS_DIR="${CMAKE_BINARY_DIR}/plugins")
27
26
28macro(add_lvwph_test FILENAME TESTNAME)
27macro(add_lvwph_test FILENAME TESTNAME)
29 add_executable(${TESTNAME}TestExec
28 add_executable(${TESTNAME}TestExec
tests/plugins/Dash/cardcreatortest.cpp−1
@@ -35,7 +35,6 @@ private Q_SLOTS:
35 void init()
35 void init()
36 {
36 {
37 view = new QQuickView();
37 view = new QQuickView();
38− view->engine()->addImportPath(BUILT_PLUGINS_DIR);
39 view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/cardcreatortest.qml"));
38 view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/cardcreatortest.qml"));
40 view->show();
39 view->show();
41 QTest::qWaitForWindowExposed(view);
40 QTest::qWaitForWindowExposed(view);
tests/plugins/Dash/horizontaljournaltest.cpp−1
@@ -123,7 +123,6 @@ private Q_SLOTS:
123 {
123 {
124 view = new QQuickView();
124 view = new QQuickView();
125 view->setResizeMode(QQuickView::SizeRootObjectToView);
125 view->setResizeMode(QQuickView::SizeRootObjectToView);
126− view->engine()->addImportPath(BUILT_PLUGINS_DIR);
127
126
128 model = new WidthModel();
127 model = new WidthModel();
129 QStringList widthList;
128 QStringList widthList;
tests/plugins/Dash/horizontaljournaltry.cpp−1
@@ -63,7 +63,6 @@ int main(int argc, char *argv[])
63
63
64 QQuickView *view = new QQuickView();
64 QQuickView *view = new QQuickView();
65 view->setResizeMode(QQuickView::SizeRootObjectToView);
65 view->setResizeMode(QQuickView::SizeRootObjectToView);
66− view->engine()->addImportPath(BUILT_PLUGINS_DIR);
67
66
68 QWidthModela model;
67 QWidthModela model;
69 QStringList heightList;
68 QStringList heightList;
tests/plugins/Dash/listviewwithpageheadersectionexternalmodeltest.cpp−1
@@ -168,7 +168,6 @@ private Q_SLOTS:
168 void init()
168 void init()
169 {
169 {
170 view = new QQuickView();
170 view = new QQuickView();
171− view->engine()->addImportPath(BUILT_PLUGINS_DIR);
172 view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/listviewwithpageheadertestsectionexternalmodel.qml"));
171 view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/listviewwithpageheadertestsectionexternalmodel.qml"));
173 lvwph = dynamic_cast<ListViewWithPageHeader*>(view->rootObject()->findChild<QQuickFlickable*>());
172 lvwph = dynamic_cast<ListViewWithPageHeader*>(view->rootObject()->findChild<QQuickFlickable*>());
174 QVERIFY(lvwph);
173 QVERIFY(lvwph);
tests/plugins/Dash/listviewwithpageheadersectiontest.cpp−1
@@ -133,7 +133,6 @@ private Q_SLOTS:
133 void init()
133 void init()
134 {
134 {
135 view = new QQuickView();
135 view = new QQuickView();
136− view->engine()->addImportPath(BUILT_PLUGINS_DIR);
137 view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/listviewwithpageheadertestsection.qml"));
136 view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/listviewwithpageheadertestsection.qml"));
138 lvwph = dynamic_cast<ListViewWithPageHeader*>(view->rootObject()->findChild<QQuickFlickable*>());
137 lvwph = dynamic_cast<ListViewWithPageHeader*>(view->rootObject()->findChild<QQuickFlickable*>());
139 model = view->rootObject()->findChild<QQmlListModel*>();
138 model = view->rootObject()->findChild<QQmlListModel*>();
tests/plugins/Dash/listviewwithpageheadertest.cpp−1
@@ -119,7 +119,6 @@ private Q_SLOTS:
119 void init()
119 void init()
120 {
120 {
121 view = new QQuickView();
121 view = new QQuickView();
122− view->engine()->addImportPath(BUILT_PLUGINS_DIR);
123 view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/listviewwithpageheadertest.qml"));
122 view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/listviewwithpageheadertest.qml"));
124 lvwph = dynamic_cast<ListViewWithPageHeader*>(view->rootObject()->findChild<QQuickFlickable*>());
123 lvwph = dynamic_cast<ListViewWithPageHeader*>(view->rootObject()->findChild<QQuickFlickable*>());
125 model = view->rootObject()->findChild<QQmlListModel*>();
124 model = view->rootObject()->findChild<QQmlListModel*>();
tests/plugins/Dash/organicgridtest.cpp−1
@@ -126,7 +126,6 @@ private Q_SLOTS:
126 {
126 {
127 view = new QQuickView();
127 view = new QQuickView();
128 view->setResizeMode(QQuickView::SizeRootObjectToView);
128 view->setResizeMode(QQuickView::SizeRootObjectToView);
129− view->engine()->addImportPath(BUILT_PLUGINS_DIR);
130
129
131 model = new DummyModel();
130 model = new DummyModel();
132 model->setCount(21);
131 model->setCount(21);
tests/plugins/Dash/organicgridtry.cpp−1
@@ -73,7 +73,6 @@ int main(int argc, char *argv[])
73
73
74 QQuickView *view = new QQuickView();
74 QQuickView *view = new QQuickView();
75 view->setResizeMode(QQuickView::SizeRootObjectToView);
75 view->setResizeMode(QQuickView::SizeRootObjectToView);
76− view->engine()->addImportPath(BUILT_PLUGINS_DIR);
77
76
78 DummyModel model;
77 DummyModel model;
79 model.setCount(3);
78 model.setCount(3);
tests/plugins/Dash/verticaljournaltest.cpp−1
@@ -125,7 +125,6 @@ private Q_SLOTS:
125 {
125 {
126 view = new QQuickView();
126 view = new QQuickView();
127 view->setResizeMode(QQuickView::SizeRootObjectToView);
127 view->setResizeMode(QQuickView::SizeRootObjectToView);
128− view->engine()->addImportPath(BUILT_PLUGINS_DIR);
129
128
130 model = new HeightModel();
129 model = new HeightModel();
131 QStringList heightList;
130 QStringList heightList;
tests/plugins/Dash/verticaljournaltry.cpp−1
@@ -63,7 +63,6 @@ int main(int argc, char *argv[])
63
63
64 QQuickView *view = new QQuickView();
64 QQuickView *view = new QQuickView();
65 view->setResizeMode(QQuickView::SizeRootObjectToView);
65 view->setResizeMode(QQuickView::SizeRootObjectToView);
66− view->engine()->addImportPath(BUILT_PLUGINS_DIR);
67
66
68 QHeightModel model;
67 QHeightModel model;
69 QStringList heightList;
68 QStringList heightList;
tests/plugins/IntegratedLightDM/CMakeLists.txt+1−1
@@ -25,7 +25,7 @@ add_unity8_uitest(GreeterDBus dbus-test-runner
25 ARG_PREFIX "--parameter"
25 ARG_PREFIX "--parameter"
26 ARGS --task $<TARGET_FILE:GreeterDBusTestExec>
26 ARGS --task $<TARGET_FILE:GreeterDBusTestExec>
27 DEPENDS MockLightDM
27 DEPENDS MockLightDM
28− IMPORT_PATHS ${CMAKE_BINARY_DIR}/tests/mocks
28+ IMPORT_PATHS ${UNITY_MOCKPATH}
29 LIGHTDM
29 LIGHTDM
30 )
30 )
31
31
tests/plugins/Ubuntu/Gestures/CMakeLists.txt+3−7
@@ -14,9 +14,6 @@ include_directories(
14
14
15export_qmlfiles(UbuntuGesturesTest .)
15export_qmlfiles(UbuntuGesturesTest .)
16
16
17−add_definitions(-DUBUNTU_GESTURES_PLUGIN_DIR="${CMAKE_BINARY_DIR}/plugins")
18−add_definitions(-DTESTS_UTILS_MODULES_DIR="${CMAKE_BINARY_DIR}/tests/utils/modules")
19−
20macro(build_gesture_test CLASSNAME)
17macro(build_gesture_test CLASSNAME)
21 add_executable(${CLASSNAME}TestExec tst_${CLASSNAME}.cpp GestureTest.cpp TestItem.cpp)
18 add_executable(${CLASSNAME}TestExec tst_${CLASSNAME}.cpp GestureTest.cpp TestItem.cpp)
22 qt5_use_modules(${CLASSNAME}TestExec Test Core Qml Gui Quick)
19 qt5_use_modules(${CLASSNAME}TestExec Test Core Qml Gui Quick)
@@ -26,7 +23,7 @@ endmacro()
26macro(add_gesture_unit_test CLASSNAME)
23macro(add_gesture_unit_test CLASSNAME)
27 build_gesture_test(${CLASSNAME})
24 build_gesture_test(${CLASSNAME})
28 add_unity8_unittest(${CLASSNAME} ${CLASSNAME}TestExec
25 add_unity8_unittest(${CLASSNAME} ${CLASSNAME}TestExec
29− ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/plugins/Ubuntu/Gestures
26+ ENVIRONMENT LD_LIBRARY_PATH=${UNITY_PLUGINPATH}/Ubuntu/Gestures
30 DEPENDS UbuntuGesturesTest-qmlfiles
27 DEPENDS UbuntuGesturesTest-qmlfiles
31 ${ARGN}
28 ${ARGN}
32 )
29 )
@@ -35,12 +32,11 @@ endmacro()
35macro(add_gesture_ui_test CLASSNAME)
32macro(add_gesture_ui_test CLASSNAME)
36 build_gesture_test(${CLASSNAME})
33 build_gesture_test(${CLASSNAME})
37 add_unity8_uitest(${CLASSNAME} ${CLASSNAME}TestExec
34 add_unity8_uitest(${CLASSNAME} ${CLASSNAME}TestExec
38− ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/plugins/Ubuntu/Gestures
35+ ENVIRONMENT LD_LIBRARY_PATH=${UNITY_PLUGINPATH}/Ubuntu/Gestures
39 DEPENDS UbuntuGesturesTest-qmlfiles
36 DEPENDS UbuntuGesturesTest-qmlfiles
40 ${ARGN}
37 ${ARGN}
41 )
38 )
42− add_manual_qml_test(. ${CLASSNAME} IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins
39+ add_manual_qml_test(. ${CLASSNAME} IMPORT_PATHS ${UNITY_PLUGINPATH})
43− ${CMAKE_BINARY_DIR}/tests/utils/modules)
44endmacro()
40endmacro()
45
41
46add_gesture_ui_test(DirectionalDragArea)
42add_gesture_ui_test(DirectionalDragArea)
tests/plugins/Ubuntu/Gestures/GestureTest.cpp−2
@@ -44,8 +44,6 @@ void GestureTest::init()
44{
44{
45 m_view = new QQuickView;
45 m_view = new QQuickView;
46 m_view->setResizeMode(QQuickView::SizeRootObjectToView);
46 m_view->setResizeMode(QQuickView::SizeRootObjectToView);
47− m_view->engine()->addImportPath(QStringLiteral(UBUNTU_GESTURES_PLUGIN_DIR));
48− m_view->engine()->addImportPath(QStringLiteral(TESTS_UTILS_MODULES_DIR));
49 m_view->setSource(QUrl::fromLocalFile(m_qmlFilename));
47 m_view->setSource(QUrl::fromLocalFile(m_qmlFilename));
50 m_view->show();
48 m_view->show();
51 QVERIFY(QTest::qWaitForWindowExposed(m_view));
49 QVERIFY(QTest::qWaitForWindowExposed(m_view));
tests/plugins/Ubuntu/Gestures/tst_TouchGate.cpp−1
@@ -119,7 +119,6 @@ QQuickView *tst_TouchGate::createView()
119 QQuickView *window = new QQuickView(0);
119 QQuickView *window = new QQuickView(0);
120 window->setResizeMode(QQuickView::SizeRootObjectToView);
120 window->setResizeMode(QQuickView::SizeRootObjectToView);
121 window->resize(720, 720);
121 window->resize(720, 720);
122− window->engine()->addImportPath(QLatin1String(UBUNTU_GESTURES_PLUGIN_DIR));
123
122
124 return window;
123 return window;
125}
124}
tests/qmltests/CMakeLists.txt+2−2
@@ -1,7 +1,7 @@
1
1
2add_subdirectory(Components)
2add_subdirectory(Components)
3
3
4−add_unity8_qmltest(. OrientedShell)
4+add_unity8_qmltest(. OrientedShell LIGHTDM)
5add_unity8_qmltest(. Shell LIGHTDM)
5add_unity8_qmltest(. Shell LIGHTDM)
6add_unity8_qmltest(. ShellWithPin LIGHTDM)
6add_unity8_qmltest(. ShellWithPin LIGHTDM)
7add_unity8_qmltest(Components Background)
7add_unity8_qmltest(Components Background)
@@ -18,7 +18,7 @@ add_unity8_qmltest(Components Showable)
18add_unity8_qmltest(Components ZoomableImage)
18add_unity8_qmltest(Components ZoomableImage)
19add_unity8_qmltest(Dash Dash)
19add_unity8_qmltest(Dash Dash)
20add_unity8_qmltest(Dash DashContent)
20add_unity8_qmltest(Dash DashContent)
21−add_unity8_qmltest(Dash DashShell)
21+add_unity8_qmltest(Dash DashShell LIGHTDM)
22add_unity8_qmltest(Dash Card)
22add_unity8_qmltest(Dash Card)
23add_unity8_qmltest(Dash CardCarousel)
23add_unity8_qmltest(Dash CardCarousel)
24add_unity8_qmlbenchmark(Dash CardBenchmark 1000)
24add_unity8_qmlbenchmark(Dash CardBenchmark 1000)
tests/qmltests/Components/CMakeLists.txt+1−4
@@ -1,6 +1,4 @@
1−add_definitions(-DUBUNTU_GESTURES_PLUGIN_DIR="${CMAKE_BINARY_DIR}/plugins")
2add_definitions(-DTEST_DIR="${CMAKE_CURRENT_LIST_DIR}")
1add_definitions(-DTEST_DIR="${CMAKE_CURRENT_LIST_DIR}")
3−add_definitions(-DTESTS_UTILS_MODULES_DIR="${CMAKE_BINARY_DIR}/tests/utils/modules")
4
2
5########## tst_DragHandle
3########## tst_DragHandle
6
4
@@ -17,8 +15,7 @@ qt5_use_modules(DragHandleTestExec Test Core Qml Gui Quick)
17target_link_libraries(DragHandleTestExec UbuntuGesturesQml UbuntuGestures)
15target_link_libraries(DragHandleTestExec UbuntuGesturesQml UbuntuGestures)
18
16
19add_unity8_uitest(DragHandle DragHandleTestExec ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/plugins/Ubuntu/Gestures)
17add_unity8_uitest(DragHandle DragHandleTestExec ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/plugins/Ubuntu/Gestures)
20−add_manual_qml_test(. DragHandle IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${CMAKE_BINARY_DIR}/tests/utils/modules)
18+add_manual_qml_test(. DragHandle IMPORT_PATHS ${UNITY_PLUGINPATH})
21−
22
19
23########## tst_EdgeDragEvaluator
20########## tst_EdgeDragEvaluator
24add_executable(EdgeDragEvaluatorTestExec tst_EdgeDragEvaluator.cpp)
21add_executable(EdgeDragEvaluatorTestExec tst_EdgeDragEvaluator.cpp)
tests/qmltests/Components/tst_DragHandle.cpp−2
@@ -113,9 +113,7 @@ QQuickView *tst_DragHandle::createView()
113{
113{
114 QQuickView *window = new QQuickView(0);
114 QQuickView *window = new QQuickView(0);
115 window->setResizeMode(QQuickView::SizeRootObjectToView);
115 window->setResizeMode(QQuickView::SizeRootObjectToView);
116− window->engine()->addImportPath(QLatin1String(UBUNTU_GESTURES_PLUGIN_DIR));
117 window->engine()->addImportPath(QLatin1String(TEST_DIR));
116 window->engine()->addImportPath(QLatin1String(TEST_DIR));
118− window->engine()->addImportPath(QStringLiteral(TESTS_UTILS_MODULES_DIR));
119
117
120 return window;
118 return window;
121}
119}
tests/qmltests/Components/tst_EdgeDragEvaluator.cpp−1
@@ -99,7 +99,6 @@ QQuickView *tst_EdgeDragEvaluator::createView()
99{
99{
100 QQuickView *window = new QQuickView(0);
100 QQuickView *window = new QQuickView(0);
101 window->setResizeMode(QQuickView::SizeRootObjectToView);
101 window->setResizeMode(QQuickView::SizeRootObjectToView);
102− window->engine()->addImportPath(QLatin1String(UBUNTU_GESTURES_PLUGIN_DIR));
103 window->engine()->addImportPath(QLatin1String(TEST_DIR));
102 window->engine()->addImportPath(QLatin1String(TEST_DIR));
104
103
105 return window;
104 return window;
tests/qmltests/Dash/tst_Card.qml+2−2
@@ -473,14 +473,14 @@ Rectangle {
473
473
474 card.cardData["mascot"] = "somethingbroken2";
474 card.cardData["mascot"] = "somethingbroken2";
475 card.cardDataChanged();
475 card.cardDataChanged();
476− compare(mascotImage.image.status, Image.Error);
476+ compare(mascotImage.status, Image.Error);
477
477
478 cardTool.components["mascot"] = {"fallback": Qt.resolvedUrl("artwork/emblem.png")};
478 cardTool.components["mascot"] = {"fallback": Qt.resolvedUrl("artwork/emblem.png")};
479 cardTool.componentsChanged();
479 cardTool.componentsChanged();
480 card.cardData["mascot"] = "somethingbroken2";
480 card.cardData["mascot"] = "somethingbroken2";
481 card.cardDataChanged();
481 card.cardDataChanged();
482 waitForRendering(card);
482 waitForRendering(card);
483− tryCompare(mascotImage.image, "status", Image.Ready);
483+ tryCompare(mascotImage, "status", Image.Ready);
484 }
484 }
485
485
486 function test_font_weights_data() {
486 function test_font_weights_data() {
tests/qmltests/Greeter/tst_Infographics.qml+4−3
@@ -74,15 +74,16 @@ Item {
74
74
75 function test_set_username_data() {
75 function test_set_username_data() {
76 return [
76 return [
77− { username: "has-password", label: "<b>19</b> minutes talk time" },
77+ { username: "has-password", label: "<b>19</b> minutes talk time", visible: true },
78− { username: "two-factor", label: "No data" },
78+ { username: "two-factor", label: "", visible: true },
79− { username: "", label: "No data" },
79+ { username: "", label: "", visible: false },
80 ]
80 ]
81 }
81 }
82
82
83 function test_set_username(data) {
83 function test_set_username(data) {
84 infographicModel.username = data.username
84 infographicModel.username = data.username
85 tryCompare(label, "text", data.label)
85 tryCompare(label, "text", data.label)
86+ compare(infographic.visible, data.visible);
86 }
87 }
87 }
88 }
88
89
tests/qmltests/Notifications/tst_Notifications.qml+60−7
@@ -12,15 +12,14 @@
12 *
12 *
13 * You should have received a copy of the GNU Lesser General Public License
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/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Mirco Mueller <mirco.mueller@canonical.com>
18 */
15 */
19
16
20−import QtQuick 2.0
17+import QtQuick 2.4
18+import QtQuick.Layouts 1.1
21import QtTest 1.0
19import QtTest 1.0
22import ".."
20import ".."
23import "../../../qml/Notifications"
21import "../../../qml/Notifications"
22+import "../../../qml/Components/UnityInputInfo"
24import Ubuntu.Components 1.3
23import Ubuntu.Components 1.3
25import Unity.Test 0.1
24import Unity.Test 0.1
26import Unity.Notifications 1.0
25import Unity.Notifications 1.0
@@ -77,7 +76,7 @@ Item {
77 "type": Notification.Ephemeral,
76 "type": Notification.Ephemeral,
78 "hints": {},
77 "hints": {},
79 "summary": "Cole Raby",
78 "summary": "Cole Raby",
80− "body": "I did not expect it to be that late.",
79+ "body": "I did not expect it to be <b>that</b> late.",
81 "icon": "../graphics/avatars/amanda.png",
80 "icon": "../graphics/avatars/amanda.png",
82 "secondaryIcon": "../graphics/applicationIcons/facebook.png",
81 "secondaryIcon": "../graphics/applicationIcons/facebook.png",
83 "rawActions": ["reply_id", "Dummy"]})
82 "rawActions": ["reply_id", "Dummy"]})
@@ -91,7 +90,7 @@ Item {
91 "type": Notification.Ephemeral,
90 "type": Notification.Ephemeral,
92 "hints": {"x-canonical-non-shaped-icon": "true"},
91 "hints": {"x-canonical-non-shaped-icon": "true"},
93 "summary": "Contacts",
92 "summary": "Contacts",
94− "body": "Synchronised contacts-database with cloud-storage.",
93+ "body": "Synchronised contacts-database &amp; cloud-storage.",
95 "icon": "../graphics/applicationIcons/contacts-app.png",
94 "icon": "../graphics/applicationIcons/contacts-app.png",
96 "secondaryIcon": "",
95 "secondaryIcon": "",
97 "rawActions": ["reply_id", "Dummy"]})
96 "rawActions": ["reply_id", "Dummy"]})
@@ -189,6 +188,7 @@ Item {
189
188
190 anchors.fill: parent
189 anchors.fill: parent
191 model: mockModel
190 model: mockModel
191+ hasMouse: UnityInputInfo.mice > 0 // for testing, we add/remove only a mock mouse
192 }
192 }
193 }
193 }
194
194
@@ -218,7 +218,7 @@ Item {
218
218
219 Button {
219 Button {
220 width: parent.width
220 width: parent.width
221− text: "add an non-shaped-icon-summary-body"
221+ text: "add a non-shaped-icon-summary-body"
222 onClicked: rootRow.addEphemeralNonShapedIconNotification()
222 onClicked: rootRow.addEphemeralNonShapedIconNotification()
223 }
223 }
224
224
@@ -257,6 +257,24 @@ Item {
257 text: "clear model"
257 text: "clear model"
258 onClicked: rootRow.clearNotifications()
258 onClicked: rootRow.clearNotifications()
259 }
259 }
260+
261+ RowLayout {
262+ Layout.fillWidth: true
263+ CheckBox {
264+ id: fakeMouseCB
265+ onClicked: {
266+ if (checked) {
267+ UnityInputInfo.inputInfo.addMockMouse();
268+ } else {
269+ UnityInputInfo.inputInfo.removeMockMouse();
270+ }
271+ }
272+ }
273+ Label {
274+ text: "With fake mouse"
275+ anchors.verticalCenter: parent.verticalCenter
276+ }
277+ }
260 }
278 }
261 }
279 }
262
280
@@ -675,6 +693,41 @@ Item {
675 tryCompare(mockModel, "count", before - 1)
693 tryCompare(mockModel, "count", before - 1)
676 }
694 }
677 }
695 }
696+
697+ function test_clickToClose_data() { // reuse the data
698+ UnityInputInfo.inputInfo.addMockMouse();
699+ return test_NotificationRenderer_data();
700+ }
701+
702+ function test_clickToClose(data) {
703+ // populate model with some mock notifications
704+ mockModel.append(data.n)
705+
706+ // make sure the view is properly updated before going on
707+ notifications.forceLayout();
708+ waitForRendering(notifications);
709+
710+ var notification = findChild(notifications, "notification" + (mockModel.count - 1))
711+ verify(!!notification, "notification wasn't found");
712+
713+ // click-to-dismiss check
714+ waitForRendering(notification);
715+ var before = mockModel.count;
716+ var canBeClosed = notification.canBeClosed;
717+ mouseClick(notification);
718+
719+ if (canBeClosed) {
720+ // closing the notification, the model count should be one less
721+ tryCompare(mockModel, "count", before - 1)
722+ } else {
723+ // not closing, model stays the same
724+ tryCompare(mockModel, "count", before)
725+ }
726+ }
727+
728+ function cleanupTestCase() {
729+ UnityInputInfo.inputInfo.removeMockMouse();
730+ }
678 }
731 }
679 }
732 }
680}
733}
tests/qmltests/Notifications/tst_SwipeToAct.qml+58−14
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2014 Canonical, Ltd.
2+ * Copyright (C) 2014, 2015 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -14,10 +14,12 @@
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−import QtQuick 2.0
17+import QtQuick 2.4
18+import QtQuick.Layouts 1.1
18import QtTest 1.0
19import QtTest 1.0
19import ".."
20import ".."
20import "../../../qml/Notifications"
21import "../../../qml/Notifications"
22+import "../../../qml/Components/UnityInputInfo"
21import Ubuntu.Components 1.3
23import Ubuntu.Components 1.3
22import Unity.Test 0.1
24import Unity.Test 0.1
23import Unity.Notifications 1.0
25import Unity.Notifications 1.0
@@ -74,7 +76,10 @@ Item {
74 icon: "../graphics/avatars/amanda.png",
76 icon: "../graphics/avatars/amanda.png",
75 secondaryIcon: "incoming-call",
77 secondaryIcon: "incoming-call",
76 actions: [{ id: "ok_id", label: "Ok"},
78 actions: [{ id: "ok_id", label: "Ok"},
77− { id: "cancel_id", label: "Cancel"}]
79+ { id: "cancel_id", label: "Cancel"},
80+ { id: "foo_id", label: "Foo"},
81+ { id: "bar_id", label: "Bar"}
82+ ]
78 }
83 }
79
84
80 mockModel.append(n)
85 mockModel.append(n)
@@ -97,7 +102,6 @@ Item {
97
102
98 MouseArea{
103 MouseArea{
99 id: clickThroughCatcher
104 id: clickThroughCatcher
100−
101 anchors.fill: parent
105 anchors.fill: parent
102 }
106 }
103
107
@@ -108,6 +112,7 @@ Item {
108
112
109 anchors.fill: parent
113 anchors.fill: parent
110 model: mockModel
114 model: mockModel
115+ hasMouse: UnityInputInfo.mice > 0 // for testing, we add/remove only a mock mouse
111 }
116 }
112 }
117 }
113
118
@@ -140,6 +145,24 @@ Item {
140 text: "clear model"
145 text: "clear model"
141 onClicked: rootRow.clearNotifications()
146 onClicked: rootRow.clearNotifications()
142 }
147 }
148+
149+ RowLayout {
150+ Layout.fillWidth: true
151+ CheckBox {
152+ id: fakeMouseCB
153+ onClicked: {
154+ if (checked) {
155+ UnityInputInfo.inputInfo.addMockMouse();
156+ } else {
157+ UnityInputInfo.inputInfo.removeMockMouse();
158+ }
159+ }
160+ }
161+ Label {
162+ text: "With fake mouse"
163+ anchors.verticalCenter: parent.verticalCenter
164+ }
165+ }
143 }
166 }
144 }
167 }
145
168
@@ -258,21 +281,42 @@ Item {
258
281
259 if(data.buttonRowVisible) {
282 if(data.buttonRowVisible) {
260 var swipeButton = findChild(buttonRow, "notify_swipe_button")
283 var swipeButton = findChild(buttonRow, "notify_swipe_button")
284+
285+ if (!swipeButton.clickToAct) { // don't run if there's a real mouse
261− var slider = findChild(swipeButton, "slider")
286+ var slider = findChild(swipeButton, "slider")
262− var swipeMouseArea = findChild(swipeButton, "swipeMouseArea")
287+ var swipeMouseArea = findChild(swipeButton, "swipeMouseArea")
263− var x = swipeMouseArea.width / 2
288+ var x = swipeMouseArea.width / 2
264− var y = swipeMouseArea.height / 2
289+ var y = swipeMouseArea.height / 2
290+
291+ if(data.checkSwipeToActAccept) {
292+ tryCompareFunction(function() { mouseDrag(slider, x, y, (swipeMouseArea.width / 2) - slider.width, 0); return actionSpy.signalArguments.length > 0; }, true);
293+ compare(actionSpy.signalArguments[0][0], data.actions.data(0, ActionModel.RoleActionId), "got wrong id for positive action");
294+ actionSpy.clear();
295+ }
296+ if(data.checkSwipeToActReject) {
297+ tryCompareFunction(function() { mouseDrag(slider, x, y, -(swipeMouseArea.width / 2), 0); return actionSpy.signalArguments.length > 0; }, true);
298+ compare(actionSpy.signalArguments[0][0], data.actions.data(1, ActionModel.RoleActionId), "got wrong id for negative action");
299+ actionSpy.clear();
300+ }
301+ }
302+
303+ // add a mock mouse, test clicking the left/right buttons
304+ UnityInputInfo.inputInfo.addMockMouse();
305+ var leftButton = findChild(swipeButton, "leftButton");
306+ var rightButton = findChild(swipeButton, "rightButton");
265
307
266 if(data.checkSwipeToActAccept) {
308 if(data.checkSwipeToActAccept) {
267− tryCompareFunction(function() { mouseDrag(slider, x, y, (swipeMouseArea.width / 2) - slider.width, 0); return actionSpy.signalArguments.length > 0; }, true);
309+ mouseClick(rightButton);
268− compare(actionSpy.signalArguments[0][0], data.actions.data(0, ActionModel.RoleActionId), "got wrong id for positive action")
310+ compare(actionSpy.signalArguments[0][0], data.actions.data(0, ActionModel.RoleActionId), "got wrong id for positive action");
269− actionSpy.clear()
311+ actionSpy.clear();
270 }
312 }
313+
271 if(data.checkSwipeToActReject) {
314 if(data.checkSwipeToActReject) {
272− tryCompareFunction(function() { mouseDrag(slider, x, y, -(swipeMouseArea.width / 2), 0); return actionSpy.signalArguments.length > 0; }, true);
315+ mouseClick(leftButton);
273− compare(actionSpy.signalArguments[0][0], data.actions.data(1, ActionModel.RoleActionId), "got wrong id for negative action")
316+ compare(actionSpy.signalArguments[0][0], data.actions.data(1, ActionModel.RoleActionId), "got wrong id for negative action");
274− actionSpy.clear()
317+ actionSpy.clear();
275 }
318 }
319+ UnityInputInfo.inputInfo.removeMockMouse();
276 }
320 }
277 }
321 }
278 }
322 }
tests/qmltests/tst_OrientedShell.qml+106−1
@@ -996,6 +996,60 @@ Rectangle {
996 tryCompare(shell, "transformRotationAngle", root.primaryOrientationAngle);
996 tryCompare(shell, "transformRotationAngle", root.primaryOrientationAngle);
997 }
997 }
998
998
999+ /*
1000+ Regression test for https://bugs.launchpad.net/ubuntu/+source/unity8/+bug/1476757
1001+
1002+ Steps:
1003+ 1- have a portrait-only app in foreground (eg unity8-dash)
1004+ 2- launch or switch to some other application
1005+ 3- right-edge swipe to show the apps spread
1006+ 4- swipe up to close the current app (the one from step 2)
1007+ 5- lock the phone (press the power button)
1008+ 6- unlock the phone (press power button again and swipe greeter away)
1009+ * app from step 1 should be on foreground and focused
1010+ 7- rotate phone
1011+
1012+ Expected outcome:
1013+ - The portrait-only application stays put
1014+
1015+ Actual outcome:
1016+ - The portrait-only application rotates freely
1017+ */
1018+ function test_lockPhoneAfterClosingAppInSpreadThenUnlockAndRotate() {
1019+ loadShell("mako");
1020+
1021+ var gmailApp = ApplicationManager.startApplication("gmail-webapp");
1022+ verify(gmailApp);
1023+
1024+ waitUntilAppSurfaceShowsUp("gmail-webapp");
1025+
1026+ performEdgeSwipeToShowAppSpread();
1027+
1028+ swipeToCloseCurrentAppInSpread();
1029+
1030+ // press the power key once
1031+ Powerd.setStatus(Powerd.Off, Powerd.Unknown);
1032+ var greeter = findChild(shell, "greeter");
1033+ tryCompare(greeter, "fullyShown", true);
1034+
1035+ // and a second time to turn the display back on
1036+ Powerd.setStatus(Powerd.On, Powerd.Unknown);
1037+
1038+ swipeAwayGreeter();
1039+
1040+ verify(isAppSurfaceFocused("unity8-dash"))
1041+
1042+ signalSpy.clear();
1043+ signalSpy.target = shell;
1044+ signalSpy.signalName = "widthChanged";
1045+ verify(signalSpy.valid);
1046+
1047+ rotateTo(90);
1048+
1049+ // shell shouldn't have change its orientation at any moment
1050+ compare(signalSpy.count, 0);
1051+ }
1052+
999 // angle - rotation angle in degrees clockwise, relative to the primary orientation.
1053 // angle - rotation angle in degrees clockwise, relative to the primary orientation.
1000 function rotateTo(angle) {
1054 function rotateTo(angle) {
1001 switch (angle) {
1055 switch (angle) {
@@ -1016,6 +1070,12 @@ Rectangle {
1016 }
1070 }
1017
1071
1018 var rotationStates = findInvisibleChild(orientedShell, "rotationStates");
1072 var rotationStates = findInvisibleChild(orientedShell, "rotationStates");
1073+ verify(rotationStates.d);
1074+ verify(rotationStates.d.stateUpdateTimer);
1075+
1076+ // wait for the delayed state update to take place, if any
1077+ tryCompare(rotationStates.d.stateUpdateTimer, "running", false);
1078+
1019 waitUntilTransitionsEnd(rotationStates);
1079 waitUntilTransitionsEnd(rotationStates);
1020 }
1080 }
1021
1081
@@ -1239,7 +1299,6 @@ Rectangle {
1239 var childs = new Array(0);
1299 var childs = new Array(0);
1240 childs.push(obj)
1300 childs.push(obj)
1241 while (childs.length > 0) {
1301 while (childs.length > 0) {
1242− console.log("Checking " + childs[0].objectName);
1243 if (childs[0].objectName === "surfaceItem"
1302 if (childs[0].objectName === "surfaceItem"
1244 && childs[0].surface !== undefined
1303 && childs[0].surface !== undefined
1245 && childs[0].surface === surface) {
1304 && childs[0].surface === surface) {
@@ -1252,5 +1311,51 @@ Rectangle {
1252 }
1311 }
1253 return null;
1312 return null;
1254 }
1313 }
1314+
1315+ function swipeToCloseCurrentAppInSpread() {
1316+ var spreadView = findChild(shell, "spreadView");
1317+ verify(spreadView);
1318+
1319+ var delegateToClose = findChild(spreadView, "appDelegate0");
1320+ verify(delegateToClose);
1321+
1322+ var appIdToClose = ApplicationManager.get(0).appId;;
1323+ var appCountBefore = ApplicationManager.count;
1324+
1325+ // ensure the current app is widely visible by swiping to the right,
1326+ // which will move the app windows accordingly
1327+ touchFlick(shell,
1328+ shell.width * 0.25, shell.width / 2,
1329+ shell.width, shell.width / 2);
1330+
1331+ tryCompare(spreadView, "flicking", false);
1332+ tryCompare(spreadView, "moving", false);
1333+
1334+ // Swipe up close to its left edge, as it is the only area of it guaranteed to be exposed
1335+ // in the spread. Eg: its center could be covered by some other delegate.
1336+ touchFlick(delegateToClose,
1337+ 1, delegateToClose.height / 2,
1338+ 1, - delegateToClose.height / 4);
1339+
1340+ // ensure it got closed
1341+ tryCompare(ApplicationManager, "count", appCountBefore - 1);
1342+ compare(ApplicationManager.findApplication(appIdToClose), null);
1343+ }
1344+
1345+ function isAppSurfaceFocused(appId) {
1346+ var appWindow = findChild(shell, "appWindow_" + appId);
1347+ verify(appWindow);
1348+
1349+ var app = ApplicationManager.findApplication(appId);
1350+ verify(app);
1351+
1352+ var surface = app.session.surface;
1353+ verify(surface);
1354+
1355+ var surfaceItem = findSurfaceItem(appWindow, surface);
1356+ verify(surfaceItem);
1357+
1358+ return surfaceItem.activeFocus;
1359+ }
1255 }
1360 }
1256}
1361}
tests/qmltests/tst_Shell.qml+131−43
@@ -322,8 +322,9 @@ Rectangle {
322
322
323 function loadDesktopShellWithApps() {
323 function loadDesktopShellWithApps() {
324 loadShell("desktop");
324 loadShell("desktop");
325+ waitForRendering(shell)
325 shell.usageScenario = "desktop"
326 shell.usageScenario = "desktop"
326− waitForRendering(root)
327+ waitForRendering(shell)
327 var app1 = ApplicationManager.startApplication("dialer-app")
328 var app1 = ApplicationManager.startApplication("dialer-app")
328 var app2 = ApplicationManager.startApplication("webbrowser-app")
329 var app2 = ApplicationManager.startApplication("webbrowser-app")
329 var app3 = ApplicationManager.startApplication("camera-app")
330 var app3 = ApplicationManager.startApplication("camera-app")
@@ -1407,17 +1408,18 @@ Rectangle {
1407 keyClick(Qt.Key_Tab, Qt.ControlModifier)
1408 keyClick(Qt.Key_Tab, Qt.ControlModifier)
1408 tryCompare(app2.session.surface, "activeFocus", true)
1409 tryCompare(app2.session.surface, "activeFocus", true)
1409
1410
1411+ var desktopSpread = findChild(shell, "spread")
1410
1412
1411− tryCompare(desktopStage, "state", "")
1413+ tryCompare(desktopSpread, "state", "")
1412
1414
1413 // Just press Alt, make sure the spread comes up
1415 // Just press Alt, make sure the spread comes up
1414 keyPress(Qt.Key_Control);
1416 keyPress(Qt.Key_Control);
1415 keyClick(Qt.Key_Tab);
1417 keyClick(Qt.Key_Tab);
1416− tryCompare(desktopStage, "state", "altTab")
1418+ tryCompare(desktopSpread, "state", "altTab")
1417
1419
1418 // Release control, check if spread disappears
1420 // Release control, check if spread disappears
1419 keyRelease(Qt.Key_Control)
1421 keyRelease(Qt.Key_Control)
1420− tryCompare(desktopStage, "state", "")
1422+ tryCompare(desktopSpread, "state", "")
1421
1423
1422 // Focus should have switched back now
1424 // Focus should have switched back now
1423 tryCompare(app3.session.surface, "activeFocus", true)
1425 tryCompare(app3.session.surface, "activeFocus", true)
@@ -1429,41 +1431,44 @@ Rectangle {
1429 var desktopStage = findChild(shell, "stage");
1431 var desktopStage = findChild(shell, "stage");
1430 verify(desktopStage !== null)
1432 verify(desktopStage !== null)
1431
1433
1432− var appContainer = findInvisibleChild(shell, "appContainer")
1434+ var desktopSpread = findChild(shell, "spread");
1433− verify(appContainer !== null)
1435+ verify(desktopSpread !== null)
1434
1436
1437+ var spreadContainer = findInvisibleChild(shell, "spreadContainer")
1438+ verify(spreadContainer !== null)
1439+
1435− var appRepeater = findInvisibleChild(shell, "appRepeater")
1440+ var spreadRepeater = findInvisibleChild(shell, "spreadRepeater")
1436− verify(appRepeater !== null)
1441+ verify(spreadRepeater !== null)
1437
1442
1438 // remember the focused appId
1443 // remember the focused appId
1439 var focused = ApplicationManager.get(ApplicationManager.findApplication(ApplicationManager.focusedApplicationId));
1444 var focused = ApplicationManager.get(ApplicationManager.findApplication(ApplicationManager.focusedApplicationId));
1440
1445
1441− tryCompare(desktopStage, "state", "")
1446+ tryCompare(desktopSpread, "state", "")
1442
1447
1443 // Just press Alt, make sure the spread comes up
1448 // Just press Alt, make sure the spread comes up
1444 keyPress(Qt.Key_Control);
1449 keyPress(Qt.Key_Control);
1445 keyClick(Qt.Key_Tab);
1450 keyClick(Qt.Key_Tab);
1446− tryCompare(desktopStage, "state", "altTab")
1451+ tryCompare(desktopSpread, "state", "altTab")
1447− tryCompare(appRepeater, "highlightedIndex", 1)
1452+ tryCompare(spreadRepeater, "highlightedIndex", 1)
1448 waitForRendering(shell)
1453 waitForRendering(shell)
1449
1454
1450 // Now press and hold Tab, make sure the highlight moves all the way but stops at the last one
1455 // Now press and hold Tab, make sure the highlight moves all the way but stops at the last one
1451 // We can't simulate a pressed key with keyPress() currently, so let's inject the events
1456 // We can't simulate a pressed key with keyPress() currently, so let's inject the events
1452 // at API level. Jump for 10 times, verify that it's still at the last one and didn't wrap around.
1457 // at API level. Jump for 10 times, verify that it's still at the last one and didn't wrap around.
1453 for (var i = 0; i < 10; i++) {
1458 for (var i = 0; i < 10; i++) {
1454− appContainer.selectNext(true); // true == isAutoRepeat
1459+ desktopSpread.selectNext(true); // true == isAutoRepeat
1455 wait(0); // Trigger the event loop to make sure all the things happen
1460 wait(0); // Trigger the event loop to make sure all the things happen
1456 }
1461 }
1457− tryCompare(appRepeater, "highlightedIndex", 6)
1462+ tryCompare(spreadRepeater, "highlightedIndex", 6)
1458
1463
1459 // Now release it once, and verify that it does wrap around with an additional Tab press
1464 // Now release it once, and verify that it does wrap around with an additional Tab press
1460 keyRelease(Qt.Key_Tab);
1465 keyRelease(Qt.Key_Tab);
1461 keyClick(Qt.Key_Tab);
1466 keyClick(Qt.Key_Tab);
1462− tryCompare(appRepeater, "highlightedIndex", 0)
1467+ tryCompare(spreadRepeater, "highlightedIndex", 0)
1463
1468
1464 // Release control, check if spread disappears
1469 // Release control, check if spread disappears
1465 keyRelease(Qt.Key_Control)
1470 keyRelease(Qt.Key_Control)
1466− tryCompare(desktopStage, "state", "")
1471+ tryCompare(desktopSpread, "state", "")
1467
1472
1468 // Make sure that after wrapping around once, we have the same one focused as at the beginning
1473 // Make sure that after wrapping around once, we have the same one focused as at the beginning
1469 tryCompare(focused.session.surface, "activeFocus", true)
1474 tryCompare(focused.session.surface, "activeFocus", true)
@@ -1472,30 +1477,30 @@ Rectangle {
1472 function test_altBackTabNavigation() {
1477 function test_altBackTabNavigation() {
1473 loadDesktopShellWithApps();
1478 loadDesktopShellWithApps();
1474
1479
1475− var appRepeater = findInvisibleChild(shell, "appRepeater");
1480+ var spreadRepeater = findInvisibleChild(shell, "spreadRepeater");
1476− verify(appRepeater !== null);
1481+ verify(spreadRepeater !== null);
1477
1482
1478 keyPress(Qt.Key_Control)
1483 keyPress(Qt.Key_Control)
1479 keyClick(Qt.Key_Tab);
1484 keyClick(Qt.Key_Tab);
1480− tryCompare(appRepeater, "highlightedIndex", 1);
1485+ tryCompare(spreadRepeater, "highlightedIndex", 1);
1481
1486
1482 keyClick(Qt.Key_Tab);
1487 keyClick(Qt.Key_Tab);
1483− tryCompare(appRepeater, "highlightedIndex", 2);
1488+ tryCompare(spreadRepeater, "highlightedIndex", 2);
1484
1489
1485 keyClick(Qt.Key_Tab);
1490 keyClick(Qt.Key_Tab);
1486− tryCompare(appRepeater, "highlightedIndex", 3);
1491+ tryCompare(spreadRepeater, "highlightedIndex", 3);
1487
1492
1488 keyClick(Qt.Key_Tab);
1493 keyClick(Qt.Key_Tab);
1489− tryCompare(appRepeater, "highlightedIndex", 4);
1494+ tryCompare(spreadRepeater, "highlightedIndex", 4);
1490
1495
1491 keyClick(Qt.Key_Backtab);
1496 keyClick(Qt.Key_Backtab);
1492− tryCompare(appRepeater, "highlightedIndex", 3);
1497+ tryCompare(spreadRepeater, "highlightedIndex", 3);
1493
1498
1494 keyClick(Qt.Key_Backtab);
1499 keyClick(Qt.Key_Backtab);
1495− tryCompare(appRepeater, "highlightedIndex", 2);
1500+ tryCompare(spreadRepeater, "highlightedIndex", 2);
1496
1501
1497 keyClick(Qt.Key_Backtab);
1502 keyClick(Qt.Key_Backtab);
1498− tryCompare(appRepeater, "highlightedIndex", 1);
1503+ tryCompare(spreadRepeater, "highlightedIndex", 1);
1499
1504
1500 keyRelease(Qt.Key_Control);
1505 keyRelease(Qt.Key_Control);
1501 }
1506 }
@@ -1503,20 +1508,20 @@ Rectangle {
1503 function test_highlightFollowsMouse() {
1508 function test_highlightFollowsMouse() {
1504 loadDesktopShellWithApps()
1509 loadDesktopShellWithApps()
1505
1510
1506− var appRepeater = findInvisibleChild(shell, "appRepeater");
1511+ var spreadRepeater = findInvisibleChild(shell, "spreadRepeater");
1507− verify(appRepeater !== null);
1512+ verify(spreadRepeater !== null);
1508
1513
1509 keyPress(Qt.Key_Control)
1514 keyPress(Qt.Key_Control)
1510 keyClick(Qt.Key_Tab);
1515 keyClick(Qt.Key_Tab);
1511
1516
1512− tryCompare(appRepeater, "highlightedIndex", 1);
1517+ tryCompare(spreadRepeater, "highlightedIndex", 1);
1513
1518
1514 var x = 0;
1519 var x = 0;
1515 var y = shell.height * .75;
1520 var y = shell.height * .75;
1516 mouseMove(shell, x, y)
1521 mouseMove(shell, x, y)
1517
1522
1518 for (var i = 0; i < 7; i++) {
1523 for (var i = 0; i < 7; i++) {
1519− while (appRepeater.highlightedIndex != i && x <= 4000) {
1524+ while (spreadRepeater.highlightedIndex != i && x <= 4000) {
1520 x+=10;
1525 x+=10;
1521 mouseMove(shell, x, y)
1526 mouseMove(shell, x, y)
1522 wait(0); // spin the loop so bindings get evaluated
1527 wait(0); // spin the loop so bindings get evaluated
@@ -1531,8 +1536,8 @@ Rectangle {
1531 function test_closeFromSpread() {
1536 function test_closeFromSpread() {
1532 loadDesktopShellWithApps()
1537 loadDesktopShellWithApps()
1533
1538
1534− var appRepeater = findInvisibleChild(shell, "appRepeater");
1539+ var spreadRepeater = findInvisibleChild(shell, "spreadRepeater");
1535− verify(appRepeater !== null);
1540+ verify(spreadRepeater !== null);
1536
1541
1537 keyPress(Qt.Key_Control)
1542 keyPress(Qt.Key_Control)
1538 keyClick(Qt.Key_Tab);
1543 keyClick(Qt.Key_Tab);
@@ -1540,14 +1545,14 @@ Rectangle {
1540 appRemovedSpy.clear();
1545 appRemovedSpy.clear();
1541
1546
1542 var closedAppId = ApplicationManager.get(2).appId;
1547 var closedAppId = ApplicationManager.get(2).appId;
1543− var appDelegate2 = appRepeater.itemAt(2);
1548+ var spreadDelegate2 = spreadRepeater.itemAt(2);
1544− var closeMouseArea = findChild(appDelegate2, "closeMouseArea");
1549+ var closeMouseArea = findChild(spreadDelegate2, "closeMouseArea");
1545
1550
1546 // Move the mosue over tile 2 and verify the close button becomes visible
1551 // Move the mosue over tile 2 and verify the close button becomes visible
1547 var x = 0;
1552 var x = 0;
1548 var y = shell.height * .5;
1553 var y = shell.height * .5;
1549 mouseMove(shell, x, y)
1554 mouseMove(shell, x, y)
1550− while (appRepeater.highlightedIndex !== 2 && x <= 4000) {
1555+ while (spreadRepeater.highlightedIndex !== 2 && x <= 4000) {
1551 x+=10;
1556 x+=10;
1552 mouseMove(shell, x, y)
1557 mouseMove(shell, x, y)
1553 wait(0); // spin the loop so bindings get evaluated
1558 wait(0); // spin the loop so bindings get evaluated
@@ -1574,32 +1579,35 @@ Rectangle {
1574 function test_selectFromSpreadWithMouse(data) {
1579 function test_selectFromSpreadWithMouse(data) {
1575 loadDesktopShellWithApps()
1580 loadDesktopShellWithApps()
1576
1581
1582+ var stage = findChild(shell, "stage");
1583+ var spread = findChild(stage, "spread");
1584+ waitForRendering(spread)
1585+
1577− var appRepeater = findInvisibleChild(shell, "appRepeater");
1586+ var spreadRepeater = findInvisibleChild(shell, "spreadRepeater");
1578− verify(appRepeater !== null);
1587+ verify(spreadRepeater !== null);
1579
1588
1580 keyPress(Qt.Key_Control)
1589 keyPress(Qt.Key_Control)
1581 keyClick(Qt.Key_Tab);
1590 keyClick(Qt.Key_Tab);
1582
1591
1583 var focusAppId = ApplicationManager.get(2).appId;
1592 var focusAppId = ApplicationManager.get(2).appId;
1584− var appDelegate2 = appRepeater.itemAt(2);
1593+ var spreadDelegate2 = spreadRepeater.itemAt(2);
1585− var decoratedWindow = findChild(appDelegate2, "decoratedWindow");
1594+ var clippedSpreadDelegate = findChild(spreadDelegate2, "clippedSpreadDelegate");
1586− var stage = findChild(shell, "stage");
1587
1595
1588− tryCompare(stage, "state", "altTab");
1596+ tryCompare(spread, "state", "altTab");
1589
1597
1590 // Move the mouse over tile 2 and verify the highlight becomes visible
1598 // Move the mouse over tile 2 and verify the highlight becomes visible
1591 var x = 0;
1599 var x = 0;
1592 var y = shell.height * (data.tileInfo ? .95 : 0.5)
1600 var y = shell.height * (data.tileInfo ? .95 : 0.5)
1593 mouseMove(shell, x, y)
1601 mouseMove(shell, x, y)
1594− while (appRepeater.highlightedIndex !== 2 && x <= 4000) {
1602+ while (spreadRepeater.highlightedIndex !== 2 && x <= 4000) {
1595 x+=10;
1603 x+=10;
1596 mouseMove(shell, x, y)
1604 mouseMove(shell, x, y)
1597 wait(0); // spin the loop so bindings get evaluated
1605 wait(0); // spin the loop so bindings get evaluated
1598 }
1606 }
1599− tryCompare(decoratedWindow, "highlightShown", true);
1607+ tryCompare(clippedSpreadDelegate, "highlightShown", true);
1600
1608
1601 // Click the tile
1609 // Click the tile
1602− mouseClick(decoratedWindow, decoratedWindow.width / 2, decoratedWindow.height / 2)
1610+ mouseClick(clippedSpreadDelegate, clippedSpreadDelegate.width / 2, clippedSpreadDelegate.height / 2)
1603
1611
1604 // Verify that we left the spread and app2 is the focused one now
1612 // Verify that we left the spread and app2 is the focused one now
1605 tryCompare(stage, "state", "");
1613 tryCompare(stage, "state", "");
@@ -1618,7 +1626,6 @@ Rectangle {
1618 keyClick(Qt.Key_Tab);
1626 keyClick(Qt.Key_Tab);
1619
1627
1620 var spreadFlickable = findChild(shell, "spreadFlickable")
1628 var spreadFlickable = findChild(shell, "spreadFlickable")
1621− print("have flickable", spreadFlickable, spreadFlickable.contentX)
1622
1629
1623 compare(spreadFlickable.contentX, 0);
1630 compare(spreadFlickable.contentX, 0);
1624
1631
@@ -1643,5 +1650,86 @@ Rectangle {
1643
1650
1644 keyRelease(Qt.Key_Control);
1651 keyRelease(Qt.Key_Control);
1645 }
1652 }
1653+
1654+ // This makes sure the hoverMouseArea is set to invisible AND disabled
1655+ // when not needed. Otherwise it'll eat mouse hover events for the rest of the shell/apps
1656+ function test_hoverMouseAreaDisabledAndInvisible() {
1657+ loadDesktopShellWithApps()
1658+
1659+ var hoverMouseArea = findChild(shell, "hoverMouseArea");
1660+ tryCompare(hoverMouseArea, "enabled", false)
1661+ tryCompare(hoverMouseArea, "visible", false)
1662+
1663+ keyPress(Qt.Key_Control)
1664+ keyClick(Qt.Key_Tab);
1665+
1666+ tryCompare(hoverMouseArea, "enabled", true)
1667+ tryCompare(hoverMouseArea, "visible", true)
1668+
1669+ keyRelease(Qt.Key_Control)
1670+
1671+ tryCompare(hoverMouseArea, "enabled", false)
1672+ tryCompare(hoverMouseArea, "visible", false)
1673+ }
1674+
1675+ function test_workspacePreviewsHighlightedApp() {
1676+ loadDesktopShellWithApps()
1677+
1678+ var targetZ = ApplicationManager.count + 1;
1679+
1680+ var spreadRepeater = findInvisibleChild(shell, "spreadRepeater");
1681+ verify(spreadRepeater !== null);
1682+
1683+ var appRepeater = findInvisibleChild(shell, "appRepeater");
1684+ verify(appRepeater !== null);
1685+
1686+ keyPress(Qt.Key_Control)
1687+ keyClick(Qt.Key_Tab);
1688+
1689+ tryCompare(spreadRepeater, "highlightedIndex", 1);
1690+ tryCompare(appRepeater.itemAt(1), "z", targetZ)
1691+
1692+ var x = 0;
1693+ var y = shell.height * .75;
1694+ mouseMove(shell, x, y)
1695+
1696+ for (var i = 0; i < 7; i++) {
1697+ while (spreadRepeater.highlightedIndex != i && x <= 4000) {
1698+ tryCompare(appRepeater.itemAt(spreadRepeater.highlightedIndex), "z", targetZ)
1699+ x+=10;
1700+ mouseMove(shell, x, y)
1701+ wait(0); // spin the loop so bindings get evaluated
1702+ }
1703+ }
1704+
1705+ verify(y < 4000);
1706+
1707+ keyRelease(Qt.Key_Control);
1708+ }
1709+
1710+ function test_focusAppFromLauncherExitsSpread() {
1711+ loadDesktopShellWithApps()
1712+
1713+ var desktopSpread = findChild(shell, "spread");
1714+ var launcher = findChild(shell, "launcher");
1715+ var bfb = findChild(launcher, "buttonShowDashHome");
1716+
1717+ keyPress(Qt.Key_Control)
1718+ keyClick(Qt.Key_Tab);
1719+
1720+
1721+ tryCompare(desktopSpread, "state", "altTab")
1722+
1723+ mouseMove(shell, 0, 0);
1724+ tryCompare(launcher, "state", "visibleTemporary")
1725+
1726+ mouseClick(bfb, bfb.width / 2, bfb.height / 2)
1727+ tryCompare(launcher, "state", "")
1728+ tryCompare(desktopSpread, "state", "")
1729+
1730+ tryCompare(ApplicationManager, "focusedApplicationId", "unity8-dash")
1731+
1732+ keyRelease(Qt.Key_Control);
1733+ }
1646 }
1734 }
1647}
1735}
tools/scopetool.cpp+1−1
@@ -89,7 +89,7 @@ int main(int argc, char *argv[])
89 view->setTitle(QGuiApplication::applicationName());
89 view->setTitle(QGuiApplication::applicationName());
90 view->engine()->setBaseUrl(QUrl::fromLocalFile(::qmlDirectory()));
90 view->engine()->setBaseUrl(QUrl::fromLocalFile(::qmlDirectory()));
91
91
92− QUrl source(::qmlDirectory() + "ScopeTool.qml");
92+ QUrl source(::qmlDirectory() + "/ScopeTool.qml");
93 prependImportPaths(view->engine(), ::overrideImportPaths());
93 prependImportPaths(view->engine(), ::overrideImportPaths());
94 prependImportPaths(view->engine(), ::nonMirImportPaths());
94 prependImportPaths(view->engine(), ::nonMirImportPaths());
95 appendImportPaths(view->engine(), ::fallbackImportPaths());
95 appendImportPaths(view->engine(), ::fallbackImportPaths());