on xenial help sign in
merge with prereq
160fa20Michael Zanetti
debian/changelog+28
@@ -1,3 +1,31 @@
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+
1unity8 (8.11+15.10.20150922.1-0ubuntu1) wily; urgency=medium
29unity8 (8.11+15.10.20150922.1-0ubuntu1) wily; urgency=medium
2
30
3 [ Albert Astals Cid ]
31 [ Albert Astals Cid ]
debian/control+1−1
@@ -173,7 +173,7 @@ Pre-Depends: ${misc:Pre-Depends},
173Depends: ${misc:Depends},
173Depends: ${misc:Depends},
174 ${shlibs:Depends},
174 ${shlibs:Depends},
175Provides: unity-application-impl,
175Provides: unity-application-impl,
176− unity-application-impl-6,
176+ unity-application-impl-8,
177Replaces: unity8-autopilot (<< 8.02+15.04.20150422-0ubuntu1)
177Replaces: unity8-autopilot (<< 8.02+15.04.20150422-0ubuntu1)
178Description: Fake environment for running Unity 8 shell
178Description: Fake environment for running Unity 8 shell
179 Provides fake implementations of some QML modules used by Unity 8 shell
179 Provides fake implementations of some QML modules used by Unity 8 shell
include/paths.h.in+13−13
@@ -29,23 +29,23 @@
29
29
30inline bool isRunningInstalled() {
30inline bool isRunningInstalled() {
31 static bool installed = (QCoreApplication::applicationDirPath() ==
31 static bool installed = (QCoreApplication::applicationDirPath() ==
32− QDir(("@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@")).canonicalPath());
32+ QDir(QStringLiteral("@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@")).canonicalPath());
33 return installed;
33 return installed;
34}
34}
35
35
36inline QString buildDirectory() {
36inline QString buildDirectory() {
37 if (!qEnvironmentVariableIsEmpty("UNITY_BINARY_DIR")) return qgetenv("UNITY_BINARY_DIR");
37 if (!qEnvironmentVariableIsEmpty("UNITY_BINARY_DIR")) return qgetenv("UNITY_BINARY_DIR");
38− return QString("@CMAKE_BINARY_DIR@");
38+ return QStringLiteral("@CMAKE_BINARY_DIR@");
39}
39}
40
40
41inline QString sourceDirectory() {
41inline QString sourceDirectory() {
42 if (!qEnvironmentVariableIsEmpty("UNITY_SOURCE_DIR")) return qgetenv("UNITY_SOURCE_DIR");
42 if (!qEnvironmentVariableIsEmpty("UNITY_SOURCE_DIR")) return qgetenv("UNITY_SOURCE_DIR");
43− return QString("@CMAKE_SOURCE_DIR@");
43+ return QStringLiteral("@CMAKE_SOURCE_DIR@");
44}
44}
45
45
46inline QString translationDirectory() {
46inline QString translationDirectory() {
47 if (isRunningInstalled()) {
47 if (isRunningInstalled()) {
48− return QString("@CMAKE_INSTALL_PREFIX@/share/locale");
48+ return QStringLiteral("@CMAKE_INSTALL_PREFIX@/share/locale");
49 } else {
49 } else {
50 return QString(buildDirectory() + "/po/locale");
50 return QString(buildDirectory() + "/po/locale");
51 }
51 }
@@ -53,7 +53,7 @@ inline QString translationDirectory() {
53
53
54inline QString qmlDirectory() {
54inline QString qmlDirectory() {
55 if (isRunningInstalled()) {
55 if (isRunningInstalled()) {
56− return QString("@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/");
56+ return QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/");
57 } else {
57 } else {
58 return QString(sourceDirectory() + "/qml");
58 return QString(sourceDirectory() + "/qml");
59 }
59 }
@@ -70,7 +70,7 @@ inline QStringList overrideImportPaths() {
70inline QStringList nonMirImportPaths() {
70inline QStringList nonMirImportPaths() {
71 QStringList paths;
71 QStringList paths;
72 if (isRunningInstalled()) {
72 if (isRunningInstalled()) {
73− paths << QString("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/nonmirplugins");
73+ paths << QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/nonmirplugins");
74 } else {
74 } else {
75 paths << QString(buildDirectory() + "/nonmirplugins");
75 paths << QString(buildDirectory() + "/nonmirplugins");
76 }
76 }
@@ -80,13 +80,13 @@ inline QStringList nonMirImportPaths() {
80inline QStringList fallbackImportPaths() {
80inline QStringList fallbackImportPaths() {
81 QStringList paths;
81 QStringList paths;
82 if (isRunningInstalled()) {
82 if (isRunningInstalled()) {
83− paths << QString("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@");
83+ paths << QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@");
84− paths << QString("@USS_PRIVATE_PLUGINDIR@");
84+ paths << QStringLiteral("@USS_PRIVATE_PLUGINDIR@");
85− paths << QString("@SHELL_PLUGINDIR@");
85+ paths << QStringLiteral("@SHELL_PLUGINDIR@");
86− paths << QString("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
86+ paths << QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
87 } else {
87 } else {
88− paths << QString("@USS_PRIVATE_PLUGINDIR@");
88+ paths << QStringLiteral("@USS_PRIVATE_PLUGINDIR@");
89− paths << QString("@SHELL_PLUGINDIR@");
89+ paths << QStringLiteral("@SHELL_PLUGINDIR@");
90 paths << QString(buildDirectory() + "/tests/mocks");
90 paths << QString(buildDirectory() + "/tests/mocks");
91 }
91 }
92 return paths;
92 return paths;
@@ -94,7 +94,7 @@ inline QStringList fallbackImportPaths() {
94
94
95inline QString mockPluginsDir() {
95inline QString mockPluginsDir() {
96 if (isRunningInstalled()) {
96 if (isRunningInstalled()) {
97− return QString("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
97+ return QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
98 } else {
98 } else {
99 return QString(buildDirectory() + "/tests/mocks");
99 return QString(buildDirectory() + "/tests/mocks");
100 }
100 }
libs/UbuntuGestures/DebugHelpers.cpp+7−7
@@ -22,15 +22,15 @@ QString touchPointStateToString(Qt::TouchPointState state)
22{
22{
23 switch (state) {
23 switch (state) {
24 case Qt::TouchPointPressed:
24 case Qt::TouchPointPressed:
25− return QString("pressed");
25+ return QStringLiteral("pressed");
26 case Qt::TouchPointMoved:
26 case Qt::TouchPointMoved:
27− return QString("moved");
27+ return QStringLiteral("moved");
28 case Qt::TouchPointStationary:
28 case Qt::TouchPointStationary:
29− return QString("stationary");
29+ return QStringLiteral("stationary");
30 case Qt::TouchPointReleased:
30 case Qt::TouchPointReleased:
31− return QString("released");
31+ return QStringLiteral("released");
32 default:
32 default:
33− return QString("INVALID_STATE");
33+ return QStringLiteral("INVALID_STATE");
34 }
34 }
35}
35}
36
36
@@ -57,7 +57,7 @@ QString touchEventToString(const QTouchEvent *ev)
57
57
58 foreach(const QTouchEvent::TouchPoint& touchPoint, ev->touchPoints()) {
58 foreach(const QTouchEvent::TouchPoint& touchPoint, ev->touchPoints()) {
59 message.append(
59 message.append(
60− QString("(id:%1, state:%2, scenePos:(%3,%4)) ")
60+ QStringLiteral("(id:%1, state:%2, scenePos:(%3,%4)) ")
61 .arg(touchPoint.id())
61 .arg(touchPoint.id())
62 .arg(touchPointStateToString(touchPoint.state()))
62 .arg(touchPointStateToString(touchPoint.state()))
63 .arg(touchPoint.scenePos().x())
63 .arg(touchPoint.scenePos().x())
@@ -89,7 +89,7 @@ QString mouseEventToString(const QMouseEvent *ev)
89 message.append("INVALID_MOUSE_EVENT_TYPE ");
89 message.append("INVALID_MOUSE_EVENT_TYPE ");
90 }
90 }
91
91
92− message.append(QString("pos(%1, %2)").arg(ev->x()).arg(ev->y()));
92+ message.append(QStringLiteral("pos(%1, %2)").arg(ev->x()).arg(ev->y()));
93
93
94 return message;
94 return message;
95}
95}
libs/UbuntuGestures/TouchRegistry.cpp+1−1
@@ -105,7 +105,7 @@ void TouchRegistry::deliverTouchUpdatesToUndecidedCandidatesAndWatchers(const QT
105 // E.g.: a QTouchEvent might have three touches but a given item might be interested in only
105 // E.g.: a QTouchEvent might have three touches but a given item might be interested in only
106 // one of them. So he will get a UnownedTouchEvent from this QTouchEvent containing only that
106 // one of them. So he will get a UnownedTouchEvent from this QTouchEvent containing only that
107 // touch point.
107 // touch point.
108− QMap<QQuickItem*, QList<int>> touchIdsForItems;
108+ QHash<QQuickItem*, QList<int>> touchIdsForItems;
109
109
110 // Build touchIdsForItems
110 // Build touchIdsForItems
111 m_touchInfoPool.forEach([&](Pool<TouchInfo>::Iterator &touchInfo) {
111 m_touchInfoPool.forEach([&](Pool<TouchInfo>::Iterator &touchInfo) {
plugins/AccountsService/AccountsService.cpp+35−35
@@ -74,7 +74,7 @@ void AccountsService::setDemoEdges(bool demoEdges)
74{
74{
75 if (m_demoEdges != demoEdges) {
75 if (m_demoEdges != demoEdges) {
76 m_demoEdges = demoEdges;
76 m_demoEdges = demoEdges;
77− m_service->setUserProperty(m_user, "com.canonical.unity.AccountsService", "demo-edges", demoEdges);
77+ m_service->setUserProperty(m_user, QStringLiteral("com.canonical.unity.AccountsService"), QStringLiteral("demo-edges"), demoEdges);
78
78
79 Q_EMIT demoEdgesChanged();
79 Q_EMIT demoEdgesChanged();
80 }
80 }
@@ -114,7 +114,7 @@ void AccountsService::setHereEnabled(bool enabled)
114{
114{
115 if (m_hereEnabled != enabled) {
115 if (m_hereEnabled != enabled) {
116 m_hereEnabled = enabled;
116 m_hereEnabled = enabled;
117− m_service->setUserProperty(m_user, "com.ubuntu.location.providers.here.AccountsService", "LicenseAccepted", enabled);
117+ m_service->setUserProperty(m_user, QStringLiteral("com.ubuntu.location.providers.here.AccountsService"), QStringLiteral("LicenseAccepted"), enabled);
118
118
119 Q_EMIT hereEnabledChanged();
119 Q_EMIT hereEnabledChanged();
120 }
120 }
@@ -133,8 +133,8 @@ bool AccountsService::hereLicensePathValid() const
133void AccountsService::updateDemoEdges(bool async)
133void AccountsService::updateDemoEdges(bool async)
134{
134{
135 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
135 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
136− "com.canonical.unity.AccountsService",
136+ QStringLiteral("com.canonical.unity.AccountsService"),
137− "demo-edges");
137+ QStringLiteral("demo-edges"));
138 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
138 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
139
139
140 connect(watcher, &QDBusPendingCallWatcher::finished,
140 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -162,8 +162,8 @@ void AccountsService::updateDemoEdges(bool async)
162void AccountsService::updateEnableLauncherWhileLocked(bool async)
162void AccountsService::updateEnableLauncherWhileLocked(bool async)
163{
163{
164 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
164 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
165− "com.ubuntu.AccountsService.SecurityPrivacy",
165+ QStringLiteral("com.ubuntu.AccountsService.SecurityPrivacy"),
166− "EnableLauncherWhileLocked");
166+ QStringLiteral("EnableLauncherWhileLocked"));
167 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
167 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
168
168
169 connect(watcher, &QDBusPendingCallWatcher::finished,
169 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -191,8 +191,8 @@ void AccountsService::updateEnableLauncherWhileLocked(bool async)
191void AccountsService::updateEnableIndicatorsWhileLocked(bool async)
191void AccountsService::updateEnableIndicatorsWhileLocked(bool async)
192{
192{
193 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
193 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
194− "com.ubuntu.AccountsService.SecurityPrivacy",
194+ QStringLiteral("com.ubuntu.AccountsService.SecurityPrivacy"),
195− "EnableIndicatorsWhileLocked");
195+ QStringLiteral("EnableIndicatorsWhileLocked"));
196 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
196 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
197
197
198 connect(watcher, &QDBusPendingCallWatcher::finished,
198 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -220,8 +220,8 @@ void AccountsService::updateEnableIndicatorsWhileLocked(bool async)
220void AccountsService::updateBackgroundFile(bool async)
220void AccountsService::updateBackgroundFile(bool async)
221{
221{
222 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
222 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
223− "org.freedesktop.Accounts.User",
223+ QStringLiteral("org.freedesktop.Accounts.User"),
224− "BackgroundFile");
224+ QStringLiteral("BackgroundFile"));
225 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
225 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
226
226
227 connect(watcher, &QDBusPendingCallWatcher::finished,
227 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -249,8 +249,8 @@ void AccountsService::updateBackgroundFile(bool async)
249void AccountsService::updateStatsWelcomeScreen(bool async)
249void AccountsService::updateStatsWelcomeScreen(bool async)
250{
250{
251 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
251 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
252− "com.ubuntu.touch.AccountsService.SecurityPrivacy",
252+ QStringLiteral("com.ubuntu.touch.AccountsService.SecurityPrivacy"),
253− "StatsWelcomeScreen");
253+ QStringLiteral("StatsWelcomeScreen"));
254 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
254 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
255
255
256 connect(watcher, &QDBusPendingCallWatcher::finished,
256 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -278,8 +278,8 @@ void AccountsService::updateStatsWelcomeScreen(bool async)
278void AccountsService::updatePasswordDisplayHint(bool async)
278void AccountsService::updatePasswordDisplayHint(bool async)
279{
279{
280 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
280 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
281− "com.ubuntu.AccountsService.SecurityPrivacy",
281+ QStringLiteral("com.ubuntu.AccountsService.SecurityPrivacy"),
282− "PasswordDisplayHint");
282+ QStringLiteral("PasswordDisplayHint"));
283 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
283 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
284
284
285 connect(watcher, &QDBusPendingCallWatcher::finished,
285 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -307,8 +307,8 @@ void AccountsService::updatePasswordDisplayHint(bool async)
307void AccountsService::updateFailedLogins(bool async)
307void AccountsService::updateFailedLogins(bool async)
308{
308{
309 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
309 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
310− "com.canonical.unity.AccountsService.Private",
310+ QStringLiteral("com.canonical.unity.AccountsService.Private"),
311− "FailedLogins");
311+ QStringLiteral("FailedLogins"));
312 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
312 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
313
313
314 connect(watcher, &QDBusPendingCallWatcher::finished,
314 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -336,8 +336,8 @@ void AccountsService::updateFailedLogins(bool async)
336void AccountsService::updateHereEnabled(bool async)
336void AccountsService::updateHereEnabled(bool async)
337{
337{
338 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
338 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
339− "com.ubuntu.location.providers.here.AccountsService",
339+ QStringLiteral("com.ubuntu.location.providers.here.AccountsService"),
340− "LicenseAccepted");
340+ QStringLiteral("LicenseAccepted"));
341 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
341 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
342
342
343 connect(watcher, &QDBusPendingCallWatcher::finished,
343 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -365,8 +365,8 @@ void AccountsService::updateHereEnabled(bool async)
365void AccountsService::updateHereLicensePath(bool async)
365void AccountsService::updateHereLicensePath(bool async)
366{
366{
367 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
367 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
368− "com.ubuntu.location.providers.here.AccountsService",
368+ QStringLiteral("com.ubuntu.location.providers.here.AccountsService"),
369− "LicenseBasePath");
369+ QStringLiteral("LicenseBasePath"));
370 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
370 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
371
371
372 connect(watcher, &QDBusPendingCallWatcher::finished,
372 connect(watcher, &QDBusPendingCallWatcher::finished,
@@ -381,7 +381,7 @@ void AccountsService::updateHereLicensePath(bool async)
381
381
382 QString hereLicensePath = reply.value().toString();
382 QString hereLicensePath = reply.value().toString();
383 if (hereLicensePath.isEmpty() || !QFile::exists(hereLicensePath))
383 if (hereLicensePath.isEmpty() || !QFile::exists(hereLicensePath))
384− hereLicensePath = "";
384+ hereLicensePath = QLatin1String("");
385
385
386 if (m_hereLicensePath.isNull() || m_hereLicensePath != hereLicensePath) {
386 if (m_hereLicensePath.isNull() || m_hereLicensePath != hereLicensePath) {
387 m_hereLicensePath = hereLicensePath;
387 m_hereLicensePath = hereLicensePath;
@@ -403,7 +403,7 @@ void AccountsService::setFailedLogins(uint failedLogins)
403{
403{
404 if (m_failedLogins != failedLogins) {
404 if (m_failedLogins != failedLogins) {
405 m_failedLogins = failedLogins;
405 m_failedLogins = failedLogins;
406− m_service->setUserProperty(m_user, "com.canonical.unity.AccountsService.Private", "FailedLogins", failedLogins);
406+ m_service->setUserProperty(m_user, QStringLiteral("com.canonical.unity.AccountsService.Private"), QStringLiteral("FailedLogins"), failedLogins);
407
407
408 Q_EMIT failedLoginsChanged();
408 Q_EMIT failedLoginsChanged();
409 }
409 }
@@ -415,33 +415,33 @@ void AccountsService::onPropertiesChanged(const QString &user, const QString &in
415 return;
415 return;
416 }
416 }
417
417
418− if (interface == "com.canonical.unity.AccountsService") {
418+ if (interface == QLatin1String("com.canonical.unity.AccountsService")) {
419− if (changed.contains("demo-edges")) {
419+ if (changed.contains(QStringLiteral("demo-edges"))) {
420 updateDemoEdges();
420 updateDemoEdges();
421 }
421 }
422− } else if (interface == "com.canonical.unity.AccountsService.Private") {
422+ } else if (interface == QLatin1String("com.canonical.unity.AccountsService.Private")) {
423− if (changed.contains("FailedLogins")) {
423+ if (changed.contains(QStringLiteral("FailedLogins"))) {
424 updateFailedLogins();
424 updateFailedLogins();
425 }
425 }
426− } else if (interface == "com.ubuntu.touch.AccountsService.SecurityPrivacy") {
426+ } else if (interface == QLatin1String("com.ubuntu.touch.AccountsService.SecurityPrivacy")) {
427− if (changed.contains("StatsWelcomeScreen")) {
427+ if (changed.contains(QStringLiteral("StatsWelcomeScreen"))) {
428 updateStatsWelcomeScreen();
428 updateStatsWelcomeScreen();
429 }
429 }
430− } else if (interface == "com.ubuntu.AccountsService.SecurityPrivacy") {
430+ } else if (interface == QLatin1String("com.ubuntu.AccountsService.SecurityPrivacy")) {
431− if (changed.contains("PasswordDisplayHint")) {
431+ if (changed.contains(QStringLiteral("PasswordDisplayHint"))) {
432 updatePasswordDisplayHint();
432 updatePasswordDisplayHint();
433 }
433 }
434− if (changed.contains("EnableLauncherWhileLocked")) {
434+ if (changed.contains(QStringLiteral("EnableLauncherWhileLocked"))) {
435 updateEnableLauncherWhileLocked();
435 updateEnableLauncherWhileLocked();
436 }
436 }
437− if (changed.contains("EnableIndicatorsWhileLocked")) {
437+ if (changed.contains(QStringLiteral("EnableIndicatorsWhileLocked"))) {
438 updateEnableIndicatorsWhileLocked();
438 updateEnableIndicatorsWhileLocked();
439 }
439 }
440− } else if (interface == "com.ubuntu.location.providers.here.AccountsService") {
440+ } else if (interface == QLatin1String("com.ubuntu.location.providers.here.AccountsService")) {
441− if (changed.contains("LicenseAccepted")) {
441+ if (changed.contains(QStringLiteral("LicenseAccepted"))) {
442 updateHereEnabled();
442 updateHereEnabled();
443 }
443 }
444− if (changed.contains("LicenseBasePath")) {
444+ if (changed.contains(QStringLiteral("LicenseBasePath"))) {
445 updateHereLicensePath();
445 updateHereLicensePath();
446 }
446 }
447 }
447 }
plugins/AccountsService/AccountsServiceDBusAdaptor.cpp+17−17
@@ -30,10 +30,10 @@ AccountsServiceDBusAdaptor::AccountsServiceDBusAdaptor(QObject* parent)
30{
30{
31 QDBusConnection connection = QDBusConnection::SM_BUSNAME();
31 QDBusConnection connection = QDBusConnection::SM_BUSNAME();
32 QDBusConnectionInterface *interface = connection.interface();
32 QDBusConnectionInterface *interface = connection.interface();
33− interface->startService("org.freedesktop.Accounts");
33+ interface->startService(QStringLiteral("org.freedesktop.Accounts"));
34− m_accountsManager = new QDBusInterface("org.freedesktop.Accounts",
34+ m_accountsManager = new QDBusInterface(QStringLiteral("org.freedesktop.Accounts"),
35− "/org/freedesktop/Accounts",
35+ QStringLiteral("/org/freedesktop/Accounts"),
36− "org.freedesktop.Accounts",
36+ QStringLiteral("org.freedesktop.Accounts"),
37 connection, this);
37 connection, this);
38}
38}
39
39
@@ -41,7 +41,7 @@ QVariant AccountsServiceDBusAdaptor::getUserProperty(const QString &user, const
41{
41{
42 QDBusInterface *iface = getUserInterface(user);
42 QDBusInterface *iface = getUserInterface(user);
43 if (iface != nullptr && iface->isValid()) {
43 if (iface != nullptr && iface->isValid()) {
44− QDBusReply<QVariant> answer = iface->call("Get", interface, property);
44+ QDBusReply<QVariant> answer = iface->call(QStringLiteral("Get"), interface, property);
45 if (answer.isValid()) {
45 if (answer.isValid()) {
46 return answer;
46 return answer;
47 }
47 }
@@ -53,9 +53,9 @@ QDBusPendingReply<QVariant> AccountsServiceDBusAdaptor::getUserPropertyAsync(con
53{
53{
54 QDBusInterface *iface = getUserInterface(user);
54 QDBusInterface *iface = getUserInterface(user);
55 if (iface != nullptr && iface->isValid()) {
55 if (iface != nullptr && iface->isValid()) {
56− return iface->asyncCall("Get", interface, property);
56+ return iface->asyncCall(QStringLiteral("Get"), interface, property);
57 }
57 }
58− return QDBusPendingReply<QVariant>(QDBusMessage::createError(QDBusError::Other, "Invalid Interface"));
58+ return QDBusPendingReply<QVariant>(QDBusMessage::createError(QDBusError::Other, QStringLiteral("Invalid Interface")));
59}
59}
60
60
61void AccountsServiceDBusAdaptor::setUserProperty(const QString &user, const QString &interface, const QString &property, const QVariant &value)
61void AccountsServiceDBusAdaptor::setUserProperty(const QString &user, const QString &interface, const QString &property, const QVariant &value)
@@ -63,7 +63,7 @@ void AccountsServiceDBusAdaptor::setUserProperty(const QString &user, const QStr
63 QDBusInterface *iface = getUserInterface(user);
63 QDBusInterface *iface = getUserInterface(user);
64 if (iface != nullptr && iface->isValid()) {
64 if (iface != nullptr && iface->isValid()) {
65 // The value needs to be carefully wrapped
65 // The value needs to be carefully wrapped
66− iface->call("Set", interface, property, QVariant::fromValue(QDBusVariant(value)));
66+ iface->call(QStringLiteral("Set"), interface, property, QVariant::fromValue(QDBusVariant(value)));
67 }
67 }
68}
68}
69
69
@@ -72,9 +72,9 @@ QDBusPendingCall AccountsServiceDBusAdaptor::setUserPropertyAsync(const QString
72 QDBusInterface *iface = getUserInterface(user);
72 QDBusInterface *iface = getUserInterface(user);
73 if (iface != nullptr && iface->isValid()) {
73 if (iface != nullptr && iface->isValid()) {
74 // The value needs to be carefully wrapped
74 // The value needs to be carefully wrapped
75− return iface->asyncCall("Set", interface, property, QVariant::fromValue(QDBusVariant(value)));
75+ return iface->asyncCall(QStringLiteral("Set"), interface, property, QVariant::fromValue(QDBusVariant(value)));
76 }
76 }
77− return QDBusPendingCall::fromCompletedCall(QDBusMessage::createError(QDBusError::Other, "Invalid Interface"));
77+ return QDBusPendingCall::fromCompletedCall(QDBusMessage::createError(QDBusError::Other, QStringLiteral("Invalid Interface")));
78}
78}
79
79
80void AccountsServiceDBusAdaptor::propertiesChangedSlot(const QString &interface, const QVariantMap &changed, const QStringList &invalid)
80void AccountsServiceDBusAdaptor::propertiesChangedSlot(const QString &interface, const QVariantMap &changed, const QStringList &invalid)
@@ -116,13 +116,13 @@ QDBusInterface *AccountsServiceDBusAdaptor::getUserInterface(const QString &user
116{
116{
117 QDBusInterface *iface = m_users.value(user);
117 QDBusInterface *iface = m_users.value(user);
118 if (iface == nullptr && m_accountsManager->isValid()) {
118 if (iface == nullptr && m_accountsManager->isValid()) {
119− QDBusReply<QDBusObjectPath> answer = m_accountsManager->asyncCall("FindUserByName", user);
119+ QDBusReply<QDBusObjectPath> answer = m_accountsManager->asyncCall(QStringLiteral("FindUserByName"), user);
120 if (answer.isValid()) {
120 if (answer.isValid()) {
121 const QString path = answer.value().path();
121 const QString path = answer.value().path();
122
122
123− iface = new QDBusInterface("org.freedesktop.Accounts",
123+ iface = new QDBusInterface(QStringLiteral("org.freedesktop.Accounts"),
124 path,
124 path,
125− "org.freedesktop.DBus.Properties",
125+ QStringLiteral("org.freedesktop.DBus.Properties"),
126 m_accountsManager->connection(), this);
126 m_accountsManager->connection(), this);
127
127
128 // With its own pre-defined properties, AccountsService is oddly
128 // With its own pre-defined properties, AccountsService is oddly
@@ -132,8 +132,8 @@ QDBusInterface *AccountsServiceDBusAdaptor::getUserInterface(const QString &user
132 iface->connection().connect(
132 iface->connection().connect(
133 iface->service(),
133 iface->service(),
134 path,
134 path,
135− "org.freedesktop.Accounts.User",
135+ QStringLiteral("org.freedesktop.Accounts.User"),
136− "Changed",
136+ QStringLiteral("Changed"),
137 this,
137 this,
138 SLOT(maybeChangedSlot()));
138 SLOT(maybeChangedSlot()));
139
139
@@ -142,8 +142,8 @@ QDBusInterface *AccountsServiceDBusAdaptor::getUserInterface(const QString &user
142 iface->connection().connect(
142 iface->connection().connect(
143 iface->service(),
143 iface->service(),
144 path,
144 path,
145− "org.freedesktop.DBus.Properties",
145+ QStringLiteral("org.freedesktop.DBus.Properties"),
146− "PropertiesChanged",
146+ QStringLiteral("PropertiesChanged"),
147 this,
147 this,
148 SLOT(propertiesChangedSlot(QString, QVariantMap, QStringList)));
148 SLOT(propertiesChangedSlot(QString, QVariantMap, QStringList)));
149
149
plugins/Dash/horizontaljournal.cpp−2
@@ -33,8 +33,6 @@
33#include <private/qquickitem_p.h>
33#include <private/qquickitem_p.h>
34#pragma GCC diagnostic pop
34#pragma GCC diagnostic pop
35
35
36−static const qreal bufferRatio = 0.5;
37−
38HorizontalJournal::HorizontalJournal()
36HorizontalJournal::HorizontalJournal()
39 : m_firstVisibleIndex(-1)
37 : m_firstVisibleIndex(-1)
40 , m_rowHeight(0)
38 , m_rowHeight(0)
plugins/Dash/listviewwithpageheader.cpp+12−12
@@ -164,7 +164,7 @@ ListViewWithPageHeader::ListViewWithPageHeader()
164
164
165 m_contentYAnimation = new QQuickNumberAnimation(this);
165 m_contentYAnimation = new QQuickNumberAnimation(this);
166 m_contentYAnimation->setEasing(QEasingCurve::OutQuad);
166 m_contentYAnimation->setEasing(QEasingCurve::OutQuad);
167− m_contentYAnimation->setProperty("contentY");
167+ m_contentYAnimation->setProperty(QStringLiteral("contentY"));
168 m_contentYAnimation->setDuration(200);
168 m_contentYAnimation->setDuration(200);
169 m_contentYAnimation->setTargetObject(this);
169 m_contentYAnimation->setTargetObject(this);
170
170
@@ -745,8 +745,8 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(const QString &sectionText)
745
745
746 QQmlContext *creationContext = m_sectionDelegate->creationContext();
746 QQmlContext *creationContext = m_sectionDelegate->creationContext();
747 QQmlContext *context = new QQmlContext(creationContext ? creationContext : qmlContext(this));
747 QQmlContext *context = new QQmlContext(creationContext ? creationContext : qmlContext(this));
748− context->setContextProperty(QLatin1String("section"), sectionText);
748+ context->setContextProperty(QStringLiteral("section"), sectionText);
749− context->setContextProperty(QLatin1String("delegateIndex"), -1);
749+ context->setContextProperty(QStringLiteral("delegateIndex"), -1);
750 QObject *nobj = m_sectionDelegate->beginCreate(context);
750 QObject *nobj = m_sectionDelegate->beginCreate(context);
751 if (nobj) {
751 if (nobj) {
752 QQml_setParent_noEvent(context, nobj);
752 QQml_setParent_noEvent(context, nobj);
@@ -879,7 +879,7 @@ ListViewWithPageHeader::ListItem *ListViewWithPageHeader::createItem(int modelIn
879 }
879 }
880 if (listItem->sectionItem()) {
880 if (listItem->sectionItem()) {
881 QQmlContext *context = QQmlEngine::contextForObject(listItem->sectionItem())->parentContext();
881 QQmlContext *context = QQmlEngine::contextForObject(listItem->sectionItem())->parentContext();
882− context->setContextProperty(QLatin1String("delegateIndex"), modelIndex);
882+ context->setContextProperty(QStringLiteral("delegateIndex"), modelIndex);
883 }
883 }
884 adjustMinYExtent();
884 adjustMinYExtent();
885 m_contentHeightDirty = true;
885 m_contentHeightDirty = true;
@@ -904,8 +904,8 @@ void ListViewWithPageHeader::itemCreated(int modelIndex, QObject *object)
904
904
905 item->setParentItem(m_clipItem);
905 item->setParentItem(m_clipItem);
906 QQmlContext *context = QQmlEngine::contextForObject(item)->parentContext();
906 QQmlContext *context = QQmlEngine::contextForObject(item)->parentContext();
907− context->setContextProperty(QLatin1String("ListViewWithPageHeader"), this);
907+ context->setContextProperty(QStringLiteral("ListViewWithPageHeader"), this);
908− context->setContextProperty(QLatin1String("heightToClip"), QVariant::fromValue<int>(0));
908+ context->setContextProperty(QStringLiteral("heightToClip"), QVariant::fromValue<int>(0));
909 if (modelIndex == m_asyncRequestedIndex) {
909 if (modelIndex == m_asyncRequestedIndex) {
910 createItem(modelIndex, false);
910 createItem(modelIndex, false);
911 refill();
911 refill();
@@ -1059,7 +1059,7 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
1059 if (item && item->sectionItem()) {
1059 if (item && item->sectionItem()) {
1060 QQmlContext *context = QQmlEngine::contextForObject(item->sectionItem())->parentContext();
1060 QQmlContext *context = QQmlEngine::contextForObject(item->sectionItem())->parentContext();
1061 const QString sectionText = m_delegateModel->stringValue(i, m_sectionProperty);
1061 const QString sectionText = m_delegateModel->stringValue(i, m_sectionProperty);
1062− context->setContextProperty(QLatin1String("section"), sectionText);
1062+ context->setContextProperty(QStringLiteral("section"), sectionText);
1063 }
1063 }
1064 }
1064 }
1065 }
1065 }
@@ -1072,7 +1072,7 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
1072 ListItem *item = m_visibleItems[i];
1072 ListItem *item = m_visibleItems[i];
1073 if (item->sectionItem()) {
1073 if (item->sectionItem()) {
1074 QQmlContext *context = QQmlEngine::contextForObject(item->sectionItem())->parentContext();
1074 QQmlContext *context = QQmlEngine::contextForObject(item->sectionItem())->parentContext();
1075− context->setContextProperty(QLatin1String("delegateIndex"), m_firstVisibleIndex + i);
1075+ context->setContextProperty(QStringLiteral("delegateIndex"), m_firstVisibleIndex + i);
1076 }
1076 }
1077 }
1077 }
1078
1078
@@ -1235,7 +1235,7 @@ void ListViewWithPageHeader::layout()
1235 // Update the top sticky section header
1235 // Update the top sticky section header
1236 const QString section = m_delegateModel->stringValue(modelIndex, m_sectionProperty);
1236 const QString section = m_delegateModel->stringValue(modelIndex, m_sectionProperty);
1237 QQmlContext *context = QQmlEngine::contextForObject(m_topSectionItem)->parentContext();
1237 QQmlContext *context = QQmlEngine::contextForObject(m_topSectionItem)->parentContext();
1238− context->setContextProperty(QLatin1String("section"), section);
1238+ context->setContextProperty(QStringLiteral("section"), section);
1239
1239
1240 QQuickItemPrivate::get(m_topSectionItem)->setCulled(false);
1240 QQuickItemPrivate::get(m_topSectionItem)->setCulled(false);
1241 m_topSectionItem->setY(topSectionStickPos);
1241 m_topSectionItem->setY(topSectionStickPos);
@@ -1247,7 +1247,7 @@ void ListViewWithPageHeader::layout()
1247 break;
1247 break;
1248 delegateIndex--;
1248 delegateIndex--;
1249 }
1249 }
1250− context->setContextProperty(QLatin1String("delegateIndex"), delegateIndex);
1250+ context->setContextProperty(QStringLiteral("delegateIndex"), delegateIndex);
1251 if (item->sectionItem()) {
1251 if (item->sectionItem()) {
1252 QQuickItemPrivate::get(item->sectionItem())->setCulled(true);
1252 QQuickItemPrivate::get(item->sectionItem())->setCulled(true);
1253 }
1253 }
@@ -1257,9 +1257,9 @@ void ListViewWithPageHeader::layout()
1257 QQmlContext *context = QQmlEngine::contextForObject(item->m_item)->parentContext();
1257 QQmlContext *context = QQmlEngine::contextForObject(item->m_item)->parentContext();
1258 const qreal clipFrom = visibleFrom + (!item->sectionItem() && m_topSectionItem && !QQuickItemPrivate::get(m_topSectionItem)->culled ? m_topSectionItem->height() : 0);
1258 const qreal clipFrom = visibleFrom + (!item->sectionItem() && m_topSectionItem && !QQuickItemPrivate::get(m_topSectionItem)->culled ? m_topSectionItem->height() : 0);
1259 if (!cull && pos < clipFrom) {
1259 if (!cull && pos < clipFrom) {
1260− context->setContextProperty(QLatin1String("heightToClip"), clipFrom - pos);
1260+ context->setContextProperty(QStringLiteral("heightToClip"), clipFrom - pos);
1261 } else {
1261 } else {
1262− context->setContextProperty(QLatin1String("heightToClip"), QVariant::fromValue<int>(0));
1262+ context->setContextProperty(QStringLiteral("heightToClip"), QVariant::fromValue<int>(0));
1263 }
1263 }
1264// qDebug() << "ListViewWithPageHeader::layout" << item->m_item;
1264// qDebug() << "ListViewWithPageHeader::layout" << item->m_item;
1265 pos += item->height();
1265 pos += item->height();
plugins/Dash/organicgrid.cpp−2
@@ -21,8 +21,6 @@
21#include <private/qquickitem_p.h>
21#include <private/qquickitem_p.h>
22#pragma GCC diagnostic pop
22#pragma GCC diagnostic pop
23
23
24−static const qreal bufferRatio = 0.5;
25−
26OrganicGrid::OrganicGrid()
24OrganicGrid::OrganicGrid()
27 : m_firstVisibleIndex(-1)
25 : m_firstVisibleIndex(-1)
28 , m_numberOfModulesPerRow(-1)
26 , m_numberOfModulesPerRow(-1)
plugins/Dash/verticaljournal.cpp−2
@@ -32,8 +32,6 @@
32#include <private/qquickitem_p.h>
32#include <private/qquickitem_p.h>
33#pragma GCC diagnostic pop
33#pragma GCC diagnostic pop
34
34
35−static const qreal bufferRatio = 0.5;
36−
37VerticalJournal::VerticalJournal()
35VerticalJournal::VerticalJournal()
38 : m_columnWidth(0)
36 : m_columnWidth(0)
39{
37{
plugins/Greeter/Unity/Launcher/launcheritem.cpp+2−2
@@ -35,7 +35,7 @@ LauncherItem::LauncherItem(const QString &appId, const QString &name, const QStr
35 m_quickList(new QuickListModel(this))
35 m_quickList(new QuickListModel(this))
36{
36{
37 QuickListEntry nameAction;
37 QuickListEntry nameAction;
38− nameAction.setActionId("launch_item");
38+ nameAction.setActionId(QStringLiteral("launch_item"));
39 nameAction.setText(m_name);
39 nameAction.setText(m_name);
40 m_quickList->appendAction(nameAction);
40 m_quickList->appendAction(nameAction);
41}
41}
@@ -55,7 +55,7 @@ void LauncherItem::setName(const QString &name)
55 if (m_name != name) {
55 if (m_name != name) {
56 m_name = name;
56 m_name = name;
57 QuickListEntry entry;
57 QuickListEntry entry;
58− entry.setActionId("launch_item");
58+ entry.setActionId(QStringLiteral("launch_item"));
59 entry.setText(m_name);
59 entry.setText(m_name);
60 m_quickList->updateAction(entry);
60 m_quickList->updateAction(entry);
61 Q_EMIT nameChanged(name);
61 Q_EMIT nameChanged(name);
plugins/Greeter/Unity/Launcher/launchermodelas.cpp+22−22
@@ -122,7 +122,7 @@ void LauncherModel::quickListActionInvoked(const QString &appId, int actionIndex
122 QString actionId = model->get(actionIndex).actionId();
122 QString actionId = model->get(actionIndex).actionId();
123
123
124 // Check if this is one of the launcher actions we handle ourselves
124 // Check if this is one of the launcher actions we handle ourselves
125− if (actionId == "launch_item") {
125+ if (actionId == QLatin1String("launch_item")) {
126 QDesktopServices::openUrl(getUrlForAppId(appId));
126 QDesktopServices::openUrl(getUrlForAppId(appId));
127
127
128 // Nope, we don't know this action, let the backend forward it to the application
128 // Nope, we don't know this action, let the backend forward it to the application
@@ -147,13 +147,13 @@ QString LauncherModel::getUrlForAppId(const QString &appId) const
147 return QString();
147 return QString();
148 }
148 }
149
149
150− if (!appId.contains("_")) {
150+ if (!appId.contains('_')) {
151 return "application:///" + appId + ".desktop";
151 return "application:///" + appId + ".desktop";
152 }
152 }
153
153
154 QStringList parts = appId.split('_');
154 QStringList parts = appId.split('_');
155 QString package = parts.value(0);
155 QString package = parts.value(0);
156− QString app = parts.value(1, "first-listed-app");
156+ QString app = parts.value(1, QStringLiteral("first-listed-app"));
157 return "appid://" + package + "/" + app + "/current-user-version";
157 return "appid://" + package + "/" + app + "/current-user-version";
158}
158}
159
159
@@ -200,7 +200,7 @@ void LauncherModel::refresh()
200 QList<QVariantMap> items;
200 QList<QVariantMap> items;
201
201
202 if (m_accounts && !m_user.isEmpty()) {
202 if (m_accounts && !m_user.isEmpty()) {
203− items = m_accounts->getUserProperty<VariantMapList>(m_user, "com.canonical.unity.AccountsService", "LauncherItems");
203+ items = m_accounts->getUserProperty<VariantMapList>(m_user, QStringLiteral("com.canonical.unity.AccountsService"), QStringLiteral("LauncherItems"));
204 }
204 }
205
205
206 // First walk through all the existing items and see if we need to remove something
206 // First walk through all the existing items and see if we need to remove something
@@ -210,16 +210,16 @@ void LauncherModel::refresh()
210 bool found = false;
210 bool found = false;
211 Q_FOREACH(const QVariant &asItem, items) {
211 Q_FOREACH(const QVariant &asItem, items) {
212 QVariantMap cachedMap = asItem.toMap();
212 QVariantMap cachedMap = asItem.toMap();
213− if (cachedMap.value("id").toString() == item->appId()) {
213+ if (cachedMap.value(QStringLiteral("id")).toString() == item->appId()) {
214 // Only keep and update it if we either show unpinned or it is pinned
214 // Only keep and update it if we either show unpinned or it is pinned
215− if (!m_onlyPinned || cachedMap.value("pinned").toBool()) {
215+ if (!m_onlyPinned || cachedMap.value(QStringLiteral("pinned")).toBool()) {
216 found = true;
216 found = true;
217− item->setName(cachedMap.value("name").toString());
217+ item->setName(cachedMap.value(QStringLiteral("name")).toString());
218− item->setIcon(cachedMap.value("icon").toString());
218+ item->setIcon(cachedMap.value(QStringLiteral("icon")).toString());
219− item->setCount(cachedMap.value("count").toInt());
219+ item->setCount(cachedMap.value(QStringLiteral("count")).toInt());
220− item->setCountVisible(cachedMap.value("countVisible").toBool());
220+ item->setCountVisible(cachedMap.value(QStringLiteral("countVisible")).toBool());
221− item->setProgress(cachedMap.value("progress").toInt());
221+ item->setProgress(cachedMap.value(QStringLiteral("progress")).toInt());
222− item->setRunning(cachedMap.value("running").toBool());
222+ item->setRunning(cachedMap.value(QStringLiteral("running")).toBool());
223
223
224 int idx = m_list.indexOf(item);
224 int idx = m_list.indexOf(item);
225 Q_EMIT dataChanged(index(idx), index(idx), {RoleName, RoleIcon, RoleCount, RoleCountVisible, RoleRunning, RoleProgress});
225 Q_EMIT dataChanged(index(idx), index(idx), {RoleName, RoleIcon, RoleCount, RoleCountVisible, RoleRunning, RoleProgress});
@@ -244,7 +244,7 @@ void LauncherModel::refresh()
244 for (int asIndex = 0; asIndex < items.count(); ++asIndex) {
244 for (int asIndex = 0; asIndex < items.count(); ++asIndex) {
245 QVariant entry = items.at(asIndex);
245 QVariant entry = items.at(asIndex);
246
246
247− if (m_onlyPinned && !entry.toMap().value("pinned").toBool()) {
247+ if (m_onlyPinned && !entry.toMap().value(QStringLiteral("pinned")).toBool()) {
248 // Skipping it as we only show pinned and it is not
248 // Skipping it as we only show pinned and it is not
249 skipped++;
249 skipped++;
250 continue;
250 continue;
@@ -253,7 +253,7 @@ void LauncherModel::refresh()
253
253
254 int itemIndex = -1;
254 int itemIndex = -1;
255 for (int i = 0; i < m_list.count(); ++i) {
255 for (int i = 0; i < m_list.count(); ++i) {
256− if (m_list.at(i)->appId() == entry.toMap().value("id").toString()) {
256+ if (m_list.at(i)->appId() == entry.toMap().value(QStringLiteral("id")).toString()) {
257 itemIndex = i;
257 itemIndex = i;
258 break;
258 break;
259 }
259 }
@@ -262,15 +262,15 @@ void LauncherModel::refresh()
262 if (itemIndex == -1) {
262 if (itemIndex == -1) {
263 QVariantMap cachedMap = entry.toMap();
263 QVariantMap cachedMap = entry.toMap();
264 // Need to add it. Just add it into the addedIndex to keep same ordering as the list in AS.
264 // Need to add it. Just add it into the addedIndex to keep same ordering as the list in AS.
265− LauncherItem *item = new LauncherItem(cachedMap.value("id").toString(),
265+ LauncherItem *item = new LauncherItem(cachedMap.value(QStringLiteral("id")).toString(),
266− cachedMap.value("name").toString(),
266+ cachedMap.value(QStringLiteral("name")).toString(),
267− cachedMap.value("icon").toString(),
267+ cachedMap.value(QStringLiteral("icon")).toString(),
268 this);
268 this);
269 item->setPinned(true);
269 item->setPinned(true);
270− item->setCount(cachedMap.value("count").toInt());
270+ item->setCount(cachedMap.value(QStringLiteral("count")).toInt());
271− item->setCountVisible(cachedMap.value("countVisible").toBool());
271+ item->setCountVisible(cachedMap.value(QStringLiteral("countVisible")).toBool());
272− item->setProgress(cachedMap.value("progress").toInt());
272+ item->setProgress(cachedMap.value(QStringLiteral("progress")).toInt());
273− item->setRunning(cachedMap.value("running").toBool());
273+ item->setRunning(cachedMap.value(QStringLiteral("running")).toBool());
274 beginInsertRows(QModelIndex(), newPosition, newPosition);
274 beginInsertRows(QModelIndex(), newPosition, newPosition);
275 m_list.insert(newPosition, item);
275 m_list.insert(newPosition, item);
276 endInsertRows();
276 endInsertRows();
@@ -286,7 +286,7 @@ void LauncherModel::refresh()
286
286
287void LauncherModel::propertiesChanged(const QString &user, const QString &interface, const QStringList &changed)
287void LauncherModel::propertiesChanged(const QString &user, const QString &interface, const QStringList &changed)
288{
288{
289− if (user != m_user || interface != "com.canonical.unity.AccountsService" || !changed.contains("LauncherItems")) {
289+ if (user != m_user || interface != QLatin1String("com.canonical.unity.AccountsService") || !changed.contains(QStringLiteral("LauncherItems"))) {
290 return;
290 return;
291 }
291 }
292 refresh();
292 refresh();
plugins/Greeter/Unity/Launcher/plugin.cpp+5−5
@@ -36,11 +36,11 @@ void UnityLauncherPlugin::registerTypes(const char *uri)
36{
36{
37 Q_ASSERT(uri == QLatin1String("Unity.Launcher"));
37 Q_ASSERT(uri == QLatin1String("Unity.Launcher"));
38
38
39− qmlRegisterUncreatableType<LauncherModelInterface>(uri, 0, 1, "LauncherModelInterface", "Abstract Interface. Cannot be instantiated.");
39+ qmlRegisterUncreatableType<LauncherModelInterface>(uri, 0, 1, "LauncherModelInterface", QStringLiteral("Abstract Interface. Cannot be instantiated."));
40− qmlRegisterUncreatableType<LauncherItemInterface>(uri, 0, 1, "LauncherItemInterface", "Abstract Interface. Cannot be instantiated.");
40+ qmlRegisterUncreatableType<LauncherItemInterface>(uri, 0, 1, "LauncherItemInterface", QStringLiteral("Abstract Interface. Cannot be instantiated."));
41− qmlRegisterUncreatableType<QuickListModelInterface>(uri, 0, 1, "QuickListInterface", "Abstract Interface. Cannot be instantiated.");
41+ qmlRegisterUncreatableType<QuickListModelInterface>(uri, 0, 1, "QuickListInterface", QStringLiteral("Abstract Interface. Cannot be instantiated."));
42
42
43 qmlRegisterSingletonType<LauncherModel>(uri, 0, 1, "LauncherModel", modelProvider);
43 qmlRegisterSingletonType<LauncherModel>(uri, 0, 1, "LauncherModel", modelProvider);
44− qmlRegisterUncreatableType<LauncherItem>(uri, 0, 1, "LauncherItem", "Can't create new Launcher Items in QML. Get them from the LauncherModel.");
44+ qmlRegisterUncreatableType<LauncherItem>(uri, 0, 1, "LauncherItem", QStringLiteral("Can't create new Launcher Items in QML. Get them from the LauncherModel."));
45− qmlRegisterUncreatableType<QuickListModel>(uri, 0, 1, "QuickListModel", "Can't create a QuickListModel in QML. Get them from the LauncherItems.");
45+ qmlRegisterUncreatableType<QuickListModel>(uri, 0, 1, "QuickListModel", QStringLiteral("Can't create a QuickListModel in QML. Get them from the LauncherItems."));
46}
46}
plugins/IntegratedLightDM/DBusGreeter.cpp+2−2
@@ -21,7 +21,7 @@
21#include <QStringList>
21#include <QStringList>
22
22
23DBusGreeter::DBusGreeter(Greeter *greeter, const QString &path)
23DBusGreeter::DBusGreeter(Greeter *greeter, const QString &path)
24− : UnityDBusObject(path, "com.canonical.UnityGreeter", true, greeter),
24+ : UnityDBusObject(path, QStringLiteral("com.canonical.UnityGreeter"), true, greeter),
25 m_greeter(greeter)
25 m_greeter(greeter)
26{
26{
27 connect(m_greeter, &Greeter::isActiveChanged, this, &DBusGreeter::isActiveChangedHandler);
27 connect(m_greeter, &Greeter::isActiveChanged, this, &DBusGreeter::isActiveChangedHandler);
@@ -44,6 +44,6 @@ void DBusGreeter::HideGreeter()
44
44
45void DBusGreeter::isActiveChangedHandler()
45void DBusGreeter::isActiveChangedHandler()
46{
46{
47− notifyPropertyChanged("IsActive", isActive());
47+ notifyPropertyChanged(QStringLiteral("IsActive"), isActive());
48 Q_EMIT isActiveChanged();
48 Q_EMIT isActiveChanged();
49}
49}
plugins/IntegratedLightDM/DBusGreeterList.cpp+3−3
@@ -21,7 +21,7 @@
21#include <QStringList>
21#include <QStringList>
22
22
23DBusGreeterList::DBusGreeterList(Greeter *greeter, const QString &path)
23DBusGreeterList::DBusGreeterList(Greeter *greeter, const QString &path)
24− : UnityDBusObject(path, "com.canonical.UnityGreeter", true, greeter),
24+ : UnityDBusObject(path, QStringLiteral("com.canonical.UnityGreeter"), true, greeter),
25 m_greeter(greeter)
25 m_greeter(greeter)
26{
26{
27 connect(m_greeter, &Greeter::authenticationUserChanged, this, &DBusGreeterList::authenticationUserChangedHandler);
27 connect(m_greeter, &Greeter::authenticationUserChanged, this, &DBusGreeterList::authenticationUserChangedHandler);
@@ -45,12 +45,12 @@ bool DBusGreeterList::entryIsLocked() const
45
45
46void DBusGreeterList::authenticationUserChangedHandler(const QString &user)
46void DBusGreeterList::authenticationUserChangedHandler(const QString &user)
47{
47{
48− notifyPropertyChanged("ActiveEntry", user);
48+ notifyPropertyChanged(QStringLiteral("ActiveEntry"), user);
49 Q_EMIT EntrySelected(user);
49 Q_EMIT EntrySelected(user);
50}
50}
51
51
52void DBusGreeterList::promptlessChangedHandler()
52void DBusGreeterList::promptlessChangedHandler()
53{
53{
54− notifyPropertyChanged("EntryIsLocked", entryIsLocked());
54+ notifyPropertyChanged(QStringLiteral("EntryIsLocked"), entryIsLocked());
55 Q_EMIT entryIsLockedChanged();
55 Q_EMIT entryIsLockedChanged();
56}
56}
plugins/IntegratedLightDM/Greeter.cpp+1−1
@@ -113,7 +113,7 @@ void Greeter::showPromptFilter(const QString &text, QLightDM::Greeter::PromptTyp
113
113
114 // Strip prompt of any colons at the end
114 // Strip prompt of any colons at the end
115 QString trimmedText = text.trimmed();
115 QString trimmedText = text.trimmed();
116− if (trimmedText.endsWith(":") || trimmedText.endsWith(":")) {
116+ if (trimmedText.endsWith(':') || trimmedText.endsWith(QStringLiteral(":"))) {
117 trimmedText.chop(1);
117 trimmedText.chop(1);
118 }
118 }
119
119
plugins/IntegratedLightDM/liblightdm/Greeter.cpp+5−5
@@ -55,12 +55,12 @@ bool Greeter::hasGuestAccountHint() const
55QString Greeter::getHint(const QString &name) const
55QString Greeter::getHint(const QString &name) const
56{
56{
57 Q_UNUSED(name)
57 Q_UNUSED(name)
58− return "";
58+ return QLatin1String("");
59}
59}
60
60
61QString Greeter::defaultSessionHint() const
61QString Greeter::defaultSessionHint() const
62{
62{
63− return "ubuntu";
63+ return QStringLiteral("ubuntu");
64}
64}
65
65
66bool Greeter::hideUsersHint() const
66bool Greeter::hideUsersHint() const
@@ -85,7 +85,7 @@ bool Greeter::lockHint () const
85
85
86QString Greeter::selectUserHint() const
86QString Greeter::selectUserHint() const
87{
87{
88− return "";
88+ return QLatin1String("");
89}
89}
90
90
91bool Greeter::selectGuestHint() const
91bool Greeter::selectGuestHint() const
@@ -95,7 +95,7 @@ bool Greeter::selectGuestHint() const
95
95
96QString Greeter::autologinUserHint() const
96QString Greeter::autologinUserHint() const
97{
97{
98− return "";
98+ return QLatin1String("");
99}
99}
100
100
101bool Greeter::autologinGuestHint() const
101bool Greeter::autologinGuestHint() const
@@ -115,7 +115,7 @@ bool Greeter::inAuthentication() const
115
115
116QString Greeter::hostname() const
116QString Greeter::hostname() const
117{
117{
118− return "hostname1";
118+ return QStringLiteral("hostname1");
119}
119}
120
120
121bool Greeter::isAuthenticated() const
121bool Greeter::isAuthenticated() const
plugins/IntegratedLightDM/liblightdm/GreeterPrivate.cpp+1−1
@@ -91,7 +91,7 @@ public:
91 } else {
91 } else {
92 delete appData;
92 delete appData;
93 greeterPrivate->authenticated = false;
93 greeterPrivate->authenticated = false;
94− Q_EMIT greeter->showMessage("Internal error: could not start PAM authentication", QLightDM::Greeter::MessageTypeError);
94+ Q_EMIT greeter->showMessage(QStringLiteral("Internal error: could not start PAM authentication"), QLightDM::Greeter::MessageTypeError);
95 Q_EMIT greeter->authenticationComplete();
95 Q_EMIT greeter->authenticationComplete();
96 }
96 }
97 }
97 }
plugins/IntegratedLightDM/liblightdm/UsersModel.cpp+1−1
@@ -55,7 +55,7 @@ UsersModel::UsersModel(QObject *parent) :
55 setRoleNames(roles);
55 setRoleNames(roles);
56
56
57 // Now modify our mock user backgrounds
57 // Now modify our mock user backgrounds
58− QDir bgdir = QDir("/usr/share/demo-assets/shell/backgrounds/");
58+ QDir bgdir = QDir(QStringLiteral("/usr/share/demo-assets/shell/backgrounds/"));
59 QStringList backgrounds = bgdir.entryList(QDir::Files | QDir::NoDotAndDotDot);
59 QStringList backgrounds = bgdir.entryList(QDir::Files | QDir::NoDotAndDotDot);
60
60
61 for (int i = 0, j = 0; i < d->entries.size(); i++) {
61 for (int i = 0, j = 0; i < d->entries.size(); i++) {
plugins/IntegratedLightDM/liblightdm/UsersModelPrivate.cpp+2−1
@@ -29,8 +29,9 @@ UsersModelPrivate::UsersModelPrivate(UsersModel* parent)
29 : q_ptr(parent)
29 : q_ptr(parent)
30{
30{
31 QSettings settings(QDir::homePath() + "/.unity8-greeter-demo", QSettings::NativeFormat);
31 QSettings settings(QDir::homePath() + "/.unity8-greeter-demo", QSettings::NativeFormat);
32− QStringList users = settings.value("users", QStringList() << qgetenv("USER")).toStringList();
32+ QStringList users = settings.value(QStringLiteral("users"), QStringList() << qgetenv("USER")).toStringList();
33
33
34+ entries.reserve(users.count());
34 Q_FOREACH(const QString &user, users)
35 Q_FOREACH(const QString &user, users)
35 {
36 {
36 QString name = settings.value(user + "/name", user[0].toUpper() + user.mid(1)).toString();
37 QString name = settings.value(user + "/name", user[0].toUpper() + user.mid(1)).toString();
plugins/IntegratedLightDM/plugin.cpp+3−3
@@ -34,8 +34,8 @@ static QObject *greeter_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
34 Q_UNUSED(scriptEngine)
34 Q_UNUSED(scriptEngine)
35
35
36 Greeter *greeter = new Greeter();
36 Greeter *greeter = new Greeter();
37− new DBusGreeter(greeter, "/");
37+ new DBusGreeter(greeter, QStringLiteral("/"));
38− new DBusGreeterList(greeter, "/list");
38+ new DBusGreeterList(greeter, QStringLiteral("/list"));
39
39
40 return greeter;
40 return greeter;
41}
41}
@@ -64,6 +64,6 @@ void IntegratedLightDMPlugin::registerTypes(const char *uri)
64 qRegisterMetaType<QLightDM::Greeter::PromptType>("QLightDM::Greeter::PromptType");
64 qRegisterMetaType<QLightDM::Greeter::PromptType>("QLightDM::Greeter::PromptType");
65 qmlRegisterSingletonType<Greeter>(uri, 0, 1, "Greeter", greeter_provider);
65 qmlRegisterSingletonType<Greeter>(uri, 0, 1, "Greeter", greeter_provider);
66 qmlRegisterSingletonType<UsersModel>(uri, 0, 1, "Users", users_provider);
66 qmlRegisterSingletonType<UsersModel>(uri, 0, 1, "Users", users_provider);
67− qmlRegisterUncreatableType<QLightDM::UsersModel>(uri, 0, 1, "UserRoles", "Type is not instantiable");
67+ qmlRegisterUncreatableType<QLightDM::UsersModel>(uri, 0, 1, "UserRoles", QStringLiteral("Type is not instantiable"));
68 qmlRegisterSingletonType<UserMetricsOutput::UserMetrics>(uri, 0, 1, "Infographic", infographic_provider);
68 qmlRegisterSingletonType<UserMetricsOutput::UserMetrics>(uri, 0, 1, "Infographic", infographic_provider);
69}
69}
plugins/Powerd/Powerd.cpp+11−11
@@ -22,19 +22,19 @@
22void autoBrightnessChanged(GSettings *settings, const gchar *key, QDBusInterface *unityScreen)
22void autoBrightnessChanged(GSettings *settings, const gchar *key, QDBusInterface *unityScreen)
23{
23{
24 bool value = g_settings_get_boolean(settings, key);
24 bool value = g_settings_get_boolean(settings, key);
25− unityScreen->asyncCall("userAutobrightnessEnable", QVariant(value));
25+ unityScreen->asyncCall(QStringLiteral("userAutobrightnessEnable"), QVariant(value));
26}
26}
27
27
28void activityTimeoutChanged(GSettings *settings, const gchar *key, QDBusInterface *unityScreen)
28void activityTimeoutChanged(GSettings *settings, const gchar *key, QDBusInterface *unityScreen)
29{
29{
30 int value = g_settings_get_uint(settings, key);
30 int value = g_settings_get_uint(settings, key);
31− unityScreen->asyncCall("setInactivityTimeouts", QVariant(value), QVariant(-1));
31+ unityScreen->asyncCall(QStringLiteral("setInactivityTimeouts"), QVariant(value), QVariant(-1));
32}
32}
33
33
34void dimTimeoutChanged(GSettings *settings, const gchar *key, QDBusInterface *unityScreen)
34void dimTimeoutChanged(GSettings *settings, const gchar *key, QDBusInterface *unityScreen)
35{
35{
36 int value = g_settings_get_uint(settings, key);
36 int value = g_settings_get_uint(settings, key);
37− unityScreen->asyncCall("setInactivityTimeouts", QVariant(-1), QVariant(value));
37+ unityScreen->asyncCall(QStringLiteral("setInactivityTimeouts"), QVariant(-1), QVariant(value));
38}
38}
39
39
40Powerd::Powerd(QObject* parent)
40Powerd::Powerd(QObject* parent)
@@ -42,15 +42,15 @@ Powerd::Powerd(QObject* parent)
42 unityScreen(nullptr),
42 unityScreen(nullptr),
43 cachedStatus(Status::On)
43 cachedStatus(Status::On)
44{
44{
45− unityScreen = new QDBusInterface("com.canonical.Unity.Screen",
45+ unityScreen = new QDBusInterface(QStringLiteral("com.canonical.Unity.Screen"),
46− "/com/canonical/Unity/Screen",
46+ QStringLiteral("/com/canonical/Unity/Screen"),
47− "com.canonical.Unity.Screen",
47+ QStringLiteral("com.canonical.Unity.Screen"),
48 QDBusConnection::SM_BUSNAME(), this);
48 QDBusConnection::SM_BUSNAME(), this);
49
49
50− unityScreen->connection().connect("com.canonical.Unity.Screen",
50+ unityScreen->connection().connect(QStringLiteral("com.canonical.Unity.Screen"),
51− "/com/canonical/Unity/Screen",
51+ QStringLiteral("/com/canonical/Unity/Screen"),
52− "com.canonical.Unity.Screen",
52+ QStringLiteral("com.canonical.Unity.Screen"),
53− "DisplayPowerStateChange",
53+ QStringLiteral("DisplayPowerStateChange"),
54 this,
54 this,
55 SLOT(handleDisplayPowerStateChange(int, int)));
55 SLOT(handleDisplayPowerStateChange(int, int)));
56
56
@@ -76,7 +76,7 @@ Powerd::Status Powerd::status() const
76
76
77void Powerd::setStatus(Powerd::Status status, DisplayStateChangeReason reason)
77void Powerd::setStatus(Powerd::Status status, DisplayStateChangeReason reason)
78{
78{
79− unityScreen->asyncCall("setScreenPowerMode",
79+ unityScreen->asyncCall(QStringLiteral("setScreenPowerMode"),
80 status == Powerd::On ? "on" : "off",
80 status == Powerd::On ? "on" : "off",
81 static_cast<qint32>(reason));
81 static_cast<qint32>(reason));
82}
82}
plugins/ScreenGrabber/screengrabber.cpp+4−4
@@ -50,8 +50,8 @@ ScreenGrabber::ScreenGrabber(QObject *parent)
50 qDebug() << "Using real environment";
50 qDebug() << "Using real environment";
51 screenshotsDir = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation);
51 screenshotsDir = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation);
52 }
52 }
53− screenshotsDir.mkpath("Screenshots");
53+ screenshotsDir.mkpath(QStringLiteral("Screenshots"));
54− screenshotsDir.cd("Screenshots");
54+ screenshotsDir.cd(QStringLiteral("Screenshots"));
55 if (screenshotsDir.exists()) {
55 if (screenshotsDir.exists()) {
56 fileNamePrefix = screenshotsDir.absolutePath();
56 fileNamePrefix = screenshotsDir.absolutePath();
57 fileNamePrefix.append("/screenshot");
57 fileNamePrefix.append("/screenshot");
@@ -94,7 +94,7 @@ void ScreenGrabber::captureAndSave()
94QString ScreenGrabber::makeFileName() const
94QString ScreenGrabber::makeFileName() const
95{
95{
96 QString fileName(fileNamePrefix);
96 QString fileName(fileNamePrefix);
97− fileName.append(QDateTime::currentDateTime().toString("yyyyMMdd_hhmmsszzz"));
97+ fileName.append(QDateTime::currentDateTime().toString(QStringLiteral("yyyyMMdd_hhmmsszzz")));
98 fileName.append(".");
98 fileName.append(".");
99 fileName.append(getFormat());
99 fileName.append(getFormat());
100 return fileName;
100 return fileName;
@@ -103,5 +103,5 @@ QString ScreenGrabber::makeFileName() const
103QString ScreenGrabber::getFormat() const
103QString ScreenGrabber::getFormat() const
104{
104{
105 //TODO: This should be configurable (perhaps through gsettings?)
105 //TODO: This should be configurable (perhaps through gsettings?)
106− return "png";
106+ return QStringLiteral("png");
107}
107}
plugins/SessionBroadcast/SessionBroadcast.cpp+4−4
@@ -24,10 +24,10 @@ SessionBroadcast::SessionBroadcast(QObject* parent)
24{
24{
25 auto connection = QDBusConnection::SM_BUSNAME();
25 auto connection = QDBusConnection::SM_BUSNAME();
26
26
27− connection.connect("com.canonical.Unity.Greeter.Broadcast",
27+ connection.connect(QStringLiteral("com.canonical.Unity.Greeter.Broadcast"),
28− "/com/canonical/Unity/Greeter/Broadcast",
28+ QStringLiteral("/com/canonical/Unity/Greeter/Broadcast"),
29− "com.canonical.Unity.Greeter.Broadcast",
29+ QStringLiteral("com.canonical.Unity.Greeter.Broadcast"),
30− "ShowHome",
30+ QStringLiteral("ShowHome"),
31 this,
31 this,
32 SLOT(onShowHome(const QString &)));
32 SLOT(onShowHome(const QString &)));
33}
33}
plugins/Ubuntu/DownloadDaemonListener/interface/downloadtrackeradaptor.h+11−11
@@ -41,68 +41,68 @@ public Q_SLOTS: // METHODS
41 {
41 {
42 QList<QVariant> argumentList;
42 QList<QVariant> argumentList;
43 argumentList << QVariant::fromValue(allowed);
43 argumentList << QVariant::fromValue(allowed);
44− return asyncCallWithArgumentList(QLatin1String("allowGSMDownload"), argumentList);
44+ return asyncCallWithArgumentList(QStringLiteral("allowGSMDownload"), argumentList);
45 }
45 }
46
46
47 inline QDBusPendingReply<> cancel()
47 inline QDBusPendingReply<> cancel()
48 {
48 {
49 QList<QVariant> argumentList;
49 QList<QVariant> argumentList;
50− return asyncCallWithArgumentList(QLatin1String("cancel"), argumentList);
50+ return asyncCallWithArgumentList(QStringLiteral("cancel"), argumentList);
51 }
51 }
52
52
53 inline QDBusPendingReply<bool> isGSMDownloadAllowed()
53 inline QDBusPendingReply<bool> isGSMDownloadAllowed()
54 {
54 {
55 QList<QVariant> argumentList;
55 QList<QVariant> argumentList;
56− return asyncCallWithArgumentList(QLatin1String("isGSMDownloadAllowed"), argumentList);
56+ return asyncCallWithArgumentList(QStringLiteral("isGSMDownloadAllowed"), argumentList);
57 }
57 }
58
58
59 inline QDBusPendingReply<QVariantMap> metadata()
59 inline QDBusPendingReply<QVariantMap> metadata()
60 {
60 {
61 QList<QVariant> argumentList;
61 QList<QVariant> argumentList;
62− return asyncCallWithArgumentList(QLatin1String("metadata"), argumentList);
62+ return asyncCallWithArgumentList(QStringLiteral("metadata"), argumentList);
63 }
63 }
64
64
65 inline QDBusPendingReply<> pause()
65 inline QDBusPendingReply<> pause()
66 {
66 {
67 QList<QVariant> argumentList;
67 QList<QVariant> argumentList;
68− return asyncCallWithArgumentList(QLatin1String("pause"), argumentList);
68+ return asyncCallWithArgumentList(QStringLiteral("pause"), argumentList);
69 }
69 }
70
70
71 inline QDBusPendingReply<qulonglong> progress()
71 inline QDBusPendingReply<qulonglong> progress()
72 {
72 {
73 QList<QVariant> argumentList;
73 QList<QVariant> argumentList;
74− return asyncCallWithArgumentList(QLatin1String("progress"), argumentList);
74+ return asyncCallWithArgumentList(QStringLiteral("progress"), argumentList);
75 }
75 }
76
76
77 inline QDBusPendingReply<> resume()
77 inline QDBusPendingReply<> resume()
78 {
78 {
79 QList<QVariant> argumentList;
79 QList<QVariant> argumentList;
80− return asyncCallWithArgumentList(QLatin1String("resume"), argumentList);
80+ return asyncCallWithArgumentList(QStringLiteral("resume"), argumentList);
81 }
81 }
82
82
83 inline QDBusPendingReply<> setThrottle(qulonglong speed)
83 inline QDBusPendingReply<> setThrottle(qulonglong speed)
84 {
84 {
85 QList<QVariant> argumentList;
85 QList<QVariant> argumentList;
86 argumentList << QVariant::fromValue(speed);
86 argumentList << QVariant::fromValue(speed);
87− return asyncCallWithArgumentList(QLatin1String("setThrottle"), argumentList);
87+ return asyncCallWithArgumentList(QStringLiteral("setThrottle"), argumentList);
88 }
88 }
89
89
90 inline QDBusPendingReply<> start()
90 inline QDBusPendingReply<> start()
91 {
91 {
92 QList<QVariant> argumentList;
92 QList<QVariant> argumentList;
93− return asyncCallWithArgumentList(QLatin1String("start"), argumentList);
93+ return asyncCallWithArgumentList(QStringLiteral("start"), argumentList);
94 }
94 }
95
95
96 inline QDBusPendingReply<qulonglong> throttle()
96 inline QDBusPendingReply<qulonglong> throttle()
97 {
97 {
98 QList<QVariant> argumentList;
98 QList<QVariant> argumentList;
99− return asyncCallWithArgumentList(QLatin1String("throttle"), argumentList);
99+ return asyncCallWithArgumentList(QStringLiteral("throttle"), argumentList);
100 }
100 }
101
101
102 inline QDBusPendingReply<qulonglong> totalSize()
102 inline QDBusPendingReply<qulonglong> totalSize()
103 {
103 {
104 QList<QVariant> argumentList;
104 QList<QVariant> argumentList;
105− return asyncCallWithArgumentList(QLatin1String("totalSize"), argumentList);
105+ return asyncCallWithArgumentList(QStringLiteral("totalSize"), argumentList);
106 }
106 }
107
107
108Q_SIGNALS: // SIGNALS
108Q_SIGNALS: // SIGNALS
plugins/Ubuntu/SystemImage/SystemImage.cpp+4−4
@@ -25,9 +25,9 @@ SystemImage::SystemImage(QObject *parent)
25
25
26void SystemImage::factoryReset()
26void SystemImage::factoryReset()
27{
27{
28− const QDBusMessage msg = QDBusMessage::createMethodCall("com.canonical.SystemImage",
28+ const QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("com.canonical.SystemImage"),
29− "/Service",
29+ QStringLiteral("/Service"),
30− "com.canonical.SystemImage",
30+ QStringLiteral("com.canonical.SystemImage"),
31− "FactoryReset");
31+ QStringLiteral("FactoryReset"));
32 QDBusConnection::systemBus().asyncCall(msg);
32 QDBusConnection::systemBus().asyncCall(msg);
33}
33}
plugins/Unity/Connectivity/Connectivity.cpp+4−4
@@ -25,9 +25,9 @@ Connectivity::Connectivity(QObject *parent)
25
25
26void Connectivity::unlockAllModems()
26void Connectivity::unlockAllModems()
27{
27{
28− const QDBusMessage msg = QDBusMessage::createMethodCall("com.ubuntu.connectivity1",
28+ const QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("com.ubuntu.connectivity1"),
29− "/com/ubuntu/connectivity1/Private",
29+ QStringLiteral("/com/ubuntu/connectivity1/Private"),
30− "com.ubuntu.connectivity1.Private",
30+ QStringLiteral("com.ubuntu.connectivity1.Private"),
31− "UnlockAllModems");
31+ QStringLiteral("UnlockAllModems"));
32 QDBusConnection::sessionBus().asyncCall(msg);
32 QDBusConnection::sessionBus().asyncCall(msg);
33}
33}
plugins/Unity/DashCommunicator/dashcommunicator.cpp+3−3
@@ -41,9 +41,9 @@ void DashCommunicator::setCurrentScope(int index, bool animate, bool isSwipe)
41
41
42void DashCommunicator::run()
42void DashCommunicator::run()
43{
43{
44− m_dashConnection = new DashConnection("com.canonical.UnityDash",
44+ m_dashConnection = new DashConnection(QStringLiteral("com.canonical.UnityDash"),
45− "/com/canonical/UnityDash",
45+ QStringLiteral("/com/canonical/UnityDash"),
46− "", this);
46+ QLatin1String(""), this);
47 m_mutex.lock();
47 m_mutex.lock();
48 m_created = true;
48 m_created = true;
49 m_mutex.unlock();
49 m_mutex.unlock();
plugins/Unity/DashCommunicator/dashconnection.cpp+1−1
@@ -58,6 +58,6 @@ QDBusAbstractInterface* DashConnection::createInterface(const QString &service,
58void DashConnection::setCurrentScope(int index, bool animate, bool isSwipe)
58void DashConnection::setCurrentScope(int index, bool animate, bool isSwipe)
59{
59{
60 if (dbusInterface()) {
60 if (dbusInterface()) {
61− dbusInterface()->asyncCall("SetCurrentScope", index, animate, isSwipe);
61+ dbusInterface()->asyncCall(QStringLiteral("SetCurrentScope"), index, animate, isSwipe);
62 }
62 }
63}
63}
plugins/Unity/DashCommunicator/dbusdashcommunicatorservice.cpp+1−1
@@ -21,7 +21,7 @@
21#include <QDebug>
21#include <QDebug>
22
22
23DBusDashCommunicatorService::DBusDashCommunicatorService(QObject *parent):
23DBusDashCommunicatorService::DBusDashCommunicatorService(QObject *parent):
24− UnityDBusObject("/com/canonical/UnityDash", "com.canonical.UnityDash", false, parent)
24+ UnityDBusObject(QStringLiteral("/com/canonical/UnityDash"), QStringLiteral("com.canonical.UnityDash"), false, parent)
25{
25{
26}
26}
27
27
plugins/Unity/Indicators/indicator.cpp+8−8
@@ -37,20 +37,20 @@ void Indicator::init(const QString& busName, const QSettings& settings)
37 // that we can't just copy the object.
37 // that we can't just copy the object.
38 m_settings.clear();
38 m_settings.clear();
39 Q_FOREACH(const QString& key, settings.allKeys()) {
39 Q_FOREACH(const QString& key, settings.allKeys()) {
40− if (key.endsWith("/Position") || key.endsWith("/ObjectPath")) {
40+ if (key.endsWith(QLatin1String("/Position")) || key.endsWith(QLatin1String("/ObjectPath"))) {
41 m_settings.insert(key, settings.value(key));
41 m_settings.insert(key, settings.value(key));
42 }
42 }
43 }
43 }
44
44
45− setId(settings.value("Indicator Service/Name").toString());
45+ setId(settings.value(QStringLiteral("Indicator Service/Name")).toString());
46
46
47− QString actionObjectPath = settings.value("Indicator Service/ObjectPath").toString();
47+ QString actionObjectPath = settings.value(QStringLiteral("Indicator Service/ObjectPath")).toString();
48
48
49 QVariantMap properties;
49 QVariantMap properties;
50 properties.clear();
50 properties.clear();
51− properties.insert("busType", 1);
51+ properties.insert(QStringLiteral("busType"), 1);
52− properties.insert("busName", busName);
52+ properties.insert(QStringLiteral("busName"), busName);
53− properties.insert("actionsObjectPath", actionObjectPath);
53+ properties.insert(QStringLiteral("actionsObjectPath"), actionObjectPath);
54 setIndicatorProperties(properties);
54 setIndicatorProperties(properties);
55}
55}
56
56
@@ -84,12 +84,12 @@ void Indicator::setProfile(const QString& profile)
84{
84{
85 QVariant pos = m_settings.value(profile + "/Position");
85 QVariant pos = m_settings.value(profile + "/Position");
86 if (!pos.isValid())
86 if (!pos.isValid())
87− pos = m_settings.value("Indicator Service/Position", QVariant::fromValue(0));
87+ pos = m_settings.value(QStringLiteral("Indicator Service/Position"), QVariant::fromValue(0));
88 setPosition(pos.toInt());
88 setPosition(pos.toInt());
89
89
90 QString menuObjectPath = m_settings.value(profile + "/ObjectPath").toString();
90 QString menuObjectPath = m_settings.value(profile + "/ObjectPath").toString();
91 QVariantMap map = m_properties.toMap();
91 QVariantMap map = m_properties.toMap();
92− map.insert("menuObjectPath", menuObjectPath);
92+ map.insert(QStringLiteral("menuObjectPath"), menuObjectPath);
93 setIndicatorProperties(map);
93 setIndicatorProperties(map);
94}
94}
95
95
plugins/Unity/Indicators/indicatorsmanager.cpp+4−4
@@ -44,7 +44,7 @@ public:
44IndicatorsManager::IndicatorsManager(QObject* parent)
44IndicatorsManager::IndicatorsManager(QObject* parent)
45 : QObject(parent)
45 : QObject(parent)
46 , m_loaded(false)
46 , m_loaded(false)
47− , m_profile("phone")
47+ , m_profile(QStringLiteral("phone"))
48{
48{
49}
49}
50
50
@@ -115,7 +115,7 @@ void IndicatorsManager::loadDir(const QDir& dir)
115void IndicatorsManager::loadFile(const QFileInfo& file_info)
115void IndicatorsManager::loadFile(const QFileInfo& file_info)
116{
116{
117 QSettings indicator_settings(file_info.absoluteFilePath(), QSettings::IniFormat, this);
117 QSettings indicator_settings(file_info.absoluteFilePath(), QSettings::IniFormat, this);
118− QString name = indicator_settings.value("Indicator Service/Name").toString();
118+ QString name = indicator_settings.value(QStringLiteral("Indicator Service/Name")).toString();
119
119
120 auto iter = m_indicatorsData.find(name);
120 auto iter = m_indicatorsData.find(name);
121 if (iter != m_indicatorsData.end())
121 if (iter != m_indicatorsData.end())
@@ -286,9 +286,9 @@ Indicator::Ptr IndicatorsManager::indicator(const QString& indicator_name)
286 return new_indicator;
286 return new_indicator;
287}
287}
288
288
289−QList<Indicator::Ptr> IndicatorsManager::indicators()
289+QVector<Indicator::Ptr> IndicatorsManager::indicators()
290{
290{
291− QList<Indicator::Ptr> list;
291+ QVector<Indicator::Ptr> list;
292 Q_FOREACH(IndicatorData* data, m_indicatorsData)
292 Q_FOREACH(IndicatorData* data, m_indicatorsData)
293 {
293 {
294 Indicator::Ptr ret = indicator(data->m_name);
294 Indicator::Ptr ret = indicator(data->m_name);
plugins/Unity/Indicators/indicatorsmanager.h+1−1
@@ -45,7 +45,7 @@ public:
45
45
46 Indicator::Ptr indicator(const QString& indicator_name);
46 Indicator::Ptr indicator(const QString& indicator_name);
47
47
48− QList<Indicator::Ptr> indicators();
48+ QVector<Indicator::Ptr> indicators();
49
49
50 bool isLoaded() const;
50 bool isLoaded() const;
51
51
plugins/Unity/Indicators/modelprinter.cpp+3−3
@@ -60,7 +60,7 @@ QString ModelPrinter::text()
60
60
61QString tabify(int level) { QString str;
61QString tabify(int level) { QString str;
62 for (int i = 0; i < level; i++) {
62 for (int i = 0; i < level; i++) {
63− str += " ";
63+ str += QLatin1String(" ");
64 }
64 }
65 return str;
65 return str;
66}
66}
@@ -68,7 +68,7 @@ QString tabify(int level) { QString str;
68QString ModelPrinter::getModelDataString(UnityMenuModel* sourceModel, int level)
68QString ModelPrinter::getModelDataString(UnityMenuModel* sourceModel, int level)
69{
69{
70 if (!sourceModel)
70 if (!sourceModel)
71− return "";
71+ return QLatin1String("");
72
72
73 QString str;
73 QString str;
74 QTextStream stream(&str);
74 QTextStream stream(&str);
@@ -110,7 +110,7 @@ QString ModelPrinter::getRowSring(UnityMenuModel* sourceModel, int row, int dept
110 return str;
110 return str;
111}
111}
112
112
113−QString ModelPrinter::getVariantString(const QString& roleName, const QVariant vData ) const
113+QString ModelPrinter::getVariantString(const QString& roleName, const QVariant &vData) const
114{
114{
115 QString str;
115 QString str;
116 QTextStream stream(&str);
116 QTextStream stream(&str);
plugins/Unity/Indicators/modelprinter.h+2−2
@@ -46,10 +46,10 @@ Q_SIGNALS:
46private:
46private:
47 QString getModelDataString(UnityMenuModel* sourceModel, int level);
47 QString getModelDataString(UnityMenuModel* sourceModel, int level);
48 QString getRowSring(UnityMenuModel* sourceModel, int index, int depth) const;
48 QString getRowSring(UnityMenuModel* sourceModel, int index, int depth) const;
49− QString getVariantString(const QString& roleName, const QVariant vData ) const;
49+ QString getVariantString(const QString& roleName, const QVariant &vData) const;
50
50
51 UnityMenuModel* m_model;
51 UnityMenuModel* m_model;
52 QList<UnityMenuModel*> m_children;
52 QList<UnityMenuModel*> m_children;
53};
53};
54
54
55−#endif // MODELPRINTER_H
55+#endif // MODELPRINTER_H
plugins/Unity/Indicators/plugin.cpp+6−6
@@ -58,10 +58,10 @@ void IndicatorsPlugin::registerTypes(const char *uri)
58
58
59 qmlRegisterSingletonType<UnityMenuModelCache>(uri, 0, 1, "UnityMenuModelCache", menuModelCacheSingleton);
59 qmlRegisterSingletonType<UnityMenuModelCache>(uri, 0, 1, "UnityMenuModelCache", menuModelCacheSingleton);
60
60
61− qmlRegisterUncreatableType<MenuContentState>(uri, 0, 1, "MenuContentState", "Can't create MenuContentState class");
61+ qmlRegisterUncreatableType<MenuContentState>(uri, 0, 1, "MenuContentState", QStringLiteral("Can't create MenuContentState class"));
62− qmlRegisterUncreatableType<ActionState>(uri, 0, 1, "ActionState", "Can't create ActionState class");
62+ qmlRegisterUncreatableType<ActionState>(uri, 0, 1, "ActionState", QStringLiteral("Can't create ActionState class"));
63− qmlRegisterUncreatableType<NetworkActionState>(uri, 0, 1, "NetworkActionState", "Can't create NetworkActionState class");
63+ qmlRegisterUncreatableType<NetworkActionState>(uri, 0, 1, "NetworkActionState", QStringLiteral("Can't create NetworkActionState class"));
64− qmlRegisterUncreatableType<NetworkConnection>(uri, 0, 1, "NetworkConnection", "Can't create NetworkConnection class");
64+ qmlRegisterUncreatableType<NetworkConnection>(uri, 0, 1, "NetworkConnection", QStringLiteral("Can't create NetworkConnection class"));
65− qmlRegisterUncreatableType<IndicatorsModelRole>(uri, 0, 1, "IndicatorsModelRole", "Can't create IndicatorsModelRole class");
65+ qmlRegisterUncreatableType<IndicatorsModelRole>(uri, 0, 1, "IndicatorsModelRole", QStringLiteral("Can't create IndicatorsModelRole class"));
66− qmlRegisterUncreatableType<FlatMenuProxyModelRole>(uri, 0, 1, "FlatMenuProxyModelRole", "Can't create FlatMenuProxyModelRole class");
66+ qmlRegisterUncreatableType<FlatMenuProxyModelRole>(uri, 0, 1, "FlatMenuProxyModelRole", QStringLiteral("Can't create FlatMenuProxyModelRole class"));
67}
67}
plugins/Unity/Indicators/rootstateparser.cpp+16−16
@@ -39,7 +39,7 @@ static QString iconUri(GIcon *icon)
39 }
39 }
40
40
41 if (!iconNameList.empty()) {
41 if (!iconNameList.empty()) {
42− uri = QString("image://theme/%1").arg(iconNameList.join(","));
42+ uri = QStringLiteral("image://theme/%1").arg(iconNameList.join(QStringLiteral(",")));
43 }
43 }
44 }
44 }
45 else if (G_IS_FILE_ICON (icon)) {
45 else if (G_IS_FILE_ICON (icon)) {
@@ -63,7 +63,7 @@ static QString iconUri(GIcon *icon)
63 data = g_bytes_get_data (g_bytes_icon_get_bytes (G_BYTES_ICON (icon)), &size);
63 data = g_bytes_get_data (g_bytes_icon_get_bytes (G_BYTES_ICON (icon)), &size);
64 base64 = g_base64_encode ((const guchar *) data, size);
64 base64 = g_base64_encode ((const guchar *) data, size);
65
65
66− uri = QString("data://");
66+ uri = QStringLiteral("data://");
67 uri.append (base64);
67 uri.append (base64);
68
68
69 g_free (base64);
69 g_free (base64);
@@ -88,7 +88,7 @@ QVariant RootStateParser::toQVariant(GVariant* state) const
88 while (g_variant_iter_loop (&iter, "{sv}", &key, &vvalue))
88 while (g_variant_iter_loop (&iter, "{sv}", &key, &vvalue))
89 {
89 {
90 QString str = QString::fromUtf8(key);
90 QString str = QString::fromUtf8(key);
91− if (str == "icon" && !qmap.contains("icons")) {
91+ if (str == QLatin1String("icon") && !qmap.contains(QStringLiteral("icons"))) {
92 QStringList icons;
92 QStringList icons;
93
93
94 // FIXME - should be sending a url.
94 // FIXME - should be sending a url.
@@ -97,9 +97,9 @@ QVariant RootStateParser::toQVariant(GVariant* state) const
97 icons << iconUri(gicon);
97 icons << iconUri(gicon);
98 g_object_unref (gicon);
98 g_object_unref (gicon);
99 }
99 }
100− qmap.insert("icons", icons);
100+ qmap.insert(QStringLiteral("icons"), icons);
101
101
102− } else if (str == "icons") {
102+ } else if (str == QLatin1String("icons")) {
103
103
104 QStringList icons;
104 QStringList icons;
105
105
@@ -118,7 +118,7 @@ QVariant RootStateParser::toQVariant(GVariant* state) const
118 }
118 }
119 }
119 }
120 // will overwrite icon.
120 // will overwrite icon.
121− qmap.insert("icons", icons);
121+ qmap.insert(QStringLiteral("icons"), icons);
122
122
123 } else {
123 } else {
124 qmap.insert(str, ActionStateParser::toQVariant(vvalue));
124 qmap.insert(str, ActionStateParser::toQVariant(vvalue));
@@ -141,13 +141,13 @@ QVariant RootStateParser::toQVariant(GVariant* state) const
141 &accessible_name,
141 &accessible_name,
142 &visible);
142 &visible);
143
143
144− qmap["label"] = label ? QString::fromUtf8(label) : "";
144+ qmap[QStringLiteral("label")] = label ? QString::fromUtf8(label) : QLatin1String("");
145− qmap["accessible-desc"] = accessible_name ? QString::fromUtf8(accessible_name) : "";
145+ qmap[QStringLiteral("accessible-desc")] = accessible_name ? QString::fromUtf8(accessible_name) : QLatin1String("");
146− qmap["visible"] = visible;
146+ qmap[QStringLiteral("visible")] = visible;
147
147
148 gicon = g_icon_new_for_string (icon, nullptr);
148 gicon = g_icon_new_for_string (icon, nullptr);
149 if (gicon) {
149 if (gicon) {
150− qmap["icons"] = QStringList() << iconUri(gicon);
150+ qmap[QStringLiteral("icons")] = QStringList() << iconUri(gicon);
151 g_object_unref (gicon);
151 g_object_unref (gicon);
152 }
152 }
153
153
@@ -170,42 +170,42 @@ QString RootStateObject::title() const
170{
170{
171 if (!valid()) return QString();
171 if (!valid()) return QString();
172
172
173− return m_currentState.value("title", QVariant::fromValue(QString())).toString();
173+ return m_currentState.value(QStringLiteral("title"), QVariant::fromValue(QString())).toString();
174}
174}
175
175
176QString RootStateObject::leftLabel() const
176QString RootStateObject::leftLabel() const
177{
177{
178 if (!valid()) return QString();
178 if (!valid()) return QString();
179
179
180− return m_currentState.value("pre-label", QVariant::fromValue(QString())).toString();
180+ return m_currentState.value(QStringLiteral("pre-label"), QVariant::fromValue(QString())).toString();
181}
181}
182
182
183QString RootStateObject::rightLabel() const
183QString RootStateObject::rightLabel() const
184{
184{
185 if (!valid()) return QString();
185 if (!valid()) return QString();
186
186
187− return m_currentState.value("label", QVariant::fromValue(QString())).toString();
187+ return m_currentState.value(QStringLiteral("label"), QVariant::fromValue(QString())).toString();
188}
188}
189
189
190QStringList RootStateObject::icons() const
190QStringList RootStateObject::icons() const
191{
191{
192 if (!valid()) return QStringList();
192 if (!valid()) return QStringList();
193
193
194− return m_currentState.value("icons", QVariant::fromValue(QStringList())).toStringList();
194+ return m_currentState.value(QStringLiteral("icons"), QVariant::fromValue(QStringList())).toStringList();
195}
195}
196
196
197QString RootStateObject::accessibleName() const
197QString RootStateObject::accessibleName() const
198{
198{
199 if (!valid()) return QString();
199 if (!valid()) return QString();
200
200
201− return m_currentState.value("accessible-desc", QVariant::fromValue(QString())).toString();
201+ return m_currentState.value(QStringLiteral("accessible-desc"), QVariant::fromValue(QString())).toString();
202}
202}
203
203
204bool RootStateObject::indicatorVisible() const
204bool RootStateObject::indicatorVisible() const
205{
205{
206 if (!valid()) return false;
206 if (!valid()) return false;
207
207
208− return m_currentState.value("visible", QVariant::fromValue(true)).toBool();
208+ return m_currentState.value(QStringLiteral("visible"), QVariant::fromValue(true)).toBool();
209}
209}
210
210
211void RootStateObject::setCurrentState(const QVariantMap& newState)
211void RootStateObject::setCurrentState(const QVariantMap& newState)
plugins/Unity/Launcher/asadapter.cpp+10−9
@@ -38,25 +38,26 @@ void ASAdapter::syncItems(const QList<LauncherItem*> &list)
38{
38{
39 if (m_accounts && !m_user.isEmpty()) {
39 if (m_accounts && !m_user.isEmpty()) {
40 QList<QVariantMap> items;
40 QList<QVariantMap> items;
41+ items.reserve(list.count());
41
42
42 Q_FOREACH(LauncherItem *item, list) {
43 Q_FOREACH(LauncherItem *item, list) {
43 items << itemToVariant(item);
44 items << itemToVariant(item);
44 }
45 }
45
46
46− m_accounts->setUserPropertyAsync(m_user, "com.canonical.unity.AccountsService", "LauncherItems", QVariant::fromValue(items));
47+ m_accounts->setUserPropertyAsync(m_user, QStringLiteral("com.canonical.unity.AccountsService"), QStringLiteral("LauncherItems"), QVariant::fromValue(items));
47 }
48 }
48}
49}
49
50
50QVariantMap ASAdapter::itemToVariant(LauncherItem *item) const
51QVariantMap ASAdapter::itemToVariant(LauncherItem *item) const
51{
52{
52 QVariantMap details;
53 QVariantMap details;
53− details.insert("id", item->appId());
54+ details.insert(QStringLiteral("id"), item->appId());
54− details.insert("name", item->name());
55+ details.insert(QStringLiteral("name"), item->name());
55− details.insert("icon", item->icon());
56+ details.insert(QStringLiteral("icon"), item->icon());
56− details.insert("count", item->count());
57+ details.insert(QStringLiteral("count"), item->count());
57− details.insert("countVisible", item->countVisible());
58+ details.insert(QStringLiteral("countVisible"), item->countVisible());
58− details.insert("pinned", item->pinned());
59+ details.insert(QStringLiteral("pinned"), item->pinned());
59− details.insert("running", item->running());
60+ details.insert(QStringLiteral("running"), item->running());
60− details.insert("progress", item->progress());
61+ details.insert(QStringLiteral("progress"), item->progress());
61 return details;
62 return details;
62}
63}
plugins/Unity/Launcher/dbusinterface.cpp+33−33
@@ -27,7 +27,7 @@
27#include <QDebug>
27#include <QDebug>
28
28
29DBusInterface::DBusInterface(LauncherModel *parent):
29DBusInterface::DBusInterface(LauncherModel *parent):
30− UnityDBusVirtualObject("/com/canonical/Unity/Launcher", "com.canonical.Unity.Launcher", true, parent),
30+ UnityDBusVirtualObject(QStringLiteral("/com/canonical/Unity/Launcher"), QStringLiteral("com.canonical.Unity.Launcher"), true, parent),
31 m_launcherModel(parent)
31 m_launcherModel(parent)
32{
32{
33}
33}
@@ -35,13 +35,13 @@ DBusInterface::DBusInterface(LauncherModel *parent):
35QString DBusInterface::introspect(const QString &path) const
35QString DBusInterface::introspect(const QString &path) const
36{
36{
37 /* This case we should just list the nodes */
37 /* This case we should just list the nodes */
38− if (path == "/com/canonical/Unity/Launcher/" || path == "/com/canonical/Unity/Launcher") {
38+ if (path == QLatin1String("/com/canonical/Unity/Launcher/") || path == QLatin1String("/com/canonical/Unity/Launcher")) {
39 QString nodes;
39 QString nodes;
40
40
41 // Add Refresh to introspect
41 // Add Refresh to introspect
42− nodes = "<interface name=\"com.canonical.Unity.Launcher\">"
42+ nodes = QStringLiteral("<interface name=\"com.canonical.Unity.Launcher\">"
43 "<method name=\"Refresh\"/>"
43 "<method name=\"Refresh\"/>"
44− "</interface>";
44+ "</interface>");
45
45
46 // Add dynamic properties for launcher emblems
46 // Add dynamic properties for launcher emblems
47 for (int i = 0; i < m_launcherModel->rowCount(); i++) {
47 for (int i = 0; i < m_launcherModel->rowCount(); i++) {
@@ -53,18 +53,18 @@ QString DBusInterface::introspect(const QString &path) const
53 }
53 }
54
54
55 /* Should not happen, but let's handle it */
55 /* Should not happen, but let's handle it */
56− if (!path.startsWith("/com/canonical/Unity/Launcher")) {
56+ if (!path.startsWith(QLatin1String("/com/canonical/Unity/Launcher"))) {
57− return "";
57+ return QLatin1String("");
58 }
58 }
59
59
60 /* Now we should be looking at a node */
60 /* Now we should be looking at a node */
61 QString nodeiface =
61 QString nodeiface =
62− "<interface name=\"com.canonical.Unity.Launcher.Item\">"
62+ QStringLiteral("<interface name=\"com.canonical.Unity.Launcher.Item\">"
63 "<property name=\"count\" type=\"i\" access=\"readwrite\" />"
63 "<property name=\"count\" type=\"i\" access=\"readwrite\" />"
64 "<property name=\"countVisible\" type=\"b\" access=\"readwrite\" />"
64 "<property name=\"countVisible\" type=\"b\" access=\"readwrite\" />"
65 "<property name=\"progress\" type=\"i\" access=\"readwrite\" />"
65 "<property name=\"progress\" type=\"i\" access=\"readwrite\" />"
66 "<method name=\"Alert\" />"
66 "<method name=\"Alert\" />"
67− "</interface>";
67+ "</interface>");
68 return nodeiface;
68 return nodeiface;
69}
69}
70
70
@@ -109,7 +109,7 @@ QString DBusInterface::encodeAppId(const QString& appId)
109 (chr >= '0' && chr <= '9'&& i != 0)) {
109 (chr >= '0' && chr <= '9'&& i != 0)) {
110 encoded.append(chr);
110 encoded.append(chr);
111 } else {
111 } else {
112− QString hexval = QString("_%1").arg(chr, 2, 16, QChar('0'));
112+ QString hexval = QStringLiteral("_%1").arg(chr, 2, 16, QChar('0'));
113 encoded.append(hexval.toUpper());
113 encoded.append(hexval.toUpper());
114 }
114 }
115 }
115 }
@@ -127,10 +127,10 @@ bool DBusInterface::handleMessage(const QDBusMessage& message, const QDBusConnec
127 /* Break down the path to just the app id */
127 /* Break down the path to just the app id */
128 bool validpath = true;
128 bool validpath = true;
129 QString pathtemp = message.path();
129 QString pathtemp = message.path();
130− if (!pathtemp.startsWith("/com/canonical/Unity/Launcher/")) {
130+ if (!pathtemp.startsWith(QLatin1String("/com/canonical/Unity/Launcher/"))) {
131 validpath = false;
131 validpath = false;
132 }
132 }
133− pathtemp.remove("/com/canonical/Unity/Launcher/");
133+ pathtemp.remove(QStringLiteral("/com/canonical/Unity/Launcher/"));
134 if (pathtemp.indexOf('/') >= 0) {
134 if (pathtemp.indexOf('/') >= 0) {
135 validpath = false;
135 validpath = false;
136 }
136 }
@@ -139,15 +139,15 @@ bool DBusInterface::handleMessage(const QDBusMessage& message, const QDBusConnec
139 QString appid = decodeAppId(pathtemp);
139 QString appid = decodeAppId(pathtemp);
140
140
141 // First handle methods of the Launcher interface
141 // First handle methods of the Launcher interface
142− if (message.interface() == "com.canonical.Unity.Launcher") {
142+ if (message.interface() == QLatin1String("com.canonical.Unity.Launcher")) {
143− if (message.member() == "Refresh") {
143+ if (message.member() == QLatin1String("Refresh")) {
144 QDBusMessage reply = message.createReply();
144 QDBusMessage reply = message.createReply();
145 Q_EMIT refreshCalled();
145 Q_EMIT refreshCalled();
146 return connection.send(reply);
146 return connection.send(reply);
147 }
147 }
148− } else if (message.interface() == "com.canonical.Unity.Launcher.Item") {
148+ } else if (message.interface() == QLatin1String("com.canonical.Unity.Launcher.Item")) {
149 // Handle methods of the Launcher-Item interface
149 // Handle methods of the Launcher-Item interface
150− if (message.member() == "Alert" && validpath) {
150+ if (message.member() == QLatin1String("Alert") && validpath) {
151 QDBusMessage reply = message.createReply();
151 QDBusMessage reply = message.createReply();
152 Q_EMIT alertCalled(appid);
152 Q_EMIT alertCalled(appid);
153 return connection.send(reply);
153 return connection.send(reply);
@@ -155,15 +155,15 @@ bool DBusInterface::handleMessage(const QDBusMessage& message, const QDBusConnec
155 }
155 }
156
156
157 // Now handle dynamic properties (for launcher emblems)
157 // Now handle dynamic properties (for launcher emblems)
158− if (message.interface() != "org.freedesktop.DBus.Properties") {
158+ if (message.interface() != QLatin1String("org.freedesktop.DBus.Properties")) {
159 return false;
159 return false;
160 }
160 }
161
161
162− if (message.member() == "Get" && (message.arguments().count() != 2 || message.arguments()[0].toString() != "com.canonical.Unity.Launcher.Item")) {
162+ if (message.member() == QLatin1String("Get") && (message.arguments().count() != 2 || message.arguments()[0].toString() != QLatin1String("com.canonical.Unity.Launcher.Item"))) {
163 return false;
163 return false;
164 }
164 }
165
165
166− if (message.member() == "Set" && (message.arguments().count() != 3 || message.arguments()[0].toString() != "com.canonical.Unity.Launcher.Item")) {
166+ if (message.member() == QLatin1String("Set") && (message.arguments().count() != 3 || message.arguments()[0].toString() != QLatin1String("com.canonical.Unity.Launcher.Item"))) {
167 return false;
167 return false;
168 }
168 }
169
169
@@ -175,45 +175,45 @@ bool DBusInterface::handleMessage(const QDBusMessage& message, const QDBusConnec
175 LauncherItem *item = static_cast<LauncherItem*>(m_launcherModel->get(index));
175 LauncherItem *item = static_cast<LauncherItem*>(m_launcherModel->get(index));
176
176
177 QVariantList retval;
177 QVariantList retval;
178− if (message.member() == "Get") {
178+ if (message.member() == QLatin1String("Get")) {
179 QString cachedString = message.arguments()[1].toString();
179 QString cachedString = message.arguments()[1].toString();
180 if (!item) {
180 if (!item) {
181 return false;
181 return false;
182 }
182 }
183− if (cachedString == "count") {
183+ if (cachedString == QLatin1String("count")) {
184 retval.append(QVariant::fromValue(QDBusVariant(item->count())));
184 retval.append(QVariant::fromValue(QDBusVariant(item->count())));
185− } else if (cachedString == "countVisible") {
185+ } else if (cachedString == QLatin1String("countVisible")) {
186 retval.append(QVariant::fromValue(QDBusVariant(item->countVisible())));
186 retval.append(QVariant::fromValue(QDBusVariant(item->countVisible())));
187− } else if (cachedString == "progress") {
187+ } else if (cachedString == QLatin1String("progress")) {
188 retval.append(QVariant::fromValue(QDBusVariant(item->progress())));
188 retval.append(QVariant::fromValue(QDBusVariant(item->progress())));
189 }
189 }
190− } else if (message.member() == "Set") {
190+ } else if (message.member() == QLatin1String("Set")) {
191 QString cachedString = message.arguments()[1].toString();
191 QString cachedString = message.arguments()[1].toString();
192− if (cachedString == "count") {
192+ if (cachedString == QLatin1String("count")) {
193 int newCount = message.arguments()[2].value<QDBusVariant>().variant().toInt();
193 int newCount = message.arguments()[2].value<QDBusVariant>().variant().toInt();
194 if (!item || newCount != item->count()) {
194 if (!item || newCount != item->count()) {
195 Q_EMIT countChanged(appid, newCount);
195 Q_EMIT countChanged(appid, newCount);
196− notifyPropertyChanged("com.canonical.Unity.Launcher.Item", encodeAppId(appid), "count", QVariant(newCount));
196+ notifyPropertyChanged(QStringLiteral("com.canonical.Unity.Launcher.Item"), encodeAppId(appid), QStringLiteral("count"), QVariant(newCount));
197 }
197 }
198− } else if (cachedString == "countVisible") {
198+ } else if (cachedString == QLatin1String("countVisible")) {
199 bool newVisible = message.arguments()[2].value<QDBusVariant>().variant().toBool();
199 bool newVisible = message.arguments()[2].value<QDBusVariant>().variant().toBool();
200 if (!item || newVisible != item->countVisible()) {
200 if (!item || newVisible != item->countVisible()) {
201 Q_EMIT countVisibleChanged(appid, newVisible);
201 Q_EMIT countVisibleChanged(appid, newVisible);
202− notifyPropertyChanged("com.canonical.Unity.Launcher.Item", encodeAppId(appid), "countVisible", newVisible);
202+ notifyPropertyChanged(QStringLiteral("com.canonical.Unity.Launcher.Item"), encodeAppId(appid), QStringLiteral("countVisible"), newVisible);
203 }
203 }
204− } else if (cachedString == "progress") {
204+ } else if (cachedString == QLatin1String("progress")) {
205 int newProgress = message.arguments()[2].value<QDBusVariant>().variant().toInt();
205 int newProgress = message.arguments()[2].value<QDBusVariant>().variant().toInt();
206 if (!item || newProgress != item->progress()) {
206 if (!item || newProgress != item->progress()) {
207 Q_EMIT progressChanged(appid, newProgress);
207 Q_EMIT progressChanged(appid, newProgress);
208− notifyPropertyChanged("com.canonical.Unity.Launcher.Item", encodeAppId(appid), "progress", QVariant(newProgress));
208+ notifyPropertyChanged(QStringLiteral("com.canonical.Unity.Launcher.Item"), encodeAppId(appid), QStringLiteral("progress"), QVariant(newProgress));
209 }
209 }
210 }
210 }
211− } else if (message.member() == "GetAll") {
211+ } else if (message.member() == QLatin1String("GetAll")) {
212 if (item) {
212 if (item) {
213 QVariantMap all;
213 QVariantMap all;
214− all.insert("count", item->count());
214+ all.insert(QStringLiteral("count"), item->count());
215− all.insert("countVisible", item->countVisible());
215+ all.insert(QStringLiteral("countVisible"), item->countVisible());
216− all.insert("progress", item->progress());
216+ all.insert(QStringLiteral("progress"), item->progress());
217 retval.append(all);
217 retval.append(all);
218 }
218 }
219 } else {
219 } else {
plugins/Unity/Launcher/desktopfilehandler.cpp+17−16
@@ -70,7 +70,7 @@ void DesktopFileHandler::load()
70
70
71 QStringList searchDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
71 QStringList searchDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
72#ifdef LAUNCHER_TESTING
72#ifdef LAUNCHER_TESTING
73− searchDirs << ".";
73+ searchDirs << QStringLiteral(".");
74#endif
74#endif
75
75
76 QString path;
76 QString path;
@@ -79,14 +79,15 @@ void DesktopFileHandler::load()
79 helper.replace(dashPos, 1, '/');
79 helper.replace(dashPos, 1, '/');
80 }
80 }
81
81
82− if (helper.contains("/")) {
82+ if (helper.contains('/')) {
83− path += helper.split('/').first() + '/';
83+ path += helper.split('/').at(0) + '/';
84 helper.remove(QRegExp("^" + path));
84 helper.remove(QRegExp("^" + path));
85 }
85 }
86
86
87 Q_FOREACH(const QString &searchDirName, searchDirs) {
87 Q_FOREACH(const QString &searchDirName, searchDirs) {
88 QDir searchDir(searchDirName + "/" + path);
88 QDir searchDir(searchDirName + "/" + path);
89+ const QString desktop = QStringLiteral("*.desktop");
89− Q_FOREACH(const QString &desktopFile, searchDir.entryList(QStringList() << "*.desktop")) {
90+ Q_FOREACH(const QString &desktopFile, searchDir.entryList(QStringList() << desktop)) {
90 if (desktopFile.startsWith(helper)) {
91 if (desktopFile.startsWith(helper)) {
91 QFileInfo fileInfo(searchDir, desktopFile);
92 QFileInfo fileInfo(searchDir, desktopFile);
92 m_filename = fileInfo.absoluteFilePath();
93 m_filename = fileInfo.absoluteFilePath();
@@ -95,7 +96,7 @@ void DesktopFileHandler::load()
95 }
96 }
96 }
97 }
97
98
98− dashPos = helper.indexOf("-");
99+ dashPos = helper.indexOf('-');
99 } while (dashPos != -1);
100 } while (dashPos != -1);
100}
101}
101
102
@@ -107,25 +108,25 @@ QString DesktopFileHandler::displayName() const
107
108
108 QSettings settings(m_filename, QSettings::IniFormat);
109 QSettings settings(m_filename, QSettings::IniFormat);
109 settings.setIniCodec("UTF-8");
110 settings.setIniCodec("UTF-8");
110− settings.beginGroup("Desktop Entry");
111+ settings.beginGroup(QStringLiteral("Desktop Entry"));
111
112
112 // First try to find Name[xx_YY] and Name[xx] in .desktop file
113 // First try to find Name[xx_YY] and Name[xx] in .desktop file
113 QString locale = QLocale().name();
114 QString locale = QLocale().name();
114 QString shortLocale = locale.split('_').first();
115 QString shortLocale = locale.split('_').first();
115
116
116− if (locale != shortLocale && settings.contains(QString("Name[%1]").arg(locale))) {
117+ if (locale != shortLocale && settings.contains(QStringLiteral("Name[%1]").arg(locale))) {
117− return settings.value(QString("Name[%1]").arg(locale)).toString();
118+ return settings.value(QStringLiteral("Name[%1]").arg(locale)).toString();
118 }
119 }
119
120
120− if (settings.contains(QString("Name[%1]").arg(shortLocale))) {
121+ if (settings.contains(QStringLiteral("Name[%1]").arg(shortLocale))) {
121− return settings.value(QString("Name[%1]").arg(shortLocale)).toString();
122+ return settings.value(QStringLiteral("Name[%1]").arg(shortLocale)).toString();
122 }
123 }
123
124
124 // No translation found in desktop file. Get the untranslated one and have a go with gettext.
125 // No translation found in desktop file. Get the untranslated one and have a go with gettext.
125− QString displayName = settings.value("Name").toString();
126+ QString displayName = settings.value(QStringLiteral("Name")).toString();
126
127
127− if (settings.contains("X-Ubuntu-Gettext-Domain")) {
128+ if (settings.contains(QStringLiteral("X-Ubuntu-Gettext-Domain"))) {
128− const QString domain = settings.value("X-Ubuntu-Gettext-Domain").toString();
129+ const QString domain = settings.value(QStringLiteral("X-Ubuntu-Gettext-Domain")).toString();
129 return dgettext(domain.toUtf8().constData(), displayName.toUtf8().constData());
130 return dgettext(domain.toUtf8().constData(), displayName.toUtf8().constData());
130 }
131 }
131
132
@@ -140,9 +141,9 @@ QString DesktopFileHandler::icon() const
140
141
141 QSettings settings(m_filename, QSettings::IniFormat);
142 QSettings settings(m_filename, QSettings::IniFormat);
142 settings.setIniCodec("UTF-8");
143 settings.setIniCodec("UTF-8");
143− settings.beginGroup("Desktop Entry");
144+ settings.beginGroup(QStringLiteral("Desktop Entry"));
144− QString iconString = settings.value("Icon").toString();
145+ QString iconString = settings.value(QStringLiteral("Icon")).toString();
145− QString pathString = settings.value("Path").toString();
146+ QString pathString = settings.value(QStringLiteral("Path")).toString();
146
147
147 if (QFileInfo(iconString).exists()) {
148 if (QFileInfo(iconString).exists()) {
148 return QFileInfo(iconString).absoluteFilePath();
149 return QFileInfo(iconString).absoluteFilePath();
plugins/Unity/Launcher/gsettings.cpp+15−12
@@ -32,20 +32,22 @@ QStringList GSettings::storedApplications() const
32{
32{
33 QStringList storedApps;
33 QStringList storedApps;
34
34
35+ const QString items = QStringLiteral("items");
35− Q_FOREACH(const QString &entry, m_gSettings->get("items").toStringList()) {
36+ Q_FOREACH(const QString &entry, m_gSettings->get(items).toStringList()) {
36− if (entry.startsWith("application:///")) {
37+ if (entry.startsWith(QLatin1String("application:///"))) {
37 // convert legacy entries to new world appids
38 // convert legacy entries to new world appids
38 QString appId = entry;
39 QString appId = entry;
39 // Transform "application://foobar.desktop" to "foobar"
40 // Transform "application://foobar.desktop" to "foobar"
40− appId.remove(QRegExp("^application:///"));
41+ appId.remove(QRegExp(QStringLiteral("^application:///")));
41− appId.remove(QRegExp(".desktop$"));
42+ appId.remove(QRegExp(QStringLiteral(".desktop$")));
42 storedApps << appId;
43 storedApps << appId;
43− } else if (entry.startsWith("appid://")) {
44+ } else if (entry.startsWith(QLatin1String("appid://"))) {
44 QString appId = entry;
45 QString appId = entry;
45− appId.remove("appid://");
46+ appId.remove(QStringLiteral("appid://"));
46− if (appId.split('/').count() == 3) {
47+ const QStringList splittedAppId = appId.split('/');
48+ if (splittedAppId.count() == 3) {
47 // Strip current-user-version in case its there
49 // Strip current-user-version in case its there
48− appId = appId.split('/').first() + "_" + appId.split('/').at(1);
50+ appId = splittedAppId.first() + "_" + splittedAppId.at(1);
49 }
51 }
50 storedApps << appId;
52 storedApps << appId;
51 }
53 }
@@ -56,19 +58,20 @@ QStringList GSettings::storedApplications() const
56void GSettings::setStoredApplications(const QStringList &storedApplications)
58void GSettings::setStoredApplications(const QStringList &storedApplications)
57{
59{
58 QStringList gSettingsList;
60 QStringList gSettingsList;
61+ gSettingsList.reserve(storedApplications.count());
59 Q_FOREACH(const QString &entry, storedApplications) {
62 Q_FOREACH(const QString &entry, storedApplications) {
60− gSettingsList << QString("appid://%1").arg(entry);
63+ gSettingsList << QStringLiteral("appid://%1").arg(entry);
61 }
64 }
62 // GSettings will emit a changed signal to ourselves. Let's cache the items
65 // GSettings will emit a changed signal to ourselves. Let's cache the items
63 // and only forward the changed signal when the list did actually change.
66 // and only forward the changed signal when the list did actually change.
64 m_cachedItems = gSettingsList;
67 m_cachedItems = gSettingsList;
65− m_gSettings->set("items", gSettingsList);
68+ m_gSettings->set(QStringLiteral("items"), gSettingsList);
66}
69}
67
70
68void GSettings::onSettingsChanged(const QString &key)
71void GSettings::onSettingsChanged(const QString &key)
69{
72{
70− if (key == "items") {
73+ if (key == QLatin1String("items")) {
71− const QStringList cachedItems = m_gSettings->get("items").toStringList();
74+ const QStringList cachedItems = m_gSettings->get(QStringLiteral("items")).toStringList();
72 if (m_cachedItems != cachedItems) {
75 if (m_cachedItems != cachedItems) {
73 m_cachedItems = cachedItems;
76 m_cachedItems = cachedItems;
74 Q_EMIT changed();
77 Q_EMIT changed();
plugins/Unity/Launcher/launcheritem.cpp+6−6
@@ -38,17 +38,17 @@ LauncherItem::LauncherItem(const QString &appId, const QString &name, const QStr
38 m_quickList(new QuickListModel(this))
38 m_quickList(new QuickListModel(this))
39{
39{
40 QuickListEntry nameAction;
40 QuickListEntry nameAction;
41− nameAction.setActionId("launch_item");
41+ nameAction.setActionId(QStringLiteral("launch_item"));
42 nameAction.setText(m_name);
42 nameAction.setText(m_name);
43 m_quickList->appendAction(nameAction);
43 m_quickList->appendAction(nameAction);
44
44
45 QuickListEntry pinningAction;
45 QuickListEntry pinningAction;
46− pinningAction.setActionId("pin_item");
46+ pinningAction.setActionId(QStringLiteral("pin_item"));
47 pinningAction.setText(gettext("Pin shortcut"));
47 pinningAction.setText(gettext("Pin shortcut"));
48 m_quickList->appendAction(pinningAction);
48 m_quickList->appendAction(pinningAction);
49
49
50− m_quitAction.setActionId("stop_item");
50+ m_quitAction.setActionId(QStringLiteral("stop_item"));
51− m_quitAction.setIcon("application-exit");
51+ m_quitAction.setIcon(QStringLiteral("application-exit"));
52 m_quitAction.setText(gettext("Quit"));
52 m_quitAction.setText(gettext("Quit"));
53}
53}
54
54
@@ -67,7 +67,7 @@ void LauncherItem::setName(const QString &name)
67 if (m_name != name) {
67 if (m_name != name) {
68 m_name = name;
68 m_name = name;
69 QuickListEntry entry;
69 QuickListEntry entry;
70− entry.setActionId("launch_item");
70+ entry.setActionId(QStringLiteral("launch_item"));
71 entry.setText(m_name);
71 entry.setText(m_name);
72 m_quickList->updateAction(entry);
72 m_quickList->updateAction(entry);
73 Q_EMIT nameChanged(name);
73 Q_EMIT nameChanged(name);
@@ -102,7 +102,7 @@ void LauncherItem::setPinned(bool pinned)
102 // Even if pinned status didn't change, we want to update text in case
102 // Even if pinned status didn't change, we want to update text in case
103 // the locale has changed since we last set pinned status.
103 // the locale has changed since we last set pinned status.
104 QuickListEntry entry;
104 QuickListEntry entry;
105− entry.setActionId("pin_item");
105+ entry.setActionId(QStringLiteral("pin_item"));
106 entry.setText(pinned ? gettext("Unpin shortcut") : gettext("Pin shortcut"));
106 entry.setText(pinned ? gettext("Unpin shortcut") : gettext("Pin shortcut"));
107 m_quickList->updateAction(entry);
107 m_quickList->updateAction(entry);
108}
108}
plugins/Unity/Launcher/launchermodel.cpp+6−6
@@ -204,15 +204,15 @@ void LauncherModel::quickListActionInvoked(const QString &appId, int actionIndex
204 const QString actionId = model->get(actionIndex).actionId();
204 const QString actionId = model->get(actionIndex).actionId();
205
205
206 // Check if this is one of the launcher actions we handle ourselves
206 // Check if this is one of the launcher actions we handle ourselves
207− if (actionId == "pin_item") {
207+ if (actionId == QLatin1String("pin_item")) {
208 if (item->pinned()) {
208 if (item->pinned()) {
209 requestRemove(appId);
209 requestRemove(appId);
210 } else {
210 } else {
211 pin(appId);
211 pin(appId);
212 }
212 }
213− } else if (actionId == "launch_item") {
213+ } else if (actionId == QLatin1String("launch_item")) {
214 QDesktopServices::openUrl(getUrlForAppId(appId));
214 QDesktopServices::openUrl(getUrlForAppId(appId));
215− } else if (actionId == "stop_item") { // Quit
215+ } else if (actionId == QLatin1String("stop_item")) { // Quit
216 if (m_appManager) {
216 if (m_appManager) {
217 m_appManager->stopApplication(appId);
217 m_appManager->stopApplication(appId);
218 }
218 }
@@ -236,13 +236,13 @@ QString LauncherModel::getUrlForAppId(const QString &appId) const
236 return QString();
236 return QString();
237 }
237 }
238
238
239− if (!appId.contains("_")) {
239+ if (!appId.contains('_')) {
240 return "application:///" + appId + ".desktop";
240 return "application:///" + appId + ".desktop";
241 }
241 }
242
242
243 QStringList parts = appId.split('_');
243 QStringList parts = appId.split('_');
244 QString package = parts.value(0);
244 QString package = parts.value(0);
245− QString app = parts.value(1, "first-listed-app");
245+ QString app = parts.value(1, QStringLiteral("first-listed-app"));
246 return "appid://" + package + "/" + app + "/current-user-version";
246 return "appid://" + package + "/" + app + "/current-user-version";
247}
247}
248
248
@@ -503,7 +503,7 @@ void LauncherModel::applicationAdded(const QModelIndex &parent, int row)
503 return;
503 return;
504 }
504 }
505
505
506− if (app->appId() == "unity8-dash") {
506+ if (app->appId() == QLatin1String("unity8-dash")) {
507 // Not adding the dash app
507 // Not adding the dash app
508 return;
508 return;
509 }
509 }
plugins/Unity/Launcher/plugin.cpp+5−5
@@ -39,11 +39,11 @@ void UnityLauncherPlugin::registerTypes(const char *uri)
39{
39{
40 Q_ASSERT(uri == QLatin1String("Unity.Launcher"));
40 Q_ASSERT(uri == QLatin1String("Unity.Launcher"));
41
41
42− qmlRegisterUncreatableType<LauncherModelInterface>(uri, 0, 1, "LauncherModelInterface", "Abstract Interface. Cannot be instantiated.");
42+ qmlRegisterUncreatableType<LauncherModelInterface>(uri, 0, 1, "LauncherModelInterface", QStringLiteral("Abstract Interface. Cannot be instantiated."));
43− qmlRegisterUncreatableType<LauncherItemInterface>(uri, 0, 1, "LauncherItemInterface", "Abstract Interface. Cannot be instantiated.");
43+ qmlRegisterUncreatableType<LauncherItemInterface>(uri, 0, 1, "LauncherItemInterface", QStringLiteral("Abstract Interface. Cannot be instantiated."));
44− qmlRegisterUncreatableType<QuickListModelInterface>(uri, 0, 1, "QuickListInterface", "Abstract Interface. Cannot be instantiated.");
44+ qmlRegisterUncreatableType<QuickListModelInterface>(uri, 0, 1, "QuickListInterface", QStringLiteral("Abstract Interface. Cannot be instantiated."));
45
45
46 qmlRegisterSingletonType<LauncherModel>(uri, 0, 1, "LauncherModel", modelProvider);
46 qmlRegisterSingletonType<LauncherModel>(uri, 0, 1, "LauncherModel", modelProvider);
47− qmlRegisterUncreatableType<LauncherItem>(uri, 0, 1, "LauncherItem", "Can't create new Launcher Items in QML. Get them from the LauncherModel.");
47+ qmlRegisterUncreatableType<LauncherItem>(uri, 0, 1, "LauncherItem", QStringLiteral("Can't create new Launcher Items in QML. Get them from the LauncherModel."));
48− qmlRegisterUncreatableType<QuickListModel>(uri, 0, 1, "QuickListModel", "Can't create a QuickListModel in QML. Get them from the LauncherItems.");
48+ qmlRegisterUncreatableType<QuickListModel>(uri, 0, 1, "QuickListModel", QStringLiteral("Can't create a QuickListModel in QML. Get them from the LauncherItems."));
49}
49}
plugins/Unity/Session/dbusunitysessionservice.cpp+41−41
@@ -58,7 +58,7 @@ public:
58 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE,
58 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE,
59 LOGIN1_PATH,
59 LOGIN1_PATH,
60 LOGIN1_IFACE,
60 LOGIN1_IFACE,
61− "GetSessionByPID");
61+ QStringLiteral("GetSessionByPID"));
62 msg << (quint32) getpid();
62 msg << (quint32) getpid();
63
63
64 QDBusReply<QDBusObjectPath> reply = QDBusConnection::systemBus().asyncCall(msg);
64 QDBusReply<QDBusObjectPath> reply = QDBusConnection::systemBus().asyncCall(msg);
@@ -66,13 +66,13 @@ public:
66 logindSessionPath = reply.value().path();
66 logindSessionPath = reply.value().path();
67
67
68 // start watching the Active property
68 // start watching the Active property
69− QDBusConnection::systemBus().connect(LOGIN1_SERVICE, logindSessionPath, "org.freedesktop.DBus.Properties", "PropertiesChanged",
69+ QDBusConnection::systemBus().connect(LOGIN1_SERVICE, logindSessionPath, QStringLiteral("org.freedesktop.DBus.Properties"), QStringLiteral("PropertiesChanged"),
70 this, SLOT(onPropertiesChanged(QString,QVariantMap,QStringList)));
70 this, SLOT(onPropertiesChanged(QString,QVariantMap,QStringList)));
71
71
72 setupSystemdInhibition();
72 setupSystemdInhibition();
73
73
74 // re-enable the inhibition upon resume from sleep
74 // re-enable the inhibition upon resume from sleep
75− QDBusConnection::systemBus().connect(LOGIN1_SERVICE, LOGIN1_PATH, LOGIN1_IFACE, "PrepareForSleep",
75+ QDBusConnection::systemBus().connect(LOGIN1_SERVICE, LOGIN1_PATH, LOGIN1_IFACE, QStringLiteral("PrepareForSleep"),
76 this, SLOT(onResuming(bool)));
76 this, SLOT(onResuming(bool)));
77 } else {
77 } else {
78 qWarning() << "Failed to get logind session path" << reply.error().message();
78 qWarning() << "Failed to get logind session path" << reply.error().message();
@@ -87,7 +87,7 @@ public:
87 // inhibit systemd handling of power/sleep/lid buttons
87 // inhibit systemd handling of power/sleep/lid buttons
88 // http://www.freedesktop.org/wiki/Software/systemd/inhibit
88 // http://www.freedesktop.org/wiki/Software/systemd/inhibit
89
89
90− QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE, LOGIN1_PATH, LOGIN1_IFACE, "Inhibit");
90+ QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE, LOGIN1_PATH, LOGIN1_IFACE, QStringLiteral("Inhibit"));
91 msg << "handle-power-key:handle-suspend-key:handle-hibernate-key:handle-lid-switch"; // what
91 msg << "handle-power-key:handle-suspend-key:handle-hibernate-key:handle-lid-switch"; // what
92 msg << "Unity"; // who
92 msg << "Unity"; // who
93 msg << "Unity8 handles power events"; // why
93 msg << "Unity8 handles power events"; // why
@@ -128,8 +128,8 @@ public:
128
128
129 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE,
129 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE,
130 logindSessionPath,
130 logindSessionPath,
131− "org.freedesktop.DBus.Properties",
131+ QStringLiteral("org.freedesktop.DBus.Properties"),
132− "Get");
132+ QStringLiteral("Get"));
133 msg << LOGIN1_SESSION_IFACE;
133 msg << LOGIN1_SESSION_IFACE;
134 msg << ACTIVE_KEY;
134 msg << ACTIVE_KEY;
135
135
@@ -154,8 +154,8 @@ public:
154 {
154 {
155 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE,
155 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE,
156 logindSessionPath,
156 logindSessionPath,
157− "org.freedesktop.DBus.Properties",
157+ QStringLiteral("org.freedesktop.DBus.Properties"),
158− "Get");
158+ QStringLiteral("Get"));
159 msg << LOGIN1_SESSION_IFACE;
159 msg << LOGIN1_SESSION_IFACE;
160 msg << IDLE_SINCE_KEY;
160 msg << IDLE_SINCE_KEY;
161
161
@@ -174,7 +174,7 @@ public:
174 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE,
174 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE,
175 logindSessionPath,
175 logindSessionPath,
176 LOGIN1_SESSION_IFACE,
176 LOGIN1_SESSION_IFACE,
177− "SetIdleHint");
177+ QStringLiteral("SetIdleHint"));
178 msg << idle;
178 msg << idle;
179 QDBusConnection::systemBus().asyncCall(msg);
179 QDBusConnection::systemBus().asyncCall(msg);
180 }
180 }
@@ -217,14 +217,14 @@ Q_SIGNALS:
217Q_GLOBAL_STATIC(DBusUnitySessionServicePrivate, d)
217Q_GLOBAL_STATIC(DBusUnitySessionServicePrivate, d)
218
218
219DBusUnitySessionService::DBusUnitySessionService()
219DBusUnitySessionService::DBusUnitySessionService()
220− : UnityDBusObject("/com/canonical/Unity/Session", "com.canonical.Unity")
220+ : UnityDBusObject(QStringLiteral("/com/canonical/Unity/Session"), QStringLiteral("com.canonical.Unity"))
221{
221{
222 if (!d->logindSessionPath.isEmpty()) {
222 if (!d->logindSessionPath.isEmpty()) {
223 // connect our Lock() slot to the logind's session Lock() signal
223 // connect our Lock() slot to the logind's session Lock() signal
224− QDBusConnection::systemBus().connect(LOGIN1_SERVICE, d->logindSessionPath, LOGIN1_SESSION_IFACE, "Lock", this, SLOT(Lock()));
224+ QDBusConnection::systemBus().connect(LOGIN1_SERVICE, d->logindSessionPath, LOGIN1_SESSION_IFACE, QStringLiteral("Lock"), this, SLOT(Lock()));
225 // ... and our Unlocked() signal to the logind's session Unlock() signal
225 // ... and our Unlocked() signal to the logind's session Unlock() signal
226 // (lightdm handles the unlocking by calling logind's Unlock method which in turn emits this signal we connect to)
226 // (lightdm handles the unlocking by calling logind's Unlock method which in turn emits this signal we connect to)
227− QDBusConnection::systemBus().connect(LOGIN1_SERVICE, d->logindSessionPath, LOGIN1_SESSION_IFACE, "Unlock", this, SIGNAL(Unlocked()));
227+ QDBusConnection::systemBus().connect(LOGIN1_SERVICE, d->logindSessionPath, LOGIN1_SESSION_IFACE, QStringLiteral("Unlock"), this, SIGNAL(Unlocked()));
228 } else {
228 } else {
229 qWarning() << "Failed to connect to logind's session Lock/Unlock signals";
229 qWarning() << "Failed to connect to logind's session Lock/Unlock signals";
230 }
230 }
@@ -239,36 +239,36 @@ void DBusUnitySessionService::Logout()
239
239
240void DBusUnitySessionService::EndSession()
240void DBusUnitySessionService::EndSession()
241{
241{
242− const QDBusMessage msg = QDBusMessage::createMethodCall("com.ubuntu.Upstart",
242+ const QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("com.ubuntu.Upstart"),
243− "/com/ubuntu/Upstart",
243+ QStringLiteral("/com/ubuntu/Upstart"),
244− "com.ubuntu.Upstart0_6",
244+ QStringLiteral("com.ubuntu.Upstart0_6"),
245− "EndSession");
245+ QStringLiteral("EndSession"));
246 QDBusConnection::sessionBus().asyncCall(msg);
246 QDBusConnection::sessionBus().asyncCall(msg);
247}
247}
248
248
249bool DBusUnitySessionService::CanHibernate() const
249bool DBusUnitySessionService::CanHibernate() const
250{
250{
251− return d->checkLogin1Call("CanHibernate");
251+ return d->checkLogin1Call(QStringLiteral("CanHibernate"));
252}
252}
253
253
254bool DBusUnitySessionService::CanSuspend() const
254bool DBusUnitySessionService::CanSuspend() const
255{
255{
256− return d->checkLogin1Call("CanSuspend");
256+ return d->checkLogin1Call(QStringLiteral("CanSuspend"));
257}
257}
258
258
259bool DBusUnitySessionService::CanHybridSleep() const
259bool DBusUnitySessionService::CanHybridSleep() const
260{
260{
261− return d->checkLogin1Call("CanHybridSleep");
261+ return d->checkLogin1Call(QStringLiteral("CanHybridSleep"));
262}
262}
263
263
264bool DBusUnitySessionService::CanReboot() const
264bool DBusUnitySessionService::CanReboot() const
265{
265{
266− return d->checkLogin1Call("CanReboot");
266+ return d->checkLogin1Call(QStringLiteral("CanReboot"));
267}
267}
268
268
269bool DBusUnitySessionService::CanShutdown() const
269bool DBusUnitySessionService::CanShutdown() const
270{
270{
271− return d->checkLogin1Call("CanPowerOff");
271+ return d->checkLogin1Call(QStringLiteral("CanPowerOff"));
272}
272}
273
273
274bool DBusUnitySessionService::CanLock() const
274bool DBusUnitySessionService::CanLock() const
@@ -320,10 +320,10 @@ void DBusUnitySessionService::Lock()
320{
320{
321 // lock the session using the org.freedesktop.DisplayManager system DBUS service
321 // lock the session using the org.freedesktop.DisplayManager system DBUS service
322 const QString sessionPath = QString::fromLocal8Bit(qgetenv("XDG_SESSION_PATH"));
322 const QString sessionPath = QString::fromLocal8Bit(qgetenv("XDG_SESSION_PATH"));
323− QDBusMessage msg = QDBusMessage::createMethodCall("org.freedesktop.DisplayManager",
323+ QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.DisplayManager"),
324 sessionPath,
324 sessionPath,
325− "org.freedesktop.DisplayManager.Session",
325+ QStringLiteral("org.freedesktop.DisplayManager.Session"),
326− "Lock");
326+ QStringLiteral("Lock"));
327 QDBusReply<void> reply = QDBusConnection::systemBus().asyncCall(msg);
327 QDBusReply<void> reply = QDBusConnection::systemBus().asyncCall(msg);
328 if (!reply.isValid()) {
328 if (!reply.isValid()) {
329 qWarning() << "Lock call failed" << reply.error().message();
329 qWarning() << "Lock call failed" << reply.error().message();
@@ -346,7 +346,7 @@ void DBusUnitySessionService::RequestLogout()
346
346
347void DBusUnitySessionService::Reboot()
347void DBusUnitySessionService::Reboot()
348{
348{
349− d->makeLogin1Call("Reboot", {false});
349+ d->makeLogin1Call(QStringLiteral("Reboot"), {false});
350}
350}
351
351
352void DBusUnitySessionService::RequestReboot()
352void DBusUnitySessionService::RequestReboot()
@@ -357,22 +357,22 @@ void DBusUnitySessionService::RequestReboot()
357
357
358void DBusUnitySessionService::Shutdown()
358void DBusUnitySessionService::Shutdown()
359{
359{
360− d->makeLogin1Call("PowerOff", {false});
360+ d->makeLogin1Call(QStringLiteral("PowerOff"), {false});
361}
361}
362
362
363void DBusUnitySessionService::Suspend()
363void DBusUnitySessionService::Suspend()
364{
364{
365− d->makeLogin1Call("Suspend", {false});
365+ d->makeLogin1Call(QStringLiteral("Suspend"), {false});
366}
366}
367
367
368void DBusUnitySessionService::Hibernate()
368void DBusUnitySessionService::Hibernate()
369{
369{
370− d->makeLogin1Call("Hibernate", {false});
370+ d->makeLogin1Call(QStringLiteral("Hibernate"), {false});
371}
371}
372
372
373void DBusUnitySessionService::HybridSleep()
373void DBusUnitySessionService::HybridSleep()
374{
374{
375− d->makeLogin1Call("HybridSleep", {false});
375+ d->makeLogin1Call(QStringLiteral("HybridSleep"), {false});
376}
376}
377
377
378void DBusUnitySessionService::RequestShutdown()
378void DBusUnitySessionService::RequestShutdown()
@@ -392,16 +392,16 @@ enum class Action : unsigned
392
392
393void performAsyncUnityCall(const QString &method)
393void performAsyncUnityCall(const QString &method)
394{
394{
395− const QDBusMessage msg = QDBusMessage::createMethodCall("com.canonical.Unity",
395+ const QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("com.canonical.Unity"),
396− "/com/canonical/Unity/Session",
396+ QStringLiteral("/com/canonical/Unity/Session"),
397− "com.canonical.Unity.Session",
397+ QStringLiteral("com.canonical.Unity.Session"),
398 method);
398 method);
399 QDBusConnection::sessionBus().asyncCall(msg);
399 QDBusConnection::sessionBus().asyncCall(msg);
400}
400}
401
401
402
402
403DBusGnomeSessionManagerWrapper::DBusGnomeSessionManagerWrapper()
403DBusGnomeSessionManagerWrapper::DBusGnomeSessionManagerWrapper()
404− : UnityDBusObject("/org/gnome/SessionManager/EndSessionDialog", "com.canonical.Unity")
404+ : UnityDBusObject(QStringLiteral("/org/gnome/SessionManager/EndSessionDialog"), QStringLiteral("com.canonical.Unity"))
405{
405{
406}
406}
407
407
@@ -414,15 +414,15 @@ void DBusGnomeSessionManagerWrapper::Open(const unsigned type, const unsigned ar
414 switch (static_cast<Action>(type))
414 switch (static_cast<Action>(type))
415 {
415 {
416 case Action::LOGOUT:
416 case Action::LOGOUT:
417− performAsyncUnityCall("RequestLogout");
417+ performAsyncUnityCall(QStringLiteral("RequestLogout"));
418 break;
418 break;
419
419
420 case Action::REBOOT:
420 case Action::REBOOT:
421− performAsyncUnityCall("RequestReboot");
421+ performAsyncUnityCall(QStringLiteral("RequestReboot"));
422 break;
422 break;
423
423
424 case Action::SHUTDOWN:
424 case Action::SHUTDOWN:
425− performAsyncUnityCall("RequestShutdown");
425+ performAsyncUnityCall(QStringLiteral("RequestShutdown"));
426 break;
426 break;
427
427
428 default:
428 default:
@@ -432,7 +432,7 @@ void DBusGnomeSessionManagerWrapper::Open(const unsigned type, const unsigned ar
432
432
433
433
434DBusGnomeScreensaverWrapper::DBusGnomeScreensaverWrapper()
434DBusGnomeScreensaverWrapper::DBusGnomeScreensaverWrapper()
435− : UnityDBusObject("/org/gnome/ScreenSaver", "org.gnome.ScreenSaver")
435+ : UnityDBusObject(QStringLiteral("/org/gnome/ScreenSaver"), QStringLiteral("org.gnome.ScreenSaver"))
436{
436{
437 connect(d, &DBusUnitySessionServicePrivate::screensaverActiveChanged, this, &DBusGnomeScreensaverWrapper::ActiveChanged);
437 connect(d, &DBusUnitySessionServicePrivate::screensaverActiveChanged, this, &DBusGnomeScreensaverWrapper::ActiveChanged);
438}
438}
@@ -451,7 +451,7 @@ void DBusGnomeScreensaverWrapper::SetActive(bool lock)
451
451
452void DBusGnomeScreensaverWrapper::Lock()
452void DBusGnomeScreensaverWrapper::Lock()
453{
453{
454− performAsyncUnityCall("Lock");
454+ performAsyncUnityCall(QStringLiteral("Lock"));
455}
455}
456
456
457quint32 DBusGnomeScreensaverWrapper::GetActiveTime() const
457quint32 DBusGnomeScreensaverWrapper::GetActiveTime() const
@@ -466,9 +466,9 @@ void DBusGnomeScreensaverWrapper::SimulateUserActivity()
466
466
467
467
468DBusScreensaverWrapper::DBusScreensaverWrapper()
468DBusScreensaverWrapper::DBusScreensaverWrapper()
469− : UnityDBusObject("/org/freedesktop/ScreenSaver", "org.freedesktop.ScreenSaver")
469+ : UnityDBusObject(QStringLiteral("/org/freedesktop/ScreenSaver"), QStringLiteral("org.freedesktop.ScreenSaver"))
470{
470{
471− QDBusConnection::sessionBus().registerObject("/ScreenSaver", this, QDBusConnection::ExportScriptableContents); // compat path, also register here
471+ QDBusConnection::sessionBus().registerObject(QStringLiteral("/ScreenSaver"), this, QDBusConnection::ExportScriptableContents); // compat path, also register here
472 connect(d, &DBusUnitySessionServicePrivate::screensaverActiveChanged, this, &DBusScreensaverWrapper::ActiveChanged);
472 connect(d, &DBusUnitySessionServicePrivate::screensaverActiveChanged, this, &DBusScreensaverWrapper::ActiveChanged);
473}
473}
474
474
@@ -488,7 +488,7 @@ bool DBusScreensaverWrapper::SetActive(bool lock)
488
488
489void DBusScreensaverWrapper::Lock()
489void DBusScreensaverWrapper::Lock()
490{
490{
491− performAsyncUnityCall("Lock");
491+ performAsyncUnityCall(QStringLiteral("Lock"));
492}
492}
493
493
494quint32 DBusScreensaverWrapper::GetActiveTime() const
494quint32 DBusScreensaverWrapper::GetActiveTime() const
plugins/Utils/CMakeLists.txt+1
@@ -23,6 +23,7 @@ set(QMLPLUGIN_SRC
23 windowscreenshotprovider.cpp
23 windowscreenshotprovider.cpp
24 easingcurve.cpp
24 easingcurve.cpp
25 windowstatestorage.cpp
25 windowstatestorage.cpp
26+ timezoneFormatter.cpp
26 plugin.cpp
27 plugin.cpp
27 )
28 )
28
29
plugins/Utils/plugin.cpp+4−1
@@ -36,6 +36,7 @@
36#include "windowscreenshotprovider.h"
36#include "windowscreenshotprovider.h"
37#include "windowstatestorage.h"
37#include "windowstatestorage.h"
38#include "constants.h"
38#include "constants.h"
39+#include "timezoneFormatter.h"
39
40
40static QObject *createWindowStateStorage(QQmlEngine *engine, QJSEngine *scriptEngine)
41static QObject *createWindowStateStorage(QQmlEngine *engine, QJSEngine *scriptEngine)
41{
42{
@@ -67,6 +68,8 @@ void UtilsPlugin::registerTypes(const char *uri)
67 qmlRegisterSingletonType<WindowStateStorage>(uri, 0, 1, "WindowStateStorage", createWindowStateStorage);
68 qmlRegisterSingletonType<WindowStateStorage>(uri, 0, 1, "WindowStateStorage", createWindowStateStorage);
68 qmlRegisterType<InputWatcher>(uri, 0, 1, "InputWatcher");
69 qmlRegisterType<InputWatcher>(uri, 0, 1, "InputWatcher");
69 qmlRegisterSingletonType<Constants>(uri, 0, 1, "Constants", createConstants);
70 qmlRegisterSingletonType<Constants>(uri, 0, 1, "Constants", createConstants);
71+ qmlRegisterSingletonType<TimezoneFormatter>(uri, 0, 1, "TimezoneFormatter",
72+ [](QQmlEngine*, QJSEngine*) -> QObject* { return new TimezoneFormatter; });
70 qmlRegisterType<ActiveFocusLogger>(uri, 0, 1, "ActiveFocusLogger");
73 qmlRegisterType<ActiveFocusLogger>(uri, 0, 1, "ActiveFocusLogger");
71}
74}
72
75
@@ -74,5 +77,5 @@ void UtilsPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
74{
77{
75 QQmlExtensionPlugin::initializeEngine(engine, uri);
78 QQmlExtensionPlugin::initializeEngine(engine, uri);
76
79
77− engine->addImageProvider(QLatin1String("window"), new WindowScreenshotProvider);
80+ engine->addImageProvider(QStringLiteral("window"), new WindowScreenshotProvider);
78}
81}
plugins/Utils/relativetimeformatter.cpp+4−4
@@ -185,8 +185,8 @@ char* generate_full_format_string_at_time (GDateTime* now,
185 /* Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
185 /* Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
186 This format string is used for showing, on a 12-hour clock, times that happened before a week from now.
186 This format string is used for showing, on a 12-hour clock, times that happened before a week from now.
187 (\u2003 is a unicode em space which is slightly wider than a normal space.)
187 (\u2003 is a unicode em space which is slightly wider than a normal space.)
188− en_US example: "%a %d %b\u2003%l:%M %p" --> "Fri Oct 31 1:00 PM"
188+ en_US example: "%a %b %d\u2003%l:%M %p" --> "Fri Oct 31 1:00 PM"
189− en_GB example: "%a %b %d\u2003%l:%M %p" --> "Fri 31 Oct 1:00 PM" */
189+ en_GB example: "%a %d %b\u2003%l:%M %p" --> "Fri 31 Oct 1:00 PM" */
190 g_string_assign (ret, dgettext_datetime("%a %d %b\u2003%l:%M %p"));
190 g_string_assign (ret, dgettext_datetime("%a %d %b\u2003%l:%M %p"));
191 break;
191 break;
192 }
192 }
@@ -229,8 +229,8 @@ char* generate_full_format_string_at_time (GDateTime* now,
229 /* Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
229 /* Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
230 This format string is used for showing, on a 24-hour clock, times that happened before a week from now.
230 This format string is used for showing, on a 24-hour clock, times that happened before a week from now.
231 (\u2003 is a unicode em space which is slightly wider than a normal space.)
231 (\u2003 is a unicode em space which is slightly wider than a normal space.)
232− en_US example: "%a %d %b\u2003%H:%M" --> "Fri Oct 31 13:00"
232+ en_US example: "%a %b %d\u2003%H:%M" --> "Fri Oct 31 13:00"
233− en_GB example: "%a %b %d\u2003%H:%M" --> "Fri 31 Oct 13:00" */
233+ en_GB example: "%a %d %b\u2003%H:%M" --> "Fri 31 Oct 13:00" */
234 g_string_assign (ret, dgettext_datetime("%a %d %b\u2003%H:%M"));
234 g_string_assign (ret, dgettext_datetime("%a %d %b\u2003%H:%M"));
235 break;
235 break;
236 }
236 }
plugins/Utils/timeformatter.cpp+3−3
@@ -113,7 +113,7 @@ TimeFormatter::TimeFormatter(QObject *parent): QObject(parent)
113 priv = new TimeFormatterPrivate;
113 priv = new TimeFormatterPrivate;
114 priv->formatter = this;
114 priv->formatter = this;
115 priv->time = 0;
115 priv->time = 0;
116− priv->format = "yyyy-MM-dd hh:mm";
116+ priv->format = QStringLiteral("yyyy-MM-dd hh:mm");
117 priv->system_bus = nullptr;
117 priv->system_bus = nullptr;
118 priv->subscription_id = 0;
118 priv->subscription_id = 0;
119 priv->cancellable = g_cancellable_new ();
119 priv->cancellable = g_cancellable_new ();
@@ -182,7 +182,7 @@ QString TimeFormatter::formatTime() const
182}
182}
183
183
184GDateTimeFormatter::GDateTimeFormatter(QObject* parent)
184GDateTimeFormatter::GDateTimeFormatter(QObject* parent)
185−: TimeFormatter("%d-%m-%Y %I:%M%p", parent)
185+: TimeFormatter(QStringLiteral("%d-%m-%Y %I:%M%p"), parent)
186{
186{
187}
187}
188
188
@@ -194,7 +194,7 @@ QString GDateTimeFormatter::formatTime() const
194
194
195 datetime = g_date_time_new_from_unix_local(time());
195 datetime = g_date_time_new_from_unix_local(time());
196 if (!datetime) {
196 if (!datetime) {
197− return "";
197+ return QLatin1String("");
198 }
198 }
199
199
200 time_string = g_date_time_format(datetime, formatBytes.constData());
200 time_string = g_date_time_format(datetime, formatBytes.constData());
plugins/Utils/timezoneFormatter.cppnew file+35
@@ -0,0 +1,35 @@
1+/*
2+ * Copyright 2015 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include <QTimeZone>
18+
19+#include "timezoneFormatter.h"
20+
21+TimezoneFormatter::TimezoneFormatter(QObject *parent)
22+ : QObject(parent)
23+{
24+}
25+
26+QString TimezoneFormatter::currentTimeInTimezone(const QVariant &tzId) const
27+{
28+ QTimeZone tz(tzId.toByteArray());
29+ if (tz.isValid()) {
30+ const QDateTime now = QDateTime::currentDateTime().toTimeZone(tz);
31+ // return locale-aware string in the form "day, hh:mm", e.g. "Mon 14:30" or "Mon 1:30 pm"
32+ return QStringLiteral("%1 %2").arg(now.toString("ddd")).arg(now.time().toString(Qt::DefaultLocaleShortDate));
33+ }
34+ return QString();
35+}
plugins/Utils/timezoneFormatter.hnew file+32
@@ -0,0 +1,32 @@
1+/*
2+ * Copyright 2015 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef TIMEZONE_FORMATTER_H
18+#define TIMEZONE_FORMATTER_H
19+
20+#include <QObject>
21+
22+class TimezoneFormatter : public QObject
23+{
24+ Q_OBJECT
25+public:
26+ TimezoneFormatter(QObject * parent = nullptr);
27+ ~TimezoneFormatter() = default;
28+
29+ Q_INVOKABLE QString currentTimeInTimezone(const QVariant &tzId) const;
30+};
31+
32+#endif
plugins/Utils/windowstatestorage.cpp+6−6
@@ -30,7 +30,7 @@ WindowStateStorage::WindowStateStorage(QObject *parent):
30 QObject(parent)
30 QObject(parent)
31{
31{
32 QString dbPath = QDir::homePath() + "/.cache/unity8/";
32 QString dbPath = QDir::homePath() + "/.cache/unity8/";
33− m_db = QSqlDatabase::addDatabase("QSQLITE");
33+ m_db = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"));
34 QDir dir;
34 QDir dir;
35 dir.mkpath(dbPath);
35 dir.mkpath(dbPath);
36 m_db.setDatabaseName(dbPath + "windowstatestorage.sqlite");
36 m_db.setDatabaseName(dbPath + "windowstatestorage.sqlite");
@@ -71,7 +71,7 @@ WindowStateStorage::WindowState WindowStateStorage::getState(const QString &wind
71
71
72void WindowStateStorage::saveGeometry(const QString &windowId, const QRect &rect)
72void WindowStateStorage::saveGeometry(const QString &windowId, const QRect &rect)
73{
73{
74− QString queryString = QString("INSERT OR REPLACE INTO geometry (windowId, x, y, width, height) values ('%1', '%2', '%3', '%4', '%5');")
74+ QString queryString = QStringLiteral("INSERT OR REPLACE INTO geometry (windowId, x, y, width, height) values ('%1', '%2', '%3', '%4', '%5');")
75 .arg(windowId)
75 .arg(windowId)
76 .arg(rect.x())
76 .arg(rect.x())
77 .arg(rect.y())
77 .arg(rect.y())
@@ -96,7 +96,7 @@ void WindowStateStorage::executeAsyncQuery(const QString &queryString)
96
96
97QRect WindowStateStorage::getGeometry(const QString &windowId, const QRect &defaultValue)
97QRect WindowStateStorage::getGeometry(const QString &windowId, const QRect &defaultValue)
98{
98{
99− QString queryString = QString("SELECT * FROM geometry WHERE windowId = '%1';")
99+ QString queryString = QStringLiteral("SELECT * FROM geometry WHERE windowId = '%1';")
100 .arg(windowId);
100 .arg(windowId);
101
101
102 QSqlQuery query = getValue(queryString);
102 QSqlQuery query = getValue(queryString);
@@ -104,7 +104,7 @@ QRect WindowStateStorage::getGeometry(const QString &windowId, const QRect &defa
104 if (!query.first()) {
104 if (!query.first()) {
105 return defaultValue;
105 return defaultValue;
106 }
106 }
107− return QRect(query.value("x").toInt(), query.value("y").toInt(), query.value("width").toInt(), query.value("height").toInt());
107+ return QRect(query.value(QStringLiteral("x")).toInt(), query.value(QStringLiteral("y")).toInt(), query.value(QStringLiteral("width")).toInt(), query.value(QStringLiteral("height")).toInt());
108}
108}
109
109
110void WindowStateStorage::initdb()
110void WindowStateStorage::initdb()
@@ -115,9 +115,9 @@ void WindowStateStorage::initdb()
115 return;
115 return;
116 }
116 }
117
117
118− if (!m_db.tables().contains("geometry")) {
118+ if (!m_db.tables().contains(QStringLiteral("geometry"))) {
119 QSqlQuery query;
119 QSqlQuery query;
120− query.exec("CREATE TABLE geometry(windowId TEXT UNIQUE, x INTEGER, y INTEGER, width INTEGER, height INTEGER);");
120+ query.exec(QStringLiteral("CREATE TABLE geometry(windowId TEXT UNIQUE, x INTEGER, y INTEGER, width INTEGER, height INTEGER);"));
121 }
121 }
122
122
123 if (!m_db.tables().contains("state")) {
123 if (!m_db.tables().contains("state")) {
plugins/Wizard/PageList.cpp+3−3
@@ -40,8 +40,8 @@ PageList::PageList(QObject *parent)
40 m_index(-1),
40 m_index(-1),
41 m_pages()
41 m_pages()
42{
42{
43− QString qmlSuffix = ".qml";
43+ QString qmlSuffix = QStringLiteral(".qml");
44− QString disabledSuffix = ".disabled";
44+ QString disabledSuffix = QStringLiteral(".disabled");
45 QSet<QString> disabledPages;
45 QSet<QString> disabledPages;
46 QStringList dataDirs;
46 QStringList dataDirs;
47
47
@@ -53,7 +53,7 @@ PageList::PageList(QObject *parent)
53
53
54 Q_FOREACH(const QString &dataDir, dataDirs) {
54 Q_FOREACH(const QString &dataDir, dataDirs) {
55 QDir dir(dataDir + "/Wizard/Pages");
55 QDir dir(dataDir + "/Wizard/Pages");
56− QStringList entries = dir.entryList(QStringList("[0-9]*"), QDir::Files | QDir::Readable);
56+ QStringList entries = dir.entryList(QStringList(QStringLiteral("[0-9]*")), QDir::Files | QDir::Readable);
57 Q_FOREACH(const QString &entry, entries) {
57 Q_FOREACH(const QString &entry, entries) {
58 if (!m_pages.contains(entry) && entry.endsWith(qmlSuffix))
58 if (!m_pages.contains(entry) && entry.endsWith(qmlSuffix))
59 m_pages.insert(entry, dir.absoluteFilePath(entry));
59 m_pages.insert(entry, dir.absoluteFilePath(entry));
plugins/Wizard/System.cpp+12−12
@@ -42,7 +42,7 @@ System::System()
42QString System::wizardEnabledPath()
42QString System::wizardEnabledPath()
43{
43{
44 // Uses ubuntu-system-settings namespace for historic compatibility reasons
44 // Uses ubuntu-system-settings namespace for historic compatibility reasons
45− return QDir::home().filePath(".config/ubuntu-system-settings/wizard-has-run");
45+ return QDir::home().filePath(QStringLiteral(".config/ubuntu-system-settings/wizard-has-run"));
46}
46}
47
47
48bool System::wizardEnabled() const
48bool System::wizardEnabled() const
@@ -58,7 +58,7 @@ void System::setWizardEnabled(bool enabled)
58 if (enabled) {
58 if (enabled) {
59 QFile::remove(wizardEnabledPath());
59 QFile::remove(wizardEnabledPath());
60 } else {
60 } else {
61− QDir(wizardEnabledPath()).mkpath("..");
61+ QDir(wizardEnabledPath()).mkpath(QStringLiteral(".."));
62 QFile(wizardEnabledPath()).open(QIODevice::WriteOnly);
62 QFile(wizardEnabledPath()).open(QIODevice::WriteOnly);
63 m_fsWatcher.addPath(wizardEnabledPath());
63 m_fsWatcher.addPath(wizardEnabledPath());
64 Q_EMIT wizardEnabledChanged();
64 Q_EMIT wizardEnabledChanged();
@@ -79,10 +79,10 @@ void System::setSessionVariable(const QString &variable, const QString &value)
79 QMap<QString,QString> valueMap;
79 QMap<QString,QString> valueMap;
80 valueMap.insert(variable, value);
80 valueMap.insert(variable, value);
81
81
82− QDBusMessage msg = QDBusMessage::createMethodCall("org.freedesktop.DBus",
82+ QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.DBus"),
83− "/org/freedesktop/DBus",
83+ QStringLiteral("/org/freedesktop/DBus"),
84− "org.freedesktop.DBus",
84+ QStringLiteral("org.freedesktop.DBus"),
85− "UpdateActivationEnvironment");
85+ QStringLiteral("UpdateActivationEnvironment"));
86
86
87 msg << QVariant::fromValue(valueMap);
87 msg << QVariant::fromValue(valueMap);
88 QDBusConnection::sessionBus().asyncCall(msg);
88 QDBusConnection::sessionBus().asyncCall(msg);
@@ -90,21 +90,21 @@ void System::setSessionVariable(const QString &variable, const QString &value)
90
90
91void System::updateSessionLanguage(const QString &locale)
91void System::updateSessionLanguage(const QString &locale)
92{
92{
93− const QString language = locale.split(".")[0];
93+ const QString language = locale.split(QStringLiteral("."))[0];
94
94
95− setSessionVariable("LANGUAGE", language);
95+ setSessionVariable(QStringLiteral("LANGUAGE"), language);
96− setSessionVariable("LANG", locale);
96+ setSessionVariable(QStringLiteral("LANG"), locale);
97− setSessionVariable("LC_ALL", locale);
97+ setSessionVariable(QStringLiteral("LC_ALL"), locale);
98
98
99 // QLocale caches the default locale on startup, and Qt uses that cached
99 // QLocale caches the default locale on startup, and Qt uses that cached
100 // copy when formatting dates. So manually update it here.
100 // copy when formatting dates. So manually update it here.
101 QLocale::setDefault(QLocale(locale));
101 QLocale::setDefault(QLocale(locale));
102
102
103 // Restart bits of the session to pick up new language.
103 // Restart bits of the session to pick up new language.
104− QProcess::startDetached("sh -c \"initctl emit indicator-services-end; \
104+ QProcess::startDetached(QStringLiteral("sh -c \"initctl emit indicator-services-end; \
105 initctl stop scope-registry; \
105 initctl stop scope-registry; \
106 initctl stop smart-scopes-proxy; \
106 initctl stop smart-scopes-proxy; \
107 initctl emit --no-wait indicator-services-start; \
107 initctl emit --no-wait indicator-services-start; \
108 initctl restart --no-wait maliit-server; \
108 initctl restart --no-wait maliit-server; \
109− initctl restart --no-wait unity8-dash\"");
109+ initctl restart --no-wait unity8-dash\""));
110}
110}
po/unity8.pot+36−34
@@ -8,7 +8,7 @@ msgid ""
8msgstr ""
8msgstr ""
9"Project-Id-Version: unity8\n"
9"Project-Id-Version: unity8\n"
10"Report-Msgid-Bugs-To: \n"
10"Report-Msgid-Bugs-To: \n"
11−"POT-Creation-Date: 2015-08-25 14:53+0200\n"
11+"POT-Creation-Date: 2015-09-16 00:49+0200\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,7 +18,7 @@ msgstr ""
18"Content-Transfer-Encoding: 8bit\n"
18"Content-Transfer-Encoding: 8bit\n"
19"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
19"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
20
20
21−#: plugins/LightDM/Greeter.cpp:112
21+#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
23msgstr ""
23msgstr ""
24
24
@@ -134,83 +134,83 @@ msgid_plural "Please wait %1 minutes and then try again…"
134msgstr[0] ""
134msgstr[0] ""
135msgstr[1] ""
135msgstr[1] ""
136
136
137−#: qml/Components/Dialogs.qml:112
137+#: qml/Components/Dialogs.qml:115
138msgctxt "Title: Lock/Log out dialog"
138msgctxt "Title: Lock/Log out dialog"
139msgid "Log out"
139msgid "Log out"
140msgstr ""
140msgstr ""
141
141
142−#: qml/Components/Dialogs.qml:113
142+#: qml/Components/Dialogs.qml:116
143msgid "Are you sure you want to log out?"
143msgid "Are you sure you want to log out?"
144msgstr ""
144msgstr ""
145
145
146−#: qml/Components/Dialogs.qml:115
146+#: qml/Components/Dialogs.qml:118
147msgctxt "Button: Lock the system"
147msgctxt "Button: Lock the system"
148msgid "Lock"
148msgid "Lock"
149msgstr ""
149msgstr ""
150
150
151−#: qml/Components/Dialogs.qml:122
151+#: qml/Components/Dialogs.qml:125
152msgctxt "Button: Log out from the system"
152msgctxt "Button: Log out from the system"
153msgid "Log Out"
153msgid "Log Out"
154msgstr ""
154msgstr ""
155
155
156−#: qml/Components/Dialogs.qml:129 qml/Components/Dialogs.qml:162
156+#: qml/Components/Dialogs.qml:132 qml/Components/Dialogs.qml:165
157−#: qml/Components/Dialogs.qml:221
157+#: qml/Components/Dialogs.qml:224
158msgid "Cancel"
158msgid "Cancel"
159msgstr ""
159msgstr ""
160
160
161−#: qml/Components/Dialogs.qml:141
161+#: qml/Components/Dialogs.qml:144
162msgctxt "Title: Reboot/Shut down dialog"
162msgctxt "Title: Reboot/Shut down dialog"
163msgid "Shut down"
163msgid "Shut down"
164msgstr ""
164msgstr ""
165
165
166−#: qml/Components/Dialogs.qml:142
166+#: qml/Components/Dialogs.qml:145
167msgid "Are you sure you want to shut down?"
167msgid "Are you sure you want to shut down?"
168msgstr ""
168msgstr ""
169
169
170−#: qml/Components/Dialogs.qml:144
170+#: qml/Components/Dialogs.qml:147
171msgctxt "Button: Reboot the system"
171msgctxt "Button: Reboot the system"
172msgid "Reboot"
172msgid "Reboot"
173msgstr ""
173msgstr ""
174
174
175−#: qml/Components/Dialogs.qml:153
175+#: qml/Components/Dialogs.qml:156
176msgctxt "Button: Shut down the system"
176msgctxt "Button: Shut down the system"
177msgid "Shut down"
177msgid "Shut down"
178msgstr ""
178msgstr ""
179
179
180−#: qml/Components/Dialogs.qml:175
180+#: qml/Components/Dialogs.qml:178
181msgctxt "Title: Reboot dialog"
181msgctxt "Title: Reboot dialog"
182msgid "Reboot"
182msgid "Reboot"
183msgstr ""
183msgstr ""
184
184
185−#: qml/Components/Dialogs.qml:176
185+#: qml/Components/Dialogs.qml:179
186msgid "Are you sure you want to reboot?"
186msgid "Are you sure you want to reboot?"
187msgstr ""
187msgstr ""
188
188
189−#: qml/Components/Dialogs.qml:178
189+#: qml/Components/Dialogs.qml:181
190msgid "No"
190msgid "No"
191msgstr ""
191msgstr ""
192
192
193−#: qml/Components/Dialogs.qml:185
193+#: qml/Components/Dialogs.qml:188
194msgid "Yes"
194msgid "Yes"
195msgstr ""
195msgstr ""
196
196
197−#: qml/Components/Dialogs.qml:200
197+#: qml/Components/Dialogs.qml:203
198msgctxt "Title: Power off/Restart dialog"
198msgctxt "Title: Power off/Restart dialog"
199msgid "Power"
199msgid "Power"
200msgstr ""
200msgstr ""
201
201
202−#: qml/Components/Dialogs.qml:201
202+#: qml/Components/Dialogs.qml:204
203msgid ""
203msgid ""
204"Are you sure you would like\n"
204"Are you sure you would like\n"
205"to power off?"
205"to power off?"
206msgstr ""
206msgstr ""
207
207
208−#: qml/Components/Dialogs.qml:203
208+#: qml/Components/Dialogs.qml:206
209msgctxt "Button: Power off the system"
209msgctxt "Button: Power off the system"
210msgid "Power off"
210msgid "Power off"
211msgstr ""
211msgstr ""
212
212
213−#: qml/Components/Dialogs.qml:212
213+#: qml/Components/Dialogs.qml:215
214msgctxt "Button: Restart the system"
214msgctxt "Button: Restart the system"
215msgid "Restart"
215msgid "Restart"
216msgstr ""
216msgstr ""
@@ -271,8 +271,10 @@ msgstr ""
271msgid "Less..."
271msgid "Less..."
272msgstr ""
272msgstr ""
273
273
274−#: qml/Dash/Previews/PreviewCommentInput.qml:61
274+#: qml/Dash/Previews/PreviewCommentInput.qml:68
275−#: qml/Dash/Previews/PreviewRatingInput.qml:169
275+#: qml/Dash/Previews/PreviewRatingInput.qml:174
276+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:148
277+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:205
276msgid "Send"
278msgid "Send"
277msgstr ""
279msgstr ""
278
280
@@ -387,62 +389,62 @@ msgstr ""
387msgid "Conference"
389msgid "Conference"
388msgstr ""
390msgstr ""
389
391
390−#: qml/Panel/Indicators/MenuItemFactory.qml:674
392+#: qml/Panel/Indicators/MenuItemFactory.qml:718
391msgid "Nothing is playing"
393msgid "Nothing is playing"
392msgstr ""
394msgstr ""
393
395
394−#: qml/Panel/Indicators/MenuItemFactory.qml:803
396+#: qml/Panel/Indicators/MenuItemFactory.qml:847
395#, qt-format
397#, qt-format
396msgid "%1 hour"
398msgid "%1 hour"
397msgid_plural "%1 hours"
399msgid_plural "%1 hours"
398msgstr[0] ""
400msgstr[0] ""
399msgstr[1] ""
401msgstr[1] ""
400
402
401−#: qml/Panel/Indicators/MenuItemFactory.qml:807
403+#: qml/Panel/Indicators/MenuItemFactory.qml:851
402#, qt-format
404#, qt-format
403msgid "%1 minute"
405msgid "%1 minute"
404msgid_plural "%1 minutes"
406msgid_plural "%1 minutes"
405msgstr[0] ""
407msgstr[0] ""
406msgstr[1] ""
408msgstr[1] ""
407
409
408−#: qml/Panel/Indicators/MenuItemFactory.qml:812
410+#: qml/Panel/Indicators/MenuItemFactory.qml:856
409#, qt-format
411#, qt-format
410msgid "%1 second"
412msgid "%1 second"
411msgid_plural "%1 seconds"
413msgid_plural "%1 seconds"
412msgstr[0] ""
414msgstr[0] ""
413msgstr[1] ""
415msgstr[1] ""
414
416
415−#: qml/Panel/Indicators/MenuItemFactory.qml:815
417+#: qml/Panel/Indicators/MenuItemFactory.qml:859
416msgid "0 seconds"
418msgid "0 seconds"
417msgstr ""
419msgstr ""
418
420
419#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
421#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
420−#: qml/Panel/Indicators/MenuItemFactory.qml:817
422+#: qml/Panel/Indicators/MenuItemFactory.qml:861
421#, qt-format
423#, qt-format
422msgid "%1 remaining"
424msgid "%1 remaining"
423msgstr ""
425msgstr ""
424
426
425−#: qml/Panel/Indicators/MenuItemFactory.qml:823
427+#: qml/Panel/Indicators/MenuItemFactory.qml:867
426msgid "In queue…"
428msgid "In queue…"
427msgstr ""
429msgstr ""
428
430
429−#: qml/Panel/Indicators/MenuItemFactory.qml:827
431+#: qml/Panel/Indicators/MenuItemFactory.qml:871
430msgid "Downloading"
432msgid "Downloading"
431msgstr ""
433msgstr ""
432
434
433−#: qml/Panel/Indicators/MenuItemFactory.qml:829
435+#: qml/Panel/Indicators/MenuItemFactory.qml:873
434msgid "Paused, tap to resume"
436msgid "Paused, tap to resume"
435msgstr ""
437msgstr ""
436
438
437−#: qml/Panel/Indicators/MenuItemFactory.qml:831
439+#: qml/Panel/Indicators/MenuItemFactory.qml:875
438msgid "Canceled"
440msgid "Canceled"
439msgstr ""
441msgstr ""
440
442
441−#: qml/Panel/Indicators/MenuItemFactory.qml:833
443+#: qml/Panel/Indicators/MenuItemFactory.qml:877
442msgid "Finished"
444msgid "Finished"
443msgstr ""
445msgstr ""
444
446
445−#: qml/Panel/Indicators/MenuItemFactory.qml:835
447+#: qml/Panel/Indicators/MenuItemFactory.qml:879
446msgid "Failed, tap to retry"
448msgid "Failed, tap to retry"
447msgstr ""
449msgstr ""
448
450
qml/Notifications/Notification.qml+11−7
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013, 2015 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -17,11 +17,10 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtMultimedia 5.0
18import QtMultimedia 5.0
19import Powerd 0.1
19import Powerd 0.1
20−import Ubuntu.Components 1.1
20+import Ubuntu.Components 1.2
21import Unity.Notifications 1.0
21import Unity.Notifications 1.0
22import QMenuModel 0.1
22import QMenuModel 0.1
23import Utils 0.1
23import Utils 0.1
24−
25import Ubuntu.Components.ListItems 0.1 as ListItem
24import Ubuntu.Components.ListItems 0.1 as ListItem
26
25
27Item {
26Item {
@@ -49,6 +48,8 @@ Item {
49 readonly property color sdDarkGrey: "#dddddd"
48 readonly property color sdDarkGrey: "#dddddd"
50 readonly property color sdFontColor: "#5d5d5d"
49 readonly property color sdFontColor: "#5d5d5d"
51 readonly property real contentSpacing: units.gu(2)
50 readonly property real contentSpacing: units.gu(2)
51+ readonly property bool canBeClosed: type === Notification.Ephemeral
52+ property bool hasMouse
52
53
53 objectName: "background"
54 objectName: "background"
54 implicitHeight: type !== Notification.PlaceHolder ? (fullscreen ? maxHeight : outterColumn.height - shapedBack.anchors.topMargin + contentSpacing * 2) : 0
55 implicitHeight: type !== Notification.PlaceHolder ? (fullscreen ? maxHeight : outterColumn.height - shapedBack.anchors.topMargin + contentSpacing * 2) : 0
@@ -216,6 +217,8 @@ Item {
216 onClicked: {
217 onClicked: {
217 if (notification.type == Notification.Interactive) {
218 if (notification.type == Notification.Interactive) {
218 notification.notification.invokeAction(actionRepeater.itemAt(0).actionId)
219 notification.notification.invokeAction(actionRepeater.itemAt(0).actionId)
220+ } else if (hasMouse && canBeClosed) {
221+ notification.notification.close()
219 } else {
222 } else {
220 notificationList.currentIndex = index;
223 notificationList.currentIndex = index;
221 }
224 }
@@ -280,7 +283,7 @@ Item {
280 fontSize: "medium"
283 fontSize: "medium"
281 color: darkOnBright ? sdFontColor : Theme.palette.selected.backgroundText
284 color: darkOnBright ? sdFontColor : Theme.palette.selected.backgroundText
282 elide: Text.ElideRight
285 elide: Text.ElideRight
283− textFormat: Text.PlainText
286+ textFormat: Text.StyledText
284 }
287 }
285
288
286 Label {
289 Label {
@@ -297,7 +300,7 @@ Item {
297 wrapMode: Text.WordWrap
300 wrapMode: Text.WordWrap
298 maximumLineCount: type == Notification.SnapDecision ? 12 : 2
301 maximumLineCount: type == Notification.SnapDecision ? 12 : 2
299 elide: Text.ElideRight
302 elide: Text.ElideRight
300− textFormat: Text.PlainText
303+ textFormat: Text.StyledText
301 }
304 }
302 }
305 }
303
306
@@ -471,7 +474,7 @@ Item {
471 onClicked: notification.notification.invokeAction(oneOverTwoLoaderBottom.actionId)
474 onClicked: notification.notification.invokeAction(oneOverTwoLoaderBottom.actionId)
472 }
475 }
473 }
476 }
474− sourceComponent: (index == 1 || index == 2) ? oneOverTwoButtonBottom : undefined
477+ sourceComponent: (index == 1 || index == 2) ? oneOverTwoButtonBottom : undefined
475 }
478 }
476 }
479 }
477 }
480 }
@@ -487,7 +490,7 @@ Item {
487 margins: contentSpacing
490 margins: contentSpacing
488 }
491 }
489 visible: notification.type === Notification.SnapDecision && actionRepeater.count > 0 && !oneOverTwoCase.visible
492 visible: notification.type === Notification.SnapDecision && actionRepeater.count > 0 && !oneOverTwoCase.visible
490− spacing: units.gu(2)
493+ spacing: contentSpacing
491 layoutDirection: Qt.RightToLeft
494 layoutDirection: Qt.RightToLeft
492
495
493 Loader {
496 Loader {
@@ -499,6 +502,7 @@ Item {
499 width: buttonRow.width
502 width: buttonRow.width
500 leftIconName: "call-end"
503 leftIconName: "call-end"
501 rightIconName: "call-start"
504 rightIconName: "call-start"
505+ clickToAct: notification.hasMouse
502 onRightTriggered: {
506 onRightTriggered: {
503 notification.notification.invokeAction(notification.actions.data(0, ActionModel.RoleActionId))
507 notification.notification.invokeAction(notification.actions.data(0, ActionModel.RoleActionId))
504 }
508 }
qml/Notifications/Notifications.qml+3−1
@@ -28,6 +28,7 @@ ListView {
28
28
29 property real margin
29 property real margin
30 property bool useModal: snapDecisionProxyModel.count > 0
30 property bool useModal: snapDecisionProxyModel.count > 0
31+ property bool hasMouse
31
32
32 UnitySortFilterProxyModel {
33 UnitySortFilterProxyModel {
33 id: snapDecisionProxyModel
34 id: snapDecisionProxyModel
@@ -52,12 +53,13 @@ ListView {
52 secondaryIconSource: model.secondaryIcon
53 secondaryIconSource: model.secondaryIcon
53 summary: model.summary
54 summary: model.summary
54 body: model.body
55 body: model.body
55− value: model.value
56+ value: model.value ? model.value : -1
56 actions: model.actions
57 actions: model.actions
57 notificationId: model.id
58 notificationId: model.id
58 notification: notificationList.model.getRaw(notificationId)
59 notification: notificationList.model.getRaw(notificationId)
59 maxHeight: notificationList.height
60 maxHeight: notificationList.height
60 margins: notificationList.margin
61 margins: notificationList.margin
62+ hasMouse: notificationList.hasMouse
61
63
62 // make sure there's no opacity-difference between the several
64 // make sure there's no opacity-difference between the several
63 // elements in a notification
65 // elements in a notification
qml/Notifications/SwipeToAct.qml+38−3
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 20014-2015 Canonical, Ltd.
2+ * Copyright (C) 2014-2015 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -15,12 +15,12 @@
15 */
15 */
16
16
17import QtQuick 2.3
17import QtQuick 2.3
18−import Ubuntu.Components 1.1
18+import Ubuntu.Components 1.2
19
19
20Item {
20Item {
21 id: swipeToAct
21 id: swipeToAct
22
22
23− height: childrenRect.height
23+ height: clickToAct ? leftButton.height : childrenRect.height
24
24
25 signal leftTriggered()
25 signal leftTriggered()
26 signal rightTriggered()
26 signal rightTriggered()
@@ -28,6 +28,8 @@ Item {
28 property string leftIconName
28 property string leftIconName
29 property string rightIconName
29 property string rightIconName
30
30
31+ property bool clickToAct
32+
31 QtObject {
33 QtObject {
32 id: priv
34 id: priv
33
35
@@ -64,15 +66,45 @@ Item {
64 }
66 }
65 }
67 }
66
68
69+ Button {
70+ id: leftButton
71+ objectName: "leftButton"
72+ anchors.verticalCenter: parent.verticalCenter
73+ anchors.left: parent.left
74+ iconName: leftIconName
75+ visible: clickToAct
76+ width: (parent.width / 2) - priv.gap
77+ color: UbuntuColors.red
78+ onClicked: {
79+ leftTriggered()
80+ }
81+ }
82+
83+ Button {
84+ id: rightButton
85+ objectName: "rightButton"
86+ anchors.verticalCenter: parent.verticalCenter
87+ anchors.right: parent.right
88+ iconName: rightIconName
89+ visible: clickToAct
90+ width: (parent.width / 2) - priv.gap
91+ color: UbuntuColors.green
92+ onClicked: {
93+ rightTriggered()
94+ }
95+ }
96+
67 UbuntuShape {
97 UbuntuShape {
68 id: row
98 id: row
69 width: parent.width
99 width: parent.width
70 height: priv.sliderHeight
100 height: priv.sliderHeight
71 color: priv.sliderBGColor
101 color: priv.sliderBGColor
72 borderSource: "none"
102 borderSource: "none"
103+ visible: !clickToAct
73
104
74 UbuntuShape {
105 UbuntuShape {
75 id: leftShape
106 id: leftShape
107+ objectName: "leftArea"
76 anchors.top: parent.top
108 anchors.top: parent.top
77 anchors.left: parent.left
109 anchors.left: parent.left
78 anchors.margins: priv.gap
110 anchors.margins: priv.gap
@@ -167,6 +199,7 @@ Item {
167 color: "white"
199 color: "white"
168 }
200 }
169 }
201 }
202+
170 Row {
203 Row {
171 anchors.verticalCenter: parent.verticalCenter
204 anchors.verticalCenter: parent.verticalCenter
172 anchors.left: slider.right
205 anchors.left: slider.right
@@ -189,6 +222,7 @@ Item {
189
222
190 UbuntuShape {
223 UbuntuShape {
191 id: rightShape
224 id: rightShape
225+ objectName: "rightArea"
192 anchors.top: parent.top
226 anchors.top: parent.top
193 anchors.right: parent.right
227 anchors.right: parent.right
194 anchors.margins: priv.gap
228 anchors.margins: priv.gap
@@ -214,6 +248,7 @@ Item {
214 MouseArea {
248 MouseArea {
215 id: mouseArea
249 id: mouseArea
216 objectName: "swipeMouseArea"
250 objectName: "swipeMouseArea"
251+ enabled: !clickToAct
217
252
218 anchors.fill: row
253 anchors.fill: row
219 drag.target: slider
254 drag.target: slider
qml/OrientedShell.qml+1−1
@@ -155,7 +155,7 @@ Rectangle {
155 nativeWidth: root.width
155 nativeWidth: root.width
156 nativeHeight: root.height
156 nativeHeight: root.height
157 mode: applicationArguments.mode
157 mode: applicationArguments.mode
158− cursorVisible: UnityInputInfo.mice > deviceConfiguration.ignoredMice
158+ hasMouse: UnityInputInfo.mice > deviceConfiguration.ignoredMice
159
159
160 // TODO: Factor in the connected input devices (eg: physical keyboard, mouse, touchscreen),
160 // TODO: Factor in the connected input devices (eg: physical keyboard, mouse, touchscreen),
161 // what's the output device (eg: big TV, desktop monitor, phone display), etc.
161 // what's the output device (eg: big TV, desktop monitor, phone display), etc.
qml/Panel/IndicatorItem.qml+1−1
@@ -243,7 +243,7 @@ IndicatorDelegate {
243 return;
243 return;
244 }
244 }
245
245
246− title = rootActionState.title ? rootActionState.title : "";
246+ title = rootActionState.title ? rootActionState.title : rootActionState.accessibleName;
247 leftLabel = rootActionState.leftLabel ? rootActionState.leftLabel : "";
247 leftLabel = rootActionState.leftLabel ? rootActionState.leftLabel : "";
248 rightLabel = rootActionState.rightLabel ? rootActionState.rightLabel : "";
248 rightLabel = rootActionState.rightLabel ? rootActionState.rightLabel : "";
249 icons = rootActionState.icons;
249 icons = rootActionState.icons;
qml/Panel/IndicatorPage.qml+1−1
@@ -23,7 +23,7 @@ IndicatorBase {
23 id: main
23 id: main
24
24
25 //const
25 //const
26− property string title: rootActionState.title
26+ property string title: rootActionState.title || rootActionState.accessibleName // some indicators don't expose a title but only the accessible-desc
27 property alias highlightFollowsCurrentItem : mainMenu.highlightFollowsCurrentItem
27 property alias highlightFollowsCurrentItem : mainMenu.highlightFollowsCurrentItem
28 readonly property alias factory: _factory
28 readonly property alias factory: _factory
29
29
qml/Panel/Indicators/IndicatorDelegate.qml+1−1
@@ -21,5 +21,5 @@ import QtQuick 2.0
21
21
22IndicatorBase {
22IndicatorBase {
23 readonly property bool indicatorVisible: rootActionState.indicatorVisible
23 readonly property bool indicatorVisible: rootActionState.indicatorVisible
24− readonly property string title: rootActionState.title
24+ readonly property string title: rootActionState.title || rootActionState.accessibleName
25}
25}
qml/Panel/Indicators/MenuItemFactory.qml+93−5
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright 2013 Canonical Ltd.
2+ * Copyright 2013,2015 Canonical Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU Lesser General Public License as published by
5 * it under the terms of the GNU Lesser General Public License as published by
@@ -12,9 +12,6 @@
12 *
12 *
13 * You should have received a copy of the GNU Lesser General Public License
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Nick Dedekind <nick.dedekind@canonical.com>
18 */
15 */
19
16
20import QtQuick 2.0
17import QtQuick 2.0
@@ -23,7 +20,8 @@ import Ubuntu.Settings.Components 0.1
23import QMenuModel 0.1
20import QMenuModel 0.1
24import Utils 0.1 as Utils
21import Utils 0.1 as Utils
25import Ubuntu.Components.ListItems 0.1 as ListItems
22import Ubuntu.Components.ListItems 0.1 as ListItems
26−import Ubuntu.Components 1.1
23+import Ubuntu.Components 1.2
24+import Unity.Session 0.1
27
25
28Item {
26Item {
29 id: menuFactory
27 id: menuFactory
@@ -60,6 +58,12 @@ Item {
60 "unity.widgets.systemsettings.tablet.wifisection" : wifiSection,
58 "unity.widgets.systemsettings.tablet.wifisection" : wifiSection,
61 "unity.widgets.systemsettings.tablet.accesspoint" : accessPoint,
59 "unity.widgets.systemsettings.tablet.accesspoint" : accessPoint,
62 "com.canonical.indicator.network.modeminfoitem" : modeminfoitem,
60 "com.canonical.indicator.network.modeminfoitem" : modeminfoitem,
61+
62+ "com.canonical.indicator.calendar": calendarMenu,
63+ "com.canonical.indicator.location": timezoneMenu,
64+
65+ "indicator.user-menu-item": userMenuItem,
66+ "indicator.guest-menu-item": userMenuItem
63 },
67 },
64 "indicator-messages" : {
68 "indicator-messages" : {
65 "com.canonical.indicator.button" : messagesButtonMenu
69 "com.canonical.indicator.button" : messagesButtonMenu
@@ -422,6 +426,90 @@ Item {
422 }
426 }
423 }
427 }
424
428
429+ Component {
430+ id: userMenuItem
431+
432+ Menus.UserSessionMenu {
433+ objectName: "userSessionMenu"
434+ highlightWhenPressed: false
435+
436+ property QtObject menuData: null
437+ property var menuModel: menuFactory.menuModel
438+ property int menuIndex: -1
439+
440+ name: menuData && menuData.label || "" // label is the user's real name
441+ iconSource: menuData && menuData.icon || ""
442+
443+ // would be better to compare with the logname but sadly the indicator doesn't expose that
444+ active: DBusUnitySessionService.RealName() !== "" ? DBusUnitySessionService.RealName() == name
445+ : DBusUnitySessionService.UserName() == name
446+
447+ onTriggered: {
448+ menuModel.activate(menuIndex);
449+ }
450+ }
451+ }
452+
453+ Component {
454+ id: calendarMenu
455+
456+ Menus.CalendarMenu {
457+ objectName: "calendarMenu"
458+ highlightWhenPressed: false
459+ focus: true
460+ }
461+ }
462+
463+ Component {
464+ id: timezoneMenu
465+
466+ Menus.TimeZoneMenu {
467+ id: tzMenuItem
468+ objectName: "timezoneMenu"
469+
470+ property QtObject menuData: null
471+ property var menuModel: menuFactory.menuModel
472+ property int menuIndex: -1
473+ property var extendedData: menuData && menuData.ext || undefined
474+ readonly property string tz: getExtendedProperty(extendedData, "xCanonicalTimezone", "UTC")
475+ property var updateTimer: Timer {
476+ repeat: true
477+ running: tzMenuItem.visible // only run when we're open
478+ onTriggered: tzMenuItem.time = Utils.TimezoneFormatter.currentTimeInTimezone(tzMenuItem.tz)
479+ }
480+
481+ city: menuData && menuData.label || ""
482+ time: Utils.TimezoneFormatter.currentTimeInTimezone(tz)
483+ enabled: menuData && menuData.sensitive || false
484+
485+ onMenuModelChanged: {
486+ loadAttributes();
487+ }
488+ onMenuIndexChanged: {
489+ loadAttributes();
490+ }
491+ onTriggered: {
492+ tzActionGroup.setLocation.activate(tz);
493+ }
494+
495+ QDBusActionGroup {
496+ id: tzActionGroup
497+ busType: DBus.SessionBus
498+ busName: "com.canonical.indicator.datetime"
499+ objectPath: "/com/canonical/indicator/datetime"
500+
501+ property variant setLocation: action("set-location")
502+
503+ Component.onCompleted: tzActionGroup.start()
504+ }
505+
506+ function loadAttributes() {
507+ if (!menuModel || menuIndex == -1) return;
508+ menuModel.loadExtendedAttributes(menuIndex, {'x-canonical-timezone': 'string'});
509+ }
510+ }
511+ }
512+
425 Component {
513 Component {
426 id: wifiSection;
514 id: wifiSection;
427
515
qml/Panel/Indicators/MessageMenuItemFactory.qml+1−1
@@ -145,7 +145,7 @@ Loader {
145 title: menuData && menuData.label || ""
145 title: menuData && menuData.label || ""
146 time: timeFormatter.timeString
146 time: timeFormatter.timeString
147 body: getExtendedProperty(extendedData, "xCanonicalText", "")
147 body: getExtendedProperty(extendedData, "xCanonicalText", "")
148− replyButtonText: getExtendedProperty(replyActionDescription, "label", "Send")
148+ replyButtonText: getExtendedProperty(replyActionDescription, "label", i18n.tr("Send"))
149 replyHintText: i18n.ctr("Label: Hint in message indicator line edit", "Reply")
149 replyHintText: i18n.ctr("Label: Hint in message indicator line edit", "Reply")
150 // icons
150 // icons
151 avatar: getExtendedProperty(extendedData, "icon", "image://theme/contact")
151 avatar: getExtendedProperty(extendedData, "icon", "image://theme/contact")
qml/Panel/Indicators/client/IndicatorRepresentation.qml+3−1
@@ -26,7 +26,9 @@ import "../.."
26Page {
26Page {
27 id: root
27 id: root
28
28
29− title: indicatorProperties && indicatorProperties.title ? indicatorProperties.title : ""
29+ title: indicatorProperties && indicatorProperties.title ? indicatorProperties.title :
30+ indicatorProperties && indicatorProperties.accessibleName ? indicatorProperties.accessibleName
31+ : ""
30 property variant indicatorProperties
32 property variant indicatorProperties
31
33
32 anchors.fill: parent
34 anchors.fill: parent
qml/Shell.qml+3−1
@@ -65,6 +65,7 @@ Item {
65 function updateFocusedAppOrientationAnimated() {
65 function updateFocusedAppOrientationAnimated() {
66 applicationsDisplayLoader.item.updateFocusedAppOrientationAnimated();
66 applicationsDisplayLoader.item.updateFocusedAppOrientationAnimated();
67 }
67 }
68+ property bool hasMouse: false
68
69
69 // to be read from outside
70 // to be read from outside
70 readonly property int mainAppWindowOrientationAngle:
71 readonly property int mainAppWindowOrientationAngle:
@@ -633,6 +634,7 @@ Item {
633
634
634 model: NotificationBackend.Model
635 model: NotificationBackend.Model
635 margin: units.gu(1)
636 margin: units.gu(1)
637+ hasMouse: shell.hasMouse
636
638
637 y: topmostIsFullscreen ? 0 : panel.panelHeight
639 y: topmostIsFullscreen ? 0 : panel.panelHeight
638 height: parent.height - (topmostIsFullscreen ? 0 : panel.panelHeight)
640 height: parent.height - (topmostIsFullscreen ? 0 : panel.panelHeight)
@@ -686,7 +688,7 @@ Item {
686
688
687 Cursor {
689 Cursor {
688 id: cursor
690 id: cursor
689− visible: shell.cursorVisible
691+ visible: shell.hasMouse
690 z: screenGrabber.z + 1
692 z: screenGrabber.z + 1
691 }
693 }
692
694
qml/Stages/DesktopStage.qml−3
@@ -139,9 +139,6 @@ Rectangle {
139 height: units.gu(50)
139 height: units.gu(50)
140 focus: model.appId === priv.focusedAppId
140 focus: model.appId === priv.focusedAppId
141
141
142− readonly property int minWidth: units.gu(10)
143− readonly property int minHeight: units.gu(10)
144−
145 property bool maximized: false
142 property bool maximized: false
146 property bool minimized: false
143 property bool minimized: false
147 property bool animationsEnabled: true
144 property bool animationsEnabled: true
qml/Stages/PhoneStage.qml+15−7
@@ -48,17 +48,12 @@ Rectangle {
48 onBeingResizedChanged: {
48 onBeingResizedChanged: {
49 if (beingResized) {
49 if (beingResized) {
50 // Brace yourselves for impact!
50 // Brace yourselves for impact!
51− spreadView.selectedIndex = -1;
51+ priv.reset();
52− spreadView.phase = 0;
53− spreadView.contentX = -spreadView.shift;
54 }
52 }
55 }
53 }
56 onSpreadEnabledChanged: {
54 onSpreadEnabledChanged: {
57 if (!spreadEnabled) {
55 if (!spreadEnabled) {
58− // reset. go back to display the focused app
56+ priv.reset();
59− spreadView.selectedIndex = -1;
60− spreadView.phase = 0;
61− spreadView.contentX = -spreadView.shift;
62 }
57 }
63 }
58 }
64 function updateFocusedAppOrientation() {
59 function updateFocusedAppOrientation() {
@@ -94,6 +89,7 @@ Rectangle {
94 readonly property var mainApp: applicationManager.focusedApplicationId
89 readonly property var mainApp: applicationManager.focusedApplicationId
95 ? applicationManager.findApplication(applicationManager.focusedApplicationId)
90 ? applicationManager.findApplication(applicationManager.focusedApplicationId)
96 : null
91 : null
92+
97 property int mainAppWindowOrientationAngle: 0
93 property int mainAppWindowOrientationAngle: 0
98 readonly property bool orientationChangesEnabled: priv.focusedAppOrientationChangesEnabled
94 readonly property bool orientationChangesEnabled: priv.focusedAppOrientationChangesEnabled
99 && !priv.focusedAppDelegateIsDislocated
95 && !priv.focusedAppDelegateIsDislocated
@@ -216,6 +212,18 @@ Rectangle {
216 // Is more stable than "spreadView.shiftedContentX === 0" as it filters out noise caused by
212 // Is more stable than "spreadView.shiftedContentX === 0" as it filters out noise caused by
217 // Flickable.contentX changing due to resizes.
213 // Flickable.contentX changing due to resizes.
218 property bool fullyShowingFocusedApp: true
214 property bool fullyShowingFocusedApp: true
215+
216+ function reset() {
217+ // The app that's about to go to foreground has to be focused, otherwise
218+ // it would leave us in an inconsistent state.
219+ if (!root.applicationManager.focusedApplicationId && root.applicationManager.count > 0) {
220+ root.applicationManager.focusApplication(root.applicationManager.get(0).appId);
221+ }
222+
223+ spreadView.selectedIndex = -1;
224+ spreadView.phase = 0;
225+ spreadView.contentX = -spreadView.shift;
226+ }
219 }
227 }
220 Timer {
228 Timer {
221 id: fullyShowingFocusedAppUpdateTimer
229 id: fullyShowingFocusedAppUpdateTimer
qml/Stages/SpreadDelegate.qml+1−1
@@ -268,7 +268,7 @@ FocusScope {
268 focus: true
268 focus: true
269 anchors {
269 anchors {
270 fill: parent
270 fill: parent
271− topMargin: appWindow.fullscreen || application.rotatesWindowContents
271+ topMargin: appWindow.fullscreen || (application && application.rotatesWindowContents)
272 ? 0 : maximizedAppTopMargin
272 ? 0 : maximizedAppTopMargin
273 }
273 }
274
274
src/ApplicationArguments.h+2−2
@@ -31,10 +31,10 @@ class ApplicationArguments : public QObject
31public:
31public:
32 ApplicationArguments(QObject *parent = nullptr);
32 ApplicationArguments(QObject *parent = nullptr);
33
33
34− void setDeviceName(QString deviceName) { m_deviceName = deviceName; }
34+ void setDeviceName(const QString &deviceName) { m_deviceName = deviceName; }
35 QString deviceName() const { return m_deviceName; }
35 QString deviceName() const { return m_deviceName; }
36
36
37− void setMode(QString mode) { m_mode = mode; }
37+ void setMode(const QString &mode) { m_mode = mode; }
38 QString mode() const { return m_mode; }
38 QString mode() const { return m_mode; }
39
39
40private:
40private:
src/CachingNetworkManagerFactory.cpp+1−1
@@ -46,7 +46,7 @@ QNetworkAccessManager *CachingNetworkManagerFactory::create(QObject *parent) {
46 QNetworkAccessManager *manager = new CachingNetworkAccessManager(parent);
46 QNetworkAccessManager *manager = new CachingNetworkAccessManager(parent);
47
47
48 QNetworkDiskCache* cache = new QNetworkDiskCache(manager);
48 QNetworkDiskCache* cache = new QNetworkDiskCache(manager);
49− cache->setCacheDirectory(QString("%1/network").arg(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)));
49+ cache->setCacheDirectory(QStringLiteral("%1/network").arg(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)));
50
50
51 manager->setCache(cache);
51 manager->setCache(cache);
52 return manager;
52 return manager;
src/Dash/main.cpp+10−10
@@ -36,20 +36,20 @@ int main(int argc, const char *argv[])
36 QGuiApplication *application = new QGuiApplication(argc, (char**)argv);
36 QGuiApplication *application = new QGuiApplication(argc, (char**)argv);
37
37
38 QCommandLineParser parser;
38 QCommandLineParser parser;
39− parser.setApplicationDescription("Description: Unity 8 Shell Dash");
39+ parser.setApplicationDescription(QStringLiteral("Description: Unity 8 Shell Dash"));
40 parser.addHelpOption();
40 parser.addHelpOption();
41
41
42− QCommandLineOption mousetouchOption("mousetouch",
42+ QCommandLineOption mousetouchOption(QStringLiteral("mousetouch"),
43− "Allow the mouse to provide touch input");
43+ QStringLiteral("Allow the mouse to provide touch input"));
44 parser.addOption(mousetouchOption);
44 parser.addOption(mousetouchOption);
45
45
46− QCommandLineOption windowGeometryOption(QStringList() << "windowgeometry",
46+ QCommandLineOption windowGeometryOption(QStringList() << QStringLiteral("windowgeometry"),
47− "Specify the window geometry as [<width>x<height>]", "windowgeometry", "1");
47+ QStringLiteral("Specify the window geometry as [<width>x<height>]"), QStringLiteral("windowgeometry"), QStringLiteral("1"));
48 parser.addOption(windowGeometryOption);
48 parser.addOption(windowGeometryOption);
49
49
50 // FIXME Remove once we drop the need of the hint
50 // FIXME Remove once we drop the need of the hint
51− QCommandLineOption desktopFileHintOption("desktop_file_hint",
51+ QCommandLineOption desktopFileHintOption(QStringLiteral("desktop_file_hint"),
52− "The desktop_file_hint option for QtMir", "hint_file");
52+ QStringLiteral("The desktop_file_hint option for QtMir"), QStringLiteral("hint_file"));
53 parser.addOption(desktopFileHintOption);
53 parser.addOption(desktopFileHintOption);
54
54
55 // Treat args with single dashes the same as arguments with two dashes
55 // Treat args with single dashes the same as arguments with two dashes
@@ -60,7 +60,7 @@ int main(int argc, const char *argv[])
60 ApplicationArguments qmlArgs;
60 ApplicationArguments qmlArgs;
61
61
62 if (getenv("QT_LOAD_TESTABILITY")) {
62 if (getenv("QT_LOAD_TESTABILITY")) {
63− QLibrary testLib(QLatin1String("qttestability"));
63+ QLibrary testLib(QStringLiteral("qttestability"));
64 if (testLib.load()) {
64 if (testLib.load()) {
65 typedef void (*TasInitialize)(void);
65 typedef void (*TasInitialize)(void);
66 TasInitialize initFunction = (TasInitialize)testLib.resolve("qt_testability_init");
66 TasInitialize initFunction = (TasInitialize)testLib.resolve("qt_testability_init");
@@ -91,8 +91,8 @@ int main(int argc, const char *argv[])
91 }
91 }
92 }
92 }
93
93
94− view->setTitle("Scopes");
94+ view->setTitle(QStringLiteral("Scopes"));
95− view->rootContext()->setContextProperty("applicationArguments", &qmlArgs);
95+ view->rootContext()->setContextProperty(QStringLiteral("applicationArguments"), &qmlArgs);
96
96
97 // You will need this if you want to interact with touch-only components using a mouse
97 // You will need this if you want to interact with touch-only components using a mouse
98 // Needed only when manually testing on a desktop.
98 // Needed only when manually testing on a desktop.
src/Panel/Indicators/client/indicatorsclient.cpp+7−7
@@ -40,16 +40,16 @@ IndicatorsClient::IndicatorsClient(int &argc, char **argv)
40 prependImportPaths(m_view->engine(), ::overrideImportPaths());
40 prependImportPaths(m_view->engine(), ::overrideImportPaths());
41 appendImportPaths(m_view->engine(), ::fallbackImportPaths());
41 appendImportPaths(m_view->engine(), ::fallbackImportPaths());
42
42
43− QString profile = "phone";
43+ QString profile = QStringLiteral("phone");
44− if (args.contains(QLatin1String("-profile")) && args.size() > args.indexOf(QLatin1String("-profile")) + 1) {
44+ if (args.contains(QStringLiteral("-profile")) && args.size() > args.indexOf(QStringLiteral("-profile")) + 1) {
45− profile = args.at(args.indexOf(QLatin1String("-profile")) + 1);
45+ profile = args.at(args.indexOf(QStringLiteral("-profile")) + 1);
46 }
46 }
47− m_view->rootContext()->setContextProperty("indicatorProfile", profile);
47+ m_view->rootContext()->setContextProperty(QStringLiteral("indicatorProfile"), profile);
48
48
49− m_view->setSource(QUrl("IndicatorsClient.qml"));
49+ m_view->setSource(QUrl(QStringLiteral("IndicatorsClient.qml")));
50 m_view->setResizeMode(QQuickView::SizeRootObjectToView);
50 m_view->setResizeMode(QQuickView::SizeRootObjectToView);
51− if (args.contains(QLatin1String("-windowgeometry")) && args.size() > args.indexOf(QLatin1String("-windowgeometry")) + 1) {
51+ if (args.contains(QStringLiteral("-windowgeometry")) && args.size() > args.indexOf(QStringLiteral("-windowgeometry")) + 1) {
52− QStringList geometryArg = args.at(args.indexOf(QLatin1String("-windowgeometry")) + 1).split('x');
52+ QStringList geometryArg = args.at(args.indexOf(QStringLiteral("-windowgeometry")) + 1).split('x');
53 if (geometryArg.size() == 2) {
53 if (geometryArg.size() == 2) {
54 m_view->resize(geometryArg.at(0).toInt(), geometryArg.at(1).toInt());
54 m_view->resize(geometryArg.at(0).toInt(), geometryArg.at(1).toInt());
55 }
55 }
src/UnityCommandLineParser.cpp+25−24
@@ -26,36 +26,36 @@ UnityCommandLineParser::UnityCommandLineParser(const QCoreApplication &app)
26 m_gridUnit = getenvFloat(ENV_GRID_UNIT_PX, DEFAULT_GRID_UNIT_PX);
26 m_gridUnit = getenvFloat(ENV_GRID_UNIT_PX, DEFAULT_GRID_UNIT_PX);
27
27
28 QCommandLineParser parser;
28 QCommandLineParser parser;
29− parser.setApplicationDescription("Description: Unity 8 Shell");
29+ parser.setApplicationDescription(QStringLiteral("Description: Unity 8 Shell"));
30 parser.addHelpOption();
30 parser.addHelpOption();
31
31
32− QCommandLineOption fullscreenOption("fullscreen",
32+ QCommandLineOption fullscreenOption(QStringLiteral("fullscreen"),
33− "Run in fullscreen");
33+ QStringLiteral("Run in fullscreen"));
34 parser.addOption(fullscreenOption);
34 parser.addOption(fullscreenOption);
35
35
36− QCommandLineOption framelessOption("frameless",
36+ QCommandLineOption framelessOption(QStringLiteral("frameless"),
37− "Run without window borders");
37+ QStringLiteral("Run without window borders"));
38 parser.addOption(framelessOption);
38 parser.addOption(framelessOption);
39
39
40− QCommandLineOption mousetouchOption("mousetouch",
40+ QCommandLineOption mousetouchOption(QStringLiteral("mousetouch"),
41− "Allow the mouse to provide touch input");
41+ QStringLiteral("Allow the mouse to provide touch input"));
42 parser.addOption(mousetouchOption);
42 parser.addOption(mousetouchOption);
43
43
44− QCommandLineOption windowGeometryOption(QStringList() << "windowgeometry",
44+ QCommandLineOption windowGeometryOption(QStringList() << QStringLiteral("windowgeometry"),
45− "Specify the window geometry as [<width>x<height>]", "windowgeometry", "1");
45+ QStringLiteral("Specify the window geometry as [<width>x<height>]"), QStringLiteral("windowgeometry"), QStringLiteral("1"));
46 parser.addOption(windowGeometryOption);
46 parser.addOption(windowGeometryOption);
47
47
48− QCommandLineOption testabilityOption("testability",
48+ QCommandLineOption testabilityOption(QStringLiteral("testability"),
49− "DISCOURAGED: Please set QT_LOAD_TESTABILITY instead.\nLoad the testability driver");
49+ QStringLiteral("DISCOURAGED: Please set QT_LOAD_TESTABILITY instead.\nLoad the testability driver"));
50 parser.addOption(testabilityOption);
50 parser.addOption(testabilityOption);
51
51
52− QCommandLineOption devicenameOption(QStringList() << "devicename",
52+ QCommandLineOption devicenameOption(QStringList() << QStringLiteral("devicename"),
53− "Specify the device name instead of letting Unity 8 find it out", "devicename", "");
53+ QStringLiteral("Specify the device name instead of letting Unity 8 find it out"), QStringLiteral("devicename"), QLatin1String(""));
54 parser.addOption(devicenameOption);
54 parser.addOption(devicenameOption);
55
55
56− QCommandLineOption modeOption("mode",
56+ QCommandLineOption modeOption(QStringLiteral("mode"),
57− "Whether to run greeter and/or shell [full-greeter, full-shell, greeter, shell]",
57+ QStringLiteral("Whether to run greeter and/or shell [full-greeter, full-shell, greeter, shell]"),
58− "mode", "full-greeter");
58+ QStringLiteral("mode"), QStringLiteral("full-greeter"));
59 parser.addOption(modeOption);
59 parser.addOption(modeOption);
60
60
61 // Treat args with single dashes the same as arguments with two dashes
61 // Treat args with single dashes the same as arguments with two dashes
@@ -83,7 +83,7 @@ UnityCommandLineParser::UnityCommandLineParser(const QCoreApplication &app)
83
83
84int UnityCommandLineParser::parsePixelsValue(const QString &str)
84int UnityCommandLineParser::parsePixelsValue(const QString &str)
85{
85{
86− if (str.endsWith("gu", Qt::CaseInsensitive)) {
86+ if (str.endsWith(QLatin1String("gu"), Qt::CaseInsensitive)) {
87 QString numStr = str;
87 QString numStr = str;
88 numStr.remove(numStr.size() - 2, 2);
88 numStr.remove(numStr.size() - 2, 2);
89 return numStr.toInt() * m_gridUnit;
89 return numStr.toInt() * m_gridUnit;
@@ -105,13 +105,14 @@ void UnityCommandLineParser::resolveMode(QCommandLineParser &parser, QCommandLin
105 // If an invalid option was specified, set it to the default
105 // If an invalid option was specified, set it to the default
106 // If no default was provided in the QCommandLineOption constructor, abort.
106 // If no default was provided in the QCommandLineOption constructor, abort.
107 if (!parser.isSet(modeOption) ||
107 if (!parser.isSet(modeOption) ||
108− (parser.value(modeOption) != "full-greeter" &&
108+ (parser.value(modeOption) != QLatin1String("full-greeter") &&
109− parser.value(modeOption) != "full-shell" &&
109+ parser.value(modeOption) != QLatin1String("full-shell") &&
110− parser.value(modeOption) != "greeter" &&
110+ parser.value(modeOption) != QLatin1String("greeter") &&
111− parser.value(modeOption) != "shell")) {
111+ parser.value(modeOption) != QLatin1String("shell"))) {
112−
112+
113+ const QStringList defaultValues = modeOption.defaultValues();
113− if (modeOption.defaultValues().first() != nullptr) {
114+ if (!defaultValues.isEmpty()) {
114− m_mode = modeOption.defaultValues().first();
115+ m_mode = defaultValues.first();
115 qWarning() << "Mode argument was not provided or was set to an illegal value."
116 qWarning() << "Mode argument was not provided or was set to an illegal value."
116 " Using default value of --mode=" << m_mode;
117 " Using default value of --mode=" << m_mode;
117 } else {
118 } else {
src/libunity8-private/unitydbusobject.cpp+2−2
@@ -64,8 +64,8 @@ void UnityDBusObject::notifyPropertyChanged(const QString& propertyName, const Q
64 changedProps.insert(propertyName, value);
64 changedProps.insert(propertyName, value);
65
65
66 message = QDBusMessage::createSignal(path(),
66 message = QDBusMessage::createSignal(path(),
67− "org.freedesktop.DBus.Properties",
67+ QStringLiteral("org.freedesktop.DBus.Properties"),
68− "PropertiesChanged");
68+ QStringLiteral("PropertiesChanged"));
69 message << interface;
69 message << interface;
70 message << changedProps;
70 message << changedProps;
71 message << QStringList();
71 message << QStringList();
src/libunity8-private/unitydbusvirtualobject.cpp+2−2
@@ -61,8 +61,8 @@ void UnityDBusVirtualObject::notifyPropertyChanged(const QString& interface, con
61 changedProps.insert(propertyName, value);
61 changedProps.insert(propertyName, value);
62
62
63 message = QDBusMessage::createSignal(path() + "/" + node,
63 message = QDBusMessage::createSignal(path() + "/" + node,
64− "org.freedesktop.DBus.Properties",
64+ QStringLiteral("org.freedesktop.DBus.Properties"),
65− "PropertiesChanged");
65+ QStringLiteral("PropertiesChanged"));
66 message << interface;
66 message << interface;
67 message << changedProps;
67 message << changedProps;
68 message << QStringList();
68 message << QStringList();
src/main.cpp+4−4
@@ -43,7 +43,7 @@ int main(int argc, const char *argv[])
43 isMirServer = true;
43 isMirServer = true;
44 }
44 }
45
45
46− QGuiApplication::setApplicationName("unity8");
46+ QGuiApplication::setApplicationName(QStringLiteral("unity8"));
47 QGuiApplication *application;
47 QGuiApplication *application;
48
48
49 application = new QGuiApplication(argc, (char**)argv);
49 application = new QGuiApplication(argc, (char**)argv);
@@ -65,7 +65,7 @@ int main(int argc, const char *argv[])
65 // The testability driver is only loaded by QApplication but not by QGuiApplication.
65 // The testability driver is only loaded by QApplication but not by QGuiApplication.
66 // However, QApplication depends on QWidget which would add some unneeded overhead => Let's load the testability driver on our own.
66 // However, QApplication depends on QWidget which would add some unneeded overhead => Let's load the testability driver on our own.
67 if (parser.hasTestability() || getenv("QT_LOAD_TESTABILITY")) {
67 if (parser.hasTestability() || getenv("QT_LOAD_TESTABILITY")) {
68− QLibrary testLib(QLatin1String("qttestability"));
68+ QLibrary testLib(QStringLiteral("qttestability"));
69 if (testLib.load()) {
69 if (testLib.load()) {
70 typedef void (*TasInitialize)(void);
70 typedef void (*TasInitialize)(void);
71 TasInitialize initFunction = (TasInitialize)testLib.resolve("qt_testability_init");
71 TasInitialize initFunction = (TasInitialize)testLib.resolve("qt_testability_init");
@@ -85,7 +85,7 @@ int main(int argc, const char *argv[])
85 QQuickView* view = new QQuickView();
85 QQuickView* view = new QQuickView();
86 view->setResizeMode(QQuickView::SizeRootObjectToView);
86 view->setResizeMode(QQuickView::SizeRootObjectToView);
87 view->setColor("black");
87 view->setColor("black");
88− view->setTitle("Unity8 Shell");
88+ view->setTitle(QStringLiteral("Unity8 Shell"));
89
89
90 if (parser.windowGeometry().isValid()) {
90 if (parser.windowGeometry().isValid()) {
91 view->setWidth(parser.windowGeometry().width());
91 view->setWidth(parser.windowGeometry().width());
@@ -93,7 +93,7 @@ int main(int argc, const char *argv[])
93 }
93 }
94
94
95 view->engine()->setBaseUrl(QUrl::fromLocalFile(::qmlDirectory()));
95 view->engine()->setBaseUrl(QUrl::fromLocalFile(::qmlDirectory()));
96− view->rootContext()->setContextProperty("applicationArguments", &qmlArgs);
96+ view->rootContext()->setContextProperty(QStringLiteral("applicationArguments"), &qmlArgs);
97 if (parser.hasFrameless()) {
97 if (parser.hasFrameless()) {
98 view->setFlags(Qt::FramelessWindowHint);
98 view->setFlags(Qt::FramelessWindowHint);
99 }
99 }
tests/autopilot/unity8/indicators/tests/test_indicators.py+10−13
@@ -16,9 +16,11 @@
16# You should have received a copy of the GNU General Public License
16# You should have received a copy of the GNU General Public License
17# along with this program. If not, see <http://www.gnu.org/licenses/>.
17# along with this program. If not, see <http://www.gnu.org/licenses/>.
18
18
19+import platform
20+
19from testscenarios import multiply_scenarios
21from testscenarios import multiply_scenarios
20
22
21−from autopilot import platform
23+import autopilot.platform
22
24
23from unity8.indicators import tests
25from unity8.indicators import tests
24
26
@@ -39,12 +41,6 @@ class IndicatorExistsTestCase(tests.DeviceIndicatorTestCase):
39 tests.IndicatorTestCase.device_emulation_scenarios
41 tests.IndicatorTestCase.device_emulation_scenarios
40 )
42 )
41
43
42− def setUp(self):
43− super().setUp()
44− if (platform.model() == 'Nexus 10' and
45− self.indicator_name == 'indicator-bluetooth'):
46− self.skipTest('Nexus 10 does not have bluetooth at the moment.')
47−
48 def test_indicator_exists(self):
44 def test_indicator_exists(self):
49 self.main_window._get_indicator_panel_item(
45 self.main_window._get_indicator_panel_item(
50 self.indicator_name
46 self.indicator_name
@@ -74,12 +70,6 @@ class IndicatorPageTitleMatchesWidgetTestCase(tests.DeviceIndicatorTestCase):
74 tests.IndicatorTestCase.device_emulation_scenarios
70 tests.IndicatorTestCase.device_emulation_scenarios
75 )
71 )
76
72
77− def setUp(self):
78− super().setUp()
79− if (platform.model() == 'Nexus 10' and
80− self.indicator_name == 'indicator-bluetooth'):
81− self.skipTest('Nexus 10 does not have bluetooth at the moment.')
82−
83 def test_indicator_page_title_matches_widget(self):
73 def test_indicator_page_title_matches_widget(self):
84 """Swiping open an indicator must show its correct title.
74 """Swiping open an indicator must show its correct title.
85
75
@@ -87,5 +77,12 @@ class IndicatorPageTitleMatchesWidgetTestCase(tests.DeviceIndicatorTestCase):
87 """
77 """
88 indicator_page = self.main_window.open_indicator_page(
78 indicator_page = self.main_window.open_indicator_page(
89 self.indicator_name)
79 self.indicator_name)
80+ if self.indicator_name == 'indicator-bluetooth':
81+ if autopilot.platform.model() == 'Nexus 10':
82+ self.expectFailure('Nexus 10 does not have bluetooth at the moment.',
83+ self.assertTrue, indicator_page.visible)
84+ if platform.linux_distribution()[2] == 'wily':
85+ self.expectFailure('Bluetooth doesn\'t work on wily at the moment.',
86+ self.assertTrue, indicator_page.visible)
90 self.assertTrue(indicator_page.visible)
87 self.assertTrue(indicator_page.visible)
91 self.assertEqual(indicator_page.title, self.title)
88 self.assertEqual(indicator_page.title, self.title)
tests/mocks/Unity/Notifications/MockActionModel.cpp+1−1
@@ -59,7 +59,7 @@ QHash<int, QByteArray> ActionModel::roleNames() const {
59 return roles;
59 return roles;
60}
60}
61
61
62−Q_INVOKABLE QVariant ActionModel::data(int row, int role) const
62+QVariant ActionModel::data(int row, int role) const
63{
63{
64 return data(index(row, 0), role);
64 return data(index(row, 0), role);
65}
65}
tests/mocks/Unity/Notifications/MockNotification.cpp+1
@@ -39,6 +39,7 @@ MockNotification::MockNotification(QObject *parent) : QObject(parent), p(new Moc
39}
39}
40
40
41MockNotification::~MockNotification() {
41MockNotification::~MockNotification() {
42+ delete p->actionsModel;
42}
43}
43
44
44QString MockNotification::getSummary() const {
45QString MockNotification::getSummary() const {
tests/mocks/Unity/Notifications/MockNotification.h+1−1
@@ -30,7 +30,7 @@ struct MockNotificationPrivate;
30
30
31class MockNotification : public QObject {
31class MockNotification : public QObject {
32 Q_OBJECT
32 Q_OBJECT
33− Q_ENUMS(Type)
33+ Q_ENUMS(Type Urgency)
34 Q_PROPERTY(QString summary READ getSummary WRITE setSummary NOTIFY summaryChanged)
34 Q_PROPERTY(QString summary READ getSummary WRITE setSummary NOTIFY summaryChanged)
35 Q_PROPERTY(QString body READ getBody WRITE setBody NOTIFY bodyChanged)
35 Q_PROPERTY(QString body READ getBody WRITE setBody NOTIFY bodyChanged)
36 Q_PROPERTY(int nid READ getID WRITE setID NOTIFY idChanged)
36 Q_PROPERTY(int nid READ getID WRITE setID NOTIFY idChanged)
tests/mocks/Unity/Notifications/MockNotificationModel.cpp+5−1
@@ -35,6 +35,10 @@ MockNotificationModel::MockNotificationModel(QObject *parent) : QAbstractListMod
35}
35}
36
36
37MockNotificationModel::~MockNotificationModel() {
37MockNotificationModel::~MockNotificationModel() {
38+ Q_FOREACH(MockNotification *n, m_queue) {
39+ n->deleteLater();
40+ }
41+ m_queue.clear();
38}
42}
39
43
40int MockNotificationModel::rowCount(const QModelIndex &) const {
44int MockNotificationModel::rowCount(const QModelIndex &) const {
@@ -47,7 +51,7 @@ int MockNotificationModel::getCount() const {
47
51
48QVariant MockNotificationModel::data(const QModelIndex &index, int role) const {
52QVariant MockNotificationModel::data(const QModelIndex &index, int role) const {
49 if (!index.isValid())
53 if (!index.isValid())
50− return QVariant();
54+ return QVariant();
51
55
52 switch(role) {
56 switch(role) {
53 case ModelInterface::RoleType:
57 case ModelInterface::RoleType:
tests/qmltests/Notifications/tst_Notifications.qml+61−8
@@ -12,16 +12,15 @@
12 *
12 *
13 * You should have received a copy of the GNU Lesser General Public License
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Mirco Mueller <mirco.mueller@canonical.com>
18 */
15 */
19
16
20−import QtQuick 2.0
17+import QtQuick 2.4
18+import QtQuick.Layouts 1.1
21import QtTest 1.0
19import QtTest 1.0
22import ".."
20import ".."
23import "../../../qml/Notifications"
21import "../../../qml/Notifications"
22+import "../../../qml/Components/UnityInputInfo"
24−import Ubuntu.Components 0.1
23+import Ubuntu.Components 1.2
25import Unity.Test 0.1
24import Unity.Test 0.1
26import Unity.Notifications 1.0
25import Unity.Notifications 1.0
27import QtMultimedia 5.0
26import QtMultimedia 5.0
@@ -77,7 +76,7 @@ Item {
77 "type": Notification.Ephemeral,
76 "type": Notification.Ephemeral,
78 "hints": {},
77 "hints": {},
79 "summary": "Cole Raby",
78 "summary": "Cole Raby",
80− "body": "I did not expect it to be that late.",
79+ "body": "I did not expect it to be <b>that</b> late.",
81 "icon": "../graphics/avatars/amanda.png",
80 "icon": "../graphics/avatars/amanda.png",
82 "secondaryIcon": "../graphics/applicationIcons/facebook.png",
81 "secondaryIcon": "../graphics/applicationIcons/facebook.png",
83 "rawActions": ["reply_id", "Dummy"]})
82 "rawActions": ["reply_id", "Dummy"]})
@@ -91,7 +90,7 @@ Item {
91 "type": Notification.Ephemeral,
90 "type": Notification.Ephemeral,
92 "hints": {"x-canonical-non-shaped-icon": "true"},
91 "hints": {"x-canonical-non-shaped-icon": "true"},
93 "summary": "Contacts",
92 "summary": "Contacts",
94− "body": "Synchronised contacts-database with cloud-storage.",
93+ "body": "Synchronised contacts-database &amp; cloud-storage.",
95 "icon": "../graphics/applicationIcons/contacts-app.png",
94 "icon": "../graphics/applicationIcons/contacts-app.png",
96 "secondaryIcon": "",
95 "secondaryIcon": "",
97 "rawActions": ["reply_id", "Dummy"]})
96 "rawActions": ["reply_id", "Dummy"]})
@@ -189,6 +188,7 @@ Item {
189
188
190 anchors.fill: parent
189 anchors.fill: parent
191 model: mockModel
190 model: mockModel
191+ hasMouse: UnityInputInfo.mice > 0 // for testing, we add/remove only a mock mouse
192 }
192 }
193 }
193 }
194
194
@@ -218,7 +218,7 @@ Item {
218
218
219 Button {
219 Button {
220 width: parent.width
220 width: parent.width
221− text: "add an non-shaped-icon-summary-body"
221+ text: "add a non-shaped-icon-summary-body"
222 onClicked: rootRow.addEphemeralNonShapedIconNotification()
222 onClicked: rootRow.addEphemeralNonShapedIconNotification()
223 }
223 }
224
224
@@ -257,6 +257,24 @@ Item {
257 text: "clear model"
257 text: "clear model"
258 onClicked: rootRow.clearNotifications()
258 onClicked: rootRow.clearNotifications()
259 }
259 }
260+
261+ RowLayout {
262+ Layout.fillWidth: true
263+ CheckBox {
264+ id: fakeMouseCB
265+ onClicked: {
266+ if (checked) {
267+ UnityInputInfo.inputInfo.addMockMouse();
268+ } else {
269+ UnityInputInfo.inputInfo.removeMockMouse();
270+ }
271+ }
272+ }
273+ Label {
274+ text: "With fake mouse"
275+ anchors.verticalCenter: parent.verticalCenter
276+ }
277+ }
260 }
278 }
261 }
279 }
262
280
@@ -675,6 +693,41 @@ Item {
675 tryCompare(mockModel, "count", before - 1)
693 tryCompare(mockModel, "count", before - 1)
676 }
694 }
677 }
695 }
696+
697+ function test_clickToClose_data() { // reuse the data
698+ UnityInputInfo.inputInfo.addMockMouse();
699+ return test_NotificationRenderer_data();
700+ }
701+
702+ function test_clickToClose(data) {
703+ // populate model with some mock notifications
704+ mockModel.append(data.n)
705+
706+ // make sure the view is properly updated before going on
707+ notifications.forceLayout();
708+ waitForRendering(notifications);
709+
710+ var notification = findChild(notifications, "notification" + (mockModel.count - 1))
711+ verify(!!notification, "notification wasn't found");
712+
713+ // click-to-dismiss check
714+ waitForRendering(notification);
715+ var before = mockModel.count;
716+ var canBeClosed = notification.canBeClosed;
717+ mouseClick(notification);
718+
719+ if (canBeClosed) {
720+ // closing the notification, the model count should be one less
721+ tryCompare(mockModel, "count", before - 1)
722+ } else {
723+ // not closing, model stays the same
724+ tryCompare(mockModel, "count", before)
725+ }
726+ }
727+
728+ function cleanupTestCase() {
729+ UnityInputInfo.inputInfo.removeMockMouse();
730+ }
678 }
731 }
679 }
732 }
680}
733}
tests/qmltests/Notifications/tst_SwipeToAct.qml+58−14
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2014 Canonical, Ltd.
2+ * Copyright (C) 2014, 2015 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -14,10 +14,12 @@
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
15 */
16
16
17−import QtQuick 2.0
17+import QtQuick 2.4
18+import QtQuick.Layouts 1.1
18import QtTest 1.0
19import QtTest 1.0
19import ".."
20import ".."
20import "../../../qml/Notifications"
21import "../../../qml/Notifications"
22+import "../../../qml/Components/UnityInputInfo"
21import Ubuntu.Components 0.1
23import Ubuntu.Components 0.1
22import Unity.Test 0.1
24import Unity.Test 0.1
23import Unity.Notifications 1.0
25import Unity.Notifications 1.0
@@ -74,7 +76,10 @@ Item {
74 icon: "../graphics/avatars/amanda.png",
76 icon: "../graphics/avatars/amanda.png",
75 secondaryIcon: "incoming-call",
77 secondaryIcon: "incoming-call",
76 actions: [{ id: "ok_id", label: "Ok"},
78 actions: [{ id: "ok_id", label: "Ok"},
77− { id: "cancel_id", label: "Cancel"}]
79+ { id: "cancel_id", label: "Cancel"},
80+ { id: "foo_id", label: "Foo"},
81+ { id: "bar_id", label: "Bar"}
82+ ]
78 }
83 }
79
84
80 mockModel.append(n)
85 mockModel.append(n)
@@ -97,7 +102,6 @@ Item {
97
102
98 MouseArea{
103 MouseArea{
99 id: clickThroughCatcher
104 id: clickThroughCatcher
100−
101 anchors.fill: parent
105 anchors.fill: parent
102 }
106 }
103
107
@@ -108,6 +112,7 @@ Item {
108
112
109 anchors.fill: parent
113 anchors.fill: parent
110 model: mockModel
114 model: mockModel
115+ hasMouse: UnityInputInfo.mice > 0 // for testing, we add/remove only a mock mouse
111 }
116 }
112 }
117 }
113
118
@@ -140,6 +145,24 @@ Item {
140 text: "clear model"
145 text: "clear model"
141 onClicked: rootRow.clearNotifications()
146 onClicked: rootRow.clearNotifications()
142 }
147 }
148+
149+ RowLayout {
150+ Layout.fillWidth: true
151+ CheckBox {
152+ id: fakeMouseCB
153+ onClicked: {
154+ if (checked) {
155+ UnityInputInfo.inputInfo.addMockMouse();
156+ } else {
157+ UnityInputInfo.inputInfo.removeMockMouse();
158+ }
159+ }
160+ }
161+ Label {
162+ text: "With fake mouse"
163+ anchors.verticalCenter: parent.verticalCenter
164+ }
165+ }
143 }
166 }
144 }
167 }
145
168
@@ -258,21 +281,42 @@ Item {
258
281
259 if(data.buttonRowVisible) {
282 if(data.buttonRowVisible) {
260 var swipeButton = findChild(buttonRow, "notify_swipe_button")
283 var swipeButton = findChild(buttonRow, "notify_swipe_button")
284+
285+ if (!swipeButton.clickToAct) { // don't run if there's a real mouse
261− var slider = findChild(swipeButton, "slider")
286+ var slider = findChild(swipeButton, "slider")
262− var swipeMouseArea = findChild(swipeButton, "swipeMouseArea")
287+ var swipeMouseArea = findChild(swipeButton, "swipeMouseArea")
263− var x = swipeMouseArea.width / 2
288+ var x = swipeMouseArea.width / 2
264− var y = swipeMouseArea.height / 2
289+ var y = swipeMouseArea.height / 2
290+
291+ if(data.checkSwipeToActAccept) {
292+ tryCompareFunction(function() { mouseDrag(slider, x, y, (swipeMouseArea.width / 2) - slider.width, 0); return actionSpy.signalArguments.length > 0; }, true);
293+ compare(actionSpy.signalArguments[0][0], data.actions.data(0, ActionModel.RoleActionId), "got wrong id for positive action");
294+ actionSpy.clear();
295+ }
296+ if(data.checkSwipeToActReject) {
297+ tryCompareFunction(function() { mouseDrag(slider, x, y, -(swipeMouseArea.width / 2), 0); return actionSpy.signalArguments.length > 0; }, true);
298+ compare(actionSpy.signalArguments[0][0], data.actions.data(1, ActionModel.RoleActionId), "got wrong id for negative action");
299+ actionSpy.clear();
300+ }
301+ }
302+
303+ // add a mock mouse, test clicking the left/right buttons
304+ UnityInputInfo.inputInfo.addMockMouse();
305+ var leftButton = findChild(swipeButton, "leftButton");
306+ var rightButton = findChild(swipeButton, "rightButton");
265
307
266 if(data.checkSwipeToActAccept) {
308 if(data.checkSwipeToActAccept) {
267− tryCompareFunction(function() { mouseDrag(slider, x, y, (swipeMouseArea.width / 2) - slider.width, 0); return actionSpy.signalArguments.length > 0; }, true);
309+ mouseClick(rightButton);
268− compare(actionSpy.signalArguments[0][0], data.actions.data(0, ActionModel.RoleActionId), "got wrong id for positive action")
310+ compare(actionSpy.signalArguments[0][0], data.actions.data(0, ActionModel.RoleActionId), "got wrong id for positive action");
269− actionSpy.clear()
311+ actionSpy.clear();
270 }
312 }
313+
271 if(data.checkSwipeToActReject) {
314 if(data.checkSwipeToActReject) {
272− tryCompareFunction(function() { mouseDrag(slider, x, y, -(swipeMouseArea.width / 2), 0); return actionSpy.signalArguments.length > 0; }, true);
315+ mouseClick(leftButton);
273− compare(actionSpy.signalArguments[0][0], data.actions.data(1, ActionModel.RoleActionId), "got wrong id for negative action")
316+ compare(actionSpy.signalArguments[0][0], data.actions.data(1, ActionModel.RoleActionId), "got wrong id for negative action");
274− actionSpy.clear()
317+ actionSpy.clear();
275 }
318 }
319+ UnityInputInfo.inputInfo.removeMockMouse();
276 }
320 }
277 }
321 }
278 }
322 }
tests/qmltests/tst_OrientedShell.qml+106−1
@@ -1000,6 +1000,60 @@ Rectangle {
1000 tryCompare(shell, "transformRotationAngle", root.primaryOrientationAngle);
1000 tryCompare(shell, "transformRotationAngle", root.primaryOrientationAngle);
1001 }
1001 }
1002
1002
1003+ /*
1004+ Regression test for https://bugs.launchpad.net/ubuntu/+source/unity8/+bug/1476757
1005+
1006+ Steps:
1007+ 1- have a portrait-only app in foreground (eg unity8-dash)
1008+ 2- launch or switch to some other application
1009+ 3- right-edge swipe to show the apps spread
1010+ 4- swipe up to close the current app (the one from step 2)
1011+ 5- lock the phone (press the power button)
1012+ 6- unlock the phone (press power button again and swipe greeter away)
1013+ * app from step 1 should be on foreground and focused
1014+ 7- rotate phone
1015+
1016+ Expected outcome:
1017+ - The portrait-only application stays put
1018+
1019+ Actual outcome:
1020+ - The portrait-only application rotates freely
1021+ */
1022+ function test_lockPhoneAfterClosingAppInSpreadThenUnlockAndRotate() {
1023+ loadShell("mako");
1024+
1025+ var gmailApp = ApplicationManager.startApplication("gmail-webapp");
1026+ verify(gmailApp);
1027+
1028+ waitUntilAppSurfaceShowsUp("gmail-webapp");
1029+
1030+ performEdgeSwipeToShowAppSpread();
1031+
1032+ swipeToCloseCurrentAppInSpread();
1033+
1034+ // press the power key once
1035+ Powerd.setStatus(Powerd.Off, Powerd.Unknown);
1036+ var greeter = findChild(shell, "greeter");
1037+ tryCompare(greeter, "fullyShown", true);
1038+
1039+ // and a second time to turn the display back on
1040+ Powerd.setStatus(Powerd.On, Powerd.Unknown);
1041+
1042+ swipeAwayGreeter();
1043+
1044+ verify(isAppSurfaceFocused("unity8-dash"))
1045+
1046+ signalSpy.clear();
1047+ signalSpy.target = shell;
1048+ signalSpy.signalName = "widthChanged";
1049+ verify(signalSpy.valid);
1050+
1051+ rotateTo(90);
1052+
1053+ // shell shouldn't have change its orientation at any moment
1054+ compare(signalSpy.count, 0);
1055+ }
1056+
1003 // angle - rotation angle in degrees clockwise, relative to the primary orientation.
1057 // angle - rotation angle in degrees clockwise, relative to the primary orientation.
1004 function rotateTo(angle) {
1058 function rotateTo(angle) {
1005 switch (angle) {
1059 switch (angle) {
@@ -1020,6 +1074,12 @@ Rectangle {
1020 }
1074 }
1021
1075
1022 var rotationStates = findInvisibleChild(orientedShell, "rotationStates");
1076 var rotationStates = findInvisibleChild(orientedShell, "rotationStates");
1077+ verify(rotationStates.d);
1078+ verify(rotationStates.d.stateUpdateTimer);
1079+
1080+ // wait for the delayed state update to take place, if any
1081+ tryCompare(rotationStates.d.stateUpdateTimer, "running", false);
1082+
1023 waitUntilTransitionsEnd(rotationStates);
1083 waitUntilTransitionsEnd(rotationStates);
1024 }
1084 }
1025
1085
@@ -1243,7 +1303,6 @@ Rectangle {
1243 var childs = new Array(0);
1303 var childs = new Array(0);
1244 childs.push(obj)
1304 childs.push(obj)
1245 while (childs.length > 0) {
1305 while (childs.length > 0) {
1246− console.log("Checking " + childs[0].objectName);
1247 if (childs[0].objectName === "surfaceItem"
1306 if (childs[0].objectName === "surfaceItem"
1248 && childs[0].surface !== undefined
1307 && childs[0].surface !== undefined
1249 && childs[0].surface === surface) {
1308 && childs[0].surface === surface) {
@@ -1256,5 +1315,51 @@ Rectangle {
1256 }
1315 }
1257 return null;
1316 return null;
1258 }
1317 }
1318+
1319+ function swipeToCloseCurrentAppInSpread() {
1320+ var spreadView = findChild(shell, "spreadView");
1321+ verify(spreadView);
1322+
1323+ var delegateToClose = findChild(spreadView, "appDelegate0");
1324+ verify(delegateToClose);
1325+
1326+ var appIdToClose = ApplicationManager.get(0).appId;;
1327+ var appCountBefore = ApplicationManager.count;
1328+
1329+ // ensure the current app is widely visible by swiping to the right,
1330+ // which will move the app windows accordingly
1331+ touchFlick(shell,
1332+ shell.width * 0.25, shell.width / 2,
1333+ shell.width, shell.width / 2);
1334+
1335+ tryCompare(spreadView, "flicking", false);
1336+ tryCompare(spreadView, "moving", false);
1337+
1338+ // Swipe up close to its left edge, as it is the only area of it guaranteed to be exposed
1339+ // in the spread. Eg: its center could be covered by some other delegate.
1340+ touchFlick(delegateToClose,
1341+ 1, delegateToClose.height / 2,
1342+ 1, - delegateToClose.height / 4);
1343+
1344+ // ensure it got closed
1345+ tryCompare(ApplicationManager, "count", appCountBefore - 1);
1346+ compare(ApplicationManager.findApplication(appIdToClose), null);
1347+ }
1348+
1349+ function isAppSurfaceFocused(appId) {
1350+ var appWindow = findChild(shell, "appWindow_" + appId);
1351+ verify(appWindow);
1352+
1353+ var app = ApplicationManager.findApplication(appId);
1354+ verify(app);
1355+
1356+ var surface = app.session.surface;
1357+ verify(surface);
1358+
1359+ var surfaceItem = findSurfaceItem(appWindow, surface);
1360+ verify(surfaceItem);
1361+
1362+ return surfaceItem.activeFocus;
1363+ }
1259 }
1364 }
1260}
1365}