on xenial help sign in
Merge
commitd981831ba1332fa8bcd345f67aa2fe1baffb7532 authorAlbert Astals Cid <albert.astals@canonical.com> dateTue 29 Sep 2015, 14:25 (11 years ago) parentfad61c3d1c74de
236 files changed+2574−1826
CMakeLists.txt+2−1 cmake/modules/QmlTest.cmake+1 debian/changelog+51 debian/control+2−2 debian/tests/control+5 debian/tests/qmluitests.sh+19 include/paths.h.in+27−21 libs/UbuntuGestures/DebugHelpers.cpp+7−7 libs/UbuntuGestures/TouchRegistry.cpp+1−1 plugins/AccountsService/AccountsService.cpp+35−35 plugins/AccountsService/AccountsServiceDBusAdaptor.cpp+17−17 plugins/Dash/horizontaljournal.cpp−2 plugins/Dash/listviewwithpageheader.cpp+12−12 plugins/Dash/organicgrid.cpp−2 plugins/Dash/verticaljournal.cpp−2 plugins/GlobalShortcut/globalshortcut.cpp+1−1 plugins/Greeter/Unity/Launcher/launcheritem.cpp+2−2 plugins/Greeter/Unity/Launcher/launchermodelas.cpp+22−22 plugins/Greeter/Unity/Launcher/plugin.cpp+5−5 plugins/IntegratedLightDM/DBusGreeter.cpp+2−2 plugins/IntegratedLightDM/DBusGreeterList.cpp+3−3 plugins/IntegratedLightDM/Greeter.cpp+1−1 plugins/IntegratedLightDM/liblightdm/CMakeLists.txt+1−1 plugins/IntegratedLightDM/liblightdm/Greeter.cpp+5−5 plugins/IntegratedLightDM/liblightdm/GreeterPrivate.cpp+1−1 plugins/IntegratedLightDM/liblightdm/UsersModel.cpp+1−1 plugins/IntegratedLightDM/liblightdm/UsersModelPrivate.cpp+2−1 plugins/IntegratedLightDM/plugin.cpp+3−3 plugins/Powerd/Powerd.cpp+11−11 plugins/ScreenGrabber/screengrabber.cpp+8−6 plugins/SessionBroadcast/SessionBroadcast.cpp+4−4 plugins/Ubuntu/DownloadDaemonListener/interface/downloadtrackeradaptor.h+11−11 plugins/Ubuntu/SystemImage/SystemImage.cpp+4−4 plugins/Unity/Connectivity/Connectivity.cpp+4−4 plugins/Unity/DashCommunicator/dashcommunicator.cpp+3−3 plugins/Unity/DashCommunicator/dashconnection.cpp+1−1 plugins/Unity/DashCommunicator/dbusdashcommunicatorservice.cpp+1−1 plugins/Unity/Indicators/indicator.cpp+8−8 plugins/Unity/Indicators/indicatorsmanager.cpp+4−4 plugins/Unity/Indicators/indicatorsmanager.h+1−1 plugins/Unity/Indicators/modelprinter.cpp+3−3 plugins/Unity/Indicators/modelprinter.h+2−2 plugins/Unity/Indicators/plugin.cpp+6−6 plugins/Unity/Indicators/rootstateparser.cpp+16−16 plugins/Unity/Launcher/asadapter.cpp+10−9 plugins/Unity/Launcher/dbusinterface.cpp+33−33 plugins/Unity/Launcher/desktopfilehandler.cpp+17−16 plugins/Unity/Launcher/gsettings.cpp+15−12 plugins/Unity/Launcher/launcheritem.cpp+6−6 plugins/Unity/Launcher/launchermodel.cpp+6−6 plugins/Unity/Launcher/plugin.cpp+5−5 plugins/Unity/Session/dbusunitysessionservice.cpp+41−41 plugins/Utils/CMakeLists.txt+1 plugins/Utils/plugin.cpp+4−1 plugins/Utils/relativetimeformatter.cpp+4−4 plugins/Utils/timeformatter.cpp+3−3 plugins/Utils/timezoneFormatter.cpp+35 plugins/Utils/timezoneFormatter.h+32 plugins/Utils/windowstatestorage.cpp+6−6 plugins/Wizard/PageList.cpp+3−3 plugins/Wizard/System.cpp+23−15 plugins/Wizard/System.h+3 po/am.po+4−9 po/ar.po+7−10 po/ast.po+9−11 po/az.po+2−2 po/be.po+36−36 po/bg.po+2−2 po/br.po+11−15 po/bs.po+2−2 po/ca.po+6−11 po/ca@valencia.po+2−2 po/ce.po+2−2 po/ckb.po+2−2 po/cs.po+10−11 po/cy.po+5−9 po/da.po+6−11 po/de.po+5−8 po/el.po+5−8 po/en_AU.po+3−7 po/en_GB.po+5−9 po/eo.po+2−2 po/es.po+5−9 po/eu.po+5−9 po/fa.po+13−13 po/fi.po+5−8 po/fo.po+2−2 po/fr.po+5−9 po/ga.po+2−2 po/gd.po+8−12 po/gl.po+5−8 po/gv.po+2−2 po/he.po+5−9 po/hi.po+2−2 po/hr.po+2−2 po/hu.po+14−18 po/hy.po+2−2 po/ia.po+5−9 po/id.po+2−2 po/is.po+2−2 po/it.po+6−10 po/ja.po+2−2 po/km.po+2−2 po/kn.po+2−2 po/ko.po+9−23 po/ku.po+2−2 po/ky.po+2−2 po/lo.po+2−2 po/lt.po+2−2 po/lv.po+2−2 po/ml.po+2−2 po/mr.po+2−2 po/ms.po+2−2 po/my.po+2−2 po/nb.po+3−7 po/nl.po+6−11 po/nn.po+2−2 po/oc.po+2−2 po/or.po+2−2 po/pa.po+15−16 po/pl.po+7−11 po/pt.po+6−11 po/pt_BR.po+3−7 po/ro.po+7−9 po/ru.po+10−14 po/shn.po+2−2 po/si.po+2−2 po/sk.po+2−2 po/sl.po+5−9 po/sq.po+2−2 po/sr.po+6−6 po/sv.po+10−11 po/sw.po+3−7 po/ta.po+2−2 po/te.po+2−2 po/th.po+2−2 po/tr.po+3−7 po/ug.po+88−85 po/uk.po+8−13 po/unity8.pot+36−34 po/ur.po+2−2 po/uz.po+2−2 po/vi.po+2−2 po/xh.po+2−2 po/zh_CN.po+7−15 po/zh_HK.po+2−2 po/zh_TW.po+2−2 qml/Components/BlurLayer.qml+69 qml/Dash/PreviewListView.qml+12−4 qml/Greeter/Infographics.qml+1−1 qml/Notifications/Notification.qml+11−7 qml/Notifications/Notifications.qml+3−1 qml/Notifications/SwipeToAct.qml+37−2 qml/OrientedShell.qml+1 qml/Panel/IndicatorItem.qml+1−1 qml/Panel/IndicatorPage.qml+1−1 qml/Panel/Indicators/IndicatorDelegate.qml+1−1 qml/Panel/Indicators/MenuItemFactory.qml+91−3 qml/Panel/Indicators/MessageMenuItemFactory.qml+1−1 qml/Panel/Indicators/client/IndicatorRepresentation.qml+3−1 qml/Shell.qml+2 qml/Stages/ApplicationWindow.qml+3 qml/Stages/DecoratedWindow.qml+10−51 qml/Stages/DesktopSpread.qml+537 qml/Stages/DesktopSpreadDelegate.qml+111 qml/Stages/DesktopStage.qml+49−469 qml/Stages/PhoneStage.qml+15−7 qml/Stages/SessionContainer.qml+3 qml/Stages/SpreadDelegate.qml+1−1 qml/Stages/SurfaceContainer.qml+3−2 qml/Stages/WindowMoveResizeArea.qml+1−1 src/ApplicationArguments.h+2−2 src/CachingNetworkManagerFactory.cpp+1−1 src/Dash/main.cpp+11−11 src/Panel/Indicators/client/indicatorsclient.cpp+8−8 src/UnityCommandLineParser.cpp+25−24 src/libunity8-private/unitydbusobject.cpp+2−2 src/libunity8-private/unitydbusvirtualobject.cpp+2−2 src/main.cpp+5−5 tests/CMakeLists.txt+9−3 tests/autopilot/unity8/fixture_setup.py+1−1 tests/autopilot/unity8/indicators/tests/test_indicators.py+10−13 tests/autopilot/unity8/shell/tests/__init__.py+1−1 tests/mocks/AccountsService/AccountsService.cpp+1−1 tests/mocks/IntegratedLightDM/liblightdm/CMakeLists.txt+1−1 tests/mocks/Ubuntu/CMakeLists.txt+1 tests/mocks/Ubuntu/Web/CMakeLists.txt+1 tests/mocks/Ubuntu/Web/WebView.qml+25 tests/mocks/Ubuntu/Web/qmldir+4 tests/mocks/Unity/Application/CMakeLists.txt+1 tests/mocks/Unity/Application/MirSurface.cpp+14−7 tests/mocks/Unity/Application/MirSurface.h+3−3 tests/mocks/Unity/Application/MirSurfaceItem.cpp+11−12 tests/mocks/Unity/Application/Session.cpp+4−4 tests/mocks/Unity/Application/VirtualKeyboard.cpp+2−4 tests/mocks/Unity/Application/MirSurfaceItem.qml → tests/mocks/Unity/Application/resources/MirSurfaceItem.qml tests/mocks/Unity/Application/VirtualKeyboard.qml → tests/mocks/Unity/Application/resources/VirtualKeyboard.qml tests/mocks/Unity/Application/resources/surfaces.qrc+7 tests/mocks/Unity/Application/resources/vkb_portrait.png tests/mocks/Unity/Launcher/MockLauncherItem.cpp+1−1 tests/mocks/Unity/Notifications/MockActionModel.cpp+1−1 tests/mocks/Unity/Notifications/MockNotification.cpp+1 tests/mocks/Unity/Notifications/MockNotification.h+1−1 tests/mocks/Unity/Notifications/MockNotificationModel.cpp+5−1 tests/mocks/Unity/fake_previewstack.cpp+2−2 tests/mocks/Unity/fake_previewstack.h+1−1 tests/mocks/Unity/fake_resultsmodel.cpp+1−1 tests/mocks/Unity/fake_scope.cpp+3−5 tests/mocks/Unity/fake_scopesoverview.cpp+1−1 tests/mocks/libusermetrics/UserMetrics.cpp+1−5 tests/plugins/Dash/CMakeLists.txt−1 tests/plugins/Dash/cardcreatortest.cpp−1 tests/plugins/Dash/horizontaljournaltest.cpp−1 tests/plugins/Dash/horizontaljournaltry.cpp−1 tests/plugins/Dash/listviewwithpageheadersectionexternalmodeltest.cpp−1 tests/plugins/Dash/listviewwithpageheadersectiontest.cpp−1 tests/plugins/Dash/listviewwithpageheadertest.cpp−1 tests/plugins/Dash/organicgridtest.cpp−1 tests/plugins/Dash/organicgridtry.cpp−1 tests/plugins/Dash/verticaljournaltest.cpp−1 tests/plugins/Dash/verticaljournaltry.cpp−1 tests/plugins/IntegratedLightDM/CMakeLists.txt+1−1 tests/plugins/Ubuntu/Gestures/CMakeLists.txt+3−7 tests/plugins/Ubuntu/Gestures/GestureTest.cpp−2 tests/plugins/Ubuntu/Gestures/tst_TouchGate.cpp−1 tests/qmltests/CMakeLists.txt+2−2 tests/qmltests/Components/CMakeLists.txt+1−4 tests/qmltests/Components/tst_DragHandle.cpp−2 tests/qmltests/Components/tst_EdgeDragEvaluator.cpp−1 tests/qmltests/Dash/tst_Card.qml+2−2 tests/qmltests/Greeter/tst_Infographics.qml+4−3 tests/qmltests/Notifications/tst_Notifications.qml+60−7 tests/qmltests/Notifications/tst_SwipeToAct.qml+58−14 tests/qmltests/tst_OrientedShell.qml+106−1 tests/qmltests/tst_Shell.qml+131−43 tools/scopetool.cpp+1−1
CMakeLists.txt+2−1
@@ -13,8 +13,9 @@ endif()
1313
1414set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)
1515
16−# Instruct CMake to run moc automatically when needed.
16+# Instruct CMake to run moc and rcc automatically when needed.
1717set(CMAKE_AUTOMOC ON)
18+set(CMAKE_AUTORCC ON)
1819
1920# enable QML debugging
2021string(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)
127127 file(MAKE_DIRECTORY ${ARTIFACTS_DIR}/${path})
128128 set(file_logger -o ${ARTIFACTS_DIR}/${path}/test${COMPONENT_NAME}.xml,xunitxml)
129129 else()
130+ file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
130131 set(file_logger -o ${CMAKE_CURRENT_BINARY_DIR}/test${COMPONENT_NAME}.xml,xunitxml)
131132 endif()
132133
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+
152unity8 (8.11+15.10.20150915-0ubuntu1) wily; urgency=medium
253
354 [ Albert Astals Cid ]
debian/control+2−2
@@ -125,7 +125,7 @@ Depends: qml-module-qtquick-layouts,
125125 qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 1.1.1239) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 1.1.1239),
126126 qtdeclarative5-unity-notifications-plugin (>= 0.1.2) | unity-notifications-impl,
127127 ubuntu-thumbnailer-impl-0,
128− unity-application-impl-6,
128+ unity-application-impl-8,
129129 unity-notifications-impl-3,
130130 unity-plugin-scopes | unity-scopes-impl,
131131 unity-scopes-impl-7,
@@ -171,7 +171,7 @@ Pre-Depends: ${misc:Pre-Depends},
171171Depends: ${misc:Depends},
172172 ${shlibs:Depends},
173173Provides: unity-application-impl,
174− unity-application-impl-6,
174+ unity-application-impl-8,
175175Replaces: unity8-autopilot (<< 8.02+15.04.20150422-0ubuntu1)
176176Description: Fake environment for running Unity 8 shell
177177 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 @@
2929
3030inline bool isRunningInstalled() {
3131 static bool installed = (QCoreApplication::applicationDirPath() ==
32− QDir(("@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@")).canonicalPath());
32+ QDir(QStringLiteral("@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@")).canonicalPath());
3333 return installed;
3434}
3535
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+
3646inline QString translationDirectory() {
3747 if (isRunningInstalled()) {
38− return QString("@CMAKE_INSTALL_PREFIX@/share/locale");
48+ return QStringLiteral("@CMAKE_INSTALL_PREFIX@/share/locale");
3949 } else {
40− return QString("@CMAKE_BINARY_DIR@/po/locale");
50+ return QString(buildDirectory() + "/po/locale");
4151 }
4252}
4353
4454inline QString qmlDirectory() {
4555 if (isRunningInstalled()) {
46− return QString("@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/");
56+ return QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/");
4757 } else {
48− return QString("@CMAKE_SOURCE_DIR@/qml/");
58+ return QString(sourceDirectory() + "/qml");
4959 }
5060}
5161
5262inline QStringList overrideImportPaths() {
5363 QStringList paths;
5464 if (!isRunningInstalled()) {
55− paths << QString("@CMAKE_BINARY_DIR@/plugins");
65+ paths << QString(buildDirectory() + "/plugins");
5666 }
5767 return paths;
5868}
@@ -60,9 +70,9 @@ inline QStringList overrideImportPaths() {
6070inline QStringList nonMirImportPaths() {
6171 QStringList paths;
6272 if (isRunningInstalled()) {
63− paths << QString("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/nonmirplugins");
73+ paths << QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/nonmirplugins");
6474 } else {
65− paths << QString("@CMAKE_BINARY_DIR@/nonmirplugins");
75+ paths << QString(buildDirectory() + "/nonmirplugins");
6676 }
6777 return paths;
6878}
@@ -70,23 +80,23 @@ inline QStringList nonMirImportPaths() {
7080inline QStringList fallbackImportPaths() {
7181 QStringList paths;
7282 if (isRunningInstalled()) {
73− paths << QString("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@");
74− paths << QString("@USS_PRIVATE_PLUGINDIR@");
75− paths << QString("@SHELL_PLUGINDIR@");
76− paths << QString("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
83+ paths << QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@");
84+ paths << QStringLiteral("@USS_PRIVATE_PLUGINDIR@");
85+ paths << QStringLiteral("@SHELL_PLUGINDIR@");
86+ paths << QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
7787 } else {
78− paths << QString("@USS_PRIVATE_PLUGINDIR@");
79− paths << QString("@SHELL_PLUGINDIR@");
80− paths << QString("@CMAKE_BINARY_DIR@/tests/mocks");
88+ paths << QStringLiteral("@USS_PRIVATE_PLUGINDIR@");
89+ paths << QStringLiteral("@SHELL_PLUGINDIR@");
90+ paths << QString(buildDirectory() + "/tests/mocks");
8191 }
8292 return paths;
8393}
8494
8595inline QString mockPluginsDir() {
8696 if (isRunningInstalled()) {
87− return QString("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
97+ return QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
8898 } else {
89− return QString("@CMAKE_BINARY_DIR@/tests/mocks");
99+ return QString(buildDirectory() + "/tests/mocks");
90100 }
91101}
92102
@@ -99,10 +109,6 @@ inline QStringList shellDataDirs() {
99109 return dirs;
100110}
101111
102−inline QString sourceDirectory() {
103− return QString("@CMAKE_SOURCE_DIR@/");
104−}
105−
106112inline void prependImportPaths(QQmlEngine *engine, const QStringList &paths)
107113{
108114 QStringList importPathList = engine->importPathList();
libs/UbuntuGestures/DebugHelpers.cpp+7−7
@@ -22,15 +22,15 @@ QString touchPointStateToString(Qt::TouchPointState state)
2222{
2323 switch (state) {
2424 case Qt::TouchPointPressed:
25− return QString("pressed");
25+ return QStringLiteral("pressed");
2626 case Qt::TouchPointMoved:
27− return QString("moved");
27+ return QStringLiteral("moved");
2828 case Qt::TouchPointStationary:
29− return QString("stationary");
29+ return QStringLiteral("stationary");
3030 case Qt::TouchPointReleased:
31− return QString("released");
31+ return QStringLiteral("released");
3232 default:
33− return QString("INVALID_STATE");
33+ return QStringLiteral("INVALID_STATE");
3434 }
3535}
3636
@@ -57,7 +57,7 @@ QString touchEventToString(const QTouchEvent *ev)
5757
5858 foreach(const QTouchEvent::TouchPoint& touchPoint, ev->touchPoints()) {
5959 message.append(
60− QString("(id:%1, state:%2, scenePos:(%3,%4)) ")
60+ QStringLiteral("(id:%1, state:%2, scenePos:(%3,%4)) ")
6161 .arg(touchPoint.id())
6262 .arg(touchPointStateToString(touchPoint.state()))
6363 .arg(touchPoint.scenePos().x())
@@ -89,7 +89,7 @@ QString mouseEventToString(const QMouseEvent *ev)
8989 message.append("INVALID_MOUSE_EVENT_TYPE ");
9090 }
9191
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()));
9393
9494 return message;
9595}
libs/UbuntuGestures/TouchRegistry.cpp+1−1
@@ -105,7 +105,7 @@ void TouchRegistry::deliverTouchUpdatesToUndecidedCandidatesAndWatchers(const QT
105105 // E.g.: a QTouchEvent might have three touches but a given item might be interested in only
106106 // one of them. So he will get a UnownedTouchEvent from this QTouchEvent containing only that
107107 // touch point.
108− QMap<QQuickItem*, QList<int>> touchIdsForItems;
108+ QHash<QQuickItem*, QList<int>> touchIdsForItems;
109109
110110 // Build touchIdsForItems
111111 m_touchInfoPool.forEach([&](Pool<TouchInfo>::Iterator &touchInfo) {
plugins/AccountsService/AccountsService.cpp+35−35
@@ -74,7 +74,7 @@ void AccountsService::setDemoEdges(bool demoEdges)
7474{
7575 if (m_demoEdges != demoEdges) {
7676 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);
7878
7979 Q_EMIT demoEdgesChanged();
8080 }
@@ -114,7 +114,7 @@ void AccountsService::setHereEnabled(bool enabled)
114114{
115115 if (m_hereEnabled != enabled) {
116116 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);
118118
119119 Q_EMIT hereEnabledChanged();
120120 }
@@ -133,8 +133,8 @@ bool AccountsService::hereLicensePathValid() const
133133void AccountsService::updateDemoEdges(bool async)
134134{
135135 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
136− "com.canonical.unity.AccountsService",
137− "demo-edges");
136+ QStringLiteral("com.canonical.unity.AccountsService"),
137+ QStringLiteral("demo-edges"));
138138 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
139139
140140 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -162,8 +162,8 @@ void AccountsService::updateDemoEdges(bool async)
162162void AccountsService::updateEnableLauncherWhileLocked(bool async)
163163{
164164 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
165− "com.ubuntu.AccountsService.SecurityPrivacy",
166− "EnableLauncherWhileLocked");
165+ QStringLiteral("com.ubuntu.AccountsService.SecurityPrivacy"),
166+ QStringLiteral("EnableLauncherWhileLocked"));
167167 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
168168
169169 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -191,8 +191,8 @@ void AccountsService::updateEnableLauncherWhileLocked(bool async)
191191void AccountsService::updateEnableIndicatorsWhileLocked(bool async)
192192{
193193 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
194− "com.ubuntu.AccountsService.SecurityPrivacy",
195− "EnableIndicatorsWhileLocked");
194+ QStringLiteral("com.ubuntu.AccountsService.SecurityPrivacy"),
195+ QStringLiteral("EnableIndicatorsWhileLocked"));
196196 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
197197
198198 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -220,8 +220,8 @@ void AccountsService::updateEnableIndicatorsWhileLocked(bool async)
220220void AccountsService::updateBackgroundFile(bool async)
221221{
222222 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
223− "org.freedesktop.Accounts.User",
224− "BackgroundFile");
223+ QStringLiteral("org.freedesktop.Accounts.User"),
224+ QStringLiteral("BackgroundFile"));
225225 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
226226
227227 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -249,8 +249,8 @@ void AccountsService::updateBackgroundFile(bool async)
249249void AccountsService::updateStatsWelcomeScreen(bool async)
250250{
251251 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
252− "com.ubuntu.touch.AccountsService.SecurityPrivacy",
253− "StatsWelcomeScreen");
252+ QStringLiteral("com.ubuntu.touch.AccountsService.SecurityPrivacy"),
253+ QStringLiteral("StatsWelcomeScreen"));
254254 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
255255
256256 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -278,8 +278,8 @@ void AccountsService::updateStatsWelcomeScreen(bool async)
278278void AccountsService::updatePasswordDisplayHint(bool async)
279279{
280280 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
281− "com.ubuntu.AccountsService.SecurityPrivacy",
282− "PasswordDisplayHint");
281+ QStringLiteral("com.ubuntu.AccountsService.SecurityPrivacy"),
282+ QStringLiteral("PasswordDisplayHint"));
283283 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
284284
285285 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -307,8 +307,8 @@ void AccountsService::updatePasswordDisplayHint(bool async)
307307void AccountsService::updateFailedLogins(bool async)
308308{
309309 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
310− "com.canonical.unity.AccountsService.Private",
311− "FailedLogins");
310+ QStringLiteral("com.canonical.unity.AccountsService.Private"),
311+ QStringLiteral("FailedLogins"));
312312 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
313313
314314 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -336,8 +336,8 @@ void AccountsService::updateFailedLogins(bool async)
336336void AccountsService::updateHereEnabled(bool async)
337337{
338338 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
339− "com.ubuntu.location.providers.here.AccountsService",
340− "LicenseAccepted");
339+ QStringLiteral("com.ubuntu.location.providers.here.AccountsService"),
340+ QStringLiteral("LicenseAccepted"));
341341 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
342342
343343 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -365,8 +365,8 @@ void AccountsService::updateHereEnabled(bool async)
365365void AccountsService::updateHereLicensePath(bool async)
366366{
367367 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
368− "com.ubuntu.location.providers.here.AccountsService",
369− "LicenseBasePath");
368+ QStringLiteral("com.ubuntu.location.providers.here.AccountsService"),
369+ QStringLiteral("LicenseBasePath"));
370370 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
371371
372372 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -381,7 +381,7 @@ void AccountsService::updateHereLicensePath(bool async)
381381
382382 QString hereLicensePath = reply.value().toString();
383383 if (hereLicensePath.isEmpty() || !QFile::exists(hereLicensePath))
384− hereLicensePath = "";
384+ hereLicensePath = QLatin1String("");
385385
386386 if (m_hereLicensePath.isNull() || m_hereLicensePath != hereLicensePath) {
387387 m_hereLicensePath = hereLicensePath;
@@ -403,7 +403,7 @@ void AccountsService::setFailedLogins(uint failedLogins)
403403{
404404 if (m_failedLogins != failedLogins) {
405405 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);
407407
408408 Q_EMIT failedLoginsChanged();
409409 }
@@ -415,33 +415,33 @@ void AccountsService::onPropertiesChanged(const QString &user, const QString &in
415415 return;
416416 }
417417
418− if (interface == "com.canonical.unity.AccountsService") {
419− if (changed.contains("demo-edges")) {
418+ if (interface == QLatin1String("com.canonical.unity.AccountsService")) {
419+ if (changed.contains(QStringLiteral("demo-edges"))) {
420420 updateDemoEdges();
421421 }
422− } else if (interface == "com.canonical.unity.AccountsService.Private") {
423− if (changed.contains("FailedLogins")) {
422+ } else if (interface == QLatin1String("com.canonical.unity.AccountsService.Private")) {
423+ if (changed.contains(QStringLiteral("FailedLogins"))) {
424424 updateFailedLogins();
425425 }
426− } else if (interface == "com.ubuntu.touch.AccountsService.SecurityPrivacy") {
427− if (changed.contains("StatsWelcomeScreen")) {
426+ } else if (interface == QLatin1String("com.ubuntu.touch.AccountsService.SecurityPrivacy")) {
427+ if (changed.contains(QStringLiteral("StatsWelcomeScreen"))) {
428428 updateStatsWelcomeScreen();
429429 }
430− } else if (interface == "com.ubuntu.AccountsService.SecurityPrivacy") {
431− if (changed.contains("PasswordDisplayHint")) {
430+ } else if (interface == QLatin1String("com.ubuntu.AccountsService.SecurityPrivacy")) {
431+ if (changed.contains(QStringLiteral("PasswordDisplayHint"))) {
432432 updatePasswordDisplayHint();
433433 }
434− if (changed.contains("EnableLauncherWhileLocked")) {
434+ if (changed.contains(QStringLiteral("EnableLauncherWhileLocked"))) {
435435 updateEnableLauncherWhileLocked();
436436 }
437− if (changed.contains("EnableIndicatorsWhileLocked")) {
437+ if (changed.contains(QStringLiteral("EnableIndicatorsWhileLocked"))) {
438438 updateEnableIndicatorsWhileLocked();
439439 }
440− } else if (interface == "com.ubuntu.location.providers.here.AccountsService") {
441− if (changed.contains("LicenseAccepted")) {
440+ } else if (interface == QLatin1String("com.ubuntu.location.providers.here.AccountsService")) {
441+ if (changed.contains(QStringLiteral("LicenseAccepted"))) {
442442 updateHereEnabled();
443443 }
444− if (changed.contains("LicenseBasePath")) {
444+ if (changed.contains(QStringLiteral("LicenseBasePath"))) {
445445 updateHereLicensePath();
446446 }
447447 }
plugins/AccountsService/AccountsServiceDBusAdaptor.cpp+17−17
@@ -30,10 +30,10 @@ AccountsServiceDBusAdaptor::AccountsServiceDBusAdaptor(QObject* parent)
3030{
3131 QDBusConnection connection = QDBusConnection::SM_BUSNAME();
3232 QDBusConnectionInterface *interface = connection.interface();
33− interface->startService("org.freedesktop.Accounts");
34− m_accountsManager = new QDBusInterface("org.freedesktop.Accounts",
35− "/org/freedesktop/Accounts",
36− "org.freedesktop.Accounts",
33+ interface->startService(QStringLiteral("org.freedesktop.Accounts"));
34+ m_accountsManager = new QDBusInterface(QStringLiteral("org.freedesktop.Accounts"),
35+ QStringLiteral("/org/freedesktop/Accounts"),
36+ QStringLiteral("org.freedesktop.Accounts"),
3737 connection, this);
3838}
3939
@@ -41,7 +41,7 @@ QVariant AccountsServiceDBusAdaptor::getUserProperty(const QString &user, const
4141{
4242 QDBusInterface *iface = getUserInterface(user);
4343 if (iface != nullptr && iface->isValid()) {
44− QDBusReply<QVariant> answer = iface->call("Get", interface, property);
44+ QDBusReply<QVariant> answer = iface->call(QStringLiteral("Get"), interface, property);
4545 if (answer.isValid()) {
4646 return answer;
4747 }
@@ -53,9 +53,9 @@ QDBusPendingReply<QVariant> AccountsServiceDBusAdaptor::getUserPropertyAsync(con
5353{
5454 QDBusInterface *iface = getUserInterface(user);
5555 if (iface != nullptr && iface->isValid()) {
56− return iface->asyncCall("Get", interface, property);
56+ return iface->asyncCall(QStringLiteral("Get"), interface, property);
5757 }
58− return QDBusPendingReply<QVariant>(QDBusMessage::createError(QDBusError::Other, "Invalid Interface"));
58+ return QDBusPendingReply<QVariant>(QDBusMessage::createError(QDBusError::Other, QStringLiteral("Invalid Interface")));
5959}
6060
6161void 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
6363 QDBusInterface *iface = getUserInterface(user);
6464 if (iface != nullptr && iface->isValid()) {
6565 // 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)));
6767 }
6868}
6969
@@ -72,9 +72,9 @@ QDBusPendingCall AccountsServiceDBusAdaptor::setUserPropertyAsync(const QString
7272 QDBusInterface *iface = getUserInterface(user);
7373 if (iface != nullptr && iface->isValid()) {
7474 // 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)));
7676 }
77− return QDBusPendingCall::fromCompletedCall(QDBusMessage::createError(QDBusError::Other, "Invalid Interface"));
77+ return QDBusPendingCall::fromCompletedCall(QDBusMessage::createError(QDBusError::Other, QStringLiteral("Invalid Interface")));
7878}
7979
8080void AccountsServiceDBusAdaptor::propertiesChangedSlot(const QString &interface, const QVariantMap &changed, const QStringList &invalid)
@@ -116,13 +116,13 @@ QDBusInterface *AccountsServiceDBusAdaptor::getUserInterface(const QString &user
116116{
117117 QDBusInterface *iface = m_users.value(user);
118118 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);
120120 if (answer.isValid()) {
121121 const QString path = answer.value().path();
122122
123− iface = new QDBusInterface("org.freedesktop.Accounts",
123+ iface = new QDBusInterface(QStringLiteral("org.freedesktop.Accounts"),
124124 path,
125− "org.freedesktop.DBus.Properties",
125+ QStringLiteral("org.freedesktop.DBus.Properties"),
126126 m_accountsManager->connection(), this);
127127
128128 // With its own pre-defined properties, AccountsService is oddly
@@ -132,8 +132,8 @@ QDBusInterface *AccountsServiceDBusAdaptor::getUserInterface(const QString &user
132132 iface->connection().connect(
133133 iface->service(),
134134 path,
135− "org.freedesktop.Accounts.User",
136− "Changed",
135+ QStringLiteral("org.freedesktop.Accounts.User"),
136+ QStringLiteral("Changed"),
137137 this,
138138 SLOT(maybeChangedSlot()));
139139
@@ -142,8 +142,8 @@ QDBusInterface *AccountsServiceDBusAdaptor::getUserInterface(const QString &user
142142 iface->connection().connect(
143143 iface->service(),
144144 path,
145− "org.freedesktop.DBus.Properties",
146− "PropertiesChanged",
145+ QStringLiteral("org.freedesktop.DBus.Properties"),
146+ QStringLiteral("PropertiesChanged"),
147147 this,
148148 SLOT(propertiesChangedSlot(QString, QVariantMap, QStringList)));
149149
plugins/Dash/horizontaljournal.cpp−2
@@ -33,8 +33,6 @@
3333#include <private/qquickitem_p.h>
3434#pragma GCC diagnostic pop
3535
36−static const qreal bufferRatio = 0.5;
37−
3836HorizontalJournal::HorizontalJournal()
3937 : m_firstVisibleIndex(-1)
4038 , m_rowHeight(0)
plugins/Dash/listviewwithpageheader.cpp+12−12
@@ -164,7 +164,7 @@ ListViewWithPageHeader::ListViewWithPageHeader()
164164
165165 m_contentYAnimation = new QQuickNumberAnimation(this);
166166 m_contentYAnimation->setEasing(QEasingCurve::OutQuad);
167− m_contentYAnimation->setProperty("contentY");
167+ m_contentYAnimation->setProperty(QStringLiteral("contentY"));
168168 m_contentYAnimation->setDuration(200);
169169 m_contentYAnimation->setTargetObject(this);
170170
@@ -745,8 +745,8 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(const QString &sectionText)
745745
746746 QQmlContext *creationContext = m_sectionDelegate->creationContext();
747747 QQmlContext *context = new QQmlContext(creationContext ? creationContext : qmlContext(this));
748− context->setContextProperty(QLatin1String("section"), sectionText);
749− context->setContextProperty(QLatin1String("delegateIndex"), -1);
748+ context->setContextProperty(QStringLiteral("section"), sectionText);
749+ context->setContextProperty(QStringLiteral("delegateIndex"), -1);
750750 QObject *nobj = m_sectionDelegate->beginCreate(context);
751751 if (nobj) {
752752 QQml_setParent_noEvent(context, nobj);
@@ -879,7 +879,7 @@ ListViewWithPageHeader::ListItem *ListViewWithPageHeader::createItem(int modelIn
879879 }
880880 if (listItem->sectionItem()) {
881881 QQmlContext *context = QQmlEngine::contextForObject(listItem->sectionItem())->parentContext();
882− context->setContextProperty(QLatin1String("delegateIndex"), modelIndex);
882+ context->setContextProperty(QStringLiteral("delegateIndex"), modelIndex);
883883 }
884884 adjustMinYExtent();
885885 m_contentHeightDirty = true;
@@ -904,8 +904,8 @@ void ListViewWithPageHeader::itemCreated(int modelIndex, QObject *object)
904904
905905 item->setParentItem(m_clipItem);
906906 QQmlContext *context = QQmlEngine::contextForObject(item)->parentContext();
907− context->setContextProperty(QLatin1String("ListViewWithPageHeader"), this);
908− context->setContextProperty(QLatin1String("heightToClip"), QVariant::fromValue<int>(0));
907+ context->setContextProperty(QStringLiteral("ListViewWithPageHeader"), this);
908+ context->setContextProperty(QStringLiteral("heightToClip"), QVariant::fromValue<int>(0));
909909 if (modelIndex == m_asyncRequestedIndex) {
910910 createItem(modelIndex, false);
911911 refill();
@@ -1059,7 +1059,7 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
10591059 if (item && item->sectionItem()) {
10601060 QQmlContext *context = QQmlEngine::contextForObject(item->sectionItem())->parentContext();
10611061 const QString sectionText = m_delegateModel->stringValue(i, m_sectionProperty);
1062− context->setContextProperty(QLatin1String("section"), sectionText);
1062+ context->setContextProperty(QStringLiteral("section"), sectionText);
10631063 }
10641064 }
10651065 }
@@ -1072,7 +1072,7 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
10721072 ListItem *item = m_visibleItems[i];
10731073 if (item->sectionItem()) {
10741074 QQmlContext *context = QQmlEngine::contextForObject(item->sectionItem())->parentContext();
1075− context->setContextProperty(QLatin1String("delegateIndex"), m_firstVisibleIndex + i);
1075+ context->setContextProperty(QStringLiteral("delegateIndex"), m_firstVisibleIndex + i);
10761076 }
10771077 }
10781078
@@ -1235,7 +1235,7 @@ void ListViewWithPageHeader::layout()
12351235 // Update the top sticky section header
12361236 const QString section = m_delegateModel->stringValue(modelIndex, m_sectionProperty);
12371237 QQmlContext *context = QQmlEngine::contextForObject(m_topSectionItem)->parentContext();
1238− context->setContextProperty(QLatin1String("section"), section);
1238+ context->setContextProperty(QStringLiteral("section"), section);
12391239
12401240 QQuickItemPrivate::get(m_topSectionItem)->setCulled(false);
12411241 m_topSectionItem->setY(topSectionStickPos);
@@ -1247,7 +1247,7 @@ void ListViewWithPageHeader::layout()
12471247 break;
12481248 delegateIndex--;
12491249 }
1250− context->setContextProperty(QLatin1String("delegateIndex"), delegateIndex);
1250+ context->setContextProperty(QStringLiteral("delegateIndex"), delegateIndex);
12511251 if (item->sectionItem()) {
12521252 QQuickItemPrivate::get(item->sectionItem())->setCulled(true);
12531253 }
@@ -1257,9 +1257,9 @@ void ListViewWithPageHeader::layout()
12571257 QQmlContext *context = QQmlEngine::contextForObject(item->m_item)->parentContext();
12581258 const qreal clipFrom = visibleFrom + (!item->sectionItem() && m_topSectionItem && !QQuickItemPrivate::get(m_topSectionItem)->culled ? m_topSectionItem->height() : 0);
12591259 if (!cull && pos < clipFrom) {
1260− context->setContextProperty(QLatin1String("heightToClip"), clipFrom - pos);
1260+ context->setContextProperty(QStringLiteral("heightToClip"), clipFrom - pos);
12611261 } else {
1262− context->setContextProperty(QLatin1String("heightToClip"), QVariant::fromValue<int>(0));
1262+ context->setContextProperty(QStringLiteral("heightToClip"), QVariant::fromValue<int>(0));
12631263 }
12641264// qDebug() << "ListViewWithPageHeader::layout" << item->m_item;
12651265 pos += item->height();
plugins/Dash/organicgrid.cpp−2
@@ -21,8 +21,6 @@
2121#include <private/qquickitem_p.h>
2222#pragma GCC diagnostic pop
2323
24−static const qreal bufferRatio = 0.5;
25−
2624OrganicGrid::OrganicGrid()
2725 : m_firstVisibleIndex(-1)
2826 , m_numberOfModulesPerRow(-1)
plugins/Dash/verticaljournal.cpp−2
@@ -32,8 +32,6 @@
3232#include <private/qquickitem_p.h>
3333#pragma GCC diagnostic pop
3434
35−static const qreal bufferRatio = 0.5;
36−
3735VerticalJournal::VerticalJournal()
3836 : m_columnWidth(0)
3937{
plugins/GlobalShortcut/globalshortcut.cpp+1−1
@@ -72,7 +72,7 @@ void GlobalShortcut::keyPressEvent(QKeyEvent * event)
7272void GlobalShortcut::setupFilterOnWindow(QQuickWindow *window)
7373{
7474 if (!window) {
75− qWarning() << Q_FUNC_INFO << "Failed to setup filter on window";
75+// qWarning() << Q_FUNC_INFO << "Failed to setup filter on window";
7676 return;
7777 }
7878
plugins/Greeter/Unity/Launcher/launcheritem.cpp+2−2
@@ -35,7 +35,7 @@ LauncherItem::LauncherItem(const QString &appId, const QString &name, const QStr
3535 m_quickList(new QuickListModel(this))
3636{
3737 QuickListEntry nameAction;
38− nameAction.setActionId("launch_item");
38+ nameAction.setActionId(QStringLiteral("launch_item"));
3939 nameAction.setText(m_name);
4040 m_quickList->appendAction(nameAction);
4141}
@@ -55,7 +55,7 @@ void LauncherItem::setName(const QString &name)
5555 if (m_name != name) {
5656 m_name = name;
5757 QuickListEntry entry;
58− entry.setActionId("launch_item");
58+ entry.setActionId(QStringLiteral("launch_item"));
5959 entry.setText(m_name);
6060 m_quickList->updateAction(entry);
6161 Q_EMIT nameChanged(name);
plugins/Greeter/Unity/Launcher/launchermodelas.cpp+22−22
@@ -122,7 +122,7 @@ void LauncherModel::quickListActionInvoked(const QString &appId, int actionIndex
122122 QString actionId = model->get(actionIndex).actionId();
123123
124124 // Check if this is one of the launcher actions we handle ourselves
125− if (actionId == "launch_item") {
125+ if (actionId == QLatin1String("launch_item")) {
126126 QDesktopServices::openUrl(getUrlForAppId(appId));
127127
128128 // 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
147147 return QString();
148148 }
149149
150− if (!appId.contains("_")) {
150+ if (!appId.contains('_')) {
151151 return "application:///" + appId + ".desktop";
152152 }
153153
154154 QStringList parts = appId.split('_');
155155 QString package = parts.value(0);
156− QString app = parts.value(1, "first-listed-app");
156+ QString app = parts.value(1, QStringLiteral("first-listed-app"));
157157 return "appid://" + package + "/" + app + "/current-user-version";
158158}
159159
@@ -200,7 +200,7 @@ void LauncherModel::refresh()
200200 QList<QVariantMap> items;
201201
202202 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"));
204204 }
205205
206206 // First walk through all the existing items and see if we need to remove something
@@ -210,16 +210,16 @@ void LauncherModel::refresh()
210210 bool found = false;
211211 Q_FOREACH(const QVariant &asItem, items) {
212212 QVariantMap cachedMap = asItem.toMap();
213− if (cachedMap.value("id").toString() == item->appId()) {
213+ if (cachedMap.value(QStringLiteral("id")).toString() == item->appId()) {
214214 // 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()) {
216216 found = true;
217− item->setName(cachedMap.value("name").toString());
218− item->setIcon(cachedMap.value("icon").toString());
219− item->setCount(cachedMap.value("count").toInt());
220− item->setCountVisible(cachedMap.value("countVisible").toBool());
221− item->setProgress(cachedMap.value("progress").toInt());
222− item->setRunning(cachedMap.value("running").toBool());
217+ item->setName(cachedMap.value(QStringLiteral("name")).toString());
218+ item->setIcon(cachedMap.value(QStringLiteral("icon")).toString());
219+ item->setCount(cachedMap.value(QStringLiteral("count")).toInt());
220+ item->setCountVisible(cachedMap.value(QStringLiteral("countVisible")).toBool());
221+ item->setProgress(cachedMap.value(QStringLiteral("progress")).toInt());
222+ item->setRunning(cachedMap.value(QStringLiteral("running")).toBool());
223223
224224 int idx = m_list.indexOf(item);
225225 Q_EMIT dataChanged(index(idx), index(idx), {RoleName, RoleIcon, RoleCount, RoleCountVisible, RoleRunning, RoleProgress});
@@ -244,7 +244,7 @@ void LauncherModel::refresh()
244244 for (int asIndex = 0; asIndex < items.count(); ++asIndex) {
245245 QVariant entry = items.at(asIndex);
246246
247− if (m_onlyPinned && !entry.toMap().value("pinned").toBool()) {
247+ if (m_onlyPinned && !entry.toMap().value(QStringLiteral("pinned")).toBool()) {
248248 // Skipping it as we only show pinned and it is not
249249 skipped++;
250250 continue;
@@ -253,7 +253,7 @@ void LauncherModel::refresh()
253253
254254 int itemIndex = -1;
255255 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()) {
257257 itemIndex = i;
258258 break;
259259 }
@@ -262,15 +262,15 @@ void LauncherModel::refresh()
262262 if (itemIndex == -1) {
263263 QVariantMap cachedMap = entry.toMap();
264264 // 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(),
266− cachedMap.value("name").toString(),
267− cachedMap.value("icon").toString(),
265+ LauncherItem *item = new LauncherItem(cachedMap.value(QStringLiteral("id")).toString(),
266+ cachedMap.value(QStringLiteral("name")).toString(),
267+ cachedMap.value(QStringLiteral("icon")).toString(),
268268 this);
269269 item->setPinned(true);
270− item->setCount(cachedMap.value("count").toInt());
271− item->setCountVisible(cachedMap.value("countVisible").toBool());
272− item->setProgress(cachedMap.value("progress").toInt());
273− item->setRunning(cachedMap.value("running").toBool());
270+ item->setCount(cachedMap.value(QStringLiteral("count")).toInt());
271+ item->setCountVisible(cachedMap.value(QStringLiteral("countVisible")).toBool());
272+ item->setProgress(cachedMap.value(QStringLiteral("progress")).toInt());
273+ item->setRunning(cachedMap.value(QStringLiteral("running")).toBool());
274274 beginInsertRows(QModelIndex(), newPosition, newPosition);
275275 m_list.insert(newPosition, item);
276276 endInsertRows();
@@ -286,7 +286,7 @@ void LauncherModel::refresh()
286286
287287void LauncherModel::propertiesChanged(const QString &user, const QString &interface, const QStringList &changed)
288288{
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"))) {
290290 return;
291291 }
292292 refresh();
plugins/Greeter/Unity/Launcher/plugin.cpp+5−5
@@ -36,11 +36,11 @@ void UnityLauncherPlugin::registerTypes(const char *uri)
3636{
3737 Q_ASSERT(uri == QLatin1String("Unity.Launcher"));
3838
39− qmlRegisterUncreatableType<LauncherModelInterface>(uri, 0, 1, "LauncherModelInterface", "Abstract Interface. Cannot be instantiated.");
40− qmlRegisterUncreatableType<LauncherItemInterface>(uri, 0, 1, "LauncherItemInterface", "Abstract Interface. Cannot be instantiated.");
41− qmlRegisterUncreatableType<QuickListModelInterface>(uri, 0, 1, "QuickListInterface", "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", QStringLiteral("Abstract Interface. Cannot be instantiated."));
41+ qmlRegisterUncreatableType<QuickListModelInterface>(uri, 0, 1, "QuickListInterface", QStringLiteral("Abstract Interface. Cannot be instantiated."));
4242
4343 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.");
45− qmlRegisterUncreatableType<QuickListModel>(uri, 0, 1, "QuickListModel", "Can't create a QuickListModel in QML. Get them from the LauncherItems.");
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", QStringLiteral("Can't create a QuickListModel in QML. Get them from the LauncherItems."));
4646}
plugins/IntegratedLightDM/DBusGreeter.cpp+2−2
@@ -21,7 +21,7 @@
2121#include <QStringList>
2222
2323DBusGreeter::DBusGreeter(Greeter *greeter, const QString &path)
24− : UnityDBusObject(path, "com.canonical.UnityGreeter", true, greeter),
24+ : UnityDBusObject(path, QStringLiteral("com.canonical.UnityGreeter"), true, greeter),
2525 m_greeter(greeter)
2626{
2727 connect(m_greeter, &Greeter::isActiveChanged, this, &DBusGreeter::isActiveChangedHandler);
@@ -44,6 +44,6 @@ void DBusGreeter::HideGreeter()
4444
4545void DBusGreeter::isActiveChangedHandler()
4646{
47− notifyPropertyChanged("IsActive", isActive());
47+ notifyPropertyChanged(QStringLiteral("IsActive"), isActive());
4848 Q_EMIT isActiveChanged();
4949}
plugins/IntegratedLightDM/DBusGreeterList.cpp+3−3
@@ -21,7 +21,7 @@
2121#include <QStringList>
2222
2323DBusGreeterList::DBusGreeterList(Greeter *greeter, const QString &path)
24− : UnityDBusObject(path, "com.canonical.UnityGreeter", true, greeter),
24+ : UnityDBusObject(path, QStringLiteral("com.canonical.UnityGreeter"), true, greeter),
2525 m_greeter(greeter)
2626{
2727 connect(m_greeter, &Greeter::authenticationUserChanged, this, &DBusGreeterList::authenticationUserChangedHandler);
@@ -45,12 +45,12 @@ bool DBusGreeterList::entryIsLocked() const
4545
4646void DBusGreeterList::authenticationUserChangedHandler(const QString &user)
4747{
48− notifyPropertyChanged("ActiveEntry", user);
48+ notifyPropertyChanged(QStringLiteral("ActiveEntry"), user);
4949 Q_EMIT EntrySelected(user);
5050}
5151
5252void DBusGreeterList::promptlessChangedHandler()
5353{
54− notifyPropertyChanged("EntryIsLocked", entryIsLocked());
54+ notifyPropertyChanged(QStringLiteral("EntryIsLocked"), entryIsLocked());
5555 Q_EMIT entryIsLockedChanged();
5656}
plugins/IntegratedLightDM/Greeter.cpp+1−1
@@ -113,7 +113,7 @@ void Greeter::showPromptFilter(const QString &text, QLightDM::Greeter::PromptTyp
113113
114114 // Strip prompt of any colons at the end
115115 QString trimmedText = text.trimmed();
116− if (trimmedText.endsWith(":") || trimmedText.endsWith(":")) {
116+ if (trimmedText.endsWith(':') || trimmedText.endsWith(QStringLiteral(":"))) {
117117 trimmedText.chop(1);
118118 }
119119
plugins/IntegratedLightDM/liblightdm/CMakeLists.txt+1−1
@@ -33,5 +33,5 @@ set_target_properties(MockLightDM-demo-shared PROPERTIES
3333 OUTPUT_NAME lightdm-qt5-2)
3434
3535install(TARGETS MockLightDM-demo-shared
36− DESTINATION ${SHELL_INSTALL_QML}/mocks/LightDM/demo
36+ DESTINATION ${SHELL_INSTALL_QML}/mocks/IntegratedLightDM/demo
3737 )
plugins/IntegratedLightDM/liblightdm/Greeter.cpp+5−5
@@ -55,12 +55,12 @@ bool Greeter::hasGuestAccountHint() const
5555QString Greeter::getHint(const QString &name) const
5656{
5757 Q_UNUSED(name)
58− return "";
58+ return QLatin1String("");
5959}
6060
6161QString Greeter::defaultSessionHint() const
6262{
63− return "ubuntu";
63+ return QStringLiteral("ubuntu");
6464}
6565
6666bool Greeter::hideUsersHint() const
@@ -85,7 +85,7 @@ bool Greeter::lockHint () const
8585
8686QString Greeter::selectUserHint() const
8787{
88− return "";
88+ return QLatin1String("");
8989}
9090
9191bool Greeter::selectGuestHint() const
@@ -95,7 +95,7 @@ bool Greeter::selectGuestHint() const
9595
9696QString Greeter::autologinUserHint() const
9797{
98− return "";
98+ return QLatin1String("");
9999}
100100
101101bool Greeter::autologinGuestHint() const
@@ -115,7 +115,7 @@ bool Greeter::inAuthentication() const
115115
116116QString Greeter::hostname() const
117117{
118− return "hostname1";
118+ return QStringLiteral("hostname1");
119119}
120120
121121bool Greeter::isAuthenticated() const
plugins/IntegratedLightDM/liblightdm/GreeterPrivate.cpp+1−1
@@ -91,7 +91,7 @@ public:
9191 } else {
9292 delete appData;
9393 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);
9595 Q_EMIT greeter->authenticationComplete();
9696 }
9797 }
plugins/IntegratedLightDM/liblightdm/UsersModel.cpp+1−1
@@ -55,7 +55,7 @@ UsersModel::UsersModel(QObject *parent) :
5555 setRoleNames(roles);
5656
5757 // 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/"));
5959 QStringList backgrounds = bgdir.entryList(QDir::Files | QDir::NoDotAndDotDot);
6060
6161 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)
2929 : q_ptr(parent)
3030{
3131 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();
3333
34+ entries.reserve(users.count());
3435 Q_FOREACH(const QString &user, users)
3536 {
3637 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)
3434 Q_UNUSED(scriptEngine)
3535
3636 Greeter *greeter = new Greeter();
37− new DBusGreeter(greeter, "/");
38− new DBusGreeterList(greeter, "/list");
37+ new DBusGreeter(greeter, QStringLiteral("/"));
38+ new DBusGreeterList(greeter, QStringLiteral("/list"));
3939
4040 return greeter;
4141}
@@ -64,6 +64,6 @@ void IntegratedLightDMPlugin::registerTypes(const char *uri)
6464 qRegisterMetaType<QLightDM::Greeter::PromptType>("QLightDM::Greeter::PromptType");
6565 qmlRegisterSingletonType<Greeter>(uri, 0, 1, "Greeter", greeter_provider);
6666 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"));
6868 qmlRegisterSingletonType<UserMetricsOutput::UserMetrics>(uri, 0, 1, "Infographic", infographic_provider);
6969}
plugins/Powerd/Powerd.cpp+11−11
@@ -22,19 +22,19 @@
2222void autoBrightnessChanged(GSettings *settings, const gchar *key, QDBusInterface *unityScreen)
2323{
2424 bool value = g_settings_get_boolean(settings, key);
25− unityScreen->asyncCall("userAutobrightnessEnable", QVariant(value));
25+ unityScreen->asyncCall(QStringLiteral("userAutobrightnessEnable"), QVariant(value));
2626}
2727
2828void activityTimeoutChanged(GSettings *settings, const gchar *key, QDBusInterface *unityScreen)
2929{
3030 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));
3232}
3333
3434void dimTimeoutChanged(GSettings *settings, const gchar *key, QDBusInterface *unityScreen)
3535{
3636 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));
3838}
3939
4040Powerd::Powerd(QObject* parent)
@@ -42,15 +42,15 @@ Powerd::Powerd(QObject* parent)
4242 unityScreen(nullptr),
4343 cachedStatus(Status::On)
4444{
45− unityScreen = new QDBusInterface("com.canonical.Unity.Screen",
46− "/com/canonical/Unity/Screen",
47− "com.canonical.Unity.Screen",
45+ unityScreen = new QDBusInterface(QStringLiteral("com.canonical.Unity.Screen"),
46+ QStringLiteral("/com/canonical/Unity/Screen"),
47+ QStringLiteral("com.canonical.Unity.Screen"),
4848 QDBusConnection::SM_BUSNAME(), this);
4949
50− unityScreen->connection().connect("com.canonical.Unity.Screen",
51− "/com/canonical/Unity/Screen",
52− "com.canonical.Unity.Screen",
53− "DisplayPowerStateChange",
50+ unityScreen->connection().connect(QStringLiteral("com.canonical.Unity.Screen"),
51+ QStringLiteral("/com/canonical/Unity/Screen"),
52+ QStringLiteral("com.canonical.Unity.Screen"),
53+ QStringLiteral("DisplayPowerStateChange"),
5454 this,
5555 SLOT(handleDisplayPowerStateChange(int, int)));
5656
@@ -76,7 +76,7 @@ Powerd::Status Powerd::status() const
7676
7777void Powerd::setStatus(Powerd::Status status, DisplayStateChangeReason reason)
7878{
79− unityScreen->asyncCall("setScreenPowerMode",
79+ unityScreen->asyncCall(QStringLiteral("setScreenPowerMode"),
8080 status == Powerd::On ? "on" : "off",
8181 static_cast<qint32>(reason));
8282}
plugins/ScreenGrabber/screengrabber.cpp+8−6
@@ -19,6 +19,7 @@
1919#include <QDir>
2020#include <QDateTime>
2121#include <QStandardPaths>
22+#include <QTemporaryDir>
2223#include <QtGui/QImage>
2324#include <QtGui/QGuiApplication>
2425#include <QtQuick/QQuickWindow>
@@ -42,14 +43,15 @@ ScreenGrabber::ScreenGrabber(QObject *parent)
4243 QDir screenshotsDir;
4344 if (qEnvironmentVariableIsSet("UNITY_TESTING")) {
4445 qDebug() << "Using test environment";
45− QStandardPaths::setTestModeEnabled(true);
46− screenshotsDir = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
46+ QTemporaryDir tDir;
47+ tDir.setAutoRemove(false);
48+ screenshotsDir = tDir.path();
4749 } else {
4850 qDebug() << "Using real environment";
4951 screenshotsDir = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation);
5052 }
51− screenshotsDir.mkpath("Screenshots");
52− screenshotsDir.cd("Screenshots");
53+ screenshotsDir.mkpath(QStringLiteral("Screenshots"));
54+ screenshotsDir.cd(QStringLiteral("Screenshots"));
5355 if (screenshotsDir.exists()) {
5456 fileNamePrefix = screenshotsDir.absolutePath();
5557 fileNamePrefix.append("/screenshot");
@@ -92,7 +94,7 @@ void ScreenGrabber::captureAndSave()
9294QString ScreenGrabber::makeFileName() const
9395{
9496 QString fileName(fileNamePrefix);
95− fileName.append(QDateTime::currentDateTime().toString("yyyyMMdd_hhmmsszzz"));
97+ fileName.append(QDateTime::currentDateTime().toString(QStringLiteral("yyyyMMdd_hhmmsszzz")));
9698 fileName.append(".");
9799 fileName.append(getFormat());
98100 return fileName;
@@ -101,5 +103,5 @@ QString ScreenGrabber::makeFileName() const
101103QString ScreenGrabber::getFormat() const
102104{
103105 //TODO: This should be configurable (perhaps through gsettings?)
104− return "png";
106+ return QStringLiteral("png");
105107}
plugins/SessionBroadcast/SessionBroadcast.cpp+4−4
@@ -24,10 +24,10 @@ SessionBroadcast::SessionBroadcast(QObject* parent)
2424{
2525 auto connection = QDBusConnection::SM_BUSNAME();
2626
27− connection.connect("com.canonical.Unity.Greeter.Broadcast",
28− "/com/canonical/Unity/Greeter/Broadcast",
29− "com.canonical.Unity.Greeter.Broadcast",
30− "ShowHome",
27+ connection.connect(QStringLiteral("com.canonical.Unity.Greeter.Broadcast"),
28+ QStringLiteral("/com/canonical/Unity/Greeter/Broadcast"),
29+ QStringLiteral("com.canonical.Unity.Greeter.Broadcast"),
30+ QStringLiteral("ShowHome"),
3131 this,
3232 SLOT(onShowHome(const QString &)));
3333}
plugins/Ubuntu/DownloadDaemonListener/interface/downloadtrackeradaptor.h+11−11
@@ -41,68 +41,68 @@ public Q_SLOTS: // METHODS
4141 {
4242 QList<QVariant> argumentList;
4343 argumentList << QVariant::fromValue(allowed);
44− return asyncCallWithArgumentList(QLatin1String("allowGSMDownload"), argumentList);
44+ return asyncCallWithArgumentList(QStringLiteral("allowGSMDownload"), argumentList);
4545 }
4646
4747 inline QDBusPendingReply<> cancel()
4848 {
4949 QList<QVariant> argumentList;
50− return asyncCallWithArgumentList(QLatin1String("cancel"), argumentList);
50+ return asyncCallWithArgumentList(QStringLiteral("cancel"), argumentList);
5151 }
5252
5353 inline QDBusPendingReply<bool> isGSMDownloadAllowed()
5454 {
5555 QList<QVariant> argumentList;
56− return asyncCallWithArgumentList(QLatin1String("isGSMDownloadAllowed"), argumentList);
56+ return asyncCallWithArgumentList(QStringLiteral("isGSMDownloadAllowed"), argumentList);
5757 }
5858
5959 inline QDBusPendingReply<QVariantMap> metadata()
6060 {
6161 QList<QVariant> argumentList;
62− return asyncCallWithArgumentList(QLatin1String("metadata"), argumentList);
62+ return asyncCallWithArgumentList(QStringLiteral("metadata"), argumentList);
6363 }
6464
6565 inline QDBusPendingReply<> pause()
6666 {
6767 QList<QVariant> argumentList;
68− return asyncCallWithArgumentList(QLatin1String("pause"), argumentList);
68+ return asyncCallWithArgumentList(QStringLiteral("pause"), argumentList);
6969 }
7070
7171 inline QDBusPendingReply<qulonglong> progress()
7272 {
7373 QList<QVariant> argumentList;
74− return asyncCallWithArgumentList(QLatin1String("progress"), argumentList);
74+ return asyncCallWithArgumentList(QStringLiteral("progress"), argumentList);
7575 }
7676
7777 inline QDBusPendingReply<> resume()
7878 {
7979 QList<QVariant> argumentList;
80− return asyncCallWithArgumentList(QLatin1String("resume"), argumentList);
80+ return asyncCallWithArgumentList(QStringLiteral("resume"), argumentList);
8181 }
8282
8383 inline QDBusPendingReply<> setThrottle(qulonglong speed)
8484 {
8585 QList<QVariant> argumentList;
8686 argumentList << QVariant::fromValue(speed);
87− return asyncCallWithArgumentList(QLatin1String("setThrottle"), argumentList);
87+ return asyncCallWithArgumentList(QStringLiteral("setThrottle"), argumentList);
8888 }
8989
9090 inline QDBusPendingReply<> start()
9191 {
9292 QList<QVariant> argumentList;
93− return asyncCallWithArgumentList(QLatin1String("start"), argumentList);
93+ return asyncCallWithArgumentList(QStringLiteral("start"), argumentList);
9494 }
9595
9696 inline QDBusPendingReply<qulonglong> throttle()
9797 {
9898 QList<QVariant> argumentList;
99− return asyncCallWithArgumentList(QLatin1String("throttle"), argumentList);
99+ return asyncCallWithArgumentList(QStringLiteral("throttle"), argumentList);
100100 }
101101
102102 inline QDBusPendingReply<qulonglong> totalSize()
103103 {
104104 QList<QVariant> argumentList;
105− return asyncCallWithArgumentList(QLatin1String("totalSize"), argumentList);
105+ return asyncCallWithArgumentList(QStringLiteral("totalSize"), argumentList);
106106 }
107107
108108Q_SIGNALS: // SIGNALS
plugins/Ubuntu/SystemImage/SystemImage.cpp+4−4
@@ -25,9 +25,9 @@ SystemImage::SystemImage(QObject *parent)
2525
2626void SystemImage::factoryReset()
2727{
28− const QDBusMessage msg = QDBusMessage::createMethodCall("com.canonical.SystemImage",
29− "/Service",
30− "com.canonical.SystemImage",
31− "FactoryReset");
28+ const QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("com.canonical.SystemImage"),
29+ QStringLiteral("/Service"),
30+ QStringLiteral("com.canonical.SystemImage"),
31+ QStringLiteral("FactoryReset"));
3232 QDBusConnection::systemBus().asyncCall(msg);
3333}
plugins/Unity/Connectivity/Connectivity.cpp+4−4
@@ -25,9 +25,9 @@ Connectivity::Connectivity(QObject *parent)
2525
2626void Connectivity::unlockAllModems()
2727{
28− const QDBusMessage msg = QDBusMessage::createMethodCall("com.ubuntu.connectivity1",
29− "/com/ubuntu/connectivity1/Private",
30− "com.ubuntu.connectivity1.Private",
31− "UnlockAllModems");
28+ const QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("com.ubuntu.connectivity1"),
29+ QStringLiteral("/com/ubuntu/connectivity1/Private"),
30+ QStringLiteral("com.ubuntu.connectivity1.Private"),
31+ QStringLiteral("UnlockAllModems"));
3232 QDBusConnection::sessionBus().asyncCall(msg);
3333}
plugins/Unity/DashCommunicator/dashcommunicator.cpp+3−3
@@ -41,9 +41,9 @@ void DashCommunicator::setCurrentScope(int index, bool animate, bool isSwipe)
4141
4242void DashCommunicator::run()
4343{
44− m_dashConnection = new DashConnection("com.canonical.UnityDash",
45− "/com/canonical/UnityDash",
46− "", this);
44+ m_dashConnection = new DashConnection(QStringLiteral("com.canonical.UnityDash"),
45+ QStringLiteral("/com/canonical/UnityDash"),
46+ QLatin1String(""), this);
4747 m_mutex.lock();
4848 m_created = true;
4949 m_mutex.unlock();
plugins/Unity/DashCommunicator/dashconnection.cpp+1−1
@@ -58,6 +58,6 @@ QDBusAbstractInterface* DashConnection::createInterface(const QString &service,
5858void DashConnection::setCurrentScope(int index, bool animate, bool isSwipe)
5959{
6060 if (dbusInterface()) {
61− dbusInterface()->asyncCall("SetCurrentScope", index, animate, isSwipe);
61+ dbusInterface()->asyncCall(QStringLiteral("SetCurrentScope"), index, animate, isSwipe);
6262 }
6363}
plugins/Unity/DashCommunicator/dbusdashcommunicatorservice.cpp+1−1
@@ -21,7 +21,7 @@
2121#include <QDebug>
2222
2323DBusDashCommunicatorService::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)
2525{
2626}
2727
plugins/Unity/Indicators/indicator.cpp+8−8
@@ -37,20 +37,20 @@ void Indicator::init(const QString& busName, const QSettings& settings)
3737 // that we can't just copy the object.
3838 m_settings.clear();
3939 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"))) {
4141 m_settings.insert(key, settings.value(key));
4242 }
4343 }
4444
45− setId(settings.value("Indicator Service/Name").toString());
45+ setId(settings.value(QStringLiteral("Indicator Service/Name")).toString());
4646
47− QString actionObjectPath = settings.value("Indicator Service/ObjectPath").toString();
47+ QString actionObjectPath = settings.value(QStringLiteral("Indicator Service/ObjectPath")).toString();
4848
4949 QVariantMap properties;
5050 properties.clear();
51− properties.insert("busType", 1);
52− properties.insert("busName", busName);
53− properties.insert("actionsObjectPath", actionObjectPath);
51+ properties.insert(QStringLiteral("busType"), 1);
52+ properties.insert(QStringLiteral("busName"), busName);
53+ properties.insert(QStringLiteral("actionsObjectPath"), actionObjectPath);
5454 setIndicatorProperties(properties);
5555}
5656
@@ -84,12 +84,12 @@ void Indicator::setProfile(const QString& profile)
8484{
8585 QVariant pos = m_settings.value(profile + "/Position");
8686 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));
8888 setPosition(pos.toInt());
8989
9090 QString menuObjectPath = m_settings.value(profile + "/ObjectPath").toString();
9191 QVariantMap map = m_properties.toMap();
92− map.insert("menuObjectPath", menuObjectPath);
92+ map.insert(QStringLiteral("menuObjectPath"), menuObjectPath);
9393 setIndicatorProperties(map);
9494}
9595
plugins/Unity/Indicators/indicatorsmanager.cpp+4−4
@@ -44,7 +44,7 @@ public:
4444IndicatorsManager::IndicatorsManager(QObject* parent)
4545 : QObject(parent)
4646 , m_loaded(false)
47− , m_profile("phone")
47+ , m_profile(QStringLiteral("phone"))
4848{
4949}
5050
@@ -115,7 +115,7 @@ void IndicatorsManager::loadDir(const QDir& dir)
115115void IndicatorsManager::loadFile(const QFileInfo& file_info)
116116{
117117 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();
119119
120120 auto iter = m_indicatorsData.find(name);
121121 if (iter != m_indicatorsData.end())
@@ -286,9 +286,9 @@ Indicator::Ptr IndicatorsManager::indicator(const QString& indicator_name)
286286 return new_indicator;
287287}
288288
289−QList<Indicator::Ptr> IndicatorsManager::indicators()
289+QVector<Indicator::Ptr> IndicatorsManager::indicators()
290290{
291− QList<Indicator::Ptr> list;
291+ QVector<Indicator::Ptr> list;
292292 Q_FOREACH(IndicatorData* data, m_indicatorsData)
293293 {
294294 Indicator::Ptr ret = indicator(data->m_name);
plugins/Unity/Indicators/indicatorsmanager.h+1−1
@@ -45,7 +45,7 @@ public:
4545
4646 Indicator::Ptr indicator(const QString& indicator_name);
4747
48− QList<Indicator::Ptr> indicators();
48+ QVector<Indicator::Ptr> indicators();
4949
5050 bool isLoaded() const;
5151
plugins/Unity/Indicators/modelprinter.cpp+3−3
@@ -60,7 +60,7 @@ QString ModelPrinter::text()
6060
6161QString tabify(int level) { QString str;
6262 for (int i = 0; i < level; i++) {
63− str += " ";
63+ str += QLatin1String(" ");
6464 }
6565 return str;
6666}
@@ -68,7 +68,7 @@ QString tabify(int level) { QString str;
6868QString ModelPrinter::getModelDataString(UnityMenuModel* sourceModel, int level)
6969{
7070 if (!sourceModel)
71− return "";
71+ return QLatin1String("");
7272
7373 QString str;
7474 QTextStream stream(&str);
@@ -110,7 +110,7 @@ QString ModelPrinter::getRowSring(UnityMenuModel* sourceModel, int row, int dept
110110 return str;
111111}
112112
113−QString ModelPrinter::getVariantString(const QString& roleName, const QVariant vData ) const
113+QString ModelPrinter::getVariantString(const QString& roleName, const QVariant &vData) const
114114{
115115 QString str;
116116 QTextStream stream(&str);
plugins/Unity/Indicators/modelprinter.h+2−2
@@ -46,10 +46,10 @@ Q_SIGNALS:
4646private:
4747 QString getModelDataString(UnityMenuModel* sourceModel, int level);
4848 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;
5050
5151 UnityMenuModel* m_model;
5252 QList<UnityMenuModel*> m_children;
5353};
5454
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)
5858
5959 qmlRegisterSingletonType<UnityMenuModelCache>(uri, 0, 1, "UnityMenuModelCache", menuModelCacheSingleton);
6060
61− qmlRegisterUncreatableType<MenuContentState>(uri, 0, 1, "MenuContentState", "Can't create MenuContentState class");
62− qmlRegisterUncreatableType<ActionState>(uri, 0, 1, "ActionState", "Can't create ActionState class");
63− qmlRegisterUncreatableType<NetworkActionState>(uri, 0, 1, "NetworkActionState", "Can't create NetworkActionState class");
64− qmlRegisterUncreatableType<NetworkConnection>(uri, 0, 1, "NetworkConnection", "Can't create NetworkConnection class");
65− qmlRegisterUncreatableType<IndicatorsModelRole>(uri, 0, 1, "IndicatorsModelRole", "Can't create IndicatorsModelRole class");
66− qmlRegisterUncreatableType<FlatMenuProxyModelRole>(uri, 0, 1, "FlatMenuProxyModelRole", "Can't create FlatMenuProxyModelRole class");
61+ qmlRegisterUncreatableType<MenuContentState>(uri, 0, 1, "MenuContentState", QStringLiteral("Can't create MenuContentState class"));
62+ qmlRegisterUncreatableType<ActionState>(uri, 0, 1, "ActionState", QStringLiteral("Can't create ActionState class"));
63+ qmlRegisterUncreatableType<NetworkActionState>(uri, 0, 1, "NetworkActionState", QStringLiteral("Can't create NetworkActionState class"));
64+ qmlRegisterUncreatableType<NetworkConnection>(uri, 0, 1, "NetworkConnection", QStringLiteral("Can't create NetworkConnection class"));
65+ qmlRegisterUncreatableType<IndicatorsModelRole>(uri, 0, 1, "IndicatorsModelRole", QStringLiteral("Can't create IndicatorsModelRole class"));
66+ qmlRegisterUncreatableType<FlatMenuProxyModelRole>(uri, 0, 1, "FlatMenuProxyModelRole", QStringLiteral("Can't create FlatMenuProxyModelRole class"));
6767}
plugins/Unity/Indicators/rootstateparser.cpp+16−16
@@ -39,7 +39,7 @@ static QString iconUri(GIcon *icon)
3939 }
4040
4141 if (!iconNameList.empty()) {
42− uri = QString("image://theme/%1").arg(iconNameList.join(","));
42+ uri = QStringLiteral("image://theme/%1").arg(iconNameList.join(QStringLiteral(",")));
4343 }
4444 }
4545 else if (G_IS_FILE_ICON (icon)) {
@@ -63,7 +63,7 @@ static QString iconUri(GIcon *icon)
6363 data = g_bytes_get_data (g_bytes_icon_get_bytes (G_BYTES_ICON (icon)), &size);
6464 base64 = g_base64_encode ((const guchar *) data, size);
6565
66− uri = QString("data://");
66+ uri = QStringLiteral("data://");
6767 uri.append (base64);
6868
6969 g_free (base64);
@@ -88,7 +88,7 @@ QVariant RootStateParser::toQVariant(GVariant* state) const
8888 while (g_variant_iter_loop (&iter, "{sv}", &key, &vvalue))
8989 {
9090 QString str = QString::fromUtf8(key);
91− if (str == "icon" && !qmap.contains("icons")) {
91+ if (str == QLatin1String("icon") && !qmap.contains(QStringLiteral("icons"))) {
9292 QStringList icons;
9393
9494 // FIXME - should be sending a url.
@@ -97,9 +97,9 @@ QVariant RootStateParser::toQVariant(GVariant* state) const
9797 icons << iconUri(gicon);
9898 g_object_unref (gicon);
9999 }
100− qmap.insert("icons", icons);
100+ qmap.insert(QStringLiteral("icons"), icons);
101101
102− } else if (str == "icons") {
102+ } else if (str == QLatin1String("icons")) {
103103
104104 QStringList icons;
105105
@@ -118,7 +118,7 @@ QVariant RootStateParser::toQVariant(GVariant* state) const
118118 }
119119 }
120120 // will overwrite icon.
121− qmap.insert("icons", icons);
121+ qmap.insert(QStringLiteral("icons"), icons);
122122
123123 } else {
124124 qmap.insert(str, ActionStateParser::toQVariant(vvalue));
@@ -141,13 +141,13 @@ QVariant RootStateParser::toQVariant(GVariant* state) const
141141 &accessible_name,
142142 &visible);
143143
144− qmap["label"] = label ? QString::fromUtf8(label) : "";
145− qmap["accessible-desc"] = accessible_name ? QString::fromUtf8(accessible_name) : "";
146− qmap["visible"] = visible;
144+ qmap[QStringLiteral("label")] = label ? QString::fromUtf8(label) : QLatin1String("");
145+ qmap[QStringLiteral("accessible-desc")] = accessible_name ? QString::fromUtf8(accessible_name) : QLatin1String("");
146+ qmap[QStringLiteral("visible")] = visible;
147147
148148 gicon = g_icon_new_for_string (icon, nullptr);
149149 if (gicon) {
150− qmap["icons"] = QStringList() << iconUri(gicon);
150+ qmap[QStringLiteral("icons")] = QStringList() << iconUri(gicon);
151151 g_object_unref (gicon);
152152 }
153153
@@ -170,42 +170,42 @@ QString RootStateObject::title() const
170170{
171171 if (!valid()) return QString();
172172
173− return m_currentState.value("title", QVariant::fromValue(QString())).toString();
173+ return m_currentState.value(QStringLiteral("title"), QVariant::fromValue(QString())).toString();
174174}
175175
176176QString RootStateObject::leftLabel() const
177177{
178178 if (!valid()) return QString();
179179
180− return m_currentState.value("pre-label", QVariant::fromValue(QString())).toString();
180+ return m_currentState.value(QStringLiteral("pre-label"), QVariant::fromValue(QString())).toString();
181181}
182182
183183QString RootStateObject::rightLabel() const
184184{
185185 if (!valid()) return QString();
186186
187− return m_currentState.value("label", QVariant::fromValue(QString())).toString();
187+ return m_currentState.value(QStringLiteral("label"), QVariant::fromValue(QString())).toString();
188188}
189189
190190QStringList RootStateObject::icons() const
191191{
192192 if (!valid()) return QStringList();
193193
194− return m_currentState.value("icons", QVariant::fromValue(QStringList())).toStringList();
194+ return m_currentState.value(QStringLiteral("icons"), QVariant::fromValue(QStringList())).toStringList();
195195}
196196
197197QString RootStateObject::accessibleName() const
198198{
199199 if (!valid()) return QString();
200200
201− return m_currentState.value("accessible-desc", QVariant::fromValue(QString())).toString();
201+ return m_currentState.value(QStringLiteral("accessible-desc"), QVariant::fromValue(QString())).toString();
202202}
203203
204204bool RootStateObject::indicatorVisible() const
205205{
206206 if (!valid()) return false;
207207
208− return m_currentState.value("visible", QVariant::fromValue(true)).toBool();
208+ return m_currentState.value(QStringLiteral("visible"), QVariant::fromValue(true)).toBool();
209209}
210210
211211void RootStateObject::setCurrentState(const QVariantMap& newState)
plugins/Unity/Launcher/asadapter.cpp+10−9
@@ -38,25 +38,26 @@ void ASAdapter::syncItems(const QList<LauncherItem*> &list)
3838{
3939 if (m_accounts && !m_user.isEmpty()) {
4040 QList<QVariantMap> items;
41+ items.reserve(list.count());
4142
4243 Q_FOREACH(LauncherItem *item, list) {
4344 items << itemToVariant(item);
4445 }
4546
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));
4748 }
4849}
4950
5051QVariantMap ASAdapter::itemToVariant(LauncherItem *item) const
5152{
5253 QVariantMap details;
53− details.insert("id", item->appId());
54− details.insert("name", item->name());
55− details.insert("icon", item->icon());
56− details.insert("count", item->count());
57− details.insert("countVisible", item->countVisible());
58− details.insert("pinned", item->pinned());
59− details.insert("running", item->running());
60− details.insert("progress", item->progress());
54+ details.insert(QStringLiteral("id"), item->appId());
55+ details.insert(QStringLiteral("name"), item->name());
56+ details.insert(QStringLiteral("icon"), item->icon());
57+ details.insert(QStringLiteral("count"), item->count());
58+ details.insert(QStringLiteral("countVisible"), item->countVisible());
59+ details.insert(QStringLiteral("pinned"), item->pinned());
60+ details.insert(QStringLiteral("running"), item->running());
61+ details.insert(QStringLiteral("progress"), item->progress());
6162 return details;
6263}
plugins/Unity/Launcher/dbusinterface.cpp+33−33
@@ -27,7 +27,7 @@
2727#include <QDebug>
2828
2929DBusInterface::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),
3131 m_launcherModel(parent)
3232{
3333}
@@ -35,13 +35,13 @@ DBusInterface::DBusInterface(LauncherModel *parent):
3535QString DBusInterface::introspect(const QString &path) const
3636{
3737 /* 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")) {
3939 QString nodes;
4040
4141 // Add Refresh to introspect
42− nodes = "<interface name=\"com.canonical.Unity.Launcher\">"
42+ nodes = QStringLiteral("<interface name=\"com.canonical.Unity.Launcher\">"
4343 "<method name=\"Refresh\"/>"
44− "</interface>";
44+ "</interface>");
4545
4646 // Add dynamic properties for launcher emblems
4747 for (int i = 0; i < m_launcherModel->rowCount(); i++) {
@@ -53,18 +53,18 @@ QString DBusInterface::introspect(const QString &path) const
5353 }
5454
5555 /* Should not happen, but let's handle it */
56− if (!path.startsWith("/com/canonical/Unity/Launcher")) {
57− return "";
56+ if (!path.startsWith(QLatin1String("/com/canonical/Unity/Launcher"))) {
57+ return QLatin1String("");
5858 }
5959
6060 /* Now we should be looking at a node */
6161 QString nodeiface =
62− "<interface name=\"com.canonical.Unity.Launcher.Item\">"
62+ QStringLiteral("<interface name=\"com.canonical.Unity.Launcher.Item\">"
6363 "<property name=\"count\" type=\"i\" access=\"readwrite\" />"
6464 "<property name=\"countVisible\" type=\"b\" access=\"readwrite\" />"
6565 "<property name=\"progress\" type=\"i\" access=\"readwrite\" />"
6666 "<method name=\"Alert\" />"
67− "</interface>";
67+ "</interface>");
6868 return nodeiface;
6969}
7070
@@ -109,7 +109,7 @@ QString DBusInterface::encodeAppId(const QString& appId)
109109 (chr >= '0' && chr <= '9'&& i != 0)) {
110110 encoded.append(chr);
111111 } else {
112− QString hexval = QString("_%1").arg(chr, 2, 16, QChar('0'));
112+ QString hexval = QStringLiteral("_%1").arg(chr, 2, 16, QChar('0'));
113113 encoded.append(hexval.toUpper());
114114 }
115115 }
@@ -127,10 +127,10 @@ bool DBusInterface::handleMessage(const QDBusMessage& message, const QDBusConnec
127127 /* Break down the path to just the app id */
128128 bool validpath = true;
129129 QString pathtemp = message.path();
130− if (!pathtemp.startsWith("/com/canonical/Unity/Launcher/")) {
130+ if (!pathtemp.startsWith(QLatin1String("/com/canonical/Unity/Launcher/"))) {
131131 validpath = false;
132132 }
133− pathtemp.remove("/com/canonical/Unity/Launcher/");
133+ pathtemp.remove(QStringLiteral("/com/canonical/Unity/Launcher/"));
134134 if (pathtemp.indexOf('/') >= 0) {
135135 validpath = false;
136136 }
@@ -139,15 +139,15 @@ bool DBusInterface::handleMessage(const QDBusMessage& message, const QDBusConnec
139139 QString appid = decodeAppId(pathtemp);
140140
141141 // First handle methods of the Launcher interface
142− if (message.interface() == "com.canonical.Unity.Launcher") {
143− if (message.member() == "Refresh") {
142+ if (message.interface() == QLatin1String("com.canonical.Unity.Launcher")) {
143+ if (message.member() == QLatin1String("Refresh")) {
144144 QDBusMessage reply = message.createReply();
145145 Q_EMIT refreshCalled();
146146 return connection.send(reply);
147147 }
148− } else if (message.interface() == "com.canonical.Unity.Launcher.Item") {
148+ } else if (message.interface() == QLatin1String("com.canonical.Unity.Launcher.Item")) {
149149 // Handle methods of the Launcher-Item interface
150− if (message.member() == "Alert" && validpath) {
150+ if (message.member() == QLatin1String("Alert") && validpath) {
151151 QDBusMessage reply = message.createReply();
152152 Q_EMIT alertCalled(appid);
153153 return connection.send(reply);
@@ -155,15 +155,15 @@ bool DBusInterface::handleMessage(const QDBusMessage& message, const QDBusConnec
155155 }
156156
157157 // Now handle dynamic properties (for launcher emblems)
158− if (message.interface() != "org.freedesktop.DBus.Properties") {
158+ if (message.interface() != QLatin1String("org.freedesktop.DBus.Properties")) {
159159 return false;
160160 }
161161
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"))) {
163163 return false;
164164 }
165165
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"))) {
167167 return false;
168168 }
169169
@@ -175,45 +175,45 @@ bool DBusInterface::handleMessage(const QDBusMessage& message, const QDBusConnec
175175 LauncherItem *item = static_cast<LauncherItem*>(m_launcherModel->get(index));
176176
177177 QVariantList retval;
178− if (message.member() == "Get") {
178+ if (message.member() == QLatin1String("Get")) {
179179 QString cachedString = message.arguments()[1].toString();
180180 if (!item) {
181181 return false;
182182 }
183− if (cachedString == "count") {
183+ if (cachedString == QLatin1String("count")) {
184184 retval.append(QVariant::fromValue(QDBusVariant(item->count())));
185− } else if (cachedString == "countVisible") {
185+ } else if (cachedString == QLatin1String("countVisible")) {
186186 retval.append(QVariant::fromValue(QDBusVariant(item->countVisible())));
187− } else if (cachedString == "progress") {
187+ } else if (cachedString == QLatin1String("progress")) {
188188 retval.append(QVariant::fromValue(QDBusVariant(item->progress())));
189189 }
190− } else if (message.member() == "Set") {
190+ } else if (message.member() == QLatin1String("Set")) {
191191 QString cachedString = message.arguments()[1].toString();
192− if (cachedString == "count") {
192+ if (cachedString == QLatin1String("count")) {
193193 int newCount = message.arguments()[2].value<QDBusVariant>().variant().toInt();
194194 if (!item || newCount != item->count()) {
195195 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));
197197 }
198− } else if (cachedString == "countVisible") {
198+ } else if (cachedString == QLatin1String("countVisible")) {
199199 bool newVisible = message.arguments()[2].value<QDBusVariant>().variant().toBool();
200200 if (!item || newVisible != item->countVisible()) {
201201 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);
203203 }
204− } else if (cachedString == "progress") {
204+ } else if (cachedString == QLatin1String("progress")) {
205205 int newProgress = message.arguments()[2].value<QDBusVariant>().variant().toInt();
206206 if (!item || newProgress != item->progress()) {
207207 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));
209209 }
210210 }
211− } else if (message.member() == "GetAll") {
211+ } else if (message.member() == QLatin1String("GetAll")) {
212212 if (item) {
213213 QVariantMap all;
214− all.insert("count", item->count());
215− all.insert("countVisible", item->countVisible());
216− all.insert("progress", item->progress());
214+ all.insert(QStringLiteral("count"), item->count());
215+ all.insert(QStringLiteral("countVisible"), item->countVisible());
216+ all.insert(QStringLiteral("progress"), item->progress());
217217 retval.append(all);
218218 }
219219 } else {
plugins/Unity/Launcher/desktopfilehandler.cpp+17−16
@@ -70,7 +70,7 @@ void DesktopFileHandler::load()
7070
7171 QStringList searchDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
7272#ifdef LAUNCHER_TESTING
73− searchDirs << ".";
73+ searchDirs << QStringLiteral(".");
7474#endif
7575
7676 QString path;
@@ -79,14 +79,15 @@ void DesktopFileHandler::load()
7979 helper.replace(dashPos, 1, '/');
8080 }
8181
82− if (helper.contains("/")) {
83− path += helper.split('/').first() + '/';
82+ if (helper.contains('/')) {
83+ path += helper.split('/').at(0) + '/';
8484 helper.remove(QRegExp("^" + path));
8585 }
8686
8787 Q_FOREACH(const QString &searchDirName, searchDirs) {
8888 QDir searchDir(searchDirName + "/" + path);
89− Q_FOREACH(const QString &desktopFile, searchDir.entryList(QStringList() << "*.desktop")) {
89+ const QString desktop = QStringLiteral("*.desktop");
90+ Q_FOREACH(const QString &desktopFile, searchDir.entryList(QStringList() << desktop)) {
9091 if (desktopFile.startsWith(helper)) {
9192 QFileInfo fileInfo(searchDir, desktopFile);
9293 m_filename = fileInfo.absoluteFilePath();
@@ -95,7 +96,7 @@ void DesktopFileHandler::load()
9596 }
9697 }
9798
98− dashPos = helper.indexOf("-");
99+ dashPos = helper.indexOf('-');
99100 } while (dashPos != -1);
100101}
101102
@@ -107,25 +108,25 @@ QString DesktopFileHandler::displayName() const
107108
108109 QSettings settings(m_filename, QSettings::IniFormat);
109110 settings.setIniCodec("UTF-8");
110− settings.beginGroup("Desktop Entry");
111+ settings.beginGroup(QStringLiteral("Desktop Entry"));
111112
112113 // First try to find Name[xx_YY] and Name[xx] in .desktop file
113114 QString locale = QLocale().name();
114115 QString shortLocale = locale.split('_').first();
115116
116− if (locale != shortLocale && settings.contains(QString("Name[%1]").arg(locale))) {
117− return settings.value(QString("Name[%1]").arg(locale)).toString();
117+ if (locale != shortLocale && settings.contains(QStringLiteral("Name[%1]").arg(locale))) {
118+ return settings.value(QStringLiteral("Name[%1]").arg(locale)).toString();
118119 }
119120
120− if (settings.contains(QString("Name[%1]").arg(shortLocale))) {
121− return settings.value(QString("Name[%1]").arg(shortLocale)).toString();
121+ if (settings.contains(QStringLiteral("Name[%1]").arg(shortLocale))) {
122+ return settings.value(QStringLiteral("Name[%1]").arg(shortLocale)).toString();
122123 }
123124
124125 // 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();
126127
127− if (settings.contains("X-Ubuntu-Gettext-Domain")) {
128− const QString domain = settings.value("X-Ubuntu-Gettext-Domain").toString();
128+ if (settings.contains(QStringLiteral("X-Ubuntu-Gettext-Domain"))) {
129+ const QString domain = settings.value(QStringLiteral("X-Ubuntu-Gettext-Domain")).toString();
129130 return dgettext(domain.toUtf8().constData(), displayName.toUtf8().constData());
130131 }
131132
@@ -140,9 +141,9 @@ QString DesktopFileHandler::icon() const
140141
141142 QSettings settings(m_filename, QSettings::IniFormat);
142143 settings.setIniCodec("UTF-8");
143− settings.beginGroup("Desktop Entry");
144− QString iconString = settings.value("Icon").toString();
145− QString pathString = settings.value("Path").toString();
144+ settings.beginGroup(QStringLiteral("Desktop Entry"));
145+ QString iconString = settings.value(QStringLiteral("Icon")).toString();
146+ QString pathString = settings.value(QStringLiteral("Path")).toString();
146147
147148 if (QFileInfo(iconString).exists()) {
148149 return QFileInfo(iconString).absoluteFilePath();
plugins/Unity/Launcher/gsettings.cpp+15−12
@@ -32,20 +32,22 @@ QStringList GSettings::storedApplications() const
3232{
3333 QStringList storedApps;
3434
35− Q_FOREACH(const QString &entry, m_gSettings->get("items").toStringList()) {
36− if (entry.startsWith("application:///")) {
35+ const QString items = QStringLiteral("items");
36+ Q_FOREACH(const QString &entry, m_gSettings->get(items).toStringList()) {
37+ if (entry.startsWith(QLatin1String("application:///"))) {
3738 // convert legacy entries to new world appids
3839 QString appId = entry;
3940 // Transform "application://foobar.desktop" to "foobar"
40− appId.remove(QRegExp("^application:///"));
41− appId.remove(QRegExp(".desktop$"));
41+ appId.remove(QRegExp(QStringLiteral("^application:///")));
42+ appId.remove(QRegExp(QStringLiteral(".desktop$")));
4243 storedApps << appId;
43− } else if (entry.startsWith("appid://")) {
44+ } else if (entry.startsWith(QLatin1String("appid://"))) {
4445 QString appId = entry;
45− appId.remove("appid://");
46− if (appId.split('/').count() == 3) {
46+ appId.remove(QStringLiteral("appid://"));
47+ const QStringList splittedAppId = appId.split('/');
48+ if (splittedAppId.count() == 3) {
4749 // Strip current-user-version in case its there
48− appId = appId.split('/').first() + "_" + appId.split('/').at(1);
50+ appId = splittedAppId.first() + "_" + splittedAppId.at(1);
4951 }
5052 storedApps << appId;
5153 }
@@ -56,19 +58,20 @@ QStringList GSettings::storedApplications() const
5658void GSettings::setStoredApplications(const QStringList &storedApplications)
5759{
5860 QStringList gSettingsList;
61+ gSettingsList.reserve(storedApplications.count());
5962 Q_FOREACH(const QString &entry, storedApplications) {
60− gSettingsList << QString("appid://%1").arg(entry);
63+ gSettingsList << QStringLiteral("appid://%1").arg(entry);
6164 }
6265 // GSettings will emit a changed signal to ourselves. Let's cache the items
6366 // and only forward the changed signal when the list did actually change.
6467 m_cachedItems = gSettingsList;
65− m_gSettings->set("items", gSettingsList);
68+ m_gSettings->set(QStringLiteral("items"), gSettingsList);
6669}
6770
6871void GSettings::onSettingsChanged(const QString &key)
6972{
70− if (key == "items") {
71− const QStringList cachedItems = m_gSettings->get("items").toStringList();
73+ if (key == QLatin1String("items")) {
74+ const QStringList cachedItems = m_gSettings->get(QStringLiteral("items")).toStringList();
7275 if (m_cachedItems != cachedItems) {
7376 m_cachedItems = cachedItems;
7477 Q_EMIT changed();
plugins/Unity/Launcher/launcheritem.cpp+6−6
@@ -38,17 +38,17 @@ LauncherItem::LauncherItem(const QString &appId, const QString &name, const QStr
3838 m_quickList(new QuickListModel(this))
3939{
4040 QuickListEntry nameAction;
41− nameAction.setActionId("launch_item");
41+ nameAction.setActionId(QStringLiteral("launch_item"));
4242 nameAction.setText(m_name);
4343 m_quickList->appendAction(nameAction);
4444
4545 QuickListEntry pinningAction;
46− pinningAction.setActionId("pin_item");
46+ pinningAction.setActionId(QStringLiteral("pin_item"));
4747 pinningAction.setText(gettext("Pin shortcut"));
4848 m_quickList->appendAction(pinningAction);
4949
50− m_quitAction.setActionId("stop_item");
51− m_quitAction.setIcon("application-exit");
50+ m_quitAction.setActionId(QStringLiteral("stop_item"));
51+ m_quitAction.setIcon(QStringLiteral("application-exit"));
5252 m_quitAction.setText(gettext("Quit"));
5353}
5454
@@ -67,7 +67,7 @@ void LauncherItem::setName(const QString &name)
6767 if (m_name != name) {
6868 m_name = name;
6969 QuickListEntry entry;
70− entry.setActionId("launch_item");
70+ entry.setActionId(QStringLiteral("launch_item"));
7171 entry.setText(m_name);
7272 m_quickList->updateAction(entry);
7373 Q_EMIT nameChanged(name);
@@ -102,7 +102,7 @@ void LauncherItem::setPinned(bool pinned)
102102 // Even if pinned status didn't change, we want to update text in case
103103 // the locale has changed since we last set pinned status.
104104 QuickListEntry entry;
105− entry.setActionId("pin_item");
105+ entry.setActionId(QStringLiteral("pin_item"));
106106 entry.setText(pinned ? gettext("Unpin shortcut") : gettext("Pin shortcut"));
107107 m_quickList->updateAction(entry);
108108}
plugins/Unity/Launcher/launchermodel.cpp+6−6
@@ -204,15 +204,15 @@ void LauncherModel::quickListActionInvoked(const QString &appId, int actionIndex
204204 const QString actionId = model->get(actionIndex).actionId();
205205
206206 // Check if this is one of the launcher actions we handle ourselves
207− if (actionId == "pin_item") {
207+ if (actionId == QLatin1String("pin_item")) {
208208 if (item->pinned()) {
209209 requestRemove(appId);
210210 } else {
211211 pin(appId);
212212 }
213− } else if (actionId == "launch_item") {
213+ } else if (actionId == QLatin1String("launch_item")) {
214214 QDesktopServices::openUrl(getUrlForAppId(appId));
215− } else if (actionId == "stop_item") { // Quit
215+ } else if (actionId == QLatin1String("stop_item")) { // Quit
216216 if (m_appManager) {
217217 m_appManager->stopApplication(appId);
218218 }
@@ -236,13 +236,13 @@ QString LauncherModel::getUrlForAppId(const QString &appId) const
236236 return QString();
237237 }
238238
239− if (!appId.contains("_")) {
239+ if (!appId.contains('_')) {
240240 return "application:///" + appId + ".desktop";
241241 }
242242
243243 QStringList parts = appId.split('_');
244244 QString package = parts.value(0);
245− QString app = parts.value(1, "first-listed-app");
245+ QString app = parts.value(1, QStringLiteral("first-listed-app"));
246246 return "appid://" + package + "/" + app + "/current-user-version";
247247}
248248
@@ -503,7 +503,7 @@ void LauncherModel::applicationAdded(const QModelIndex &parent, int row)
503503 return;
504504 }
505505
506− if (app->appId() == "unity8-dash") {
506+ if (app->appId() == QLatin1String("unity8-dash")) {
507507 // Not adding the dash app
508508 return;
509509 }
plugins/Unity/Launcher/plugin.cpp+5−5
@@ -39,11 +39,11 @@ void UnityLauncherPlugin::registerTypes(const char *uri)
3939{
4040 Q_ASSERT(uri == QLatin1String("Unity.Launcher"));
4141
42− qmlRegisterUncreatableType<LauncherModelInterface>(uri, 0, 1, "LauncherModelInterface", "Abstract Interface. Cannot be instantiated.");
43− qmlRegisterUncreatableType<LauncherItemInterface>(uri, 0, 1, "LauncherItemInterface", "Abstract Interface. Cannot be instantiated.");
44− qmlRegisterUncreatableType<QuickListModelInterface>(uri, 0, 1, "QuickListInterface", "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", QStringLiteral("Abstract Interface. Cannot be instantiated."));
44+ qmlRegisterUncreatableType<QuickListModelInterface>(uri, 0, 1, "QuickListInterface", QStringLiteral("Abstract Interface. Cannot be instantiated."));
4545
4646 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.");
48− qmlRegisterUncreatableType<QuickListModel>(uri, 0, 1, "QuickListModel", "Can't create a QuickListModel in QML. Get them from the LauncherItems.");
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", QStringLiteral("Can't create a QuickListModel in QML. Get them from the LauncherItems."));
4949}
plugins/Unity/Session/dbusunitysessionservice.cpp+41−41
@@ -58,7 +58,7 @@ public:
5858 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE,
5959 LOGIN1_PATH,
6060 LOGIN1_IFACE,
61− "GetSessionByPID");
61+ QStringLiteral("GetSessionByPID"));
6262 msg << (quint32) getpid();
6363
6464 QDBusReply<QDBusObjectPath> reply = QDBusConnection::systemBus().asyncCall(msg);
@@ -66,13 +66,13 @@ public:
6666 logindSessionPath = reply.value().path();
6767
6868 // 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"),
7070 this, SLOT(onPropertiesChanged(QString,QVariantMap,QStringList)));
7171
7272 setupSystemdInhibition();
7373
7474 // 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"),
7676 this, SLOT(onResuming(bool)));
7777 } else {
7878 qWarning() << "Failed to get logind session path" << reply.error().message();
@@ -87,7 +87,7 @@ public:
8787 // inhibit systemd handling of power/sleep/lid buttons
8888 // http://www.freedesktop.org/wiki/Software/systemd/inhibit
8989
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"));
9191 msg << "handle-power-key:handle-suspend-key:handle-hibernate-key:handle-lid-switch"; // what
9292 msg << "Unity"; // who
9393 msg << "Unity8 handles power events"; // why
@@ -128,8 +128,8 @@ public:
128128
129129 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE,
130130 logindSessionPath,
131− "org.freedesktop.DBus.Properties",
132− "Get");
131+ QStringLiteral("org.freedesktop.DBus.Properties"),
132+ QStringLiteral("Get"));
133133 msg << LOGIN1_SESSION_IFACE;
134134 msg << ACTIVE_KEY;
135135
@@ -154,8 +154,8 @@ public:
154154 {
155155 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE,
156156 logindSessionPath,
157− "org.freedesktop.DBus.Properties",
158− "Get");
157+ QStringLiteral("org.freedesktop.DBus.Properties"),
158+ QStringLiteral("Get"));
159159 msg << LOGIN1_SESSION_IFACE;
160160 msg << IDLE_SINCE_KEY;
161161
@@ -174,7 +174,7 @@ public:
174174 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE,
175175 logindSessionPath,
176176 LOGIN1_SESSION_IFACE,
177− "SetIdleHint");
177+ QStringLiteral("SetIdleHint"));
178178 msg << idle;
179179 QDBusConnection::systemBus().asyncCall(msg);
180180 }
@@ -217,14 +217,14 @@ Q_SIGNALS:
217217Q_GLOBAL_STATIC(DBusUnitySessionServicePrivate, d)
218218
219219DBusUnitySessionService::DBusUnitySessionService()
220− : UnityDBusObject("/com/canonical/Unity/Session", "com.canonical.Unity")
220+ : UnityDBusObject(QStringLiteral("/com/canonical/Unity/Session"), QStringLiteral("com.canonical.Unity"))
221221{
222222 if (!d->logindSessionPath.isEmpty()) {
223223 // 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()));
225225 // ... and our Unlocked() signal to the logind's session Unlock() signal
226226 // (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()));
228228 } else {
229229 qWarning() << "Failed to connect to logind's session Lock/Unlock signals";
230230 }
@@ -239,36 +239,36 @@ void DBusUnitySessionService::Logout()
239239
240240void DBusUnitySessionService::EndSession()
241241{
242− const QDBusMessage msg = QDBusMessage::createMethodCall("com.ubuntu.Upstart",
243− "/com/ubuntu/Upstart",
244− "com.ubuntu.Upstart0_6",
245− "EndSession");
242+ const QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("com.ubuntu.Upstart"),
243+ QStringLiteral("/com/ubuntu/Upstart"),
244+ QStringLiteral("com.ubuntu.Upstart0_6"),
245+ QStringLiteral("EndSession"));
246246 QDBusConnection::sessionBus().asyncCall(msg);
247247}
248248
249249bool DBusUnitySessionService::CanHibernate() const
250250{
251− return d->checkLogin1Call("CanHibernate");
251+ return d->checkLogin1Call(QStringLiteral("CanHibernate"));
252252}
253253
254254bool DBusUnitySessionService::CanSuspend() const
255255{
256− return d->checkLogin1Call("CanSuspend");
256+ return d->checkLogin1Call(QStringLiteral("CanSuspend"));
257257}
258258
259259bool DBusUnitySessionService::CanHybridSleep() const
260260{
261− return d->checkLogin1Call("CanHybridSleep");
261+ return d->checkLogin1Call(QStringLiteral("CanHybridSleep"));
262262}
263263
264264bool DBusUnitySessionService::CanReboot() const
265265{
266− return d->checkLogin1Call("CanReboot");
266+ return d->checkLogin1Call(QStringLiteral("CanReboot"));
267267}
268268
269269bool DBusUnitySessionService::CanShutdown() const
270270{
271− return d->checkLogin1Call("CanPowerOff");
271+ return d->checkLogin1Call(QStringLiteral("CanPowerOff"));
272272}
273273
274274bool DBusUnitySessionService::CanLock() const
@@ -320,10 +320,10 @@ void DBusUnitySessionService::Lock()
320320{
321321 // lock the session using the org.freedesktop.DisplayManager system DBUS service
322322 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"),
324324 sessionPath,
325− "org.freedesktop.DisplayManager.Session",
326− "Lock");
325+ QStringLiteral("org.freedesktop.DisplayManager.Session"),
326+ QStringLiteral("Lock"));
327327 QDBusReply<void> reply = QDBusConnection::systemBus().asyncCall(msg);
328328 if (!reply.isValid()) {
329329 qWarning() << "Lock call failed" << reply.error().message();
@@ -346,7 +346,7 @@ void DBusUnitySessionService::RequestLogout()
346346
347347void DBusUnitySessionService::Reboot()
348348{
349− d->makeLogin1Call("Reboot", {false});
349+ d->makeLogin1Call(QStringLiteral("Reboot"), {false});
350350}
351351
352352void DBusUnitySessionService::RequestReboot()
@@ -357,22 +357,22 @@ void DBusUnitySessionService::RequestReboot()
357357
358358void DBusUnitySessionService::Shutdown()
359359{
360− d->makeLogin1Call("PowerOff", {false});
360+ d->makeLogin1Call(QStringLiteral("PowerOff"), {false});
361361}
362362
363363void DBusUnitySessionService::Suspend()
364364{
365− d->makeLogin1Call("Suspend", {false});
365+ d->makeLogin1Call(QStringLiteral("Suspend"), {false});
366366}
367367
368368void DBusUnitySessionService::Hibernate()
369369{
370− d->makeLogin1Call("Hibernate", {false});
370+ d->makeLogin1Call(QStringLiteral("Hibernate"), {false});
371371}
372372
373373void DBusUnitySessionService::HybridSleep()
374374{
375− d->makeLogin1Call("HybridSleep", {false});
375+ d->makeLogin1Call(QStringLiteral("HybridSleep"), {false});
376376}
377377
378378void DBusUnitySessionService::RequestShutdown()
@@ -392,16 +392,16 @@ enum class Action : unsigned
392392
393393void performAsyncUnityCall(const QString &method)
394394{
395− const QDBusMessage msg = QDBusMessage::createMethodCall("com.canonical.Unity",
396− "/com/canonical/Unity/Session",
397− "com.canonical.Unity.Session",
395+ const QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("com.canonical.Unity"),
396+ QStringLiteral("/com/canonical/Unity/Session"),
397+ QStringLiteral("com.canonical.Unity.Session"),
398398 method);
399399 QDBusConnection::sessionBus().asyncCall(msg);
400400}
401401
402402
403403DBusGnomeSessionManagerWrapper::DBusGnomeSessionManagerWrapper()
404− : UnityDBusObject("/org/gnome/SessionManager/EndSessionDialog", "com.canonical.Unity")
404+ : UnityDBusObject(QStringLiteral("/org/gnome/SessionManager/EndSessionDialog"), QStringLiteral("com.canonical.Unity"))
405405{
406406}
407407
@@ -414,15 +414,15 @@ void DBusGnomeSessionManagerWrapper::Open(const unsigned type, const unsigned ar
414414 switch (static_cast<Action>(type))
415415 {
416416 case Action::LOGOUT:
417− performAsyncUnityCall("RequestLogout");
417+ performAsyncUnityCall(QStringLiteral("RequestLogout"));
418418 break;
419419
420420 case Action::REBOOT:
421− performAsyncUnityCall("RequestReboot");
421+ performAsyncUnityCall(QStringLiteral("RequestReboot"));
422422 break;
423423
424424 case Action::SHUTDOWN:
425− performAsyncUnityCall("RequestShutdown");
425+ performAsyncUnityCall(QStringLiteral("RequestShutdown"));
426426 break;
427427
428428 default:
@@ -432,7 +432,7 @@ void DBusGnomeSessionManagerWrapper::Open(const unsigned type, const unsigned ar
432432
433433
434434DBusGnomeScreensaverWrapper::DBusGnomeScreensaverWrapper()
435− : UnityDBusObject("/org/gnome/ScreenSaver", "org.gnome.ScreenSaver")
435+ : UnityDBusObject(QStringLiteral("/org/gnome/ScreenSaver"), QStringLiteral("org.gnome.ScreenSaver"))
436436{
437437 connect(d, &DBusUnitySessionServicePrivate::screensaverActiveChanged, this, &DBusGnomeScreensaverWrapper::ActiveChanged);
438438}
@@ -451,7 +451,7 @@ void DBusGnomeScreensaverWrapper::SetActive(bool lock)
451451
452452void DBusGnomeScreensaverWrapper::Lock()
453453{
454− performAsyncUnityCall("Lock");
454+ performAsyncUnityCall(QStringLiteral("Lock"));
455455}
456456
457457quint32 DBusGnomeScreensaverWrapper::GetActiveTime() const
@@ -466,9 +466,9 @@ void DBusGnomeScreensaverWrapper::SimulateUserActivity()
466466
467467
468468DBusScreensaverWrapper::DBusScreensaverWrapper()
469− : UnityDBusObject("/org/freedesktop/ScreenSaver", "org.freedesktop.ScreenSaver")
469+ : UnityDBusObject(QStringLiteral("/org/freedesktop/ScreenSaver"), QStringLiteral("org.freedesktop.ScreenSaver"))
470470{
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
472472 connect(d, &DBusUnitySessionServicePrivate::screensaverActiveChanged, this, &DBusScreensaverWrapper::ActiveChanged);
473473}
474474
@@ -488,7 +488,7 @@ bool DBusScreensaverWrapper::SetActive(bool lock)
488488
489489void DBusScreensaverWrapper::Lock()
490490{
491− performAsyncUnityCall("Lock");
491+ performAsyncUnityCall(QStringLiteral("Lock"));
492492}
493493
494494quint32 DBusScreensaverWrapper::GetActiveTime() const
plugins/Utils/CMakeLists.txt+1
@@ -23,6 +23,7 @@ set(QMLPLUGIN_SRC
2323 windowscreenshotprovider.cpp
2424 easingcurve.cpp
2525 windowstatestorage.cpp
26+ timezoneFormatter.cpp
2627 plugin.cpp
2728 )
2829
plugins/Utils/plugin.cpp+4−1
@@ -36,6 +36,7 @@
3636#include "windowscreenshotprovider.h"
3737#include "windowstatestorage.h"
3838#include "constants.h"
39+#include "timezoneFormatter.h"
3940
4041static QObject *createWindowStateStorage(QQmlEngine *engine, QJSEngine *scriptEngine)
4142{
@@ -67,6 +68,8 @@ void UtilsPlugin::registerTypes(const char *uri)
6768 qmlRegisterSingletonType<WindowStateStorage>(uri, 0, 1, "WindowStateStorage", createWindowStateStorage);
6869 qmlRegisterType<InputWatcher>(uri, 0, 1, "InputWatcher");
6970 qmlRegisterSingletonType<Constants>(uri, 0, 1, "Constants", createConstants);
71+ qmlRegisterSingletonType<TimezoneFormatter>(uri, 0, 1, "TimezoneFormatter",
72+ [](QQmlEngine*, QJSEngine*) -> QObject* { return new TimezoneFormatter; });
7073 qmlRegisterType<ActiveFocusLogger>(uri, 0, 1, "ActiveFocusLogger");
7174}
7275
@@ -74,5 +77,5 @@ void UtilsPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
7477{
7578 QQmlExtensionPlugin::initializeEngine(engine, uri);
7679
77− engine->addImageProvider(QLatin1String("window"), new WindowScreenshotProvider);
80+ engine->addImageProvider(QStringLiteral("window"), new WindowScreenshotProvider);
7881}
plugins/Utils/relativetimeformatter.cpp+4−4
@@ -185,8 +185,8 @@ char* generate_full_format_string_at_time (GDateTime* now,
185185 /* Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
186186 This format string is used for showing, on a 12-hour clock, times that happened before a week from now.
187187 (\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"
189− en_GB example: "%a %b %d\u2003%l:%M %p" --> "Fri 31 Oct 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 %d %b\u2003%l:%M %p" --> "Fri 31 Oct 1:00 PM" */
190190 g_string_assign (ret, dgettext_datetime("%a %d %b\u2003%l:%M %p"));
191191 break;
192192 }
@@ -229,8 +229,8 @@ char* generate_full_format_string_at_time (GDateTime* now,
229229 /* Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
230230 This format string is used for showing, on a 24-hour clock, times that happened before a week from now.
231231 (\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"
233− en_GB example: "%a %b %d\u2003%H:%M" --> "Fri 31 Oct 13:00" */
232+ en_US example: "%a %b %d\u2003%H:%M" --> "Fri Oct 31 13:00"
233+ en_GB example: "%a %d %b\u2003%H:%M" --> "Fri 31 Oct 13:00" */
234234 g_string_assign (ret, dgettext_datetime("%a %d %b\u2003%H:%M"));
235235 break;
236236 }
plugins/Utils/timeformatter.cpp+3−3
@@ -113,7 +113,7 @@ TimeFormatter::TimeFormatter(QObject *parent): QObject(parent)
113113 priv = new TimeFormatterPrivate;
114114 priv->formatter = this;
115115 priv->time = 0;
116− priv->format = "yyyy-MM-dd hh:mm";
116+ priv->format = QStringLiteral("yyyy-MM-dd hh:mm");
117117 priv->system_bus = nullptr;
118118 priv->subscription_id = 0;
119119 priv->cancellable = g_cancellable_new ();
@@ -182,7 +182,7 @@ QString TimeFormatter::formatTime() const
182182}
183183
184184GDateTimeFormatter::GDateTimeFormatter(QObject* parent)
185−: TimeFormatter("%d-%m-%Y %I:%M%p", parent)
185+: TimeFormatter(QStringLiteral("%d-%m-%Y %I:%M%p"), parent)
186186{
187187}
188188
@@ -194,7 +194,7 @@ QString GDateTimeFormatter::formatTime() const
194194
195195 datetime = g_date_time_new_from_unix_local(time());
196196 if (!datetime) {
197− return "";
197+ return QLatin1String("");
198198 }
199199
200200 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):
3030 QObject(parent)
3131{
3232 QString dbPath = QDir::homePath() + "/.cache/unity8/";
33− m_db = QSqlDatabase::addDatabase("QSQLITE");
33+ m_db = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"));
3434 QDir dir;
3535 dir.mkpath(dbPath);
3636 m_db.setDatabaseName(dbPath + "windowstatestorage.sqlite");
@@ -51,7 +51,7 @@ void WindowStateStorage::saveGeometry(const QString &windowId, const QRect &rect
5151{
5252 QMutexLocker mutexLocker(&s_mutex);
5353
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');")
5555 .arg(windowId)
5656 .arg(rect.x())
5757 .arg(rect.y())
@@ -85,7 +85,7 @@ void WindowStateStorage::executeAsyncQuery(const QString &queryString)
8585QRect WindowStateStorage::getGeometry(const QString &windowId, const QRect &defaultValue)
8686{
8787 QMutexLocker l(&s_mutex);
88− QString queryString = QString("SELECT * FROM geometry WHERE windowId = '%1';")
88+ QString queryString = QStringLiteral("SELECT * FROM geometry WHERE windowId = '%1';")
8989 .arg(windowId);
9090 QSqlQuery query;
9191
@@ -99,7 +99,7 @@ QRect WindowStateStorage::getGeometry(const QString &windowId, const QRect &defa
9999 if (!query.first()) {
100100 return defaultValue;
101101 }
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());
103103}
104104
105105void WindowStateStorage::initdb()
@@ -110,8 +110,8 @@ void WindowStateStorage::initdb()
110110 return;
111111 }
112112
113− if (!m_db.tables().contains("geometry")) {
113+ if (!m_db.tables().contains(QStringLiteral("geometry"))) {
114114 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);"));
116116 }
117117}
plugins/Wizard/PageList.cpp+3−3
@@ -40,8 +40,8 @@ PageList::PageList(QObject *parent)
4040 m_index(-1),
4141 m_pages()
4242{
43− QString qmlSuffix = ".qml";
44− QString disabledSuffix = ".disabled";
43+ QString qmlSuffix = QStringLiteral(".qml");
44+ QString disabledSuffix = QStringLiteral(".disabled");
4545 QSet<QString> disabledPages;
4646 QStringList dataDirs;
4747
@@ -53,7 +53,7 @@ PageList::PageList(QObject *parent)
5353
5454 Q_FOREACH(const QString &dataDir, dataDirs) {
5555 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);
5757 Q_FOREACH(const QString &entry, entries) {
5858 if (!m_pages.contains(entry) && entry.endsWith(qmlSuffix))
5959 m_pages.insert(entry, dir.absoluteFilePath(entry));
plugins/Wizard/System.cpp+23−15
@@ -33,14 +33,16 @@ System::System()
3333 // Register the argument needed for UpdateActivationEnvironment below
3434 qDBusRegisterMetaType<QMap<QString,QString>>();
3535
36− m_fsWatcher.addPath(wizardEnabledPath());
37− connect(&m_fsWatcher, &QFileSystemWatcher::fileChanged, this, &System::wizardEnabledChanged);
36+ if(!wizardEnabled()) {
37+ m_fsWatcher.addPath(wizardEnabledPath());
38+ }
39+ connect(&m_fsWatcher, &QFileSystemWatcher::fileChanged, this, &System::watcherFileChanged);
3840}
3941
4042QString System::wizardEnabledPath()
4143{
4244 // 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"));
4446}
4547
4648bool System::wizardEnabled() const
@@ -56,13 +58,19 @@ void System::setWizardEnabled(bool enabled)
5658 if (enabled) {
5759 QFile::remove(wizardEnabledPath());
5860 } else {
59− QDir(wizardEnabledPath()).mkpath("..");
61+ QDir(wizardEnabledPath()).mkpath(QStringLiteral(".."));
6062 QFile(wizardEnabledPath()).open(QIODevice::WriteOnly);
6163 m_fsWatcher.addPath(wizardEnabledPath());
62− wizardEnabledChanged();
64+ Q_EMIT wizardEnabledChanged();
6365 }
6466}
6567
68+void System::watcherFileChanged()
69+{
70+ Q_EMIT wizardEnabledChanged();
71+ m_fsWatcher.removePath(wizardEnabledPath());
72+}
73+
6674void System::setSessionVariable(const QString &variable, const QString &value)
6775{
6876 // We need to update both upstart's and DBus's environment
@@ -71,10 +79,10 @@ void System::setSessionVariable(const QString &variable, const QString &value)
7179 QMap<QString,QString> valueMap;
7280 valueMap.insert(variable, value);
7381
74− QDBusMessage msg = QDBusMessage::createMethodCall("org.freedesktop.DBus",
75− "/org/freedesktop/DBus",
76− "org.freedesktop.DBus",
77− "UpdateActivationEnvironment");
82+ QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.DBus"),
83+ QStringLiteral("/org/freedesktop/DBus"),
84+ QStringLiteral("org.freedesktop.DBus"),
85+ QStringLiteral("UpdateActivationEnvironment"));
7886
7987 msg << QVariant::fromValue(valueMap);
8088 QDBusConnection::sessionBus().asyncCall(msg);
@@ -82,21 +90,21 @@ void System::setSessionVariable(const QString &variable, const QString &value)
8290
8391void System::updateSessionLanguage(const QString &locale)
8492{
85− const QString language = locale.split(".")[0];
93+ const QString language = locale.split(QStringLiteral("."))[0];
8694
87− setSessionVariable("LANGUAGE", language);
88− setSessionVariable("LANG", locale);
89− setSessionVariable("LC_ALL", locale);
95+ setSessionVariable(QStringLiteral("LANGUAGE"), language);
96+ setSessionVariable(QStringLiteral("LANG"), locale);
97+ setSessionVariable(QStringLiteral("LC_ALL"), locale);
9098
9199 // QLocale caches the default locale on startup, and Qt uses that cached
92100 // copy when formatting dates. So manually update it here.
93101 QLocale::setDefault(QLocale(locale));
94102
95103 // 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; \
97105 initctl stop scope-registry; \
98106 initctl stop smart-scopes-proxy; \
99107 initctl emit --no-wait indicator-services-start; \
100108 initctl restart --no-wait maliit-server; \
101− initctl restart --no-wait unity8-dash\"");
109+ initctl restart --no-wait unity8-dash\""));
102110}
plugins/Wizard/System.h+3
@@ -38,6 +38,9 @@ public Q_SLOTS:
3838Q_SIGNALS:
3939 void wizardEnabledChanged();
4040
41+private Q_SLOTS:
42+ void watcherFileChanged();
43+
4144private:
4245 Q_DISABLE_COPY(System)
4346
po/am.po+4−9
@@ -6,18 +6,17 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-04 14:46+0000\n"
1212"Last-Translator: samson <Unknown>\n"
1313"Language-Team: Amharic <am@li.org>\n"
14−"Language: am\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n > 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -794,8 +793,7 @@ msgstr "%1 〉"
794793#~ "You have now mastered the edge gestures and can start using the "
795794#~ "phone<br><br>Tap on the screen to start"
796795#~ msgstr ""
797−#~ "አሁን የ ጠርዝ እንቅስቃሴን አውቀዋል እና መጀመር ይችላሉ ስልኩን መጠቀም <br><br>መመልከቻውን መታ ያድርጉ "
798−#~ "ለመጀመር"
796+#~ "አሁን የ ጠርዝ እንቅስቃሴን አውቀዋል እና መጀመር ይችላሉ ስልኩን መጠቀም <br><br>መመልከቻውን መታ ያድርጉ ለመጀመር"
799797
800798#~ msgid "Restart"
801799#~ msgstr "እንደገና ማስጀመሪያ"
@@ -805,6 +803,3 @@ msgstr "%1 〉"
805803
806804#~ msgid "Please re-enter"
807805#~ msgstr "እባክዎን እንደገና-ያስገቡ"
808−
809−#~ msgid "Click here to finish."
810−#~ msgstr "ለመጨረስ እዚህ ይጫኑ"
po/ar.po+7−10
@@ -6,19 +6,18 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-29 09:41+0000\n"
1212"Last-Translator: Ibrahim Saed <ibraheem5000@gmail.com>\n"
1313"Language-Team: Arabic <ar@li.org>\n"
14−"Language: ar\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
1918"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"
21−"X-Generator: Launchpad (build 17737)\n"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20+"X-Generator: Launchpad (build 17746)\n"
2221
2322#: plugins/LightDM/Greeter.cpp:112
2423msgid "Password: "
@@ -593,7 +592,8 @@ msgstr "أدخِل شريحة SIM ثم أعِد تشغيل الجهاز"
593592
594593#: qml/Wizard/Pages/20-sim.qml:59
595594msgid "Without it, you won’t be able to make calls or use text messaging."
596−msgstr "بدونها لن تتمكن من إجراء أي مكالمات هاتفية أو استخدام الرسائل النصية."
595+msgstr ""
596+"بدونها لن تتمكن من إجراء أي مكالمات هاتفية أو استخدام الرسائل النصية."
597597
598598#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
599599msgid "Skip"
@@ -783,11 +783,8 @@ msgstr ""
783783#~ "You have now mastered the edge gestures and can start using the "
784784#~ "phone<br><br>Tap on the screen to start"
785785#~ msgstr ""
786−#~ "أنت الآن بارع في إيماءات الحواف ويمكنك البدء باستخدام هاتفك<br><br>انقر "
787−#~ "على الشاشة للبدء"
786+#~ "أنت الآن بارع في إيماءات الحواف ويمكنك البدء باستخدام هاتفك<br><br>انقر على "
787+#~ "الشاشة للبدء"
788788
789789#~ msgid "Please re-enter"
790790#~ msgstr "برجاء إعادة إدخالها"
791−
792−#~ msgid "Click here to finish."
793−#~ msgstr "انقر هنا للإنهاء."
po/ast.po+9−11
@@ -6,18 +6,17 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-06-11 23:39+0000\n"
1212"Last-Translator: enolp <enolp@softastur.org>\n"
1313"Language-Team: Asturian <ast@li.org>\n"
14−"Language: ast\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -126,7 +125,8 @@ msgstr "Quedasti bloquiáu polos escesivos intentos fallíos de fras de pasu."
126125
127126#: qml/Components/DelayedLockscreen.qml:65
128127msgid "You have been locked out due to too many failed passcode attempts."
129−msgstr "Quedasti bloquiáu polos escesivos intentos fallíos de códigu de pasu."
128+msgstr ""
129+"Quedasti bloquiáu polos escesivos intentos fallíos de códigu de pasu."
130130
131131#: qml/Components/DelayedLockscreen.qml:74
132132#, qt-format
@@ -648,7 +648,8 @@ msgstr "Namái usando GPS (menos precisión)"
648648
649649#: qml/Wizard/Pages/50-location.qml:86
650650msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
651−msgstr "Usando GPS, Wi-fi anónimes ya información de redes móviles (aconseyao)"
651+msgstr ""
652+"Usando GPS, Wi-fi anónimes ya información de redes móviles (aconseyao)"
652653
653654#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
654655#: qml/Wizard/Pages/50-location.qml:103
@@ -741,8 +742,8 @@ msgstr "%1 〉"
741742
742743#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
743744#~ msgstr ""
744−#~ "Esliza'l deu dende la esquierda p'amosar el llanzador y acceder "
745−#~ "rápidamente a les aplicaciones"
745+#~ "Esliza'l deu dende la esquierda p'amosar el llanzador y acceder rápidamente "
746+#~ "a les aplicaciones"
746747
747748#~ msgid "Well done"
748749#~ msgstr "Bien fecho"
@@ -808,8 +809,5 @@ msgstr "%1 〉"
808809#~ msgid "Manage Scopes"
809810#~ msgstr "Xestionar ámbitos"
810811
811−#~ msgid "Click here to finish."
812−#~ msgstr "Primi equí pa finar."
813−
814812#~ msgid "Please re-enter"
815813#~ msgstr "Por favor, reintroduzla"
po/az.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/be.po+36−36
@@ -6,19 +6,18 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11−"PO-Revision-Date: 2015-04-27 14:34+0000\n"
12−"Last-Translator: Arsień Šachalevič <semen.shah@gmail.com>\n"
11+"PO-Revision-Date: 2015-09-24 14:32+0000\n"
12+"Last-Translator: Siamion Šachalevič <semen.shah@gmail.com>\n"
1313"Language-Team: Belarusian <be@li.org>\n"
14−"Language: be\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
18−"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
19−"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
20−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
21−"X-Generator: Launchpad (build 17737)\n"
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"
19+"X-Launchpad-Export-Date: 2015-09-25 05:51+0000\n"
20+"X-Generator: Launchpad (build 17754)\n"
2221
2322#: plugins/LightDM/Greeter.cpp:112
2423msgid "Password: "
@@ -31,7 +30,7 @@ msgstr "Замацаваць кнопку"
3130
3231#: plugins/Unity/Launcher/launcheritem.cpp:52
3332msgid "Quit"
34−msgstr ""
33+msgstr "Выйсці"
3534
3635#: plugins/Unity/Launcher/launcheritem.cpp:106
3736msgid "Unpin shortcut"
@@ -43,14 +42,14 @@ msgstr "Адмацаваць кнопку"
4342#. en_US example: "Yesterday\u2003%l:%M %p" --> "Yesterday 1:00 PM"
4443#: plugins/Utils/relativetimeformatter.cpp:157
4544msgid "Yesterday %l:%M %p"
46−msgstr ""
45+msgstr "Учора a %H:%M"
4746
4847#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
4948#. This format string is used for showing, on a 12-hour clock, times that happened today.
5049#. en_US example: "%l:%M %p" --> "1:00 PM"
5150#: plugins/Utils/relativetimeformatter.cpp:164
5251msgid "%l:%M %p"
53−msgstr ""
52+msgstr "%H:%M"
5453
5554#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
5655#. This format string is used for showing, on a 12-hour clock, events/appointments that happen tomorrow.
@@ -58,7 +57,7 @@ msgstr ""
5857#. en_US example: "Tomorrow\u2003%l:%M %p" --> "Tomorrow 1:00 PM"
5958#: plugins/Utils/relativetimeformatter.cpp:172
6059msgid "Tomorrow %l:%M %p"
61−msgstr ""
60+msgstr "Заўтра a %H:%M"
6261
6362#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
6463#. This format string is used for showing, on a 12-hour clock, times that happened in the last week.
@@ -66,7 +65,7 @@ msgstr ""
6665#. en_US example: "%a\u2003%l:%M %p" --> "Fri 1:00 PM"
6766#: plugins/Utils/relativetimeformatter.cpp:181
6867msgid "%a %l:%M %p"
69−msgstr ""
68+msgstr "%a a %H:%M"
7069
7170#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
7271#. 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 ""
7574#. en_GB example: "%a %b %d\u2003%l:%M %p" --> "Fri 31 Oct 1:00 PM"
7675#: plugins/Utils/relativetimeformatter.cpp:190
7776msgid "%a %d %b %l:%M %p"
78−msgstr ""
77+msgstr "%a, %b %d a %H:%M"
7978
8079#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
8180#. This format string is used for showing, on a 24-hour clock, times that happen yesterday.
@@ -83,14 +82,14 @@ msgstr ""
8382#. en_US example: "Yesterday\u2003%l:%M %p" --> "Yesterday 13:00"
8483#: plugins/Utils/relativetimeformatter.cpp:201
8584msgid "Yesterday %H:%M"
86−msgstr ""
85+msgstr "Учора а %H:%M"
8786
8887#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
8988#. This format string is used for showing, on a 24-hour clock, times that happened today.
9089#. en_US example: "%H:%M" --> "13:00"
9190#: plugins/Utils/relativetimeformatter.cpp:208
9291msgid "%H:%M"
93−msgstr ""
92+msgstr "%H:%M"
9493
9594#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
9695#. This format string is used for showing, on a 24-hour clock, events/appointments that happen tomorrow.
@@ -98,7 +97,7 @@ msgstr ""
9897#. en_US example: "Tomorrow\u2003%l:%M %p" --> "Tomorrow 13:00"
9998#: plugins/Utils/relativetimeformatter.cpp:216
10099msgid "Tomorrow %H:%M"
101−msgstr ""
100+msgstr "Заўтра a %H:%M"
102101
103102#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
104103#. This format string is used for showing, on a 24-hour clock, times that happened in the last week.
@@ -106,7 +105,7 @@ msgstr ""
106105#. en_US example: "%a\u2003%H:%M" --> "Fri 13:00"
107106#: plugins/Utils/relativetimeformatter.cpp:225
108107msgid "%a %H:%M"
109−msgstr ""
108+msgstr "%a а %H:%M"
110109
111110#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
112111#. 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 ""
115114#. en_GB example: "%a %b %d\u2003%H:%M" --> "Fri 31 Oct 13:00"
116115#: plugins/Utils/relativetimeformatter.cpp:234
117116msgid "%a %d %b %H:%M"
118−msgstr ""
117+msgstr "%a, %b %d а %H:%M"
119118
120119#: qml/Components/DelayedLockscreen.qml:49
121120msgid "Device Locked"
@@ -123,7 +122,8 @@ msgstr "Прылада заблакаваная"
123122
124123#: qml/Components/DelayedLockscreen.qml:64
125124msgid "You have been locked out due to too many failed passphrase attempts."
126−msgstr "Вы былі заблакаваныя з-за занадта вялікай колькасці няўдалых спробаў."
125+msgstr ""
126+"Вы былі заблакаваныя з-за занадта вялікай колькасці няўдалых спробаў."
127127
128128#: qml/Components/DelayedLockscreen.qml:65
129129msgid "You have been locked out due to too many failed passcode attempts."
@@ -146,7 +146,7 @@ msgstr "Выйсці"
146146
147147#: qml/Components/Dialogs.qml:113
148148msgid "Are you sure you want to log out?"
149−msgstr "Вы ўпэўнены, што хочаце выйсці?"
149+msgstr "Вы ўпэўненыя, што хочаце выйсці?"
150150
151151#: qml/Components/Dialogs.qml:115
152152msgctxt "Button: Lock the system"
@@ -380,7 +380,7 @@ msgstr "Даруйце, няслушны пароль"
380380#: qml/Greeter/NarrowView.qml:121
381381msgctxt "passphrase"
382382msgid "Please re-enter"
383−msgstr ""
383+msgstr "Калі ласка, паўтарыце ўвод"
384384
385385#: qml/Greeter/NarrowView.qml:122
386386msgid "Sorry, incorrect passcode"
@@ -406,32 +406,35 @@ msgstr "Нішто не грае"
406406#, qt-format
407407msgid "%1 hour"
408408msgid_plural "%1 hours"
409−msgstr[0] ""
410−msgstr[1] ""
409+msgstr[0] "%1 гадзіна"
410+msgstr[1] "%1 гадзіны"
411+msgstr[2] "%1 гадзінаў"
411412
412413#: qml/Panel/Indicators/MenuItemFactory.qml:807
413414#, qt-format
414415msgid "%1 minute"
415416msgid_plural "%1 minutes"
416−msgstr[0] ""
417−msgstr[1] ""
417+msgstr[0] "%1 хвіліна"
418+msgstr[1] "%1 хвіліны"
419+msgstr[2] "%1 хвілінаў"
418420
419421#: qml/Panel/Indicators/MenuItemFactory.qml:812
420422#, qt-format
421423msgid "%1 second"
422424msgid_plural "%1 seconds"
423−msgstr[0] ""
424−msgstr[1] ""
425+msgstr[0] "%1 секунда"
426+msgstr[1] "%1 секунды"
427+msgstr[2] "%1 секундаў"
425428
426429#: qml/Panel/Indicators/MenuItemFactory.qml:815
427430msgid "0 seconds"
428−msgstr ""
431+msgstr "0 секунд"
429432
430433#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
431434#: qml/Panel/Indicators/MenuItemFactory.qml:817
432435#, qt-format
433436msgid "%1 remaining"
434−msgstr ""
437+msgstr "%1 засталося"
435438
436439#: qml/Panel/Indicators/MenuItemFactory.qml:823
437440msgid "In queue…"
@@ -464,7 +467,7 @@ msgstr "Адказаць"
464467
465468#: qml/Panel/Indicators/MessageMenuItemFactory.qml:204
466469msgid "Call back"
467−msgstr ""
470+msgstr "Зваротны выклік"
468471
469472#: qml/Panel/Indicators/ModemInfoItem.qml:105
470473msgid "Unlock SIM"
@@ -773,8 +776,8 @@ msgstr "%1 〉"
773776
774777#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
775778#~ msgstr ""
776−#~ "Правядзіце пальцам ад левага краю, каб адкрыць панэль запуску для "
777−#~ "паскарэння доступу да праграм"
779+#~ "Правядзіце пальцам ад левага краю, каб адкрыць панэль запуску для паскарэння "
780+#~ "доступу да праграм"
778781
779782#~ msgid "Skip intro"
780783#~ msgstr "Прапусціць уводзіны"
@@ -804,6 +807,3 @@ msgstr "%1 〉"
804807
805808#~ msgid "Please re-enter"
806809#~ msgstr "Калі ласка, паўтарыце ўвод"
807−
808−#~ msgid "Click here to finish."
809−#~ msgstr "Націсніце тут для завяршэння."
po/bg.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/br.po+11−15
@@ -6,18 +6,17 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-08-25 14:12+0000\n"
1212"Last-Translator: Fohanno Thierry <thierry.fohanno@ofis-bzh.org>\n"
1313"Language-Team: Breton <br@li.org>\n"
14−"Language: br\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n > 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -594,7 +593,8 @@ msgstr "Surentez ar prennañ"
594593
595594#: qml/Wizard/Pages/30-passwd-type.qml:74
596595msgid "Please select how you’d like to unlock your phone."
597−msgstr "Diuzit e peseurt mod e fell deoc'h dibrennañ ho pellgomzer, mar plij."
596+msgstr ""
597+"Diuzit e peseurt mod e fell deoc'h dibrennañ ho pellgomzer, mar plij."
598598
599599#: qml/Wizard/Pages/30-passwd-type.qml:97
600600msgctxt "Label: Type of security method"
@@ -652,7 +652,8 @@ msgstr "Implijout ar GPS hepken (n'eo ket ken resis)"
652652
653653#: qml/Wizard/Pages/50-location.qml:86
654654msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
655−msgstr "Implijout ar GPS, Wi-Fi dizanv pe titouroù ar rouedad kelligel (aliet)"
655+msgstr ""
656+"Implijout ar GPS, Wi-Fi dizanv pe titouroù ar rouedad kelligel (aliet)"
656657
657658#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
658659#: qml/Wizard/Pages/50-location.qml:103
@@ -758,13 +759,11 @@ msgstr "%1 〉"
758759
759760#~ msgid "Try swiping from the top edge to access the indicators"
760761#~ msgstr ""
761−#~ "Lakait ho piz da riklañ adalek ar bord uhelañ da lakaat ar merkerioù war "
762−#~ "wel."
762+#~ "Lakait ho piz da riklañ adalek ar bord uhelañ da lakaat ar merkerioù war wel."
763763
764764#~ msgid "Swipe up again to close the settings screen"
765765#~ msgstr ""
766−#~ "Lakait ho piz da riklañ war-du ar bord uhelañ da serriñ skramm an "
767−#~ "arventennoù"
766+#~ "Lakait ho piz da riklañ war-du ar bord uhelañ da serriñ skramm an arventennoù"
768767
769768#~ msgid "Try swiping from the right edge to unlock the phone"
770769#~ msgstr ""
@@ -772,8 +771,8 @@ msgstr "%1 〉"
772771
773772#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
774773#~ msgstr ""
775−#~ "Lakait ho piz da riklañ adalek ar bord kleiz da ziskouez al lañser "
776−#~ "arloadoù prim."
774+#~ "Lakait ho piz da riklañ adalek ar bord kleiz da ziskouez al lañser arloadoù "
775+#~ "prim."
777776
778777#~ msgid "Well done"
779778#~ msgstr "Gourc'hemennoù !"
@@ -819,6 +818,3 @@ msgstr "%1 〉"
819818
820819#~ msgid "Please re-enter"
821820#~ 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 ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20+"X-Generator: Launchpad (build 17746)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:112
2323msgid "Password: "
po/ca.po+6−11
@@ -6,18 +6,17 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-04 09:48+0000\n"
1212"Last-Translator: David Planella <david.planella@ubuntu.com>\n"
1313"Language-Team: Catalan <ca@li.org>\n"
14−"Language: ca\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -756,8 +755,7 @@ msgstr "%1 〉"
756755
757756#~ msgid "Try swiping from the top edge to access the indicators"
758757#~ msgstr ""
759−#~ "Proveu de lliscar el dit des de la vora superior per accedir als "
760−#~ "indicadors"
758+#~ "Proveu de lliscar el dit des de la vora superior per accedir als indicadors"
761759
762760#~ msgid "Close"
763761#~ msgstr "Tanca"
@@ -769,8 +767,8 @@ msgstr "%1 〉"
769767
770768#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
771769#~ msgstr ""
772−#~ "Llisqueu el dit des de la vora esquerra per mostrar el llançador i "
773−#~ "accedir ràpidament a les aplicacions"
770+#~ "Llisqueu el dit des de la vora esquerra per mostrar el llançador i accedir "
771+#~ "ràpidament a les aplicacions"
774772
775773#~ msgid "Skip intro"
776774#~ msgstr "Omet la introducció"
@@ -824,6 +822,3 @@ msgstr "%1 〉"
824822
825823#~ msgid "Manage Scopes"
826824#~ 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 ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/ce.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/ckb.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/cs.po+10−11
@@ -6,18 +6,18 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-07 10:44+0000\n"
1212"Last-Translator: Vojtěch Daněk <vdanek@outlook.com>\n"
1313"Language-Team: Czech <cs@li.org>\n"
14−"Language: cs\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"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"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
20+"Language: cs\n"
2121
2222#: plugins/LightDM/Greeter.cpp:112
2323msgid "Password: "
@@ -122,11 +122,13 @@ msgstr "Zařízení uzamčeno"
122122
123123#: qml/Components/DelayedLockscreen.qml:64
124124msgid "You have been locked out due to too many failed passphrase attempts."
125−msgstr "Zařízení bylo uzamčeno z důvodu mnoha neúspěšných pokusů o přihlášení."
125+msgstr ""
126+"Zařízení bylo uzamčeno z důvodu mnoha neúspěšných pokusů o přihlášení."
126127
127128#: qml/Components/DelayedLockscreen.qml:65
128129msgid "You have been locked out due to too many failed passcode attempts."
129−msgstr "Zařízení bylo uzamčeno z důvodu mnoha neúspěšných pokusů o přihlášení."
130+msgstr ""
131+"Zařízení bylo uzamčeno z důvodu mnoha neúspěšných pokusů o přihlášení."
130132
131133#: qml/Components/DelayedLockscreen.qml:74
132134#, qt-format
@@ -689,8 +691,8 @@ msgid ""
689691"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
690692"Privacy</b>"
691693msgstr ""
692−"To může být vypnuto v <b>Nastavení systému</b> v <b>Zabezpečení a soukromí</"
693−"b>"
694+"To může být vypnuto v <b>Nastavení systému</b> v <b>Zabezpečení a "
695+"soukromí</b>"
694696
695697#: qml/Wizard/Pages/80-finished.qml:24
696698msgid "All done"
@@ -770,6 +772,3 @@ msgstr "%1 〉"
770772
771773#~ msgid "Please re-enter"
772774#~ 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 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-31 13:21+0000\n"
1212"Last-Translator: Owen Llywelyn <owen.llywelyn@gmail.com>\n"
1313"Language-Team: Welsh <cy@li.org>\n"
14−"Language: cy\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==2 ? 1 : (n != 8 && n != 11) ? "
1918"2 : 3;\n"
20−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
21−"X-Generator: Launchpad (build 17737)\n"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20+"X-Generator: Launchpad (build 17746)\n"
2221
2322#: plugins/LightDM/Greeter.cpp:112
2423msgid "Password: "
@@ -668,8 +667,8 @@ msgid ""
668667"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
669668"conditions</a>."
670669msgstr ""
671−"Drwy ddewis yr opsiwn yma rydych yn cytuno i <a href='#'>dermau ac amodau</"
672−"a> Nokia HERE."
670+"Drwy ddewis yr opsiwn yma rydych yn cytuno i <a href='#'>dermau ac "
671+"amodau</a> Nokia HERE."
673672
674673#: qml/Wizard/Pages/50-location.qml:112
675674msgid "Not at all"
@@ -726,6 +725,3 @@ msgstr "〈 %1"
726725#, qt-format
727726msgid "%1 〉"
728727msgstr "%1 〉"
729−
730−#~ msgid "Click here to finish."
731−#~ msgstr "Cliciwch yma i orffen."
po/da.po+6−11
@@ -7,18 +7,17 @@
77msgid ""
88msgstr ""
99"Project-Id-Version: unity8\n"
10−"Report-Msgid-Bugs-To: \n"
10+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1111"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1212"PO-Revision-Date: 2015-07-06 12:05+0000\n"
1313"Last-Translator: Folmer Fredslund <Unknown>\n"
1414"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
15−"Language: da\n"
1615"MIME-Version: 1.0\n"
1716"Content-Type: text/plain; charset=UTF-8\n"
1817"Content-Transfer-Encoding: 8bit\n"
1918"Plural-Forms: nplurals=2; plural=n != 1;\n"
20−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
21−"X-Generator: Launchpad (build 17737)\n"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20+"X-Generator: Launchpad (build 17746)\n"
2221
2322#: plugins/LightDM/Greeter.cpp:112
2423msgid "Password: "
@@ -757,8 +756,7 @@ msgstr "%1 〉"
757756#~ msgstr "Stryg op igen for at låse indstillingsskærmen"
758757
759758#~ 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"
762760
763761#~ msgid "Well done"
764762#~ msgstr "Godt gjort"
@@ -776,11 +774,8 @@ msgstr "%1 〉"
776774#~ "You have now mastered the edge gestures and can start using the "
777775#~ "phone<br><br>Tap on the screen to start"
778776#~ msgstr ""
779−#~ "Du mestrer nu kantbevægelserne og kan begynde at bruge "
780−#~ "telefonen<br><br>Tryk på skærmen for at starte"
777+#~ "Du mestrer nu kantbevægelserne og kan begynde at bruge telefonen<br><br>Tryk "
778+#~ "på skærmen for at starte"
781779
782780#~ msgid "Please re-enter"
783781#~ 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 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-24 18:03+0000\n"
1212"Last-Translator: Torsten Franz <Unknown>\n"
1313"Language-Team: German <de@li.org>\n"
14−"Language: de\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -476,7 +475,8 @@ msgstr "Roaming"
476475
477476#: qml/Tutorial/TutorialBottomFinish.qml:24
478477msgid "This action does different things for different apps"
479−msgstr "Diese Aktion bewirkt verschiedene Dinge in verschiedenen Anwendungen."
478+msgstr ""
479+"Diese Aktion bewirkt verschiedene Dinge in verschiedenen Anwendungen."
480480
481481#: qml/Tutorial/TutorialBottomFinish.qml:25
482482msgid "Tap here to finish."
@@ -817,6 +817,3 @@ msgstr "%1 〉"
817817
818818#~ msgid "Please re-enter"
819819#~ 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 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-05 21:52+0000\n"
1212"Last-Translator: Simos Xenitellis <Unknown>\n"
1313"Language-Team: Greek <el@li.org>\n"
14−"Language: el\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -478,7 +477,8 @@ msgstr "Περιαγωγή"
478477
479478#: qml/Tutorial/TutorialBottomFinish.qml:24
480479msgid "This action does different things for different apps"
481−msgstr "Αυτή η ενέργεια κάνει διαφορετικά πράγματα για διαφορετικές εφαρμογές"
480+msgstr ""
481+"Αυτή η ενέργεια κάνει διαφορετικά πράγματα για διαφορετικές εφαρμογές"
482482
483483#: qml/Tutorial/TutorialBottomFinish.qml:25
484484msgid "Tap here to finish."
@@ -819,6 +819,3 @@ msgstr "%1 〉"
819819
820820#~ msgid "Power"
821821#~ msgstr "Ενέργεια"
822−
823−#~ msgid "Click here to finish."
824−#~ msgstr "Πατήστε εδώ για τέλος."
po/en_AU.po+3−7
@@ -6,18 +6,17 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-12 07:17+0000\n"
1212"Last-Translator: Jared Norris <jarednorris@ubuntu.com>\n"
1313"Language-Team: English (Australia) <en_AU@li.org>\n"
14−"Language: \n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -808,6 +807,3 @@ msgstr "%1 〉"
808807
809808#~ msgid "Please re-enter"
810809#~ 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 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-04-23 12:59+0000\n"
1212"Last-Translator: Andi Chandler <Unknown>\n"
1313"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
14−"Language: \n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -30,7 +29,7 @@ msgstr "Pin shortcut"
3029
3130#: plugins/Unity/Launcher/launcheritem.cpp:52
3231msgid "Quit"
33−msgstr ""
32+msgstr "Quit"
3433
3534#: plugins/Unity/Launcher/launcheritem.cpp:106
3635msgid "Unpin shortcut"
@@ -460,7 +459,7 @@ msgstr "Reply"
460459
461460#: qml/Panel/Indicators/MessageMenuItemFactory.qml:204
462461msgid "Call back"
463−msgstr ""
462+msgstr "Call back"
464463
465464#: qml/Panel/Indicators/ModemInfoItem.qml:105
466465msgid "Unlock SIM"
@@ -808,6 +807,3 @@ msgstr "%1 〉"
808807
809808#~ msgid "Please re-enter"
810809#~ 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 ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/es.po+5−9
@@ -6,18 +6,17 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-04 06:08+0000\n"
1212"Last-Translator: Paco Molinero <paco@byasl.com>\n"
1313"Language-Team: Spanish <es@li.org>\n"
14−"Language: es\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -774,8 +773,8 @@ msgstr "%1 〉"
774773#~ "You have now mastered the edge gestures and can start using the "
775774#~ "phone<br><br>Tap on the screen to start"
776775#~ msgstr ""
777−#~ "Ahora domina los gestos de los bordes y puede usar el "
778−#~ "teléfono<br><br>Toque la pantalla para comenzar"
776+#~ "Ahora domina los gestos de los bordes y puede usar el teléfono<br><br>Toque "
777+#~ "la pantalla para comenzar"
779778
780779#~ msgid "Power off"
781780#~ msgstr "Apagar"
@@ -815,6 +814,3 @@ msgstr "%1 〉"
815814
816815#~ msgid "Manage Scopes"
817816#~ 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 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-13 23:29+0000\n"
1212"Last-Translator: Ibai Oihanguren Sala <Unknown>\n"
1313"Language-Team: Basque <eu@li.org>\n"
14−"Language: eu\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -803,8 +802,8 @@ msgstr "%1 〉"
803802
804803#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
805804#~ msgstr ""
806−#~ "Pasatu hatza ezkerretik abiarazlea erakutsi eta aplikazioak berehala "
807−#~ "eskura izateko"
805+#~ "Pasatu hatza ezkerretik abiarazlea erakutsi eta aplikazioak berehala eskura "
806+#~ "izateko"
808807
809808#~ msgid "Confirm"
810809#~ msgstr "Berretsi"
@@ -814,6 +813,3 @@ msgstr "%1 〉"
814813
815814#~ msgid "Please re-enter"
816815#~ msgstr "Errepikatu"
817−
818−#~ msgid "Click here to finish."
819−#~ msgstr "Egin klik hemen amaitzeko."
po/fa.po+13−13
@@ -6,18 +6,17 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-11 15:43+0000\n"
1212"Last-Translator: Danial Behzadi <dani.behzi@gmail.com>\n"
1313"Language-Team: Persian <fa@li.org>\n"
14−"Language: fa\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=1; plural=0;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -122,7 +121,8 @@ msgstr "دستگاه قفل شد"
122121
123122#: qml/Components/DelayedLockscreen.qml:64
124123msgid "You have been locked out due to too many failed passphrase attempts."
125−msgstr "شما به دلیل تلاش‌های بسیار زیاد شکست خورده برای عبارت‌عبور قفل شده‌اید."
124+msgstr ""
125+"شما به دلیل تلاش‌های بسیار زیاد شکست خورده برای عبارت‌عبور قفل شده‌اید."
126126
127127#: qml/Components/DelayedLockscreen.qml:65
128128msgid "You have been locked out due to too many failed passcode attempts."
@@ -574,7 +574,8 @@ msgstr "سیم‌کارتی افزوده و دستگاهتان را شروع م
574574
575575#: qml/Wizard/Pages/20-sim.qml:59
576576msgid "Without it, you won’t be able to make calls or use text messaging."
577−msgstr "بدون آن، نخواهید توانست تماس گرفته با از پیام‌رسانی متنی استفاده کنید."
577+msgstr ""
578+"بدون آن، نخواهید توانست تماس گرفته با از پیام‌رسانی متنی استفاده کنید."
578579
579580#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
580581msgid "Skip"
@@ -644,7 +645,8 @@ msgstr "فقط با استفاده از جی‌پی‌اس (دقّت کم‌تر
644645
645646#: qml/Wizard/Pages/50-location.qml:86
646647msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
647−msgstr "با استفاده از جی‌پی‌اس، بی‌سیم ناشناس و اطّلاعات شبکه‌ی سلّولی (پیشنهاد شده)"
648+msgstr ""
649+"با استفاده از جی‌پی‌اس، بی‌سیم ناشناس و اطّلاعات شبکه‌ی سلّولی (پیشنهاد شده)"
648650
649651#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
650652#: qml/Wizard/Pages/50-location.qml:103
@@ -680,7 +682,8 @@ msgid ""
680682"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
681683"Privacy</b>"
682684msgstr ""
683−"این می‌تواند در <b>تنظیمات سامانه</b> ذیل <b>امنیت و محرمانگی</b> غیرفعَال شود"
685+"این می‌تواند در <b>تنظیمات سامانه</b> ذیل <b>امنیت و محرمانگی</b> غیرفعَال "
686+"شود"
684687
685688#: qml/Wizard/Pages/80-finished.qml:24
686689msgid "All done"
@@ -747,8 +750,8 @@ msgstr "%1 〉"
747750#~ "You have now mastered the edge gestures and can start using the "
748751#~ "phone<br><br>Tap on the screen to start"
749752#~ msgstr ""
750−#~ "هم اکنون در استفاده از ژست های حرکتی مهارت لازم را دارید و می‌توانید "
751−#~ "استفاده از تلفن را آغاز کنید<br><br>برای شروع صفحه را لمس کنید"
753+#~ "هم اکنون در استفاده از ژست های حرکتی مهارت لازم را دارید و می‌توانید استفاده "
754+#~ "از تلفن را آغاز کنید<br><br>برای شروع صفحه را لمس کنید"
752755
753756#~ msgid "Confirm"
754757#~ msgstr "تأیید"
@@ -803,6 +806,3 @@ msgstr "%1 〉"
803806
804807#~ msgid "Manage Scopes"
805808#~ msgstr "مدیریت حوزه‌ها"
806−
807−#~ msgid "Click here to finish."
808−#~ msgstr "برای پایان اینجا کلیک کنید."
po/fi.po+5−8
@@ -6,18 +6,17 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-04 18:32+0000\n"
1212"Last-Translator: Jiri Grönroos <Unknown>\n"
1313"Language-Team: Finnish <fi@li.org>\n"
14−"Language: fi\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -127,7 +126,8 @@ msgstr ""
127126
128127#: qml/Components/DelayedLockscreen.qml:65
129128msgid "You have been locked out due to too many failed passcode attempts."
130−msgstr "Laite on lukittu liian monen virheellisen suojakoodiyrityksen jälkeen."
129+msgstr ""
130+"Laite on lukittu liian monen virheellisen suojakoodiyrityksen jälkeen."
131131
132132#: qml/Components/DelayedLockscreen.qml:74
133133#, qt-format
@@ -810,6 +810,3 @@ msgstr "%1 〉"
810810
811811#~ msgid "Please re-enter"
812812#~ 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 ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/fr.po+5−9
@@ -6,18 +6,17 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-27 11:47+0000\n"
1212"Last-Translator: Anne <anneonyme017@gmail.com>\n"
1313"Language-Team: French <fr@li.org>\n"
14−"Language: fr\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n > 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -786,8 +785,8 @@ msgstr "%1 〉"
786785
787786#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
788787#~ msgstr ""
789−#~ "Faites glisser votre doigt à partir du bord gauche pour afficher le "
790−#~ "lanceur d'applications."
788+#~ "Faites glisser votre doigt à partir du bord gauche pour afficher le lanceur "
789+#~ "d'applications."
791790
792791#~ msgid "Power off"
793792#~ msgstr "Éteindre"
@@ -827,6 +826,3 @@ msgstr "%1 〉"
827826
828827#~ msgid "Please re-enter"
829828#~ 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 ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"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"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/gd.po+8−12
@@ -6,19 +6,19 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-16 10:56+0000\n"
1212"Last-Translator: GunChleoc <Unknown>\n"
1313"Language-Team: Fòram na Gàidhlig\n"
14−"Language: gd\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
1918"(n > 2 && n < 20) ? 2 : 3;\n"
20−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
21−"X-Generator: Launchpad (build 17737)\n"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20+"X-Generator: Launchpad (build 17746)\n"
21+"Language: gd\n"
2222
2323#: plugins/LightDM/Greeter.cpp:112
2424msgid "Password: "
@@ -740,8 +740,8 @@ msgstr "%1 〉"
740740
741741#~ msgid "Try swiping from the right edge to unlock the phone"
742742#~ msgstr ""
743−#~ "Feuch is dèan grad-shlaighdeadh a-steach on oir dheas gus a' ghlas a "
744−#~ "thoirt far an fhòn"
743+#~ "Feuch is dèan grad-shlaighdeadh a-steach on oir dheas gus a' ghlas a thoirt "
744+#~ "far an fhòn"
745745
746746#~ msgid "Right edge"
747747#~ msgstr "An oir dheas"
@@ -793,9 +793,8 @@ msgstr "%1 〉"
793793#~ "You have now mastered the edge gestures and can start using the "
794794#~ "phone<br><br>Tap on the screen to start"
795795#~ msgstr ""
796−#~ "Fhuair thu air na gluasadan oire ceart a dhèanamh a-nis agus is urrainn "
797−#~ "dhut am fòn a chleachdadh<br><br>Thoir gnogag air an sgrìn airson "
798−#~ "tòiseachadh"
796+#~ "Fhuair thu air na gluasadan oire ceart a dhèanamh a-nis agus is urrainn dhut "
797+#~ "am fòn a chleachdadh<br><br>Thoir gnogag air an sgrìn airson tòiseachadh"
799798
800799#~ msgid "All"
801800#~ msgstr "Na h-uile"
@@ -833,8 +832,5 @@ msgstr "%1 〉"
833832#~ msgid "Manage Scopes"
834833#~ msgstr "Stiùirich na sgòpaichean"
835834
836−#~ msgid "Click here to finish."
837−#~ msgstr "Briog an-seo gus crìoch a chur air."
838−
839835#~ msgid "Please re-enter"
840836#~ msgstr "Cuir a-steach i a-rithist"
po/gl.po+5−8
@@ -6,18 +6,17 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-08-01 03:25+0000\n"
1212"Last-Translator: Marcos Lans <Unknown>\n"
1313"Language-Team: Galician <gl@li.org>\n"
14−"Language: gl\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -576,7 +575,8 @@ msgstr "Engada unha tarxeta SIM e reinicie o dispositivo"
576575
577576#: qml/Wizard/Pages/20-sim.qml:59
578577msgid "Without it, you won’t be able to make calls or use text messaging."
579−msgstr "Sen ela, non poderá realizar chamadas nin usar a mensaxería de texto."
578+msgstr ""
579+"Sen ela, non poderá realizar chamadas nin usar a mensaxería de texto."
580580
581581#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
582582msgid "Skip"
@@ -808,6 +808,3 @@ msgstr "%1 〉"
808808
809809#~ msgid "Please re-enter"
810810#~ 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 ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"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"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/he.po+5−9
@@ -6,18 +6,17 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-12 08:47+0000\n"
1212"Last-Translator: Yaron <sh.yaron@gmail.com>\n"
1313"Language-Team: Hebrew <he@li.org>\n"
14−"Language: he\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -755,8 +754,8 @@ msgstr ""
755754#~ "You have now mastered the edge gestures and can start using the "
756755#~ "phone<br><br>Tap on the screen to start"
757756#~ msgstr ""
758−#~ "ברגעים אלו סיימת את התמחותך בשימוש במחוות קצה והטלפון פתוח "
759−#~ "לשימושך<br><br>נא לגעת במסך כדי להתחיל"
757+#~ "ברגעים אלו סיימת את התמחותך בשימוש במחוות קצה והטלפון פתוח לשימושך<br><br>נא "
758+#~ "לגעת במסך כדי להתחיל"
760759
761760#~ msgid "Power off"
762761#~ msgstr "כיבוי"
@@ -772,6 +771,3 @@ msgstr ""
772771
773772#~ msgid "Favorites"
774773#~ msgstr "מועדפים"
775−
776−#~ msgid "Click here to finish."
777−#~ msgstr "יש ללחוץ כאן כדי לסיים."
po/hi.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/hr.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20+"X-Generator: Launchpad (build 17746)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:112
2323msgid "Password: "
po/hu.po+14−18
@@ -6,18 +6,17 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"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"
1212"Last-Translator: Richard Somlói <ricsipontaz@gmail.com>\n"
1313"Language-Team: Hungarian <hu@li.org>\n"
14−"Language: hu\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-22 06:01+0000\n"
19+"X-Generator: Launchpad (build 17749)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -74,7 +73,7 @@ msgstr "%a %p. %I.%M"
7473#. en_GB example: "%a %b %d\u2003%l:%M %p" --> "Fri 31 Oct 1:00 PM"
7574#: plugins/Utils/relativetimeformatter.cpp:190
7675msgid "%a %d %b %l:%M %p"
77−msgstr "%d. %b. %a, %p. %I.%M"
76+msgstr "%b. %d., %a %p. %I.%M"
7877
7978#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
8079#. This format string is used for showing, on a 24-hour clock, times that happen yesterday.
@@ -114,11 +113,11 @@ msgstr "%a %H.%M"
114113#. en_GB example: "%a %b %d\u2003%H:%M" --> "Fri 31 Oct 13:00"
115114#: plugins/Utils/relativetimeformatter.cpp:234
116115msgid "%a %d %b %H:%M"
117−msgstr "%d. %b., %a %H.%M"
116+msgstr "%b. %d., %a %H.%M"
118117
119118#: qml/Components/DelayedLockscreen.qml:49
120119msgid "Device Locked"
121−msgstr "Eszköz lezárva"
120+msgstr "Az eszköz zárolva"
122121
123122#: qml/Components/DelayedLockscreen.qml:64
124123msgid "You have been locked out due to too many failed passphrase attempts."
@@ -554,7 +553,7 @@ msgstr "Folytatás"
554553
555554#: qml/Wizard/Pages/passwd-set.qml:61
556555msgid "Choose your passcode"
557−msgstr "Jelkód kiválasztása"
556+msgstr "Jelkód megadása"
558557
559558#: qml/Wizard/Pages/passwd-set.qml:68
560559msgid "Passphrase must be 4 characters long"
@@ -562,11 +561,11 @@ msgstr "A jelmondat legalább 4 karakter hosszú legyen"
562561
563562#: qml/Wizard/Pages/10-welcome.qml:27
564563msgid "Hi!"
565−msgstr "Üdv!"
564+msgstr "Üdvözöljük!"
566565
567566#: qml/Wizard/Pages/10-welcome.qml:44
568567msgid "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."
570569
571570#: qml/Wizard/Pages/10-welcome.qml:52
572571msgid "Let’s get started."
@@ -574,12 +573,12 @@ msgstr "Kezdjünk is bele."
574573
575574#: qml/Wizard/Pages/20-sim.qml:25
576575msgid "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"
578577
579578#: qml/Wizard/Pages/20-sim.qml:59
580579msgid "Without it, you won’t be able to make calls or use text messaging."
581580msgstr ""
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 "
583582"üzeneteket."
584583
585584#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
@@ -768,8 +767,8 @@ msgstr "%1 〉"
768767#~ "You have now mastered the edge gestures and can start using the "
769768#~ "phone<br><br>Tap on the screen to start"
770769#~ msgstr ""
771−#~ "Elsajátította a gesztusokat, és megkezdheti a telefon használatát."
772−#~ "<br><br>Koppintson a képernyőre a kezdéshez."
770+#~ "Elsajátította a gesztusokat, és megkezdheti a telefon "
771+#~ "használatát.<br><br>Koppintson a képernyőre a kezdéshez."
773772
774773#~ msgid "Try swiping from the top edge to access the indicators"
775774#~ msgstr "Az állapotmenük eléréséhez csúsztassa ujját a felső szélről"
@@ -812,6 +811,3 @@ msgstr "%1 〉"
812811
813812#~ msgid "Please re-enter"
814813#~ 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 ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/ia.po+5−9
@@ -6,18 +6,17 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-08-25 19:31+0000\n"
1212"Last-Translator: karm <melo@carmu.com>\n"
1313"Language-Team: Interlingua <ia@li.org>\n"
14−"Language: ia\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -671,8 +670,8 @@ msgstr "No, del toto"
671670#: qml/Wizard/Pages/50-location.qml:124
672671msgid "You can change your mind later in <b>System Settings</b>."
673672msgstr ""
674−"Tu pote cambiar tu desiderata plus tarde in <b>Configurationes del systema</"
675−"b>."
673+"Tu pote cambiar tu desiderata plus tarde in <b>Configurationes del "
674+"systema</b>."
676675
677676#: qml/Wizard/Pages/60-reporting.qml:24
678677msgid "Improving your experience"
@@ -805,6 +804,3 @@ msgstr "%1 〉"
805804#~ msgstr ""
806805#~ "Tu es ora maestrate le gestos del bordo e pote initiar usar le "
807806#~ "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 ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/is.po+2−2
@@ -17,8 +17,8 @@ msgstr ""
1717"Content-Type: text/plain; charset=UTF-8\n"
1818"Content-Transfer-Encoding: 8bit\n"
1919"Plural-Forms: nplurals=2; plural=n != 1;\n"
20−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
21−"X-Generator: Launchpad (build 17737)\n"
20+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
21+"X-Generator: Launchpad (build 17746)\n"
2222"Language: is\n"
2323
2424#: plugins/LightDM/Greeter.cpp:112
po/it.po+6−10
@@ -6,18 +6,17 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"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"
1212"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>\n"
1313"Language-Team: Italian <it@li.org>\n"
14−"Language: it\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -30,7 +29,7 @@ msgstr "Blocca scorciatoia"
3029
3130#: plugins/Unity/Launcher/launcheritem.cpp:52
3231msgid "Quit"
33−msgstr ""
32+msgstr "Esci"
3433
3534#: plugins/Unity/Launcher/launcheritem.cpp:106
3635msgid "Unpin shortcut"
@@ -464,7 +463,7 @@ msgstr "Rispondi"
464463
465464#: qml/Panel/Indicators/MessageMenuItemFactory.qml:204
466465msgid "Call back"
467−msgstr ""
466+msgstr "Richiama"
468467
469468#: qml/Panel/Indicators/ModemInfoItem.qml:105
470469msgid "Unlock SIM"
@@ -817,9 +816,6 @@ msgstr "%1 〉"
817816#~ msgid "Please re-enter"
818817#~ msgstr "Inserire nuovamente"
819818
820−#~ msgid "Click here to finish."
821−#~ msgstr "Fare clic qui per terminare."
822−
823819#~ msgid "Swipe up again to close the settings screen"
824820#~ msgstr ""
825821#~ "Far scorrere nuovamente verso l'alto per chiudere la schermata delle "
po/ja.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/km.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/kn.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/ko.po+9−23
@@ -6,18 +6,17 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2014-08-19 13:02+0000\n"
1212"Last-Translator: MinSik CHO <Unknown>\n"
1313"Language-Team: Korean <ko@li.org>\n"
14−"Language: ko\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=1; plural=0;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -336,17 +335,13 @@ msgstr "마지막 시도입니다."
336335msgid ""
337336"If passphrase is entered incorrectly, your phone will conduct a factory "
338337"reset and all personal data will be deleted."
339−msgstr ""
340−"이번에도 올바르지 않은 암호문을 입력하면 휴대 전화를 공장 초기화하여 모든 개"
341−"인 정보를 삭제합니다."
338+msgstr "이번에도 올바르지 않은 암호문을 입력하면 휴대 전화를 공장 초기화하여 모든 개인 정보를 삭제합니다."
342339
343340#: qml/Greeter/NarrowView.qml:59
344341msgid ""
345342"If passcode is entered incorrectly, your phone will conduct a factory reset "
346343"and all personal data will be deleted."
347−msgstr ""
348−"이번에도 올바르지 않은 패스코드를 입력하면 휴대 전화를 공장 초기화하여 모든 "
349−"개인 정보를 삭제합니다."
344+msgstr "이번에도 올바르지 않은 패스코드를 입력하면 휴대 전화를 공장 초기화하여 모든 개인 정보를 삭제합니다."
350345
351346#: qml/Greeter/NarrowView.qml:116
352347#, qt-format
@@ -649,8 +644,7 @@ msgstr "GPS와 익명 와이파이 통신사 네트워크를 사용(추천)"
649644msgid ""
650645"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
651646"conditions</a>."
652−msgstr ""
653−"이 옵션을 선택하면 자동으로 <a href='%1'>노키아 HERE 사용 조건에 동의합니다."
647+msgstr "이 옵션을 선택하면 자동으로 <a href='%1'>노키아 HERE 사용 조건에 동의합니다."
654648
655649#: qml/Wizard/Pages/50-location.qml:112
656650msgid "Not at all"
@@ -668,17 +662,13 @@ msgstr "사용자 경험 개선"
668662msgid ""
669663"Your phone is set up to automatically report errors to Canonical and its "
670664"partners, the makers of the operating system."
671−msgstr ""
672−"사용자의 전화를 자동으로 오류 보고를 운영 체제를 만든 캐노니컬 사와 협력사로 "
673−"보내도록 설정했습니다."
665+msgstr "사용자의 전화를 자동으로 오류 보고를 운영 체제를 만든 캐노니컬 사와 협력사로 보내도록 설정했습니다."
674666
675667#: qml/Wizard/Pages/60-reporting.qml:43
676668msgid ""
677669"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
678670"Privacy</b>"
679−msgstr ""
680−"이 서비스는 <b>보안 &amp; 사생활 보호</b>에서 언제든 사용하지 않도록 설정할 "
681−"수 있습니다."
671+msgstr "이 서비스는 <b>보안 &amp; 사생활 보호</b>에서 언제든 사용하지 않도록 설정할 수 있습니다."
682672
683673#: qml/Wizard/Pages/80-finished.qml:24
684674msgid "All done"
@@ -775,8 +765,7 @@ msgstr "%1 〉"
775765#~ "You have now mastered the edge gestures and can start using the "
776766#~ "phone<br><br>Tap on the screen to start"
777767#~ msgstr ""
778−#~ "여러분은 가장자리에서 끌어오기 제스쳐를 완벽히 익히셨고 휴대 전화를 사용"
779−#~ "할 수 있습니다. <br><br> 스크린을 터치해서 시작하세요."
768+#~ "여러분은 가장자리에서 끌어오기 제스쳐를 완벽히 익히셨고 휴대 전화를 사용할 수 있습니다. <br><br> 스크린을 터치해서 시작하세요."
780769
781770#~ msgid "Loading. Please Wait..."
782771#~ msgstr "불러오는 중 입니다. 짐시 기다려주십시오..."
@@ -801,6 +790,3 @@ msgstr "%1 〉"
801790
802791#~ msgid "Please re-enter"
803792#~ msgstr "다시 입력해주십시오."
804−
805−#~ msgid "Click here to finish."
806−#~ msgstr "끝내려면 눌러주십시오."
po/ku.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/ky.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/lo.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/lt.po+2−2
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"(n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20+"X-Generator: Launchpad (build 17746)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:112
2323msgid "Password: "
po/lv.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"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"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/ml.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/mr.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/ms.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/my.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/nb.po+3−7
@@ -6,18 +6,17 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-05 19:44+0000\n"
1212"Last-Translator: Mathias Bynke <Unknown>\n"
1313"Language-Team: Norwegian Bokmal <nb@li.org>\n"
14−"Language: nb\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -810,6 +809,3 @@ msgstr "%1 〉"
810809
811810#~ msgid "Please re-enter"
812811#~ 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 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-07 07:14+0000\n"
1212"Last-Translator: Hannie Dumoleyn <Unknown>\n"
1313"Language-Team: Dutch <nl@li.org>\n"
14−"Language: nl\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -759,8 +758,7 @@ msgstr "%1 〉"
759758#~ msgstr "Linkerrand"
760759
761760#~ 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"
764762
765763#~ msgid "Right edge"
766764#~ msgstr "Rechterrand"
@@ -769,8 +767,8 @@ msgstr "%1 〉"
769767#~ "You have now mastered the edge gestures and can start using the "
770768#~ "phone<br><br>Tap on the screen to start"
771769#~ msgstr ""
772−#~ "Nu u de bewegingen vanuit de randen onder de knie heeft, kunt u beginnen "
773−#~ "met het gebruiken van de telefoon<br><br>Tik op het scherm om te beginnen"
770+#~ "Nu u de bewegingen vanuit de randen onder de knie heeft, kunt u beginnen met "
771+#~ "het gebruiken van de telefoon<br><br>Tik op het scherm om te beginnen"
774772
775773#~ msgid "Try swiping from the top edge to access the indicators"
776774#~ msgstr "Veeg vanuit de bovenrand om de indicatoren te bekijken"
@@ -816,6 +814,3 @@ msgstr "%1 〉"
816814
817815#~ msgid "Please re-enter"
818816#~ 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 ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/oc.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/or.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n!=1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/pa.po+15−16
@@ -6,18 +6,17 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-04-24 04:29+0000\n"
1212"Last-Translator: Gursharnjit_Singh <ubuntuser13@gmail.com>\n"
1313"Language-Team: Punjabi <pa@li.org>\n"
14−"Language: pa\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -340,16 +339,16 @@ msgid ""
340339"If passphrase is entered incorrectly, your phone will conduct a factory "
341340"reset and all personal data will be deleted."
342341msgstr ""
343−"ਜੇਕਰ ਗਲਤ ਵਾਕ ਦਰਜ ਹੋਇਆ, ਤੁਹਾਡਾ ਫ਼ੋਨ ਇੱਕ ਫ਼ੋਨ ਇੱਕ ਫ਼ੈਕਟਰੀ ਰੀਸੈੱਟ ਚਾਲੂ ਕਰੇਗਾ ਅਤੇ ਸਾਰਾ ਨਿੱਜੀ ਡਾਟਾ "
344−"ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।"
342+"ਜੇਕਰ ਗਲਤ ਵਾਕ ਦਰਜ ਹੋਇਆ, ਤੁਹਾਡਾ ਫ਼ੋਨ ਇੱਕ ਫ਼ੋਨ ਇੱਕ ਫ਼ੈਕਟਰੀ ਰੀਸੈੱਟ ਚਾਲੂ ਕਰੇਗਾ ਅਤੇ "
343+"ਸਾਰਾ ਨਿੱਜੀ ਡਾਟਾ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।"
345344
346345#: qml/Greeter/NarrowView.qml:59
347346msgid ""
348347"If passcode is entered incorrectly, your phone will conduct a factory reset "
349348"and all personal data will be deleted."
350349msgstr ""
351−"ਜੇਕਰ ਗਲਤ ਪਾਸਕੋਡ ਦਰਜ ਹੋਇਆ, ਤੁਹਾਡਾ ਫ਼ੋਨ ਇੱਕ ਫ਼ੋਨ ਇੱਕ ਫ਼ੈਕਟਰੀ ਰੀਸੈੱਟ ਚਾਲੂ ਕਰੇਗਾ ਅਤੇ ਸਾਰਾ ਨਿੱਜੀ "
352−"ਡਾਟਾ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।"
350+"ਜੇਕਰ ਗਲਤ ਪਾਸਕੋਡ ਦਰਜ ਹੋਇਆ, ਤੁਹਾਡਾ ਫ਼ੋਨ ਇੱਕ ਫ਼ੋਨ ਇੱਕ ਫ਼ੈਕਟਰੀ ਰੀਸੈੱਟ ਚਾਲੂ ਕਰੇਗਾ "
351+"ਅਤੇ ਸਾਰਾ ਨਿੱਜੀ ਡਾਟਾ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।"
353352
354353#: qml/Greeter/NarrowView.qml:116
355354#, qt-format
@@ -590,7 +589,8 @@ msgstr "ਲਾਕ ਸੁਰੱਖਿਆ"
590589
591590#: qml/Wizard/Pages/30-passwd-type.qml:74
592591msgid "Please select how you’d like to unlock your phone."
593−msgstr "ਕਿਰਪਾ ਕਰਕੇ ਚੁਣੋ ਤੁਸੀਂ ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਕਿਸ ਤਰ੍ਹਾਂ ਅਣ-ਲਾਕ ਕਰਨਾ ਪਸੰਦ ਕਰੋਗੇ।"
592+msgstr ""
593+"ਕਿਰਪਾ ਕਰਕੇ ਚੁਣੋ ਤੁਸੀਂ ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਕਿਸ ਤਰ੍ਹਾਂ ਅਣ-ਲਾਕ ਕਰਨਾ ਪਸੰਦ ਕਰੋਗੇ।"
594594
595595#: qml/Wizard/Pages/30-passwd-type.qml:97
596596msgctxt "Label: Type of security method"
@@ -656,7 +656,8 @@ msgid ""
656656"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
657657"conditions</a>."
658658msgstr ""
659−"ਇਸ ਵਿਕਲਪ ਨੂੰ ਚੁਣਨ ਦੁਆਰਾ, ਤੁਸੀਂ ਨੋਕੀਆ HERE <a href='#'>ਨਿਯਮ ਅਤੇ ਸ਼ਰਤਾਂ</a>ਨੂੰ ਪ੍ਰਵਾਨ ਕਰਦੇ ਹੋ।"
659+"ਇਸ ਵਿਕਲਪ ਨੂੰ ਚੁਣਨ ਦੁਆਰਾ, ਤੁਸੀਂ ਨੋਕੀਆ HERE <a href='#'>ਨਿਯਮ ਅਤੇ ਸ਼ਰਤਾਂ</a>ਨੂੰ "
660+"ਪ੍ਰਵਾਨ ਕਰਦੇ ਹੋ।"
660661
661662#: qml/Wizard/Pages/50-location.qml:112
662663msgid "Not at all"
@@ -675,15 +676,16 @@ msgid ""
675676"Your phone is set up to automatically report errors to Canonical and its "
676677"partners, the makers of the operating system."
677678msgstr ""
678−"ਤੁਹਾਡੇ ਫ਼ੋਨ ਨੂੰ ਕੈਨੋਨੀਕਲ ਅਤੇ ਉਸਦੇ ਸਾਥੀਆਂ, ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਦੇ ਨਿਰਮਾਤਾਵਾਂ ਨੂੰ ਆਪਣੇ ਆਪ ਖਾਮੀ ਸੂਚਨਾਵਾਂ "
679−"ਭੇਜਣ ਲਈ ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਹੈ।"
679+"ਤੁਹਾਡੇ ਫ਼ੋਨ ਨੂੰ ਕੈਨੋਨੀਕਲ ਅਤੇ ਉਸਦੇ ਸਾਥੀਆਂ, ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਦੇ ਨਿਰਮਾਤਾਵਾਂ ਨੂੰ "
680+"ਆਪਣੇ ਆਪ ਖਾਮੀ ਸੂਚਨਾਵਾਂ ਭੇਜਣ ਲਈ ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਹੈ।"
680681
681682#: qml/Wizard/Pages/60-reporting.qml:43
682683msgid ""
683684"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
684685"Privacy</b>"
685686msgstr ""
686−"ਇਸ ਨੂੰ <b>ਸਿਸਟਮ ਸੈਟਿੰਗ</b> ਅਧੀਨ <b>ਸੁਰੱਖਿਆ &amp; ਪਰਦੇਦਾਰੀ</b>ਵਿੱਚ ਬੰਦ ਕੀਤਾ ਜਾ ਸਕਦਾ"
687+"ਇਸ ਨੂੰ <b>ਸਿਸਟਮ ਸੈਟਿੰਗ</b> ਅਧੀਨ <b>ਸੁਰੱਖਿਆ &amp; ਪਰਦੇਦਾਰੀ</b>ਵਿੱਚ ਬੰਦ ਕੀਤਾ "
688+"ਜਾ ਸਕਦਾ"
687689
688690#: qml/Wizard/Pages/80-finished.qml:24
689691msgid "All done"
@@ -751,6 +753,3 @@ msgstr "%1 〉"
751753
752754#~ msgid "Please re-enter"
753755#~ msgstr "ਕਿਰਪਾ ਕਰਕੇ ਮੁੜ-ਦਰਜ ਕਰੋ"
754−
755−#~ msgid "Click here to finish."
756−#~ msgstr "ਸਮਾਪਤੀ ਲਈ ਇੱਥੇ ਕਲਿੱਕ ਕਰੋ।"
po/pl.po+7−11
@@ -6,19 +6,18 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-12 09:46+0000\n"
1212"Last-Translator: Seweryn Opyd <Unknown>\n"
1313"Language-Team: Polish <pl@li.org>\n"
14−"Language: pl\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
1918"|| n%100>=20) ? 1 : 2;\n"
20−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
21−"X-Generator: Launchpad (build 17737)\n"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20+"X-Generator: Launchpad (build 17746)\n"
2221
2322#: plugins/LightDM/Greeter.cpp:112
2423msgid "Password: "
@@ -757,8 +756,8 @@ msgstr "%1 〉"
757756
758757#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
759758#~ msgstr ""
760−#~ "Przeciągnięcie od lewej krawędzi, uruchamia aktywator szybkiego dostępu "
761−#~ "do aplikacji"
759+#~ "Przeciągnięcie od lewej krawędzi, uruchamia aktywator szybkiego dostępu do "
760+#~ "aplikacji"
762761
763762#~ msgid "Well done"
764763#~ msgstr "Udało się!"
@@ -773,8 +772,8 @@ msgstr "%1 〉"
773772#~ "You have now mastered the edge gestures and can start using the "
774773#~ "phone<br><br>Tap on the screen to start"
775774#~ msgstr ""
776−#~ "Wydawanie poleceń krawędzi zostało opanowane. Urządzenie gotowe do pracy."
777−#~ "<br><br>Dotknij ekranu by rozpocząć"
775+#~ "Wydawanie poleceń krawędzi zostało opanowane. Urządzenie gotowe do "
776+#~ "pracy.<br><br>Dotknij ekranu by rozpocząć"
778777
779778#~ msgid "Log out"
780779#~ msgstr "Wyloguj"
@@ -802,6 +801,3 @@ msgstr "%1 〉"
802801
803802#~ msgid "Please re-enter"
804803#~ 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 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-29 10:01+0000\n"
1212"Last-Translator: Ivo Xavier <ivofernandes12@gmail.com>\n"
1313"Language-Team: Portuguese <pt@li.org>\n"
14−"Language: pt\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -802,19 +801,15 @@ msgstr "%1 〉"
802801#~ "You have now mastered the edge gestures and can start using the "
803802#~ "phone<br><br>Tap on the screen to start"
804803#~ msgstr ""
805−#~ "Já domina os gestos das margens, pode começar a usar o "
806−#~ "telefone<br><br>Toque no ecrã para começar"
804+#~ "Já domina os gestos das margens, pode começar a usar o telefone<br><br>Toque "
805+#~ "no ecrã para começar"
807806
808807#~ msgid "Store"
809808#~ msgstr "Store"
810809
811810#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
812811#~ msgstr ""
813−#~ "Deslize da margem esquerda para mostrar o lançador para acesso rápido às "
814−#~ "apps"
815−
816−#~ msgid "Click here to finish."
817−#~ msgstr "Clique aqui para finalizar."
812+#~ "Deslize da margem esquerda para mostrar o lançador para acesso rápido às apps"
818813
819814#~ msgid "Shut down"
820815#~ msgstr "Desligar"
po/pt_BR.po+3−7
@@ -6,18 +6,17 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-08-05 04:40+0000\n"
1212"Last-Translator: Julio Alexander Sieg <julio.sieg@gmail.com>\n"
1313"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
14−"Language: pt_BR\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n > 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -815,6 +814,3 @@ msgstr "%1 〉"
815814
816815#~ msgid "Please re-enter"
817816#~ 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 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-06 17:47+0000\n"
1212"Last-Translator: Meriuță Cornel <meriutacornel@neacornel.eu>\n"
1313"Language-Team: Romanian <ro@li.org>\n"
14−"Language: ro\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
1918"== 0) && (n != 0))) ? 2: 1));\n"
20−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
21−"X-Generator: Launchpad (build 17737)\n"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20+"X-Generator: Launchpad (build 17746)\n"
2221
2322#: plugins/LightDM/Greeter.cpp:112
2423msgid "Password: "
@@ -588,7 +587,8 @@ msgstr "Adăugați un card SIM și reporniți dispozitivul dumneavoastră"
588587
589588#: qml/Wizard/Pages/20-sim.qml:59
590589msgid "Without it, you won’t be able to make calls or use text messaging."
591−msgstr "Fără acesta, nu veți putea efectua apeluri sau utiliza mesajele text."
590+msgstr ""
591+"Fără acesta, nu veți putea efectua apeluri sau utiliza mesajele text."
592592
593593#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
594594msgid "Skip"
@@ -677,7 +677,8 @@ msgstr "Deloc"
677677
678678#: qml/Wizard/Pages/50-location.qml:124
679679msgid "You can change your mind later in <b>System Settings</b>."
680−msgstr "Puteți să modificați opțiunea utilizând <b>Configurări de sistem</b>."
680+msgstr ""
681+"Puteți să modificați opțiunea utilizând <b>Configurări de sistem</b>."
681682
682683#: qml/Wizard/Pages/60-reporting.qml:24
683684msgid "Improving your experience"
@@ -824,6 +825,3 @@ msgstr "%1 〉"
824825
825826#~ msgid "Please re-enter"
826827#~ 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 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-06 05:33+0000\n"
1212"Last-Translator: ☠Jay ZDLin☠ <Unknown>\n"
1313"Language-Team: Russian <ru@li.org>\n"
14−"Language: ru\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
18−"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
19−"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
20−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
21−"X-Generator: Launchpad (build 17737)\n"
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"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20+"X-Generator: Launchpad (build 17746)\n"
2221
2322#: plugins/LightDM/Greeter.cpp:112
2423msgid "Password: "
@@ -674,7 +673,8 @@ msgstr "Нет (никогда)"
674673
675674#: qml/Wizard/Pages/50-location.qml:124
676675msgid "You can change your mind later in <b>System Settings</b>."
677−msgstr "Изменить свой выбор можно позднее, перейдя в <b>Параметры системы</b>."
676+msgstr ""
677+"Изменить свой выбор можно позднее, перейдя в <b>Параметры системы</b>."
678678
679679#: qml/Wizard/Pages/60-reporting.qml:24
680680msgid "Improving your experience"
@@ -755,8 +755,7 @@ msgstr "%1 〉"
755755
756756#~ msgid "Try swiping from the top edge to access the indicators"
757757#~ msgstr ""
758−#~ "Попробуйте переместить палец от верхнего края вниз для доступа к "
759−#~ "индикаторам"
758+#~ "Попробуйте переместить палец от верхнего края вниз для доступа к индикаторам"
760759
761760#~ msgid "Close"
762761#~ msgstr "Закрыть"
@@ -775,8 +774,8 @@ msgstr "%1 〉"
775774
776775#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
777776#~ msgstr ""
778−#~ "Переместите палец от левого края вправо для открытия лаунчера для "
779−#~ "быстрого доступа к приложениям"
777+#~ "Переместите палец от левого края вправо для открытия лаунчера для быстрого "
778+#~ "доступа к приложениям"
780779
781780#~ msgid ""
782781#~ "You have now mastered the edge gestures and can start using the "
@@ -823,6 +822,3 @@ msgstr "%1 〉"
823822
824823#~ msgid "Manage Scopes"
825824#~ msgstr "Настройки поиска"
826−
827−#~ msgid "Click here to finish."
828−#~ msgstr "Нажмите для завершения."
po/shn.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=(n == 1) ? 0 : 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/si.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/sk.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"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"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/sl.po+5−9
@@ -6,19 +6,18 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-06 21:10+0000\n"
1212"Last-Translator: Sasa Batistic <Unknown>\n"
1313"Language-Team: Slovenian <sl@li.org>\n"
14−"Language: sl\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
18−"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
19−"%100==4 ? 3 : 0);\n"
20−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
21−"X-Generator: Launchpad (build 17737)\n"
17+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
18+"n%100==4 ? 3 : 0);\n"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20+"X-Generator: Launchpad (build 17746)\n"
2221
2322#: plugins/LightDM/Greeter.cpp:112
2423msgid "Password: "
@@ -818,6 +817,3 @@ msgstr "%1 〉"
818817
819818#~ msgid "Please re-enter"
820819#~ 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 ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:49+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/sr.po+6−6
@@ -7,19 +7,19 @@
77msgid ""
88msgstr ""
99"Project-Id-Version: unity\n"
10−"Report-Msgid-Bugs-To: \n"
10+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1111"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1212"PO-Revision-Date: 2015-09-16 16:20+0000\n"
1313"Last-Translator: Bojan Bogdanović <Unknown>\n"
1414"Language-Team: српски <xfce4@xfce4.org>\n"
15−"Language: sr\n"
1615"MIME-Version: 1.0\n"
1716"Content-Type: text/plain; charset=UTF-8\n"
1817"Content-Transfer-Encoding: 8bit\n"
19−"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
20−"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
21−"X-Launchpad-Export-Date: 2015-09-17 05:46+0000\n"
22−"X-Generator: Launchpad (build 17737)\n"
18+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
19+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
20+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
21+"X-Generator: Launchpad (build 17746)\n"
22+"Language: sr\n"
2323
2424#: plugins/LightDM/Greeter.cpp:112
2525msgid "Password: "
po/sv.po+10−11
@@ -6,18 +6,18 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-12 22:17+0000\n"
1212"Last-Translator: Josef Andersson <Unknown>\n"
1313"Language-Team: Swedish\n"
14−"Language: sv\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
20+"Language: sv\n"
2121
2222#: plugins/LightDM/Greeter.cpp:112
2323msgid "Password: "
@@ -578,7 +578,8 @@ msgstr "Lägg till ett SIM-kort och starta om din enhet"
578578
579579#: qml/Wizard/Pages/20-sim.qml:59
580580msgid "Without it, you won’t be able to make calls or use text messaging."
581−msgstr "Utan det kommer du inte att kunna ringa eller skicka textmeddelanden."
581+msgstr ""
582+"Utan det kommer du inte att kunna ringa eller skicka textmeddelanden."
582583
583584#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
584585msgid "Skip"
@@ -648,7 +649,8 @@ msgstr "Använd endast GPS (sämre precision)"
648649
649650#: qml/Wizard/Pages/50-location.qml:86
650651msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
651−msgstr "Använd GPS, anonymiserad Wi-Fi och mobil nätverksinfo (rekommenderas)"
652+msgstr ""
653+"Använd GPS, anonymiserad Wi-Fi och mobil nätverksinfo (rekommenderas)"
652654
653655#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
654656#: qml/Wizard/Pages/50-location.qml:103
@@ -656,8 +658,8 @@ msgid ""
656658"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
657659"conditions</a>."
658660msgstr ""
659−"Genom att välja detta alternativ godkänner du <a href='#'>användarvillkoren</"
660−"a> för Nokia HERE."
661+"Genom att välja detta alternativ godkänner du <a "
662+"href='#'>användarvillkoren</a> för Nokia HERE."
661663
662664#: qml/Wizard/Pages/50-location.qml:112
663665msgid "Not at all"
@@ -808,6 +810,3 @@ msgstr "%1 〉"
808810
809811#~ msgid "Please re-enter"
810812#~ 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 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-17 20:02+0000\n"
1212"Last-Translator: Valentine <mwangi_valentino@yahoo.com>\n"
1313"Language-Team: Swahili <sw@li.org>\n"
14−"Language: sw\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -720,6 +719,3 @@ msgstr ""
720719
721720#~ msgid "Please re-enter"
722721#~ 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 ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020"Language: ta\n"
2121
2222#: plugins/LightDM/Greeter.cpp:112
po/te.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/th.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/tr.po+3−7
@@ -6,18 +6,17 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-03-22 15:56+0000\n"
1212"Last-Translator: Arda Ünlü <aarda.uunlu@gmail.com>\n"
1313"Language-Team: Turkish <tr@li.org>\n"
14−"Language: tr\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -802,6 +801,3 @@ msgstr "%1 〉"
802801
803802#~ msgid "Please re-enter"
804803#~ 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 ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11−"PO-Revision-Date: 2014-10-07 09:00+0000\n"
12−"Last-Translator: Gheyret T.Kenji <Unknown>\n"
11+"PO-Revision-Date: 2015-09-24 05:59+0000\n"
12+"Last-Translator: eltikin <eltikinuyghur@hotmail.com>\n"
1313"Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-25 05:51+0000\n"
19+"X-Generator: Launchpad (build 17754)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -29,7 +29,7 @@ msgstr "تېزلەتمىنى قوي"
2929
3030#: plugins/Unity/Launcher/launcheritem.cpp:52
3131msgid "Quit"
32−msgstr ""
32+msgstr "چېكىن"
3333
3434#: plugins/Unity/Launcher/launcheritem.cpp:106
3535msgid "Unpin shortcut"
@@ -56,7 +56,7 @@ msgstr ""
5656#. en_US example: "Tomorrow\u2003%l:%M %p" --> "Tomorrow 1:00 PM"
5757#: plugins/Utils/relativetimeformatter.cpp:172
5858msgid "Tomorrow %l:%M %p"
59−msgstr ""
59+msgstr "ئەتە %l:%M %p"
6060
6161#. Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
6262#. This format string is used for showing, on a 12-hour clock, times that happened in the last week.
@@ -125,7 +125,7 @@ msgstr "خاتا ئىم جۈملىسى كۆپ قېتىم كىرگۈزۈلگەن
125125
126126#: qml/Components/DelayedLockscreen.qml:65
127127msgid "You have been locked out due to too many failed passcode attempts."
128−msgstr "خاتا ئىم كودى(passcode) كۆپ قېتىم كىرگۈزۈلگەنلىكى ئۈچۈن قۇلۇپلاندى."
128+msgstr "ھىساباتىڭز قۇلۇپلاندى.ئىم كىرگۈزۈشتە كۆپ قېتىم خاتالاشتىڭز."
129129
130130#: qml/Components/DelayedLockscreen.qml:74
131131#, qt-format
@@ -136,7 +136,7 @@ msgstr[0] "%1 مىنۇت كۈتۈپ ئاندىن قايتا سىناڭ…"
136136#: qml/Components/Dialogs.qml:112
137137msgctxt "Title: Lock/Log out dialog"
138138msgid "Log out"
139−msgstr ""
139+msgstr "تىزىمدىن چىق"
140140
141141#: qml/Components/Dialogs.qml:113
142142msgid "Are you sure you want to log out?"
@@ -145,22 +145,22 @@ msgstr "راستلا چىقىپ كېتەمسىز؟"
145145#: qml/Components/Dialogs.qml:115
146146msgctxt "Button: Lock the system"
147147msgid "Lock"
148−msgstr ""
148+msgstr "قۇلۇپلا"
149149
150150#: qml/Components/Dialogs.qml:122
151151msgctxt "Button: Log out from the system"
152152msgid "Log Out"
153−msgstr ""
153+msgstr "تىزىمدىن چىق"
154154
155155#: qml/Components/Dialogs.qml:129 qml/Components/Dialogs.qml:162
156156#: qml/Components/Dialogs.qml:221
157157msgid "Cancel"
158−msgstr "ئەمەلدىن قالدۇر"
158+msgstr "بولدىلا"
159159
160160#: qml/Components/Dialogs.qml:141
161161msgctxt "Title: Reboot/Shut down dialog"
162162msgid "Shut down"
163−msgstr ""
163+msgstr "تاقا"
164164
165165#: qml/Components/Dialogs.qml:142
166166msgid "Are you sure you want to shut down?"
@@ -169,17 +169,17 @@ msgstr "راستلا تاقامسىز؟"
169169#: qml/Components/Dialogs.qml:144
170170msgctxt "Button: Reboot the system"
171171msgid "Reboot"
172−msgstr ""
172+msgstr "قايتا قوزغات"
173173
174174#: qml/Components/Dialogs.qml:153
175175msgctxt "Button: Shut down the system"
176176msgid "Shut down"
177−msgstr ""
177+msgstr "تاقا"
178178
179179#: qml/Components/Dialogs.qml:175
180180msgctxt "Title: Reboot dialog"
181181msgid "Reboot"
182−msgstr ""
182+msgstr "قايتا قوزغات"
183183
184184#: qml/Components/Dialogs.qml:176
185185msgid "Are you sure you want to reboot?"
@@ -196,7 +196,7 @@ msgstr "ھەئە"
196196#: qml/Components/Dialogs.qml:200
197197msgctxt "Title: Power off/Restart dialog"
198198msgid "Power"
199−msgstr ""
199+msgstr "توك مەنبە"
200200
201201#: qml/Components/Dialogs.qml:201
202202msgid ""
@@ -209,12 +209,12 @@ msgstr ""
209209#: qml/Components/Dialogs.qml:203
210210msgctxt "Button: Power off the system"
211211msgid "Power off"
212−msgstr ""
212+msgstr "توكنى ئۈز"
213213
214214#: qml/Components/Dialogs.qml:212
215215msgctxt "Button: Restart the system"
216216msgid "Restart"
217−msgstr ""
217+msgstr "قايتا قوزغات"
218218
219219#: qml/Components/Lockscreen.qml:245
220220msgid "Return to Call"
@@ -239,22 +239,22 @@ msgstr "ھەممىنى كۆرۈش…"
239239#: qml/Dash/GenericScopeView.qml:631
240240msgctxt "Label: Hint for dash search line edit"
241241msgid "Search"
242−msgstr ""
242+msgstr "ئىزدە"
243243
244244#: qml/Dash/PageHeader.qml:269
245245msgctxt "Button: Open the Ubuntu Store"
246246msgid "Store"
247−msgstr ""
247+msgstr "ساقلا"
248248
249249#: qml/Dash/PageHeader.qml:276
250250msgctxt "Button: Start a search in the current dash scope"
251251msgid "Search"
252−msgstr ""
252+msgstr "ئىزدە"
253253
254254#: qml/Dash/PageHeader.qml:286
255255msgctxt "Button: Show the current dash scope settings"
256256msgid "Settings"
257−msgstr ""
257+msgstr "تەڭشەك"
258258
259259#: qml/Dash/PageHeader.qml:293
260260msgid "Remove from Favorites"
@@ -295,19 +295,19 @@ msgstr "قويۇۋەتسە يېڭىلىنىدۇ…"
295295
296296#: qml/Dash/ScopeSettings/ScopeSettingBoolean.qml:43
297297msgid "Enable location data"
298−msgstr ""
298+msgstr "ئۇرۇن سانلىق مەلۇمات ئىلىتشكە باشلىدى"
299299
300300#: qml/Dash/ScopesList.qml:67
301301msgid "Manage"
302−msgstr ""
302+msgstr "باشقۇرۇش"
303303
304304#: qml/Dash/ScopesList.qml:113
305305msgid "Home"
306−msgstr ""
306+msgstr "ماكان"
307307
308308#: qml/Dash/ScopesList.qml:114
309309msgid "Also installed"
310−msgstr ""
310+msgstr "قايتىدىن ئورنات"
311311
312312#: qml/Greeter/CoverPage.qml:107
313313msgid "Unlock"
@@ -315,11 +315,11 @@ msgstr "قۇلۇپسىزلا"
315315
316316#: qml/Greeter/LoginList.qml:236
317317msgid "Retry"
318−msgstr ""
318+msgstr "قايتا سىنا"
319319
320320#: qml/Greeter/LoginList.qml:237
321321msgid "Tap to unlock"
322−msgstr ""
322+msgstr "قۇلۇپسىزلا"
323323
324324#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:53
325325msgid "Sorry, incorrect passphrase."
@@ -374,7 +374,7 @@ msgstr "كەچۈرۈڭ، ئىم توغرا ئەمەس"
374374#: qml/Greeter/NarrowView.qml:121
375375msgctxt "passphrase"
376376msgid "Please re-enter"
377−msgstr ""
377+msgstr "قايتا كىرگۈزۈڭ"
378378
379379#: qml/Greeter/NarrowView.qml:122
380380msgid "Sorry, incorrect passcode"
@@ -400,32 +400,29 @@ msgstr "ھېچ نېمە قويۇلمايۋاتىدۇ"
400400#, qt-format
401401msgid "%1 hour"
402402msgid_plural "%1 hours"
403−msgstr[0] ""
404−msgstr[1] ""
403+msgstr[0] "%1 سائەت"
405404
406405#: qml/Panel/Indicators/MenuItemFactory.qml:807
407406#, qt-format
408407msgid "%1 minute"
409408msgid_plural "%1 minutes"
410−msgstr[0] ""
411−msgstr[1] ""
409+msgstr[0] "%1 مىنۇت"
412410
413411#: qml/Panel/Indicators/MenuItemFactory.qml:812
414412#, qt-format
415413msgid "%1 second"
416414msgid_plural "%1 seconds"
417−msgstr[0] ""
418−msgstr[1] ""
415+msgstr[0] "%1 سېكۇنت"
419416
420417#: qml/Panel/Indicators/MenuItemFactory.qml:815
421418msgid "0 seconds"
422−msgstr ""
419+msgstr "0 سېكۇنت"
423420
424421#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
425422#: qml/Panel/Indicators/MenuItemFactory.qml:817
426423#, qt-format
427424msgid "%1 remaining"
428−msgstr ""
425+msgstr "%1 قالدۇقى"
429426
430427#: qml/Panel/Indicators/MenuItemFactory.qml:823
431428msgid "In queue…"
@@ -454,11 +451,11 @@ msgstr "مەغلۇپ بولدى، چېكىپ قايتا سىناڭ"
454451#: qml/Panel/Indicators/MessageMenuItemFactory.qml:149
455452msgctxt "Label: Hint in message indicator line edit"
456453msgid "Reply"
457−msgstr ""
454+msgstr "جاۋاب قايتۇر"
458455
459456#: qml/Panel/Indicators/MessageMenuItemFactory.qml:204
460457msgid "Call back"
461−msgstr ""
458+msgstr "تىلفۇن ئۇرلىۋاتىدۇ"
462459
463460#: qml/Panel/Indicators/ModemInfoItem.qml:105
464461msgid "Unlock SIM"
@@ -474,28 +471,28 @@ msgstr ""
474471
475472#: qml/Tutorial/TutorialBottomFinish.qml:25
476473msgid "Tap here to finish."
477−msgstr ""
474+msgstr "بۇ يەرنى چېكىپ ئاخىرلاشتۇرۇڭ"
478475
479476#: qml/Tutorial/TutorialBottom.qml:28
480477msgid "Open special menus"
481−msgstr ""
478+msgstr "تىزملىكنى ئاچ"
482479
483480#: qml/Tutorial/TutorialBottom.qml:29
484481msgid "Swipe up from the bottom edge."
485−msgstr ""
482+msgstr "ئاستى تەرەپكە سېرىل"
486483
487484#: qml/Tutorial/TutorialContent.qml:80 qml/Tutorial/TutorialLeftFinish.qml:25
488485#: qml/Tutorial/TutorialRight.qml:144
489486msgid "Tap here to continue."
490−msgstr ""
487+msgstr "داۋاملاشتۇر"
491488
492489#: qml/Tutorial/TutorialLeftFinish.qml:24
493490msgid "These are the shortcuts to favorite apps"
494−msgstr ""
491+msgstr "بۇ سىز ئەڭ ياخشى كۆردىغان دېتاللارتېزلەتمە كۆنۇپكىلار"
495492
496493#: qml/Tutorial/TutorialLeft.qml:26
497494msgid "Open the launcher"
498−msgstr ""
495+msgstr "تارقىتىش ئاپراتنى ئاچ"
499496
500497#: qml/Tutorial/TutorialLeft.qml:27
501498msgid "Short swipe from the left edge."
@@ -507,11 +504,11 @@ msgstr ""
507504
508505#: qml/Tutorial/TutorialPage.qml:195
509506msgid "Try again."
510−msgstr ""
507+msgstr "قايتا سىناڭ"
511508
512509#: qml/Tutorial/TutorialRight.qml:31
513510msgid "To view open apps"
514−msgstr ""
511+msgstr "قوزغىتىلغان دېتاللارنى كۆرۈش"
515512
516513#: qml/Tutorial/TutorialRight.qml:32
517514msgid "Long swipe from the right edge."
@@ -519,134 +516,136 @@ msgstr ""
519516
520517#: qml/Tutorial/TutorialRight.qml:122
521518msgid "View all your running tasks."
522−msgstr ""
519+msgstr "ئىجىرا بۇلۇۋاتقان بارلىق ۋەزىپىلەرنى كۆرۈش"
523520
524521#: qml/Wizard/Page.qml:89
525522msgctxt "Button: Go back one page in the Wizard"
526523msgid "Back"
527−msgstr ""
524+msgstr "قايتىش"
528525
529526#: qml/Wizard/Pages/here-terms.qml:27
530527msgid "Terms & Conditions"
531−msgstr ""
528+msgstr "قائىدە ۋە شەرتلەر"
532529
533530#: qml/Wizard/Pages/passwd-confirm.qml:49
534531msgid "Confirm passphrase"
535−msgstr ""
532+msgstr "ئىم جۈملىسىنى جەزملەڭ"
536533
537534#: qml/Wizard/Pages/passwd-confirm.qml:50
538535msgid "Confirm passcode"
539−msgstr ""
536+msgstr "ئىمنى جەزملەڭ"
540537
541538#: qml/Wizard/Pages/passwd-confirm.qml:53
542539#: qml/Wizard/Pages/passwd-confirm.qml:54
543540msgid "Please try again."
544−msgstr ""
541+msgstr "قايتا سىناڭ."
545542
546543#: qml/Wizard/Pages/passwd-confirm.qml:82 qml/Wizard/Pages/passwd-set.qml:90
547544#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:128
548545#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
549546#: qml/Wizard/Pages/60-reporting.qml:50
550547msgid "Continue"
551−msgstr ""
548+msgstr "داۋاملاشتۇر"
552549
553550#: qml/Wizard/Pages/passwd-set.qml:61
554551msgid "Choose your passcode"
555−msgstr ""
552+msgstr "ئىم كودى(passcode) تاللاڭ"
556553
557554#: qml/Wizard/Pages/passwd-set.qml:68
558555msgid "Passphrase must be 4 characters long"
559−msgstr ""
556+msgstr "ئىم كودى چوقۇم 4 ھەرپ بولسۇن"
560557
561558#: qml/Wizard/Pages/10-welcome.qml:27
562559msgid "Hi!"
563−msgstr ""
560+msgstr "سالام!"
564561
565562#: qml/Wizard/Pages/10-welcome.qml:44
566563msgid "Welcome to your Ubuntu phone."
567−msgstr ""
564+msgstr "ئۇبۇنتۇ تېلېفونىغا مەرھابا."
568565
569566#: qml/Wizard/Pages/10-welcome.qml:52
570567msgid "Let’s get started."
571−msgstr ""
568+msgstr "باشلايلى"
572569
573570#: qml/Wizard/Pages/20-sim.qml:25
574571msgid "Add a SIM card and restart your device"
575−msgstr ""
572+msgstr "سىم كارتىسى قوشۇپ، ئۈسكۈنىنى قايتا قوزغىتىڭ"
576573
577574#: qml/Wizard/Pages/20-sim.qml:59
578575msgid "Without it, you won’t be able to make calls or use text messaging."
579−msgstr ""
576+msgstr "ئۇ بولمىسا، تېلېفون قىلىشقا ۋە ئۇچۇر ئەۋەتىشكە بولمايدۇ."
580577
581578#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
582579msgid "Skip"
583−msgstr ""
580+msgstr "ئۆتكۈزۈۋەت"
584581
585582#: qml/Wizard/Pages/30-passwd-type.qml:39
586583msgid "Lock security"
587−msgstr ""
584+msgstr "قۇلۇپلاش بىخەتەرلىكى"
588585
589586#: qml/Wizard/Pages/30-passwd-type.qml:74
590587msgid "Please select how you’d like to unlock your phone."
591−msgstr ""
588+msgstr "تېلېفوننى قانداق قۇلۇپسىزلاشنى تاللاڭ."
592589
593590#: qml/Wizard/Pages/30-passwd-type.qml:97
594591msgctxt "Label: Type of security method"
595592msgid "Swipe"
596−msgstr ""
593+msgstr "تېز سىيرىش"
597594
598595#: qml/Wizard/Pages/30-passwd-type.qml:98
599596msgctxt "Label: Description of security method"
600597msgid "No security"
601−msgstr ""
598+msgstr "بىخەتەرلىكى يوق"
602599
603600#: qml/Wizard/Pages/30-passwd-type.qml:100
604601msgctxt "Label: Type of security method"
605602msgid "Passcode"
606−msgstr ""
603+msgstr "ئىم"
607604
608605#: qml/Wizard/Pages/30-passwd-type.qml:101
609606msgctxt "Label: Description of security method"
610607msgid "4 digits only"
611−msgstr ""
608+msgstr "4 خانىلىق سان"
612609
613610#: qml/Wizard/Pages/30-passwd-type.qml:103
614611msgctxt "Label: Type of security method"
615612msgid "Passphrase"
616−msgstr ""
613+msgstr "ئىم"
617614
618615#: qml/Wizard/Pages/30-passwd-type.qml:104
619616msgctxt "Label: Description of security method"
620617msgid "Numbers and letters"
621−msgstr ""
618+msgstr "رەقەم ۋە ھەرپلەر"
622619
623620#: qml/Wizard/Pages/40-wifi.qml:29
624621msgid "Connect to Wi‑Fi"
625−msgstr ""
622+msgstr "سىمسىز تورغا(Wi-Fi) باغلان"
626623
627624#: qml/Wizard/Pages/40-wifi.qml:168
628625msgid "Available networks…"
629−msgstr ""
626+msgstr "ئىشلەتكىلى بولىدىغان تورلار…"
630627
631628#: qml/Wizard/Pages/40-wifi.qml:169
632629msgid "No available networks."
633−msgstr ""
630+msgstr "ئىشلەتكىلى بولىدىغان تور يوق."
634631
635632#: qml/Wizard/Pages/50-location.qml:27
636633msgid "Location"
637−msgstr ""
634+msgstr "ئورنى"
638635
639636#: qml/Wizard/Pages/50-location.qml:62
640637msgid "Let the phone detect your location:"
641−msgstr ""
638+msgstr "تىلفۇن ئورنىڭزنى بىكتىۋاتدۇ:"
642639
643640#: qml/Wizard/Pages/50-location.qml:69
644641msgid "Using GPS only (less accurate)"
645−msgstr ""
642+msgstr "GPS ئىشلىتىش (توپ توغرا چىقمايدۇ)"
646643
647644#: qml/Wizard/Pages/50-location.qml:86
648645msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
649646msgstr ""
647+"GPS ئىشلىەتكەندە سېمسىز تور ياكى كۆچمە تىلفۇن تورنى ئېچىش كېرەك (تەۋسىيە "
648+"قىلىندۇ)"
650649
651650#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
652651#: qml/Wizard/Pages/50-location.qml:103
@@ -657,55 +656,59 @@ msgstr ""
657656
658657#: qml/Wizard/Pages/50-location.qml:112
659658msgid "Not at all"
660−msgstr ""
659+msgstr "پەقەت ئۇنداق ئەمەس"
661660
662661#: qml/Wizard/Pages/50-location.qml:124
663662msgid "You can change your mind later in <b>System Settings</b>."
664−msgstr ""
663+msgstr "سىز <b>سىستېما تەڭشەك</b> تىن ھەرخىل ئۆزگەرتىشلەرنى ئىلىپ بارالايسىز"
665664
666665#: qml/Wizard/Pages/60-reporting.qml:24
667666msgid "Improving your experience"
668−msgstr ""
667+msgstr "سەۋىيەيىڭىز ئاشىدۇ"
669668
670669#: qml/Wizard/Pages/60-reporting.qml:36
671670msgid ""
672671"Your phone is set up to automatically report errors to Canonical and its "
673672"partners, the makers of the operating system."
674673msgstr ""
674+"تېلېفونىڭىز خاتالىقلارنى Canonical ۋە ئۇنىڭ بىلەن ھەمكارلاشقانلارغا ۋە "
675+"مەشغۇلات سىستېمىسىنى ياسىغۇچىلارغا ئاپتوماتىك مەلۇم قىلىدىغان قىلىپ تەڭشەلدى."
675676
676677#: qml/Wizard/Pages/60-reporting.qml:43
677678msgid ""
678679"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
679680"Privacy</b>"
680681msgstr ""
682+"بۇنى <b>بىخەتەرلىك &amp; شەخسىيەت</b>نىڭ ئاستىدىكى <b>سىستېما تەڭشىكى</b>دە "
683+"ئىناۋەتسىز قىلىشقا بولىدۇ."
681684
682685#: qml/Wizard/Pages/80-finished.qml:24
683686msgid "All done"
684−msgstr ""
687+msgstr "ھەممىسى تامام"
685688
686689#: qml/Wizard/Pages/80-finished.qml:39
687690msgid "Nice work!"
688−msgstr ""
691+msgstr "جاپا چەكتىڭىز!"
689692
690693#: qml/Wizard/Pages/80-finished.qml:46
691694msgid "Your phone is now ready to use."
692−msgstr ""
695+msgstr "تېلېفونىڭىز ئىشلىتىشكە ھازىرلاندى."
693696
694697#: qml/Wizard/Pages/80-finished.qml:53
695698msgid "Finish"
696−msgstr ""
699+msgstr "تامام"
697700
698701#. Translators: This is the arrow for "Back" buttons
699702#: qml/Wizard/StackButton.qml:39
700703#, qt-format
701704msgid "〈 %1"
702−msgstr ""
705+msgstr "〈 %1"
703706
704707#. Translators: This is the arrow for "Forward" buttons
705708#: qml/Wizard/StackButton.qml:42
706709#, qt-format
707710msgid "%1 〉"
708−msgstr ""
711+msgstr "%1 〉"
709712
710713#~ msgid "Confirm"
711714#~ msgstr "جەزملە"
po/uk.po+8−13
@@ -6,19 +6,18 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-04 05:53+0000\n"
1212"Last-Translator: Yuri Chornoivan <yurchor@gmail.com>\n"
1313"Language-Team: Ukrainian <uk@li.org>\n"
14−"Language: uk\n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
18−"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
19−"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
20−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
21−"X-Generator: Launchpad (build 17737)\n"
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"
19+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
20+"X-Generator: Launchpad (build 17746)\n"
2221
2322#: plugins/LightDM/Greeter.cpp:112
2423msgid "Password: "
@@ -773,8 +772,7 @@ msgstr "%1 〉"
773772#~ msgstr "Пропустити вступ"
774773
775774#~ msgid "Try swiping from the right edge to unlock the phone"
776−#~ msgstr ""
777−#~ "Спробуйте провести пальцем від правою краю, щоб розблокувати телефон"
775+#~ msgstr "Спробуйте провести пальцем від правою краю, щоб розблокувати телефон"
778776
779777#~ msgid "Right edge"
780778#~ msgstr "Правий край"
@@ -783,8 +781,8 @@ msgstr "%1 〉"
783781#~ "You have now mastered the edge gestures and can start using the "
784782#~ "phone<br><br>Tap on the screen to start"
785783#~ msgstr ""
786−#~ "Вами налаштовано дії у відповідь на дотики на краях екрана. Тепер "
787−#~ "телефоном можна користуватися.<br><br>Торкніться екрана, щоб розпочати."
784+#~ "Вами налаштовано дії у відповідь на дотики на краях екрана. Тепер телефоном "
785+#~ "можна користуватися.<br><br>Торкніться екрана, щоб розпочати."
788786
789787#~ msgid "All"
790788#~ msgstr "Все"
@@ -824,6 +822,3 @@ msgstr "%1 〉"
824822
825823#~ msgid "Please re-enter"
826824#~ msgstr "Ввведіть ще раз"
827−
828−#~ msgid "Click here to finish."
829−#~ msgstr "Натисніть тут, щоб завершити."
po/unity8.pot+36−34
@@ -8,7 +8,7 @@ msgid ""
88msgstr ""
99"Project-Id-Version: unity8\n"
1010"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"
1212"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,7 +18,7 @@ msgstr ""
1818"Content-Transfer-Encoding: 8bit\n"
1919"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
2020
21−#: plugins/LightDM/Greeter.cpp:112
21+#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
2323msgstr ""
2424
@@ -134,83 +134,83 @@ msgid_plural "Please wait %1 minutes and then try again…"
134134msgstr[0] ""
135135msgstr[1] ""
136136
137−#: qml/Components/Dialogs.qml:112
137+#: qml/Components/Dialogs.qml:115
138138msgctxt "Title: Lock/Log out dialog"
139139msgid "Log out"
140140msgstr ""
141141
142−#: qml/Components/Dialogs.qml:113
142+#: qml/Components/Dialogs.qml:116
143143msgid "Are you sure you want to log out?"
144144msgstr ""
145145
146−#: qml/Components/Dialogs.qml:115
146+#: qml/Components/Dialogs.qml:118
147147msgctxt "Button: Lock the system"
148148msgid "Lock"
149149msgstr ""
150150
151−#: qml/Components/Dialogs.qml:122
151+#: qml/Components/Dialogs.qml:125
152152msgctxt "Button: Log out from the system"
153153msgid "Log Out"
154154msgstr ""
155155
156−#: qml/Components/Dialogs.qml:129 qml/Components/Dialogs.qml:162
157−#: qml/Components/Dialogs.qml:221
156+#: qml/Components/Dialogs.qml:132 qml/Components/Dialogs.qml:165
157+#: qml/Components/Dialogs.qml:224
158158msgid "Cancel"
159159msgstr ""
160160
161−#: qml/Components/Dialogs.qml:141
161+#: qml/Components/Dialogs.qml:144
162162msgctxt "Title: Reboot/Shut down dialog"
163163msgid "Shut down"
164164msgstr ""
165165
166−#: qml/Components/Dialogs.qml:142
166+#: qml/Components/Dialogs.qml:145
167167msgid "Are you sure you want to shut down?"
168168msgstr ""
169169
170−#: qml/Components/Dialogs.qml:144
170+#: qml/Components/Dialogs.qml:147
171171msgctxt "Button: Reboot the system"
172172msgid "Reboot"
173173msgstr ""
174174
175−#: qml/Components/Dialogs.qml:153
175+#: qml/Components/Dialogs.qml:156
176176msgctxt "Button: Shut down the system"
177177msgid "Shut down"
178178msgstr ""
179179
180−#: qml/Components/Dialogs.qml:175
180+#: qml/Components/Dialogs.qml:178
181181msgctxt "Title: Reboot dialog"
182182msgid "Reboot"
183183msgstr ""
184184
185−#: qml/Components/Dialogs.qml:176
185+#: qml/Components/Dialogs.qml:179
186186msgid "Are you sure you want to reboot?"
187187msgstr ""
188188
189−#: qml/Components/Dialogs.qml:178
189+#: qml/Components/Dialogs.qml:181
190190msgid "No"
191191msgstr ""
192192
193−#: qml/Components/Dialogs.qml:185
193+#: qml/Components/Dialogs.qml:188
194194msgid "Yes"
195195msgstr ""
196196
197−#: qml/Components/Dialogs.qml:200
197+#: qml/Components/Dialogs.qml:203
198198msgctxt "Title: Power off/Restart dialog"
199199msgid "Power"
200200msgstr ""
201201
202−#: qml/Components/Dialogs.qml:201
202+#: qml/Components/Dialogs.qml:204
203203msgid ""
204204"Are you sure you would like\n"
205205"to power off?"
206206msgstr ""
207207
208−#: qml/Components/Dialogs.qml:203
208+#: qml/Components/Dialogs.qml:206
209209msgctxt "Button: Power off the system"
210210msgid "Power off"
211211msgstr ""
212212
213−#: qml/Components/Dialogs.qml:212
213+#: qml/Components/Dialogs.qml:215
214214msgctxt "Button: Restart the system"
215215msgid "Restart"
216216msgstr ""
@@ -271,8 +271,10 @@ msgstr ""
271271msgid "Less..."
272272msgstr ""
273273
274−#: qml/Dash/Previews/PreviewCommentInput.qml:61
275−#: qml/Dash/Previews/PreviewRatingInput.qml:169
274+#: qml/Dash/Previews/PreviewCommentInput.qml:68
275+#: qml/Dash/Previews/PreviewRatingInput.qml:174
276+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:148
277+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:205
276278msgid "Send"
277279msgstr ""
278280
@@ -387,62 +389,62 @@ msgstr ""
387389msgid "Conference"
388390msgstr ""
389391
390−#: qml/Panel/Indicators/MenuItemFactory.qml:674
392+#: qml/Panel/Indicators/MenuItemFactory.qml:718
391393msgid "Nothing is playing"
392394msgstr ""
393395
394−#: qml/Panel/Indicators/MenuItemFactory.qml:803
396+#: qml/Panel/Indicators/MenuItemFactory.qml:847
395397#, qt-format
396398msgid "%1 hour"
397399msgid_plural "%1 hours"
398400msgstr[0] ""
399401msgstr[1] ""
400402
401−#: qml/Panel/Indicators/MenuItemFactory.qml:807
403+#: qml/Panel/Indicators/MenuItemFactory.qml:851
402404#, qt-format
403405msgid "%1 minute"
404406msgid_plural "%1 minutes"
405407msgstr[0] ""
406408msgstr[1] ""
407409
408−#: qml/Panel/Indicators/MenuItemFactory.qml:812
410+#: qml/Panel/Indicators/MenuItemFactory.qml:856
409411#, qt-format
410412msgid "%1 second"
411413msgid_plural "%1 seconds"
412414msgstr[0] ""
413415msgstr[1] ""
414416
415−#: qml/Panel/Indicators/MenuItemFactory.qml:815
417+#: qml/Panel/Indicators/MenuItemFactory.qml:859
416418msgid "0 seconds"
417419msgstr ""
418420
419421#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
420−#: qml/Panel/Indicators/MenuItemFactory.qml:817
422+#: qml/Panel/Indicators/MenuItemFactory.qml:861
421423#, qt-format
422424msgid "%1 remaining"
423425msgstr ""
424426
425−#: qml/Panel/Indicators/MenuItemFactory.qml:823
427+#: qml/Panel/Indicators/MenuItemFactory.qml:867
426428msgid "In queue…"
427429msgstr ""
428430
429−#: qml/Panel/Indicators/MenuItemFactory.qml:827
431+#: qml/Panel/Indicators/MenuItemFactory.qml:871
430432msgid "Downloading"
431433msgstr ""
432434
433−#: qml/Panel/Indicators/MenuItemFactory.qml:829
435+#: qml/Panel/Indicators/MenuItemFactory.qml:873
434436msgid "Paused, tap to resume"
435437msgstr ""
436438
437−#: qml/Panel/Indicators/MenuItemFactory.qml:831
439+#: qml/Panel/Indicators/MenuItemFactory.qml:875
438440msgid "Canceled"
439441msgstr ""
440442
441−#: qml/Panel/Indicators/MenuItemFactory.qml:833
443+#: qml/Panel/Indicators/MenuItemFactory.qml:877
442444msgid "Finished"
443445msgstr ""
444446
445−#: qml/Panel/Indicators/MenuItemFactory.qml:835
447+#: qml/Panel/Indicators/MenuItemFactory.qml:879
446448msgid "Failed, tap to retry"
447449msgstr ""
448450
po/ur.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/uz.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/vi.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/xh.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/zh_CN.po+7−15
@@ -6,18 +6,17 @@
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
9−"Report-Msgid-Bugs-To: \n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2015-08-25 14:53+0200\n"
1111"PO-Revision-Date: 2015-07-27 10:26+0000\n"
1212"Last-Translator: Ian Li <Unknown>\n"
1313"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
14−"Language: \n"
1514"MIME-Version: 1.0\n"
1615"Content-Type: text/plain; charset=UTF-8\n"
1716"Content-Transfer-Encoding: 8bit\n"
1817"Plural-Forms: nplurals=1; plural=0;\n"
19−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
20−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2120
2221#: plugins/LightDM/Greeter.cpp:112
2322msgid "Password: "
@@ -338,15 +337,13 @@ msgstr "这是您最后的尝试机会。"
338337msgid ""
339338"If passphrase is entered incorrectly, your phone will conduct a factory "
340339"reset and all personal data will be deleted."
341−msgstr ""
342−"如果输入的密语不正确,您的手机将恢复到出厂设置并且所有的个人数据将被删除。"
340+msgstr "如果输入的密语不正确,您的手机将恢复到出厂设置并且所有的个人数据将被删除。"
343341
344342#: qml/Greeter/NarrowView.qml:59
345343msgid ""
346344"If passcode is entered incorrectly, your phone will conduct a factory reset "
347345"and all personal data will be deleted."
348−msgstr ""
349−"如果输入的密码不正确,您的手机将恢复到出厂设置并且所有的个人数据将被删除。"
346+msgstr "如果输入的密码不正确,您的手机将恢复到出厂设置并且所有的个人数据将被删除。"
350347
351348#: qml/Greeter/NarrowView.qml:116
352349#, qt-format
@@ -667,8 +664,7 @@ msgstr "改善您的体验"
667664msgid ""
668665"Your phone is set up to automatically report errors to Canonical and its "
669666"partners, the makers of the operating system."
670−msgstr ""
671−"您的手机设置为自动向操作系统的制造商Canonical 及其合作伙伴发送错误报告。"
667+msgstr "您的手机设置为自动向操作系统的制造商Canonical 及其合作伙伴发送错误报告。"
672668
673669#: qml/Wizard/Pages/60-reporting.qml:43
674670msgid ""
@@ -755,8 +751,7 @@ msgstr "%1 〉"
755751#~ msgid ""
756752#~ "You have now mastered the edge gestures and can start using the "
757753#~ "phone<br><br>Tap on the screen to start"
758−#~ msgstr ""
759−#~ "您现在已经掌握了边缘滑动手势,可以开始使用手机了<br><br>请点击屏幕开始使用"
754+#~ msgstr "您现在已经掌握了边缘滑动手势,可以开始使用手机了<br><br>请点击屏幕开始使用"
760755
761756#~ msgid "All"
762757#~ msgstr "所有"
@@ -775,6 +770,3 @@ msgstr "%1 〉"
775770
776771#~ msgid "Please re-enter"
777772#~ msgstr "请重新输入"
778−
779−#~ msgid "Click here to finish."
780−#~ msgstr "点击这里完成。"
po/zh_HK.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:112
2222msgid "Password: "
po/zh_TW.po+2−2
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2015-09-16 05:50+0000\n"
19−"X-Generator: Launchpad (build 17737)\n"
18+"X-Launchpad-Export-Date: 2015-09-19 05:37+0000\n"
19+"X-Generator: Launchpad (build 17746)\n"
2020"Language: zh_TW\n"
2121
2222#: 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 {
101101
102102 isCurrent: ListView.isCurrentItem
103103
104− previewModel: {
104+ readonly property var previewStack: {
105105 if (root.open) {
106106 if (index === root.initialIndex) {
107− return root.initialIndexPreviewStack.getPreviewModel(0);
107+ return root.initialIndexPreviewStack;
108108 } else {
109− var previewStack = root.scope.preview(result, root.categoryId);
110− return previewStack.getPreviewModel(0);
109+ return root.scope.preview(result, root.categoryId);
111110 }
112111 } else {
113112 return null;
114113 }
115114 }
115+
116+ previewModel: {
117+ if (previewStack) {
118+ return previewStack.getPreviewModel(0);
119+ } else {
120+ return null;
121+ }
122+ }
123+
116124 scopeStyle: root.scopeStyle
117125 }
118126 }
qml/Greeter/Infographics.qml+1−1
@@ -73,7 +73,7 @@ Item {
7373 notification.hideAnim.start()
7474 }
7575
76− visible: model.label !== ""
76+ visible: model.username !== ""
7777
7878 Component.onCompleted: startShowAnimation()
7979
qml/Notifications/Notification.qml+11−7
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013,2015 Canonical, Ltd.
2+ * Copyright (C) 2013, 2015 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -18,12 +18,11 @@ import QtQuick 2.0
1818import QtMultimedia 5.0
1919import Powerd 0.1
2020import Ubuntu.Components 1.3
21+import Ubuntu.Components.ListItems 1.3 as ListItem
2122import Unity.Notifications 1.0
2223import QMenuModel 0.1
2324import Utils 0.1
2425
25−import Ubuntu.Components.ListItems 1.3 as ListItem
26−
2726Item {
2827 id: notification
2928
@@ -49,6 +48,8 @@ Item {
4948 readonly property color sdDarkGrey: "#dddddd"
5049 readonly property color sdFontColor: "#5d5d5d"
5150 readonly property real contentSpacing: units.gu(2)
51+ readonly property bool canBeClosed: type === Notification.Ephemeral
52+ property bool hasMouse
5253
5354 objectName: "background"
5455 implicitHeight: type !== Notification.PlaceHolder ? (fullscreen ? maxHeight : outterColumn.height - shapedBack.anchors.topMargin + contentSpacing * 2) : 0
@@ -216,6 +217,8 @@ Item {
216217 onClicked: {
217218 if (notification.type == Notification.Interactive) {
218219 notification.notification.invokeAction(actionRepeater.itemAt(0).actionId)
220+ } else if (hasMouse && canBeClosed) {
221+ notification.notification.close()
219222 } else {
220223 notificationList.currentIndex = index;
221224 }
@@ -280,7 +283,7 @@ Item {
280283 fontSize: "medium"
281284 color: darkOnBright ? sdFontColor : theme.palette.selected.backgroundText
282285 elide: Text.ElideRight
283− textFormat: Text.PlainText
286+ textFormat: Text.StyledText
284287 }
285288
286289 Label {
@@ -297,7 +300,7 @@ Item {
297300 wrapMode: Text.WordWrap
298301 maximumLineCount: type == Notification.SnapDecision ? 12 : 2
299302 elide: Text.ElideRight
300− textFormat: Text.PlainText
303+ textFormat: Text.StyledText
301304 }
302305 }
303306
@@ -471,7 +474,7 @@ Item {
471474 onClicked: notification.notification.invokeAction(oneOverTwoLoaderBottom.actionId)
472475 }
473476 }
474− sourceComponent: (index == 1 || index == 2) ? oneOverTwoButtonBottom : undefined
477+ sourceComponent: (index == 1 || index == 2) ? oneOverTwoButtonBottom : undefined
475478 }
476479 }
477480 }
@@ -487,7 +490,7 @@ Item {
487490 margins: contentSpacing
488491 }
489492 visible: notification.type === Notification.SnapDecision && actionRepeater.count > 0 && !oneOverTwoCase.visible
490− spacing: units.gu(2)
493+ spacing: contentSpacing
491494 layoutDirection: Qt.RightToLeft
492495
493496 Loader {
@@ -499,6 +502,7 @@ Item {
499502 width: buttonRow.width
500503 leftIconName: "call-end"
501504 rightIconName: "call-start"
505+ clickToAct: notification.hasMouse
502506 onRightTriggered: {
503507 notification.notification.invokeAction(notification.actions.data(0, ActionModel.RoleActionId))
504508 }
qml/Notifications/Notifications.qml+3−1
@@ -28,6 +28,7 @@ ListView {
2828
2929 property real margin
3030 property bool useModal: snapDecisionProxyModel.count > 0
31+ property bool hasMouse
3132
3233 UnitySortFilterProxyModel {
3334 id: snapDecisionProxyModel
@@ -52,12 +53,13 @@ ListView {
5253 secondaryIconSource: model.secondaryIcon
5354 summary: model.summary
5455 body: model.body
55− value: model.value
56+ value: model.value ? model.value : -1
5657 actions: model.actions
5758 notificationId: model.id
5859 notification: notificationList.model.getRaw(notificationId)
5960 maxHeight: notificationList.height
6061 margins: notificationList.margin
62+ hasMouse: notificationList.hasMouse
6163
6264 // make sure there's no opacity-difference between the several
6365 // elements in a notification
qml/Notifications/SwipeToAct.qml+37−2
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 20014-2015 Canonical, Ltd.
2+ * Copyright (C) 2014-2015 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -20,7 +20,7 @@ import Ubuntu.Components 1.3
2020Item {
2121 id: swipeToAct
2222
23− height: childrenRect.height
23+ height: clickToAct ? leftButton.height : childrenRect.height
2424
2525 signal leftTriggered()
2626 signal rightTriggered()
@@ -28,6 +28,8 @@ Item {
2828 property string leftIconName
2929 property string rightIconName
3030
31+ property bool clickToAct
32+
3133 QtObject {
3234 id: priv
3335
@@ -64,15 +66,45 @@ Item {
6466 }
6567 }
6668
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+
6797 UbuntuShape {
6898 id: row
6999 width: parent.width
70100 height: priv.sliderHeight
71101 color: priv.sliderBGColor
72102 borderSource: "none"
103+ visible: !clickToAct
73104
74105 UbuntuShape {
75106 id: leftShape
107+ objectName: "leftArea"
76108 anchors.top: parent.top
77109 anchors.left: parent.left
78110 anchors.margins: priv.gap
@@ -167,6 +199,7 @@ Item {
167199 color: "white"
168200 }
169201 }
202+
170203 Row {
171204 anchors.verticalCenter: parent.verticalCenter
172205 anchors.left: slider.right
@@ -189,6 +222,7 @@ Item {
189222
190223 UbuntuShape {
191224 id: rightShape
225+ objectName: "rightArea"
192226 anchors.top: parent.top
193227 anchors.right: parent.right
194228 anchors.margins: priv.gap
@@ -214,6 +248,7 @@ Item {
214248 MouseArea {
215249 id: mouseArea
216250 objectName: "swipeMouseArea"
251+ enabled: !clickToAct
217252
218253 anchors.fill: row
219254 drag.target: slider
qml/OrientedShell.qml+1
@@ -155,6 +155,7 @@ Rectangle {
155155 nativeWidth: root.width
156156 nativeHeight: root.height
157157 mode: applicationArguments.mode
158+ hasMouse: UnityInputInfo.mice > deviceConfiguration.ignoredMice
158159
159160 // TODO: Factor in the connected input devices (eg: physical keyboard, mouse, touchscreen),
160161 // what's the output device (eg: big TV, desktop monitor, phone display), etc.
qml/Panel/IndicatorItem.qml+1−1
@@ -243,7 +243,7 @@ IndicatorDelegate {
243243 return;
244244 }
245245
246− title = rootActionState.title ? rootActionState.title : "";
246+ title = rootActionState.title ? rootActionState.title : rootActionState.accessibleName;
247247 leftLabel = rootActionState.leftLabel ? rootActionState.leftLabel : "";
248248 rightLabel = rootActionState.rightLabel ? rootActionState.rightLabel : "";
249249 icons = rootActionState.icons;
qml/Panel/IndicatorPage.qml+1−1
@@ -23,7 +23,7 @@ IndicatorBase {
2323 id: main
2424
2525 //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
2727 property alias highlightFollowsCurrentItem : mainMenu.highlightFollowsCurrentItem
2828 readonly property alias factory: _factory
2929
qml/Panel/Indicators/IndicatorDelegate.qml+1−1
@@ -21,5 +21,5 @@ import QtQuick 2.0
2121
2222IndicatorBase {
2323 readonly property bool indicatorVisible: rootActionState.indicatorVisible
24− readonly property string title: rootActionState.title
24+ readonly property string title: rootActionState.title || rootActionState.accessibleName
2525}
qml/Panel/Indicators/MenuItemFactory.qml+91−3
@@ -12,9 +12,6 @@
1212 *
1313 * You should have received a copy of the GNU Lesser General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Nick Dedekind <nick.dedekind@canonical.com>
1815 */
1916
2017import QtQuick 2.0
@@ -24,6 +21,7 @@ import QMenuModel 0.1
2421import Utils 0.1 as Utils
2522import Ubuntu.Components.ListItems 1.3 as ListItems
2623import Ubuntu.Components 1.3
24+import Unity.Session 0.1
2725
2826Item {
2927 id: menuFactory
@@ -60,6 +58,12 @@ Item {
6058 "unity.widgets.systemsettings.tablet.wifisection" : wifiSection,
6159 "unity.widgets.systemsettings.tablet.accesspoint" : accessPoint,
6260 "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
6367 },
6468 "indicator-messages" : {
6569 "com.canonical.indicator.button" : messagesButtonMenu
@@ -422,6 +426,90 @@ Item {
422426 }
423427 }
424428
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+
425513 Component {
426514 id: wifiSection;
427515
qml/Panel/Indicators/MessageMenuItemFactory.qml+1−1
@@ -145,7 +145,7 @@ Loader {
145145 title: menuData && menuData.label || ""
146146 time: timeFormatter.timeString
147147 body: getExtendedProperty(extendedData, "xCanonicalText", "")
148− replyButtonText: getExtendedProperty(replyActionDescription, "label", "Send")
148+ replyButtonText: getExtendedProperty(replyActionDescription, "label", i18n.tr("Send"))
149149 replyHintText: i18n.ctr("Label: Hint in message indicator line edit", "Reply")
150150 // icons
151151 avatar: getExtendedProperty(extendedData, "icon", "image://theme/contact")
qml/Panel/Indicators/client/IndicatorRepresentation.qml+3−1
@@ -26,7 +26,9 @@ import "../.."
2626Page {
2727 id: root
2828
29− title: indicatorProperties && indicatorProperties.title ? indicatorProperties.title : ""
29+ title: indicatorProperties && indicatorProperties.title ? indicatorProperties.title :
30+ indicatorProperties && indicatorProperties.accessibleName ? indicatorProperties.accessibleName
31+ : ""
3032 property variant indicatorProperties
3133
3234 anchors.fill: parent
qml/Shell.qml+2
@@ -63,6 +63,7 @@ Item {
6363 function updateFocusedAppOrientationAnimated() {
6464 applicationsDisplayLoader.item.updateFocusedAppOrientationAnimated();
6565 }
66+ property bool hasMouse
6667
6768 // to be read from outside
6869 readonly property int mainAppWindowOrientationAngle:
@@ -636,6 +637,7 @@ Item {
636637
637638 model: NotificationBackend.Model
638639 margin: units.gu(1)
640+ hasMouse: shell.hasMouse
639641
640642 y: topmostIsFullscreen ? 0 : panel.panelHeight
641643 height: parent.height - (topmostIsFullscreen ? 0 : panel.panelHeight)
qml/Stages/ApplicationWindow.qml+3
@@ -20,6 +20,8 @@ import Unity.Application 0.1
2020
2121FocusScope {
2222 id: root
23+ implicitWidth: sessionContainer.implicitWidth
24+ implicitHeight: sessionContainer.implicitHeight
2325
2426 // to be read from outside
2527 readonly property bool fullscreen: application ? application.fullscreen : false
@@ -29,6 +31,7 @@ FocusScope {
2931 // to be set from outside
3032 property QtObject application
3133 property int surfaceOrientationAngle
34+ property alias resizeSurface: sessionContainer.resizeSurface
3235
3336 QtObject {
3437 id: d
qml/Stages/DecoratedWindow.qml+10−51
@@ -31,37 +31,10 @@ FocusScope {
3131 property bool highlightShown: false
3232 property real shadowOpacity: 1
3333
34− property int windowWidth: width
35− property int windowHeight: height
36−
3734 signal close();
3835 signal maximize();
3936 signal minimize();
4037
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−
6538 BorderImage {
6639 anchors {
6740 fill: root
@@ -98,29 +71,15 @@ FocusScope {
9871 visible: decorationShown
9972 }
10073
101− Item {
102− id: clipper
103− anchors.fill: parent
104−
105− ApplicationWindow {
106− id: applicationWindow
107− objectName: application ? "appWindow_" + application.appId : "appWindow_null"
108− anchors.top: parent.top
109− anchors.topMargin: root.decorationShown ? decoration.height : 0
110− anchors.left: parent.left
111− width: root.windowWidth
112− height: root.windowHeight - (root.decorationShown ? decoration.height : 0)
113− interactive: true
114− 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− }
74+ ApplicationWindow {
75+ id: applicationWindow
76+ objectName: application ? "appWindow_" + application.appId : "appWindow_null"
77+ anchors.top: parent.top
78+ anchors.topMargin: decoration.height
79+ anchors.left: parent.left
80+ width: root.width
81+ height: root.height - decoration.height
82+ interactive: true
83+ focus: true
12584 }
12685}
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
2020import QtQuick.Layouts 1.1
2121import Ubuntu.Components 1.3
2222import Unity.Application 0.1
23+import "../Components"
2324import "../Components/PanelState"
2425import Utils 0.1
2526import Ubuntu.Gestures 0.1
@@ -41,6 +42,8 @@ Rectangle {
4142 property bool beingResized: false
4243 property bool keepDashRunning: true
4344 property bool suspended: false
45+ property alias background: wallpaper.source
46+ property alias altTabPressed: spread.altTabPressed
4447
4548 // functions to be called from outside
4649 function updateFocusedAppOrientation() { /* TODO */ }
@@ -53,21 +56,11 @@ Rectangle {
5356 property int mainAppWindowOrientationAngle: 0
5457 readonly property bool orientationChangesEnabled: false
5558
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−
6659 Connections {
6760 target: ApplicationManager
6861 onApplicationAdded: {
69− if (root.state == "altTab") {
70− root.state = "";
62+ if (spread.state == "altTab") {
63+ spread.state = "";
7164 }
7265
7366 ApplicationManager.requestFocusApplication(appId)
@@ -77,7 +70,11 @@ Rectangle {
7770 var appIndex = priv.indexOf(appId);
7871 var appDelegate = appRepeater.itemAt(appIndex);
7972 appDelegate.minimized = false;
80− appDelegate.focus = true;
73+ ApplicationManager.focusApplication(appId)
74+
75+ if (spread.state == "altTab") {
76+ spread.cancel()
77+ }
8178 }
8279 }
8380
@@ -115,72 +112,17 @@ Rectangle {
115112 value: priv.focusedAppDelegate !== null && priv.focusedAppDelegate.state === "maximized"
116113 }
117114
118− Rectangle {
119− id: spreadBackground
120− anchors.fill: parent
121− color: "#55000000"
122− visible: false
123− }
124−
125115 FocusScope {
126116 id: appContainer
127117 objectName: "appContainer"
128118 anchors.fill: parent
129− focus: true
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− }
119+ focus: spread.state !== "altTab"
165120
166− function selectPrevious(isAutoRepeat) {
167− if (isAutoRepeat && appRepeater.highlightedIndex == 0) {
168− return; // AutoRepeat is not allowed to wrap around
169− }
170−
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− }
121+ CrossFadeImage {
122+ id: wallpaper
123+ anchors.fill: parent
124+ sourceSize { height: root.height; width: root.width }
125+ fillMode: Image.PreserveAspectCrop
184126 }
185127
186128 Repeater {
@@ -188,30 +130,13 @@ Rectangle {
188130 model: ApplicationManager
189131 objectName: "appRepeater"
190132
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−
203133 delegate: FocusScope {
204134 id: appDelegate
205135 z: ApplicationManager.count - index
206136 y: units.gu(3)
207137 width: units.gu(60)
208138 height: units.gu(50)
209−
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
139+ focus: model.appId === priv.focusedAppId
215140
216141 readonly property int minWidth: units.gu(10)
217142 readonly property int minHeight: units.gu(10)
@@ -225,13 +150,6 @@ Rectangle {
225150 }
226151 }
227152
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−
235153 Binding {
236154 target: ApplicationManager.get(index)
237155 property: "requestedState"
@@ -256,63 +174,17 @@ Rectangle {
256174 maximized = false;
257175 }
258176
259− Behavior on x {
260− id: closeBehavior
261− enabled: appRepeater.closingIndex >= 0
262− UbuntuNumberAnimation {
263− onRunningChanged: if (!running) appRepeater.closingIndex = -1
264− }
265− }
266−
267177 states: [
268178 State {
269− name: "normal"; when: !appDelegate.maximized && !appDelegate.minimized && root.state !== "altTab"
179+ name: "normal"; when: !appDelegate.maximized && !appDelegate.minimized
270180 },
271181 State {
272− name: "maximized"; when: appDelegate.maximized && (root.state !== "altTab" || (root.state == "altTab" && !root.workspacesUpdated))
182+ name: "maximized"; when: appDelegate.maximized
273183 PropertyChanges { target: appDelegate; x: 0; y: 0; width: root.width; height: root.height }
274184 },
275185 State {
276− name: "minimized"; when: appDelegate.minimized && (root.state !== "altTab" || (root.state == "altTab" && !root.workspacesUpdated))
186+ name: "minimized"; when: appDelegate.minimized
277187 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− }
316188 }
317189 ]
318190 transitions: [
@@ -334,18 +206,13 @@ Rectangle {
334206 }
335207 }
336208 ]
337− property real angle: 0
338− property real itemScale: 1
339− property int itemScaleOriginX: 0
340− property int itemScaleOriginY: 0
341−
342− SpreadMaths {
343− id: spreadMaths
344− flickable: spreadFlickable
345− itemIndex: index
346− totalItems: Math.max(6, ApplicationManager.count)
347− sceneHeight: root.height
348− itemHeight: appDelegate.height
209+
210+ Binding {
211+ id: previewBinding
212+ target: appDelegate
213+ property: "z"
214+ value: ApplicationManager.count + 1
215+ when: index == spread.highlightedIndex && blurLayer.ready
349216 }
350217
351218 WindowMoveResizeArea {
@@ -356,7 +223,7 @@ Rectangle {
356223 resizeHandleWidth: units.gu(2)
357224 windowId: model.appId // FIXME: Change this to point to windowId once we have such a thing
358225
359− onPressed: { appDelegate.focus = true; }
226+ onPressed: { ApplicationManager.focusApplication(model.appId) }
360227 }
361228
362229 DecoratedWindow {
@@ -364,8 +231,8 @@ Rectangle {
364231 objectName: "decoratedWindow"
365232 anchors.left: appDelegate.left
366233 anchors.top: appDelegate.top
367− windowWidth: appDelegate.windowWidth
368− windowHeight: appDelegate.windowHeight
234+ width: appDelegate.width
235+ height: appDelegate.height
369236 application: ApplicationManager.get(index)
370237 active: ApplicationManager.focusedApplicationId === model.appId
371238 focus: true
@@ -373,324 +240,37 @@ Rectangle {
373240 onClose: ApplicationManager.stopApplication(model.appId)
374241 onMaximize: appDelegate.maximize()
375242 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− }
470243 }
471244 }
472245 }
473246 }
474247
475− MouseArea {
476− id: hoverMouseArea
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"
248+ BlurLayer {
249+ id: blurLayer
526250 anchors.fill: parent
527− property int minContentWidth: 6 * Math.min(height / 4, width / 5)
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
251+ source: appContainer
553252 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− }
628253 }
629254
630− Label {
631− id: currentSelectedLabel
632− anchors { bottom: parent.bottom; bottomMargin: root.height * 0.625; horizontalCenter: parent.horizontalCenter }
633− text: appRepeater.highlightedIndex >= 0 ? ApplicationManager.get(appRepeater.highlightedIndex).name : ""
255+ Rectangle {
256+ id: spreadBackground
257+ anchors.fill: parent
258+ color: "#55000000"
634259 visible: false
635− fontSize: "large"
636260 }
637261
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−
679262 MouseArea {
680− id: rightEdgePushArea
681− anchors {
682− top: parent.top
683− right: parent.right
684− bottom: parent.bottom
685− }
686− // TODO: Make this a push to edge thing like the launcher when we can,
687− // for now, yes, we want 1 pixel, regardless of the scaling
688− width: 1
689− hoverEnabled: true
690− onContainsMouseChanged: {
691− if (containsMouse) {
692− root.state = "altTab";
693− }
694− }
263+ id: eventEater
264+ anchors.fill: parent
265+ visible: spreadBackground.visible
266+ enabled: visible
267+ }
268+
269+ DesktopSpread {
270+ id: spread
271+ objectName: "spread"
272+ anchors.fill: parent
273+ workspace: appContainer
274+ focus: state == "altTab"
695275 }
696276}
qml/Stages/PhoneStage.qml+15−7
@@ -48,17 +48,12 @@ Rectangle {
4848 onBeingResizedChanged: {
4949 if (beingResized) {
5050 // Brace yourselves for impact!
51− spreadView.selectedIndex = -1;
52− spreadView.phase = 0;
53− spreadView.contentX = -spreadView.shift;
51+ priv.reset();
5452 }
5553 }
5654 onSpreadEnabledChanged: {
5755 if (!spreadEnabled) {
58− // reset. go back to display the focused app
59− spreadView.selectedIndex = -1;
60− spreadView.phase = 0;
61− spreadView.contentX = -spreadView.shift;
56+ priv.reset();
6257 }
6358 }
6459 function updateFocusedAppOrientation() {
@@ -94,6 +89,7 @@ Rectangle {
9489 readonly property var mainApp: applicationManager.focusedApplicationId
9590 ? applicationManager.findApplication(applicationManager.focusedApplicationId)
9691 : null
92+
9793 property int mainAppWindowOrientationAngle: 0
9894 readonly property bool orientationChangesEnabled: priv.focusedAppOrientationChangesEnabled
9995 && !priv.focusedAppDelegateIsDislocated
@@ -216,6 +212,18 @@ Rectangle {
216212 // Is more stable than "spreadView.shiftedContentX === 0" as it filters out noise caused by
217213 // Flickable.contentX changing due to resizes.
218214 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+ }
219227 }
220228 Timer {
221229 id: fullyShowingFocusedAppUpdateTimer
qml/Stages/SessionContainer.qml+3
@@ -20,11 +20,14 @@ import "Animations"
2020FocusScope {
2121 id: root
2222 objectName: "sessionContainer"
23+ implicitWidth: _surfaceContainer.implicitWidth
24+ implicitHeight: _surfaceContainer.implicitHeight
2325 property QtObject session
2426 readonly property var childSessions: session ? session.childSessions : null
2527 readonly property alias surface: _surfaceContainer.surface
2628 property alias interactive: _surfaceContainer.interactive
2729 property alias surfaceOrientationAngle: _surfaceContainer.surfaceOrientationAngle
30+ property alias resizeSurface: _surfaceContainer.resizeSurface
2831
2932 readonly property alias surfaceContainer: _surfaceContainer
3033 SurfaceContainer {
qml/Stages/SpreadDelegate.qml+1−1
@@ -268,7 +268,7 @@ FocusScope {
268268 focus: true
269269 anchors {
270270 fill: parent
271− topMargin: appWindow.fullscreen || application.rotatesWindowContents
271+ topMargin: appWindow.fullscreen || (application && application.rotatesWindowContents)
272272 ? 0 : maximizedAppTopMargin
273273 }
274274
qml/Stages/SurfaceContainer.qml+3−2
@@ -28,6 +28,7 @@ FocusScope {
2828 property bool hadSurface: false
2929 property bool interactive
3030 property int surfaceOrientationAngle: 0
31+ property bool resizeSurface: true
3132
3233 onSurfaceChanged: {
3334 if (surface) {
@@ -52,8 +53,8 @@ FocusScope {
5253
5354 consumesInput: true
5455
55− surfaceWidth: width
56− surfaceHeight: height
56+ surfaceWidth: root.resizeSurface ? width : -1
57+ surfaceHeight: root.resizeSurface ? height : -1
5758
5859 anchors.fill: root
5960 enabled: root.interactive
qml/Stages/WindowMoveResizeArea.qml+1−1
@@ -104,6 +104,6 @@ MouseArea {
104104 }
105105
106106 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))
108108 }
109109}
src/ApplicationArguments.h+2−2
@@ -31,10 +31,10 @@ class ApplicationArguments : public QObject
3131public:
3232 ApplicationArguments(QObject *parent = nullptr);
3333
34− void setDeviceName(QString deviceName) { m_deviceName = deviceName; }
34+ void setDeviceName(const QString &deviceName) { m_deviceName = deviceName; }
3535 QString deviceName() const { return m_deviceName; }
3636
37− void setMode(QString mode) { m_mode = mode; }
37+ void setMode(const QString &mode) { m_mode = mode; }
3838 QString mode() const { return m_mode; }
3939
4040private:
src/CachingNetworkManagerFactory.cpp+1−1
@@ -46,7 +46,7 @@ QNetworkAccessManager *CachingNetworkManagerFactory::create(QObject *parent) {
4646 QNetworkAccessManager *manager = new CachingNetworkAccessManager(parent);
4747
4848 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)));
5050
5151 manager->setCache(cache);
5252 return manager;
src/Dash/main.cpp+11−11
@@ -36,20 +36,20 @@ int main(int argc, const char *argv[])
3636 QGuiApplication *application = new QGuiApplication(argc, (char**)argv);
3737
3838 QCommandLineParser parser;
39− parser.setApplicationDescription("Description: Unity 8 Shell Dash");
39+ parser.setApplicationDescription(QStringLiteral("Description: Unity 8 Shell Dash"));
4040 parser.addHelpOption();
4141
42− QCommandLineOption mousetouchOption("mousetouch",
43− "Allow the mouse to provide touch input");
42+ QCommandLineOption mousetouchOption(QStringLiteral("mousetouch"),
43+ QStringLiteral("Allow the mouse to provide touch input"));
4444 parser.addOption(mousetouchOption);
4545
46− QCommandLineOption windowGeometryOption(QStringList() << "windowgeometry",
47− "Specify the window geometry as [<width>x<height>]", "windowgeometry", "1");
46+ QCommandLineOption windowGeometryOption(QStringList() << QStringLiteral("windowgeometry"),
47+ QStringLiteral("Specify the window geometry as [<width>x<height>]"), QStringLiteral("windowgeometry"), QStringLiteral("1"));
4848 parser.addOption(windowGeometryOption);
4949
5050 // FIXME Remove once we drop the need of the hint
51− QCommandLineOption desktopFileHintOption("desktop_file_hint",
52− "The desktop_file_hint option for QtMir", "hint_file");
51+ QCommandLineOption desktopFileHintOption(QStringLiteral("desktop_file_hint"),
52+ QStringLiteral("The desktop_file_hint option for QtMir"), QStringLiteral("hint_file"));
5353 parser.addOption(desktopFileHintOption);
5454
5555 // Treat args with single dashes the same as arguments with two dashes
@@ -60,7 +60,7 @@ int main(int argc, const char *argv[])
6060 ApplicationArguments qmlArgs;
6161
6262 if (getenv("QT_LOAD_TESTABILITY")) {
63− QLibrary testLib(QLatin1String("qttestability"));
63+ QLibrary testLib(QStringLiteral("qttestability"));
6464 if (testLib.load()) {
6565 typedef void (*TasInitialize)(void);
6666 TasInitialize initFunction = (TasInitialize)testLib.resolve("qt_testability_init");
@@ -91,8 +91,8 @@ int main(int argc, const char *argv[])
9191 }
9292 }
9393
94− view->setTitle("Scopes");
95− view->rootContext()->setContextProperty("applicationArguments", &qmlArgs);
94+ view->setTitle(QStringLiteral("Scopes"));
95+ view->rootContext()->setContextProperty(QStringLiteral("applicationArguments"), &qmlArgs);
9696
9797 // You will need this if you want to interact with touch-only components using a mouse
9898 // Needed only when manually testing on a desktop.
@@ -101,7 +101,7 @@ int main(int argc, const char *argv[])
101101 mouseTouchAdaptor = MouseTouchAdaptor::instance();
102102 }
103103
104− QUrl source(::qmlDirectory()+"Dash/DashApplication.qml");
104+ QUrl source(::qmlDirectory() + "/Dash/DashApplication.qml");
105105 prependImportPaths(view->engine(), ::overrideImportPaths());
106106 appendImportPaths(view->engine(), ::fallbackImportPaths());
107107
src/Panel/Indicators/client/indicatorsclient.cpp+8−8
@@ -36,20 +36,20 @@ IndicatorsClient::IndicatorsClient(int &argc, char **argv)
3636 QStringList args = m_application->arguments();
3737
3838 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/"));
4040 prependImportPaths(m_view->engine(), ::overrideImportPaths());
4141 appendImportPaths(m_view->engine(), ::fallbackImportPaths());
4242
43− QString profile = "phone";
44− if (args.contains(QLatin1String("-profile")) && args.size() > args.indexOf(QLatin1String("-profile")) + 1) {
45− profile = args.at(args.indexOf(QLatin1String("-profile")) + 1);
43+ QString profile = QStringLiteral("phone");
44+ if (args.contains(QStringLiteral("-profile")) && args.size() > args.indexOf(QStringLiteral("-profile")) + 1) {
45+ profile = args.at(args.indexOf(QStringLiteral("-profile")) + 1);
4646 }
47− m_view->rootContext()->setContextProperty("indicatorProfile", profile);
47+ m_view->rootContext()->setContextProperty(QStringLiteral("indicatorProfile"), profile);
4848
49− m_view->setSource(QUrl("IndicatorsClient.qml"));
49+ m_view->setSource(QUrl(QStringLiteral("IndicatorsClient.qml")));
5050 m_view->setResizeMode(QQuickView::SizeRootObjectToView);
51− if (args.contains(QLatin1String("-windowgeometry")) && args.size() > args.indexOf(QLatin1String("-windowgeometry")) + 1) {
52− QStringList geometryArg = args.at(args.indexOf(QLatin1String("-windowgeometry")) + 1).split('x');
51+ if (args.contains(QStringLiteral("-windowgeometry")) && args.size() > args.indexOf(QStringLiteral("-windowgeometry")) + 1) {
52+ QStringList geometryArg = args.at(args.indexOf(QStringLiteral("-windowgeometry")) + 1).split('x');
5353 if (geometryArg.size() == 2) {
5454 m_view->resize(geometryArg.at(0).toInt(), geometryArg.at(1).toInt());
5555 }
src/UnityCommandLineParser.cpp+25−24
@@ -26,36 +26,36 @@ UnityCommandLineParser::UnityCommandLineParser(const QCoreApplication &app)
2626 m_gridUnit = getenvFloat(ENV_GRID_UNIT_PX, DEFAULT_GRID_UNIT_PX);
2727
2828 QCommandLineParser parser;
29− parser.setApplicationDescription("Description: Unity 8 Shell");
29+ parser.setApplicationDescription(QStringLiteral("Description: Unity 8 Shell"));
3030 parser.addHelpOption();
3131
32− QCommandLineOption fullscreenOption("fullscreen",
33− "Run in fullscreen");
32+ QCommandLineOption fullscreenOption(QStringLiteral("fullscreen"),
33+ QStringLiteral("Run in fullscreen"));
3434 parser.addOption(fullscreenOption);
3535
36− QCommandLineOption framelessOption("frameless",
37− "Run without window borders");
36+ QCommandLineOption framelessOption(QStringLiteral("frameless"),
37+ QStringLiteral("Run without window borders"));
3838 parser.addOption(framelessOption);
3939
40− QCommandLineOption mousetouchOption("mousetouch",
41− "Allow the mouse to provide touch input");
40+ QCommandLineOption mousetouchOption(QStringLiteral("mousetouch"),
41+ QStringLiteral("Allow the mouse to provide touch input"));
4242 parser.addOption(mousetouchOption);
4343
44− QCommandLineOption windowGeometryOption(QStringList() << "windowgeometry",
45− "Specify the window geometry as [<width>x<height>]", "windowgeometry", "1");
44+ QCommandLineOption windowGeometryOption(QStringList() << QStringLiteral("windowgeometry"),
45+ QStringLiteral("Specify the window geometry as [<width>x<height>]"), QStringLiteral("windowgeometry"), QStringLiteral("1"));
4646 parser.addOption(windowGeometryOption);
4747
48− QCommandLineOption testabilityOption("testability",
49− "DISCOURAGED: Please set QT_LOAD_TESTABILITY instead.\nLoad the testability driver");
48+ QCommandLineOption testabilityOption(QStringLiteral("testability"),
49+ QStringLiteral("DISCOURAGED: Please set QT_LOAD_TESTABILITY instead.\nLoad the testability driver"));
5050 parser.addOption(testabilityOption);
5151
52− QCommandLineOption devicenameOption(QStringList() << "devicename",
53− "Specify the device name instead of letting Unity 8 find it out", "devicename", "");
52+ QCommandLineOption devicenameOption(QStringList() << QStringLiteral("devicename"),
53+ QStringLiteral("Specify the device name instead of letting Unity 8 find it out"), QStringLiteral("devicename"), QLatin1String(""));
5454 parser.addOption(devicenameOption);
5555
56− QCommandLineOption modeOption("mode",
57− "Whether to run greeter and/or shell [full-greeter, full-shell, greeter, shell]",
58− "mode", "full-greeter");
56+ QCommandLineOption modeOption(QStringLiteral("mode"),
57+ QStringLiteral("Whether to run greeter and/or shell [full-greeter, full-shell, greeter, shell]"),
58+ QStringLiteral("mode"), QStringLiteral("full-greeter"));
5959 parser.addOption(modeOption);
6060
6161 // Treat args with single dashes the same as arguments with two dashes
@@ -83,7 +83,7 @@ UnityCommandLineParser::UnityCommandLineParser(const QCoreApplication &app)
8383
8484int UnityCommandLineParser::parsePixelsValue(const QString &str)
8585{
86− if (str.endsWith("gu", Qt::CaseInsensitive)) {
86+ if (str.endsWith(QLatin1String("gu"), Qt::CaseInsensitive)) {
8787 QString numStr = str;
8888 numStr.remove(numStr.size() - 2, 2);
8989 return numStr.toInt() * m_gridUnit;
@@ -105,13 +105,14 @@ void UnityCommandLineParser::resolveMode(QCommandLineParser &parser, QCommandLin
105105 // If an invalid option was specified, set it to the default
106106 // If no default was provided in the QCommandLineOption constructor, abort.
107107 if (!parser.isSet(modeOption) ||
108− (parser.value(modeOption) != "full-greeter" &&
109− parser.value(modeOption) != "full-shell" &&
110− parser.value(modeOption) != "greeter" &&
111− parser.value(modeOption) != "shell")) {
112−
113− if (modeOption.defaultValues().first() != nullptr) {
114− m_mode = modeOption.defaultValues().first();
108+ (parser.value(modeOption) != QLatin1String("full-greeter") &&
109+ parser.value(modeOption) != QLatin1String("full-shell") &&
110+ parser.value(modeOption) != QLatin1String("greeter") &&
111+ parser.value(modeOption) != QLatin1String("shell"))) {
112+
113+ const QStringList defaultValues = modeOption.defaultValues();
114+ if (!defaultValues.isEmpty()) {
115+ m_mode = defaultValues.first();
115116 qWarning() << "Mode argument was not provided or was set to an illegal value."
116117 " Using default value of --mode=" << m_mode;
117118 } else {
src/libunity8-private/unitydbusobject.cpp+2−2
@@ -64,8 +64,8 @@ void UnityDBusObject::notifyPropertyChanged(const QString& propertyName, const Q
6464 changedProps.insert(propertyName, value);
6565
6666 message = QDBusMessage::createSignal(path(),
67− "org.freedesktop.DBus.Properties",
68− "PropertiesChanged");
67+ QStringLiteral("org.freedesktop.DBus.Properties"),
68+ QStringLiteral("PropertiesChanged"));
6969 message << interface;
7070 message << changedProps;
7171 message << QStringList();
src/libunity8-private/unitydbusvirtualobject.cpp+2−2
@@ -61,8 +61,8 @@ void UnityDBusVirtualObject::notifyPropertyChanged(const QString& interface, con
6161 changedProps.insert(propertyName, value);
6262
6363 message = QDBusMessage::createSignal(path() + "/" + node,
64− "org.freedesktop.DBus.Properties",
65− "PropertiesChanged");
64+ QStringLiteral("org.freedesktop.DBus.Properties"),
65+ QStringLiteral("PropertiesChanged"));
6666 message << interface;
6767 message << changedProps;
6868 message << QStringList();
src/main.cpp+5−5
@@ -43,7 +43,7 @@ int main(int argc, const char *argv[])
4343 isMirServer = true;
4444 }
4545
46− QGuiApplication::setApplicationName("unity8");
46+ QGuiApplication::setApplicationName(QStringLiteral("unity8"));
4747 QGuiApplication *application;
4848
4949 application = new QGuiApplication(argc, (char**)argv);
@@ -65,7 +65,7 @@ int main(int argc, const char *argv[])
6565 // The testability driver is only loaded by QApplication but not by QGuiApplication.
6666 // However, QApplication depends on QWidget which would add some unneeded overhead => Let's load the testability driver on our own.
6767 if (parser.hasTestability() || getenv("QT_LOAD_TESTABILITY")) {
68− QLibrary testLib(QLatin1String("qttestability"));
68+ QLibrary testLib(QStringLiteral("qttestability"));
6969 if (testLib.load()) {
7070 typedef void (*TasInitialize)(void);
7171 TasInitialize initFunction = (TasInitialize)testLib.resolve("qt_testability_init");
@@ -85,7 +85,7 @@ int main(int argc, const char *argv[])
8585 QQuickView* view = new QQuickView();
8686 view->setResizeMode(QQuickView::SizeRootObjectToView);
8787 view->setColor("black");
88− view->setTitle("Unity8 Shell");
88+ view->setTitle(QStringLiteral("Unity8 Shell"));
8989
9090 if (parser.windowGeometry().isValid()) {
9191 view->setWidth(parser.windowGeometry().width());
@@ -93,7 +93,7 @@ int main(int argc, const char *argv[])
9393 }
9494
9595 view->engine()->setBaseUrl(QUrl::fromLocalFile(::qmlDirectory()));
96− view->rootContext()->setContextProperty("applicationArguments", &qmlArgs);
96+ view->rootContext()->setContextProperty(QStringLiteral("applicationArguments"), &qmlArgs);
9797 if (parser.hasFrameless()) {
9898 view->setFlags(Qt::FramelessWindowHint);
9999 }
@@ -105,7 +105,7 @@ int main(int argc, const char *argv[])
105105 mouseTouchAdaptor = MouseTouchAdaptor::instance();
106106 }
107107
108− QUrl source(::qmlDirectory()+"OrientedShell.qml");
108+ QUrl source(::qmlDirectory() + "/OrientedShell.qml");
109109 prependImportPaths(view->engine(), ::overrideImportPaths());
110110 if (!isMirServer) {
111111 prependImportPaths(view->engine(), ::nonMirImportPaths());
tests/CMakeLists.txt+9−3
@@ -22,11 +22,17 @@ add_subdirectory(uqmlscene)
2222add_executable(qmlscene ALIAS uqmlscene)
2323import_executables(dbus-test-runner)
2424
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
2529set(UNITY_IMPORT_PATHS
30+ ${UNITY_MOCKPATH}
2631 ${CMAKE_BINARY_DIR}/tests/mocks
2732 ${CMAKE_BINARY_DIR}/tests/utils/modules
28− ${CMAKE_BINARY_DIR}/plugins
33+ ${UNITY_PLUGINPATH}
2934)
35+list(REMOVE_DUPLICATES UNITY_IMPORT_PATHS)
3036set(UNITY_IMPORT_PATHS ${UNITY_IMPORT_PATHS} CACHE INTERNAL "")
3137
3238macro(unity8_parse_arguments)
@@ -40,8 +46,8 @@ macro(unity8_parse_arguments)
4046 set(ld_paths)
4147 if(U8TEST_LIGHTDM)
4248 list(APPEND ld_paths
43− ${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics
44− ${CMAKE_BINARY_DIR}/tests/mocks/LightDM/liblightdm
49+ ${UNITY_MOCKPATH}/libusermetrics
50+ ${UNITY_MOCKPATH}/IntegratedLightDM/liblightdm
4551 )
4652 endif()
4753
tests/autopilot/unity8/fixture_setup.py+1−1
@@ -74,7 +74,7 @@ class LaunchUnityWithFakeSensors(fixtures.Fixture):
7474 def _get_lightdm_mock_path(self):
7575 lib_path = get_mocks_library_path()
7676 lightdm_mock_path = os.path.abspath(
77− os.path.join(lib_path, "LightDM", "liblightdm")
77+ os.path.join(lib_path, "IntegratedLightDM", "liblightdm")
7878 )
7979
8080 if not os.path.exists(lightdm_mock_path):
tests/autopilot/unity8/indicators/tests/test_indicators.py+10−13
@@ -16,9 +16,11 @@
1616# You should have received a copy of the GNU General Public License
1717# along with this program. If not, see <http://www.gnu.org/licenses/>.
1818
19+import platform
20+
1921from testscenarios import multiply_scenarios
2022
21−from autopilot import platform
23+import autopilot.platform
2224
2325from unity8.indicators import tests
2426
@@ -39,12 +41,6 @@ class IndicatorExistsTestCase(tests.DeviceIndicatorTestCase):
3941 tests.IndicatorTestCase.device_emulation_scenarios
4042 )
4143
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−
4844 def test_indicator_exists(self):
4945 self.main_window._get_indicator_panel_item(
5046 self.indicator_name
@@ -74,12 +70,6 @@ class IndicatorPageTitleMatchesWidgetTestCase(tests.DeviceIndicatorTestCase):
7470 tests.IndicatorTestCase.device_emulation_scenarios
7571 )
7672
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−
8373 def test_indicator_page_title_matches_widget(self):
8474 """Swiping open an indicator must show its correct title.
8575
@@ -87,5 +77,12 @@ class IndicatorPageTitleMatchesWidgetTestCase(tests.DeviceIndicatorTestCase):
8777 """
8878 indicator_page = self.main_window.open_indicator_page(
8979 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)
9087 self.assertTrue(indicator_page.visible)
9188 self.assertEqual(indicator_page.title, self.title)
tests/autopilot/unity8/shell/tests/__init__.py+1−1
@@ -261,7 +261,7 @@ class UnityTestCase(AutopilotTestCase):
261261 def _get_lightdm_mock_path(self):
262262 lib_path = get_mocks_library_path()
263263 lightdm_mock_path = os.path.abspath(
264− os.path.join(lib_path, "LightDM", "liblightdm")
264+ os.path.join(lib_path, "IntegratedLightDM", "liblightdm")
265265 )
266266
267267 if not os.path.exists(lightdm_mock_path):
tests/mocks/AccountsService/AccountsService.cpp+1−1
@@ -24,7 +24,7 @@ AccountsService::AccountsService(QObject* parent)
2424 : QObject(parent),
2525 m_enableLauncherWhileLocked(true),
2626 m_enableIndicatorsWhileLocked(true),
27− m_backgroundFile(qmlDirectory() + "graphics/phone_background.jpg"),
27+ m_backgroundFile(qmlDirectory() + "/graphics/phone_background.jpg"),
2828 m_statsWelcomeScreen(true),
2929 m_failedLogins(0),
3030 m_demoEdges(false),
tests/mocks/IntegratedLightDM/liblightdm/CMakeLists.txt+1−1
@@ -14,5 +14,5 @@ set_target_properties(MockLightDM PROPERTIES
1414 OUTPUT_NAME lightdm-qt5-2)
1515
1616install(TARGETS MockLightDM
17− DESTINATION ${SHELL_INSTALL_QML}/mocks/LightDM/liblightdm
17+ DESTINATION ${SHELL_INSTALL_QML}/mocks/IntegratedLightDM/liblightdm
1818 )
tests/mocks/Ubuntu/CMakeLists.txt+1
@@ -5,3 +5,4 @@ add_subdirectory(SystemImage)
55add_subdirectory(SystemSettings)
66add_subdirectory(Telephony)
77add_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
1818 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/Mir.h
1919 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceInterface.h
2020 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceItemInterface.h
21+ resources/surfaces.qrc
2122)
2223
2324add_library(FakeUnityApplicationQml MODULE ${FakeUnityApplicationQml_SOURCES})
tests/mocks/Unity/Application/MirSurface.cpp+14−7
@@ -22,7 +22,7 @@ MirSurface::MirSurface(const QString& name,
2222 Mir::Type type,
2323 Mir::State state,
2424 const QUrl& screenshot,
25− const QString &qmlFilePath)
25+ const QUrl &qmlFilePath)
2626 : unity::shell::application::MirSurfaceInterface(nullptr)
2727 , m_name(name)
2828 , m_type(type)
@@ -36,12 +36,12 @@ MirSurface::MirSurface(const QString& name,
3636 , m_width(-1)
3737 , m_height(-1)
3838{
39− qDebug() << "MirSurface::MirSurface() " << name;
39+// qDebug() << "MirSurface::MirSurface() " << name;
4040}
4141
4242MirSurface::~MirSurface()
4343{
44− qDebug() << "MirSurface::~MirSurface() " << name();
44+// qDebug() << "MirSurface::~MirSurface() " << name();
4545}
4646
4747QString MirSurface::name() const
@@ -75,7 +75,7 @@ bool MirSurface::live() const
7575
7676void MirSurface::setLive(bool live)
7777{
78− qDebug().nospace() << "MirSurface::setLive("<<live<<") " << name();
78+// qDebug().nospace() << "MirSurface::setLive("<<live<<") " << name();
7979 if (live == m_live)
8080 return;
8181
@@ -87,7 +87,7 @@ void MirSurface::setLive(bool live)
8787 }
8888}
8989
90−QString MirSurface::qmlFilePath() const
90+QUrl MirSurface::qmlFilePath() const
9191{
9292 return m_qmlFilePath;
9393}
@@ -123,13 +123,13 @@ void MirSurface::setOrientationAngle(Mir::OrientationAngle angle)
123123void MirSurface::incrementViewCount()
124124{
125125 ++m_viewCount;
126− qDebug().nospace() << "MirSurface::incrementViewCount() viewCount(after)=" << m_viewCount << " " << name();
126+// qDebug().nospace() << "MirSurface::incrementViewCount() viewCount(after)=" << m_viewCount << " " << name();
127127}
128128
129129void MirSurface::decrementViewCount()
130130{
131131 --m_viewCount;
132− qDebug().nospace() << "MirSurface::decrementViewCount() viewCount(after)=" << m_viewCount << " " << name();
132+// qDebug().nospace() << "MirSurface::decrementViewCount() viewCount(after)=" << m_viewCount << " " << name();
133133
134134 Q_ASSERT(m_viewCount >= 0);
135135
@@ -170,13 +170,20 @@ int MirSurface::height() const
170170
171171void MirSurface::resize(int width, int height)
172172{
173+ bool changed = false;
173174 if (width != m_width) {
174175 m_width = width;
175176 Q_EMIT widthChanged();
177+ changed = true;
176178 }
177179
178180 if (m_height != height) {
179181 m_height = height;
180182 Q_EMIT heightChanged();
183+ changed = true;
184+ }
185+
186+ if (changed) {
187+ Q_EMIT sizeChanged(QSize(width, height));
181188 }
182189}
tests/mocks/Unity/Application/MirSurface.h+3−3
@@ -38,7 +38,7 @@ public:
3838 Mir::Type type,
3939 Mir::State state,
4040 const QUrl& screenshot,
41− const QString &qmlFilePath = QString());
41+ const QUrl &qmlFilePath = QUrl());
4242 virtual ~MirSurface();
4343
4444 ////
@@ -76,7 +76,7 @@ public:
7676 /////
7777 // internal mock stuff
7878
79− QString qmlFilePath() const;
79+ QUrl qmlFilePath() const;
8080
8181 QUrl screenshotUrl() const;
8282 void setScreenshotUrl(QUrl);
@@ -102,7 +102,7 @@ private:
102102 Mir::State m_state;
103103 Mir::OrientationAngle m_orientationAngle;
104104 QUrl m_screenshotUrl;
105− QString m_qmlFilePath;
105+ QUrl m_qmlFilePath;
106106 bool m_live;
107107 int m_viewCount;
108108 bool m_activeFocus;
tests/mocks/Unity/Application/MirSurfaceItem.cpp+11−12
@@ -38,7 +38,7 @@ MirSurfaceItem::MirSurfaceItem(QQuickItem *parent)
3838 , m_touchPressCount(0)
3939 , m_touchReleaseCount(0)
4040{
41− qDebug() << "MirSurfaceItem::MirSurfaceItem() " << (void*)(this) << name();
41+// qDebug() << "MirSurfaceItem::MirSurfaceItem() " << (void*)(this) << name();
4242 setAcceptedMouseButtons(Qt::LeftButton | Qt::MiddleButton | Qt::RightButton |
4343 Qt::ExtraButton1 | Qt::ExtraButton2 | Qt::ExtraButton3 | Qt::ExtraButton4 |
4444 Qt::ExtraButton5 | Qt::ExtraButton6 | Qt::ExtraButton7 | Qt::ExtraButton8 |
@@ -48,7 +48,7 @@ MirSurfaceItem::MirSurfaceItem(QQuickItem *parent)
4848
4949MirSurfaceItem::~MirSurfaceItem()
5050{
51− qDebug() << "MirSurfaceItem::~MirSurfaceItem() " << (void*)(this) << name();
51+// qDebug() << "MirSurfaceItem::~MirSurfaceItem() " << (void*)(this) << name();
5252 setSurface(nullptr);
5353}
5454
@@ -136,7 +136,7 @@ void MirSurfaceItem::onComponentStatusChanged(QQmlComponent::Status status)
136136
137137void MirSurfaceItem::createQmlContentItem()
138138{
139− qDebug() << "MirSurfaceItem::createQmlContentItem()";
139+// qDebug() << "MirSurfaceItem::createQmlContentItem()";
140140
141141 m_qmlItem = qobject_cast<QQuickItem*>(m_qmlContentComponent->create());
142142 m_qmlItem->setParentItem(this);
@@ -178,9 +178,9 @@ void MirSurfaceItem::mouseReleaseEvent(QMouseEvent * event)
178178
179179void MirSurfaceItem::setSurface(MirSurfaceInterface* surface)
180180{
181− qDebug().nospace() << "MirSurfaceItem::setSurface() this=" << (void*)(this)
182− << " name=" << name()
183− << " surface=" << surface;
181+// qDebug().nospace() << "MirSurfaceItem::setSurface() this=" << (void*)(this)
182+// << " name=" << name()
183+// << " surface=" << surface;
184184
185185 if (m_qmlSurface == surface) {
186186 return;
@@ -215,12 +215,11 @@ void MirSurfaceItem::setSurface(MirSurfaceInterface* surface)
215215 QQuickView *quickView =
216216 qobject_cast<QQuickView*>(QGuiApplication::topLevelWindows()[0]);
217217
218− QString qmlComponentFilePath;
218+ QUrl qmlComponentFilePath;
219219 if (!m_qmlSurface->qmlFilePath().isEmpty()) {
220− qmlComponentFilePath.append(m_qmlSurface->qmlFilePath());
220+ qmlComponentFilePath = m_qmlSurface->qmlFilePath();
221221 } else {
222− qmlComponentFilePath = QString("%1/Unity/Application/MirSurfaceItem.qml")
223− .arg(mockPluginsDir());
222+ qmlComponentFilePath = QUrl("qrc:///Unity/Application/MirSurfaceItem.qml");
224223 }
225224
226225 m_qmlContentComponent = new QQmlComponent(quickView->engine(), qmlComponentFilePath);
@@ -269,7 +268,7 @@ int MirSurfaceItem::surfaceWidth() const
269268
270269void MirSurfaceItem::setSurfaceWidth(int value)
271270{
272− if (m_surfaceWidth != value) {
271+ if (value != -1 && m_surfaceWidth != value) {
273272 m_surfaceWidth = value;
274273 Q_EMIT surfaceWidthChanged(m_surfaceWidth);
275274 updateSurfaceSize();
@@ -283,7 +282,7 @@ int MirSurfaceItem::surfaceHeight() const
283282
284283void MirSurfaceItem::setSurfaceHeight(int value)
285284{
286− if (m_surfaceHeight != value) {
285+ if (value != -1 && m_surfaceHeight != value) {
287286 m_surfaceHeight = value;
288287 Q_EMIT surfaceHeightChanged(m_surfaceHeight);
289288 updateSurfaceSize();
tests/mocks/Unity/Application/Session.cpp+4−4
@@ -35,14 +35,14 @@ Session::Session(const QString &name,
3535 , m_parentSession(nullptr)
3636 , m_children(new SessionModel(this))
3737{
38− qDebug() << "Session::Session() " << this->name();
38+// qDebug() << "Session::Session() " << this->name();
3939
4040 QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
4141}
4242
4343Session::~Session()
4444{
45− qDebug() << "Session::~Session() " << name();
45+// qDebug() << "Session::~Session() " << name();
4646
4747 QList<Session*> children(m_children->list());
4848 for (Session* child : children) {
@@ -67,7 +67,7 @@ Session::~Session()
6767
6868void Session::release()
6969{
70− qDebug() << "Session::release " << name();
70+// qDebug() << "Session::release " << name();
7171 deleteLater();
7272}
7373
@@ -82,7 +82,7 @@ void Session::setApplication(ApplicationInfo* application)
8282
8383void Session::setSurface(MirSurface* surface)
8484{
85− qDebug() << "Session::setSurface - session=" << name() << "surface=" << surface;
85+// qDebug() << "Session::setSurface - session=" << name() << "surface=" << surface;
8686 if (m_surface == surface)
8787 return;
8888
tests/mocks/Unity/Application/VirtualKeyboard.cpp+2−4
@@ -26,10 +26,8 @@ VirtualKeyboard::VirtualKeyboard()
2626 : MirSurface("input-method",
2727 Mir::InputMethodType,
2828 Mir::MinimizedState,
29− QString("file://%1/Dash/graphics/phone/screenshots/vkb_portrait.png")
30− .arg(qmlDirectory()),
31− QString("%1/Unity/Application/VirtualKeyboard.qml")
32− .arg(mockPluginsDir()))
29+ QUrl("qrc:///Unity/Application/vkb_portrait.png"),
30+ QUrl("qrc:///Unity/Application/VirtualKeyboard.qml"))
3331{
3432}
3533
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
2929 m_appId(appId),
3030 m_desktopFile(desktopFile),
3131 m_name(name),
32− m_icon(qmlDirectory() + "graphics/applicationIcons/" + icon + ".png"),
32+ m_icon(qmlDirectory() + "/graphics/applicationIcons/" + icon + ".png"),
3333 m_pinned(false),
3434 m_running(false),
3535 m_recent(false),
tests/mocks/Unity/Notifications/MockActionModel.cpp+1−1
@@ -59,7 +59,7 @@ QHash<int, QByteArray> ActionModel::roleNames() const {
5959 return roles;
6060}
6161
62−Q_INVOKABLE QVariant ActionModel::data(int row, int role) const
62+QVariant ActionModel::data(int row, int role) const
6363{
6464 return data(index(row, 0), role);
6565}
tests/mocks/Unity/Notifications/MockNotification.cpp+1
@@ -39,6 +39,7 @@ MockNotification::MockNotification(QObject *parent) : QObject(parent), p(new Moc
3939}
4040
4141MockNotification::~MockNotification() {
42+ delete p->actionsModel;
4243}
4344
4445QString MockNotification::getSummary() const {
tests/mocks/Unity/Notifications/MockNotification.h+1−1
@@ -30,7 +30,7 @@ struct MockNotificationPrivate;
3030
3131class MockNotification : public QObject {
3232 Q_OBJECT
33− Q_ENUMS(Type)
33+ Q_ENUMS(Type Urgency)
3434 Q_PROPERTY(QString summary READ getSummary WRITE setSummary NOTIFY summaryChanged)
3535 Q_PROPERTY(QString body READ getBody WRITE setBody NOTIFY bodyChanged)
3636 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
3535}
3636
3737MockNotificationModel::~MockNotificationModel() {
38+ Q_FOREACH(MockNotification *n, m_queue) {
39+ n->deleteLater();
40+ }
41+ m_queue.clear();
3842}
3943
4044int MockNotificationModel::rowCount(const QModelIndex &) const {
@@ -47,7 +51,7 @@ int MockNotificationModel::getCount() const {
4751
4852QVariant MockNotificationModel::data(const QModelIndex &index, int role) const {
4953 if (!index.isValid())
50− return QVariant();
54+ return QVariant();
5155
5256 switch(role) {
5357 case ModelInterface::RoleType:
tests/mocks/Unity/fake_previewstack.cpp+2−2
@@ -21,8 +21,8 @@
2121#include "fake_previewmodel.h"
2222#include "fake_scope.h"
2323
24−PreviewStack::PreviewStack(QObject* parent, Scope *scope)
25− : unity::shell::scopes::PreviewStackInterface(parent)
24+PreviewStack::PreviewStack(Scope *scope)
25+ : unity::shell::scopes::PreviewStackInterface(nullptr)
2626{
2727 m_previews << new PreviewModel(this, scope);
2828}
tests/mocks/Unity/fake_previewstack.h+1−1
@@ -32,7 +32,7 @@ class PreviewStack : public unity::shell::scopes::PreviewStackInterface
3232 Q_OBJECT
3333
3434public:
35− explicit PreviewStack(QObject* parent = 0, Scope* scope = 0);
35+ explicit PreviewStack(Scope* scope = 0);
3636 virtual ~PreviewStack();
3737
3838 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
7878 case RoleTitle:
7979 return QString("Title.%1.%2").arg(m_categoryId).arg(index.row());
8080 case RoleArt:
81− return qmlDirectory() + "graphics/applicationIcons/dash.png";
81+ return qmlDirectory() + "/graphics/applicationIcons/dash.png";
8282 case RoleSubtitle:
8383 return QString("Subtitle.%1.%2").arg(m_categoryId).arg(index.row());
8484 case RoleMascot:
tests/mocks/Unity/fake_scope.cpp+3−5
@@ -201,9 +201,7 @@ PreviewStack* Scope::preview(QVariant const& result, QString const& /*categoryId
201201 if (m_returnNullPreview) {
202202 return nullptr;
203203 } 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);
207205 }
208206}
209207
@@ -253,11 +251,11 @@ QVariantMap Scope::customizations() const
253251 m["foreground-color"] = "blue";
254252 m["page-header"] = h;
255253 } 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");
257255 m["page-header"] = h;
258256 } else if (m_id == "MockScope5") {
259257 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");
261259 h["divider-color"] = "red";
262260 h["navigation-background"] = "color:///black";
263261 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
308308 case RoleSubtitle:
309309 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();
310310 case RoleArt:
311− return qmlDirectory() + "graphics/applicationIcons/dash.png";
311+ return qmlDirectory() + "/graphics/applicationIcons/dash.png";
312312 case RoleMascot:
313313 case RoleEmblem:
314314 case RoleSummary:
tests/mocks/libusermetrics/UserMetrics.cpp+1−5
@@ -416,11 +416,7 @@ UserMetrics::~UserMetrics()
416416
417417QString UserMetrics::label() const
418418{
419− if (d_ptr->m_label.isEmpty()) {
420− return "No data";
421− } else {
422− return d_ptr->m_label;
423− }
419+ return d_ptr->m_label;
424420}
425421
426422QString UserMetrics::username() const
tests/plugins/Dash/CMakeLists.txt−1
@@ -23,7 +23,6 @@ include_directories(
2323remove_definitions(-DQT_NO_KEYWORDS)
2424
2525add_definitions(-DDASHVIEWSTEST_FOLDER="${CMAKE_CURRENT_SOURCE_DIR}")
26−add_definitions(-DBUILT_PLUGINS_DIR="${CMAKE_BINARY_DIR}/plugins")
2726
2827macro(add_lvwph_test FILENAME TESTNAME)
2928 add_executable(${TESTNAME}TestExec
tests/plugins/Dash/cardcreatortest.cpp−1
@@ -35,7 +35,6 @@ private Q_SLOTS:
3535 void init()
3636 {
3737 view = new QQuickView();
38− view->engine()->addImportPath(BUILT_PLUGINS_DIR);
3938 view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/cardcreatortest.qml"));
4039 view->show();
4140 QTest::qWaitForWindowExposed(view);
tests/plugins/Dash/horizontaljournaltest.cpp−1
@@ -123,7 +123,6 @@ private Q_SLOTS:
123123 {
124124 view = new QQuickView();
125125 view->setResizeMode(QQuickView::SizeRootObjectToView);
126− view->engine()->addImportPath(BUILT_PLUGINS_DIR);
127126
128127 model = new WidthModel();
129128 QStringList widthList;
tests/plugins/Dash/horizontaljournaltry.cpp−1
@@ -63,7 +63,6 @@ int main(int argc, char *argv[])
6363
6464 QQuickView *view = new QQuickView();
6565 view->setResizeMode(QQuickView::SizeRootObjectToView);
66− view->engine()->addImportPath(BUILT_PLUGINS_DIR);
6766
6867 QWidthModela model;
6968 QStringList heightList;
tests/plugins/Dash/listviewwithpageheadersectionexternalmodeltest.cpp−1
@@ -168,7 +168,6 @@ private Q_SLOTS:
168168 void init()
169169 {
170170 view = new QQuickView();
171− view->engine()->addImportPath(BUILT_PLUGINS_DIR);
172171 view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/listviewwithpageheadertestsectionexternalmodel.qml"));
173172 lvwph = dynamic_cast<ListViewWithPageHeader*>(view->rootObject()->findChild<QQuickFlickable*>());
174173 QVERIFY(lvwph);
tests/plugins/Dash/listviewwithpageheadersectiontest.cpp−1
@@ -133,7 +133,6 @@ private Q_SLOTS:
133133 void init()
134134 {
135135 view = new QQuickView();
136− view->engine()->addImportPath(BUILT_PLUGINS_DIR);
137136 view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/listviewwithpageheadertestsection.qml"));
138137 lvwph = dynamic_cast<ListViewWithPageHeader*>(view->rootObject()->findChild<QQuickFlickable*>());
139138 model = view->rootObject()->findChild<QQmlListModel*>();
tests/plugins/Dash/listviewwithpageheadertest.cpp−1
@@ -119,7 +119,6 @@ private Q_SLOTS:
119119 void init()
120120 {
121121 view = new QQuickView();
122− view->engine()->addImportPath(BUILT_PLUGINS_DIR);
123122 view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/listviewwithpageheadertest.qml"));
124123 lvwph = dynamic_cast<ListViewWithPageHeader*>(view->rootObject()->findChild<QQuickFlickable*>());
125124 model = view->rootObject()->findChild<QQmlListModel*>();
tests/plugins/Dash/organicgridtest.cpp−1
@@ -126,7 +126,6 @@ private Q_SLOTS:
126126 {
127127 view = new QQuickView();
128128 view->setResizeMode(QQuickView::SizeRootObjectToView);
129− view->engine()->addImportPath(BUILT_PLUGINS_DIR);
130129
131130 model = new DummyModel();
132131 model->setCount(21);
tests/plugins/Dash/organicgridtry.cpp−1
@@ -73,7 +73,6 @@ int main(int argc, char *argv[])
7373
7474 QQuickView *view = new QQuickView();
7575 view->setResizeMode(QQuickView::SizeRootObjectToView);
76− view->engine()->addImportPath(BUILT_PLUGINS_DIR);
7776
7877 DummyModel model;
7978 model.setCount(3);
tests/plugins/Dash/verticaljournaltest.cpp−1
@@ -125,7 +125,6 @@ private Q_SLOTS:
125125 {
126126 view = new QQuickView();
127127 view->setResizeMode(QQuickView::SizeRootObjectToView);
128− view->engine()->addImportPath(BUILT_PLUGINS_DIR);
129128
130129 model = new HeightModel();
131130 QStringList heightList;
tests/plugins/Dash/verticaljournaltry.cpp−1
@@ -63,7 +63,6 @@ int main(int argc, char *argv[])
6363
6464 QQuickView *view = new QQuickView();
6565 view->setResizeMode(QQuickView::SizeRootObjectToView);
66− view->engine()->addImportPath(BUILT_PLUGINS_DIR);
6766
6867 QHeightModel model;
6968 QStringList heightList;
tests/plugins/IntegratedLightDM/CMakeLists.txt+1−1
@@ -25,7 +25,7 @@ add_unity8_uitest(GreeterDBus dbus-test-runner
2525 ARG_PREFIX "--parameter"
2626 ARGS --task $<TARGET_FILE:GreeterDBusTestExec>
2727 DEPENDS MockLightDM
28− IMPORT_PATHS ${CMAKE_BINARY_DIR}/tests/mocks
28+ IMPORT_PATHS ${UNITY_MOCKPATH}
2929 LIGHTDM
3030 )
3131
tests/plugins/Ubuntu/Gestures/CMakeLists.txt+3−7
@@ -14,9 +14,6 @@ include_directories(
1414
1515export_qmlfiles(UbuntuGesturesTest .)
1616
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−
2017macro(build_gesture_test CLASSNAME)
2118 add_executable(${CLASSNAME}TestExec tst_${CLASSNAME}.cpp GestureTest.cpp TestItem.cpp)
2219 qt5_use_modules(${CLASSNAME}TestExec Test Core Qml Gui Quick)
@@ -26,7 +23,7 @@ endmacro()
2623macro(add_gesture_unit_test CLASSNAME)
2724 build_gesture_test(${CLASSNAME})
2825 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
3027 DEPENDS UbuntuGesturesTest-qmlfiles
3128 ${ARGN}
3229 )
@@ -35,12 +32,11 @@ endmacro()
3532macro(add_gesture_ui_test CLASSNAME)
3633 build_gesture_test(${CLASSNAME})
3734 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
3936 DEPENDS UbuntuGesturesTest-qmlfiles
4037 ${ARGN}
4138 )
42− add_manual_qml_test(. ${CLASSNAME} IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins
43− ${CMAKE_BINARY_DIR}/tests/utils/modules)
39+ add_manual_qml_test(. ${CLASSNAME} IMPORT_PATHS ${UNITY_PLUGINPATH})
4440endmacro()
4541
4642add_gesture_ui_test(DirectionalDragArea)
tests/plugins/Ubuntu/Gestures/GestureTest.cpp−2
@@ -44,8 +44,6 @@ void GestureTest::init()
4444{
4545 m_view = new QQuickView;
4646 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));
4947 m_view->setSource(QUrl::fromLocalFile(m_qmlFilename));
5048 m_view->show();
5149 QVERIFY(QTest::qWaitForWindowExposed(m_view));
tests/plugins/Ubuntu/Gestures/tst_TouchGate.cpp−1
@@ -119,7 +119,6 @@ QQuickView *tst_TouchGate::createView()
119119 QQuickView *window = new QQuickView(0);
120120 window->setResizeMode(QQuickView::SizeRootObjectToView);
121121 window->resize(720, 720);
122− window->engine()->addImportPath(QLatin1String(UBUNTU_GESTURES_PLUGIN_DIR));
123122
124123 return window;
125124}
tests/qmltests/CMakeLists.txt+2−2
@@ -1,7 +1,7 @@
11
22add_subdirectory(Components)
33
4−add_unity8_qmltest(. OrientedShell)
4+add_unity8_qmltest(. OrientedShell LIGHTDM)
55add_unity8_qmltest(. Shell LIGHTDM)
66add_unity8_qmltest(. ShellWithPin LIGHTDM)
77add_unity8_qmltest(Components Background)
@@ -18,7 +18,7 @@ add_unity8_qmltest(Components Showable)
1818add_unity8_qmltest(Components ZoomableImage)
1919add_unity8_qmltest(Dash Dash)
2020add_unity8_qmltest(Dash DashContent)
21−add_unity8_qmltest(Dash DashShell)
21+add_unity8_qmltest(Dash DashShell LIGHTDM)
2222add_unity8_qmltest(Dash Card)
2323add_unity8_qmltest(Dash CardCarousel)
2424add_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")
21add_definitions(-DTEST_DIR="${CMAKE_CURRENT_LIST_DIR}")
3−add_definitions(-DTESTS_UTILS_MODULES_DIR="${CMAKE_BINARY_DIR}/tests/utils/modules")
42
53########## tst_DragHandle
64
@@ -17,8 +15,7 @@ qt5_use_modules(DragHandleTestExec Test Core Qml Gui Quick)
1715target_link_libraries(DragHandleTestExec UbuntuGesturesQml UbuntuGestures)
1816
1917add_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)
21−
18+add_manual_qml_test(. DragHandle IMPORT_PATHS ${UNITY_PLUGINPATH})
2219
2320########## tst_EdgeDragEvaluator
2421add_executable(EdgeDragEvaluatorTestExec tst_EdgeDragEvaluator.cpp)
tests/qmltests/Components/tst_DragHandle.cpp−2
@@ -113,9 +113,7 @@ QQuickView *tst_DragHandle::createView()
113113{
114114 QQuickView *window = new QQuickView(0);
115115 window->setResizeMode(QQuickView::SizeRootObjectToView);
116− window->engine()->addImportPath(QLatin1String(UBUNTU_GESTURES_PLUGIN_DIR));
117116 window->engine()->addImportPath(QLatin1String(TEST_DIR));
118− window->engine()->addImportPath(QStringLiteral(TESTS_UTILS_MODULES_DIR));
119117
120118 return window;
121119}
tests/qmltests/Components/tst_EdgeDragEvaluator.cpp−1
@@ -99,7 +99,6 @@ QQuickView *tst_EdgeDragEvaluator::createView()
9999{
100100 QQuickView *window = new QQuickView(0);
101101 window->setResizeMode(QQuickView::SizeRootObjectToView);
102− window->engine()->addImportPath(QLatin1String(UBUNTU_GESTURES_PLUGIN_DIR));
103102 window->engine()->addImportPath(QLatin1String(TEST_DIR));
104103
105104 return window;
tests/qmltests/Dash/tst_Card.qml+2−2
@@ -473,14 +473,14 @@ Rectangle {
473473
474474 card.cardData["mascot"] = "somethingbroken2";
475475 card.cardDataChanged();
476− compare(mascotImage.image.status, Image.Error);
476+ compare(mascotImage.status, Image.Error);
477477
478478 cardTool.components["mascot"] = {"fallback": Qt.resolvedUrl("artwork/emblem.png")};
479479 cardTool.componentsChanged();
480480 card.cardData["mascot"] = "somethingbroken2";
481481 card.cardDataChanged();
482482 waitForRendering(card);
483− tryCompare(mascotImage.image, "status", Image.Ready);
483+ tryCompare(mascotImage, "status", Image.Ready);
484484 }
485485
486486 function test_font_weights_data() {
tests/qmltests/Greeter/tst_Infographics.qml+4−3
@@ -74,15 +74,16 @@ Item {
7474
7575 function test_set_username_data() {
7676 return [
77− { username: "has-password", label: "<b>19</b> minutes talk time" },
78− { username: "two-factor", label: "No data" },
79− { username: "", label: "No data" },
77+ { username: "has-password", label: "<b>19</b> minutes talk time", visible: true },
78+ { username: "two-factor", label: "", visible: true },
79+ { username: "", label: "", visible: false },
8080 ]
8181 }
8282
8383 function test_set_username(data) {
8484 infographicModel.username = data.username
8585 tryCompare(label, "text", data.label)
86+ compare(infographic.visible, data.visible);
8687 }
8788 }
8889
tests/qmltests/Notifications/tst_Notifications.qml+60−7
@@ -12,15 +12,14 @@
1212 *
1313 * You should have received a copy of the GNU Lesser General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Mirco Mueller <mirco.mueller@canonical.com>
1815 */
1916
20−import QtQuick 2.0
17+import QtQuick 2.4
18+import QtQuick.Layouts 1.1
2119import QtTest 1.0
2220import ".."
2321import "../../../qml/Notifications"
22+import "../../../qml/Components/UnityInputInfo"
2423import Ubuntu.Components 1.3
2524import Unity.Test 0.1
2625import Unity.Notifications 1.0
@@ -77,7 +76,7 @@ Item {
7776 "type": Notification.Ephemeral,
7877 "hints": {},
7978 "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.",
8180 "icon": "../graphics/avatars/amanda.png",
8281 "secondaryIcon": "../graphics/applicationIcons/facebook.png",
8382 "rawActions": ["reply_id", "Dummy"]})
@@ -91,7 +90,7 @@ Item {
9190 "type": Notification.Ephemeral,
9291 "hints": {"x-canonical-non-shaped-icon": "true"},
9392 "summary": "Contacts",
94− "body": "Synchronised contacts-database with cloud-storage.",
93+ "body": "Synchronised contacts-database &amp; cloud-storage.",
9594 "icon": "../graphics/applicationIcons/contacts-app.png",
9695 "secondaryIcon": "",
9796 "rawActions": ["reply_id", "Dummy"]})
@@ -189,6 +188,7 @@ Item {
189188
190189 anchors.fill: parent
191190 model: mockModel
191+ hasMouse: UnityInputInfo.mice > 0 // for testing, we add/remove only a mock mouse
192192 }
193193 }
194194
@@ -218,7 +218,7 @@ Item {
218218
219219 Button {
220220 width: parent.width
221− text: "add an non-shaped-icon-summary-body"
221+ text: "add a non-shaped-icon-summary-body"
222222 onClicked: rootRow.addEphemeralNonShapedIconNotification()
223223 }
224224
@@ -257,6 +257,24 @@ Item {
257257 text: "clear model"
258258 onClicked: rootRow.clearNotifications()
259259 }
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+ }
260278 }
261279 }
262280
@@ -675,6 +693,41 @@ Item {
675693 tryCompare(mockModel, "count", before - 1)
676694 }
677695 }
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+ }
678731 }
679732 }
680733}
tests/qmltests/Notifications/tst_SwipeToAct.qml+58−14
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2014 Canonical, Ltd.
2+ * Copyright (C) 2014, 2015 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -14,10 +14,12 @@
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 */
1616
17−import QtQuick 2.0
17+import QtQuick 2.4
18+import QtQuick.Layouts 1.1
1819import QtTest 1.0
1920import ".."
2021import "../../../qml/Notifications"
22+import "../../../qml/Components/UnityInputInfo"
2123import Ubuntu.Components 1.3
2224import Unity.Test 0.1
2325import Unity.Notifications 1.0
@@ -74,7 +76,10 @@ Item {
7476 icon: "../graphics/avatars/amanda.png",
7577 secondaryIcon: "incoming-call",
7678 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+ ]
7883 }
7984
8085 mockModel.append(n)
@@ -97,7 +102,6 @@ Item {
97102
98103 MouseArea{
99104 id: clickThroughCatcher
100−
101105 anchors.fill: parent
102106 }
103107
@@ -108,6 +112,7 @@ Item {
108112
109113 anchors.fill: parent
110114 model: mockModel
115+ hasMouse: UnityInputInfo.mice > 0 // for testing, we add/remove only a mock mouse
111116 }
112117 }
113118
@@ -140,6 +145,24 @@ Item {
140145 text: "clear model"
141146 onClicked: rootRow.clearNotifications()
142147 }
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+ }
143166 }
144167 }
145168
@@ -258,21 +281,42 @@ Item {
258281
259282 if(data.buttonRowVisible) {
260283 var swipeButton = findChild(buttonRow, "notify_swipe_button")
261− var slider = findChild(swipeButton, "slider")
262− var swipeMouseArea = findChild(swipeButton, "swipeMouseArea")
263− var x = swipeMouseArea.width / 2
264− var y = swipeMouseArea.height / 2
284+
285+ if (!swipeButton.clickToAct) { // don't run if there's a real mouse
286+ var slider = findChild(swipeButton, "slider")
287+ var swipeMouseArea = findChild(swipeButton, "swipeMouseArea")
288+ var x = swipeMouseArea.width / 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");
265307
266308 if(data.checkSwipeToActAccept) {
267− tryCompareFunction(function() { mouseDrag(slider, x, y, (swipeMouseArea.width / 2) - slider.width, 0); return actionSpy.signalArguments.length > 0; }, true);
268− compare(actionSpy.signalArguments[0][0], data.actions.data(0, ActionModel.RoleActionId), "got wrong id for positive action")
269− actionSpy.clear()
309+ mouseClick(rightButton);
310+ compare(actionSpy.signalArguments[0][0], data.actions.data(0, ActionModel.RoleActionId), "got wrong id for positive action");
311+ actionSpy.clear();
270312 }
313+
271314 if(data.checkSwipeToActReject) {
272− tryCompareFunction(function() { mouseDrag(slider, x, y, -(swipeMouseArea.width / 2), 0); return actionSpy.signalArguments.length > 0; }, true);
273− compare(actionSpy.signalArguments[0][0], data.actions.data(1, ActionModel.RoleActionId), "got wrong id for negative action")
274− actionSpy.clear()
315+ mouseClick(leftButton);
316+ compare(actionSpy.signalArguments[0][0], data.actions.data(1, ActionModel.RoleActionId), "got wrong id for negative action");
317+ actionSpy.clear();
275318 }
319+ UnityInputInfo.inputInfo.removeMockMouse();
276320 }
277321 }
278322 }
tests/qmltests/tst_OrientedShell.qml+106−1
@@ -996,6 +996,60 @@ Rectangle {
996996 tryCompare(shell, "transformRotationAngle", root.primaryOrientationAngle);
997997 }
998998
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+
9991053 // angle - rotation angle in degrees clockwise, relative to the primary orientation.
10001054 function rotateTo(angle) {
10011055 switch (angle) {
@@ -1016,6 +1070,12 @@ Rectangle {
10161070 }
10171071
10181072 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+
10191079 waitUntilTransitionsEnd(rotationStates);
10201080 }
10211081
@@ -1239,7 +1299,6 @@ Rectangle {
12391299 var childs = new Array(0);
12401300 childs.push(obj)
12411301 while (childs.length > 0) {
1242− console.log("Checking " + childs[0].objectName);
12431302 if (childs[0].objectName === "surfaceItem"
12441303 && childs[0].surface !== undefined
12451304 && childs[0].surface === surface) {
@@ -1252,5 +1311,51 @@ Rectangle {
12521311 }
12531312 return null;
12541313 }
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+ }
12551360 }
12561361}
tests/qmltests/tst_Shell.qml+131−43
@@ -322,8 +322,9 @@ Rectangle {
322322
323323 function loadDesktopShellWithApps() {
324324 loadShell("desktop");
325+ waitForRendering(shell)
325326 shell.usageScenario = "desktop"
326− waitForRendering(root)
327+ waitForRendering(shell)
327328 var app1 = ApplicationManager.startApplication("dialer-app")
328329 var app2 = ApplicationManager.startApplication("webbrowser-app")
329330 var app3 = ApplicationManager.startApplication("camera-app")
@@ -1407,17 +1408,18 @@ Rectangle {
14071408 keyClick(Qt.Key_Tab, Qt.ControlModifier)
14081409 tryCompare(app2.session.surface, "activeFocus", true)
14091410
1411+ var desktopSpread = findChild(shell, "spread")
14101412
1411− tryCompare(desktopStage, "state", "")
1413+ tryCompare(desktopSpread, "state", "")
14121414
14131415 // Just press Alt, make sure the spread comes up
14141416 keyPress(Qt.Key_Control);
14151417 keyClick(Qt.Key_Tab);
1416− tryCompare(desktopStage, "state", "altTab")
1418+ tryCompare(desktopSpread, "state", "altTab")
14171419
14181420 // Release control, check if spread disappears
14191421 keyRelease(Qt.Key_Control)
1420− tryCompare(desktopStage, "state", "")
1422+ tryCompare(desktopSpread, "state", "")
14211423
14221424 // Focus should have switched back now
14231425 tryCompare(app3.session.surface, "activeFocus", true)
@@ -1429,41 +1431,44 @@ Rectangle {
14291431 var desktopStage = findChild(shell, "stage");
14301432 verify(desktopStage !== null)
14311433
1432− var appContainer = findInvisibleChild(shell, "appContainer")
1433− verify(appContainer !== null)
1434+ var desktopSpread = findChild(shell, "spread");
1435+ verify(desktopSpread !== null)
14341436
1435− var appRepeater = findInvisibleChild(shell, "appRepeater")
1436− verify(appRepeater !== null)
1437+ var spreadContainer = findInvisibleChild(shell, "spreadContainer")
1438+ verify(spreadContainer !== null)
1439+
1440+ var spreadRepeater = findInvisibleChild(shell, "spreadRepeater")
1441+ verify(spreadRepeater !== null)
14371442
14381443 // remember the focused appId
14391444 var focused = ApplicationManager.get(ApplicationManager.findApplication(ApplicationManager.focusedApplicationId));
14401445
1441− tryCompare(desktopStage, "state", "")
1446+ tryCompare(desktopSpread, "state", "")
14421447
14431448 // Just press Alt, make sure the spread comes up
14441449 keyPress(Qt.Key_Control);
14451450 keyClick(Qt.Key_Tab);
1446− tryCompare(desktopStage, "state", "altTab")
1447− tryCompare(appRepeater, "highlightedIndex", 1)
1451+ tryCompare(desktopSpread, "state", "altTab")
1452+ tryCompare(spreadRepeater, "highlightedIndex", 1)
14481453 waitForRendering(shell)
14491454
14501455 // Now press and hold Tab, make sure the highlight moves all the way but stops at the last one
14511456 // We can't simulate a pressed key with keyPress() currently, so let's inject the events
14521457 // at API level. Jump for 10 times, verify that it's still at the last one and didn't wrap around.
14531458 for (var i = 0; i < 10; i++) {
1454− appContainer.selectNext(true); // true == isAutoRepeat
1459+ desktopSpread.selectNext(true); // true == isAutoRepeat
14551460 wait(0); // Trigger the event loop to make sure all the things happen
14561461 }
1457− tryCompare(appRepeater, "highlightedIndex", 6)
1462+ tryCompare(spreadRepeater, "highlightedIndex", 6)
14581463
14591464 // Now release it once, and verify that it does wrap around with an additional Tab press
14601465 keyRelease(Qt.Key_Tab);
14611466 keyClick(Qt.Key_Tab);
1462− tryCompare(appRepeater, "highlightedIndex", 0)
1467+ tryCompare(spreadRepeater, "highlightedIndex", 0)
14631468
14641469 // Release control, check if spread disappears
14651470 keyRelease(Qt.Key_Control)
1466− tryCompare(desktopStage, "state", "")
1471+ tryCompare(desktopSpread, "state", "")
14671472
14681473 // Make sure that after wrapping around once, we have the same one focused as at the beginning
14691474 tryCompare(focused.session.surface, "activeFocus", true)
@@ -1472,30 +1477,30 @@ Rectangle {
14721477 function test_altBackTabNavigation() {
14731478 loadDesktopShellWithApps();
14741479
1475− var appRepeater = findInvisibleChild(shell, "appRepeater");
1476− verify(appRepeater !== null);
1480+ var spreadRepeater = findInvisibleChild(shell, "spreadRepeater");
1481+ verify(spreadRepeater !== null);
14771482
14781483 keyPress(Qt.Key_Control)
14791484 keyClick(Qt.Key_Tab);
1480− tryCompare(appRepeater, "highlightedIndex", 1);
1485+ tryCompare(spreadRepeater, "highlightedIndex", 1);
14811486
14821487 keyClick(Qt.Key_Tab);
1483− tryCompare(appRepeater, "highlightedIndex", 2);
1488+ tryCompare(spreadRepeater, "highlightedIndex", 2);
14841489
14851490 keyClick(Qt.Key_Tab);
1486− tryCompare(appRepeater, "highlightedIndex", 3);
1491+ tryCompare(spreadRepeater, "highlightedIndex", 3);
14871492
14881493 keyClick(Qt.Key_Tab);
1489− tryCompare(appRepeater, "highlightedIndex", 4);
1494+ tryCompare(spreadRepeater, "highlightedIndex", 4);
14901495
14911496 keyClick(Qt.Key_Backtab);
1492− tryCompare(appRepeater, "highlightedIndex", 3);
1497+ tryCompare(spreadRepeater, "highlightedIndex", 3);
14931498
14941499 keyClick(Qt.Key_Backtab);
1495− tryCompare(appRepeater, "highlightedIndex", 2);
1500+ tryCompare(spreadRepeater, "highlightedIndex", 2);
14961501
14971502 keyClick(Qt.Key_Backtab);
1498− tryCompare(appRepeater, "highlightedIndex", 1);
1503+ tryCompare(spreadRepeater, "highlightedIndex", 1);
14991504
15001505 keyRelease(Qt.Key_Control);
15011506 }
@@ -1503,20 +1508,20 @@ Rectangle {
15031508 function test_highlightFollowsMouse() {
15041509 loadDesktopShellWithApps()
15051510
1506− var appRepeater = findInvisibleChild(shell, "appRepeater");
1507− verify(appRepeater !== null);
1511+ var spreadRepeater = findInvisibleChild(shell, "spreadRepeater");
1512+ verify(spreadRepeater !== null);
15081513
15091514 keyPress(Qt.Key_Control)
15101515 keyClick(Qt.Key_Tab);
15111516
1512− tryCompare(appRepeater, "highlightedIndex", 1);
1517+ tryCompare(spreadRepeater, "highlightedIndex", 1);
15131518
15141519 var x = 0;
15151520 var y = shell.height * .75;
15161521 mouseMove(shell, x, y)
15171522
15181523 for (var i = 0; i < 7; i++) {
1519− while (appRepeater.highlightedIndex != i && x <= 4000) {
1524+ while (spreadRepeater.highlightedIndex != i && x <= 4000) {
15201525 x+=10;
15211526 mouseMove(shell, x, y)
15221527 wait(0); // spin the loop so bindings get evaluated
@@ -1531,8 +1536,8 @@ Rectangle {
15311536 function test_closeFromSpread() {
15321537 loadDesktopShellWithApps()
15331538
1534− var appRepeater = findInvisibleChild(shell, "appRepeater");
1535− verify(appRepeater !== null);
1539+ var spreadRepeater = findInvisibleChild(shell, "spreadRepeater");
1540+ verify(spreadRepeater !== null);
15361541
15371542 keyPress(Qt.Key_Control)
15381543 keyClick(Qt.Key_Tab);
@@ -1540,14 +1545,14 @@ Rectangle {
15401545 appRemovedSpy.clear();
15411546
15421547 var closedAppId = ApplicationManager.get(2).appId;
1543− var appDelegate2 = appRepeater.itemAt(2);
1544− var closeMouseArea = findChild(appDelegate2, "closeMouseArea");
1548+ var spreadDelegate2 = spreadRepeater.itemAt(2);
1549+ var closeMouseArea = findChild(spreadDelegate2, "closeMouseArea");
15451550
15461551 // Move the mosue over tile 2 and verify the close button becomes visible
15471552 var x = 0;
15481553 var y = shell.height * .5;
15491554 mouseMove(shell, x, y)
1550− while (appRepeater.highlightedIndex !== 2 && x <= 4000) {
1555+ while (spreadRepeater.highlightedIndex !== 2 && x <= 4000) {
15511556 x+=10;
15521557 mouseMove(shell, x, y)
15531558 wait(0); // spin the loop so bindings get evaluated
@@ -1574,32 +1579,35 @@ Rectangle {
15741579 function test_selectFromSpreadWithMouse(data) {
15751580 loadDesktopShellWithApps()
15761581
1577− var appRepeater = findInvisibleChild(shell, "appRepeater");
1578− verify(appRepeater !== null);
1582+ var stage = findChild(shell, "stage");
1583+ var spread = findChild(stage, "spread");
1584+ waitForRendering(spread)
1585+
1586+ var spreadRepeater = findInvisibleChild(shell, "spreadRepeater");
1587+ verify(spreadRepeater !== null);
15791588
15801589 keyPress(Qt.Key_Control)
15811590 keyClick(Qt.Key_Tab);
15821591
15831592 var focusAppId = ApplicationManager.get(2).appId;
1584− var appDelegate2 = appRepeater.itemAt(2);
1585− var decoratedWindow = findChild(appDelegate2, "decoratedWindow");
1586− var stage = findChild(shell, "stage");
1593+ var spreadDelegate2 = spreadRepeater.itemAt(2);
1594+ var clippedSpreadDelegate = findChild(spreadDelegate2, "clippedSpreadDelegate");
15871595
1588− tryCompare(stage, "state", "altTab");
1596+ tryCompare(spread, "state", "altTab");
15891597
15901598 // Move the mouse over tile 2 and verify the highlight becomes visible
15911599 var x = 0;
15921600 var y = shell.height * (data.tileInfo ? .95 : 0.5)
15931601 mouseMove(shell, x, y)
1594− while (appRepeater.highlightedIndex !== 2 && x <= 4000) {
1602+ while (spreadRepeater.highlightedIndex !== 2 && x <= 4000) {
15951603 x+=10;
15961604 mouseMove(shell, x, y)
15971605 wait(0); // spin the loop so bindings get evaluated
15981606 }
1599− tryCompare(decoratedWindow, "highlightShown", true);
1607+ tryCompare(clippedSpreadDelegate, "highlightShown", true);
16001608
16011609 // Click the tile
1602− mouseClick(decoratedWindow, decoratedWindow.width / 2, decoratedWindow.height / 2)
1610+ mouseClick(clippedSpreadDelegate, clippedSpreadDelegate.width / 2, clippedSpreadDelegate.height / 2)
16031611
16041612 // Verify that we left the spread and app2 is the focused one now
16051613 tryCompare(stage, "state", "");
@@ -1618,7 +1626,6 @@ Rectangle {
16181626 keyClick(Qt.Key_Tab);
16191627
16201628 var spreadFlickable = findChild(shell, "spreadFlickable")
1621− print("have flickable", spreadFlickable, spreadFlickable.contentX)
16221629
16231630 compare(spreadFlickable.contentX, 0);
16241631
@@ -1643,5 +1650,86 @@ Rectangle {
16431650
16441651 keyRelease(Qt.Key_Control);
16451652 }
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+ }
16461734 }
16471735}
tools/scopetool.cpp+1−1
@@ -89,7 +89,7 @@ int main(int argc, char *argv[])
8989 view->setTitle(QGuiApplication::applicationName());
9090 view->engine()->setBaseUrl(QUrl::fromLocalFile(::qmlDirectory()));
9191
92− QUrl source(::qmlDirectory() + "ScopeTool.qml");
92+ QUrl source(::qmlDirectory() + "/ScopeTool.qml");
9393 prependImportPaths(view->engine(), ::overrideImportPaths());
9494 prependImportPaths(view->engine(), ::nonMirImportPaths());
9595 appendImportPaths(view->engine(), ::fallbackImportPaths());