on xenial help sign in
Merge trunk
commit4cce77466d2cf88f5cd6658bed6354c5c9cbb03e authorGerry Boland <gerry.boland@canonical.com> dateMon 22 Sep 2014, 16:37 (12 years ago) parent6b44b20ad15d40
206 files changed+4852−3237
cmake/modules/QmlTest.cmake+15−3 data/unity8-dash.desktop.in+3−3 data/unity8-filewatcher.conf+8 data/unity8.desktop.in+1−1 debian/changelog+122 debian/control+4−4 debian/unity8.install+1 plugins/Dash/CardCreator.js+4−4 plugins/Dash/listviewwithpageheader.cpp+18−5 plugins/Dash/listviewwithpageheader.h+3−1 plugins/Lights/Lights.cpp+1−2 plugins/Lights/android-hardware.h+23 plugins/Powerd/Powerd.cpp+16−2 plugins/Powerd/Powerd.h+8−1 plugins/Powerd/Powerd.qmltypes+3−3 plugins/Ubuntu/Payments/Payments.cpp+21−1 plugins/Ubuntu/Payments/Payments.h+4 plugins/Unity/DashCommunicator/dashcommunicator.cpp+2−2 plugins/Unity/DashCommunicator/dashcommunicator.h+1−1 plugins/Unity/DashCommunicator/dashcommunicatorservice.h+1−1 plugins/Unity/DashCommunicator/dbusdashcommunicatorservice.cpp+2−2 plugins/Unity/DashCommunicator/dbusdashcommunicatorservice.h+2−2 plugins/Unity/Launcher/CMakeLists.txt+6−4 plugins/Unity/Launcher/backend/launcherbackend.cpp−584 plugins/Unity/Launcher/backend/launcherbackend.h−196 plugins/Unity/Launcher/dbusinterface.cpp+232 plugins/Unity/Launcher/dbusinterface.h+50 plugins/Unity/Launcher/desktopfilehandler.cpp+151 plugins/Unity/Launcher/desktopfilehandler.h+56 plugins/Unity/Launcher/gsettings.cpp+66 plugins/Unity/Launcher/gsettings.h+37 plugins/Unity/Launcher/launcheritem.cpp+31 plugins/Unity/Launcher/launcheritem.h+19−20 plugins/Unity/Launcher/launchermodel.cpp+88−15 plugins/Unity/Launcher/launchermodel.h+15−8 plugins/Unity/Launcher/common/quicklistentry.cpp → plugins/Unity/Launcher/quicklistentry.cpp plugins/Unity/Launcher/common/quicklistentry.h → plugins/Unity/Launcher/quicklistentry.h plugins/Unity/Launcher/quicklistmodel.h+1−1 plugins/Unity/Session/CMakeLists.txt+7 plugins/Unity/Session/orientationlock.cpp+74 plugins/Unity/Session/orientationlock.h+62 plugins/Unity/Session/plugin.cpp+8−4 plugins/Utils/windowkeysfilter.cpp+1 po/am.po+7−3 po/ar.po+25−20 po/ast.po+7−3 po/az.po+6−2 po/bg.po+25−20 po/br.po+41−43 po/bs.po+25−20 po/ca.po+13−7 po/ckb.po+25−20 po/cs.po+25−20 po/da.po+25−20 po/de.po+14−10 po/el.po+25−23 po/en_AU.po+7−3 po/en_GB.po+42−44 po/eo.po+25−20 po/es.po+7−3 po/eu.po+8−4 po/fa.po+26−27 po/fi.po+7−3 po/fo.po+25−20 po/fr.po+11−5 po/gd.po+62−55 po/gl.po+41−45 po/he.po+25−26 po/hi.po+25−20 po/hr.po+25−20 po/hu.po+7−3 po/hy.po+25−20 po/id.po+25−20 po/is.po+46−41 po/it.po+7−3 po/ja.po+20−16 po/km.po+46−45 po/kn.po+25−20 po/ko.po+72−76 po/ku.po+356 po/ky.po+25−20 po/lo.po+25−20 po/lt.po+25−20 po/lv.po+35−36 po/ml.po+25−20 po/mr.po+25−20 po/ms.po+25−20 po/my.po+25−20 po/nb.po+8−4 po/nl.po+8−4 po/pl.po+25−20 po/pt.po+8−4 po/pt_BR.po+25−29 po/ro.po+8−4 po/ru.po+7−3 po/shn.po+25−20 po/si.po+25−20 po/sl.po+7−3 po/sq.po+25−20 po/sr.po+7−3 po/sv.po+60−52 po/sw.po+25−20 po/ta.po+25−20 po/te.po+25−20 po/tr.po+51−42 po/ug.po+25−20 po/uk.po+41−43 po/unity8.pot+33−29 po/vi.po+25−20 po/xh.po+25−20 po/zh_CN.po+25−26 po/zh_HK.po+25−20 po/zh_TW.po+57−52 qml/Components/Background.qml+1−1 qml/Components/Dialogs.qml+10 qml/Dash/CardCarousel.qml+1−1 qml/Dash/CardGrid.qml+1−1 qml/Dash/CardHorizontalList.qml+1−1 qml/Dash/CardTool.qml+7−10 qml/Dash/CardVerticalJournal.qml+1−1 qml/Dash/Dash.qml+12−1 qml/Dash/DashApplication.qml+2−8 qml/Dash/DashNavigation.qml+2−3 qml/Dash/DashRenderer.qml+3−2 qml/Dash/GenericScopeView.qml+86−37 qml/Dash/PageHeader.qml+23−17 qml/Dash/PreviewListView.qml+2−2 qml/Dash/Previews/PreviewPayments.qml+8 qml/Dash/ScopesOverview.qml+7−1 qml/Dash/graphics/checkers.png qml/Dash/graphics/pixel.png qml/Launcher/Launcher.qml+1−2 qml/Launcher/LauncherDelegate.qml+4−2 qml/Launcher/LauncherPanel.qml+1 qml/Notifications/Notification.qml+133−47 qml/Notifications/NotificationMenuItemFactory.qml+4 qml/Notifications/Notifications.qml+1−1 qml/Panel/Indicators/IndicatorsLight.qml+4−7 qml/Shell.qml+42−21 qml/Stages/ApplicationWindow.qml+5−2 qml/Stages/PhoneStage.qml+15−1 qml/Stages/SessionContainer.qml+7 qml/Stages/SpreadDelegate.qml+3 qml/Stages/SurfaceContainer.qml+5 qml/Stages/TabletStage.qml+13 qml/Stages/TransformedTabletSpreadDelegate.qml+2−1 run_on_device.sh+43−41 src/Dash/CMakeLists.txt+1 src/Dash/main.cpp+17−2 src/main.cpp+1 tests/autopilot/unity8/application_lifecycle/tests/test_application_lifecycle.py+4−2 tests/autopilot/unity8/process_helpers.py+12−17 tests/autopilot/unity8/shell/emulators/greeter.py+4−1 tests/autopilot/unity8/shell/tests/__init__.py+4−21 tests/autopilot/unity8/shell/tests/test_lock_screen.py+8−9 tests/autopilot/unity8/shell/tests/test_notifications.py+61−97 tests/mocks/HudClient/fake_libhud_client.cpp+8−1 tests/mocks/Powerd/Powerd.cpp+15−1 tests/mocks/Powerd/Powerd.h+8−1 tests/mocks/Powerd/Powerd.qmltypes+3−3 tests/mocks/QtMultimedia/audio.cpp+1−1 tests/mocks/Ubuntu/Payments/MockPayments.cpp+12−7 tests/mocks/Ubuntu/Payments/MockPayments.h+2 tests/mocks/Unity/Application/MirSurfaceItem.cpp+14 tests/mocks/Unity/Application/MirSurfaceItem.h+7 tests/mocks/Unity/Application/MirSurfaceItem.qml+12−2 tests/mocks/Unity/DashCommunicator/dashcommunicatorservice.cpp+2−2 tests/mocks/Unity/DashCommunicator/dashcommunicatorservice.h+2−2 tests/mocks/Unity/Launcher/CMakeLists.txt+1−1 tests/mocks/Unity/Launcher/MockLauncherItem.cpp+14 tests/mocks/Unity/Launcher/MockLauncherItem.h+18−17 tests/mocks/Unity/Launcher/MockLauncherModel.cpp+10 tests/mocks/Unity/fake_categories.cpp+95−136 tests/mocks/Unity/fake_categories.h+7−12 tests/mocks/Unity/fake_resultsmodel.cpp+9 tests/mocks/Unity/fake_resultsmodel.h+3 tests/mocks/Unity/fake_scope.cpp+27−5 tests/mocks/Unity/fake_scope.h+5−1 tests/mocks/Unity/fake_scopes.cpp+1 tests/plugins/Dash/cardcreator/1.res+2−2 tests/plugins/Dash/cardcreator/2.res+2−2 tests/plugins/Dash/cardcreator/3.res+3−3 tests/plugins/Dash/cardcreator/5.res+5−5 tests/plugins/Dash/cardcreator/6.res+3−3 tests/plugins/Dash/cardcreator/7.res+3−3 tests/plugins/Unity/Launcher/CMakeLists.txt+9−24 tests/plugins/Unity/Launcher/gsettings.cpp+40 tests/plugins/Unity/Launcher/gsettings.h+38 tests/plugins/Unity/Launcher/launcherbackendtest.cpp−239 tests/plugins/Unity/Launcher/launchermodeltest.cpp+81−1 tests/plugins/Utils/CMakeLists.txt−1 tests/qmltests/Dash/Previews/tst_PreviewPayments.qml+88−9 tests/qmltests/Dash/tst_Card.qml+3−3 tests/qmltests/Dash/tst_Dash.qml+9−2 tests/qmltests/Dash/tst_GenericScopeView.qml+129−1 tests/qmltests/Dash/tst_PreviewListView.qml+29−1 tests/qmltests/Launcher/tst_Launcher.qml+3−1 tests/qmltests/Notifications/tst_Notifications.qml+60−18 tests/qmltests/Stages/RecursingChildSessionControl.qml+1−1 tests/qmltests/Stages/tst_ApplicationWindow.qml+30−12 tests/qmltests/Stages/tst_PhoneStage.qml+58 tests/qmltests/Stages/tst_SessionContainer.qml+63 tests/qmltests/tst_Shell.qml+117−35 tools/registry-tracker.cpp+6 tools/scopetool.cpp+3 tools/unlock-device+4−5
cmake/modules/QmlTest.cmake+15−3
@@ -27,11 +27,14 @@ endif()
2727
2828set(qmlscene_exe ${CMAKE_BINARY_DIR}/tests/uqmlscene/uqmlscene)
2929
30+set(test_env UNITY_TESTING=1)
31+
3032macro(add_manual_qml_test SUBPATH COMPONENT_NAME)
3133 set(options NO_ADD_TEST NO_TARGETS)
3234 set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT)
3335
3436 cmake_parse_arguments(qmltest "${options}" "" "${multi_value_keywords}" ${ARGN})
37+ cmake_parse_arguments(qmltest_default "${options}" "" "${multi_value_keywords}" ${qmltest_DEFAULT_PROPERTIES})
3538
3639 set(qmlscene_TARGET try${COMPONENT_NAME})
3740 set(qmltest_FILE ${SUBPATH}/tst_${COMPONENT_NAME})
@@ -49,8 +52,12 @@ macro(add_manual_qml_test SUBPATH COMPONENT_NAME)
4952 endforeach(IMPORT_PATH)
5053 endif()
5154
55+ if("${qmltest_ENVIRONMENT}" STREQUAL "")
56+ set(qmltest_ENVIRONMENT "${qmltest_default_ENVIRONMENT}")
57+ endif()
58+
5259 set(qmlscene_command
53− env ${qmltest_ENVIRONMENT}
60+ env ${test_env} ${qmltest_ENVIRONMENT}
5461 ${qmlscene_exe} -qmljsdebugger=port:3768 ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
5562 ${qmlscene_imports}
5663 )
@@ -71,6 +78,7 @@ macro(add_qml_test_internal SUBPATH COMPONENT_NAME ITERATIONS)
7178 set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT)
7279
7380 cmake_parse_arguments(qmltest "${options}" "" "${multi_value_keywords}" ${ARGN})
81+ cmake_parse_arguments(qmltest_default "${options}" "" "${multi_value_keywords}" ${qmltest_DEFAULT_PROPERTIES})
7482
7583 set(qmltest_TARGET test${COMPONENT_NAME})
7684 set(qmltest_xvfb_TARGET xvfbtest${COMPONENT_NAME})
@@ -102,8 +110,12 @@ macro(add_qml_test_internal SUBPATH COMPONENT_NAME ITERATIONS)
102110 set(ITERATIONS_STRING "")
103111 endif()
104112
113+ if("${qmltest_ENVIRONMENT}" STREQUAL "")
114+ set(qmltest_ENVIRONMENT "${qmltest_default_ENVIRONMENT}")
115+ endif()
116+
105117 set(qmltest_command
106− env ${qmltest_ENVIRONMENT} UNITY_TESTING=1
118+ env ${test_env} ${qmltest_ENVIRONMENT}
107119 ${qmltestrunner_exe} -input ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
108120 ${qmltestrunner_imports}
109121 ${ITERATIONS_STRING}
@@ -117,7 +129,7 @@ macro(add_qml_test_internal SUBPATH COMPONENT_NAME ITERATIONS)
117129 set(LD_PRELOAD_PATH "LD_PRELOAD=/usr/lib/${ARCH_TRIPLET}/mesa/libGL.so.1")
118130 endif()
119131 set(qmltest_xvfb_command
120− env ${qmltest_ENVIRONMENT} ${LD_PRELOAD_PATH} UNITY_TESTING=1
132+ env ${test_env} ${qmltest_ENVIRONMENT} ${LD_PRELOAD_PATH}
121133 xvfb-run --server-args "-screen 0 1024x768x24" --auto-servernum
122134 ${qmltestrunner_exe} -input ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
123135 ${qmltestrunner_imports}
data/unity8-dash.desktop.in+3−3
@@ -1,9 +1,9 @@
11[Desktop Entry]
22Type=Application
3−Name=Unity 8 Dash
4−Comment=The converged Unity shell dash
3+Name=Scopes
4+Comment=An interface for using the Scopes system
55Exec=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@/unity8-dash
66Terminal=false
7−Icon=unity8
7+Icon=
88NoDisplay=true
99X-Ubuntu-Touch=true
data/unity8-filewatcher.confnew file+8
@@ -0,0 +1,8 @@
1+description "File system watcher for unity8"
2+author "Michael Zanetti <michael.zanetti@canonical.com>"
3+
4+# Workaround for bug 1360208. ~ and * in one expression doesn't work currently
5+start on (file FILE=/home/phablet/.local/share/applications/*.desktop) or (file FILE=/usr/share/applications/*.desktop)
6+
7+exec dbus-send --type=method_call --dest=com.canonical.Unity.Launcher /com/canonical/Unity/Launcher com.canonical.Unity.Launcher.Refresh
8+
data/unity8.desktop.in+1−1
@@ -4,6 +4,6 @@ Name=Unity 8
44Comment=The converged Unity shell
55Exec=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@/unity8
66Terminal=false
7−Icon=unity8
7+Icon=
88NoDisplay=true
99X-Ubuntu-Touch=true
debian/changelog+122
@@ -1,3 +1,125 @@
1+unity8 (8.00+14.10.20140918.3-0ubuntu1) utopic; urgency=low
2+
3+ [ Michał Sawicz ]
4+ * Add -windowgeometry option to the Dash and drop any user-visible
5+ mentions of Dash
6+ * Dash: Fix issue when expanding a category and collapsing another one
7+ at the same time.
8+
9+ [ Albert Astals ]
10+ * Dash: Fix issue when expanding a category and collapsing another one
11+ at the same time.
12+ * Make the categoryView invisible when we are in the preview mode (LP:
13+ #1341205)
14+ * Pixel pushing in the dash header (LP: #1365929)
15+
16+ [ Ying-Chun Liu ]
17+ * Re-add restart button for power menu. (LP: 1358197) (LP: #1358197)
18+
19+ [ Marcus Tomlinson ]
20+ * Don't show a preview if a null response is returned from
21+ scope.preview(result)
22+
23+ [ Mirco Müller ]
24+ * Don't limit the number of text-lines for body-text. (LP: #1369438)
25+
26+ [ Michael Zanetti ]
27+ * Don't hide launcher when nothing happens on long left edge swipes
28+ (LP: #1357333)
29+ * Rework LauncherBackend
30+
31+ [ Michael Terry ]
32+ * When running qmluitests, make sure that they use LANGUAGE=C, fixing
33+ a test failure when running locally in the US.
34+
35+ [ Daniel d'Andrada ]
36+ * Some ApplicationWindow test improvements
37+
38+ [ Rodney Dawes ]
39+ * Check purchase state to determine if purchase was cancelled and hide
40+ progress. (LP: #1362622)
41+
42+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 18 Sep 2014 21:26:42 +0000
43+
44+unity8 (8.00+14.10.20140918-0ubuntu1) utopic; urgency=low
45+
46+ [ Michael Zanetti ]
47+ * Focus first app if there are already some running when we're
48+ starting up (LP: #1339883)
49+
50+ [ Michał Sawicz ]
51+ * Don't play empty urls in Notification.qml
52+
53+ [ Daniel d'Andrada ]
54+ * Improve tst_Shell
55+ * Build without any warnings
56+ * Make tst_Card work from outside the source tree (LP:1359201) (LP:
57+ #1359201)
58+
59+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 18 Sep 2014 09:44:06 +0000
60+
61+unity8 (8.00+14.10.20140910.1-0ubuntu1) utopic; urgency=low
62+
63+ [ Pete Woods ]
64+ * Disable OEM and Click scopes when system scopes are disabled
65+
66+ [ CI bot ]
67+ * Resync trunk
68+
69+ [ Pawel Stolowski ]
70+ * Set UNITY_SCOPES_NO_FAVORITES environment variable to make scopes
71+ plugin ignore favorite scopes and fix basic functionality of unity-
72+ scope-tool.
73+
74+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Wed, 10 Sep 2014 08:53:57 +0000
75+
76+unity8 (8.00+14.10.20140908.1-0ubuntu1) utopic; urgency=low
77+
78+ [ Michał Sawicz ]
79+ * Use a single white pixel instead of the heavier checkers image.
80+ * Add support to unlock-device for the new adbd coming down the
81+ pipeline. Also fix autopilot tests and run scripts for that.
82+ * Make LVWPH non interactive while on header animation
83+ * Improve references to scope/scopeStyle in PreviewListView and
84+ PageHeader, add tests.
85+
86+ [ Nick Dedekind ]
87+ * Support for nested prompt session. (LP: #1358388)
88+
89+ [ Albert Astals ]
90+ * Remove unused hasAttributes variable
91+ * Disable dash overview if in temp scope preview
92+ * Block mouse events under scope overview bottombar (LP: #1362206)
93+ * Fix regression in focus handling due to SDK change
94+ * Fix warning 'Background.qml:81:21: Unable to assign bool to QUrl'
95+ * Fix launcher internationalization
96+ * Make swipe and home button press in the launcher dismiss the
97+ overview
98+ * GSV: Use proper variable since altnav renames
99+ * Fix some "Cannot read property 'luminance' of null" warnings
100+ * Make LVWPH non interactive while on header animation
101+
102+ [ Mirco Müller ]
103+ * Implemented the needed visual updates on notifications requested by
104+ Design for RTM. (LP: #1348092)
105+
106+ [ Michael Terry ]
107+ * Don't show greeter when screen turns off during a call, even if
108+ proximity sensor isn't active. (LP: #1347001)
109+ * Add support to unlock-device for the new adbd coming down the
110+ pipeline. Also fix autopilot tests and run scripts for that.
111+
112+ [ Michael Zanetti ]
113+ * open the application when clicking on the title entry in the
114+ quicklist (LP: #1336380)
115+ * Don't animate x while dragging apps from the left edge (LP:
116+ #1360105)
117+
118+ [ Diego Sarmentero ]
119+ * Reset button state on cancel (LP: #1362622)
120+
121+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Mon, 08 Sep 2014 14:16:42 +0000
122+
1123unity8 (8.00+14.10.20140903.1-0ubuntu1) utopic; urgency=low
2124
3125 [ Nick Dedekind ]
debian/control+4−4
@@ -24,7 +24,7 @@ Build-Depends: cmake,
2424 libpulse-dev,
2525 libqmenumodel-dev (>= 0.2.8),
2626 libqt5xmlpatterns5-dev,
27− libunity-api-dev (>= 7.89),
27+ libunity-api-dev (>= 7.90),
2828 libusermetricsoutput1-dev,
2929 libxcb1-dev,
3030 pkg-config,
@@ -87,7 +87,7 @@ Depends: gsettings-desktop-schemas,
8787 qtdeclarative5-gsettings1.0,
8888 qtdeclarative5-qtmir-plugin (>= 0.4.3),
8989 qtdeclarative5-ubuntu-telephony0.1,
90− unity-launcher-impl-3,
90+ unity-launcher-impl-4,
9191 unity8-common (= ${source:Version}),
9292 unity8-private (= ${binary:Version}),
9393 unity8-private | unity-launcher-impl,
@@ -171,12 +171,12 @@ Pre-Depends: ${misc:Pre-Depends},
171171Depends: accountsservice-ubuntu-schemas (>= 0.0.3),
172172 gsettings-ubuntu-schemas (>= 0.0.2+14.10.20140815),
173173 libhardware2,
174− libunity-core-6.0-9,
174+ unity-schemas (>= 7.3.1+14.10.20140915),
175175 pay-service,
176176 ${misc:Depends},
177177 ${shlibs:Depends},
178178Provides: unity-launcher-impl,
179− unity-launcher-impl-3,
179+ unity-launcher-impl-4,
180180Description: Unity 8 private libs
181181 The Unity 8 shell is the primary user interface for Ubuntu devices.
182182 .
debian/unity8.install+1
@@ -1,5 +1,6 @@
11data/unity8.conf usr/share/upstart/sessions/
22data/unity8-dash.conf usr/share/upstart/sessions/
3+data/unity8-filewatcher.conf usr/share/upstart/sessions/
34usr/bin/unity8
45usr/bin/unity8-dash
56usr/share/applications/unity8.desktop
plugins/Dash/CardCreator.js+4−4
@@ -78,8 +78,8 @@ var kArtShapeHolderCode = 'Item { \n\
7878 width = root.fixedArtShapeSize.width; \n\
7979 height = root.fixedArtShapeSize.height; \n\
8080 } else { \n\
81− width = Qt.binding(function() { return !visible ? 0 : image.width }); \n\
82− height = Qt.binding(function() { return !visible ? 0 : image.height }); \n\
81+ width = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.width }); \n\
82+ height = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.height }); \n\
8383 } \n\
8484 } \n\
8585 image: Image { \n\
@@ -440,14 +440,14 @@ function cardString(template, components) {
440440 mascotCode = kMascotImageCode.arg(mascotAnchors).arg(mascotImageVisible);
441441 }
442442
443− var summaryColorWithBackground = 'backgroundLoader.active && backgroundLoader.item && root.scopeStyle ? root.scopeStyle.getTextColor(backgroundLoader.item.luminance) : (backgroundLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white")';
443+ var summaryColorWithBackground = 'backgroundLoader.active && backgroundLoader.item && root.scopeStyle ? root.scopeStyle.getTextColor(backgroundLoader.item.luminance) : (backgroundLoader.item && backgroundLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white")';
444444
445445 var hasTitleContainer = hasTitle && (hasEmblem || (hasMascot && (hasSubtitle || hasAttributes)));
446446 var titleSubtitleCode = '';
447447 if (hasTitle) {
448448 var titleColor;
449449 if (headerAsOverlay) {
450− titleColor = 'root.scopeStyle ? root.scopeStyle.getTextColor(overlayLoader.item.luminance) : (overlayLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white")';
450+ titleColor = 'root.scopeStyle && overlayLoader.item ? root.scopeStyle.getTextColor(overlayLoader.item.luminance) : (overlayLoader.item && overlayLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white")';
451451 } else if (hasSummary) {
452452 titleColor = 'summary.color';
453453 } else if (hasBackground) {
plugins/Dash/listviewwithpageheader.cpp+18−5
@@ -172,7 +172,7 @@ ListViewWithPageHeader::ListViewWithPageHeader()
172172 connect(this, SIGNAL(contentWidthChanged()), this, SLOT(onContentWidthChanged()));
173173 connect(this, SIGNAL(contentHeightChanged()), this, SLOT(onContentHeightChanged()));
174174 connect(this, SIGNAL(heightChanged()), this, SLOT(onHeightChanged()));
175− connect(m_contentYAnimation, SIGNAL(stopped()), this, SLOT(onShowHeaderAnimationFinished()));
175+ connect(m_contentYAnimation, SIGNAL(runningChanged(bool)), this, SLOT(contentYAnimationRunningChanged(bool)));
176176
177177 setFlickableDirection(VerticalFlick);
178178}
@@ -409,6 +409,16 @@ void ListViewWithPageHeader::showHeader()
409409 }
410410}
411411
412+int ListViewWithPageHeader::firstCreatedIndex() const
413+{
414+ return m_firstVisibleIndex;
415+}
416+
417+int ListViewWithPageHeader::createdItemCount() const
418+{
419+ return m_visibleItems.count();
420+}
421+
412422QQuickItem *ListViewWithPageHeader::item(int modelIndex) const
413423{
414424 ListItem *item = itemAtIndex(modelIndex);
@@ -520,7 +530,7 @@ void ListViewWithPageHeader::adjustHeader(qreal diff)
520530 // (but the header was not shown by it's own position)
521531 // or the header is partially shown and we are not doing a maximizeVisibleArea either
522532 const bool scrolledUp = m_previousContentY > contentY();
523− const bool notRebounding = contentY() + height() < contentHeight();
533+ const bool notRebounding = qRound(contentY() + height()) < qRound(contentHeight());
524534 const bool notShownByItsOwn = contentY() + diff >= m_headerItem->y() + m_headerItem->height();
525535 const bool maximizeVisibleAreaRunning = m_contentYAnimation->isRunning() && contentYAnimationType == ContentYAnimationMaximizeVisibleArea;
526536
@@ -1056,10 +1066,13 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
10561066 m_contentHeightDirty = true;
10571067}
10581068
1059−void ListViewWithPageHeader::onShowHeaderAnimationFinished()
1069+void ListViewWithPageHeader::contentYAnimationRunningChanged(bool running)
10601070{
1061− m_contentHeightDirty = true;
1062− polish();
1071+ setInteractive(!running);
1072+ if (!running) {
1073+ m_contentHeightDirty = true;
1074+ polish();
1075+ }
10631076}
10641077
10651078void ListViewWithPageHeader::itemGeometryChanged(QQuickItem * /*item*/, const QRectF &newGeometry, const QRectF &oldGeometry)
plugins/Dash/listviewwithpageheader.h+3−1
@@ -86,6 +86,8 @@ public:
8686
8787 Q_INVOKABLE void positionAtBeginning();
8888 Q_INVOKABLE void showHeader();
89+ Q_INVOKABLE int firstCreatedIndex() const;
90+ Q_INVOKABLE int createdItemCount() const;
8991 Q_INVOKABLE QQuickItem *item(int modelIndex) const;
9092
9193 // The index has to be created for this to try to do something
@@ -118,7 +120,7 @@ private Q_SLOTS:
118120 void onContentWidthChanged();
119121 void onHeightChanged();
120122 void onModelUpdated(const QQmlChangeSet &changeSet, bool reset);
121− void onShowHeaderAnimationFinished();
123+ void contentYAnimationRunningChanged(bool running);
122124
123125private:
124126 class ListItem
plugins/Lights/Lights.cpp+1−2
@@ -20,8 +20,7 @@
2020#include <QtCore/QDebug>
2121
2222extern "C" {
23−#include <hardware/hardware.h>
24−#include <hardware/lights.h>
23+#include "android-hardware.h"
2524#include <string.h>
2625}
2726
plugins/Lights/android-hardware.hnew file+23
@@ -0,0 +1,23 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ */
17+
18+// The purpose of this header wrapper is just to avoid having warnings being reported on
19+// code from external header files, as we can't do anything about them.
20+#pragma GCC system_header
21+
22+#include <hardware/hardware.h>
23+#include <hardware/lights.h>
plugins/Powerd/Powerd.cpp+16−2
@@ -39,7 +39,8 @@ void dimTimeoutChanged(GSettings *settings, const gchar *key, QDBusInterface *un
3939
4040Powerd::Powerd(QObject* parent)
4141 : QObject(parent),
42− unityScreen(nullptr)
42+ unityScreen(nullptr),
43+ cachedStatus(Status::On)
4344{
4445 unityScreen = new QDBusInterface("com.canonical.Unity.Screen",
4546 "/com/canonical/Unity/Screen",
@@ -51,7 +52,7 @@ Powerd::Powerd(QObject* parent)
5152 "com.canonical.Unity.Screen",
5253 "DisplayPowerStateChange",
5354 this,
54− SIGNAL(displayPowerStateChange(int, int)));
55+ SLOT(handleDisplayPowerStateChange(int, int)));
5556
5657 systemSettings = g_settings_new("com.ubuntu.touch.system");
5758 g_signal_connect(systemSettings, "changed::auto-brightness", G_CALLBACK(autoBrightnessChanged), unityScreen);
@@ -67,3 +68,16 @@ Powerd::~Powerd()
6768 g_signal_handlers_disconnect_by_data(systemSettings, unityScreen);
6869 g_object_unref(systemSettings);
6970}
71+
72+Powerd::Status Powerd::status() const
73+{
74+ return cachedStatus;
75+}
76+
77+void Powerd::handleDisplayPowerStateChange(int status, int reason)
78+{
79+ if (cachedStatus != (Status)status) {
80+ cachedStatus = (Status)status;
81+ Q_EMIT statusChanged((DisplayStateChangeReason)reason);
82+ }
83+}
plugins/Powerd/Powerd.h+8−1
@@ -29,6 +29,7 @@ class Powerd: public QObject
2929 Q_OBJECT
3030 Q_ENUMS(Status)
3131 Q_ENUMS(DisplayStateChangeReason)
32+ Q_PROPERTY(Status status READ status NOTIFY statusChanged)
3233
3334public:
3435 enum DisplayStateChangeReason {
@@ -46,12 +47,18 @@ public:
4647 explicit Powerd(QObject *parent = 0);
4748 ~Powerd();
4849
50+ Status status() const;
51+
4952Q_SIGNALS:
50− void displayPowerStateChange(int status, int reason);
53+ void statusChanged(DisplayStateChangeReason reason);
54+
55+private Q_SLOTS:
56+ void handleDisplayPowerStateChange(int status, int reason);
5157
5258private:
5359 QDBusInterface *unityScreen;
5460 GSettings *systemSettings;
61+ Status cachedStatus;
5562};
5663
5764#endif
plugins/Powerd/Powerd.qmltypes+3−3
@@ -30,10 +30,10 @@ Module {
3030 "On": 1
3131 }
3232 }
33+ Property { name: "status"; type: "Status"; isReadonly: true }
3334 Signal {
34− name: "displayPowerStateChange"
35− Parameter { name: "status"; type: "int" }
36− Parameter { name: "reason"; type: "int" }
35+ name: "statusChanged"
36+ Parameter { name: "reason"; type: "DisplayStateChangeReason" }
3737 }
3838 }
3939}
plugins/Ubuntu/Payments/Payments.cpp+21−1
@@ -41,13 +41,23 @@ static void observer(PayPackage* /* package */, const char* itemid, PayPackageIt
4141 case PAY_PACKAGE_ITEM_STATUS_PURCHASED:
4242 Q_EMIT self->purchaseCompleted();
4343 break;
44+ case PAY_PACKAGE_ITEM_STATUS_PURCHASING:
45+ self->setPurchasing(true);
46+ break;
47+ case PAY_PACKAGE_ITEM_STATUS_NOT_PURCHASED:
48+ if (self->purchasing()) {
49+ self->setPurchasing(false);
50+ Q_EMIT self->purchaseCancelled();
51+ }
52+ break;
4453 default:
4554 break;
4655 }
4756}
4857
4958Payments::Payments(QObject *parent)
50− : QObject(parent)
59+ : QObject(parent),
60+ m_purchasing(false)
5161{
5262 m_package = pay_package_new("click-scope");
5363 pay_package_item_observer_install(m_package, observer, this);
@@ -80,6 +90,11 @@ QString Payments::formattedPrice() const
8090 return locale.toCurrencyString(m_price, m_currency);
8191}
8292
93+bool Payments::purchasing() const
94+{
95+ return m_purchasing;
96+}
97+
8398void Payments::setCurrency(const QString &currency)
8499{
85100 if(m_currency != currency) {
@@ -112,6 +127,11 @@ void Payments::setStoreItemId(const QString &store_item_id)
112127 pay_package_item_start_verification(m_package, m_store_item_id.toLocal8Bit().data());
113128}
114129
130+void Payments::setPurchasing(bool is_purchasing)
131+{
132+ m_purchasing = is_purchasing;
133+}
134+
115135void Payments::start()
116136{
117137 pay_package_item_start_purchase(m_package, m_store_item_id.toLocal8Bit().data());
plugins/Ubuntu/Payments/Payments.h+4
@@ -39,10 +39,12 @@ public:
3939 double price() const;
4040 QString storeItemId() const;
4141 QString formattedPrice() const;
42+ bool purchasing() const;
4243
4344 void setCurrency(const QString& currency);
4445 void setPrice(const double price);
4546 void setStoreItemId(const QString& store_item_id);
47+ void setPurchasing(bool is_purchasing);
4648 Q_INVOKABLE void start();
4749
4850Q_SIGNALS:
@@ -53,11 +55,13 @@ Q_SIGNALS:
5355
5456 void purchaseError(const QString &error);
5557 void purchaseCompleted();
58+ void purchaseCancelled();
5659
5760private:
5861 QString m_currency;
5962 double m_price;
6063 QString m_store_item_id;
64+ bool m_purchasing;
6165
6266 PayPackage *m_package;
6367};
plugins/Unity/DashCommunicator/dashcommunicator.cpp+2−2
@@ -27,12 +27,12 @@ DashCommunicator::DashCommunicator(QObject *parent)
2727{
2828}
2929
30−void DashCommunicator::setCurrentScope(const QString &scopeId, bool animate, bool reset)
30+void DashCommunicator::setCurrentScope(const QString &scopeId, bool animate, bool isSwipe)
3131{
3232 if (dbusInterface() == nullptr) {
3333 qDebug() << "DashCommunicator - setCurrentScope failed as Dash DBus interface not available";
3434 return;
3535 } else {
36− dbusInterface()->asyncCall("SetCurrentScope", scopeId, animate, reset);
36+ dbusInterface()->asyncCall("SetCurrentScope", scopeId, animate, isSwipe);
3737 }
3838}
plugins/Unity/DashCommunicator/dashcommunicator.h+1−1
@@ -32,7 +32,7 @@ public:
3232 ~DashCommunicator() = default;
3333
3434public Q_SLOTS:
35− void setCurrentScope(const QString &scopeId, bool animate, bool reset);
35+ void setCurrentScope(const QString &scopeId, bool animate, bool isSwipe);
3636};
3737
3838#endif
plugins/Unity/DashCommunicator/dashcommunicatorservice.h+1−1
@@ -29,7 +29,7 @@ public:
2929 ~DashCommunicatorService();
3030
3131Q_SIGNALS:
32− void setCurrentScopeRequested(const QString &scopeId, bool animate, bool reset);
32+ void setCurrentScopeRequested(const QString &scopeId, bool animate, bool isSwipe);
3333
3434private:
3535 DBusDashCommunicatorService *m_dbusService;
plugins/Unity/DashCommunicator/dbusdashcommunicatorservice.cpp+2−2
@@ -33,7 +33,7 @@ DBusDashCommunicatorService::~DBusDashCommunicatorService()
3333{
3434}
3535
36−void DBusDashCommunicatorService::SetCurrentScope(const QString &scopeId, bool animate, bool reset)
36+void DBusDashCommunicatorService::SetCurrentScope(const QString &scopeId, bool animate, bool isSwipe)
3737{
38− Q_EMIT setCurrentScopeRequested(scopeId, animate, reset);
38+ Q_EMIT setCurrentScopeRequested(scopeId, animate, isSwipe);
3939}
plugins/Unity/DashCommunicator/dbusdashcommunicatorservice.h+2−2
@@ -29,10 +29,10 @@ public:
2929 ~DBusDashCommunicatorService();
3030
3131Q_SIGNALS:
32− void setCurrentScopeRequested(const QString &scopeId, bool animate, bool reset);
32+ void setCurrentScopeRequested(const QString &scopeId, bool animate, bool isSwipe);
3333
3434public Q_SLOTS:
35− Q_SCRIPTABLE void SetCurrentScope(const QString &scopeId, bool animate, bool reset);
35+ Q_SCRIPTABLE void SetCurrentScope(const QString &scopeId, bool animate, bool isSwipe);
3636
3737};
3838
plugins/Unity/Launcher/CMakeLists.txt+6−4
@@ -1,5 +1,5 @@
11include(FindPkgConfig)
2−pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=3)
2+pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=4)
33pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=3)
44pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
55
@@ -16,8 +16,10 @@ set(QMLLAUNCHERPLUGIN_SRC
1616 launchermodel.cpp
1717 launcheritem.cpp
1818 quicklistmodel.cpp
19− common/quicklistentry.cpp
20− backend/launcherbackend.cpp
19+ quicklistentry.cpp
20+ dbusinterface.cpp
21+ gsettings.cpp
22+ desktopfilehandler.cpp
2123 ${CMAKE_SOURCE_DIR}/plugins/AccountsService/AccountsServiceDBusAdaptor.cpp
2224 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherItemInterface.h
2325 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherModelInterface.h
@@ -30,6 +32,6 @@ add_library(UnityLauncher-qml MODULE
3032
3133target_link_libraries(UnityLauncher-qml ${GSETTINGS_QT_LDFLAGS})
3234
33−qt5_use_modules(UnityLauncher-qml DBus Qml)
35+qt5_use_modules(UnityLauncher-qml DBus Qml Gui)
3436
3537add_unity8_plugin(Unity.Launcher 0.1 Unity/Launcher TARGETS UnityLauncher-qml)
plugins/Unity/Launcher/backend/launcherbackend.cppdeleted−584
@@ -1,584 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Michael Terry <michael.terry@canonical.com>
6− * Michael Zanetti <michael.zanetti@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−#include "AccountsServiceDBusAdaptor.h"
22−#include "launcherbackend.h"
23−
24−#include <QDir>
25−#include <QDBusArgument>
26−#include <QFileInfo>
27−#include <QGSettings>
28−#include <QDebug>
29−#include <QStandardPaths>
30−
31−class LauncherBackendItem
32−{
33−public:
34− QString displayName;
35− QString icon;
36− int count;
37− bool countVisible;
38−};
39−
40−LauncherBackend::LauncherBackend(QObject *parent):
41− QDBusVirtualObject(parent),
42− m_accounts(nullptr)
43−{
44−#ifndef LAUNCHER_TESTING
45− m_accounts = new AccountsServiceDBusAdaptor(this);
46−#endif
47− m_user = qgetenv("USER");
48− syncFromAccounts();
49−
50− /* Set up ourselves on DBus */
51− QDBusConnection con = QDBusConnection::sessionBus();
52− if (!con.registerService("com.canonical.Unity.Launcher")) {
53− qDebug() << "Unable to register launcher name";
54− }
55− if (!con.registerVirtualObject("/com/canonical/Unity/Launcher", this, QDBusConnection::VirtualObjectRegisterOption::SubPath)) {
56− qDebug() << "Unable to register launcher object";
57− }
58−}
59−
60−LauncherBackend::~LauncherBackend()
61−{
62− /* Remove oursevles from DBus */
63− QDBusConnection con = QDBusConnection::sessionBus();
64− con.unregisterService("com.canonical.Unity.Launcher");
65− con.unregisterObject("/com/canonical/Unity/Launcher");
66−
67− /* Clear data */
68− m_storedApps.clear();
69−
70− Q_FOREACH(LauncherBackendItem *item, m_itemCache) {
71− delete item;
72− }
73− m_itemCache.clear();
74−}
75−
76−QStringList LauncherBackend::storedApplications() const
77−{
78− return m_storedApps;
79−}
80−
81−void LauncherBackend::setStoredApplications(const QStringList &appIds)
82−{
83− if (appIds.count() < m_storedApps.count()) {
84− Q_FOREACH(const QString &appId, m_storedApps) {
85− if (!appIds.contains(appId)) {
86− delete m_itemCache.take(appId);
87− }
88− }
89− }
90− m_storedApps = appIds;
91− Q_FOREACH(const QString &appId, appIds) {
92− if (!m_itemCache.contains(appId)) {
93− QString df = findDesktopFile(appId);
94− if (!df.isEmpty()) {
95− LauncherBackendItem *item = parseDesktopFile(df);
96− m_itemCache.insert(appId, item);
97− } else {
98− // Cannot find any data for that app... ignoring it.
99− qWarning() << "cannot find desktop file for" << appId << ". discarding app.";
100− m_storedApps.removeAll(appId);
101− }
102− }
103− }
104− syncToAccounts();
105−}
106−
107−QString LauncherBackend::desktopFile(const QString &appId) const
108−{
109− return findDesktopFile(appId);
110−}
111−
112−QString LauncherBackend::displayName(const QString &appId) const
113−{
114− LauncherBackendItem *item = m_itemCache.value(appId, nullptr);
115− if (item) {
116− return item->displayName;
117− }
118−
119− QString df = findDesktopFile(appId);
120− if (!df.isEmpty()) {
121− LauncherBackendItem *item = parseDesktopFile(df);
122− m_itemCache.insert(appId, item);
123− return item->displayName;
124− }
125−
126− return QString();
127−}
128−
129−QString LauncherBackend::icon(const QString &appId) const
130−{
131− QString iconName;
132− LauncherBackendItem *item = getItem(appId);
133− if (item) {
134− iconName = item->icon;
135− }
136−
137− return iconName;
138−}
139−
140−QList<QuickListEntry> LauncherBackend::quickList(const QString &appId) const
141−{
142− // TODO: Get static (from .desktop file) and dynamic (from the app itself)
143− // entries and return them here. Frontend related entries (like "Pin to launcher")
144− // don't matter here. This is just the backend part.
145− // TODO: emit quickListChanged() when the dynamic part changes
146− Q_UNUSED(appId)
147− return QList<QuickListEntry>();
148−}
149−
150−int LauncherBackend::progress(const QString &appId) const
151−{
152− // TODO: Return value for progress emblem.
153− // TODO: emit progressChanged() when this value changes.
154− Q_UNUSED(appId)
155− return -1;
156−}
157−
158−int LauncherBackend::count(const QString &appId) const
159−{
160− int count = -1;
161− LauncherBackendItem *item = getItem(appId);
162−
163− if (item) {
164− if (item->countVisible) {
165− count = item->count;
166− }
167− }
168−
169− return count;
170−}
171−
172−void LauncherBackend::setCount(const QString &appId, int count) const
173−{
174− LauncherBackendItem *item = getItem(appId);
175−
176− bool emitchange = false;
177− if (item) {
178− emitchange = (item->count != count);
179− item->count = count;
180− }
181−
182− if (emitchange) {
183− /* TODO: This needs to use the accessor to handle the visibility
184− correctly, but when we have the two properties we can just use
185− the local value */
186− Q_EMIT countChanged(appId, this->count(appId));
187− QVariant vcount(item->count);
188− emitPropChangedDbus(appId, "count", vcount);
189− }
190−}
191−
192−bool LauncherBackend::countVisible(const QString &appId) const
193−{
194− bool visible = false;
195− LauncherBackendItem *item = getItem(appId);
196−
197− if (item) {
198− visible = item->countVisible;
199− }
200−
201− return visible;
202−}
203−
204−void LauncherBackend::setCountVisible(const QString &appId, bool visible) const
205−{
206− LauncherBackendItem *item = getItem(appId);
207−
208− bool emitchange = false;
209− if (item) {
210− emitchange = (item->countVisible != visible);
211− item->countVisible = visible;
212− } else {
213− qDebug() << "Unable to find:" << appId;
214− }
215−
216− if (emitchange) {
217− /* TODO: Because we're using visible in determining the
218− count we need to emit a count changed as well */
219− Q_EMIT countChanged(appId, this->count(appId));
220− Q_EMIT countVisibleChanged(appId, item->countVisible);
221− QVariant vCountVisible(item->countVisible);
222− emitPropChangedDbus(appId, "countVisible", vCountVisible);
223− }
224−}
225−
226−void LauncherBackend::setUser(const QString &username)
227−{
228− if (qgetenv("USER") == "lightdm" && m_user != username) {
229− m_user = username;
230− syncFromAccounts();
231− }
232−}
233−
234−void LauncherBackend::triggerQuickListAction(const QString &appId, const QString &quickListId)
235−{
236− // TODO: execute the given quicklist action
237− Q_UNUSED(appId)
238− Q_UNUSED(quickListId)
239−}
240−
241−void LauncherBackend::syncFromAccounts()
242−{
243− QList<QVariantMap> apps;
244− bool defaults = true;
245−
246− m_storedApps.clear();
247−
248− if (m_accounts && !m_user.isEmpty()) {
249− QVariant variant = m_accounts->getUserProperty(m_user, "com.canonical.unity.AccountsService", "launcher-items");
250− if (variant.isValid() && variant.canConvert<QDBusArgument>()) {
251− apps = qdbus_cast<QList<QVariantMap>>(variant.value<QDBusArgument>());
252− defaults = isDefaultsItem(apps);
253− }
254− }
255−
256− if (m_accounts && defaults) { // Checking accounts as it'll be null when !useStorage
257− QGSettings gSettings("com.canonical.Unity.Launcher", "/com/canonical/unity/launcher/");
258− Q_FOREACH(const QString &entry, gSettings.get("favorites").toStringList()) {
259− if (entry.startsWith("application://")) {
260− QString appId = entry;
261− // Transform "application://foobar.desktop" to "application://foobar"
262− appId.remove("application://");
263− if (appId.endsWith(".desktop")) {
264− appId.chop(8);
265− }
266− QString df = findDesktopFile(appId);
267−
268− if (!df.isEmpty()) {
269− m_storedApps << appId;
270−
271− if (!m_itemCache.contains(appId)) {
272− m_itemCache.insert(appId, parseDesktopFile(df));
273− }
274− }
275− }
276− if (entry.startsWith("appid://")) {
277− QString appId = entry;
278− appId.remove("appid://");
279− // Strip hook name and current-user-version in case its there
280−
281− if (appId.split('/').count() != 3) {
282− qWarning() << "ignoring entry " + appId + ". Not a valid appId.";
283− continue;
284− }
285− appId = appId.split('/').first() + "_" + appId.split('/').at(1);
286− QString df = findDesktopFile(appId);
287−
288− if (!df.isEmpty()) {
289− m_storedApps << appId;
290−
291− if (!m_itemCache.contains(appId)) {
292− m_itemCache.insert(appId, parseDesktopFile(df));
293− }
294− }
295− }
296− }
297− } else {
298− for (const QVariant &app: apps) {
299− loadFromVariant(app.toMap());
300− }
301− }
302−}
303−
304−void LauncherBackend::syncToAccounts()
305−{
306− if (m_accounts && !m_user.isEmpty()) {
307− QList<QVariantMap> items;
308−
309− Q_FOREACH(const QString &appId, m_storedApps) {
310− items << itemToVariant(appId);
311− }
312−
313− m_accounts->setUserProperty(m_user, "com.canonical.unity.AccountsService", "launcher-items", QVariant::fromValue(items));
314− }
315−}
316−
317−QString LauncherBackend::findDesktopFile(const QString &appId) const
318−{
319− int dashPos = -1;
320− QString helper = appId;
321−
322− QStringList searchDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
323−#ifdef LAUNCHER_TESTING
324− searchDirs << "";
325−#endif
326−
327− do {
328− if (dashPos != -1) {
329− helper = helper.replace(dashPos, 1, '/');
330− }
331−
332− Q_FOREACH(const QString &searchDirName, searchDirs) {
333− QDir searchDir(searchDirName);
334− Q_FOREACH(const QString &desktopFile, searchDir.entryList(QStringList() << "*.desktop")) {
335− if (desktopFile.startsWith(helper)) {
336− QFileInfo fileInfo(searchDir, desktopFile);
337− return fileInfo.absoluteFilePath();
338− }
339− }
340− }
341−
342− dashPos = helper.indexOf("-");
343− } while (dashPos != -1);
344−
345− return QString();
346−}
347−
348−LauncherBackendItem* LauncherBackend::parseDesktopFile(const QString &desktopFile) const
349−{
350− QSettings settings(desktopFile, QSettings::IniFormat);
351−
352− LauncherBackendItem* item = new LauncherBackendItem();
353− item->displayName = settings.value("Desktop Entry/Name").toString();
354−
355− QString iconString = settings.value("Desktop Entry/Icon").toString();
356− QString pathString = settings.value("Desktop Entry/Path").toString();
357− if (QFileInfo(iconString).exists()) {
358− item->icon = QFileInfo(iconString).absoluteFilePath();
359− } else if (QFileInfo(pathString + '/' + iconString).exists()) {
360− item->icon = pathString + '/' + iconString;
361− } else {
362− item->icon = "image://theme/" + iconString;
363− }
364−
365− /* TODO: These should be looked up in a cache somewhere */
366− item->count = 0;
367− item->countVisible = false;
368−
369− return item;
370−}
371−
372−/* Gets an item, and tries to create a new one if we need it to */
373−LauncherBackendItem* LauncherBackend::getItem(const QString &appId) const
374−{
375− LauncherBackendItem *item = m_itemCache.value(appId, nullptr);
376− if (!item) {
377− QString df = findDesktopFile(appId);
378− if (!df.isEmpty()) {
379− item = parseDesktopFile(df);
380− if (item) {
381− m_itemCache[appId] = item;
382− } else {
383− qWarning() << "Unable to parse desktop file for" << appId << "path" << df;
384− }
385− } else {
386− qWarning() << "Unable to find desktop file for:" << appId;
387− }
388− }
389−
390− if (!item)
391− qWarning() << "Unable to find item for: " << appId;
392−
393− return item;
394−}
395−
396−void LauncherBackend::loadFromVariant(const QVariantMap &details)
397−{
398− if (!details.contains("id")) {
399− return;
400− }
401− QString appId = details.value("id").toString();
402−
403− LauncherBackendItem *item = m_itemCache.value(appId, nullptr);
404− if (item) {
405− delete item;
406− }
407−
408− item = new LauncherBackendItem();
409−
410− item->displayName = details.value("name").toString();
411− item->icon = details.value("icon").toString();
412− item->count = details.value("count").toInt();
413− item->countVisible = details.value("countVisible").toBool();
414−
415− m_itemCache.insert(appId, item);
416− m_storedApps.append(appId);
417−}
418−
419−QVariantMap LauncherBackend::itemToVariant(const QString &appId) const
420−{
421− LauncherBackendItem *item = m_itemCache.value(appId);
422− QVariantMap details;
423− details.insert("id", appId);
424− details.insert("name", item->displayName);
425− details.insert("icon", item->icon);
426− details.insert("count", item->count);
427− details.insert("countVisible", item->countVisible);
428− return details;
429−}
430−
431−bool LauncherBackend::isDefaultsItem(const QList<QVariantMap> &apps) const
432−{
433− // To differentiate between an empty list and a list that hasn't been set
434− // yet (and should thus be populated with the defaults), we use a special
435− // list of one item with the 'defaults' field set to true.
436− return (apps.size() == 1 && apps[0].value("defaults").toBool());
437−}
438−
439−bool LauncherBackend::handleMessage(const QDBusMessage& message, const QDBusConnection& connection)
440−{
441− /* Check to make sure we're getting properties on our interface */
442− if (message.type() != QDBusMessage::MessageType::MethodCallMessage) {
443− return false;
444− }
445− if (message.interface() != "org.freedesktop.DBus.Properties") {
446− return false;
447− }
448− if (message.arguments()[0].toString() != "com.canonical.Unity.Launcher.Item") {
449− return false;
450− }
451−
452− /* Break down the path to just the app id */
453− QString pathtemp = message.path();
454− if (!pathtemp.startsWith("/com/canonical/Unity/Launcher/")) {
455− return false;
456− }
457− pathtemp.remove("/com/canonical/Unity/Launcher/");
458− if (pathtemp.indexOf('/') >= 0) {
459− return false;
460− }
461−
462− /* Find ourselves an appid */
463− QString appid = decodeAppId(pathtemp);
464− QVariantList retval;
465−
466− if (message.member() == "Get") {
467− if (message.arguments()[1].toString() == "count") {
468− retval.append(QVariant::fromValue(QDBusVariant(this->count(appid))));
469− } else if (message.arguments()[1].toString() == "countVisible") {
470− retval.append(QVariant::fromValue(QDBusVariant(this->countVisible(appid))));
471− }
472− } else if (message.member() == "Set") {
473− if (message.arguments()[1].toString() == "count") {
474− this->setCount(appid, message.arguments()[2].value<QDBusVariant>().variant().toInt());
475− } else if (message.arguments()[1].toString() == "countVisible") {
476− this->setCountVisible(appid, message.arguments()[2].value<QDBusVariant>().variant().toBool());
477− }
478− } else if (message.member() == "GetAll") {
479− retval.append(this->itemToVariant(appid));
480− } else {
481− return false;
482− }
483−
484− QDBusMessage reply = message.createReply(retval);
485− return connection.send(reply);
486−}
487−
488−QString LauncherBackend::introspect(const QString &path) const
489−{
490− /* This case we should just list the nodes */
491− if (path == "/com/canonical/Unity/Launcher/" || path == "/com/canonical/Unity/Launcher") {
492− QString nodes;
493−
494− Q_FOREACH(const QString &appId, m_itemCache.keys()) {
495− nodes.append("<node name=\"");
496− nodes.append(encodeAppId(appId));
497− nodes.append("\"/>\n");
498− }
499−
500− return nodes;
501− }
502−
503− /* Should not happen, but let's handle it */
504− if (!path.startsWith("/com/canonical/Unity/Launcher")) {
505− return "";
506− }
507−
508− /* Now we should be looking at a node */
509− QString nodeiface =
510− "<interface name=\"com.canonical.Unity.Launcher.Item\">"
511− "<property name=\"count\" type=\"i\" access=\"readwrite\" />"
512− "<property name=\"countVisible\" type=\"b\" access=\"readwrite\" />"
513− "</interface>";
514− return nodeiface;
515−}
516−
517−QString LauncherBackend::decodeAppId(const QString& path)
518−{
519− QByteArray bytes = path.toUtf8();
520− QByteArray decoded;
521−
522− for (int i = 0; i < bytes.size(); ++i) {
523− char chr = bytes.at(i);
524−
525− if (chr == '_') {
526− QString number;
527− number.append(bytes.at(i+1));
528− number.append(bytes.at(i+2));
529−
530− bool okay;
531− char newchar = number.toUInt(&okay, 16);
532− if (okay)
533− decoded.append(newchar);
534−
535− i += 2;
536− } else {
537− decoded.append(chr);
538− }
539− }
540−
541− return QString::fromUtf8(decoded);
542−}
543−
544−QString LauncherBackend::encodeAppId(const QString& appId)
545−{
546− QByteArray bytes = appId.toUtf8();
547− QString encoded;
548−
549− for (int i = 0; i < bytes.size(); ++i) {
550− uchar chr = bytes.at(i);
551−
552− if ((chr >= 'a' && chr <= 'z') ||
553− (chr >= 'A' && chr <= 'Z') ||
554− (chr >= '0' && chr <= '9'&& i != 0)) {
555− encoded.append(chr);
556− } else {
557− QString hexval = QString("_%1").arg(chr, 2, 16, QChar('0'));
558− encoded.append(hexval.toUpper());
559− }
560− }
561−
562− return encoded;
563−}
564−
565−void LauncherBackend::emitPropChangedDbus(const QString& appId, const QString& property, QVariant &value) const
566−{
567− QString path("/com/canonical/Unity/Launcher/");
568− path.append(encodeAppId(appId));
569−
570− QDBusMessage message = QDBusMessage::createSignal(path, "org.freedesktop.DBus.Properties", "PropertiesChanged");
571−
572− QList<QVariant> arguments;
573− QVariantHash changedprops;
574− changedprops[property] = QVariant::fromValue(QDBusVariant(value));
575− QVariantList deletedprops;
576−
577− arguments.append(changedprops);
578− arguments.append(deletedprops);
579−
580− message.setArguments(arguments);
581−
582− QDBusConnection con = QDBusConnection::sessionBus();
583− con.send(message);
584−}
plugins/Unity/Launcher/backend/launcherbackend.hdeleted−196
@@ -1,196 +0,0 @@
1−/* Copyright (C) 2013 Canonical, Ltd.
2− *
3− * Authors:
4− * Michael Zanetti <michael.zanetti@canonical.com>
5− *
6− * This program is free software; you can redistribute it and/or modify
7− * it under the terms of the GNU General Public License as published by
8− * the Free Software Foundation; version 3.
9− *
10− * This program is distributed in the hope that it will be useful,
11− * but WITHOUT ANY WARRANTY; without even the implied warranty of
12− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13− * GNU General Public License for more details.
14− *
15− * You should have received a copy of the GNU General Public License
16− * along with this program. If not, see <http://www.gnu.org/licenses/>.
17− */
18−
19−#ifndef LAUNCHERBACKEND_H
20−#define LAUNCHERBACKEND_H
21−
22−#include "common/quicklistentry.h"
23−
24−#include <QObject>
25−#include <QSettings>
26−#include <QStringList>
27−#include <QDBusVirtualObject>
28−
29−class AccountsServiceDBusAdaptor;
30−
31−/**
32− * @brief An interface that provides all the data needed by the launcher.
33− */
34−
35−class LauncherBackendItem;
36−class LauncherBackendTest;
37−
38−class LauncherBackend : public QDBusVirtualObject
39−{
40− Q_OBJECT
41−
42− friend LauncherBackendTest;
43−
44−public:
45− LauncherBackend(QObject *parent = 0);
46− virtual ~LauncherBackend();
47−
48− /**
49− * @brief Returns a list of stored applications.
50− * @returns A list of application IDs.
51− */
52− QStringList storedApplications() const;
53−
54− /**
55− * @brief Set the list of stored applications.
56− *
57− * Any previously stored information for apps not contained
58− * in the list any more, e.g. the pinned state, will be
59− * discarded.
60− *
61− * @param appIds The new list of stored applications.
62− */
63− void setStoredApplications(const QStringList &appIds);
64−
65− /**
66− * @brief Get the full path to the .desktop file.
67− *
68− * The application does not need to be in the list of stored applications.
69− *
70− * @returns The full path to the .dekstop file.
71− */
72− QString desktopFile(const QString &appId) const;
73−
74− /**
75− * @brief Get the user friendly name of an application.
76− *
77− * The application does not need to be in the list of stored applications.
78− *
79− * @param appId The ID of the application.
80− * @returns The user friendly name of the application.
81− */
82− QString displayName(const QString &appId) const;
83−
84− /**
85− * @brief Get the icon of an application.
86− *
87− * The application does not need to be in the list of stored applications.
88− *
89− * @param appId The ID of the application.
90− * @returns The full path to the icon for the application.
91− */
92− QString icon(const QString &appId) const;
93−
94− /**
95− * @brief Get the QuickList for an application.
96− * @param appId The ID of the application.
97− * @returns A QuickListModelInterface containing the QuickList.
98− */
99− QList<QuickListEntry> quickList(const QString &appId) const;
100−
101− /**
102− * @brief Execute an action from the quickList
103− * @param appId The app ID for which the action was triggered
104− * @param the quicklist ID of the action that was triggered
105− */
106− void triggerQuickListAction(const QString &appId, const QString &entryId);
107−
108− /**
109− * @brief Get the progress for the progress overlay of an application.
110− * @param appId The ID of the application.
111− * @returns The percentage of the overlay progress bar. -1 if no progress bar available.
112− */
113− int progress(const QString &appId) const;
114−
115− /**
116− * @brief Get the count of the count overlay of an application.
117− * @param appId The ID of the application.
118− * @returns The number to be displayed in the overlay. -1 if no count overlay is available.
119− */
120− int count(const QString &appId) const;
121−
122− /**
123− * @brief Set the count on an item
124− * @param appId The ID of the application
125− * @param count Count to show on the application
126− */
127− void setCount(const QString &appId, int count) const;
128−
129− /**
130− * @brief Get whether the count should be visible
131− * @param appId The ID of the application.
132− * @returns Whether to show a count on the launcher
133− */
134− bool countVisible(const QString &appId) const;
135−
136− /**
137− * @brief Set the visibility of the count item
138− * @param appId The ID of the application
139− * @param visible Whether the count should be visible
140− */
141− void setCountVisible(const QString &appId, bool visible) const;
142−
143− /**
144− * @brief Sets the username for which to look up launcher items.
145− * @param username The username to use.
146− */
147− void setUser(const QString &username);
148−
149− /**
150− * @brief Handle a message to an application node
151− * @param message DBus message to handle
152− * @param connection DBus connection that we're using
153− * @returns whether the message was handled
154− */
155− virtual bool handleMessage(const QDBusMessage& message, const QDBusConnection& connection);
156−
157− /**
158− * @brief Get introspection information on the objects we're exporting
159− * @param path the dbus path containing the appid
160− * @returns Introspection information for that node in the tree
161− */
162− virtual QString introspect (const QString &path) const;
163−
164−Q_SIGNALS:
165− void quickListChanged(const QString &appId, const QList<QuickListEntry> &quickList) const;
166− void progressChanged(const QString &appId, int progress) const;
167− void countChanged(const QString &appId, int count) const;
168− void countVisibleChanged(const QString &appId, bool visible) const;
169−
170−private:
171− QString findDesktopFile(const QString &appId) const;
172− LauncherBackendItem* parseDesktopFile(const QString &desktopFile) const;
173−
174− QVariantMap itemToVariant(const QString &appId) const;
175− void loadFromVariant(const QVariantMap &details);
176−
177− bool isDefaultsItem(const QList<QVariantMap> &apps) const;
178− void syncFromAccounts();
179− void syncToAccounts();
180−
181− QList<QString> m_storedApps;
182− mutable QHash<QString, LauncherBackendItem*> m_itemCache;
183−
184− AccountsServiceDBusAdaptor *m_accounts;
185− QString m_user;
186−
187− void emitPropChangedDbus(const QString& appId, const QString& property, QVariant &value) const;
188−
189−protected: /* Protected to allow testing */
190− LauncherBackendItem* getItem(const QString& appId) const;
191−
192− static QString decodeAppId(const QString& path);
193− static QString encodeAppId(const QString& appId);
194−};
195−
196−#endif // LAUNCHERBACKEND_H
plugins/Unity/Launcher/dbusinterface.cppnew file+232
@@ -0,0 +1,232 @@
1+/*
2+ * Copyright 2014 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Authors:
17+ * Michael Zanetti <michael.zanetti@canonical.com>
18+ */
19+
20+#include "dbusinterface.h"
21+#include "launchermodel.h"
22+#include "launcheritem.h"
23+
24+#include <QDBusArgument>
25+#include <QDBusConnection>
26+#include <QDBusMessage>
27+#include <QDebug>
28+
29+DBusInterface::DBusInterface(LauncherModel *parent):
30+ QDBusVirtualObject(parent),
31+ m_launcherModel(parent)
32+{
33+ /* Set up ourselves on DBus */
34+ QDBusConnection con = QDBusConnection::sessionBus();
35+ if (!con.registerService("com.canonical.Unity.Launcher")) {
36+ qWarning() << "Unable to register launcher name";
37+ }
38+ if (!con.registerVirtualObject("/com/canonical/Unity/Launcher", this, QDBusConnection::VirtualObjectRegisterOption::SubPath)) {
39+ qWarning() << "Unable to register launcher object";
40+ }
41+}
42+
43+DBusInterface::~DBusInterface()
44+{
45+ /* Remove oursevles from DBus */
46+ QDBusConnection con = QDBusConnection::sessionBus();
47+ con.unregisterService("com.canonical.Unity.Launcher");
48+ con.unregisterObject("/com/canonical/Unity/Launcher");
49+}
50+
51+QString DBusInterface::introspect(const QString &path) const
52+{
53+ /* This case we should just list the nodes */
54+ if (path == "/com/canonical/Unity/Launcher/" || path == "/com/canonical/Unity/Launcher") {
55+ QString nodes;
56+
57+ // Add Refresh to introspect
58+ nodes = "<interface name=\"com.canonical.Unity.Launcher\">"
59+ "<method name=\"Refresh\"/>"
60+ "</interface>";
61+
62+ // Add dynamic properties for launcher emblems
63+ for (int i = 0; i < m_launcherModel->rowCount(); i++) {
64+ nodes.append("<node name=\"");
65+ nodes.append(encodeAppId(m_launcherModel->get(i)->appId()));
66+ nodes.append("\"/>\n");
67+ }
68+ return nodes;
69+ }
70+
71+ /* Should not happen, but let's handle it */
72+ if (!path.startsWith("/com/canonical/Unity/Launcher")) {
73+ return "";
74+ }
75+
76+ /* Now we should be looking at a node */
77+ QString nodeiface =
78+ "<interface name=\"com.canonical.Unity.Launcher.Item\">"
79+ "<property name=\"count\" type=\"i\" access=\"readwrite\" />"
80+ "<property name=\"countVisible\" type=\"b\" access=\"readwrite\" />"
81+ "</interface>";
82+ return nodeiface;
83+}
84+
85+
86+QString DBusInterface::decodeAppId(const QString& path)
87+{
88+ QByteArray bytes = path.toUtf8();
89+ QByteArray decoded;
90+
91+ for (int i = 0; i < bytes.size(); ++i) {
92+ char chr = bytes.at(i);
93+
94+ if (chr == '_') {
95+ QString number;
96+ number.append(bytes.at(i+1));
97+ number.append(bytes.at(i+2));
98+
99+ bool okay;
100+ char newchar = number.toUInt(&okay, 16);
101+ if (okay)
102+ decoded.append(newchar);
103+
104+ i += 2;
105+ } else {
106+ decoded.append(chr);
107+ }
108+ }
109+
110+ return QString::fromUtf8(decoded);
111+}
112+
113+QString DBusInterface::encodeAppId(const QString& appId)
114+{
115+ QByteArray bytes = appId.toUtf8();
116+ QString encoded;
117+
118+ for (int i = 0; i < bytes.size(); ++i) {
119+ uchar chr = bytes.at(i);
120+
121+ if ((chr >= 'a' && chr <= 'z') ||
122+ (chr >= 'A' && chr <= 'Z') ||
123+ (chr >= '0' && chr <= '9'&& i != 0)) {
124+ encoded.append(chr);
125+ } else {
126+ QString hexval = QString("_%1").arg(chr, 2, 16, QChar('0'));
127+ encoded.append(hexval.toUpper());
128+ }
129+ }
130+
131+ return encoded;
132+}
133+
134+bool DBusInterface::handleMessage(const QDBusMessage& message, const QDBusConnection& connection)
135+{
136+ /* Check to make sure we're getting properties on our interface */
137+ if (message.type() != QDBusMessage::MessageType::MethodCallMessage) {
138+ return false;
139+ }
140+
141+ // First handle methods of the Launcher interface
142+ if (message.interface() == "com.canonical.Unity.Launcher") {
143+ if (message.member() == "Refresh") {
144+ QDBusMessage reply = message.createReply();
145+ Q_EMIT refreshCalled();
146+ return connection.send(reply);
147+ }
148+ }
149+
150+ // Now handle dynamic properties (for launcher emblems)
151+ if (message.interface() != "org.freedesktop.DBus.Properties") {
152+ return false;
153+ }
154+
155+ if (message.member() != "GetAll" && message.arguments()[0].toString() != "com.canonical.Unity.Launcher.Item") {
156+ return false;
157+ }
158+
159+ /* Break down the path to just the app id */
160+ QString pathtemp = message.path();
161+ if (!pathtemp.startsWith("/com/canonical/Unity/Launcher/")) {
162+ return false;
163+ }
164+ pathtemp.remove("/com/canonical/Unity/Launcher/");
165+ if (pathtemp.indexOf('/') >= 0) {
166+ return false;
167+ }
168+
169+ /* Find ourselves an appid */
170+ QString appid = decodeAppId(pathtemp);
171+ int index = m_launcherModel->findApplication(appid);
172+ LauncherItem *item = static_cast<LauncherItem*>(m_launcherModel->get(index));
173+
174+ QVariantList retval;
175+ if (message.member() == "Get") {
176+ if (!item) {
177+ return false;
178+ }
179+ if (message.arguments()[1].toString() == "count") {
180+ retval.append(QVariant::fromValue(QDBusVariant(item->count())));
181+ } else if (message.arguments()[1].toString() == "countVisible") {
182+ retval.append(QVariant::fromValue(QDBusVariant(item->countVisible())));
183+ }
184+ } else if (message.member() == "Set") {
185+ if (message.arguments()[1].toString() == "count") {
186+ int newCount = message.arguments()[2].toInt();
187+ if (!item || newCount != item->count()) {
188+ Q_EMIT countChanged(appid, newCount);
189+ emitPropChangedDbus(appid, "count", QVariant(newCount));
190+ }
191+ } else if (message.arguments()[1].toString() == "countVisible") {
192+ bool newVisible = message.arguments()[2].toBool();
193+ if (!item || newVisible != item->countVisible()) {
194+ Q_EMIT countVisibleChanged(appid, newVisible);
195+ emitPropChangedDbus(appid, "countVisible", newVisible);
196+ }
197+ }
198+ } else if (message.member() == "GetAll") {
199+ if (item) {
200+ QVariantMap all;
201+ all.insert("count", item->count());
202+ all.insert("countVisible", item->countVisible());
203+ retval.append(all);
204+ }
205+ } else {
206+ return false;
207+ }
208+
209+ QDBusMessage reply = message.createReply(retval);
210+ return connection.send(reply);
211+}
212+
213+void DBusInterface::emitPropChangedDbus(const QString& appId, const QString& property, const QVariant &value)
214+{
215+ QString path("/com/canonical/Unity/Launcher/");
216+ path.append(encodeAppId(appId));
217+
218+ QDBusMessage message = QDBusMessage::createSignal(path, "org.freedesktop.DBus.Properties", "PropertiesChanged");
219+
220+ QList<QVariant> arguments;
221+ QVariantHash changedprops;
222+ changedprops[property] = QVariant::fromValue(QDBusVariant(value));
223+ QVariantList deletedprops;
224+
225+ arguments.append(changedprops);
226+ arguments.append(deletedprops);
227+
228+ message.setArguments(arguments);
229+
230+ QDBusConnection con = QDBusConnection::sessionBus();
231+ con.send(message);
232+}
plugins/Unity/Launcher/dbusinterface.hnew file+50
@@ -0,0 +1,50 @@
1+/*
2+ * Copyright 2014 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Authors:
17+ * Michael Zanetti <michael.zanetti@canonical.com>
18+ */
19+
20+#include "launcheritem.h"
21+
22+#include <QDBusVirtualObject>
23+
24+class LauncherModel;
25+
26+class DBusInterface: public QDBusVirtualObject
27+{
28+ Q_OBJECT
29+public:
30+ DBusInterface(LauncherModel *parent);
31+ ~DBusInterface();
32+
33+ // QDBusVirtualObject implementaition
34+ QString introspect (const QString &path) const override;
35+ bool handleMessage(const QDBusMessage& message, const QDBusConnection& connection) override;
36+
37+Q_SIGNALS:
38+ void countChanged(const QString &appId, int count);
39+ void countVisibleChanged(const QString &appId, bool countVisible);
40+ void refreshCalled();
41+
42+private:
43+ static QString decodeAppId(const QString& path);
44+ static QString encodeAppId(const QString& appId);
45+
46+ void emitPropChangedDbus(const QString& appId, const QString& property, const QVariant &value);
47+
48+ LauncherModel *m_launcherModel;
49+
50+};
plugins/Unity/Launcher/desktopfilehandler.cppnew file+151
@@ -0,0 +1,151 @@
1+/*
2+ * Copyright 2014 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Authors:
17+ * Michael Zanetti <michael.zanetti@canonical.com>
18+ */
19+
20+#include "desktopfilehandler.h"
21+
22+#include <QStringList>
23+#include <QStandardPaths>
24+#include <QDir>
25+#include <QSettings>
26+#include <QLocale>
27+
28+#include <libintl.h>
29+
30+DesktopFileHandler::DesktopFileHandler(const QString &appId, QObject *parent):
31+ QObject(parent),
32+ m_appId(appId)
33+{
34+ load();
35+}
36+
37+QString DesktopFileHandler::appId() const
38+{
39+ return m_appId;
40+}
41+
42+void DesktopFileHandler::setAppId(const QString &appId)
43+{
44+ if (m_appId != appId) {
45+ m_appId = appId;
46+ load();
47+ }
48+}
49+
50+QString DesktopFileHandler::filename() const
51+{
52+ return m_filename;
53+}
54+
55+bool DesktopFileHandler::isValid() const
56+{
57+ return !m_filename.isEmpty();
58+}
59+
60+void DesktopFileHandler::load()
61+{
62+ m_filename.clear();
63+
64+ if (m_appId.isEmpty()) {
65+ return;
66+ }
67+
68+ int dashPos = -1;
69+ QString helper = m_appId;
70+
71+ QStringList searchDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
72+#ifdef LAUNCHER_TESTING
73+ searchDirs << "";
74+#endif
75+
76+ QString path;
77+ do {
78+ if (dashPos != -1) {
79+ helper.replace(dashPos, 1, '/');
80+ }
81+
82+ if (helper.contains("/")) {
83+ path += helper.split('/').first() + '/';
84+ helper.remove(QRegExp("^" + path));
85+ }
86+
87+ Q_FOREACH(const QString &searchDirName, searchDirs) {
88+ QDir searchDir(searchDirName + "/" + path);
89+ Q_FOREACH(const QString &desktopFile, searchDir.entryList(QStringList() << "*.desktop")) {
90+ if (desktopFile.startsWith(helper)) {
91+ QFileInfo fileInfo(searchDir, desktopFile);
92+ m_filename = fileInfo.absoluteFilePath();
93+ return;
94+ }
95+ }
96+ }
97+
98+ dashPos = helper.indexOf("-");
99+ } while (dashPos != -1);
100+}
101+
102+QString DesktopFileHandler::displayName() const
103+{
104+ if (!isValid()) {
105+ return QString();
106+ }
107+
108+ QSettings settings(m_filename, QSettings::IniFormat);
109+ settings.beginGroup("Desktop Entry");
110+
111+ // First try to find Name[xx_YY] and Name[xx] in .desktop file
112+ QString locale = QLocale::system().name();
113+ QString shortLocale = locale.split('_').first();
114+
115+ if (locale != shortLocale && settings.contains(QString("Name[%1]").arg(locale))) {
116+ return settings.value(QString("Name[%1]").arg(locale)).toString();
117+ }
118+
119+ if (settings.contains(QString("Name[%1]").arg(shortLocale))) {
120+ return settings.value(QString("Name[%1]").arg(shortLocale)).toString();
121+ }
122+
123+ // No translation found in desktop file. Get the untranslated one and have a go with gettext.
124+ QString displayName = settings.value("Name").toString();
125+
126+ if (settings.contains("X-Ubuntu-Gettext-Domain")) {
127+ const QString domain = settings.value("X-Ubuntu-Gettext-Domain").toString();
128+ return dgettext(domain.toUtf8().constData(), displayName.toUtf8().constData());
129+ }
130+
131+ return displayName;
132+}
133+
134+QString DesktopFileHandler::icon() const
135+{
136+ if (!isValid()) {
137+ return QString();
138+ }
139+
140+ QSettings settings(m_filename, QSettings::IniFormat);
141+ settings.beginGroup("Desktop Entry");
142+ QString iconString = settings.value("Icon").toString();
143+ QString pathString = settings.value("Path").toString();
144+
145+ if (QFileInfo(iconString).exists()) {
146+ return QFileInfo(iconString).absoluteFilePath();
147+ } else if (QFileInfo(pathString + '/' + iconString).exists()) {
148+ return pathString + '/' + iconString;
149+ }
150+ return "image://theme/" + iconString;
151+}
plugins/Unity/Launcher/desktopfilehandler.hnew file+56
@@ -0,0 +1,56 @@
1+/*
2+ * Copyright 2014 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Authors:
17+ * Michael Zanetti <michael.zanetti@canonical.com>
18+ */
19+
20+#ifndef DESKTOPFILEHANDLER_H
21+#define DESKTOPFILEHANDLER_H
22+
23+#include <QObject>
24+
25+/**
26+ * When an object of this class is created or whenever setAppId(appId) is called,
27+ * this will search for a .desktop file matching the give appId. If a file is
28+ * found, isValid() will return true and the other methods return the contents
29+ * of the .desktop file.
30+ *
31+ * Note that this class will consider the user's locale and do a best effort
32+ * to return localized values.
33+ */
34+
35+class DesktopFileHandler: public QObject
36+{
37+ Q_OBJECT
38+public:
39+ DesktopFileHandler(const QString &appId = QString(), QObject *parent = nullptr);
40+
41+ QString appId() const;
42+ void setAppId(const QString &appId);
43+
44+ bool isValid() const;
45+ QString filename() const;
46+ QString displayName() const;
47+ QString icon() const;
48+
49+private:
50+ void load();
51+
52+ QString m_appId;
53+ QString m_filename;
54+};
55+
56+#endif
plugins/Unity/Launcher/gsettings.cppnew file+66
@@ -0,0 +1,66 @@
1+/*
2+ * Copyright 2014 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Authors:
17+ * Michael Zanetti <michael.zanetti@canonical.com>
18+ */
19+
20+#include "gsettings.h"
21+
22+#include <QGSettings>
23+#include <QVariant>
24+
25+GSettings::GSettings(QObject *parent):
26+ QObject(parent)
27+{
28+
29+}
30+
31+QStringList GSettings::storedApplications() const
32+{
33+ QStringList storedApps;
34+
35+ QGSettings gSettings("com.canonical.Unity.Launcher", "/com/canonical/unity/launcher/");
36+
37+ Q_FOREACH(const QString &entry, gSettings.get("items").toStringList()) {
38+ if (entry.startsWith("application:///")) {
39+ // convert legacy entries to new world appids
40+ QString appId = entry;
41+ // Transform "application://foobar.desktop" to "foobar"
42+ appId.remove(QRegExp("^application:///"));
43+ appId.remove(QRegExp(".desktop$"));
44+ storedApps << appId;
45+ } else if (entry.startsWith("appid://")) {
46+ QString appId = entry;
47+ appId.remove("appid://");
48+ if (appId.split('/').count() == 3) {
49+ // Strip current-user-version in case its there
50+ appId = appId.split('/').first() + "_" + appId.split('/').at(1);
51+ }
52+ storedApps << appId;
53+ }
54+ }
55+ return storedApps;
56+}
57+
58+void GSettings::setStoredApplications(const QStringList &storedApplications)
59+{
60+ QGSettings gSettings("com.canonical.Unity.Launcher", "/com/canonical/unity/launcher/");
61+ QStringList gSettingsList;
62+ Q_FOREACH(const QString &entry, storedApplications) {
63+ gSettingsList << QString("appid://%1").arg(entry);
64+ }
65+ gSettings.set("items", gSettingsList);
66+}
plugins/Unity/Launcher/gsettings.hnew file+37
@@ -0,0 +1,37 @@
1+/*
2+ * Copyright 2014 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Authors:
17+ * Michael Zanetti <michael.zanetti@canonical.com>
18+ */
19+
20+#ifndef GSETTINGS_H
21+#define GSETTINGS_H
22+
23+#include <QObject>
24+#include <QStringList>
25+
26+
27+class GSettings: public QObject
28+{
29+ Q_OBJECT
30+public:
31+ GSettings(QObject *parent = nullptr);
32+
33+ QStringList storedApplications() const;
34+ void setStoredApplications(const QStringList &storedApplications);
35+};
36+
37+#endif
plugins/Unity/Launcher/launcheritem.cpp+31
@@ -32,10 +32,12 @@ LauncherItem::LauncherItem(const QString &appId, const QString &name, const QStr
3232 m_recent(false),
3333 m_progress(-1),
3434 m_count(0),
35+ m_countVisible(false),
3536 m_focused(false),
3637 m_quickList(new QuickListModel(this))
3738{
3839 QuickListEntry nameAction;
40+ nameAction.setActionId("launch_item");
3941 nameAction.setText(m_name);
4042 m_quickList->appendAction(nameAction);
4143 QuickListEntry pinningAction;
@@ -54,11 +56,27 @@ QString LauncherItem::name() const
5456 return m_name;
5557}
5658
59+void LauncherItem::setName(const QString &name)
60+{
61+ if (m_name != name) {
62+ m_name = name;
63+ Q_EMIT nameChanged(name);
64+ }
65+}
66+
5767QString LauncherItem::icon() const
5868{
5969 return m_icon;
6070}
6171
72+void LauncherItem::setIcon(const QString &icon)
73+{
74+ if (m_icon != icon) {
75+ m_icon = icon;
76+ Q_EMIT iconChanged(icon);
77+ }
78+}
79+
6280bool LauncherItem::pinned() const
6381{
6482 return m_pinned;
@@ -128,6 +146,19 @@ void LauncherItem::setCount(int count)
128146 }
129147}
130148
149+bool LauncherItem::countVisible() const
150+{
151+ return m_countVisible;
152+}
153+
154+void LauncherItem::setCountVisible(bool countVisible)
155+{
156+ if (m_countVisible != countVisible) {
157+ m_countVisible = countVisible;
158+ Q_EMIT countVisibleChanged(countVisible);
159+ }
160+}
161+
131162bool LauncherItem::focused() const
132163{
133164 return m_focused;
plugins/Unity/Launcher/launcheritem.h+19−20
@@ -34,34 +34,30 @@ class LauncherItem: public LauncherItemInterface
3434public:
3535 LauncherItem(const QString &appId, const QString &name, const QString &icon, QObject *parent = 0);
3636
37− QString appId() const;
38− QString name() const;
39− QString icon() const;
37+ QString appId() const override;
38+ QString name() const override;
39+ QString icon() const override;
40+ bool pinned() const override;
41+ bool running() const override;
42+ bool recent() const override;
43+ int progress() const override;
44+ int count() const override;
45+ bool countVisible() const override;
46+ bool focused() const override;
47+
48+ unity::shell::launcher::QuickListModelInterface *quickList() const override;
4049
41− bool pinned() const;
50+private:
51+ void setName(const QString &name);
52+ void setIcon(const QString &icon);
4253 void setPinned(bool pinned);
43−
44− bool running() const;
4554 void setRunning(bool running);
46−
47− bool recent() const;
4855 void setRecent(bool recent);
49−
50− int progress() const;
5156 void setProgress(int progress);
52−
53− int count() const;
5457 void setCount(int count);
55−
56− bool focused() const;
58+ void setCountVisible(bool countVisible);
5759 void setFocused(bool focused);
5860
59− unity::shell::launcher::QuickListModelInterface *quickList() const;
60−
61−Q_SIGNALS:
62− void favoriteChanged(bool favorite);
63− void runningChanged(bool running);
64−
6561private:
6662 QString m_appId;
6763 QString m_name;
@@ -71,8 +67,11 @@ private:
7167 bool m_recent;
7268 int m_progress;
7369 int m_count;
70+ bool m_countVisible;
7471 bool m_focused;
7572 QuickListModel *m_quickList;
73+
74+ friend class LauncherModel;
7675};
7776
7877#endif // LAUNCHERITEM_H
plugins/Unity/Launcher/launchermodel.cpp+88−15
@@ -19,26 +19,37 @@
1919
2020#include "launchermodel.h"
2121#include "launcheritem.h"
22−#include "backend/launcherbackend.h"
22+#include "gsettings.h"
23+#include "desktopfilehandler.h"
24+#include "dbusinterface.h"
2325
2426#include <unity/shell/application/ApplicationInfoInterface.h>
2527
28+#include <QDesktopServices>
2629#include <QDebug>
2730
2831using namespace unity::shell::application;
2932
3033LauncherModel::LauncherModel(QObject *parent):
3134 LauncherModelInterface(parent),
32− m_backend(new LauncherBackend(this)),
35+ m_settings(new GSettings(this)),
36+ m_dbusIface(new DBusInterface(this)),
3337 m_appManager(0)
3438{
35− connect(m_backend, SIGNAL(countChanged(QString,int)), SLOT(countChanged(QString,int)));
36− connect(m_backend, SIGNAL(progressChanged(QString,int)), SLOT(progressChanged(QString,int)));
39+ connect(m_dbusIface, &DBusInterface::countChanged, this, &LauncherModel::countChanged);
40+ connect(m_dbusIface, &DBusInterface::countVisibleChanged, this, &LauncherModel::countVisibleChanged);
41+ connect(m_dbusIface, &DBusInterface::refreshCalled, this, &LauncherModel::refresh);
42+
43+ Q_FOREACH (const QString &entry, m_settings->storedApplications()) {
44+ DesktopFileHandler desktopFile(entry);
45+ if (!desktopFile.isValid()) {
46+ qWarning() << "Couldn't find a .desktop file for" << entry << ". Skipping...";
47+ continue;
48+ }
3749
38− Q_FOREACH (const QString &entry, m_backend->storedApplications()) {
3950 LauncherItem *item = new LauncherItem(entry,
40− m_backend->displayName(entry),
41− m_backend->icon(entry),
51+ desktopFile.displayName(),
52+ desktopFile.icon(),
4253 this);
4354 item->setPinned(true);
4455 m_list.append(item);
@@ -72,6 +83,8 @@ QVariant LauncherModel::data(const QModelIndex &index, int role) const
7283 return item->pinned();
7384 case RoleCount:
7485 return item->count();
86+ case RoleCountVisible:
87+ return item->countVisible();
7588 case RoleProgress:
7689 return item->progress();
7790 case RoleFocused:
@@ -138,10 +151,17 @@ void LauncherModel::pin(const QString &appId, int index)
138151 if (index == -1) {
139152 index = m_list.count();
140153 }
154+
155+ DesktopFileHandler desktopFile(appId);
156+ if (!desktopFile.isValid()) {
157+ qWarning() << "Can't pin this application, there is no .destkop file available.";
158+ return;
159+ }
160+
141161 beginInsertRows(QModelIndex(), index, index);
142162 LauncherItem *item = new LauncherItem(appId,
143− m_backend->displayName(appId),
144− m_backend->icon(appId),
163+ desktopFile.displayName(),
164+ desktopFile.icon(),
145165 this);
146166 item->setPinned(true);
147167 m_list.insert(index, item);
@@ -191,28 +211,32 @@ void LauncherModel::quickListActionInvoked(const QString &appId, int actionIndex
191211 } else {
192212 pin(appId);
193213 }
214+ } else if (actionId == "launch_item") {
215+ QDesktopServices::openUrl(getUrlForAppId(appId));
194216
195217 // Nope, we don't know this action, let the backend forward it to the application
196218 } else {
197− m_backend->triggerQuickListAction(appId, actionId);
219+ // TODO: forward quicklist action to app, possibly via m_dbusIface
198220 }
199221 }
200222}
201223
202224void LauncherModel::setUser(const QString &username)
203225{
204− m_backend->setUser(username);
226+ Q_UNUSED(username)
227+ qWarning() << "This backend doesn't support multiple users";
205228}
206229
207230QString LauncherModel::getUrlForAppId(const QString &appId) const
208231{
209232 // appId is either an appId or a legacy app name. Let's find out which
210− if (appId.isEmpty())
233+ if (appId.isEmpty()) {
211234 return QString();
235+ }
212236
213− QString df = m_backend->desktopFile(appId + ".desktop");
214− if (!df.isEmpty())
237+ if (!appId.contains("_")) {
215238 return "application:///" + appId + ".desktop";
239+ }
216240
217241 QStringList parts = appId.split('_');
218242 QString package = parts.value(0);
@@ -272,7 +296,7 @@ void LauncherModel::storeAppList()
272296 appIds << item->appId();
273297 }
274298 }
275− m_backend->setStoredApplications(appIds);
299+ m_settings->setStoredApplications(appIds);
276300}
277301
278302int LauncherModel::findApplication(const QString &appId)
@@ -307,6 +331,55 @@ void LauncherModel::countChanged(const QString &appId, int count)
307331 }
308332}
309333
334+void LauncherModel::countVisibleChanged(const QString &appId, int countVisible)
335+{
336+ int idx = findApplication(appId);
337+ if (idx >= 0) {
338+ LauncherItem *item = m_list.at(idx);
339+ item->setCountVisible(countVisible);
340+ Q_EMIT dataChanged(index(idx), index(idx), QVector<int>() << RoleCountVisible);
341+
342+ // If countVisible goes to false, and the item is neither pinned nor recent we can drop it
343+ if (!countVisible && !item->pinned() && !item->recent()) {
344+ beginRemoveRows(QModelIndex(), idx, idx);
345+ m_list.takeAt(idx)->deleteLater();
346+ endRemoveRows();
347+ }
348+ } else {
349+ // Need to create a new LauncherItem and show the highlight
350+ DesktopFileHandler desktopFile(appId);
351+ if (countVisible && desktopFile.isValid()) {
352+ LauncherItem *item = new LauncherItem(appId,
353+ desktopFile.displayName(),
354+ desktopFile.icon());
355+ item->setCountVisible(true);
356+ beginInsertRows(QModelIndex(), m_list.count(), m_list.count());
357+ m_list.append(item);
358+ endInsertRows();
359+ }
360+ }
361+}
362+
363+void LauncherModel::refresh()
364+{
365+ QList<LauncherItem*> toBeRemoved;
366+ Q_FOREACH (LauncherItem* item, m_list) {
367+ DesktopFileHandler desktopFile(item->appId());
368+ if (!desktopFile.isValid()) {
369+ toBeRemoved << item;
370+ } else {
371+ int idx = m_list.indexOf(item);
372+ item->setName(desktopFile.displayName());
373+ item->setIcon(desktopFile.icon());
374+ Q_EMIT dataChanged(index(idx), index(idx), QVector<int>() << RoleName << RoleIcon);
375+ }
376+ }
377+
378+ Q_FOREACH (LauncherItem* item, toBeRemoved) {
379+ requestRemove(item->appId());
380+ }
381+}
382+
310383void LauncherModel::applicationAdded(const QModelIndex &parent, int row)
311384{
312385 Q_UNUSED(parent);
plugins/Unity/Launcher/launchermodel.h+15−8
@@ -20,15 +20,14 @@
2020#ifndef LAUNCHERMODEL_H
2121#define LAUNCHERMODEL_H
2222
23−// unity-api
2423#include <unity/shell/launcher/LauncherModelInterface.h>
2524#include <unity/shell/application/ApplicationManagerInterface.h>
2625
27−// Qt
2826#include <QAbstractListModel>
2927
3028class LauncherItem;
31−class LauncherBackend;
29+class GSettings;
30+class DBusInterface;
3231
3332using namespace unity::shell::launcher;
3433using namespace unity::shell::application;
@@ -41,14 +40,13 @@ public:
4140 LauncherModel(QObject *parent = 0);
4241 ~LauncherModel();
4342
44− int rowCount(const QModelIndex &parent) const;
43+ int rowCount(const QModelIndex &parent = QModelIndex()) const;
4544
4645 QVariant data(const QModelIndex &index, int role) const;
4746
4847 Q_INVOKABLE unity::shell::launcher::LauncherItemInterface* get(int index) const;
4948 Q_INVOKABLE void move(int oldIndex, int newIndex);
5049 Q_INVOKABLE void pin(const QString &appId, int index = -1);
51− Q_INVOKABLE void requestRemove(const QString &appId);
5250 Q_INVOKABLE void quickListActionInvoked(const QString &appId, int actionIndex);
5351 Q_INVOKABLE void setUser(const QString &username);
5452 Q_INVOKABLE QString getUrlForAppId(const QString &appId) const;
@@ -56,13 +54,19 @@ public:
5654 unity::shell::application::ApplicationManagerInterface* applicationManager() const;
5755 void setApplicationManager(unity::shell::application::ApplicationManagerInterface *appManager);
5856
57+ int findApplication(const QString &appId);
58+
59+public Q_SLOTS:
60+ void requestRemove(const QString &appId);
61+
5962private:
6063 void storeAppList();
61− int findApplication(const QString &appId);
6264
6365private Q_SLOTS:
64− void progressChanged(const QString &appId, int progress);
6566 void countChanged(const QString &appId, int count);
67+ void countVisibleChanged(const QString &appId, int count);
68+ void progressChanged(const QString &appId, int progress);
69+ void refresh();
6670
6771 void applicationAdded(const QModelIndex &parent, int row);
6872 void applicationRemoved(const QModelIndex &parent, int row);
@@ -70,7 +74,10 @@ private Q_SLOTS:
7074
7175private:
7276 QList<LauncherItem*> m_list;
73− LauncherBackend *m_backend;
77+
78+ GSettings *m_settings;
79+ DBusInterface *m_dbusIface;
80+
7481 ApplicationManagerInterface *m_appManager;
7582};
7683
plugins/Unity/Launcher/common/quicklistentry.cpp → plugins/Unity/Launcher/quicklistentry.cpprenamed

The content is the same.

plugins/Unity/Launcher/common/quicklistentry.h → plugins/Unity/Launcher/quicklistentry.hrenamed

The content is the same.

plugins/Unity/Launcher/quicklistmodel.h+1−1
@@ -20,7 +20,7 @@
2020#ifndef QUICKLISTMODEL_H
2121#define QUICKLISTMODEL_H
2222
23−#include "common/quicklistentry.h"
23+#include "quicklistentry.h"
2424
2525#include <unity/shell/launcher/QuickListModelInterface.h>
2626
plugins/Unity/Session/CMakeLists.txt+7
@@ -1,10 +1,16 @@
1+include(FindPkgConfig)
2+
3+pkg_search_module(GIO REQUIRED gio-2.0)
4+
15include_directories(
26 ${CMAKE_CURRENT_SOURCE_DIR}
7+ ${GIO_INCLUDE_DIRS}
38)
49
510set(QMLSESSIONPLUGIN_SRC
611 plugin.cpp
712 dbusunitysessionservice.cpp
13+ orientationlock.cpp
814 )
915
1016add_library(UnitySession-qml MODULE
@@ -12,6 +18,7 @@ add_library(UnitySession-qml MODULE
1218 )
1319
1420qt5_use_modules(UnitySession-qml DBus Qml)
21+target_link_libraries(UnitySession-qml ${GIO_LDFLAGS})
1522
1623# export the qmldir and qmltypes files
1724add_unity8_plugin(Unity.Session 0.1 Unity/Session TARGETS UnitySession-qml)
plugins/Unity/Session/orientationlock.cppnew file+74
@@ -0,0 +1,74 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it under
5+ * the terms of the GNU Lesser General Public License version 3, as published by
6+ * the Free Software Foundation.
7+ *
8+ * This program is distributed in the hope that it will be useful, but WITHOUT
9+ * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
10+ * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11+ * Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "orientationlock.h"
18+
19+#include <QDBusConnection>
20+#include <QDBusInterface>
21+
22+OrientationLock::OrientationLock(QObject *parent)
23+ : QObject(parent)
24+ , m_enabled(false)
25+ , m_savedOrientation(Qt::PortraitOrientation)
26+{
27+ systemSettings = g_settings_new("com.ubuntu.touch.system");
28+ g_signal_connect(systemSettings, "changed::rotation-lock",
29+ G_CALLBACK(OrientationLock::onEnabledChangedProxy), this);
30+ m_enabled = g_settings_get_boolean(systemSettings, "rotation-lock");
31+}
32+
33+OrientationLock::~OrientationLock()
34+{
35+ g_signal_handlers_disconnect_by_data(systemSettings, this);
36+ g_object_unref(systemSettings);
37+}
38+
39+bool OrientationLock::enabled() const
40+{
41+ return m_enabled;
42+}
43+
44+Qt::ScreenOrientation OrientationLock::savedOrientation() const
45+{
46+ return m_savedOrientation;
47+}
48+
49+void OrientationLock::onEnabledChangedProxy(GSettings */*settings*/, const gchar */*key*/, gpointer data)
50+{
51+ OrientationLock* _this = static_cast<OrientationLock*>(data);
52+ _this->onEnabledChanged();
53+}
54+
55+void OrientationLock::onEnabledChanged()
56+{
57+ const bool enabled = g_settings_get_boolean(systemSettings, "rotation-lock");
58+ if (m_enabled != enabled) {
59+ m_enabled = enabled;
60+ Q_EMIT enabledChanged();
61+ }
62+}
63+
64+void OrientationLock::setSavedOrientation(const Qt::ScreenOrientation orientation)
65+{
66+ if (orientation == m_savedOrientation) {
67+ return;
68+ }
69+
70+ m_savedOrientation = orientation;
71+
72+ //TODO - save value with dbus to persist over sessions
73+ Q_EMIT savedOrientationChanged();
74+}
plugins/Unity/Session/orientationlock.hnew file+62
@@ -0,0 +1,62 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it under
5+ * the terms of the GNU Lesser General Public License version 3, as published by
6+ * the Free Software Foundation.
7+ *
8+ * This program is distributed in the hope that it will be useful, but WITHOUT
9+ * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
10+ * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11+ * Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef ORIENTATIONLOCK_H
18+#define ORIENTATIONLOCK_H
19+
20+#include <gio/gio.h>
21+#include <QtCore/QObject>
22+#include <QtDBus/QDBusInterface>
23+
24+/**
25+ * @brief The OrientationLock class exports orientation lock related properties to QML
26+ * It has two properties:
27+ * - readonly boolean with the Orientation lock property state
28+ * - Qt::ScreenOrientation to save the locked orientation state across Sessions (only relevant if lock is true)
29+ */
30+class OrientationLock : public QObject
31+{
32+ Q_OBJECT
33+
34+ Q_PROPERTY(bool enabled READ enabled NOTIFY enabledChanged)
35+ Q_PROPERTY(Qt::ScreenOrientation savedOrientation READ savedOrientation WRITE setSavedOrientation
36+ NOTIFY savedOrientationChanged)
37+
38+public:
39+ explicit OrientationLock(QObject *parent = 0);
40+ ~OrientationLock();
41+
42+ bool enabled() const;
43+ Qt::ScreenOrientation savedOrientation() const;
44+ void setSavedOrientation(const Qt::ScreenOrientation orientation);
45+
46+Q_SIGNALS:
47+ void enabledChanged();
48+ void savedOrientationChanged();
49+
50+private Q_SLOTS:
51+ static void onEnabledChangedProxy(GSettings *settings, const gchar *key, gpointer data);
52+ void onEnabledChanged();
53+
54+private:
55+ QDBusInterface *dbusInterface;
56+ GSettings *systemSettings;
57+
58+ bool m_enabled;
59+ Qt::ScreenOrientation m_savedOrientation;
60+};
61+
62+#endif // ORIENTATIONLOCK_H
plugins/Unity/Session/plugin.cpp+8−4
@@ -18,23 +18,27 @@
1818
1919#include "plugin.h"
2020#include "dbusunitysessionservice.h"
21+#include "orientationlock.h"
2122
2223#include <QAbstractItemModel>
2324#include <QDBusConnection>
2425#include <QtQml/qqml.h>
2526
26−static QObject *dbusunitysessionservice_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
27+static QObject *dbusunitysessionservice_provider(QQmlEngine */*engine*/, QJSEngine */*jsEngine*/)
2728{
28− Q_UNUSED(engine)
29− Q_UNUSED(scriptEngine)
30−
3129 return new DBusUnitySessionService();
3230}
3331
32+static QObject *orientationlock_provider(QQmlEngine */*engine*/, QJSEngine */*jsEngine*/)
33+{
34+ return new OrientationLock();
35+}
36+
3437void SessionPlugin::registerTypes(const char *uri)
3538{
3639 qmlRegisterType<QAbstractItemModel>();
3740
3841 Q_ASSERT(uri == QLatin1String("Unity.Session"));
3942 qmlRegisterSingletonType<DBusUnitySessionService>(uri, 0, 1, "DBusUnitySessionService", dbusunitysessionservice_provider);
43+ qmlRegisterSingletonType<OrientationLock>(uri, 0, 1, "OrientationLock", orientationlock_provider);
4044}
plugins/Utils/windowkeysfilter.cpp+1
@@ -31,6 +31,7 @@ bool WindowKeysFilter::eventFilter(QObject *watched, QEvent *event)
3131{
3232 Q_ASSERT(!m_filteredWindow.isNull());
3333 Q_ASSERT(watched == static_cast<QObject*>(m_filteredWindow.data()));
34+ Q_UNUSED(watched);
3435
3536 if (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease) {
3637 // Let QML see this event and decide if it does not want it
po/am.po+7−3
@@ -7,14 +7,14 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-09-02 01:51+0000\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11+"PO-Revision-Date: 2014-09-20 13:57+0000\n"
1212"Last-Translator: samson <Unknown>\n"
1313"Language-Team: Amharic <am@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-09-03 07:05+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-21 06:25+0000\n"
1818"X-Generator: Launchpad (build 17196)\n"
1919
2020#: plugins/LightDM/Greeter.cpp:130
@@ -80,6 +80,10 @@ msgstr ""
8080msgid "Power off"
8181msgstr "ማጥፊያ"
8282
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr "እንደገና ማስጀመሪያ"
86+
8387#: qml/Components/Dialogs.qml:157
8488msgid "Cancel"
8589msgstr "መሰረዣ"
po/ar.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-05-22 08:22+0000\n"
1212"Last-Translator: Ibrahim Saed <ibraheem5000@gmail.com>\n"
1313"Language-Team: Arabic <ar@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -164,7 +168,8 @@ msgstr "شاهد أقل"
164168msgid "See all"
165169msgstr ""
166170
167−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
171+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
172+#: qml/Panel/SearchIndicator.qml:27
168173msgid "Search"
169174msgstr "ابحث"
170175
@@ -204,11 +209,11 @@ msgstr "أرسل"
204209msgid "Manage Dash"
205210msgstr ""
206211
207−#: qml/Dash/ScopesOverview.qml:408
212+#: qml/Dash/ScopesOverview.qml:417
208213msgid "Done"
209214msgstr ""
210215
211−#: qml/Dash/ScopesOverview.qml:434
216+#: qml/Dash/ScopesOverview.qml:443
212217msgid "Store"
213218msgstr ""
214219
@@ -224,7 +229,7 @@ msgstr ""
224229msgid "Swipe to unlock"
225230msgstr "اسحب لفتح القفل"
226231
227−#: qml/Hud/HudParametrizedActionsPage.qml:132
232+#: qml/Hud/HudParametrizedActionsPage.qml:139
228233msgid "Confirm"
229234msgstr "التأكيد"
230235
@@ -252,7 +257,7 @@ msgstr "عرض كلمة السر"
252257msgid "Enter SIM PIN"
253258msgstr ""
254259
255−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
260+#: qml/Notifications/NotificationMenuItemFactory.qml:121
256261msgid "Sorry, incorrect PIN"
257262msgstr ""
258263
@@ -296,11 +301,11 @@ msgstr ""
296301msgid "Roaming"
297302msgstr ""
298303
299−#: qml/Shell.qml:266
304+#: qml/Shell.qml:279
300305msgid "Enter your passphrase"
301306msgstr ""
302307
303−#: qml/Shell.qml:267
308+#: qml/Shell.qml:280
304309msgid "Sorry, incorrect passphrase"
305310msgstr ""
306311
@@ -312,35 +317,35 @@ msgstr ""
312317msgid "Sorry, incorrect passcode"
313318msgstr ""
314319
315−#: qml/Shell.qml:273
320+#: qml/Shell.qml:286
316321#, qt-format
317322msgid "Enter your %1"
318323msgstr ""
319324
320−#: qml/Shell.qml:274
325+#: qml/Shell.qml:287
321326#, qt-format
322327msgid "Sorry, incorrect %1"
323328msgstr ""
324329
325−#: qml/Shell.qml:310
330+#: qml/Shell.qml:323
326331msgid "Sorry, incorrect passphrase."
327332msgstr ""
328333
329−#: qml/Shell.qml:311
334+#: qml/Shell.qml:324
330335msgid "Sorry, incorrect passcode."
331336msgstr ""
332337
333−#: qml/Shell.qml:312
338+#: qml/Shell.qml:325
334339msgid "This will be your last attempt."
335340msgstr ""
336341
337−#: qml/Shell.qml:314
342+#: qml/Shell.qml:327
338343msgid ""
339344"If passphrase is entered incorrectly, your phone will conduct a factory "
340345"reset and all personal data will be deleted."
341346msgstr ""
342347
343−#: qml/Shell.qml:315
348+#: qml/Shell.qml:328
344349msgid ""
345350"If passcode is entered incorrectly, your phone will conduct a factory reset "
346351"and all personal data will be deleted."
po/ast.po+7−3
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-08-31 12:51+0000\n"
1212"Last-Translator: ivarela <ivarela@ubuntu.com>\n"
1313"Language-Team: Asturian <ast@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-09-01 07:33+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
2020#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
@@ -80,6 +80,10 @@ msgstr ""
8080msgid "Power off"
8181msgstr "Apagar"
8282
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
8387#: qml/Components/Dialogs.qml:157
8488msgid "Cancel"
8589msgstr "Encaboxar"
po/az.po+6−2
@@ -7,14 +7,14 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-09-03 16:39+0000\n"
1212"Last-Translator: Nicat Məmmədov <n1c4t97@gmail.com>\n"
1313"Language-Team: Azerbaijani <az@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-09-04 08:35+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
1818"X-Generator: Launchpad (build 17196)\n"
1919
2020#: plugins/LightDM/Greeter.cpp:130
@@ -78,6 +78,10 @@ msgstr ""
7878msgid "Power off"
7979msgstr "Söndür"
8080
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
8185#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr "İmtina"
po/bg.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-04-01 14:08+0000\n"
1212"Last-Translator: Atanas Kovachki <Unknown>\n"
1313"Language-Team: Bulgarian <bg@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -168,7 +172,8 @@ msgstr ""
168172msgid "See all"
169173msgstr ""
170174
171−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
175+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
176+#: qml/Panel/SearchIndicator.qml:27
172177msgid "Search"
173178msgstr "Търсене"
174179
@@ -208,11 +213,11 @@ msgstr "Изпрати"
208213msgid "Manage Dash"
209214msgstr ""
210215
211−#: qml/Dash/ScopesOverview.qml:408
216+#: qml/Dash/ScopesOverview.qml:417
212217msgid "Done"
213218msgstr ""
214219
215−#: qml/Dash/ScopesOverview.qml:434
220+#: qml/Dash/ScopesOverview.qml:443
216221msgid "Store"
217222msgstr ""
218223
@@ -228,7 +233,7 @@ msgstr ""
228233msgid "Swipe to unlock"
229234msgstr ""
230235
231−#: qml/Hud/HudParametrizedActionsPage.qml:132
236+#: qml/Hud/HudParametrizedActionsPage.qml:139
232237msgid "Confirm"
233238msgstr "Потвърди"
234239
@@ -256,7 +261,7 @@ msgstr "Покажи паролата"
256261msgid "Enter SIM PIN"
257262msgstr ""
258263
259−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
264+#: qml/Notifications/NotificationMenuItemFactory.qml:121
260265msgid "Sorry, incorrect PIN"
261266msgstr ""
262267
@@ -300,11 +305,11 @@ msgstr ""
300305msgid "Roaming"
301306msgstr ""
302307
303−#: qml/Shell.qml:266
308+#: qml/Shell.qml:279
304309msgid "Enter your passphrase"
305310msgstr ""
306311
307−#: qml/Shell.qml:267
312+#: qml/Shell.qml:280
308313msgid "Sorry, incorrect passphrase"
309314msgstr ""
310315
@@ -316,35 +321,35 @@ msgstr ""
316321msgid "Sorry, incorrect passcode"
317322msgstr ""
318323
319−#: qml/Shell.qml:273
324+#: qml/Shell.qml:286
320325#, qt-format
321326msgid "Enter your %1"
322327msgstr ""
323328
324−#: qml/Shell.qml:274
329+#: qml/Shell.qml:287
325330#, qt-format
326331msgid "Sorry, incorrect %1"
327332msgstr ""
328333
329−#: qml/Shell.qml:310
334+#: qml/Shell.qml:323
330335msgid "Sorry, incorrect passphrase."
331336msgstr ""
332337
333−#: qml/Shell.qml:311
338+#: qml/Shell.qml:324
334339msgid "Sorry, incorrect passcode."
335340msgstr ""
336341
337−#: qml/Shell.qml:312
342+#: qml/Shell.qml:325
338343msgid "This will be your last attempt."
339344msgstr ""
340345
341−#: qml/Shell.qml:314
346+#: qml/Shell.qml:327
342347msgid ""
343348"If passphrase is entered incorrectly, your phone will conduct a factory "
344349"reset and all personal data will be deleted."
345350msgstr ""
346351
347−#: qml/Shell.qml:315
352+#: qml/Shell.qml:328
348353msgid ""
349354"If passcode is entered incorrectly, your phone will conduct a factory reset "
350355"and all personal data will be deleted."
po/br.po+41−43
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-08-26 08:28+0000\n"
1212"Last-Translator: Fohanno Thierry <thierry.fohanno@ofis-bzh.org>\n"
1313"Language-Team: Breton <br@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr "Ger-tremen : "
2323
@@ -32,53 +32,59 @@ msgstr "Dispilhennañ ar verradenn"
3232
3333#: qml/Components/Dialogs.qml:70
3434msgid "Log out"
35−msgstr ""
35+msgstr "Digevreañ"
3636
3737#: qml/Components/Dialogs.qml:71
3838msgid "Are you sure you want to log out?"
39−msgstr ""
39+msgstr "Ha sur oc'h e fell deoc'h digevreañ ?"
4040
4141#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4242#: qml/Components/Dialogs.qml:122
4343msgid "No"
44−msgstr ""
44+msgstr "N'on ket"
4545
4646#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4747#: qml/Components/Dialogs.qml:129
4848msgid "Yes"
49−msgstr ""
49+msgstr "Ya"
5050
5151#: qml/Components/Dialogs.qml:94
5252msgid "Shut down"
53−msgstr ""
53+msgstr "Lazhañ ar benveg"
5454
5555#: qml/Components/Dialogs.qml:95
5656msgid "Are you sure you want to shut down?"
57−msgstr ""
57+msgstr "Ha sur oc'h e fell deoc'h lazhañ ar benveg ?"
5858
5959#: qml/Components/Dialogs.qml:119
6060msgid "Reboot"
61−msgstr ""
61+msgstr "Adloc'hañ"
6262
6363#: qml/Components/Dialogs.qml:120
6464msgid "Are you sure you want to reboot?"
65−msgstr ""
65+msgstr "Ha sur oc'h e fell deoc'h adloc'hañ ?"
6666
6767#: qml/Components/Dialogs.qml:144
6868msgid "Power"
69−msgstr ""
69+msgstr "Tredan"
7070
7171#: qml/Components/Dialogs.qml:145
7272msgid ""
7373"Are you sure you would like\n"
7474"to power off?"
7575msgstr ""
76+"Ha sur oc'h e fell deoc'h\n"
77+"troc'hañ an tredan ?"
7678
77−#: qml/Components/Dialogs.qml:144
79+#: qml/Components/Dialogs.qml:147
7880msgid "Power off"
7981msgstr "Lazhañ"
8082
81−#: qml/Components/Dialogs.qml:162
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
87+#: qml/Components/Dialogs.qml:157
8288msgid "Cancel"
8389msgstr "Nullañ"
8490
@@ -168,21 +174,22 @@ msgstr "Gwelet nebeutoc'h"
168174msgid "See all"
169175msgstr "Gwelet pep tra"
170176
171−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
177+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
178+#: qml/Panel/SearchIndicator.qml:27
172179msgid "Search"
173180msgstr "Klask"
174181
175182#: qml/Dash/PageHeader.qml:270
176183msgid "Settings"
177−msgstr ""
184+msgstr "Arventennoù"
178185
179186#: qml/Dash/PageHeader.qml:279
180187msgid "Remove from Favorites"
181−msgstr ""
188+msgstr "Lemel eus ar sinedoù"
182189
183190#: qml/Dash/PageHeader.qml:279
184191msgid "Add to Favorites"
185−msgstr ""
192+msgstr "Ouzhpennañ d'ar sinedoù"
186193
187194#: qml/Dash/Previews/PreviewActionCombo.qml:34
188195msgid "More..."
@@ -208,11 +215,11 @@ msgstr "Kas"
208215msgid "Manage Dash"
209216msgstr "Merañ an daolenn-vourzh"
210217
211−#: qml/Dash/ScopesOverview.qml:408
218+#: qml/Dash/ScopesOverview.qml:417
212219msgid "Done"
213220msgstr "Graet eo"
214221
215−#: qml/Dash/ScopesOverview.qml:434
222+#: qml/Dash/ScopesOverview.qml:443
216223msgid "Store"
217224msgstr "Enrollañ"
218225
@@ -228,7 +235,7 @@ msgstr "An holl anezho"
228235msgid "Swipe to unlock"
229236msgstr "Riklañ evit dibrennañ"
230237
231−#: qml/Hud/HudParametrizedActionsPage.qml:132
238+#: qml/Hud/HudParametrizedActionsPage.qml:139
232239msgid "Confirm"
233240msgstr "Kadarnaat"
234241
@@ -256,7 +263,7 @@ msgstr "Diskouez ar ger-tremen"
256263msgid "Enter SIM PIN"
257264msgstr "Ebarzhit kod PIN ar gartenn SIM"
258265
259−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
266+#: qml/Notifications/NotificationMenuItemFactory.qml:121
260267msgid "Sorry, incorrect PIN"
261268msgstr "Siwazh, kod PIN direizh"
262269
@@ -300,45 +307,45 @@ msgstr "Dibrennañ ar gartenn SIM"
300307msgid "Roaming"
301308msgstr "O kantren"
302309
303−#: qml/Shell.qml:266
310+#: qml/Shell.qml:279
304311msgid "Enter your passphrase"
305312msgstr "Ebarzhit ho frazenn-dremen"
306313
307−#: qml/Shell.qml:267
314+#: qml/Shell.qml:280
308315msgid "Sorry, incorrect passphrase"
309316msgstr "Siwazh, frazenn-dremen direizh"
310317
311318#: qml/Shell.qml:282
312319msgid "Enter your passcode"
313−msgstr ""
320+msgstr "Ebarzhit ho kod-tremen"
314321
315322#: qml/Shell.qml:283
316323msgid "Sorry, incorrect passcode"
317−msgstr ""
324+msgstr "Digarezit, kod-tremen direizh"
318325
319−#: qml/Shell.qml:273
326+#: qml/Shell.qml:286
320327#, qt-format
321328msgid "Enter your %1"
322329msgstr "Ebarzhit ho %1"
323330
324−#: qml/Shell.qml:274
331+#: qml/Shell.qml:287
325332#, qt-format
326333msgid "Sorry, incorrect %1"
327334msgstr "Siwazh, %1 direizh"
328335
329−#: qml/Shell.qml:310
336+#: qml/Shell.qml:323
330337msgid "Sorry, incorrect passphrase."
331338msgstr "Siwazh, frazenn-dremen direizh"
332339
333−#: qml/Shell.qml:311
340+#: qml/Shell.qml:324
334341msgid "Sorry, incorrect passcode."
335342msgstr "Siwazh, kod-tremen direizh"
336343
337−#: qml/Shell.qml:312
344+#: qml/Shell.qml:325
338345msgid "This will be your last attempt."
339346msgstr "Ho taol-esae diwezhañ e vo."
340347
341−#: qml/Shell.qml:314
348+#: qml/Shell.qml:327
342349msgid ""
343350"If passphrase is entered incorrectly, your phone will conduct a factory "
344351"reset and all personal data will be deleted."
@@ -346,19 +353,10 @@ msgstr ""
346353"Ma vez ebarzhet ur frazenn-dremen direizh, e vo adderaouekaet ho pellgomzer "
347354"gant arventennoù al labouradeg hag e vo diverket an holl roadennoù personel"
348355
349−#: qml/Shell.qml:315
356+#: qml/Shell.qml:328
350357msgid ""
351358"If passcode is entered incorrectly, your phone will conduct a factory reset "
352359"and all personal data will be deleted."
353360msgstr ""
354361"Ma vez ebarzhet ur c'hod-tremen direizh, e vo adderaouekaet ho pellgomzer "
355362"gant arventennoù al labouradeg hag e vo diverket an holl roadennoù personel."
356−
357−#~ msgid "Are you sure you would like to turn power off?"
358−#~ msgstr "Ha sur oc'h e fell deoc'h lazhañ ar benveg ?"
359−
360−#~ msgid "Restart"
361−#~ msgstr "Adloc'hañ"
362−
363−#~ msgid "Enter your PIN"
364−#~ msgstr "Ebarzhit ho kod PIN"
po/bs.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-01-16 22:33+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Bosnian <bs@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -161,7 +165,8 @@ msgstr ""
161165msgid "See all"
162166msgstr ""
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr ""
167172
@@ -201,11 +206,11 @@ msgstr ""
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr ""
211216
@@ -221,7 +226,7 @@ msgstr ""
221226msgid "Swipe to unlock"
222227msgstr ""
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr ""
227232
@@ -249,7 +254,7 @@ msgstr ""
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr ""
293298msgid "Roaming"
294299msgstr ""
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,35 +314,35 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
po/ca.po+13−7
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-09-01 01:01+0000\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11+"PO-Revision-Date: 2014-09-07 04:05+0000\n"
1212"Last-Translator: David Planella <david.planella@ubuntu.com>\n"
1313"Language-Team: Catalan <ca@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-09-01 07:33+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
2020#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
@@ -50,11 +50,11 @@ msgstr "Sí"
5050
5151#: qml/Components/Dialogs.qml:94
5252msgid "Shut down"
53−msgstr ""
53+msgstr "Apaga"
5454
5555#: qml/Components/Dialogs.qml:95
5656msgid "Are you sure you want to shut down?"
57−msgstr ""
57+msgstr "Segur que voleu apagar?"
5858
5959#: qml/Components/Dialogs.qml:119
6060msgid "Reboot"
@@ -73,10 +73,16 @@ msgid ""
7373"Are you sure you would like\n"
7474"to power off?"
7575msgstr ""
76+"Segur que voleu\n"
77+"apagar?"
7678
7779#: qml/Components/Dialogs.qml:147
7880msgid "Power off"
79−msgstr "Apaga'l"
81+msgstr "Apaga"
82+
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
8086
8187#: qml/Components/Dialogs.qml:157
8288msgid "Cancel"
po/ckb.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-01-21 11:05+0000\n"
1212"Last-Translator: Aras <aras.noori@gmail.com>\n"
1313"Language-Team: Kurdish (Sorani) <ckb@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -161,7 +165,8 @@ msgstr ""
161165msgid "See all"
162166msgstr ""
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr "گەڕان"
167172
@@ -201,11 +206,11 @@ msgstr "ناردن"
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr ""
211216
@@ -221,7 +226,7 @@ msgstr ""
221226msgid "Swipe to unlock"
222227msgstr ""
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr "پشتڕاستکردنەوە"
227232
@@ -249,7 +254,7 @@ msgstr "تێپەڕەوشە پیشان بدە"
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr ""
293298msgid "Roaming"
294299msgstr ""
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,35 +314,35 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
po/cs.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-01-08 10:11+0000\n"
1212"Last-Translator: Tadeáš Pařík <tadeas.parik@gmail.com>\n"
1313"Language-Team: Czech <cs@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -161,7 +165,8 @@ msgstr ""
161165msgid "See all"
162166msgstr ""
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr "Hledat"
167172
@@ -201,11 +206,11 @@ msgstr "Odeslat"
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr ""
211216
@@ -221,7 +226,7 @@ msgstr ""
221226msgid "Swipe to unlock"
222227msgstr ""
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr "Potvrdit"
227232
@@ -249,7 +254,7 @@ msgstr "Zobrazit heslo"
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr ""
293298msgid "Roaming"
294299msgstr ""
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,35 +314,35 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
po/da.po+25−20
@@ -8,17 +8,17 @@ msgid ""
88msgstr ""
99"Project-Id-Version: unity8\n"
1010"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
11−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1212"PO-Revision-Date: 2014-07-30 12:37+0000\n"
1313"Last-Translator: Ask Hjorth Larsen <asklarsen@gmail.com>\n"
1414"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
1515"MIME-Version: 1.0\n"
1616"Content-Type: text/plain; charset=UTF-8\n"
1717"Content-Transfer-Encoding: 8bit\n"
18−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
19−"X-Generator: Launchpad (build 17174)\n"
18+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
2020
21−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2222msgid "Password: "
2323msgstr ""
2424
@@ -75,11 +75,15 @@ msgid ""
7575"to power off?"
7676msgstr ""
7777
78−#: qml/Components/Dialogs.qml:144
78+#: qml/Components/Dialogs.qml:147
7979msgid "Power off"
8080msgstr ""
8181
82−#: qml/Components/Dialogs.qml:162
82+#: qml/Components/Dialogs.qml:157
83+msgid "Restart"
84+msgstr ""
85+
86+#: qml/Components/Dialogs.qml:157
8387msgid "Cancel"
8488msgstr ""
8589
@@ -164,7 +168,8 @@ msgstr "Vis mindre"
164168msgid "See all"
165169msgstr "Se alle"
166170
167−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
171+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
172+#: qml/Panel/SearchIndicator.qml:27
168173msgid "Search"
169174msgstr "Søg"
170175
@@ -204,11 +209,11 @@ msgstr "Send"
204209msgid "Manage Dash"
205210msgstr ""
206211
207−#: qml/Dash/ScopesOverview.qml:408
212+#: qml/Dash/ScopesOverview.qml:417
208213msgid "Done"
209214msgstr ""
210215
211−#: qml/Dash/ScopesOverview.qml:434
216+#: qml/Dash/ScopesOverview.qml:443
212217msgid "Store"
213218msgstr ""
214219
@@ -224,7 +229,7 @@ msgstr ""
224229msgid "Swipe to unlock"
225230msgstr "Stryg for at låse op"
226231
227−#: qml/Hud/HudParametrizedActionsPage.qml:132
232+#: qml/Hud/HudParametrizedActionsPage.qml:139
228233msgid "Confirm"
229234msgstr "Bekræft"
230235
@@ -252,7 +257,7 @@ msgstr "Vis adgangskode"
252257msgid "Enter SIM PIN"
253258msgstr ""
254259
255−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
260+#: qml/Notifications/NotificationMenuItemFactory.qml:121
256261msgid "Sorry, incorrect PIN"
257262msgstr ""
258263
@@ -296,11 +301,11 @@ msgstr ""
296301msgid "Roaming"
297302msgstr ""
298303
299−#: qml/Shell.qml:266
304+#: qml/Shell.qml:279
300305msgid "Enter your passphrase"
301306msgstr ""
302307
303−#: qml/Shell.qml:267
308+#: qml/Shell.qml:280
304309msgid "Sorry, incorrect passphrase"
305310msgstr ""
306311
@@ -312,35 +317,35 @@ msgstr ""
312317msgid "Sorry, incorrect passcode"
313318msgstr ""
314319
315−#: qml/Shell.qml:273
320+#: qml/Shell.qml:286
316321#, qt-format
317322msgid "Enter your %1"
318323msgstr ""
319324
320−#: qml/Shell.qml:274
325+#: qml/Shell.qml:287
321326#, qt-format
322327msgid "Sorry, incorrect %1"
323328msgstr ""
324329
325−#: qml/Shell.qml:310
330+#: qml/Shell.qml:323
326331msgid "Sorry, incorrect passphrase."
327332msgstr ""
328333
329−#: qml/Shell.qml:311
334+#: qml/Shell.qml:324
330335msgid "Sorry, incorrect passcode."
331336msgstr ""
332337
333−#: qml/Shell.qml:312
338+#: qml/Shell.qml:325
334339msgid "This will be your last attempt."
335340msgstr ""
336341
337−#: qml/Shell.qml:314
342+#: qml/Shell.qml:327
338343msgid ""
339344"If passphrase is entered incorrectly, your phone will conduct a factory "
340345"reset and all personal data will be deleted."
341346msgstr ""
342347
343−#: qml/Shell.qml:315
348+#: qml/Shell.qml:328
344349msgid ""
345350"If passcode is entered incorrectly, your phone will conduct a factory reset "
346351"and all personal data will be deleted."
po/de.po+14−10
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-29 13:00+0000\n"
12−"Last-Translator: Martin Pitt <martin.pitt@ubuntu.com>\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11+"PO-Revision-Date: 2014-09-19 15:32+0000\n"
12+"Last-Translator: Tobias Bannert <Unknown>\n"
1313"Language-Team: German <de@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-30 07:46+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
2020#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
@@ -36,7 +36,7 @@ msgstr "Abmelden"
3636
3737#: qml/Components/Dialogs.qml:71
3838msgid "Are you sure you want to log out?"
39−msgstr "Sind Sie sicher dass Sie sich abmelden wollen?"
39+msgstr "Sind Sie sicher, dass Sie sich abmelden wollen?"
4040
4141#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4242#: qml/Components/Dialogs.qml:122
@@ -54,7 +54,7 @@ msgstr "Herunterfahren"
5454
5555#: qml/Components/Dialogs.qml:95
5656msgid "Are you sure you want to shut down?"
57−msgstr "Sind Sie sicher dass Sie ausschalten wollen?"
57+msgstr "Sind Sie sicher, dass Sie herunterfahren wollen?"
5858
5959#: qml/Components/Dialogs.qml:119
6060msgid "Reboot"
@@ -62,7 +62,7 @@ msgstr "Neustart"
6262
6363#: qml/Components/Dialogs.qml:120
6464msgid "Are you sure you want to reboot?"
65−msgstr "Sind Sie sicher dass Sie neu starten wollen?"
65+msgstr "Sind Sie sicher, dass Sie neu starten wollen?"
6666
6767#: qml/Components/Dialogs.qml:144
6868msgid "Power"
@@ -73,13 +73,17 @@ msgid ""
7373"Are you sure you would like\n"
7474"to power off?"
7575msgstr ""
76−"Sind Sie sicher dass Sie\n"
77−"ausschalten wollen?"
76+"Sind Sie sicher, dass Sie das\n"
77+"Gerät ausschalten wollen?"
7878
7979#: qml/Components/Dialogs.qml:147
8080msgid "Power off"
8181msgstr "Ausschalten"
8282
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr "Neustarten"
86+
8387#: qml/Components/Dialogs.qml:157
8488msgid "Cancel"
8589msgstr "Abbrechen"
po/el.po+25−23
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-08-21 12:06+0000\n"
1212"Last-Translator: Chris Taklis (aka Kailor) <ctaklis@gmail.com>\n"
1313"Language-Team: Greek <el@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr "Κωδικός πρόσβασης: "
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr "Τερματισμός"
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr "Ακύρωση"
8488
@@ -165,7 +169,8 @@ msgstr "Λιγότερα"
165169msgid "See all"
166170msgstr "Εμφάνιση όλων"
167171
168−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
172+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
173+#: qml/Panel/SearchIndicator.qml:27
169174msgid "Search"
170175msgstr "Αναζήτηση"
171176
@@ -205,11 +210,11 @@ msgstr "Αποστολή"
205210msgid "Manage Dash"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:408
213+#: qml/Dash/ScopesOverview.qml:417
209214msgid "Done"
210215msgstr "Ολοκληρώθηκε"
211216
212−#: qml/Dash/ScopesOverview.qml:434
217+#: qml/Dash/ScopesOverview.qml:443
213218msgid "Store"
214219msgstr "Κατάστημα"
215220
@@ -225,7 +230,7 @@ msgstr "Όλα"
225230msgid "Swipe to unlock"
226231msgstr "Σύρετε για να ξεκλειδώσετε"
227232
228−#: qml/Hud/HudParametrizedActionsPage.qml:132
233+#: qml/Hud/HudParametrizedActionsPage.qml:139
229234msgid "Confirm"
230235msgstr "Επιβεβαίωση"
231236
@@ -253,7 +258,7 @@ msgstr "Εμφάνιση κωδικού"
253258msgid "Enter SIM PIN"
254259msgstr ""
255260
256−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
261+#: qml/Notifications/NotificationMenuItemFactory.qml:121
257262msgid "Sorry, incorrect PIN"
258263msgstr ""
259264
@@ -297,11 +302,11 @@ msgstr "Ξεκλείδωμα SIM"
297302msgid "Roaming"
298303msgstr "Περιαγωγή"
299304
300−#: qml/Shell.qml:266
305+#: qml/Shell.qml:279
301306msgid "Enter your passphrase"
302307msgstr ""
303308
304−#: qml/Shell.qml:267
309+#: qml/Shell.qml:280
305310msgid "Sorry, incorrect passphrase"
306311msgstr ""
307312
@@ -313,39 +318,36 @@ msgstr ""
313318msgid "Sorry, incorrect passcode"
314319msgstr ""
315320
316−#: qml/Shell.qml:273
321+#: qml/Shell.qml:286
317322#, qt-format
318323msgid "Enter your %1"
319324msgstr "Εισάγετε το %1"
320325
321−#: qml/Shell.qml:274
326+#: qml/Shell.qml:287
322327#, qt-format
323328msgid "Sorry, incorrect %1"
324329msgstr ""
325330
326−#: qml/Shell.qml:310
331+#: qml/Shell.qml:323
327332msgid "Sorry, incorrect passphrase."
328333msgstr ""
329334
330−#: qml/Shell.qml:311
335+#: qml/Shell.qml:324
331336msgid "Sorry, incorrect passcode."
332337msgstr ""
333338
334−#: qml/Shell.qml:312
339+#: qml/Shell.qml:325
335340msgid "This will be your last attempt."
336341msgstr ""
337342
338−#: qml/Shell.qml:314
343+#: qml/Shell.qml:327
339344msgid ""
340345"If passphrase is entered incorrectly, your phone will conduct a factory "
341346"reset and all personal data will be deleted."
342347msgstr ""
343348
344−#: qml/Shell.qml:315
349+#: qml/Shell.qml:328
345350msgid ""
346351"If passcode is entered incorrectly, your phone will conduct a factory reset "
347352"and all personal data will be deleted."
348353msgstr ""
349−
350−#~ msgid "Restart"
351−#~ msgstr "Επανεκκίνηση"
po/en_AU.po+7−3
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-08-31 11:20+0000\n"
1212"Last-Translator: Jared Norris <jarednorris@ubuntu.com>\n"
1313"Language-Team: English (Australia) <en_AU@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-09-01 07:33+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
2020#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
@@ -80,6 +80,10 @@ msgstr ""
8080msgid "Power off"
8181msgstr "Power off"
8282
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
8387#: qml/Components/Dialogs.qml:157
8488msgid "Cancel"
8589msgstr "Cancel"
po/en_GB.po+42−44
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-08-23 13:48+0000\n"
12−"Last-Translator: Alan Pope ㋛ <alan@ubuntu.com>\n"
12+"Last-Translator: Alan Pope ( ͡°╭͜ʖ╮͡° ) <alan@ubuntu.com>\n"
1313"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr "Password: "
2323
@@ -32,53 +32,59 @@ msgstr "Unpin shortcut"
3232
3333#: qml/Components/Dialogs.qml:70
3434msgid "Log out"
35−msgstr ""
35+msgstr "Log out"
3636
3737#: qml/Components/Dialogs.qml:71
3838msgid "Are you sure you want to log out?"
39−msgstr ""
39+msgstr "Are you sure you want to log out?"
4040
4141#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4242#: qml/Components/Dialogs.qml:122
4343msgid "No"
44−msgstr ""
44+msgstr "No"
4545
4646#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4747#: qml/Components/Dialogs.qml:129
4848msgid "Yes"
49−msgstr ""
49+msgstr "Yes"
5050
5151#: qml/Components/Dialogs.qml:94
5252msgid "Shut down"
53−msgstr ""
53+msgstr "Shut down"
5454
5555#: qml/Components/Dialogs.qml:95
5656msgid "Are you sure you want to shut down?"
57−msgstr ""
57+msgstr "Are you sure you want to shut down?"
5858
5959#: qml/Components/Dialogs.qml:119
6060msgid "Reboot"
61−msgstr ""
61+msgstr "Reboot"
6262
6363#: qml/Components/Dialogs.qml:120
6464msgid "Are you sure you want to reboot?"
65−msgstr ""
65+msgstr "Are you sure you want to reboot?"
6666
6767#: qml/Components/Dialogs.qml:144
6868msgid "Power"
69−msgstr ""
69+msgstr "Power"
7070
7171#: qml/Components/Dialogs.qml:145
7272msgid ""
7373"Are you sure you would like\n"
7474"to power off?"
7575msgstr ""
76+"Are you sure you would like\n"
77+"to power off?"
7678
77−#: qml/Components/Dialogs.qml:144
79+#: qml/Components/Dialogs.qml:147
7880msgid "Power off"
7981msgstr "Power off"
8082
81−#: qml/Components/Dialogs.qml:162
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr "Restart"
86+
87+#: qml/Components/Dialogs.qml:157
8288msgid "Cancel"
8389msgstr "Cancel"
8490
@@ -163,21 +169,22 @@ msgstr "See less"
163169msgid "See all"
164170msgstr "See all"
165171
166−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
172+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
173+#: qml/Panel/SearchIndicator.qml:27
167174msgid "Search"
168175msgstr "Search"
169176
170177#: qml/Dash/PageHeader.qml:270
171178msgid "Settings"
172−msgstr ""
179+msgstr "Settings"
173180
174181#: qml/Dash/PageHeader.qml:279
175182msgid "Remove from Favorites"
176−msgstr ""
183+msgstr "Remove from Favourites"
177184
178185#: qml/Dash/PageHeader.qml:279
179186msgid "Add to Favorites"
180−msgstr ""
187+msgstr "Add to Favourites"
181188
182189#: qml/Dash/Previews/PreviewActionCombo.qml:34
183190msgid "More..."
@@ -203,11 +210,11 @@ msgstr "Send"
203210msgid "Manage Dash"
204211msgstr "Manage Dash"
205212
206−#: qml/Dash/ScopesOverview.qml:408
213+#: qml/Dash/ScopesOverview.qml:417
207214msgid "Done"
208215msgstr "Done"
209216
210−#: qml/Dash/ScopesOverview.qml:434
217+#: qml/Dash/ScopesOverview.qml:443
211218msgid "Store"
212219msgstr "Store"
213220
@@ -223,7 +230,7 @@ msgstr "All"
223230msgid "Swipe to unlock"
224231msgstr "Swipe to unlock"
225232
226−#: qml/Hud/HudParametrizedActionsPage.qml:132
233+#: qml/Hud/HudParametrizedActionsPage.qml:139
227234msgid "Confirm"
228235msgstr "Confirm"
229236
@@ -251,7 +258,7 @@ msgstr "Show password"
251258msgid "Enter SIM PIN"
252259msgstr "Enter SIM PIN"
253260
254−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
261+#: qml/Notifications/NotificationMenuItemFactory.qml:121
255262msgid "Sorry, incorrect PIN"
256263msgstr "Sorry, incorrect PIN"
257264
@@ -295,45 +302,45 @@ msgstr "Unlock SIM"
295302msgid "Roaming"
296303msgstr "Roaming"
297304
298−#: qml/Shell.qml:266
305+#: qml/Shell.qml:279
299306msgid "Enter your passphrase"
300307msgstr "Enter your passphrase"
301308
302−#: qml/Shell.qml:267
309+#: qml/Shell.qml:280
303310msgid "Sorry, incorrect passphrase"
304311msgstr "Sorry, incorrect passphrase"
305312
306313#: qml/Shell.qml:282
307314msgid "Enter your passcode"
308−msgstr ""
315+msgstr "Enter your passcode"
309316
310317#: qml/Shell.qml:283
311318msgid "Sorry, incorrect passcode"
312−msgstr ""
319+msgstr "Sorry, incorrect passcode"
313320
314−#: qml/Shell.qml:273
321+#: qml/Shell.qml:286
315322#, qt-format
316323msgid "Enter your %1"
317324msgstr "Enter your %1"
318325
319−#: qml/Shell.qml:274
326+#: qml/Shell.qml:287
320327#, qt-format
321328msgid "Sorry, incorrect %1"
322329msgstr "Sorry, incorrect %1"
323330
324−#: qml/Shell.qml:310
331+#: qml/Shell.qml:323
325332msgid "Sorry, incorrect passphrase."
326333msgstr "Sorry, incorrect passphrase."
327334
328−#: qml/Shell.qml:311
335+#: qml/Shell.qml:324
329336msgid "Sorry, incorrect passcode."
330337msgstr "Sorry, incorrect passcode."
331338
332−#: qml/Shell.qml:312
339+#: qml/Shell.qml:325
333340msgid "This will be your last attempt."
334341msgstr "This will be your last attempt."
335342
336−#: qml/Shell.qml:314
343+#: qml/Shell.qml:327
337344msgid ""
338345"If passphrase is entered incorrectly, your phone will conduct a factory "
339346"reset and all personal data will be deleted."
@@ -341,19 +348,10 @@ msgstr ""
341348"If passphrase is entered incorrectly, your phone will conduct a factory "
342349"reset and all personal data will be deleted."
343350
344−#: qml/Shell.qml:315
351+#: qml/Shell.qml:328
345352msgid ""
346353"If passcode is entered incorrectly, your phone will conduct a factory reset "
347354"and all personal data will be deleted."
348355msgstr ""
349356"If passcode is entered incorrectly, your phone will conduct a factory reset "
350357"and all personal data will be deleted."
351−
352−#~ msgid "Are you sure you would like to turn power off?"
353−#~ msgstr "Are you sure you would like to turn power off?"
354−
355−#~ msgid "Restart"
356−#~ msgstr "Restart"
357−
358−#~ msgid "Enter your PIN"
359−#~ msgstr "Enter your PIN"
po/eo.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2013-06-26 22:35+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Esperanto <eo@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -161,7 +165,8 @@ msgstr ""
161165msgid "See all"
162166msgstr ""
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr ""
167172
@@ -201,11 +206,11 @@ msgstr ""
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr ""
211216
@@ -221,7 +226,7 @@ msgstr ""
221226msgid "Swipe to unlock"
222227msgstr ""
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr ""
227232
@@ -249,7 +254,7 @@ msgstr ""
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr ""
293298msgid "Roaming"
294299msgstr ""
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,35 +314,35 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
po/es.po+7−3
@@ -7,14 +7,14 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-09-02 08:16+0000\n"
1212"Last-Translator: Víctor R. Ruiz <Unknown>\n"
1313"Language-Team: Spanish <es@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-09-03 07:05+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
1818"X-Generator: Launchpad (build 17196)\n"
1919
2020#: plugins/LightDM/Greeter.cpp:130
@@ -80,6 +80,10 @@ msgstr ""
8080msgid "Power off"
8181msgstr "Apagar"
8282
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
8387#: qml/Components/Dialogs.qml:157
8488msgid "Cancel"
8589msgstr "Cancelar"
@@ -303,7 +307,7 @@ msgstr "Itinerancia"
303307
304308#: qml/Shell.qml:279
305309msgid "Enter your passphrase"
306−msgstr "Introudzca su contraseña"
310+msgstr "Introduzca su contraseña"
307311
308312#: qml/Shell.qml:280
309313msgid "Sorry, incorrect passphrase"
po/eu.po+8−4
@@ -7,14 +7,14 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-09-02 20:34+0000\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11+"PO-Revision-Date: 2014-09-20 13:13+0000\n"
1212"Last-Translator: Ibai Oihanguren Sala <Unknown>\n"
1313"Language-Team: Basque <eu@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-09-03 07:05+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-21 06:25+0000\n"
1818"X-Generator: Launchpad (build 17196)\n"
1919
2020#: plugins/LightDM/Greeter.cpp:130
@@ -66,7 +66,7 @@ msgstr "Ziur berrabiarazi nahi duzula?"
6666
6767#: qml/Components/Dialogs.qml:144
6868msgid "Power"
69−msgstr "Energia"
69+msgstr "Piztu/itzali"
7070
7171#: qml/Components/Dialogs.qml:145
7272msgid ""
@@ -78,6 +78,10 @@ msgstr "Ziur itzali nahi duzula?"
7878msgid "Power off"
7979msgstr "Itzali"
8080
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr "Berrabiarazi"
84+
8185#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr "Utzi"
po/fa.po+26−27
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-27 20:08+0000\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11+"PO-Revision-Date: 2014-09-21 10:43+0000\n"
1212"Last-Translator: Danial Behzadi <dani.behzi@gmail.com>\n"
1313"Language-Team: Persian <fa@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-22 07:05+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr "گذرواژه: "
2323
@@ -76,11 +76,15 @@ msgstr ""
7676"آیا مطمئن هستید که\n"
7777"می‌خواهید خاموش کنید؟"
7878
79−#: qml/Components/Dialogs.qml:144
79+#: qml/Components/Dialogs.qml:147
8080msgid "Power off"
8181msgstr "خاموش کردن"
8282
83−#: qml/Components/Dialogs.qml:162
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr "شروع مجدّد"
86+
87+#: qml/Components/Dialogs.qml:157
8488msgid "Cancel"
8589msgstr "لغو"
8690
@@ -165,7 +169,8 @@ msgstr "کم‌تر ببینید"
165169msgid "See all"
166170msgstr "دیدن همه"
167171
168−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
172+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
173+#: qml/Panel/SearchIndicator.qml:27
169174msgid "Search"
170175msgstr "جست‌وجو"
171176
@@ -205,11 +210,11 @@ msgstr "ارسال"
205210msgid "Manage Dash"
206211msgstr "مدیریت دش"
207212
208−#: qml/Dash/ScopesOverview.qml:408
213+#: qml/Dash/ScopesOverview.qml:417
209214msgid "Done"
210215msgstr "انجام شد"
211216
212−#: qml/Dash/ScopesOverview.qml:434
217+#: qml/Dash/ScopesOverview.qml:443
213218msgid "Store"
214219msgstr "فروشگاه"
215220
@@ -225,7 +230,7 @@ msgstr "همه"
225230msgid "Swipe to unlock"
226231msgstr "برای باز کردن قفل بکشد"
227232
228−#: qml/Hud/HudParametrizedActionsPage.qml:132
233+#: qml/Hud/HudParametrizedActionsPage.qml:139
229234msgid "Confirm"
230235msgstr "تأیید"
231236
@@ -253,7 +258,7 @@ msgstr "نمایش گذرواژه"
253258msgid "Enter SIM PIN"
254259msgstr "PIN سیم‌کارت را وارد کنید"
255260
256−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
261+#: qml/Notifications/NotificationMenuItemFactory.qml:121
257262msgid "Sorry, incorrect PIN"
258263msgstr "متأسّفیم، PIN نادرست بود"
259264
@@ -297,11 +302,11 @@ msgstr "باز کردن قفل سیم‌کارت"
297302msgid "Roaming"
298303msgstr "رومینگ"
299304
300−#: qml/Shell.qml:266
305+#: qml/Shell.qml:279
301306msgid "Enter your passphrase"
302307msgstr "عبارت‌عبورتان را وارد کنید"
303308
304−#: qml/Shell.qml:267
309+#: qml/Shell.qml:280
305310msgid "Sorry, incorrect passphrase"
306311msgstr "متأسّفیم، عبارت‌عبور نادرست بود"
307312
@@ -313,29 +318,29 @@ msgstr "رمزعبورتان را وارد کنید"
313318msgid "Sorry, incorrect passcode"
314319msgstr "متأسّفیم، رمزعبور نادرست بود"
315320
316−#: qml/Shell.qml:273
321+#: qml/Shell.qml:286
317322#, qt-format
318323msgid "Enter your %1"
319324msgstr "%1 خود را وارد کنید"
320325
321−#: qml/Shell.qml:274
326+#: qml/Shell.qml:287
322327#, qt-format
323328msgid "Sorry, incorrect %1"
324329msgstr "متأسّفیم، %1 نادرست بود"
325330
326−#: qml/Shell.qml:310
331+#: qml/Shell.qml:323
327332msgid "Sorry, incorrect passphrase."
328333msgstr "متأسّفیم، عبارت‌عبور نادرست است."
329334
330−#: qml/Shell.qml:311
335+#: qml/Shell.qml:324
331336msgid "Sorry, incorrect passcode."
332337msgstr "متأسّفیم، رمزعبور نادرست است."
333338
334−#: qml/Shell.qml:312
339+#: qml/Shell.qml:325
335340msgid "This will be your last attempt."
336341msgstr "این آخرین تلاش شما خواهد بود."
337342
338−#: qml/Shell.qml:314
343+#: qml/Shell.qml:327
339344msgid ""
340345"If passphrase is entered incorrectly, your phone will conduct a factory "
341346"reset and all personal data will be deleted."
@@ -343,16 +348,10 @@ msgstr ""
343348"اگر عبارت‌عبور نادرست وارد شود، تلفن شما بازنشانی کارخانه خواهد شد و تمامی "
344349"اطّلاعات شخصی حذف خواهند شد."
345350
346−#: qml/Shell.qml:315
351+#: qml/Shell.qml:328
347352msgid ""
348353"If passcode is entered incorrectly, your phone will conduct a factory reset "
349354"and all personal data will be deleted."
350355msgstr ""
351356"اگر رمزعبور نادرست وارد شود، تلفن شما بازنشانی کارخانه خواهد شد و تمامی "
352357"اطّلاعات شخصی حذف خواهند شد."
353−
354−#~ msgid "Are you sure you would like to turn power off?"
355−#~ msgstr "مطمئنید که می‌خواهید خاموش کنید؟"
356−
357−#~ msgid "Restart"
358−#~ msgstr "شروع مجدّد"
po/fi.po+7−3
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-08-28 13:47+0000\n"
1212"Last-Translator: Timo Jyrinki <timo.jyrinki@canonical.com>\n"
1313"Language-Team: Finnish <fi@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-30 07:46+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
2020#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
@@ -80,6 +80,10 @@ msgstr ""
8080msgid "Power off"
8181msgstr "Sammuta"
8282
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
8387#: qml/Components/Dialogs.qml:157
8488msgid "Cancel"
8589msgstr "Peru"
po/fo.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-01-14 20:08+0000\n"
1212"Last-Translator: Jógvan Olsen <jeggy@jebster.net>\n"
1313"Language-Team: Faroese <fo@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -161,7 +165,8 @@ msgstr ""
161165msgid "See all"
162166msgstr ""
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr "Leita"
167172
@@ -201,11 +206,11 @@ msgstr ""
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr ""
211216
@@ -221,7 +226,7 @@ msgstr ""
221226msgid "Swipe to unlock"
222227msgstr ""
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr "Vátta"
227232
@@ -249,7 +254,7 @@ msgstr ""
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr ""
293298msgid "Roaming"
294299msgstr ""
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,35 +314,35 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
po/fr.po+11−5
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-08-29 10:31+0000\n"
1212"Last-Translator: Sébastien Maes <nautilussebastien@gmail.com>\n"
1313"Language-Team: French <fr@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-30 07:46+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
2020#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
@@ -66,18 +66,24 @@ msgstr "Êtes-vous sûr de vouloir redémarrer ?"
6666
6767#: qml/Components/Dialogs.qml:144
6868msgid "Power"
69−msgstr ""
69+msgstr "Alimentation"
7070
7171#: qml/Components/Dialogs.qml:145
7272msgid ""
7373"Are you sure you would like\n"
7474"to power off?"
7575msgstr ""
76+"Êtes-vous sûr de vouloir\n"
77+"couper l'alimentation ?"
7678
7779#: qml/Components/Dialogs.qml:147
7880msgid "Power off"
7981msgstr "Éteindre"
8082
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
8187#: qml/Components/Dialogs.qml:157
8288msgid "Cancel"
8389msgstr "Annuler"
@@ -217,7 +223,7 @@ msgstr "Terminé"
217223
218224#: qml/Dash/ScopesOverview.qml:443
219225msgid "Store"
220−msgstr ""
226+msgstr "Logithèque"
221227
222228#: qml/Dash/ScopesOverviewTab.qml:36
223229msgid "Favorites"
po/gd.po+62−55
@@ -7,20 +7,20 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-13 00:21+0000\n"
12−"Last-Translator: Akerbeltz <fios@akerbeltz.org>\n"
13−"Language-Team: Fòram na Gàidhlig http://www.foramnagaidhlig.net\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11+"PO-Revision-Date: 2014-09-12 16:34+0000\n"
12+"Last-Translator: GunChleoc <Unknown>\n"
13+"Language-Team: Fòram na Gàidhlig\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919"Language: gd\n"
2020
21−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2222msgid "Password: "
23−msgstr ""
23+msgstr "Facal-faire: "
2424
2525#: plugins/Unity/Launcher/launcheritem.cpp:43
2626#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -33,53 +33,59 @@ msgstr "Neo-phrìnich an ath-ghoirid"
3333
3434#: qml/Components/Dialogs.qml:70
3535msgid "Log out"
36−msgstr ""
36+msgstr "Clàraich a-mach"
3737
3838#: qml/Components/Dialogs.qml:71
3939msgid "Are you sure you want to log out?"
40−msgstr ""
40+msgstr "A bheil thu cinnteach gu bheil thu airson clàradh a-mach?"
4141
4242#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4343#: qml/Components/Dialogs.qml:122
4444msgid "No"
45−msgstr ""
45+msgstr "Chan eil"
4646
4747#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4848#: qml/Components/Dialogs.qml:129
4949msgid "Yes"
50−msgstr ""
50+msgstr "Tha"
5151
5252#: qml/Components/Dialogs.qml:94
5353msgid "Shut down"
54−msgstr ""
54+msgstr "Dùin sìos"
5555
5656#: qml/Components/Dialogs.qml:95
5757msgid "Are you sure you want to shut down?"
58−msgstr ""
58+msgstr "A bheil thu cinnteach gu bheil thu airson a dhùnadh sìos?"
5959
6060#: qml/Components/Dialogs.qml:119
6161msgid "Reboot"
62−msgstr ""
62+msgstr "Ath-thòisich an siostam"
6363
6464#: qml/Components/Dialogs.qml:120
6565msgid "Are you sure you want to reboot?"
66−msgstr ""
66+msgstr "A bheil thu cinnteach gu bheil thu airson tòiseachadh às ùr?"
6767
6868#: qml/Components/Dialogs.qml:144
6969msgid "Power"
70−msgstr ""
70+msgstr "Cumhachd"
7171
7272#: qml/Components/Dialogs.qml:145
7373msgid ""
7474"Are you sure you would like\n"
7575"to power off?"
7676msgstr ""
77+"A bheil thu cinnteach gu bheil thu\n"
78+"airson a' chumhachd a chur dheth?"
7779
78−#: qml/Components/Dialogs.qml:144
80+#: qml/Components/Dialogs.qml:147
7981msgid "Power off"
8082msgstr "Cuir a' chumhachd dheth"
8183
82−#: qml/Components/Dialogs.qml:162
84+#: qml/Components/Dialogs.qml:157
85+msgid "Restart"
86+msgstr ""
87+
88+#: qml/Components/Dialogs.qml:157
8389msgid "Cancel"
8490msgstr "Sguir dheth"
8591
@@ -139,11 +145,11 @@ msgstr ""
139145
140146#: qml/Components/Lockscreen.qml:167
141147msgid "Please wait"
142−msgstr ""
148+msgstr "Fuirich ort"
143149
144150#: qml/Components/Lockscreen.qml:172
145151msgid "Too many incorrect attempts"
146−msgstr ""
152+msgstr "Cus oidhirpean leis nach do shoirbhich"
147153
148154#: qml/Components/Lockscreen.qml:206
149155msgid "Emergency Call"
@@ -170,21 +176,22 @@ msgstr "Seall nas lugha"
170176msgid "See all"
171177msgstr "Seall na h-uile"
172178
173−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
179+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
180+#: qml/Panel/SearchIndicator.qml:27
174181msgid "Search"
175182msgstr "Lorg"
176183
177184#: qml/Dash/PageHeader.qml:270
178185msgid "Settings"
179−msgstr ""
186+msgstr "Roghainnean"
180187
181188#: qml/Dash/PageHeader.qml:279
182189msgid "Remove from Favorites"
183−msgstr ""
190+msgstr "Thoir air falbh o na h-annsachdan"
184191
185192#: qml/Dash/PageHeader.qml:279
186193msgid "Add to Favorites"
187−msgstr ""
194+msgstr "Cuir ris na h-annsachdan"
188195
189196#: qml/Dash/Previews/PreviewActionCombo.qml:34
190197msgid "More..."
@@ -210,11 +217,11 @@ msgstr "Cuir"
210217msgid "Manage Dash"
211218msgstr "Stiùirich an deas-bhòrd"
212219
213−#: qml/Dash/ScopesOverview.qml:408
220+#: qml/Dash/ScopesOverview.qml:417
214221msgid "Done"
215222msgstr "Deiseil"
216223
217−#: qml/Dash/ScopesOverview.qml:434
224+#: qml/Dash/ScopesOverview.qml:443
218225msgid "Store"
219226msgstr "Am bùth"
220227
@@ -230,7 +237,7 @@ msgstr "Na h-uile"
230237msgid "Swipe to unlock"
231238msgstr "Dèan grad-shlaighdeadh gus a' ghlas a thoirt dheth"
232239
233−#: qml/Hud/HudParametrizedActionsPage.qml:132
240+#: qml/Hud/HudParametrizedActionsPage.qml:139
234241msgid "Confirm"
235242msgstr "Dearbhaich"
236243
@@ -256,11 +263,11 @@ msgstr "Seall am facal-faire"
256263
257264#: qml/Notifications/NotificationMenuItemFactory.qml:120
258265msgid "Enter SIM PIN"
259−msgstr ""
266+msgstr "Cuir a-steach PIN an t-SIM"
260267
261−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
268+#: qml/Notifications/NotificationMenuItemFactory.qml:121
262269msgid "Sorry, incorrect PIN"
263−msgstr ""
270+msgstr "Duilich ach tha a' PIN cearr"
264271
265272#: qml/Panel/ActiveCallHint.qml:77
266273msgid "Tap to return to call..."
@@ -302,58 +309,58 @@ msgstr "Thoir a' ghlas far an SIM"
302309msgid "Roaming"
303310msgstr "Air fàrsan"
304311
305−#: qml/Shell.qml:266
312+#: qml/Shell.qml:279
306313msgid "Enter your passphrase"
307−msgstr ""
314+msgstr "Cuir an abairt-fhaire agad a-steach"
308315
309−#: qml/Shell.qml:267
316+#: qml/Shell.qml:280
310317msgid "Sorry, incorrect passphrase"
311−msgstr ""
318+msgstr "Duilich ach tha an abairt-fhaire cearr"
312319
313320#: qml/Shell.qml:282
314321msgid "Enter your passcode"
315−msgstr ""
322+msgstr "Cuir an còd-faire agad a-steach"
316323
317324#: qml/Shell.qml:283
318325msgid "Sorry, incorrect passcode"
319−msgstr ""
326+msgstr "Duilich ach tha an còd-faire cearr"
320327
321−#: qml/Shell.qml:273
328+#: qml/Shell.qml:286
322329#, qt-format
323330msgid "Enter your %1"
324−msgstr ""
331+msgstr "Cuir a-steach a' %1 agad"
325332
326−#: qml/Shell.qml:274
333+#: qml/Shell.qml:287
327334#, qt-format
328335msgid "Sorry, incorrect %1"
329−msgstr ""
336+msgstr "Duilich ach tha a' %1 cearr"
330337
331−#: qml/Shell.qml:310
338+#: qml/Shell.qml:323
332339msgid "Sorry, incorrect passphrase."
333−msgstr ""
340+msgstr "Duilich ach tha an abairt-fhaire cearr."
334341
335−#: qml/Shell.qml:311
342+#: qml/Shell.qml:324
336343msgid "Sorry, incorrect passcode."
337−msgstr ""
344+msgstr "Duilich ach tha an còd-faire cearr."
338345
339−#: qml/Shell.qml:312
346+#: qml/Shell.qml:325
340347msgid "This will be your last attempt."
341−msgstr ""
348+msgstr "Seo an oidhirp mu dheireadh agad."
342349
343−#: qml/Shell.qml:314
350+#: qml/Shell.qml:327
344351msgid ""
345352"If passphrase is entered incorrectly, your phone will conduct a factory "
346353"reset and all personal data will be deleted."
347354msgstr ""
355+"Ma thèid an abairt-fhaire a chur a-steach mar bu chòir, thèid an fhòn agad a "
356+"ath-shuidheachadh air roghainnean an fhactaraidh agus thèid gach dàta "
357+"pearsanta a sguabadh às."
348358
349−#: qml/Shell.qml:315
359+#: qml/Shell.qml:328
350360msgid ""
351361"If passcode is entered incorrectly, your phone will conduct a factory reset "
352362"and all personal data will be deleted."
353363msgstr ""
354−
355−#~ msgid "Are you sure you would like to turn power off?"
356−#~ msgstr "A bheil thu cinnteach gu bheil thu airson a chur dheth?"
357−
358−#~ msgid "Restart"
359−#~ msgstr "Ath-thòisich"
364+"Ma thèid an còd-faire a chur a-steach mar bu chòir, thèid an fhòn agad a ath-"
365+"shuidheachadh air roghainnean an fhactaraidh agus thèid gach dàta pearsanta "
366+"a sguabadh às."
po/gl.po+41−45
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-22 15:16+0000\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11+"PO-Revision-Date: 2014-09-20 12:08+0000\n"
1212"Last-Translator: Marcos Lans <Unknown>\n"
1313"Language-Team: Galician <gl@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-21 06:25+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr "Contrasinal : "
2323
@@ -32,53 +32,57 @@ msgstr "Eliminar o atallo"
3232
3333#: qml/Components/Dialogs.qml:70
3434msgid "Log out"
35−msgstr ""
35+msgstr "Saír da sesión"
3636
3737#: qml/Components/Dialogs.qml:71
3838msgid "Are you sure you want to log out?"
39−msgstr ""
39+msgstr "Está seguro de querer pechar a sesión?"
4040
4141#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4242#: qml/Components/Dialogs.qml:122
4343msgid "No"
44−msgstr ""
44+msgstr "Non"
4545
4646#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4747#: qml/Components/Dialogs.qml:129
4848msgid "Yes"
49−msgstr ""
49+msgstr "Si"
5050
5151#: qml/Components/Dialogs.qml:94
5252msgid "Shut down"
53−msgstr ""
53+msgstr "Apagar"
5454
5555#: qml/Components/Dialogs.qml:95
5656msgid "Are you sure you want to shut down?"
57−msgstr ""
57+msgstr "Está seguro de querer apagar?"
5858
5959#: qml/Components/Dialogs.qml:119
6060msgid "Reboot"
61−msgstr ""
61+msgstr "Reiniciar"
6262
6363#: qml/Components/Dialogs.qml:120
6464msgid "Are you sure you want to reboot?"
65−msgstr ""
65+msgstr "Está seguro de querer reiniciar?"
6666
6767#: qml/Components/Dialogs.qml:144
6868msgid "Power"
69−msgstr ""
69+msgstr "Enerxía"
7070
7171#: qml/Components/Dialogs.qml:145
7272msgid ""
7373"Are you sure you would like\n"
7474"to power off?"
75−msgstr ""
75+msgstr "Está seguro de querer apagar?"
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr "Apagar"
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr "Reiniciar"
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr "Cancelar"
8488
@@ -165,21 +169,22 @@ msgstr "Ver menos"
165169msgid "See all"
166170msgstr "Ver todo"
167171
168−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
172+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
173+#: qml/Panel/SearchIndicator.qml:27
169174msgid "Search"
170175msgstr "Buscar"
171176
172177#: qml/Dash/PageHeader.qml:270
173178msgid "Settings"
174−msgstr ""
179+msgstr "Axustes"
175180
176181#: qml/Dash/PageHeader.qml:279
177182msgid "Remove from Favorites"
178−msgstr ""
183+msgstr "Eliminar dos favoritos"
179184
180185#: qml/Dash/PageHeader.qml:279
181186msgid "Add to Favorites"
182−msgstr ""
187+msgstr "Engadir aos favoritos"
183188
184189#: qml/Dash/Previews/PreviewActionCombo.qml:34
185190msgid "More..."
@@ -205,11 +210,11 @@ msgstr "Enviar"
205210msgid "Manage Dash"
206211msgstr "Xestión do Panel"
207212
208−#: qml/Dash/ScopesOverview.qml:408
213+#: qml/Dash/ScopesOverview.qml:417
209214msgid "Done"
210215msgstr "Feito"
211216
212−#: qml/Dash/ScopesOverview.qml:434
217+#: qml/Dash/ScopesOverview.qml:443
213218msgid "Store"
214219msgstr "Tenda"
215220
@@ -225,7 +230,7 @@ msgstr "Todos"
225230msgid "Swipe to unlock"
226231msgstr "Esvare o dedo para desbloquear"
227232
228−#: qml/Hud/HudParametrizedActionsPage.qml:132
233+#: qml/Hud/HudParametrizedActionsPage.qml:139
229234msgid "Confirm"
230235msgstr "Confirmar"
231236
@@ -253,7 +258,7 @@ msgstr "Mostrar contrasinal"
253258msgid "Enter SIM PIN"
254259msgstr "Introduza o PIN da SIM"
255260
256−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
261+#: qml/Notifications/NotificationMenuItemFactory.qml:121
257262msgid "Sorry, incorrect PIN"
258263msgstr "Sentímolo, o PIN é incorrecto"
259264
@@ -297,45 +302,45 @@ msgstr "Desbloquear a SIM"
297302msgid "Roaming"
298303msgstr "Itinerancia"
299304
300−#: qml/Shell.qml:266
305+#: qml/Shell.qml:279
301306msgid "Enter your passphrase"
302307msgstr "Introduza a frase de paso"
303308
304−#: qml/Shell.qml:267
309+#: qml/Shell.qml:280
305310msgid "Sorry, incorrect passphrase"
306311msgstr "Sentímolo a frase é incorrecta"
307312
308313#: qml/Shell.qml:282
309314msgid "Enter your passcode"
310−msgstr ""
315+msgstr "Introduza a clave"
311316
312317#: qml/Shell.qml:283
313318msgid "Sorry, incorrect passcode"
314−msgstr ""
319+msgstr "Sentímolo, a clave é incorrecta"
315320
316−#: qml/Shell.qml:273
321+#: qml/Shell.qml:286
317322#, qt-format
318323msgid "Enter your %1"
319324msgstr "Introducir %1"
320325
321−#: qml/Shell.qml:274
326+#: qml/Shell.qml:287
322327#, qt-format
323328msgid "Sorry, incorrect %1"
324329msgstr "Sentímolo, %1 incorrecto"
325330
326−#: qml/Shell.qml:310
331+#: qml/Shell.qml:323
327332msgid "Sorry, incorrect passphrase."
328333msgstr "Sentímolo é incorrecta."
329334
330−#: qml/Shell.qml:311
335+#: qml/Shell.qml:324
331336msgid "Sorry, incorrect passcode."
332337msgstr "Sentímolo, a clave é incorrecta."
333338
334−#: qml/Shell.qml:312
339+#: qml/Shell.qml:325
335340msgid "This will be your last attempt."
336341msgstr "Este será o seu último intento."
337342
338−#: qml/Shell.qml:314
343+#: qml/Shell.qml:327
339344msgid ""
340345"If passphrase is entered incorrectly, your phone will conduct a factory "
341346"reset and all personal data will be deleted."
@@ -343,19 +348,10 @@ msgstr ""
343348"Se a frase de paso introducida é incorrecta, o teléfono restabelecerá os "
344349"valores de fábrica e perderá todos os datos persoais."
345350
346−#: qml/Shell.qml:315
351+#: qml/Shell.qml:328
347352msgid ""
348353"If passcode is entered incorrectly, your phone will conduct a factory reset "
349354"and all personal data will be deleted."
350355msgstr ""
351356"Se a clave introducida é incorrecta, o teléfono restabelecerá os valores de "
352357"fábrica e perderá todos os datos persoais."
353−
354−#~ msgid "Are you sure you would like to turn power off?"
355−#~ msgstr "Está certo de apagar o aparato?"
356−
357−#~ msgid "Restart"
358−#~ msgstr "Reiniciar"
359−
360−#~ msgid "Enter your PIN"
361−#~ msgstr "Introduza o PIN"
po/he.po+25−26
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-08-23 14:19+0000\n"
1212"Last-Translator: Yaron <sh.yaron@gmail.com>\n"
1313"Language-Team: Hebrew <he@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr "ססמה: "
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr "כיבוי"
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr "ביטול"
8488
@@ -163,7 +167,8 @@ msgstr "לראות פחות"
163167msgid "See all"
164168msgstr "להציג הכול"
165169
166−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
170+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
171+#: qml/Panel/SearchIndicator.qml:27
167172msgid "Search"
168173msgstr "חיפוש"
169174
@@ -203,11 +208,11 @@ msgstr "שליחה"
203208msgid "Manage Dash"
204209msgstr ""
205210
206−#: qml/Dash/ScopesOverview.qml:408
211+#: qml/Dash/ScopesOverview.qml:417
207212msgid "Done"
208213msgstr "סיימתי"
209214
210−#: qml/Dash/ScopesOverview.qml:434
215+#: qml/Dash/ScopesOverview.qml:443
211216msgid "Store"
212217msgstr "אחסון"
213218
@@ -223,7 +228,7 @@ msgstr "הכול"
223228msgid "Swipe to unlock"
224229msgstr "יש להחליק לפתיחה"
225230
226−#: qml/Hud/HudParametrizedActionsPage.qml:132
231+#: qml/Hud/HudParametrizedActionsPage.qml:139
227232msgid "Confirm"
228233msgstr "אישור"
229234
@@ -251,7 +256,7 @@ msgstr "הצגת הססמה"
251256msgid "Enter SIM PIN"
252257msgstr ""
253258
254−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
259+#: qml/Notifications/NotificationMenuItemFactory.qml:121
255260msgid "Sorry, incorrect PIN"
256261msgstr ""
257262
@@ -295,11 +300,11 @@ msgstr ""
295300msgid "Roaming"
296301msgstr "נדידה"
297302
298−#: qml/Shell.qml:266
303+#: qml/Shell.qml:279
299304msgid "Enter your passphrase"
300305msgstr "נא להזין את מילת הצופן שלך"
301306
302−#: qml/Shell.qml:267
307+#: qml/Shell.qml:280
303308msgid "Sorry, incorrect passphrase"
304309msgstr "מילת הצופן שגויה, עמך הסליחה."
305310
@@ -311,42 +316,36 @@ msgstr ""
311316msgid "Sorry, incorrect passcode"
312317msgstr ""
313318
314−#: qml/Shell.qml:273
319+#: qml/Shell.qml:286
315320#, qt-format
316321msgid "Enter your %1"
317322msgstr ""
318323
319−#: qml/Shell.qml:274
324+#: qml/Shell.qml:287
320325#, qt-format
321326msgid "Sorry, incorrect %1"
322327msgstr ""
323328
324−#: qml/Shell.qml:310
329+#: qml/Shell.qml:323
325330msgid "Sorry, incorrect passphrase."
326331msgstr "מילת הצופן שגויה, עמך הסליחה."
327332
328−#: qml/Shell.qml:311
333+#: qml/Shell.qml:324
329334msgid "Sorry, incorrect passcode."
330335msgstr "הצופן שגוי, עם הסליחה."
331336
332−#: qml/Shell.qml:312
337+#: qml/Shell.qml:325
333338msgid "This will be your last attempt."
334339msgstr "זה יהיה הניסיון האחרון שלך."
335340
336−#: qml/Shell.qml:314
341+#: qml/Shell.qml:327
337342msgid ""
338343"If passphrase is entered incorrectly, your phone will conduct a factory "
339344"reset and all personal data will be deleted."
340345msgstr ""
341346
342−#: qml/Shell.qml:315
347+#: qml/Shell.qml:328
343348msgid ""
344349"If passcode is entered incorrectly, your phone will conduct a factory reset "
345350"and all personal data will be deleted."
346351msgstr ""
347−
348−#~ msgid "Restart"
349−#~ msgstr "הפעלה מחדש"
350−
351−#~ msgid "Are you sure you would like to turn power off?"
352−#~ msgstr "האם ברצונך לכבות את המכשיר?"
po/hi.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-01-15 01:49+0000\n"
1212"Last-Translator: Siddhanathan S. <Unknown>\n"
1313"Language-Team: Hindi <hi@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -161,7 +165,8 @@ msgstr ""
161165msgid "See all"
162166msgstr ""
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr "खोजें"
167172
@@ -201,11 +206,11 @@ msgstr "भेजें"
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr ""
211216
@@ -221,7 +226,7 @@ msgstr ""
221226msgid "Swipe to unlock"
222227msgstr ""
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr ""
227232
@@ -249,7 +254,7 @@ msgstr ""
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr ""
293298msgid "Roaming"
294299msgstr ""
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,35 +314,35 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
po/hr.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2013-06-27 04:14+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Croatian <hr@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -161,7 +165,8 @@ msgstr ""
161165msgid "See all"
162166msgstr ""
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr "Pretraživanje"
167172
@@ -201,11 +206,11 @@ msgstr ""
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr ""
211216
@@ -221,7 +226,7 @@ msgstr ""
221226msgid "Swipe to unlock"
222227msgstr ""
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr "Potvrdi"
227232
@@ -249,7 +254,7 @@ msgstr ""
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr ""
293298msgid "Roaming"
294299msgstr ""
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,35 +314,35 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
po/hu.po+7−3
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-08-30 08:11+0000\n"
1212"Last-Translator: Richard Somlói <ricsipontaz@gmail.com>\n"
1313"Language-Team: Hungarian <hu@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-31 07:30+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
2020#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
@@ -80,6 +80,10 @@ msgstr ""
8080msgid "Power off"
8181msgstr "Kikapcsolás"
8282
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
8387#: qml/Components/Dialogs.qml:157
8488msgid "Cancel"
8589msgstr "Mégse"
po/hy.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2013-06-27 04:43+0000\n"
1212"Last-Translator: iAbaS <sosabazyan@yandex.ru>\n"
1313"Language-Team: Armenian <hy@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -161,7 +165,8 @@ msgstr ""
161165msgid "See all"
162166msgstr ""
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr "Որոնում"
167172
@@ -201,11 +206,11 @@ msgstr ""
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr ""
211216
@@ -221,7 +226,7 @@ msgstr ""
221226msgid "Swipe to unlock"
222227msgstr ""
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr "Հաստատել"
227232
@@ -249,7 +254,7 @@ msgstr ""
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr ""
293298msgid "Roaming"
294299msgstr ""
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,35 +314,35 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
po/id.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2013-06-26 22:35+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Indonesian <id@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -161,7 +165,8 @@ msgstr ""
161165msgid "See all"
162166msgstr ""
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr ""
167172
@@ -201,11 +206,11 @@ msgstr ""
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr ""
211216
@@ -221,7 +226,7 @@ msgstr ""
221226msgid "Swipe to unlock"
222227msgstr ""
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr ""
227232
@@ -249,7 +254,7 @@ msgstr ""
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr ""
293298msgid "Roaming"
294299msgstr ""
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,35 +314,35 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
po/is.po+46−41
@@ -9,20 +9,20 @@ msgid ""
99msgstr ""
1010"Project-Id-Version: po_unity8-is\n"
1111"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
12−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
13−"PO-Revision-Date: 2014-07-31 16:10+0000\n"
12+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
13+"PO-Revision-Date: 2014-09-21 12:07+0000\n"
1414"Last-Translator: Sveinn í Felli <sv1@fellsnet.is>\n"
1515"Language-Team: Icelandic <translation-team-is@lists.sourceforge.net>\n"
1616"MIME-Version: 1.0\n"
1717"Content-Type: text/plain; charset=UTF-8\n"
1818"Content-Transfer-Encoding: 8bit\n"
19−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
20−"X-Generator: Launchpad (build 17174)\n"
19+"X-Launchpad-Export-Date: 2014-09-22 07:04+0000\n"
20+"X-Generator: Launchpad (build 17196)\n"
2121"Language: is\n"
2222
23−#: plugins/LightDM/Greeter.cpp:129
23+#: plugins/LightDM/Greeter.cpp:130
2424msgid "Password: "
25−msgstr ""
25+msgstr "Lykilorð: "
2626
2727#: plugins/Unity/Launcher/launcheritem.cpp:43
2828#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -35,7 +35,7 @@ msgstr "Losa flýtilykil"
3535
3636#: qml/Components/Dialogs.qml:70
3737msgid "Log out"
38−msgstr ""
38+msgstr "Útskráning"
3939
4040#: qml/Components/Dialogs.qml:71
4141msgid "Are you sure you want to log out?"
@@ -44,16 +44,16 @@ msgstr ""
4444#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4545#: qml/Components/Dialogs.qml:122
4646msgid "No"
47−msgstr ""
47+msgstr "Nei"
4848
4949#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
5050#: qml/Components/Dialogs.qml:129
5151msgid "Yes"
52−msgstr ""
52+msgstr "Já"
5353
5454#: qml/Components/Dialogs.qml:94
5555msgid "Shut down"
56−msgstr ""
56+msgstr "Slökkva á tölvunni"
5757
5858#: qml/Components/Dialogs.qml:95
5959msgid "Are you sure you want to shut down?"
@@ -61,7 +61,7 @@ msgstr ""
6161
6262#: qml/Components/Dialogs.qml:119
6363msgid "Reboot"
64−msgstr ""
64+msgstr "Endurræsa"
6565
6666#: qml/Components/Dialogs.qml:120
6767msgid "Are you sure you want to reboot?"
@@ -69,7 +69,7 @@ msgstr ""
6969
7070#: qml/Components/Dialogs.qml:144
7171msgid "Power"
72−msgstr ""
72+msgstr "Aflstjórnun"
7373
7474#: qml/Components/Dialogs.qml:145
7575msgid ""
@@ -77,13 +77,17 @@ msgid ""
7777"to power off?"
7878msgstr ""
7979
80−#: qml/Components/Dialogs.qml:144
80+#: qml/Components/Dialogs.qml:147
8181msgid "Power off"
82−msgstr ""
82+msgstr "Slökkva"
8383
84−#: qml/Components/Dialogs.qml:162
84+#: qml/Components/Dialogs.qml:157
85+msgid "Restart"
86+msgstr "Endurræsa"
87+
88+#: qml/Components/Dialogs.qml:157
8589msgid "Cancel"
86−msgstr ""
90+msgstr "Hætta við"
8791
8892#: qml/Components/EdgeDemoOverlay.qml:151
8993msgid "Skip intro"
@@ -136,7 +140,7 @@ msgstr ""
136140
137141#: qml/Components/Lockscreen.qml:167
138142msgid "Please wait"
139−msgstr ""
143+msgstr "Bíddu aðeins"
140144
141145#: qml/Components/Lockscreen.qml:172
142146msgid "Too many incorrect attempts"
@@ -167,21 +171,22 @@ msgstr "Sjá minna"
167171msgid "See all"
168172msgstr "Sjá allt"
169173
170−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
174+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
175+#: qml/Panel/SearchIndicator.qml:27
171176msgid "Search"
172177msgstr "Leita"
173178
174179#: qml/Dash/PageHeader.qml:270
175180msgid "Settings"
176−msgstr ""
181+msgstr "Stillingar"
177182
178183#: qml/Dash/PageHeader.qml:279
179184msgid "Remove from Favorites"
180−msgstr ""
185+msgstr "Fjarlægja úr Eftirlæti"
181186
182187#: qml/Dash/PageHeader.qml:279
183188msgid "Add to Favorites"
184−msgstr ""
189+msgstr "Bæta við Eftirlæti"
185190
186191#: qml/Dash/Previews/PreviewActionCombo.qml:34
187192msgid "More..."
@@ -207,27 +212,27 @@ msgstr "Senda"
207212msgid "Manage Dash"
208213msgstr ""
209214
210−#: qml/Dash/ScopesOverview.qml:408
215+#: qml/Dash/ScopesOverview.qml:417
211216msgid "Done"
212−msgstr ""
217+msgstr "Lokið"
213218
214−#: qml/Dash/ScopesOverview.qml:434
219+#: qml/Dash/ScopesOverview.qml:443
215220msgid "Store"
216−msgstr ""
221+msgstr "Geyma"
217222
218223#: qml/Dash/ScopesOverviewTab.qml:36
219224msgid "Favorites"
220−msgstr ""
225+msgstr "Eftirlæti"
221226
222227#: qml/Dash/ScopesOverviewTab.qml:54
223228msgid "All"
224−msgstr ""
229+msgstr "Allt"
225230
226231#: qml/Greeter/Greeter.qml:157
227232msgid "Swipe to unlock"
228233msgstr "Strjúka til að aflæsa"
229234
230−#: qml/Hud/HudParametrizedActionsPage.qml:132
235+#: qml/Hud/HudParametrizedActionsPage.qml:139
231236msgid "Confirm"
232237msgstr "Staðfesta"
233238
@@ -253,11 +258,11 @@ msgstr "Birta lykilorð"
253258
254259#: qml/Notifications/NotificationMenuItemFactory.qml:120
255260msgid "Enter SIM PIN"
256−msgstr ""
261+msgstr "Settu inn PIN-númer SIM-kortsins"
257262
258−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
263+#: qml/Notifications/NotificationMenuItemFactory.qml:121
259264msgid "Sorry, incorrect PIN"
260−msgstr ""
265+msgstr "Því miður, rangt PIN-númer"
261266
262267#: qml/Panel/ActiveCallHint.qml:77
263268msgid "Tap to return to call..."
@@ -293,17 +298,17 @@ msgstr "Mistókst, sláðu létt til að reyna aftur"
293298
294299#: qml/Panel/Indicators/ModemInfoItem.qml:105
295300msgid "Unlock SIM"
296−msgstr ""
301+msgstr "Aflæsa SIM-korti"
297302
298303#: qml/Panel/Indicators/RoamingIndication.qml:27
299304msgid "Roaming"
300305msgstr ""
301306
302−#: qml/Shell.qml:266
307+#: qml/Shell.qml:279
303308msgid "Enter your passphrase"
304309msgstr ""
305310
306−#: qml/Shell.qml:267
311+#: qml/Shell.qml:280
307312msgid "Sorry, incorrect passphrase"
308313msgstr ""
309314
@@ -315,35 +320,35 @@ msgstr ""
315320msgid "Sorry, incorrect passcode"
316321msgstr ""
317322
318−#: qml/Shell.qml:273
323+#: qml/Shell.qml:286
319324#, qt-format
320325msgid "Enter your %1"
321326msgstr ""
322327
323−#: qml/Shell.qml:274
328+#: qml/Shell.qml:287
324329#, qt-format
325330msgid "Sorry, incorrect %1"
326331msgstr ""
327332
328−#: qml/Shell.qml:310
333+#: qml/Shell.qml:323
329334msgid "Sorry, incorrect passphrase."
330335msgstr ""
331336
332−#: qml/Shell.qml:311
337+#: qml/Shell.qml:324
333338msgid "Sorry, incorrect passcode."
334339msgstr ""
335340
336−#: qml/Shell.qml:312
341+#: qml/Shell.qml:325
337342msgid "This will be your last attempt."
338343msgstr ""
339344
340−#: qml/Shell.qml:314
345+#: qml/Shell.qml:327
341346msgid ""
342347"If passphrase is entered incorrectly, your phone will conduct a factory "
343348"reset and all personal data will be deleted."
344349msgstr ""
345350
346−#: qml/Shell.qml:315
351+#: qml/Shell.qml:328
347352msgid ""
348353"If passcode is entered incorrectly, your phone will conduct a factory reset "
349354"and all personal data will be deleted."
po/it.po+7−3
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-08-28 15:31+0000\n"
1212"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>\n"
1313"Language-Team: Italian <it@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-30 07:46+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
2020#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
@@ -80,6 +80,10 @@ msgstr ""
8080msgid "Power off"
8181msgstr "Spegni"
8282
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
8387#: qml/Components/Dialogs.qml:157
8488msgid "Cancel"
8589msgstr "Annulla"
po/ja.po+20−16
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-09-01 06:20+0000\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11+"PO-Revision-Date: 2014-09-18 09:47+0000\n"
1212"Last-Translator: Mitsuya Shibata <mty.shibata@gmail.com>\n"
1313"Language-Team: Japanese <ja@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-09-02 07:20+0000\n"
18−"X-Generator: Launchpad (build 17192)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
2020#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
@@ -36,7 +36,7 @@ msgstr "ログアウト"
3636
3737#: qml/Components/Dialogs.qml:71
3838msgid "Are you sure you want to log out?"
39−msgstr ""
39+msgstr "本当にログアウトしますか?"
4040
4141#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4242#: qml/Components/Dialogs.qml:122
@@ -54,7 +54,7 @@ msgstr "シャットダウン"
5454
5555#: qml/Components/Dialogs.qml:95
5656msgid "Are you sure you want to shut down?"
57−msgstr ""
57+msgstr "本当にシャットダウンしますか?"
5858
5959#: qml/Components/Dialogs.qml:119
6060msgid "Reboot"
@@ -62,22 +62,26 @@ msgstr "再起動"
6262
6363#: qml/Components/Dialogs.qml:120
6464msgid "Are you sure you want to reboot?"
65−msgstr ""
65+msgstr "本当に再起動しますか?"
6666
6767#: qml/Components/Dialogs.qml:144
6868msgid "Power"
69−msgstr ""
69+msgstr "電源"
7070
7171#: qml/Components/Dialogs.qml:145
7272msgid ""
7373"Are you sure you would like\n"
7474"to power off?"
75−msgstr ""
75+msgstr "本当に電源を切りますか?"
7676
7777#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr "電源を切る"
8080
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
8185#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr "キャンセル"
@@ -249,11 +253,11 @@ msgstr "パスワードを表示"
249253
250254#: qml/Notifications/NotificationMenuItemFactory.qml:120
251255msgid "Enter SIM PIN"
252−msgstr ""
256+msgstr "SIM PINの入力"
253257
254258#: qml/Notifications/NotificationMenuItemFactory.qml:121
255259msgid "Sorry, incorrect PIN"
256−msgstr ""
260+msgstr "PINが違います"
257261
258262#: qml/Panel/ActiveCallHint.qml:77
259263msgid "Tap to return to call..."
@@ -297,19 +301,19 @@ msgstr "ローミング"
297301
298302#: qml/Shell.qml:279
299303msgid "Enter your passphrase"
300−msgstr ""
304+msgstr "パスフレーズの入力"
301305
302306#: qml/Shell.qml:280
303307msgid "Sorry, incorrect passphrase"
304−msgstr ""
308+msgstr "パスフレーズが違います"
305309
306310#: qml/Shell.qml:282
307311msgid "Enter your passcode"
308−msgstr ""
312+msgstr "パスコードの入力"
309313
310314#: qml/Shell.qml:283
311315msgid "Sorry, incorrect passcode"
312−msgstr "ごめんなさい、誤ったパスコードです"
316+msgstr "パスコードが違います"
313317
314318#: qml/Shell.qml:286
315319#, qt-format
@@ -319,7 +323,7 @@ msgstr "%1を入力してください"
319323#: qml/Shell.qml:287
320324#, qt-format
321325msgid "Sorry, incorrect %1"
322−msgstr ""
326+msgstr "%1が違います"
323327
324328#: qml/Shell.qml:323
325329msgid "Sorry, incorrect passphrase."
po/km.po+46−45
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-08-20 02:48+0000\n"
1212"Last-Translator: Sok Sophea <sksophea@gmail.com>\n"
1313"Language-Team: Khmer <km@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr "ពាក្យសម្ងាត់៖ "
2323
@@ -32,53 +32,59 @@ msgstr "មិន​ភ្ជាប់ផ្លូវកាត់"
3232
3333#: qml/Components/Dialogs.qml:70
3434msgid "Log out"
35−msgstr ""
35+msgstr "ចេញ"
3636
3737#: qml/Components/Dialogs.qml:71
3838msgid "Are you sure you want to log out?"
39−msgstr ""
39+msgstr "តើ​អ្នក​ពិតជា​ចង់​ចេញ​មែន​ឬ?"
4040
4141#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4242#: qml/Components/Dialogs.qml:122
4343msgid "No"
44−msgstr ""
44+msgstr "ទេ"
4545
4646#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4747#: qml/Components/Dialogs.qml:129
4848msgid "Yes"
49−msgstr ""
49+msgstr "បាទ/ចាស"
5050
5151#: qml/Components/Dialogs.qml:94
5252msgid "Shut down"
53−msgstr ""
53+msgstr "បិទ"
5454
5555#: qml/Components/Dialogs.qml:95
5656msgid "Are you sure you want to shut down?"
57−msgstr ""
57+msgstr "តើ​អ្នក​ពិតជា​ចង់​បិទ​មែន​ឬ?"
5858
5959#: qml/Components/Dialogs.qml:119
6060msgid "Reboot"
61−msgstr ""
61+msgstr "ចាប់ផ្ដើម​ឡើងវិញ"
6262
6363#: qml/Components/Dialogs.qml:120
6464msgid "Are you sure you want to reboot?"
65−msgstr ""
65+msgstr "តើ​អ្នក​ពិតជា​ចង់​ចាប់ផ្ដើម​ឡើងវិញ​មែន​ឬ?"
6666
6767#: qml/Components/Dialogs.qml:144
6868msgid "Power"
69−msgstr ""
69+msgstr "បីទ/បើក"
7070
7171#: qml/Components/Dialogs.qml:145
7272msgid ""
7373"Are you sure you would like\n"
7474"to power off?"
7575msgstr ""
76+"តើ​អ្នក​ពិតជា​ចង់\n"
77+"បិទ​មែន​ឬ?"
7678
77−#: qml/Components/Dialogs.qml:144
79+#: qml/Components/Dialogs.qml:147
7880msgid "Power off"
7981msgstr "បិទ"
8082
81−#: qml/Components/Dialogs.qml:162
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
87+#: qml/Components/Dialogs.qml:157
8288msgid "Cancel"
8389msgstr "បោះបង់"
8490
@@ -165,21 +171,22 @@ msgstr "មើល​តិច​ជាង"
165171msgid "See all"
166172msgstr "មើល​ទាំងអស់"
167173
168−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
174+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
175+#: qml/Panel/SearchIndicator.qml:27
169176msgid "Search"
170177msgstr "ស្វែង​រក"
171178
172179#: qml/Dash/PageHeader.qml:270
173180msgid "Settings"
174−msgstr ""
181+msgstr "ការកំណត់"
175182
176183#: qml/Dash/PageHeader.qml:279
177184msgid "Remove from Favorites"
178−msgstr ""
185+msgstr "យក​ចេញពី​សំណព្វ"
179186
180187#: qml/Dash/PageHeader.qml:279
181188msgid "Add to Favorites"
182−msgstr ""
189+msgstr "បន្ថែម​ទៅ​សណព្វ"
183190
184191#: qml/Dash/Previews/PreviewActionCombo.qml:34
185192msgid "More..."
@@ -205,11 +212,11 @@ msgstr "ផ្ញើ"
205212msgid "Manage Dash"
206213msgstr "គ្រប់គ្រង​ផ្ទាំង"
207214
208−#: qml/Dash/ScopesOverview.qml:408
215+#: qml/Dash/ScopesOverview.qml:417
209216msgid "Done"
210217msgstr "ធ្វើរួច"
211218
212−#: qml/Dash/ScopesOverview.qml:434
219+#: qml/Dash/ScopesOverview.qml:443
213220msgid "Store"
214221msgstr "រក្សាទុក"
215222
@@ -225,7 +232,7 @@ msgstr "ទាំងអស់"
225232msgid "Swipe to unlock"
226233msgstr "អូស​ដើម្បី​ដោះសោ"
227234
228−#: qml/Hud/HudParametrizedActionsPage.qml:132
235+#: qml/Hud/HudParametrizedActionsPage.qml:139
229236msgid "Confirm"
230237msgstr "បញ្ជាក់"
231238
@@ -251,11 +258,11 @@ msgstr "បង្ហាញ​ពាក្យ​សម្ងាត់"
251258
252259#: qml/Notifications/NotificationMenuItemFactory.qml:120
253260msgid "Enter SIM PIN"
254−msgstr ""
261+msgstr "បញ្ចូល​លេខ​កូដ PIN ស៊ីម"
255262
256−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
263+#: qml/Notifications/NotificationMenuItemFactory.qml:121
257264msgid "Sorry, incorrect PIN"
258−msgstr ""
265+msgstr "សូមទោស! លេខ​កូដ PIN មិន​ត្រឹមត្រូវ"
259266
260267#: qml/Panel/ActiveCallHint.qml:77
261268msgid "Tap to return to call..."
@@ -297,45 +304,45 @@ msgstr "ដោះ​សោ​ស៊ីម"
297304msgid "Roaming"
298305msgstr "រ៉ូមីង"
299306
300−#: qml/Shell.qml:266
307+#: qml/Shell.qml:279
301308msgid "Enter your passphrase"
302−msgstr ""
309+msgstr "បញ្ចូល​ឃ្លា​សម្ងាត់​របស់​អ្នក"
303310
304−#: qml/Shell.qml:267
311+#: qml/Shell.qml:280
305312msgid "Sorry, incorrect passphrase"
306−msgstr ""
313+msgstr "សូមទោស! ឃ្លា​សម្ងាត់​មិន​ត្រឹមត្រូវ"
307314
308315#: qml/Shell.qml:282
309316msgid "Enter your passcode"
310−msgstr ""
317+msgstr "បញ្ចូល​កូដ​សម្ងាត់​របស់​អ្នក"
311318
312319#: qml/Shell.qml:283
313320msgid "Sorry, incorrect passcode"
314−msgstr ""
321+msgstr "សូមទោស! កូដ​សម្ងាត់​មិន​ត្រឹមត្រូវ"
315322
316−#: qml/Shell.qml:273
323+#: qml/Shell.qml:286
317324#, qt-format
318325msgid "Enter your %1"
319326msgstr "បញ្ចូល %1 របស់​អ្នក"
320327
321−#: qml/Shell.qml:274
328+#: qml/Shell.qml:287
322329#, qt-format
323330msgid "Sorry, incorrect %1"
324−msgstr ""
331+msgstr "សូមទោស! %1 មិន​ត្រឹមត្រូវ"
325332
326−#: qml/Shell.qml:310
333+#: qml/Shell.qml:323
327334msgid "Sorry, incorrect passphrase."
328335msgstr "សូមទោស! ឃ្លា​សម្ងាត់​មិន​ត្រឹមត្រូវ។"
329336
330−#: qml/Shell.qml:311
337+#: qml/Shell.qml:324
331338msgid "Sorry, incorrect passcode."
332339msgstr "សូមទោស! កូដ​សម្ងាត់​មិន​ត្រឹមត្រូវ។"
333340
334−#: qml/Shell.qml:312
341+#: qml/Shell.qml:325
335342msgid "This will be your last attempt."
336343msgstr "នេះ​គឺ​ការ​ព្យាយាម​លើក​ចុងក្រោយ។"
337344
338−#: qml/Shell.qml:314
345+#: qml/Shell.qml:327
339346msgid ""
340347"If passphrase is entered incorrectly, your phone will conduct a factory "
341348"reset and all personal data will be deleted."
@@ -344,7 +351,7 @@ msgstr ""
344351"ទូរស័ព្ទ​របស់​អ្នក​នឹង​កំណត់​ទៅ​ទិន្នន័យ​ពី​រោងចក្រ​វិញ "
345352"ហើយ​ទិន្នន័យ​ផ្ទាល់ខ្លួន​ទាំងអស់​របស់​អ្នក​នឹង​ត្រូវ​បាន​លុប។"
346353
347−#: qml/Shell.qml:315
354+#: qml/Shell.qml:328
348355msgid ""
349356"If passcode is entered incorrectly, your phone will conduct a factory reset "
350357"and all personal data will be deleted."
@@ -352,9 +359,3 @@ msgstr ""
352359"បើ​បញ្ចូល​កូដ​សម្ងាត់​មិន​ត្រឹមត្រូវ "
353360"ទូរស័ព្ទ​របស់​អ្នក​នឹង​កំណត់​ទៅ​ទិន្នន័យ​ពី​រោងចក្រ​វិញ "
354361"ហើយ​ទិន្នន័យ​ផ្ទាល់ខ្លួន​ទាំងអស់​របស់​អ្នក​នឹង​ត្រូវ​បាន​លុប។"
355−
356−#~ msgid "Are you sure you would like to turn power off?"
357−#~ msgstr "តើ​អ្នក​ពិតជា​ចង់​បិទ​មែន​ឬ?"
358−
359−#~ msgid "Restart"
360−#~ msgstr "ចាប់ផ្ដើម​ឡើងវិញ"
po/kn.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2013-06-27 05:43+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Kannada <kn@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -161,7 +165,8 @@ msgstr ""
161165msgid "See all"
162166msgstr ""
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr "ಹುಡುಕು"
167172
@@ -201,11 +206,11 @@ msgstr ""
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr ""
211216
@@ -221,7 +226,7 @@ msgstr ""
221226msgid "Swipe to unlock"
222227msgstr ""
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr "ಖಚಿತಪಡಿಸು"
227232
@@ -249,7 +254,7 @@ msgstr ""
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr ""
293298msgid "Roaming"
294299msgstr ""
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,35 +314,35 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
po/ko.po+72−76
@@ -7,78 +7,82 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-08-19 13:02+0000\n"
1212"Last-Translator: MinSik CHO <Unknown>\n"
1313"Language-Team: Korean <ko@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
22−msgstr "열쇠글: "
22+msgstr "암호: "
2323
2424#: plugins/Unity/Launcher/launcheritem.cpp:43
2525#: plugins/Unity/Launcher/launcheritem.cpp:73
2626msgid "Pin shortcut"
27−msgstr "바로가기를 고정하기"
27+msgstr "바로 가기를 고정"
2828
2929#: plugins/Unity/Launcher/launcheritem.cpp:73
3030msgid "Unpin shortcut"
31−msgstr "바로가기를 고정 해제하기"
31+msgstr "바로 가기를 고정 해제"
3232
3333#: qml/Components/Dialogs.qml:70
3434msgid "Log out"
35−msgstr ""
35+msgstr "로그아웃"
3636
3737#: qml/Components/Dialogs.qml:71
3838msgid "Are you sure you want to log out?"
39−msgstr ""
39+msgstr "정말 로그아웃하시겠습니까?"
4040
4141#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4242#: qml/Components/Dialogs.qml:122
4343msgid "No"
44−msgstr ""
44+msgstr "아니요"
4545
4646#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4747#: qml/Components/Dialogs.qml:129
4848msgid "Yes"
49−msgstr ""
49+msgstr "예"
5050
5151#: qml/Components/Dialogs.qml:94
5252msgid "Shut down"
53−msgstr ""
53+msgstr "컴퓨터 끄기"
5454
5555#: qml/Components/Dialogs.qml:95
5656msgid "Are you sure you want to shut down?"
57−msgstr ""
57+msgstr "정말 컴퓨터를 끄시겠습니까?"
5858
5959#: qml/Components/Dialogs.qml:119
6060msgid "Reboot"
61−msgstr ""
61+msgstr "다시 시작"
6262
6363#: qml/Components/Dialogs.qml:120
6464msgid "Are you sure you want to reboot?"
65−msgstr ""
65+msgstr "정말 컴퓨터를 다시 시작하시겠습니까?"
6666
6767#: qml/Components/Dialogs.qml:144
6868msgid "Power"
69−msgstr ""
69+msgstr "전원"
7070
7171#: qml/Components/Dialogs.qml:145
7272msgid ""
7373"Are you sure you would like\n"
7474"to power off?"
75−msgstr ""
75+msgstr "정말 컴퓨터를 끄시겠습니까?"
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr "전원 끄기"
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr "취소"
8488
@@ -92,15 +96,15 @@ msgstr "오른쪽 끝"
9296
9397#: qml/Components/EdgeDemo.qml:113
9498msgid "Try swiping from the right edge to unlock the phone"
95−msgstr "휴대 전화를 잠금 해제하려면 오른쪽에서부터 끌어보세요."
99+msgstr "오른쪽 가장자리에서 쓸면 휴대 전화의 잠금을 해제합니다."
96100
97101#: qml/Components/EdgeDemo.qml:144
98102msgid "Top edge"
99−msgstr "윗쪽 끝"
103+msgstr "윗쪽 가장자리"
100104
101105#: qml/Components/EdgeDemo.qml:145
102106msgid "Try swiping from the top edge to access the indicators"
103−msgstr "알림을 보려면 위쪽에서 끌어보세요."
107+msgstr "위쪽 가장자리에서 쓸면 알림에 접근할 수 있습니다."
104108
105109#: qml/Components/EdgeDemo.qml:170
106110msgid "Close"
@@ -108,15 +112,15 @@ msgstr "닫기"
108112
109113#: qml/Components/EdgeDemo.qml:171
110114msgid "Swipe up again to close the settings screen"
111−msgstr "환경설정 창을 닫으려면 위로 다시 끌어보세요."
115+msgstr "위쪽으로 쓸면 설정 화면을 닫습니다."
112116
113117#: qml/Components/EdgeDemo.qml:198
114118msgid "Left edge"
115−msgstr "왼쪽 끝"
119+msgstr "왼쪽 가장자리"
116120
117121#: qml/Components/EdgeDemo.qml:199
118122msgid "Swipe from the left to reveal the launcher for quick access to apps"
119−msgstr "애플리케이션을 빠르게 열기 위해 런처를 보려면 왼쪽에서 끌어보세요."
123+msgstr "왼쪽에서 쓸면 런처를 표시해 프로그램에 빠르게 접근할 수 있습니다."
120124
121125#: qml/Components/EdgeDemo.qml:226
122126msgid "Well done"
@@ -127,8 +131,7 @@ msgid ""
127131"You have now mastered the edge gestures and can start using the "
128132"phone<br><br>Tap on the screen to start"
129133msgstr ""
130−"여러분은 끝에서 끌어오기 제스쳐를 완벽히 익히셨기 때문에 휴대 전화를 사용하기 시작할 수 있습니다. <br><br> 스크린을 터치해서 "
131−"시작하세요."
134+"여러분은 가장자리에서 끌어오기 제스쳐를 완벽히 익히셨고 휴대 전화를 사용할 수 있습니다. <br><br> 스크린을 터치해서 시작하세요."
132135
133136#: qml/Components/Lockscreen.qml:167
134137msgid "Please wait"
@@ -157,27 +160,28 @@ msgstr "안녕하세요"
157160
158161#: qml/Dash/GenericScopeView.qml:361
159162msgid "See less"
160−msgstr "간단히 표시하기"
163+msgstr "간단히 표시"
161164
162165#: qml/Dash/GenericScopeView.qml:361
163166msgid "See all"
164167msgstr "모두 보기"
165168
166−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
169+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
170+#: qml/Panel/SearchIndicator.qml:27
167171msgid "Search"
168172msgstr "검색"
169173
170174#: qml/Dash/PageHeader.qml:270
171175msgid "Settings"
172−msgstr ""
176+msgstr "설정"
173177
174178#: qml/Dash/PageHeader.qml:279
175179msgid "Remove from Favorites"
176−msgstr ""
180+msgstr "즐겨찾기에서 제거"
177181
178182#: qml/Dash/PageHeader.qml:279
179183msgid "Add to Favorites"
180−msgstr ""
184+msgstr "즐겨찾기에 추가"
181185
182186#: qml/Dash/Previews/PreviewActionCombo.qml:34
183187msgid "More..."
@@ -189,11 +193,11 @@ msgstr "간단하게..."
189193
190194#: qml/Dash/Previews/PreviewRatingInput.qml:81
191195msgid "Rate this"
192−msgstr "이 애플리케이션 평가하기"
196+msgstr "이 프로그램 평가"
193197
194198#: qml/Dash/Previews/PreviewRatingInput.qml:126
195199msgid "Add a review"
196−msgstr "평가 제출하기"
200+msgstr "평가 추가"
197201
198202#: qml/Dash/Previews/PreviewRatingInput.qml:166
199203msgid "Send"
@@ -203,11 +207,11 @@ msgstr "보내기"
203207msgid "Manage Dash"
204208msgstr "대시 관리"
205209
206−#: qml/Dash/ScopesOverview.qml:408
210+#: qml/Dash/ScopesOverview.qml:417
207211msgid "Done"
208212msgstr "완료"
209213
210−#: qml/Dash/ScopesOverview.qml:434
214+#: qml/Dash/ScopesOverview.qml:443
211215msgid "Store"
212216msgstr "장터"
213217
@@ -221,9 +225,9 @@ msgstr "모두"
221225
222226#: qml/Greeter/Greeter.qml:157
223227msgid "Swipe to unlock"
224−msgstr "휴대전화를 잠금 해제하려면 움직이세요."
228+msgstr "쓸어서 잠금 해제"
225229
226−#: qml/Hud/HudParametrizedActionsPage.qml:132
230+#: qml/Hud/HudParametrizedActionsPage.qml:139
227231msgid "Confirm"
228232msgstr "확인"
229233
@@ -233,7 +237,7 @@ msgstr "명령을 입력하거나 말하세요."
233237
234238#: qml/Hud/Hud.qml:84
235239msgid "Loading. Please Wait..."
236−msgstr "준비 중.. 잠시만 기다려 주세요..."
240+msgstr "불러오는 중 입니다. 짐시 기다려주십시오..."
237241
238242#: qml/Hud/Hud.qml:89
239243msgid "Speak Now..."
@@ -245,15 +249,15 @@ msgstr "말하는 중..."
245249
246250#: qml/Notifications/NotificationMenuItemFactory.qml:105
247251msgid "Show password"
248−msgstr "비밀 번호 보기"
252+msgstr "암호 표시"
249253
250254#: qml/Notifications/NotificationMenuItemFactory.qml:120
251255msgid "Enter SIM PIN"
252−msgstr ""
256+msgstr "심 카드의 개인 식별 번호 입력"
253257
254−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
258+#: qml/Notifications/NotificationMenuItemFactory.qml:121
255259msgid "Sorry, incorrect PIN"
256−msgstr ""
260+msgstr "죄송합니다. 개인 식별 번호가 올바르지 않습니다."
257261
258262#: qml/Panel/ActiveCallHint.qml:77
259263msgid "Tap to return to call..."
@@ -265,7 +269,7 @@ msgstr "회의"
265269
266270#: qml/Panel/Indicators/MenuItemFactory.qml:651
267271msgid "In queue…"
268−msgstr "재생 중..."
272+msgstr "대기 중..."
269273
270274#: qml/Panel/Indicators/MenuItemFactory.qml:655
271275msgid "Downloading"
@@ -273,82 +277,74 @@ msgstr "다운로드 중"
273277
274278#: qml/Panel/Indicators/MenuItemFactory.qml:657
275279msgid "Paused, tap to resume"
276−msgstr "일시 중지 되었습니다. 계속하려면 누르세요."
280+msgstr "일시 중지하였습니다. 계속하려면 눌러주세요."
277281
278282#: qml/Panel/Indicators/MenuItemFactory.qml:659
279283msgid "Canceled"
280−msgstr "취소됨"
284+msgstr "취소함"
281285
282286#: qml/Panel/Indicators/MenuItemFactory.qml:661
283287msgid "Finished"
284−msgstr "완료됨"
288+msgstr "완료함"
285289
286290#: qml/Panel/Indicators/MenuItemFactory.qml:663
287291msgid "Failed, tap to retry"
288−msgstr "실패하였습니다. 재시도하려면 누르세요."
292+msgstr "실패, 누르면 다시 시도합니다."
289293
290294#: qml/Panel/Indicators/ModemInfoItem.qml:105
291295msgid "Unlock SIM"
292−msgstr "SIM 카드 보안 해제"
296+msgstr "심 카드 잠금 해제"
293297
294298#: qml/Panel/Indicators/RoamingIndication.qml:27
295299msgid "Roaming"
296300msgstr "로밍"
297301
298−#: qml/Shell.qml:266
302+#: qml/Shell.qml:279
299303msgid "Enter your passphrase"
300−msgstr ""
304+msgstr "패스프레이즈를 입력해주십시오."
301305
302−#: qml/Shell.qml:267
306+#: qml/Shell.qml:280
303307msgid "Sorry, incorrect passphrase"
304−msgstr ""
308+msgstr "죄송합니다. 패스프레이즈가 올바르지 않습니다."
305309
306310#: qml/Shell.qml:282
307311msgid "Enter your passcode"
308−msgstr ""
312+msgstr "패스코드를 입력해주십시오."
309313
310314#: qml/Shell.qml:283
311315msgid "Sorry, incorrect passcode"
312−msgstr ""
316+msgstr "죄송합니다. 패스코드가 올바르지 않습니다."
313317
314−#: qml/Shell.qml:273
318+#: qml/Shell.qml:286
315319#, qt-format
316320msgid "Enter your %1"
317−msgstr "%1를 입력하세요"
321+msgstr "%1을(를) 입력해주십시오."
318322
319−#: qml/Shell.qml:274
323+#: qml/Shell.qml:287
320324#, qt-format
321325msgid "Sorry, incorrect %1"
322−msgstr ""
326+msgstr "죄송합니다. %1이(가) 올바르지 않습니다."
323327
324−#: qml/Shell.qml:310
328+#: qml/Shell.qml:323
325329msgid "Sorry, incorrect passphrase."
326−msgstr "잘못된 비밀번호입니다."
330+msgstr "올바르지 않은 패스프레이즈입니다."
327331
328−#: qml/Shell.qml:311
332+#: qml/Shell.qml:324
329333msgid "Sorry, incorrect passcode."
330−msgstr "잘못된 비밀번호입니다."
334+msgstr "최송합니다. 패스코드가 올바르지 않습니다."
331335
332−#: qml/Shell.qml:312
336+#: qml/Shell.qml:325
333337msgid "This will be your last attempt."
334338msgstr "마지막 시도입니다."
335339
336−#: qml/Shell.qml:314
340+#: qml/Shell.qml:327
337341msgid ""
338342"If passphrase is entered incorrectly, your phone will conduct a factory "
339343"reset and all personal data will be deleted."
340−msgstr ""
341−"만약 이번 시도에서 잘못 입력하면, 보안을 위해 휴대 전화가 공장 초기화 과정을 거쳐 모든 사용자 데이터를 삭제할 것입니다."
344+msgstr "이번에도 올바르지 않은 패스프레이즈를 입력하면 휴대 전화를 공장 초기화하여 모든 개인 정보를 삭제합니다."
342345
343−#: qml/Shell.qml:315
346+#: qml/Shell.qml:328
344347msgid ""
345348"If passcode is entered incorrectly, your phone will conduct a factory reset "
346349"and all personal data will be deleted."
347−msgstr ""
348−"만약 이번 시도에서 잘못 입력하면, 보안을 위해 휴대 전화가 공장 초기화 과정을 거쳐 모든 사용자 데이터를 삭제할 것입니다."
349−
350−#~ msgid "Are you sure you would like to turn power off?"
351−#~ msgstr "정말로 전원을 끌까요?"
352−
353−#~ msgid "Restart"
354−#~ msgstr "재시작"
350+msgstr "이번에도 올바르지 않은 패스코드를 입력하면 휴대 전화를 공장 초기화하여 모든 개인 정보를 삭제합니다."
po/ku.ponew file+356
@@ -0,0 +1,356 @@
1+# Kurdish translation for unity8
2+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
3+# This file is distributed under the same license as the unity8 package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity8\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11+"PO-Revision-Date: 2014-09-10 13:14+0000\n"
12+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13+"Language-Team: Kurdish <ku@li.org>\n"
14+"MIME-Version: 1.0\n"
15+"Content-Type: text/plain; charset=UTF-8\n"
16+"Content-Transfer-Encoding: 8bit\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
19+
20+#: plugins/LightDM/Greeter.cpp:130
21+msgid "Password: "
22+msgstr "Şîfre: "
23+
24+#: plugins/Unity/Launcher/launcheritem.cpp:43
25+#: plugins/Unity/Launcher/launcheritem.cpp:73
26+msgid "Pin shortcut"
27+msgstr "Kurteriyê pêveke"
28+
29+#: plugins/Unity/Launcher/launcheritem.cpp:73
30+msgid "Unpin shortcut"
31+msgstr "Derzîdanka kurteriyê rake"
32+
33+#: qml/Components/Dialogs.qml:70
34+msgid "Log out"
35+msgstr "Derkeve"
36+
37+#: qml/Components/Dialogs.qml:71
38+msgid "Are you sure you want to log out?"
39+msgstr "Ji dil dixwazî derkevî?"
40+
41+#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
42+#: qml/Components/Dialogs.qml:122
43+msgid "No"
44+msgstr "Na"
45+
46+#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
47+#: qml/Components/Dialogs.qml:129
48+msgid "Yes"
49+msgstr "Erê"
50+
51+#: qml/Components/Dialogs.qml:94
52+msgid "Shut down"
53+msgstr "Bigire"
54+
55+#: qml/Components/Dialogs.qml:95
56+msgid "Are you sure you want to shut down?"
57+msgstr "Ji dil dixwazî bigirî?"
58+
59+#: qml/Components/Dialogs.qml:119
60+msgid "Reboot"
61+msgstr "Dîsdestpêkirin"
62+
63+#: qml/Components/Dialogs.qml:120
64+msgid "Are you sure you want to reboot?"
65+msgstr "Ji dil dixwazî bidî destpêkirin?"
66+
67+#: qml/Components/Dialogs.qml:144
68+msgid "Power"
69+msgstr "Hêz"
70+
71+#: qml/Components/Dialogs.qml:145
72+msgid ""
73+"Are you sure you would like\n"
74+"to power off?"
75+msgstr ""
76+"Ji dil dixwazî\n"
77+"kompîturê bigirî?"
78+
79+#: qml/Components/Dialogs.qml:147
80+msgid "Power off"
81+msgstr "Bigire"
82+
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
87+#: qml/Components/Dialogs.qml:157
88+msgid "Cancel"
89+msgstr "Betal bike"
90+
91+#: qml/Components/EdgeDemoOverlay.qml:151
92+msgid "Skip intro"
93+msgstr "Danasînê derbas bike"
94+
95+#: qml/Components/EdgeDemo.qml:112
96+msgid "Right edge"
97+msgstr "Kêleka rastê"
98+
99+#: qml/Components/EdgeDemo.qml:113
100+msgid "Try swiping from the right edge to unlock the phone"
101+msgstr "Ji bo kilîdê vekî ji kêleka rastê kaş bike"
102+
103+#: qml/Components/EdgeDemo.qml:144
104+msgid "Top edge"
105+msgstr "Kêleka jorê"
106+
107+#: qml/Components/EdgeDemo.qml:145
108+msgid "Try swiping from the top edge to access the indicators"
109+msgstr "JI bo xwe bigihînî danezanan ji kêleka jorê kaş bike"
110+
111+#: qml/Components/EdgeDemo.qml:170
112+msgid "Close"
113+msgstr "Bigire"
114+
115+#: qml/Components/EdgeDemo.qml:171
116+msgid "Swipe up again to close the settings screen"
117+msgstr "Ji bo girtina ekrana eyaran dîsa bi jorê ve kaş bike"
118+
119+#: qml/Components/EdgeDemo.qml:198
120+msgid "Left edge"
121+msgstr "Kêleka çepê"
122+
123+#: qml/Components/EdgeDemo.qml:199
124+msgid "Swipe from the left to reveal the launcher for quick access to apps"
125+msgstr "Ji bo vekirina gihînera lezgîn ya bernamokan ji kêleka çepê kaş bike"
126+
127+#: qml/Components/EdgeDemo.qml:226
128+msgid "Well done"
129+msgstr "Aferim"
130+
131+#: qml/Components/EdgeDemo.qml:227
132+msgid ""
133+"You have now mastered the edge gestures and can start using the "
134+"phone<br><br>Tap on the screen to start"
135+msgstr ""
136+"Tu tevgerên kêlekê fêr bûyî<br><br>Ji bo destpêkirinê ekranê bipelîne"
137+
138+#: qml/Components/Lockscreen.qml:167
139+msgid "Please wait"
140+msgstr "Tika ye li bendê bimîne"
141+
142+#: qml/Components/Lockscreen.qml:172
143+msgid "Too many incorrect attempts"
144+msgstr "Te gelek caran ceribandinên çewt kirin"
145+
146+#: qml/Components/Lockscreen.qml:206
147+msgid "Emergency Call"
148+msgstr "Lêgerîna Lezgîn"
149+
150+#: qml/Components/Lockscreen.qml:226
151+msgid "OK"
152+msgstr "BAŞ E"
153+
154+#: qml/Components/PassphraseLockscreen.qml:61
155+#, qt-format
156+msgid "Hello %1"
157+msgstr "Silav %1"
158+
159+#: qml/Components/PassphraseLockscreen.qml:61
160+msgid "Hello"
161+msgstr "Silav"
162+
163+#: qml/Dash/GenericScopeView.qml:361
164+msgid "See less"
165+msgstr "Hindiktir bibîne"
166+
167+#: qml/Dash/GenericScopeView.qml:361
168+msgid "See all"
169+msgstr "Tevî bibîne"
170+
171+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
172+#: qml/Panel/SearchIndicator.qml:27
173+msgid "Search"
174+msgstr "Lêgerîn"
175+
176+#: qml/Dash/PageHeader.qml:270
177+msgid "Settings"
178+msgstr "Eyar"
179+
180+#: qml/Dash/PageHeader.qml:279
181+msgid "Remove from Favorites"
182+msgstr "Ji nav Bijareyan rake"
183+
184+#: qml/Dash/PageHeader.qml:279
185+msgid "Add to Favorites"
186+msgstr "Li Bijareyan zêde bike"
187+
188+#: qml/Dash/Previews/PreviewActionCombo.qml:34
189+msgid "More..."
190+msgstr "Zêdetir..."
191+
192+#: qml/Dash/Previews/PreviewActionCombo.qml:34
193+msgid "Less..."
194+msgstr "Hindiktir..."
195+
196+#: qml/Dash/Previews/PreviewRatingInput.qml:81
197+msgid "Rate this"
198+msgstr "Deng bidê"
199+
200+#: qml/Dash/Previews/PreviewRatingInput.qml:126
201+msgid "Add a review"
202+msgstr "Binirxîne"
203+
204+#: qml/Dash/Previews/PreviewRatingInput.qml:166
205+msgid "Send"
206+msgstr "Bişîne"
207+
208+#: qml/Dash/ScopesOverview.qml:201
209+msgid "Manage Dash"
210+msgstr ""
211+
212+#: qml/Dash/ScopesOverview.qml:417
213+msgid "Done"
214+msgstr "Qediya"
215+
216+#: qml/Dash/ScopesOverview.qml:443
217+msgid "Store"
218+msgstr "Firoşgeh"
219+
220+#: qml/Dash/ScopesOverviewTab.qml:36
221+msgid "Favorites"
222+msgstr "Bijare"
223+
224+#: qml/Dash/ScopesOverviewTab.qml:54
225+msgid "All"
226+msgstr "Hemû"
227+
228+#: qml/Greeter/Greeter.qml:157
229+msgid "Swipe to unlock"
230+msgstr "Ji bo vekirinê kaş bike"
231+
232+#: qml/Hud/HudParametrizedActionsPage.qml:139
233+msgid "Confirm"
234+msgstr "Erê bike"
235+
236+#: qml/Hud/Hud.qml:61 qml/Hud/Hud.qml:99 qml/Hud/Hud.qml:372
237+msgid "Type or say a command"
238+msgstr "Fermanekê bêje yan binivîse"
239+
240+#: qml/Hud/Hud.qml:84
241+msgid "Loading. Please Wait..."
242+msgstr "Bar dike. Tika ye li bendê bî..."
243+
244+#: qml/Hud/Hud.qml:89
245+msgid "Speak Now..."
246+msgstr "Niha biaxive..."
247+
248+#: qml/Hud/Hud.qml:94
249+msgid "Speaking..."
250+msgstr "Diaxive..."
251+
252+#: qml/Notifications/NotificationMenuItemFactory.qml:105
253+msgid "Show password"
254+msgstr "Şîfreyê nîşan bide"
255+
256+#: qml/Notifications/NotificationMenuItemFactory.qml:120
257+msgid "Enter SIM PIN"
258+msgstr "PINa SIMê binivîse"
259+
260+#: qml/Notifications/NotificationMenuItemFactory.qml:121
261+msgid "Sorry, incorrect PIN"
262+msgstr "Bibore, PIN çewt e"
263+
264+#: qml/Panel/ActiveCallHint.qml:77
265+msgid "Tap to return to call..."
266+msgstr "Ji bo vegerî lêgerînê bipelîne..."
267+
268+#: qml/Panel/ActiveCallHint.qml:90
269+msgid "Conference"
270+msgstr "Konferans"
271+
272+#: qml/Panel/Indicators/MenuItemFactory.qml:651
273+msgid "In queue…"
274+msgstr "Li bendê ye..."
275+
276+#: qml/Panel/Indicators/MenuItemFactory.qml:655
277+msgid "Downloading"
278+msgstr "Jêbar dibe..."
279+
280+#: qml/Panel/Indicators/MenuItemFactory.qml:657
281+msgid "Paused, tap to resume"
282+msgstr "Hat rawestandin, ji bo dewam bike bipelîne"
283+
284+#: qml/Panel/Indicators/MenuItemFactory.qml:659
285+msgid "Canceled"
286+msgstr "Hat betalkirin"
287+
288+#: qml/Panel/Indicators/MenuItemFactory.qml:661
289+msgid "Finished"
290+msgstr "Qediya"
291+
292+#: qml/Panel/Indicators/MenuItemFactory.qml:663
293+msgid "Failed, tap to retry"
294+msgstr "Bi ser neket, ji bo dewam bike bipelîne"
295+
296+#: qml/Panel/Indicators/ModemInfoItem.qml:105
297+msgid "Unlock SIM"
298+msgstr "Kilîda SIMê veke"
299+
300+#: qml/Panel/Indicators/RoamingIndication.qml:27
301+msgid "Roaming"
302+msgstr "Geriyan"
303+
304+#: qml/Shell.qml:279
305+msgid "Enter your passphrase"
306+msgstr "Parolaya xwe binivîse"
307+
308+#: qml/Shell.qml:280
309+msgid "Sorry, incorrect passphrase"
310+msgstr "Bibore, parola çewt e"
311+
312+#: qml/Shell.qml:282
313+msgid "Enter your passcode"
314+msgstr "Parolaya xwe binivîse"
315+
316+#: qml/Shell.qml:283
317+msgid "Sorry, incorrect passcode"
318+msgstr "Bibore, parola çewrt e"
319+
320+#: qml/Shell.qml:286
321+#, qt-format
322+msgid "Enter your %1"
323+msgstr "%1a xwe binivîse"
324+
325+#: qml/Shell.qml:287
326+#, qt-format
327+msgid "Sorry, incorrect %1"
328+msgstr "Bibore, %1 çewt e"
329+
330+#: qml/Shell.qml:323
331+msgid "Sorry, incorrect passphrase."
332+msgstr "Bibore, parola çewt e."
333+
334+#: qml/Shell.qml:324
335+msgid "Sorry, incorrect passcode."
336+msgstr "Bibore, parola çewt e."
337+
338+#: qml/Shell.qml:325
339+msgid "This will be your last attempt."
340+msgstr "Ev ê ceribandina dawiyê be."
341+
342+#: qml/Shell.qml:327
343+msgid ""
344+"If passphrase is entered incorrectly, your phone will conduct a factory "
345+"reset and all personal data will be deleted."
346+msgstr ""
347+"Eger parola çewt bê nivîsandin, telefona te dê vegere eyarên fabrîkayê û "
348+"hemû daneyên te yên taybet dê bên jêbirin."
349+
350+#: qml/Shell.qml:328
351+msgid ""
352+"If passcode is entered incorrectly, your phone will conduct a factory reset "
353+"and all personal data will be deleted."
354+msgstr ""
355+"Eger parola çewt bê nivîsandin, telefona te dê vegere eyarên fabrîkayê û "
356+"hemû daneyên te yên taybet dê bên jêbirin."
po/ky.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2013-06-27 06:17+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Kirghiz <ky@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -161,7 +165,8 @@ msgstr ""
161165msgid "See all"
162166msgstr ""
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr "Издөө"
167172
@@ -201,11 +206,11 @@ msgstr ""
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr ""
211216
@@ -221,7 +226,7 @@ msgstr ""
221226msgid "Swipe to unlock"
222227msgstr ""
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr "Аныктоо"
227232
@@ -249,7 +254,7 @@ msgstr ""
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr ""
293298msgid "Roaming"
294299msgstr ""
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,35 +314,35 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
po/lo.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2013-10-02 10:00+0000\n"
1212"Last-Translator: Anousak <anousak@gmail.com>\n"
1313"Language-Team: Lao <lo@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -161,7 +165,8 @@ msgstr ""
161165msgid "See all"
162166msgstr ""
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr "ຊອກຫາ"
167172
@@ -201,11 +206,11 @@ msgstr "ສົ່ງ"
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr ""
211216
@@ -221,7 +226,7 @@ msgstr ""
221226msgid "Swipe to unlock"
222227msgstr ""
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr "ຢືນຢັນ"
227232
@@ -249,7 +254,7 @@ msgstr ""
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr ""
293298msgid "Roaming"
294299msgstr ""
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,35 +314,35 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
po/lt.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-05-19 17:15+0000\n"
1212"Last-Translator: Mantas Kriaučiūnas <mantas@akl.lt>\n"
1313"Language-Team: Lithuanian <lt@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -164,7 +168,8 @@ msgstr ""
164168msgid "See all"
165169msgstr ""
166170
167−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
171+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
172+#: qml/Panel/SearchIndicator.qml:27
168173msgid "Search"
169174msgstr "Paieška"
170175
@@ -204,11 +209,11 @@ msgstr "Siųsti"
204209msgid "Manage Dash"
205210msgstr ""
206211
207−#: qml/Dash/ScopesOverview.qml:408
212+#: qml/Dash/ScopesOverview.qml:417
208213msgid "Done"
209214msgstr ""
210215
211−#: qml/Dash/ScopesOverview.qml:434
216+#: qml/Dash/ScopesOverview.qml:443
212217msgid "Store"
213218msgstr ""
214219
@@ -224,7 +229,7 @@ msgstr ""
224229msgid "Swipe to unlock"
225230msgstr "Braukite ir atrakinsite"
226231
227−#: qml/Hud/HudParametrizedActionsPage.qml:132
232+#: qml/Hud/HudParametrizedActionsPage.qml:139
228233msgid "Confirm"
229234msgstr "Patvirtinti"
230235
@@ -252,7 +257,7 @@ msgstr "Rodyti slaptažodį"
252257msgid "Enter SIM PIN"
253258msgstr ""
254259
255−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
260+#: qml/Notifications/NotificationMenuItemFactory.qml:121
256261msgid "Sorry, incorrect PIN"
257262msgstr ""
258263
@@ -296,11 +301,11 @@ msgstr ""
296301msgid "Roaming"
297302msgstr ""
298303
299−#: qml/Shell.qml:266
304+#: qml/Shell.qml:279
300305msgid "Enter your passphrase"
301306msgstr ""
302307
303−#: qml/Shell.qml:267
308+#: qml/Shell.qml:280
304309msgid "Sorry, incorrect passphrase"
305310msgstr ""
306311
@@ -312,35 +317,35 @@ msgstr ""
312317msgid "Sorry, incorrect passcode"
313318msgstr ""
314319
315−#: qml/Shell.qml:273
320+#: qml/Shell.qml:286
316321#, qt-format
317322msgid "Enter your %1"
318323msgstr ""
319324
320−#: qml/Shell.qml:274
325+#: qml/Shell.qml:287
321326#, qt-format
322327msgid "Sorry, incorrect %1"
323328msgstr ""
324329
325−#: qml/Shell.qml:310
330+#: qml/Shell.qml:323
326331msgid "Sorry, incorrect passphrase."
327332msgstr ""
328333
329−#: qml/Shell.qml:311
334+#: qml/Shell.qml:324
330335msgid "Sorry, incorrect passcode."
331336msgstr ""
332337
333−#: qml/Shell.qml:312
338+#: qml/Shell.qml:325
334339msgid "This will be your last attempt."
335340msgstr ""
336341
337−#: qml/Shell.qml:314
342+#: qml/Shell.qml:327
338343msgid ""
339344"If passphrase is entered incorrectly, your phone will conduct a factory "
340345"reset and all personal data will be deleted."
341346msgstr ""
342347
343−#: qml/Shell.qml:315
348+#: qml/Shell.qml:328
344349msgid ""
345350"If passcode is entered incorrectly, your phone will conduct a factory reset "
346351"and all personal data will be deleted."
po/lv.po+35−36
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-08-21 09:46+0000\n"
1212"Last-Translator: Jānis-Marks Gailis <jm-gailis@fai-vianet.fr>\n"
1313"Language-Team: Latvian <lv@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr "Parole: "
2323
@@ -32,7 +32,7 @@ msgstr ""
3232
3333#: qml/Components/Dialogs.qml:70
3434msgid "Log out"
35−msgstr ""
35+msgstr "Iziet"
3636
3737#: qml/Components/Dialogs.qml:71
3838msgid "Are you sure you want to log out?"
@@ -41,16 +41,16 @@ msgstr ""
4141#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4242#: qml/Components/Dialogs.qml:122
4343msgid "No"
44−msgstr ""
44+msgstr "Nē"
4545
4646#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4747#: qml/Components/Dialogs.qml:129
4848msgid "Yes"
49−msgstr ""
49+msgstr "Jā"
5050
5151#: qml/Components/Dialogs.qml:94
5252msgid "Shut down"
53−msgstr ""
53+msgstr "Izslēgt"
5454
5555#: qml/Components/Dialogs.qml:95
5656msgid "Are you sure you want to shut down?"
@@ -58,7 +58,7 @@ msgstr ""
5858
5959#: qml/Components/Dialogs.qml:119
6060msgid "Reboot"
61−msgstr ""
61+msgstr "Pārstartēt"
6262
6363#: qml/Components/Dialogs.qml:120
6464msgid "Are you sure you want to reboot?"
@@ -66,7 +66,7 @@ msgstr ""
6666
6767#: qml/Components/Dialogs.qml:144
6868msgid "Power"
69−msgstr ""
69+msgstr "Barošana"
7070
7171#: qml/Components/Dialogs.qml:145
7272msgid ""
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr "Izslēgt"
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr "Atcelt"
8488
@@ -161,21 +165,22 @@ msgstr "Redzēt mazāk"
161165msgid "See all"
162166msgstr "Skatīt visus"
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr "Meklēt"
167172
168173#: qml/Dash/PageHeader.qml:270
169174msgid "Settings"
170−msgstr ""
175+msgstr "Iestatījumi"
171176
172177#: qml/Dash/PageHeader.qml:279
173178msgid "Remove from Favorites"
174−msgstr ""
179+msgstr "Izņemt no izlases"
175180
176181#: qml/Dash/PageHeader.qml:279
177182msgid "Add to Favorites"
178−msgstr ""
183+msgstr "Pievienot izlasei"
179184
180185#: qml/Dash/Previews/PreviewActionCombo.qml:34
181186msgid "More..."
@@ -201,11 +206,11 @@ msgstr "Sūtīt"
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr "Pabeigts"
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr "Veikals"
211216
@@ -221,7 +226,7 @@ msgstr "Visi"
221226msgid "Swipe to unlock"
222227msgstr ""
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr "Apstiprināt"
227232
@@ -247,9 +252,9 @@ msgstr "Rādīt paroli"
247252
248253#: qml/Notifications/NotificationMenuItemFactory.qml:120
249254msgid "Enter SIM PIN"
250−msgstr ""
255+msgstr "Ievadiet SIM PIN"
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr "Atbloķēt SIM"
293298msgid "Roaming"
294299msgstr "Viesabonēšana"
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,42 +314,36 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr "Ievadiet jūsu %1"
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr "Šīs būs jūs pēdējais mēģinājums."
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
344349msgstr ""
345−
346−#~ msgid "Restart"
347−#~ msgstr "Pārstartēt"
348−
349−#~ msgid "Are you sure you would like to turn power off?"
350−#~ msgstr "Vai esat drošs ka vēlaties izslēgt?"
po/ml.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2013-11-23 11:44+0000\n"
1212"Last-Translator: ST Alfas <Unknown>\n"
1313"Language-Team: Malayalam <ml@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -163,7 +167,8 @@ msgstr ""
163167msgid "See all"
164168msgstr ""
165169
166−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
170+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
171+#: qml/Panel/SearchIndicator.qml:27
167172msgid "Search"
168173msgstr "തിരയുക"
169174
@@ -203,11 +208,11 @@ msgstr "അയയ്‌ക്കുക"
203208msgid "Manage Dash"
204209msgstr ""
205210
206−#: qml/Dash/ScopesOverview.qml:408
211+#: qml/Dash/ScopesOverview.qml:417
207212msgid "Done"
208213msgstr ""
209214
210−#: qml/Dash/ScopesOverview.qml:434
215+#: qml/Dash/ScopesOverview.qml:443
211216msgid "Store"
212217msgstr ""
213218
@@ -223,7 +228,7 @@ msgstr ""
223228msgid "Swipe to unlock"
224229msgstr ""
225230
226−#: qml/Hud/HudParametrizedActionsPage.qml:132
231+#: qml/Hud/HudParametrizedActionsPage.qml:139
227232msgid "Confirm"
228233msgstr "സ്ഥിരീകരിക്കുക"
229234
@@ -251,7 +256,7 @@ msgstr "രഹസ്യവാക്ക് കാണിക്കുക"
251256msgid "Enter SIM PIN"
252257msgstr ""
253258
254−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
259+#: qml/Notifications/NotificationMenuItemFactory.qml:121
255260msgid "Sorry, incorrect PIN"
256261msgstr ""
257262
@@ -295,11 +300,11 @@ msgstr ""
295300msgid "Roaming"
296301msgstr ""
297302
298−#: qml/Shell.qml:266
303+#: qml/Shell.qml:279
299304msgid "Enter your passphrase"
300305msgstr ""
301306
302−#: qml/Shell.qml:267
307+#: qml/Shell.qml:280
303308msgid "Sorry, incorrect passphrase"
304309msgstr ""
305310
@@ -311,35 +316,35 @@ msgstr ""
311316msgid "Sorry, incorrect passcode"
312317msgstr ""
313318
314−#: qml/Shell.qml:273
319+#: qml/Shell.qml:286
315320#, qt-format
316321msgid "Enter your %1"
317322msgstr ""
318323
319−#: qml/Shell.qml:274
324+#: qml/Shell.qml:287
320325#, qt-format
321326msgid "Sorry, incorrect %1"
322327msgstr ""
323328
324−#: qml/Shell.qml:310
329+#: qml/Shell.qml:323
325330msgid "Sorry, incorrect passphrase."
326331msgstr ""
327332
328−#: qml/Shell.qml:311
333+#: qml/Shell.qml:324
329334msgid "Sorry, incorrect passcode."
330335msgstr ""
331336
332−#: qml/Shell.qml:312
337+#: qml/Shell.qml:325
333338msgid "This will be your last attempt."
334339msgstr ""
335340
336−#: qml/Shell.qml:314
341+#: qml/Shell.qml:327
337342msgid ""
338343"If passphrase is entered incorrectly, your phone will conduct a factory "
339344"reset and all personal data will be deleted."
340345msgstr ""
341346
342−#: qml/Shell.qml:315
347+#: qml/Shell.qml:328
343348msgid ""
344349"If passcode is entered incorrectly, your phone will conduct a factory reset "
345350"and all personal data will be deleted."
po/mr.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-01-14 19:54+0000\n"
1212"Last-Translator: Rohan Deshmukh <Unknown>\n"
1313"Language-Team: Marathi <mr@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -161,7 +165,8 @@ msgstr ""
161165msgid "See all"
162166msgstr ""
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr ""
167172
@@ -201,11 +206,11 @@ msgstr ""
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr ""
211216
@@ -221,7 +226,7 @@ msgstr ""
221226msgid "Swipe to unlock"
222227msgstr ""
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr ""
227232
@@ -249,7 +254,7 @@ msgstr ""
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr ""
293298msgid "Roaming"
294299msgstr ""
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,35 +314,35 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
po/ms.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-01-17 09:05+0000\n"
1212"Last-Translator: abuyop <Unknown>\n"
1313"Language-Team: Malay <ms@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -161,7 +165,8 @@ msgstr ""
161165msgid "See all"
162166msgstr ""
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr "Gelintar"
167172
@@ -201,11 +206,11 @@ msgstr "Hantar"
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr ""
211216
@@ -221,7 +226,7 @@ msgstr ""
221226msgid "Swipe to unlock"
222227msgstr ""
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr "Sahkan"
227232
@@ -249,7 +254,7 @@ msgstr "Tunjuk kata laluan"
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr ""
293298msgid "Roaming"
294299msgstr ""
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,35 +314,35 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
po/my.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2013-12-12 11:12+0000\n"
1212"Last-Translator: Pyae Sone <Unknown>\n"
1313"Language-Team: Burmese <my@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -161,7 +165,8 @@ msgstr ""
161165msgid "See all"
162166msgstr ""
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr "ရှာဖွေ"
167172
@@ -201,11 +206,11 @@ msgstr "ပို့မည်"
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr ""
211216
@@ -221,7 +226,7 @@ msgstr ""
221226msgid "Swipe to unlock"
222227msgstr ""
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr "အတည်ပြုပါ"
227232
@@ -249,7 +254,7 @@ msgstr "စကားဝှက်ကိုပြ"
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr ""
293298msgid "Roaming"
294299msgstr ""
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,35 +314,35 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
po/nb.po+8−4
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-28 16:54+0000\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11+"PO-Revision-Date: 2014-09-20 12:02+0000\n"
1212"Last-Translator: Åka Sikrom <Unknown>\n"
1313"Language-Team: Norwegian Bokmal <nb@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-30 07:46+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
17+"X-Launchpad-Export-Date: 2014-09-21 06:25+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
2020#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
@@ -80,6 +80,10 @@ msgstr ""
8080msgid "Power off"
8181msgstr "Slå av"
8282
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr "Start på nytt"
86+
8387#: qml/Components/Dialogs.qml:157
8488msgid "Cancel"
8589msgstr "Avbryt"
po/nl.po+8−4
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-30 18:22+0000\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11+"PO-Revision-Date: 2014-09-19 14:29+0000\n"
1212"Last-Translator: rob <linuxned@gmail.com>\n"
1313"Language-Team: Dutch <nl@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-31 07:30+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
2020#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
@@ -80,6 +80,10 @@ msgstr ""
8080msgid "Power off"
8181msgstr "Uitschakelen"
8282
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr "Herstarten"
86+
8387#: qml/Components/Dialogs.qml:157
8488msgid "Cancel"
8589msgstr "Annuleren"
po/pl.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-08-18 20:25+0000\n"
1212"Last-Translator: Paweł Stroka <pawstr@gmail.com>\n"
1313"Language-Team: Polish <pl@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -165,7 +169,8 @@ msgstr "Zobacz mniej"
165169msgid "See all"
166170msgstr "Zobacz wszystko"
167171
168−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
172+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
173+#: qml/Panel/SearchIndicator.qml:27
169174msgid "Search"
170175msgstr "Szukaj"
171176
@@ -205,11 +210,11 @@ msgstr "Wyślij"
205210msgid "Manage Dash"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:408
213+#: qml/Dash/ScopesOverview.qml:417
209214msgid "Done"
210215msgstr ""
211216
212−#: qml/Dash/ScopesOverview.qml:434
217+#: qml/Dash/ScopesOverview.qml:443
213218msgid "Store"
214219msgstr ""
215220
@@ -225,7 +230,7 @@ msgstr ""
225230msgid "Swipe to unlock"
226231msgstr "Przeciągnij aby odblokować"
227232
228−#: qml/Hud/HudParametrizedActionsPage.qml:132
233+#: qml/Hud/HudParametrizedActionsPage.qml:139
229234msgid "Confirm"
230235msgstr "Potwierdź"
231236
@@ -253,7 +258,7 @@ msgstr "Wyświetl hasło"
253258msgid "Enter SIM PIN"
254259msgstr ""
255260
256−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
261+#: qml/Notifications/NotificationMenuItemFactory.qml:121
257262msgid "Sorry, incorrect PIN"
258263msgstr ""
259264
@@ -297,11 +302,11 @@ msgstr ""
297302msgid "Roaming"
298303msgstr ""
299304
300−#: qml/Shell.qml:266
305+#: qml/Shell.qml:279
301306msgid "Enter your passphrase"
302307msgstr ""
303308
304−#: qml/Shell.qml:267
309+#: qml/Shell.qml:280
305310msgid "Sorry, incorrect passphrase"
306311msgstr ""
307312
@@ -313,35 +318,35 @@ msgstr ""
313318msgid "Sorry, incorrect passcode"
314319msgstr ""
315320
316−#: qml/Shell.qml:273
321+#: qml/Shell.qml:286
317322#, qt-format
318323msgid "Enter your %1"
319324msgstr ""
320325
321−#: qml/Shell.qml:274
326+#: qml/Shell.qml:287
322327#, qt-format
323328msgid "Sorry, incorrect %1"
324329msgstr ""
325330
326−#: qml/Shell.qml:310
331+#: qml/Shell.qml:323
327332msgid "Sorry, incorrect passphrase."
328333msgstr "Niestety, błędne hasło"
329334
330−#: qml/Shell.qml:311
335+#: qml/Shell.qml:324
331336msgid "Sorry, incorrect passcode."
332337msgstr "Niestety, błędny kod"
333338
334−#: qml/Shell.qml:312
339+#: qml/Shell.qml:325
335340msgid "This will be your last attempt."
336341msgstr ""
337342
338−#: qml/Shell.qml:314
343+#: qml/Shell.qml:327
339344msgid ""
340345"If passphrase is entered incorrectly, your phone will conduct a factory "
341346"reset and all personal data will be deleted."
342347msgstr ""
343348
344−#: qml/Shell.qml:315
349+#: qml/Shell.qml:328
345350msgid ""
346351"If passcode is entered incorrectly, your phone will conduct a factory reset "
347352"and all personal data will be deleted."
po/pt.po+8−4
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-29 10:59+0000\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11+"PO-Revision-Date: 2014-09-21 15:26+0000\n"
1212"Last-Translator: Ivo Xavier <ivofernandes12@gmail.com>\n"
1313"Language-Team: Portuguese <pt@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-30 07:46+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
17+"X-Launchpad-Export-Date: 2014-09-22 07:05+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
2020#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
@@ -80,6 +80,10 @@ msgstr ""
8080msgid "Power off"
8181msgstr "Desligar"
8282
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr "Reiniciar"
86+
8387#: qml/Components/Dialogs.qml:157
8488msgid "Cancel"
8589msgstr "Cancelar"
po/pt_BR.po+25−29
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-08-27 19:23+0000\n"
1212"Last-Translator: Rafael Neri <Unknown>\n"
1313"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr "Senha: "
2323
@@ -76,11 +76,15 @@ msgstr ""
7676"Tem certeza que você gostaria \n"
7777"de desligar?"
7878
79−#: qml/Components/Dialogs.qml:144
79+#: qml/Components/Dialogs.qml:147
8080msgid "Power off"
8181msgstr "Desligar"
8282
83−#: qml/Components/Dialogs.qml:162
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
87+#: qml/Components/Dialogs.qml:157
8488msgid "Cancel"
8589msgstr "Cancelar"
8690
@@ -167,7 +171,8 @@ msgstr "Ver menos"
167171msgid "See all"
168172msgstr "Ver todos"
169173
170−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
174+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
175+#: qml/Panel/SearchIndicator.qml:27
171176msgid "Search"
172177msgstr "Pesquisar"
173178
@@ -207,11 +212,11 @@ msgstr "Enviar"
207212msgid "Manage Dash"
208213msgstr "Gerencia painel"
209214
210−#: qml/Dash/ScopesOverview.qml:408
215+#: qml/Dash/ScopesOverview.qml:417
211216msgid "Done"
212217msgstr "Concluído"
213218
214−#: qml/Dash/ScopesOverview.qml:434
219+#: qml/Dash/ScopesOverview.qml:443
215220msgid "Store"
216221msgstr "Loja"
217222
@@ -227,7 +232,7 @@ msgstr "Tudo"
227232msgid "Swipe to unlock"
228233msgstr "Deslizar para desbloquear"
229234
230−#: qml/Hud/HudParametrizedActionsPage.qml:132
235+#: qml/Hud/HudParametrizedActionsPage.qml:139
231236msgid "Confirm"
232237msgstr "Confirmar"
233238
@@ -255,7 +260,7 @@ msgstr "Exibir senha"
255260msgid "Enter SIM PIN"
256261msgstr "Digite o PIN do SIM"
257262
258−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
263+#: qml/Notifications/NotificationMenuItemFactory.qml:121
259264msgid "Sorry, incorrect PIN"
260265msgstr "Desculpe, PIN incorreto"
261266
@@ -299,11 +304,11 @@ msgstr "Desbloquear SIM"
299304msgid "Roaming"
300305msgstr "Roaming"
301306
302−#: qml/Shell.qml:266
307+#: qml/Shell.qml:279
303308msgid "Enter your passphrase"
304309msgstr "Digite sua senha"
305310
306−#: qml/Shell.qml:267
311+#: qml/Shell.qml:280
307312msgid "Sorry, incorrect passphrase"
308313msgstr "Desculpe, senha incorreta"
309314
@@ -315,29 +320,29 @@ msgstr "Digite sua senha"
315320msgid "Sorry, incorrect passcode"
316321msgstr "Desculpe, senha incorreta"
317322
318−#: qml/Shell.qml:273
323+#: qml/Shell.qml:286
319324#, qt-format
320325msgid "Enter your %1"
321326msgstr "Digite o seu %1"
322327
323−#: qml/Shell.qml:274
328+#: qml/Shell.qml:287
324329#, qt-format
325330msgid "Sorry, incorrect %1"
326331msgstr "Desculpe, %1 incorreto"
327332
328−#: qml/Shell.qml:310
333+#: qml/Shell.qml:323
329334msgid "Sorry, incorrect passphrase."
330335msgstr "Desculpe, senha incorreta."
331336
332−#: qml/Shell.qml:311
337+#: qml/Shell.qml:324
333338msgid "Sorry, incorrect passcode."
334339msgstr "Desculpe, código de acesso incorreto."
335340
336−#: qml/Shell.qml:312
341+#: qml/Shell.qml:325
337342msgid "This will be your last attempt."
338343msgstr "Esta será a sua última tentativa."
339344
340−#: qml/Shell.qml:314
345+#: qml/Shell.qml:327
341346msgid ""
342347"If passphrase is entered incorrectly, your phone will conduct a factory "
343348"reset and all personal data will be deleted."
@@ -345,19 +350,10 @@ msgstr ""
345350"Se a senha for digitada incorretamente, o telefone será restaurado aos "
346351"padrões de fábrica e todos os dados pessoais serão apagados."
347352
348−#: qml/Shell.qml:315
353+#: qml/Shell.qml:328
349354msgid ""
350355"If passcode is entered incorrectly, your phone will conduct a factory reset "
351356"and all personal data will be deleted."
352357msgstr ""
353358"Se o código de acesso for digitado incorretamente, o telefone será "
354359"restaurado aos padrões de fábrica e todos os dados pessoais serão apagados."
355−
356−#~ msgid "Restart"
357−#~ msgstr "Reiniciar"
358−
359−#~ msgid "Are you sure you would like to turn power off?"
360−#~ msgstr "Você tem certeza de que deseja desligar?"
361−
362−#~ msgid "Enter your PIN"
363−#~ msgstr "Digite o seu PIN"
po/ro.po+8−4
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-31 09:24+0000\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11+"PO-Revision-Date: 2014-09-20 11:45+0000\n"
1212"Last-Translator: Meriuță Cornel <meriutacornel@neacornel.eu>\n"
1313"Language-Team: Romanian <ro@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-09-01 07:33+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
17+"X-Launchpad-Export-Date: 2014-09-21 06:25+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
2020#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
@@ -80,6 +80,10 @@ msgstr ""
8080msgid "Power off"
8181msgstr "Oprire"
8282
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr "Repornire"
86+
8387#: qml/Components/Dialogs.qml:157
8488msgid "Cancel"
8589msgstr "Anulează"
po/ru.po+7−3
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-08-29 08:06+0000\n"
1212"Last-Translator: Jay ZDLin <Unknown>\n"
1313"Language-Team: Russian <ru@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-30 07:46+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
2020#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
@@ -78,6 +78,10 @@ msgstr "Отключить питание?"
7878msgid "Power off"
7979msgstr "Отключить"
8080
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
8185#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr "Отменить"
po/shn.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2013-10-07 11:46+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Shan <shn@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -161,7 +165,8 @@ msgstr ""
161165msgid "See all"
162166msgstr ""
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr ""
167172
@@ -201,11 +206,11 @@ msgstr ""
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr ""
211216
@@ -221,7 +226,7 @@ msgstr ""
221226msgid "Swipe to unlock"
222227msgstr ""
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr ""
227232
@@ -249,7 +254,7 @@ msgstr ""
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr ""
293298msgid "Roaming"
294299msgstr ""
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,35 +314,35 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
po/si.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2013-06-26 22:36+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Sinhalese <si@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -161,7 +165,8 @@ msgstr ""
161165msgid "See all"
162166msgstr ""
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr ""
167172
@@ -201,11 +206,11 @@ msgstr ""
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr ""
211216
@@ -221,7 +226,7 @@ msgstr ""
221226msgid "Swipe to unlock"
222227msgstr ""
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr ""
227232
@@ -249,7 +254,7 @@ msgstr ""
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr ""
293298msgid "Roaming"
294299msgstr ""
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,35 +314,35 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
po/sl.po+7−3
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-08-28 06:43+0000\n"
1212"Last-Translator: Damir Jerovšek <Unknown>\n"
1313"Language-Team: Slovenian <sl@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-30 07:46+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
2020#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
@@ -80,6 +80,10 @@ msgstr ""
8080msgid "Power off"
8181msgstr "Izklopi"
8282
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
8387#: qml/Components/Dialogs.qml:157
8488msgid "Cancel"
8589msgstr "Prekliči"
po/sq.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-01-15 13:51+0000\n"
1212"Last-Translator: Besmir Zanaj <besmirzanaj@gmail.com>\n"
1313"Language-Team: Albanian <sq@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -162,7 +166,8 @@ msgstr ""
162166msgid "See all"
163167msgstr ""
164168
165−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
169+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
170+#: qml/Panel/SearchIndicator.qml:27
166171msgid "Search"
167172msgstr ""
168173
@@ -202,11 +207,11 @@ msgstr ""
202207msgid "Manage Dash"
203208msgstr ""
204209
205−#: qml/Dash/ScopesOverview.qml:408
210+#: qml/Dash/ScopesOverview.qml:417
206211msgid "Done"
207212msgstr ""
208213
209−#: qml/Dash/ScopesOverview.qml:434
214+#: qml/Dash/ScopesOverview.qml:443
210215msgid "Store"
211216msgstr ""
212217
@@ -222,7 +227,7 @@ msgstr ""
222227msgid "Swipe to unlock"
223228msgstr ""
224229
225−#: qml/Hud/HudParametrizedActionsPage.qml:132
230+#: qml/Hud/HudParametrizedActionsPage.qml:139
226231msgid "Confirm"
227232msgstr ""
228233
@@ -250,7 +255,7 @@ msgstr ""
250255msgid "Enter SIM PIN"
251256msgstr ""
252257
253−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
258+#: qml/Notifications/NotificationMenuItemFactory.qml:121
254259msgid "Sorry, incorrect PIN"
255260msgstr ""
256261
@@ -294,11 +299,11 @@ msgstr ""
294299msgid "Roaming"
295300msgstr ""
296301
297−#: qml/Shell.qml:266
302+#: qml/Shell.qml:279
298303msgid "Enter your passphrase"
299304msgstr ""
300305
301−#: qml/Shell.qml:267
306+#: qml/Shell.qml:280
302307msgid "Sorry, incorrect passphrase"
303308msgstr ""
304309
@@ -310,35 +315,35 @@ msgstr ""
310315msgid "Sorry, incorrect passcode"
311316msgstr ""
312317
313−#: qml/Shell.qml:273
318+#: qml/Shell.qml:286
314319#, qt-format
315320msgid "Enter your %1"
316321msgstr ""
317322
318−#: qml/Shell.qml:274
323+#: qml/Shell.qml:287
319324#, qt-format
320325msgid "Sorry, incorrect %1"
321326msgstr ""
322327
323−#: qml/Shell.qml:310
328+#: qml/Shell.qml:323
324329msgid "Sorry, incorrect passphrase."
325330msgstr ""
326331
327−#: qml/Shell.qml:311
332+#: qml/Shell.qml:324
328333msgid "Sorry, incorrect passcode."
329334msgstr ""
330335
331−#: qml/Shell.qml:312
336+#: qml/Shell.qml:325
332337msgid "This will be your last attempt."
333338msgstr ""
334339
335−#: qml/Shell.qml:314
340+#: qml/Shell.qml:327
336341msgid ""
337342"If passphrase is entered incorrectly, your phone will conduct a factory "
338343"reset and all personal data will be deleted."
339344msgstr ""
340345
341−#: qml/Shell.qml:315
346+#: qml/Shell.qml:328
342347msgid ""
343348"If passcode is entered incorrectly, your phone will conduct a factory reset "
344349"and all personal data will be deleted."
po/sr.po+7−3
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-08-30 11:46+0000\n"
1212"Last-Translator: Данило Шеган <Unknown>\n"
1313"Language-Team: Serbian <sr@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-31 07:30+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
2020#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
@@ -80,6 +80,10 @@ msgstr ""
8080msgid "Power off"
8181msgstr "Искључи"
8282
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
8387#: qml/Components/Dialogs.qml:157
8488msgid "Cancel"
8589msgstr "Откажи"
po/sv.po+60−52
@@ -7,18 +7,18 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-14 18:22+0000\n"
12−"Last-Translator: Erik Simmesgård <Unknown>\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11+"PO-Revision-Date: 2014-09-08 15:57+0000\n"
12+"Last-Translator: Josef Andersson <Unknown>\n"
1313"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919"Language: sv\n"
2020
21−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2222msgid "Password: "
2323msgstr "Lösenord: "
2424
@@ -33,53 +33,59 @@ msgstr "Släpp genväg"
3333
3434#: qml/Components/Dialogs.qml:70
3535msgid "Log out"
36−msgstr ""
36+msgstr "Logga ut"
3737
3838#: qml/Components/Dialogs.qml:71
3939msgid "Are you sure you want to log out?"
40−msgstr ""
40+msgstr "Är du säker på att du vill logga ut?"
4141
4242#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4343#: qml/Components/Dialogs.qml:122
4444msgid "No"
45−msgstr ""
45+msgstr "Nej"
4646
4747#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4848#: qml/Components/Dialogs.qml:129
4949msgid "Yes"
50−msgstr ""
50+msgstr "Ja"
5151
5252#: qml/Components/Dialogs.qml:94
5353msgid "Shut down"
54−msgstr ""
54+msgstr "Stäng av"
5555
5656#: qml/Components/Dialogs.qml:95
5757msgid "Are you sure you want to shut down?"
58−msgstr ""
58+msgstr "Är du säker på att du vill stänga av?"
5959
6060#: qml/Components/Dialogs.qml:119
6161msgid "Reboot"
62−msgstr ""
62+msgstr "Starta om"
6363
6464#: qml/Components/Dialogs.qml:120
6565msgid "Are you sure you want to reboot?"
66−msgstr ""
66+msgstr "Är du säker på att du vill starta om?"
6767
6868#: qml/Components/Dialogs.qml:144
6969msgid "Power"
70−msgstr ""
70+msgstr "Ström"
7171
7272#: qml/Components/Dialogs.qml:145
7373msgid ""
7474"Are you sure you would like\n"
7575"to power off?"
7676msgstr ""
77+"Är du säker på att du vill \n"
78+"stänga av?"
7779
78−#: qml/Components/Dialogs.qml:144
80+#: qml/Components/Dialogs.qml:147
7981msgid "Power off"
82+msgstr "Stäng av"
83+
84+#: qml/Components/Dialogs.qml:157
85+msgid "Restart"
8086msgstr ""
8187
82−#: qml/Components/Dialogs.qml:162
88+#: qml/Components/Dialogs.qml:157
8389msgid "Cancel"
8490msgstr "Avbryt"
8591
@@ -137,7 +143,7 @@ msgstr "Var god vänta"
137143
138144#: qml/Components/Lockscreen.qml:172
139145msgid "Too many incorrect attempts"
140−msgstr ""
146+msgstr "För många felaktiga försök"
141147
142148#: qml/Components/Lockscreen.qml:206
143149msgid "Emergency Call"
@@ -164,21 +170,22 @@ msgstr "Visa mindre"
164170msgid "See all"
165171msgstr "Visa alla"
166172
167−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
173+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
174+#: qml/Panel/SearchIndicator.qml:27
168175msgid "Search"
169176msgstr "Sök"
170177
171178#: qml/Dash/PageHeader.qml:270
172179msgid "Settings"
173−msgstr ""
180+msgstr "Inställningar"
174181
175182#: qml/Dash/PageHeader.qml:279
176183msgid "Remove from Favorites"
177−msgstr ""
184+msgstr "Ta bort från Favoriter"
178185
179186#: qml/Dash/PageHeader.qml:279
180187msgid "Add to Favorites"
181−msgstr ""
188+msgstr "Lägg till Favoriter"
182189
183190#: qml/Dash/Previews/PreviewActionCombo.qml:34
184191msgid "More..."
@@ -202,15 +209,15 @@ msgstr "Skicka"
202209
203210#: qml/Dash/ScopesOverview.qml:201
204211msgid "Manage Dash"
205−msgstr ""
212+msgstr "Hantera Dash"
206213
207−#: qml/Dash/ScopesOverview.qml:408
214+#: qml/Dash/ScopesOverview.qml:417
208215msgid "Done"
209−msgstr ""
216+msgstr "Klar"
210217
211−#: qml/Dash/ScopesOverview.qml:434
218+#: qml/Dash/ScopesOverview.qml:443
212219msgid "Store"
213−msgstr ""
220+msgstr "Butik"
214221
215222#: qml/Dash/ScopesOverviewTab.qml:36
216223msgid "Favorites"
@@ -218,13 +225,13 @@ msgstr "Favoriter"
218225
219226#: qml/Dash/ScopesOverviewTab.qml:54
220227msgid "All"
221−msgstr ""
228+msgstr "Alla"
222229
223230#: qml/Greeter/Greeter.qml:157
224231msgid "Swipe to unlock"
225232msgstr "Svep för att låsa upp"
226233
227−#: qml/Hud/HudParametrizedActionsPage.qml:132
234+#: qml/Hud/HudParametrizedActionsPage.qml:139
228235msgid "Confirm"
229236msgstr "Bekräfta"
230237
@@ -250,11 +257,11 @@ msgstr "Visa lösenord"
250257
251258#: qml/Notifications/NotificationMenuItemFactory.qml:120
252259msgid "Enter SIM PIN"
253−msgstr ""
260+msgstr "Ange SIM PIN-kod"
254261
255−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
262+#: qml/Notifications/NotificationMenuItemFactory.qml:121
256263msgid "Sorry, incorrect PIN"
257−msgstr ""
264+msgstr "Felaktig PIN"
258265
259266#: qml/Panel/ActiveCallHint.qml:77
260267msgid "Tap to return to call..."
@@ -296,55 +303,56 @@ msgstr "Lås upp SIM-kort"
296303msgid "Roaming"
297304msgstr "Roaming"
298305
299−#: qml/Shell.qml:266
306+#: qml/Shell.qml:279
300307msgid "Enter your passphrase"
301−msgstr ""
308+msgstr "Ange din lösenfras"
302309
303−#: qml/Shell.qml:267
310+#: qml/Shell.qml:280
304311msgid "Sorry, incorrect passphrase"
305−msgstr ""
312+msgstr "Felaktig lösenfras"
306313
307314#: qml/Shell.qml:282
308315msgid "Enter your passcode"
309−msgstr ""
316+msgstr "Ange din lösenkod"
310317
311318#: qml/Shell.qml:283
312319msgid "Sorry, incorrect passcode"
313−msgstr ""
320+msgstr "Felaktig lösenkod"
314321
315−#: qml/Shell.qml:273
322+#: qml/Shell.qml:286
316323#, qt-format
317324msgid "Enter your %1"
318325msgstr "Skriv in din %1"
319326
320−#: qml/Shell.qml:274
327+#: qml/Shell.qml:287
321328#, qt-format
322329msgid "Sorry, incorrect %1"
323−msgstr ""
330+msgstr "Felaktig %1"
324331
325−#: qml/Shell.qml:310
332+#: qml/Shell.qml:323
326333msgid "Sorry, incorrect passphrase."
327−msgstr ""
334+msgstr "Felaktig lösenfras."
328335
329−#: qml/Shell.qml:311
336+#: qml/Shell.qml:324
330337msgid "Sorry, incorrect passcode."
331−msgstr ""
338+msgstr "Felaktig lösenkod."
332339
333−#: qml/Shell.qml:312
340+#: qml/Shell.qml:325
334341msgid "This will be your last attempt."
335−msgstr ""
342+msgstr "Detta är ditt sista försök."
336343
337−#: qml/Shell.qml:314
344+#: qml/Shell.qml:327
338345msgid ""
339346"If passphrase is entered incorrectly, your phone will conduct a factory "
340347"reset and all personal data will be deleted."
341348msgstr ""
349+"Om lösenfrasen anges inkorrekt kommer telefonen att fabrikåterställas och "
350+"all personlig data kommer att tas bort."
342351
343−#: qml/Shell.qml:315
352+#: qml/Shell.qml:328
344353msgid ""
345354"If passcode is entered incorrectly, your phone will conduct a factory reset "
346355"and all personal data will be deleted."
347356msgstr ""
348−
349−#~ msgid "Restart"
350−#~ msgstr "Starta om"
357+"Om lösenkoden anges felaktigt kommer telefonen att fabrikåterställas och all "
358+"personlig data kommer att tas bort."
po/sw.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-01-14 19:28+0000\n"
1212"Last-Translator: Damas <Unknown>\n"
1313"Language-Team: Swahili <sw@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -161,7 +165,8 @@ msgstr ""
161165msgid "See all"
162166msgstr ""
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr "Tafuta"
167172
@@ -201,11 +206,11 @@ msgstr "Tuma"
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr ""
211216
@@ -221,7 +226,7 @@ msgstr ""
221226msgid "Swipe to unlock"
222227msgstr ""
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr "Thibitisha"
227232
@@ -249,7 +254,7 @@ msgstr ""
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr ""
293298msgid "Roaming"
294299msgstr ""
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,35 +314,35 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
po/ta.po+25−20
@@ -7,18 +7,18 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2013-10-24 11:36+0000\n"
1212"Last-Translator: Arun Kumar - அருண் குமார் <thangam.arunx@gmail.com>\n"
1313"Language-Team: Ubuntu Tamil Team/Free Tamil Computing/Thamizha\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919"Language: ta\n"
2020
21−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2222msgid "Password: "
2323msgstr ""
2424
@@ -75,11 +75,15 @@ msgid ""
7575"to power off?"
7676msgstr ""
7777
78−#: qml/Components/Dialogs.qml:144
78+#: qml/Components/Dialogs.qml:147
7979msgid "Power off"
8080msgstr ""
8181
82−#: qml/Components/Dialogs.qml:162
82+#: qml/Components/Dialogs.qml:157
83+msgid "Restart"
84+msgstr ""
85+
86+#: qml/Components/Dialogs.qml:157
8387msgid "Cancel"
8488msgstr ""
8589
@@ -164,7 +168,8 @@ msgstr ""
164168msgid "See all"
165169msgstr ""
166170
167−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
171+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
172+#: qml/Panel/SearchIndicator.qml:27
168173msgid "Search"
169174msgstr "தெடு"
170175
@@ -204,11 +209,11 @@ msgstr "அனுப்பு"
204209msgid "Manage Dash"
205210msgstr ""
206211
207−#: qml/Dash/ScopesOverview.qml:408
212+#: qml/Dash/ScopesOverview.qml:417
208213msgid "Done"
209214msgstr ""
210215
211−#: qml/Dash/ScopesOverview.qml:434
216+#: qml/Dash/ScopesOverview.qml:443
212217msgid "Store"
213218msgstr ""
214219
@@ -224,7 +229,7 @@ msgstr ""
224229msgid "Swipe to unlock"
225230msgstr ""
226231
227−#: qml/Hud/HudParametrizedActionsPage.qml:132
232+#: qml/Hud/HudParametrizedActionsPage.qml:139
228233msgid "Confirm"
229234msgstr "உறுதிப்படுத்து"
230235
@@ -252,7 +257,7 @@ msgstr ""
252257msgid "Enter SIM PIN"
253258msgstr ""
254259
255−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
260+#: qml/Notifications/NotificationMenuItemFactory.qml:121
256261msgid "Sorry, incorrect PIN"
257262msgstr ""
258263
@@ -296,11 +301,11 @@ msgstr ""
296301msgid "Roaming"
297302msgstr ""
298303
299−#: qml/Shell.qml:266
304+#: qml/Shell.qml:279
300305msgid "Enter your passphrase"
301306msgstr ""
302307
303−#: qml/Shell.qml:267
308+#: qml/Shell.qml:280
304309msgid "Sorry, incorrect passphrase"
305310msgstr ""
306311
@@ -312,35 +317,35 @@ msgstr ""
312317msgid "Sorry, incorrect passcode"
313318msgstr ""
314319
315−#: qml/Shell.qml:273
320+#: qml/Shell.qml:286
316321#, qt-format
317322msgid "Enter your %1"
318323msgstr ""
319324
320−#: qml/Shell.qml:274
325+#: qml/Shell.qml:287
321326#, qt-format
322327msgid "Sorry, incorrect %1"
323328msgstr ""
324329
325−#: qml/Shell.qml:310
330+#: qml/Shell.qml:323
326331msgid "Sorry, incorrect passphrase."
327332msgstr ""
328333
329−#: qml/Shell.qml:311
334+#: qml/Shell.qml:324
330335msgid "Sorry, incorrect passcode."
331336msgstr ""
332337
333−#: qml/Shell.qml:312
338+#: qml/Shell.qml:325
334339msgid "This will be your last attempt."
335340msgstr ""
336341
337−#: qml/Shell.qml:314
342+#: qml/Shell.qml:327
338343msgid ""
339344"If passphrase is entered incorrectly, your phone will conduct a factory "
340345"reset and all personal data will be deleted."
341346msgstr ""
342347
343−#: qml/Shell.qml:315
348+#: qml/Shell.qml:328
344349msgid ""
345350"If passcode is entered incorrectly, your phone will conduct a factory reset "
346351"and all personal data will be deleted."
po/te.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-07-19 10:04+0000\n"
1212"Last-Translator: Praveen Illa <mail2ipn@gmail.com>\n"
1313"Language-Team: Telugu <te@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -161,7 +165,8 @@ msgstr ""
161165msgid "See all"
162166msgstr ""
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr "వెతుకు"
167172
@@ -201,11 +206,11 @@ msgstr "పంపు"
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr ""
211216
@@ -221,7 +226,7 @@ msgstr ""
221226msgid "Swipe to unlock"
222227msgstr "తాళంతీయుటకు గీకండి"
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr "నిర్ధారించండి"
227232
@@ -249,7 +254,7 @@ msgstr "సంకేతపదాన్ని చూపించు"
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr ""
293298msgid "Roaming"
294299msgstr ""
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,35 +314,35 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
po/tr.po+51−42
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-07-16 17:58+0000\n"
1212"Last-Translator: Volkan Gezer <Unknown>\n"
1313"Language-Team: Turkish <tr@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -41,16 +41,16 @@ msgstr ""
4141#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4242#: qml/Components/Dialogs.qml:122
4343msgid "No"
44−msgstr ""
44+msgstr "Hayır"
4545
4646#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4747#: qml/Components/Dialogs.qml:129
4848msgid "Yes"
49−msgstr ""
49+msgstr "Evet"
5050
5151#: qml/Components/Dialogs.qml:94
5252msgid "Shut down"
53−msgstr ""
53+msgstr "Bilgisayarı Kapat"
5454
5555#: qml/Components/Dialogs.qml:95
5656msgid "Are you sure you want to shut down?"
@@ -58,11 +58,11 @@ msgstr ""
5858
5959#: qml/Components/Dialogs.qml:119
6060msgid "Reboot"
61−msgstr ""
61+msgstr "Yeniden başlat"
6262
6363#: qml/Components/Dialogs.qml:120
6464msgid "Are you sure you want to reboot?"
65−msgstr ""
65+msgstr "Bilgisayarı yeniden başlatmak istediğinize emin misiniz?"
6666
6767#: qml/Components/Dialogs.qml:144
6868msgid "Power"
@@ -72,13 +72,17 @@ msgstr ""
7272msgid ""
7373"Are you sure you would like\n"
7474"to power off?"
75−msgstr ""
75+msgstr "Bilgisayarı kapatmak istediğinize emin misiniz?"
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -137,7 +141,7 @@ msgstr ""
137141
138142#: qml/Components/Lockscreen.qml:172
139143msgid "Too many incorrect attempts"
140−msgstr ""
144+msgstr "Çok fazla hatalı deneme yaptınız"
141145
142146#: qml/Components/Lockscreen.qml:206
143147msgid "Emergency Call"
@@ -162,9 +166,10 @@ msgstr "Daha azını gör"
162166
163167#: qml/Dash/GenericScopeView.qml:361
164168msgid "See all"
165−msgstr ""
169+msgstr "Tümünü gör"
166170
167−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
171+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
172+#: qml/Panel/SearchIndicator.qml:27
168173msgid "Search"
169174msgstr "Ara"
170175
@@ -178,11 +183,11 @@ msgstr ""
178183
179184#: qml/Dash/PageHeader.qml:279
180185msgid "Add to Favorites"
181−msgstr ""
186+msgstr "Yer İmlerine Ekle"
182187
183188#: qml/Dash/Previews/PreviewActionCombo.qml:34
184189msgid "More..."
185−msgstr "Daha fazlası..."
190+msgstr "Daha Fazla..."
186191
187192#: qml/Dash/Previews/PreviewActionCombo.qml:34
188193msgid "Less..."
@@ -204,13 +209,13 @@ msgstr "Gönder"
204209msgid "Manage Dash"
205210msgstr ""
206211
207−#: qml/Dash/ScopesOverview.qml:408
212+#: qml/Dash/ScopesOverview.qml:417
208213msgid "Done"
209−msgstr ""
214+msgstr "Bitti"
210215
211−#: qml/Dash/ScopesOverview.qml:434
216+#: qml/Dash/ScopesOverview.qml:443
212217msgid "Store"
213−msgstr ""
218+msgstr "Mağaza"
214219
215220#: qml/Dash/ScopesOverviewTab.qml:36
216221msgid "Favorites"
@@ -224,7 +229,7 @@ msgstr ""
224229msgid "Swipe to unlock"
225230msgstr "Açmak için kaydırın"
226231
227−#: qml/Hud/HudParametrizedActionsPage.qml:132
232+#: qml/Hud/HudParametrizedActionsPage.qml:139
228233msgid "Confirm"
229234msgstr "Onayla"
230235
@@ -252,9 +257,9 @@ msgstr "Parolayı göster"
252257msgid "Enter SIM PIN"
253258msgstr ""
254259
255−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
260+#: qml/Notifications/NotificationMenuItemFactory.qml:121
256261msgid "Sorry, incorrect PIN"
257−msgstr ""
262+msgstr "Üzgünüm, hatalı PIN"
258263
259264#: qml/Panel/ActiveCallHint.qml:77
260265msgid "Tap to return to call..."
@@ -290,58 +295,62 @@ msgstr "Başarısız, yeniden denemek için dokunun"
290295
291296#: qml/Panel/Indicators/ModemInfoItem.qml:105
292297msgid "Unlock SIM"
293−msgstr ""
298+msgstr "SIM kilidini aç"
294299
295300#: qml/Panel/Indicators/RoamingIndication.qml:27
296301msgid "Roaming"
297302msgstr ""
298303
299−#: qml/Shell.qml:266
304+#: qml/Shell.qml:279
300305msgid "Enter your passphrase"
301−msgstr ""
306+msgstr "Parolanızı girin"
302307
303−#: qml/Shell.qml:267
308+#: qml/Shell.qml:280
304309msgid "Sorry, incorrect passphrase"
305−msgstr ""
310+msgstr "Üzgünüm, hatalı parola"
306311
307312#: qml/Shell.qml:282
308313msgid "Enter your passcode"
309−msgstr ""
314+msgstr "Parolanızı girin"
310315
311316#: qml/Shell.qml:283
312317msgid "Sorry, incorrect passcode"
313−msgstr ""
318+msgstr "Üzgünüm, hatalı parola"
314319
315−#: qml/Shell.qml:273
320+#: qml/Shell.qml:286
316321#, qt-format
317322msgid "Enter your %1"
318323msgstr ""
319324
320−#: qml/Shell.qml:274
325+#: qml/Shell.qml:287
321326#, qt-format
322327msgid "Sorry, incorrect %1"
323−msgstr ""
328+msgstr "Üzgünüm, hatalı %1"
324329
325−#: qml/Shell.qml:310
330+#: qml/Shell.qml:323
326331msgid "Sorry, incorrect passphrase."
327−msgstr ""
332+msgstr "Üzgünüm, hatalı parola."
328333
329−#: qml/Shell.qml:311
334+#: qml/Shell.qml:324
330335msgid "Sorry, incorrect passcode."
331−msgstr ""
336+msgstr "Üzgünüm, hatalı parola."
332337
333−#: qml/Shell.qml:312
338+#: qml/Shell.qml:325
334339msgid "This will be your last attempt."
335−msgstr ""
340+msgstr "Bu son denemeniz olacak."
336341
337−#: qml/Shell.qml:314
342+#: qml/Shell.qml:327
338343msgid ""
339344"If passphrase is entered incorrectly, your phone will conduct a factory "
340345"reset and all personal data will be deleted."
341346msgstr ""
347+"Eğer hatalı parola girilirse, telefonunuz fabrika ayarlarına dönecek ve tüm "
348+"kişisel verileriniz silinecek."
342349
343−#: qml/Shell.qml:315
350+#: qml/Shell.qml:328
344351msgid ""
345352"If passcode is entered incorrectly, your phone will conduct a factory reset "
346353"and all personal data will be deleted."
347354msgstr ""
355+"Eğer hatalı parola girilirse, telefonunuz fabrika ayarlarına dönecek ve tüm "
356+"kişisel verileriniz silinecek."
po/ug.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-07-29 04:06+0000\n"
1212"Last-Translator: Gheyret T.Kenji <Unknown>\n"
1313"Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -163,7 +167,8 @@ msgstr "ئازراق كۆرۈش"
163167msgid "See all"
164168msgstr "ھەممىنى كۆرۈش…"
165169
166−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
170+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
171+#: qml/Panel/SearchIndicator.qml:27
167172msgid "Search"
168173msgstr "ئىزدە"
169174
@@ -203,11 +208,11 @@ msgstr "ئەۋەت"
203208msgid "Manage Dash"
204209msgstr ""
205210
206−#: qml/Dash/ScopesOverview.qml:408
211+#: qml/Dash/ScopesOverview.qml:417
207212msgid "Done"
208213msgstr ""
209214
210−#: qml/Dash/ScopesOverview.qml:434
215+#: qml/Dash/ScopesOverview.qml:443
211216msgid "Store"
212217msgstr ""
213218
@@ -223,7 +228,7 @@ msgstr ""
223228msgid "Swipe to unlock"
224229msgstr "سىيرىسىڭىز قۇلۇپسىزلىنىدۇ"
225230
226−#: qml/Hud/HudParametrizedActionsPage.qml:132
231+#: qml/Hud/HudParametrizedActionsPage.qml:139
227232msgid "Confirm"
228233msgstr "جەزملە"
229234
@@ -251,7 +256,7 @@ msgstr "ئىم كۆرسەت"
251256msgid "Enter SIM PIN"
252257msgstr ""
253258
254−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
259+#: qml/Notifications/NotificationMenuItemFactory.qml:121
255260msgid "Sorry, incorrect PIN"
256261msgstr ""
257262
@@ -295,11 +300,11 @@ msgstr ""
295300msgid "Roaming"
296301msgstr ""
297302
298−#: qml/Shell.qml:266
303+#: qml/Shell.qml:279
299304msgid "Enter your passphrase"
300305msgstr ""
301306
302−#: qml/Shell.qml:267
307+#: qml/Shell.qml:280
303308msgid "Sorry, incorrect passphrase"
304309msgstr ""
305310
@@ -311,35 +316,35 @@ msgstr ""
311316msgid "Sorry, incorrect passcode"
312317msgstr ""
313318
314−#: qml/Shell.qml:273
319+#: qml/Shell.qml:286
315320#, qt-format
316321msgid "Enter your %1"
317322msgstr ""
318323
319−#: qml/Shell.qml:274
324+#: qml/Shell.qml:287
320325#, qt-format
321326msgid "Sorry, incorrect %1"
322327msgstr ""
323328
324−#: qml/Shell.qml:310
329+#: qml/Shell.qml:323
325330msgid "Sorry, incorrect passphrase."
326331msgstr ""
327332
328−#: qml/Shell.qml:311
333+#: qml/Shell.qml:324
329334msgid "Sorry, incorrect passcode."
330335msgstr ""
331336
332−#: qml/Shell.qml:312
337+#: qml/Shell.qml:325
333338msgid "This will be your last attempt."
334339msgstr ""
335340
336−#: qml/Shell.qml:314
341+#: qml/Shell.qml:327
337342msgid ""
338343"If passphrase is entered incorrectly, your phone will conduct a factory "
339344"reset and all personal data will be deleted."
340345msgstr ""
341346
342−#: qml/Shell.qml:315
347+#: qml/Shell.qml:328
343348msgid ""
344349"If passcode is entered incorrectly, your phone will conduct a factory reset "
345350"and all personal data will be deleted."
po/uk.po+41−43
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-08-26 19:06+0000\n"
1212"Last-Translator: Yuri Chornoivan <yurchor@gmail.com>\n"
1313"Language-Team: Ukrainian <uk@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr "Пароль: "
2323
@@ -32,53 +32,59 @@ msgstr "Розблокувати кнопку"
3232
3333#: qml/Components/Dialogs.qml:70
3434msgid "Log out"
35−msgstr ""
35+msgstr "Вийти"
3636
3737#: qml/Components/Dialogs.qml:71
3838msgid "Are you sure you want to log out?"
39−msgstr ""
39+msgstr "Ви справді хочете вийти?"
4040
4141#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4242#: qml/Components/Dialogs.qml:122
4343msgid "No"
44−msgstr ""
44+msgstr "Ні"
4545
4646#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4747#: qml/Components/Dialogs.qml:129
4848msgid "Yes"
49−msgstr ""
49+msgstr "Так"
5050
5151#: qml/Components/Dialogs.qml:94
5252msgid "Shut down"
53−msgstr ""
53+msgstr "Вимкнути"
5454
5555#: qml/Components/Dialogs.qml:95
5656msgid "Are you sure you want to shut down?"
57−msgstr ""
57+msgstr "Ви справді хочете вимкнути пристрій?"
5858
5959#: qml/Components/Dialogs.qml:119
6060msgid "Reboot"
61−msgstr ""
61+msgstr "Перезавантажити"
6262
6363#: qml/Components/Dialogs.qml:120
6464msgid "Are you sure you want to reboot?"
65−msgstr ""
65+msgstr "Ви справді хочете перезавантажити пристрій?"
6666
6767#: qml/Components/Dialogs.qml:144
6868msgid "Power"
69−msgstr ""
69+msgstr "Живлення"
7070
7171#: qml/Components/Dialogs.qml:145
7272msgid ""
7373"Are you sure you would like\n"
7474"to power off?"
7575msgstr ""
76+"Ви справді хочете вимкнути\n"
77+"живлення?"
7678
77−#: qml/Components/Dialogs.qml:144
79+#: qml/Components/Dialogs.qml:147
7880msgid "Power off"
7981msgstr "Вимкнути"
8082
81−#: qml/Components/Dialogs.qml:162
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr "Перезапуск"
86+
87+#: qml/Components/Dialogs.qml:157
8288msgid "Cancel"
8389msgstr "Скасувати"
8490
@@ -166,21 +172,22 @@ msgstr "Стисліше"
166172msgid "See all"
167173msgstr "Детальніше"
168174
169−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
175+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
176+#: qml/Panel/SearchIndicator.qml:27
170177msgid "Search"
171178msgstr "Пошук"
172179
173180#: qml/Dash/PageHeader.qml:270
174181msgid "Settings"
175−msgstr ""
182+msgstr "Параметри"
176183
177184#: qml/Dash/PageHeader.qml:279
178185msgid "Remove from Favorites"
179−msgstr ""
186+msgstr "Вилучити з вибраного"
180187
181188#: qml/Dash/PageHeader.qml:279
182189msgid "Add to Favorites"
183−msgstr ""
190+msgstr "Додати до вибраного"
184191
185192#: qml/Dash/Previews/PreviewActionCombo.qml:34
186193msgid "More..."
@@ -206,11 +213,11 @@ msgstr "Надіслати"
206213msgid "Manage Dash"
207214msgstr "Керування панеллю"
208215
209−#: qml/Dash/ScopesOverview.qml:408
216+#: qml/Dash/ScopesOverview.qml:417
210217msgid "Done"
211218msgstr "Виконано"
212219
213−#: qml/Dash/ScopesOverview.qml:434
220+#: qml/Dash/ScopesOverview.qml:443
214221msgid "Store"
215222msgstr "Крамниця"
216223
@@ -226,7 +233,7 @@ msgstr "Все"
226233msgid "Swipe to unlock"
227234msgstr "Проведіть пальцем, щоб розблокувати"
228235
229−#: qml/Hud/HudParametrizedActionsPage.qml:132
236+#: qml/Hud/HudParametrizedActionsPage.qml:139
230237msgid "Confirm"
231238msgstr "Підтвердити"
232239
@@ -254,7 +261,7 @@ msgstr "Показати пароль"
254261msgid "Enter SIM PIN"
255262msgstr "Введіть PIN-код SIM-картки"
256263
257−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
264+#: qml/Notifications/NotificationMenuItemFactory.qml:121
258265msgid "Sorry, incorrect PIN"
259266msgstr "Вибачте, помилковий PIN-код"
260267
@@ -298,45 +305,45 @@ msgstr "Розблокувати SIM"
298305msgid "Roaming"
299306msgstr "Роумінг"
300307
301−#: qml/Shell.qml:266
308+#: qml/Shell.qml:279
302309msgid "Enter your passphrase"
303310msgstr "Введіть ваш пароль"
304311
305−#: qml/Shell.qml:267
312+#: qml/Shell.qml:280
306313msgid "Sorry, incorrect passphrase"
307314msgstr "Вибачте, помилковий пароль"
308315
309316#: qml/Shell.qml:282
310317msgid "Enter your passcode"
311−msgstr ""
318+msgstr "Введіть ваш код-пароль"
312319
313320#: qml/Shell.qml:283
314321msgid "Sorry, incorrect passcode"
315−msgstr ""
322+msgstr "Вибачте, помилковий код-пароль"
316323
317−#: qml/Shell.qml:273
324+#: qml/Shell.qml:286
318325#, qt-format
319326msgid "Enter your %1"
320327msgstr "Вкажіть ваш %1"
321328
322−#: qml/Shell.qml:274
329+#: qml/Shell.qml:287
323330#, qt-format
324331msgid "Sorry, incorrect %1"
325332msgstr "Вибачте, помилковий %1"
326333
327−#: qml/Shell.qml:310
334+#: qml/Shell.qml:323
328335msgid "Sorry, incorrect passphrase."
329336msgstr "Вибачте, помилковий пароль."
330337
331−#: qml/Shell.qml:311
338+#: qml/Shell.qml:324
332339msgid "Sorry, incorrect passcode."
333340msgstr "Вибачте, помилковий код-пароль."
334341
335−#: qml/Shell.qml:312
342+#: qml/Shell.qml:325
336343msgid "This will be your last attempt."
337344msgstr "Ця спроба буде останньою."
338345
339−#: qml/Shell.qml:314
346+#: qml/Shell.qml:327
340347msgid ""
341348"If passphrase is entered incorrectly, your phone will conduct a factory "
342349"reset and all personal data will be deleted."
@@ -344,19 +351,10 @@ msgstr ""
344351"Якщо пароль буде вказано неправильно, телефон повернеться до початкового "
345352"стану, усі особисті дані буде вилучено."
346353
347−#: qml/Shell.qml:315
354+#: qml/Shell.qml:328
348355msgid ""
349356"If passcode is entered incorrectly, your phone will conduct a factory reset "
350357"and all personal data will be deleted."
351358msgstr ""
352359"Якщо код-пароль буде вказано неправильно, телефон повернеться до початкового "
353360"стану, усі особисті дані буде вилучено."
354−
355−#~ msgid "Are you sure you would like to turn power off?"
356−#~ msgstr "Ви справді хочете вимкнути пристрій?"
357−
358−#~ msgid "Restart"
359−#~ msgstr "Перезавантажити"
360−
361−#~ msgid "Enter your PIN"
362−#~ msgstr "Введіть ваш PIN-код"
po/unity8.pot+33−29
@@ -8,7 +8,7 @@ msgid ""
88msgstr ""
99"Project-Id-Version: unity8\n"
1010"Report-Msgid-Bugs-To: \n"
11−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1212"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -21,12 +21,12 @@ msgstr ""
2121msgid "Password: "
2222msgstr ""
2323
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
24+#: plugins/Unity/Launcher/launcheritem.cpp:44
25+#: plugins/Unity/Launcher/launcheritem.cpp:74
2626msgid "Pin shortcut"
2727msgstr ""
2828
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
29+#: plugins/Unity/Launcher/launcheritem.cpp:74
3030msgid "Unpin shortcut"
3131msgstr ""
3232
@@ -79,6 +79,10 @@ msgid "Power off"
7979msgstr ""
8080
8181#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:167
8286msgid "Cancel"
8387msgstr ""
8488
@@ -153,36 +157,36 @@ msgstr ""
153157msgid "Hello"
154158msgstr ""
155159
156−#: qml/Dash/GenericScopeView.qml:361
160+#: qml/Dash/GenericScopeView.qml:364 qml/Dash/GenericScopeView.qml:483
157161msgid "See less"
158162msgstr ""
159163
160−#: qml/Dash/GenericScopeView.qml:361
164+#: qml/Dash/GenericScopeView.qml:364
161165msgid "See all"
162166msgstr ""
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
168+#: qml/Dash/GenericScopeView.qml:427 qml/Dash/PageHeader.qml:258
165169#: qml/Panel/SearchIndicator.qml:27
166170msgid "Search"
167171msgstr ""
168172
169−#: qml/Dash/PageHeader.qml:270
173+#: qml/Dash/PageHeader.qml:268
170174msgid "Settings"
171175msgstr ""
172176
173−#: qml/Dash/PageHeader.qml:279
177+#: qml/Dash/PageHeader.qml:275
174178msgid "Remove from Favorites"
175179msgstr ""
176180
177−#: qml/Dash/PageHeader.qml:279
181+#: qml/Dash/PageHeader.qml:275
178182msgid "Add to Favorites"
179183msgstr ""
180184
181−#: qml/Dash/Previews/PreviewActionCombo.qml:34
185+#: qml/Dash/Previews/PreviewActionCombo.qml:35
182186msgid "More..."
183187msgstr ""
184188
185−#: qml/Dash/Previews/PreviewActionCombo.qml:34
189+#: qml/Dash/Previews/PreviewActionCombo.qml:35
186190msgid "Less..."
187191msgstr ""
188192
@@ -198,15 +202,15 @@ msgstr ""
198202msgid "Send"
199203msgstr ""
200204
201−#: qml/Dash/ScopesOverview.qml:201
205+#: qml/Dash/ScopesOverview.qml:206
202206msgid "Manage Dash"
203207msgstr ""
204208
205−#: qml/Dash/ScopesOverview.qml:417
209+#: qml/Dash/ScopesOverview.qml:428
206210msgid "Done"
207211msgstr ""
208212
209−#: qml/Dash/ScopesOverview.qml:443
213+#: qml/Dash/ScopesOverview.qml:454
210214msgid "Store"
211215msgstr ""
212216
@@ -242,15 +246,15 @@ msgstr ""
242246msgid "Speaking..."
243247msgstr ""
244248
245−#: qml/Notifications/NotificationMenuItemFactory.qml:105
249+#: qml/Notifications/NotificationMenuItemFactory.qml:108
246250msgid "Show password"
247251msgstr ""
248252
249−#: qml/Notifications/NotificationMenuItemFactory.qml:120
253+#: qml/Notifications/NotificationMenuItemFactory.qml:124
250254msgid "Enter SIM PIN"
251255msgstr ""
252256
253−#: qml/Notifications/NotificationMenuItemFactory.qml:121
257+#: qml/Notifications/NotificationMenuItemFactory.qml:125
254258msgid "Sorry, incorrect PIN"
255259msgstr ""
256260
@@ -294,51 +298,51 @@ msgstr ""
294298msgid "Roaming"
295299msgstr ""
296300
297−#: qml/Shell.qml:279
301+#: qml/Shell.qml:292
298302msgid "Enter your passphrase"
299303msgstr ""
300304
301−#: qml/Shell.qml:280
305+#: qml/Shell.qml:293
302306msgid "Sorry, incorrect passphrase"
303307msgstr ""
304308
305−#: qml/Shell.qml:282
309+#: qml/Shell.qml:295
306310msgid "Enter your passcode"
307311msgstr ""
308312
309−#: qml/Shell.qml:283
313+#: qml/Shell.qml:296
310314msgid "Sorry, incorrect passcode"
311315msgstr ""
312316
313−#: qml/Shell.qml:286
317+#: qml/Shell.qml:299
314318#, qt-format
315319msgid "Enter your %1"
316320msgstr ""
317321
318−#: qml/Shell.qml:287
322+#: qml/Shell.qml:300
319323#, qt-format
320324msgid "Sorry, incorrect %1"
321325msgstr ""
322326
323−#: qml/Shell.qml:323
327+#: qml/Shell.qml:335
324328msgid "Sorry, incorrect passphrase."
325329msgstr ""
326330
327−#: qml/Shell.qml:324
331+#: qml/Shell.qml:336
328332msgid "Sorry, incorrect passcode."
329333msgstr ""
330334
331−#: qml/Shell.qml:325
335+#: qml/Shell.qml:337
332336msgid "This will be your last attempt."
333337msgstr ""
334338
335−#: qml/Shell.qml:327
339+#: qml/Shell.qml:339
336340msgid ""
337341"If passphrase is entered incorrectly, your phone will conduct a factory "
338342"reset and all personal data will be deleted."
339343msgstr ""
340344
341−#: qml/Shell.qml:328
345+#: qml/Shell.qml:340
342346msgid ""
343347"If passcode is entered incorrectly, your phone will conduct a factory reset "
344348"and all personal data will be deleted."
po/vi.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-01-15 01:19+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Vietnamese <vi@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -161,7 +165,8 @@ msgstr ""
161165msgid "See all"
162166msgstr ""
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr ""
167172
@@ -201,11 +206,11 @@ msgstr ""
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr ""
211216
@@ -221,7 +226,7 @@ msgstr ""
221226msgid "Swipe to unlock"
222227msgstr ""
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr ""
227232
@@ -249,7 +254,7 @@ msgstr ""
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr ""
293298msgid "Roaming"
294299msgstr ""
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,35 +314,35 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
po/xh.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2013-09-28 13:20+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Xhosa <xh@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -161,7 +165,8 @@ msgstr ""
161165msgid "See all"
162166msgstr ""
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr ""
167172
@@ -201,11 +206,11 @@ msgstr ""
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr ""
211216
@@ -221,7 +226,7 @@ msgstr ""
221226msgid "Swipe to unlock"
222227msgstr ""
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr ""
227232
@@ -249,7 +254,7 @@ msgstr ""
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr ""
293298msgid "Roaming"
294299msgstr ""
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,35 +314,35 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
po/zh_CN.po+25−26
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-08-12 14:09+0000\n"
1212"Last-Translator: Anthony Wong <anthony.wong@ubuntu.com>\n"
1313"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr "关机"
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr "取消"
8488
@@ -161,7 +165,8 @@ msgstr "显示更少"
161165msgid "See all"
162166msgstr "查看全部"
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr "搜索"
167172
@@ -201,11 +206,11 @@ msgstr "发送"
201206msgid "Manage Dash"
202207msgstr "管理 Dash"
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr "完成"
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr "商店"
211216
@@ -221,7 +226,7 @@ msgstr "所有"
221226msgid "Swipe to unlock"
222227msgstr "滑动解锁"
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr "确认"
227232
@@ -249,7 +254,7 @@ msgstr "显示密码"
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr "解开 SIM"
293298msgid "Roaming"
294299msgstr "漫游"
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,42 +314,36 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
344349msgstr ""
345−
346−#~ msgid "Are you sure you would like to turn power off?"
347−#~ msgstr "确定要关闭电源吗?"
348−
349−#~ msgid "Restart"
350−#~ msgstr "重启"
po/zh_HK.po+25−20
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-08-10 11:45+0000\n"
1212"Last-Translator: Daniel Cheung <daniel.2345@hotmail.com>\n"
1313"Language-Team: Chinese (Hong Kong) <zh_HK@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr ""
2323
@@ -74,11 +74,15 @@ msgid ""
7474"to power off?"
7575msgstr ""
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
7979msgstr ""
8080
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr ""
8488
@@ -161,7 +165,8 @@ msgstr "縮減查看"
161165msgid "See all"
162166msgstr "查看全部"
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr "搜尋"
167172
@@ -201,11 +206,11 @@ msgstr "傳送"
201206msgid "Manage Dash"
202207msgstr ""
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206211msgstr ""
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210215msgstr ""
211216
@@ -221,7 +226,7 @@ msgstr ""
221226msgid "Swipe to unlock"
222227msgstr "滑動解除鎖定"
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr "確認"
227232
@@ -249,7 +254,7 @@ msgstr "顯示密碼"
249254msgid "Enter SIM PIN"
250255msgstr ""
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254259msgstr ""
255260
@@ -293,11 +298,11 @@ msgstr ""
293298msgid "Roaming"
294299msgstr ""
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298303msgstr ""
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302307msgstr ""
303308
@@ -309,35 +314,35 @@ msgstr ""
309314msgid "Sorry, incorrect passcode"
310315msgstr ""
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr ""
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320325msgstr ""
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324329msgstr ""
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328333msgstr ""
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr ""
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338343msgstr ""
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
po/zh_TW.po+57−52
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
1111"PO-Revision-Date: 2014-07-26 16:21+0000\n"
1212"Last-Translator: Cheng-Chia Tseng <pswo10680@gmail.com>\n"
1313"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18+"X-Generator: Launchpad (build 17196)\n"
1919
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
2121msgid "Password: "
2222msgstr "密碼: "
2323
@@ -32,53 +32,57 @@ msgstr "取消捷徑釘選"
3232
3333#: qml/Components/Dialogs.qml:70
3434msgid "Log out"
35−msgstr ""
35+msgstr "登出"
3636
3737#: qml/Components/Dialogs.qml:71
3838msgid "Are you sure you want to log out?"
39−msgstr ""
39+msgstr "確定要登出?"
4040
4141#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4242#: qml/Components/Dialogs.qml:122
4343msgid "No"
44−msgstr ""
44+msgstr "否"
4545
4646#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4747#: qml/Components/Dialogs.qml:129
4848msgid "Yes"
49−msgstr ""
49+msgstr "是"
5050
5151#: qml/Components/Dialogs.qml:94
5252msgid "Shut down"
53−msgstr ""
53+msgstr "關機"
5454
5555#: qml/Components/Dialogs.qml:95
5656msgid "Are you sure you want to shut down?"
57−msgstr ""
57+msgstr "確定要關機?"
5858
5959#: qml/Components/Dialogs.qml:119
6060msgid "Reboot"
61−msgstr ""
61+msgstr "重新開機"
6262
6363#: qml/Components/Dialogs.qml:120
6464msgid "Are you sure you want to reboot?"
65−msgstr ""
65+msgstr "確定要重新開機?"
6666
6767#: qml/Components/Dialogs.qml:144
6868msgid "Power"
69−msgstr ""
69+msgstr "關閉電源"
7070
7171#: qml/Components/Dialogs.qml:145
7272msgid ""
7373"Are you sure you would like\n"
7474"to power off?"
75−msgstr ""
75+msgstr "確定要關閉電源?"
7676
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
7878msgid "Power off"
79+msgstr "關閉電源"
80+
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
7983msgstr ""
8084
81−#: qml/Components/Dialogs.qml:162
85+#: qml/Components/Dialogs.qml:157
8286msgid "Cancel"
8387msgstr "取消"
8488
@@ -134,7 +138,7 @@ msgstr "請稍候"
134138
135139#: qml/Components/Lockscreen.qml:172
136140msgid "Too many incorrect attempts"
137−msgstr ""
141+msgstr "錯得太多次"
138142
139143#: qml/Components/Lockscreen.qml:206
140144msgid "Emergency Call"
@@ -161,21 +165,22 @@ msgstr "縮減查看"
161165msgid "See all"
162166msgstr "查看全部"
163167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
168+#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
169+#: qml/Panel/SearchIndicator.qml:27
165170msgid "Search"
166171msgstr "搜尋"
167172
168173#: qml/Dash/PageHeader.qml:270
169174msgid "Settings"
170−msgstr ""
175+msgstr "設定"
171176
172177#: qml/Dash/PageHeader.qml:279
173178msgid "Remove from Favorites"
174−msgstr ""
179+msgstr "自「最愛」移除"
175180
176181#: qml/Dash/PageHeader.qml:279
177182msgid "Add to Favorites"
178−msgstr ""
183+msgstr "加入到「最愛」"
179184
180185#: qml/Dash/Previews/PreviewActionCombo.qml:34
181186msgid "More..."
@@ -199,29 +204,29 @@ msgstr "發送"
199204
200205#: qml/Dash/ScopesOverview.qml:201
201206msgid "Manage Dash"
202−msgstr ""
207+msgstr "管理 Dash"
203208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205210msgid "Done"
206−msgstr ""
211+msgstr "完成"
207212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209214msgid "Store"
210−msgstr ""
215+msgstr "商城"
211216
212217#: qml/Dash/ScopesOverviewTab.qml:36
213218msgid "Favorites"
214−msgstr ""
219+msgstr "最愛"
215220
216221#: qml/Dash/ScopesOverviewTab.qml:54
217222msgid "All"
218−msgstr ""
223+msgstr "全部"
219224
220225#: qml/Greeter/Greeter.qml:157
221226msgid "Swipe to unlock"
222227msgstr "滑開解除鎖定"
223228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225230msgid "Confirm"
226231msgstr "確認"
227232
@@ -247,11 +252,11 @@ msgstr "顯示密碼"
247252
248253#: qml/Notifications/NotificationMenuItemFactory.qml:120
249254msgid "Enter SIM PIN"
250−msgstr ""
255+msgstr "輸入 SIM 卡 PIN 碼"
251256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253258msgid "Sorry, incorrect PIN"
254−msgstr ""
259+msgstr "抱歉,PIN 碼不對"
255260
256261#: qml/Panel/ActiveCallHint.qml:77
257262msgid "Tap to return to call..."
@@ -287,58 +292,58 @@ msgstr "失敗,輕觸可重試"
287292
288293#: qml/Panel/Indicators/ModemInfoItem.qml:105
289294msgid "Unlock SIM"
290−msgstr ""
295+msgstr "為 SIM 卡解鎖"
291296
292297#: qml/Panel/Indicators/RoamingIndication.qml:27
293298msgid "Roaming"
294−msgstr ""
299+msgstr "漫遊"
295300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297302msgid "Enter your passphrase"
298−msgstr ""
303+msgstr "輸入密語"
299304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301306msgid "Sorry, incorrect passphrase"
302−msgstr ""
307+msgstr "抱歉,密語不對"
303308
304309#: qml/Shell.qml:282
305310msgid "Enter your passcode"
306−msgstr ""
311+msgstr "輸入密碼"
307312
308313#: qml/Shell.qml:283
309314msgid "Sorry, incorrect passcode"
310−msgstr ""
315+msgstr "抱歉,密碼不對"
311316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313318#, qt-format
314319msgid "Enter your %1"
315320msgstr "輸入您的 %1"
316321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318323#, qt-format
319324msgid "Sorry, incorrect %1"
320−msgstr ""
325+msgstr "抱歉,%1不對"
321326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323328msgid "Sorry, incorrect passphrase."
324−msgstr ""
329+msgstr "抱歉,密語不對"
325330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327332msgid "Sorry, incorrect passcode."
328−msgstr ""
333+msgstr "抱歉,密碼不對。"
329334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331336msgid "This will be your last attempt."
332337msgstr "這將會是您最後一次嘗試的機會。"
333338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335340msgid ""
336341"If passphrase is entered incorrectly, your phone will conduct a factory "
337342"reset and all personal data will be deleted."
338−msgstr ""
343+msgstr "如輸入的密語不對,本電話會進行重設,所有個人資料都會刪除。"
339344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341346msgid ""
342347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343348"and all personal data will be deleted."
344−msgstr ""
349+msgstr "如輸入的密碼不對,本電話會進行重設,所有個人資料都會刪除。"
qml/Components/Background.qml+1−1
@@ -78,7 +78,7 @@ Loader {
7878 Image {
7979 objectName: "image"
8080
81− source: width > 0 && height > 0 && root.style
81+ source: width > 0 && height > 0 && root.style || ""
8282
8383 sourceSize.width: width
8484 sourceSize.height: height
qml/Components/Dialogs.qml+10
@@ -153,6 +153,16 @@ Item {
153153 }
154154 color: UbuntuColors.red
155155 }
156+ Button {
157+ text: i18n.tr("Restart")
158+ onClicked: {
159+ dBusUnitySessionServiceConnection.closeAllApps();
160+ DBusUnitySessionService.Reboot();
161+ PopupUtils.close(dialoguePower);
162+ d.dialogShown = false;
163+ }
164+ color: UbuntuColors.green
165+ }
156166 Button {
157167 text: i18n.tr("Cancel")
158168 onClicked: {
qml/Dash/CardCarousel.qml+1−1
@@ -49,7 +49,7 @@ DashRenderer {
4949 objectName: "carouselDelegate" + index
5050
5151 function clicked() { cardCarousel.clicked(index, model.result, loader.item, model) }
52− function pressAndHold() { cardCarousel.pressAndHold(index, model) }
52+ function pressAndHold() { cardCarousel.pressAndHold(index, model.result, model) }
5353
5454 sourceComponent: cardTool.cardComponent
5555 onLoaded: {
qml/Dash/CardGrid.qml+1−1
@@ -74,7 +74,7 @@ DashRenderer {
7474 Connections {
7575 target: loader.item
7676 onClicked: root.clicked(index, result, loader.item, model)
77− onPressAndHold: root.pressAndHold(index, model)
77+ onPressAndHold: root.pressAndHold(index, result, model)
7878 }
7979 }
8080 }
qml/Dash/CardHorizontalList.qml+1−1
@@ -55,7 +55,7 @@ DashRenderer {
5555 Connections {
5656 target: loader.item
5757 onClicked: root.clicked(index, result, loader.item, model)
58− onPressAndHold: root.pressAndHold(index, model)
58+ onPressAndHold: root.pressAndHold(index, result, model)
5959 }
6060 }
6161 }
qml/Dash/CardTool.qml+7−10
@@ -169,19 +169,16 @@ Item {
169169
170170 Item {
171171 id: attributesModel
172− property int numOfAttributes: 0
173− property var model: []
174− property bool hasAttributes: {
172+ property int numOfAttributes: {
175173 var attributes = components["attributes"];
176− var hasAttributesFlag = (attributes != undefined) && attributes["field"];
177−
178− if (hasAttributesFlag) {
174+ if ((attributes != undefined) && attributes["field"]) {
179175 if (attributes["max-count"]) {
180− numOfAttributes = attributes["max-count"];
176+ return attributes["max-count"];
181177 }
182178 }
183− return hasAttributesFlag
179+ return 0;
184180 }
181+ property var model: []
185182
186183 onNumOfAttributesChanged: {
187184 model = []
@@ -195,8 +192,8 @@ Item {
195192 id: cardLoader
196193 property var fields: ["art", "mascot", "title", "subtitle", "summary", "attributes"]
197194 property var maxData: {
198− "art": Qt.resolvedUrl("graphics/checkers.png"),
199− "mascot": Qt.resolvedUrl("graphics/checkers.png"),
195+ "art": Qt.resolvedUrl("graphics/pixel.png"),
196+ "mascot": Qt.resolvedUrl("graphics/pixel.png"),
200197 "title": "—\n—",
201198 "subtitle": "—",
202199 "summary": "—\n—\n—\n—\n—",
qml/Dash/CardVerticalJournal.qml+1−1
@@ -62,7 +62,7 @@ DashRenderer {
6262 Connections {
6363 target: loader.item
6464 onClicked: root.clicked(index, result, loader.item, model)
65− onPressAndHold: root.pressAndHold(index, model)
65+ onPressAndHold: root.pressAndHold(index, result, model)
6666 }
6767 }
6868 }
qml/Dash/Dash.qml+12−1
@@ -34,7 +34,17 @@ Showable {
3434 DashCommunicatorService {
3535 objectName: "dashCommunicatorService"
3636 onSetCurrentScopeRequested: {
37− dash.setCurrentScope(scopeId, animate, reset)
37+ if (!isSwipe || !window.active || overviewController.progress != 0) {
38+ if (overviewController.progress != 0 && window.active) animate = false;
39+ dash.setCurrentScope(scopeId, animate, isSwipe)
40+ if (overviewController.progress != 0) {
41+ if (window.active) {
42+ dashContentCache.scheduleUpdate();
43+ }
44+ overviewController.enableAnimation = window.active;
45+ overviewController.progress = 0;
46+ }
47+ }
3848 }
3949 }
4050
@@ -344,6 +354,7 @@ Showable {
344354 enabled: !dashContent.subPageShown &&
345355 dashContent.currentScope &&
346356 dashContent.currentScope.searchQuery == "" &&
357+ !scopeItem.subPageShown &&
347358 (overviewController.progress == 0 || dragging)
348359
349360 readonly property real fullMovement: units.gu(20)
qml/Dash/DashApplication.qml+2−8
@@ -19,17 +19,11 @@ import Ubuntu.Components 1.0
1919import Ubuntu.Thumbnailer 0.1 // Register support for image://thumbnailer/ and image://albumart/
2020
2121MainView {
22− width: units.gu(40)
23− height: units.gu(71)
22+ width: applicationArguments.hasGeometry() ? applicationArguments.width() : units.gu(40)
23+ height: applicationArguments.hasGeometry() ? applicationArguments.height() : units.gu(68)
2424
2525 useDeprecatedToolbar: false
2626
27− Binding {
28− target: i18n
29− property: "domain"
30− value: "unity8"
31− }
32−
3327 Dash {
3428 anchors.fill: parent
3529 }
qml/Dash/DashNavigation.qml+2−3
@@ -37,9 +37,8 @@ Item {
3737 // FIXME this is only here for highlight purposes (see Background.qml, too)
3838 readonly property var background: backgroundItem
3939
40− visible: navigationButton.currentNavigation || altNavigationButton.currentNavigation
41−
42− height: visible ? units.gu(5) : 0
40+ visible: height != 0
41+ height: navigationButton.currentNavigation || altNavigationButton.currentNavigation ? units.gu(5) : 0
4342
4443 QtObject {
4544 id: d
qml/Dash/DashRenderer.qml+3−2
@@ -40,13 +40,14 @@ Item {
4040
4141 /// Emitted when the user clicked on an item
4242 /// @param index is the index of the clicked item
43− /// @param result result model of the cliked item, used for activation
43+ /// @param result result model of the clicked item, used for activation
4444 /// @param item item that has been clicked
4545 /// @param itemModel model of the item
4646 signal clicked(int index, var result, var item, var itemModel)
4747
4848 /// Emitted when the user pressed and held on an item
4949 /// @param index is the index of the held item
50+ /// @param result result model of the clicked item, used for activation
5051 /// @param itemModel model of the item
51− signal pressAndHold(int index, var itemModel)
52+ signal pressAndHold(int index, var result, var itemModel)
5253}
qml/Dash/GenericScopeView.qml+86−37
@@ -25,7 +25,7 @@ import "../Components/ListItems" as ListItems
2525FocusScope {
2626 id: scopeView
2727
28− readonly property bool navigationShown: pageHeaderLoader.item ? pageHeaderLoader.item.bottomItem[0].showList : false
28+ readonly property bool navigationShown: pageHeaderLoader.item ? pageHeaderLoader.item.bottomItem[0].openList : false
2929 property var scope: null
3030 property SortFilterProxyModel categories: categoryFilter
3131 property bool isCurrent: false
@@ -47,6 +47,10 @@ FocusScope {
4747
4848 signal backClicked()
4949
50+ onScopeChanged: {
51+ floatingSeeLess.companionBase = null;
52+ }
53+
5054 function positionAtBeginning() {
5155 categoryView.positionAtBeginning()
5256 }
@@ -66,13 +70,17 @@ FocusScope {
6670 // so it's not implemented
6771 scope.activate(result)
6872 } else {
69− openPreview(index, resultsModel, limitedCategoryItemCount);
73+ if (scope.preview(result)) {
74+ openPreview(index, resultsModel, limitedCategoryItemCount);
75+ }
7076 }
7177 }
7278
73− function itemPressedAndHeld(index, itemModel, resultsModel, limitedCategoryItemCount) {
79+ function itemPressedAndHeld(index, result, itemModel, resultsModel, limitedCategoryItemCount) {
7480 if (itemModel.uri.indexOf("scope://") !== 0) {
75− openPreview(index, resultsModel, limitedCategoryItemCount);
81+ if (scope.preview(result)) {
82+ openPreview(index, resultsModel, limitedCategoryItemCount);
83+ }
7684 }
7785 }
7886
@@ -142,6 +150,7 @@ FocusScope {
142150 objectName: "categoryListView"
143151
144152 x: subPageLoader.open ? -width : 0
153+ visible: x != -width
145154 Behavior on x { UbuntuNumberAnimation { } }
146155 width: parent.width
147156 height: floatingSeeLess.visible ? parent.height - floatingSeeLess.height + floatingSeeLess.yOffset
@@ -151,13 +160,55 @@ FocusScope {
151160 model: scopeView.categories
152161 forceNoClip: subPageLoader.open
153162 pixelAligned: true
154− interactive: !navigationShown
155163
156− property Item expandedCategoryItem: null
164+ property string expandedCategoryId: ""
165+ property int runMaximizeAfterSizeChanges: 0
157166
158167 readonly property bool pageHeaderTotallyVisible: scopeView.showPageHeader &&
159168 ((headerItemShownHeight == 0 && categoryView.contentY <= categoryView.originY) || (headerItemShownHeight == pageHeaderLoader.item.height))
160169
170+ onExpandedCategoryIdChanged: {
171+ var firstCreated = firstCreatedIndex();
172+ var shrinkingAny = false;
173+ var shrinkHeightDifference = 0;
174+ for (var i = 0; i < createdItemCount(); ++i) {
175+ var baseItem = item(firstCreated + i);
176+ if (baseItem.expandable) {
177+ var shouldExpand = baseItem.category === expandedCategoryId;
178+ if (shouldExpand != baseItem.expanded) {
179+ var animate = false;
180+ if (!subPageLoader.open) {
181+ var animateShrinking = !shouldExpand && baseItem.y + baseItem.item.collapsedHeight + baseItem.seeAllButton.height < categoryView.height;
182+ var animateGrowing = shouldExpand && baseItem.y + baseItem.height < categoryView.height;
183+ animate = shrinkingAny || animateShrinking || animateGrowing;
184+ }
185+
186+ if (!shouldExpand) {
187+ shrinkingAny = true;
188+ shrinkHeightDifference = baseItem.item.expandedHeight - baseItem.item.collapsedHeight;
189+ }
190+
191+ if (shouldExpand && !subPageLoader.open) {
192+ if (!shrinkingAny) {
193+ categoryView.maximizeVisibleArea(firstCreated + i, baseItem.item.expandedHeight + baseItem.seeAllButton.height);
194+ } else {
195+ // If the space that shrinking is smaller than the one we need to grow we'll call maximizeVisibleArea
196+ // after the shrink/grow animation ends
197+ var growHeightDifference = baseItem.item.expandedHeight - baseItem.item.collapsedHeight;
198+ if (growHeightDifference > shrinkHeightDifference) {
199+ runMaximizeAfterSizeChanges = 2;
200+ } else {
201+ runMaximizeAfterSizeChanges = 0;
202+ }
203+ }
204+ }
205+
206+ baseItem.expand(shouldExpand, animate);
207+ }
208+ }
209+ }
210+ }
211+
161212 delegate: ListItems.Base {
162213 id: baseItem
163214 objectName: "dashCategory" + category
@@ -195,7 +246,7 @@ FocusScope {
195246 // This can happen with the VJ that doesn't know how height it will be on creation
196247 // so doesn't set expandable until a bit too late for onLoaded
197248 if (expandable) {
198− var shouldExpand = baseItem === categoryView.expandedCategoryItem;
249+ var shouldExpand = baseItem.category === categoryView.expandedCategoryId;
199250 baseItem.expand(shouldExpand, false /*animate*/);
200251 }
201252 }
@@ -216,9 +267,23 @@ FocusScope {
216267 id: heightBehaviour
217268 enabled: false
218269 animation: UbuntuNumberAnimation {
270+ duration: UbuntuAnimation.FastDuration
219271 onRunningChanged: {
220272 if (!running) {
221273 heightBehaviour.enabled = false
274+ if (categoryView.runMaximizeAfterSizeChanges > 0) {
275+ categoryView.runMaximizeAfterSizeChanges--;
276+ if (categoryView.runMaximizeAfterSizeChanges == 0) {
277+ var firstCreated = categoryView.firstCreatedIndex();
278+ for (var i = 0; i < categoryView.createdItemCount(); ++i) {
279+ var baseItem = categoryView.item(firstCreated + i);
280+ if (baseItem.category === categoryView.expandedCategoryId) {
281+ categoryView.maximizeVisibleArea(firstCreated + i, baseItem.item.expandedHeight + baseItem.seeAllButton.height);
282+ break;
283+ }
284+ }
285+ }
286+ }
222287 }
223288 }
224289 }
@@ -246,7 +311,7 @@ FocusScope {
246311 item.objectName = Qt.binding(function() { return categoryId })
247312 item.scopeStyle = scopeView.scopeStyle;
248313 if (baseItem.expandable) {
249− var shouldExpand = baseItem === categoryView.expandedCategoryItem;
314+ var shouldExpand = baseItem.category === categoryView.expandedCategoryId;
250315 baseItem.expand(shouldExpand, false /*animate*/);
251316 }
252317 updateDelegateCreationRange();
@@ -270,7 +335,7 @@ FocusScope {
270335 }
271336
272337 onPressAndHold: {
273− scopeView.itemPressedAndHeld(index, itemModel, target.model, categoryItemCount());
338+ scopeView.itemPressedAndHeld(index, result, itemModel, target.model, categoryItemCount());
274339 }
275340
276341 function categoryItemCount() {
@@ -283,27 +348,6 @@ FocusScope {
283348 }
284349 Connections {
285350 target: categoryView
286− onExpandedCategoryItemChanged: {
287− collapseAllButExpandedCategory();
288− }
289− function collapseAllButExpandedCategory() {
290− var item = rendererLoader.item;
291− if (baseItem.expandable) {
292− var shouldExpand = baseItem === categoryView.expandedCategoryItem;
293− if (shouldExpand != baseItem.expanded) {
294− // If the filter animation will be seen start it, otherwise, just flip the switch
295− var shrinkingVisible = !shouldExpand && y + item.collapsedHeight + seeAll.height < categoryView.height;
296− var growingVisible = shouldExpand && y + height < categoryView.height;
297− if (!subPageLoader.open || shouldExpand) {
298− var animate = shrinkingVisible || growingVisible;
299− baseItem.expand(shouldExpand, animate)
300− if (shouldExpand && !subPageLoader.open) {
301− categoryView.maximizeVisibleArea(index, item.expandedHeight + seeAll.height);
302− }
303− }
304− }
305− }
306− }
307351 onOriginYChanged: rendererLoader.updateDelegateCreationRange();
308352 onContentYChanged: rendererLoader.updateDelegateCreationRange();
309353 onHeightChanged: rendererLoader.updateDelegateCreationRange();
@@ -350,13 +394,15 @@ FocusScope {
350394 left: parent.left
351395 right: parent.right
352396 }
353− height: seeAllLabel.visible ? seeAllLabel.font.pixelSize + units.gu(4) : 0
397+ height: baseItem.expandable && !baseItem.headerLink ? seeAllLabel.font.pixelSize + units.gu(4) : 0
398+ visible: height != 0
354399
355400 onClicked: {
356− if (categoryView.expandedCategoryItem !== baseItem) {
357− categoryView.expandedCategoryItem = baseItem;
401+ if (categoryView.expandedCategoryId !== baseItem.category) {
402+ categoryView.expandedCategoryId = baseItem.category;
403+ floatingSeeLess.companionBase = baseItem;
358404 } else {
359− categoryView.expandedCategoryItem = null;
405+ categoryView.expandedCategoryId = "";
360406 }
361407 }
362408
@@ -370,7 +416,6 @@ FocusScope {
370416 fontSize: "small"
371417 font.weight: Font.Bold
372418 color: scopeStyle ? scopeStyle.foreground : Theme.palette.normal.baseText
373− visible: baseItem.expandable && !baseItem.headerLink
374419 }
375420 }
376421
@@ -456,7 +501,7 @@ FocusScope {
456501 objectName: "floatingSeeLess"
457502
458503 property Item companionTo: companionBase ? companionBase.seeAllButton : null
459− property Item companionBase: categoryView.expandedCategoryItem
504+ property Item companionBase: null
460505 property bool showBecausePosition: false
461506 property real yOffset: 0
462507
@@ -468,7 +513,7 @@ FocusScope {
468513 height: seeLessLabel.font.pixelSize + units.gu(4)
469514 visible: companionTo && showBecausePosition
470515
471− onClicked: categoryView.expandedCategoryItem = null;
516+ onClicked: categoryView.expandedCategoryId = "";
472517
473518 function updateVisibility() {
474519 var companionPos = companionTo.mapToItem(floatingSeeLess, 0, 0);
@@ -477,6 +522,10 @@ FocusScope {
477522 var posToBase = floatingSeeLess.mapToItem(companionBase, 0, -yOffset).y;
478523 yOffset = Math.max(0, companionBase.item.collapsedHeight - posToBase);
479524 yOffset = Math.min(yOffset, height);
525+
526+ if (!showBecausePosition && categoryView.expandedCategoryId === "") {
527+ companionBase = null;
528+ }
480529 }
481530
482531 Label {
qml/Dash/PageHeader.qml+23−17
@@ -37,7 +37,7 @@ Item {
3737 property ListModel searchHistory: SearchHistoryModel
3838 property alias searchQuery: searchTextField.text
3939 property alias searchHint: searchTextField.placeholderText
40− property alias showSignatureLine: bottomBorder.visible
40+ property bool showSignatureLine: true
4141
4242 property alias bottomItem: bottomContainer.children
4343 property int paginationCount: 0
@@ -64,9 +64,12 @@ Item {
6464 }
6565 }
6666
67− function closePopup() {
67+ function closePopup(keepFocus) {
6868 if (headerContainer.popover != null) {
69+ headerContainer.popover.unfocusOnDestruction = !keepFocus;
6970 PopupUtils.close(headerContainer.popover);
71+ } else if (!keepFocus) {
72+ unfocus();
7073 }
7174 }
7275
@@ -74,11 +77,8 @@ Item {
7477 if (searchHistory) {
7578 searchHistory.addQuery(searchTextField.text);
7679 }
77− if (!keepFocus) {
78− unfocus();
79− }
8080 searchTextField.text = "";
81− closePopup();
81+ closePopup(keepFocus);
8282 }
8383
8484 function unfocus() {
@@ -102,7 +102,7 @@ Item {
102102 }
103103
104104 function refreshLogo() {
105− if (scopeStyle ? scopeStyle.headerLogo != "" : false) {
105+ if (root.scopeStyle ? root.scopeStyle.headerLogo != "" : false) {
106106 header.contents = imageComponent.createObject();
107107 } else if (header.contents) {
108108 header.contents.destroy();
@@ -119,11 +119,10 @@ Item {
119119 anchors { fill: parent; margins: units.gu(1); bottomMargin: units.gu(3) + bottomContainer.height }
120120 visible: headerContainer.showSearch
121121 onPressed: {
122− closePopup();
122+ closePopup(/* keepFocus */false);
123123 if (!searchTextField.text) {
124124 headerContainer.showSearch = false;
125125 }
126− searchTextField.focus = false;
127126 mouse.accepted = false;
128127 }
129128 }
@@ -133,7 +132,7 @@ Item {
133132 objectName: "headerContainer"
134133 clip: contentY < height
135134 anchors { left: parent.left; top: parent.top; right: parent.right }
136− height: units.gu(6.5)
135+ height: units.gu(7)
137136 contentHeight: headersColumn.height
138137 interactive: false
139138 contentY: showSearch ? 0 : height
@@ -228,7 +227,7 @@ Item {
228227
229228 onTextChanged: {
230229 if (text != "") {
231− closePopup();
230+ closePopup(/* keepFocus */true);
232231 }
233232 }
234233 }
@@ -288,7 +287,7 @@ Item {
288287 id: imageComponent
289288
290289 Item {
291− anchors { fill: parent; topMargin: units.gu(1); bottomMargin: units.gu(1) }
290+ anchors { fill: parent; topMargin: units.gu(1.5); bottomMargin: units.gu(1.5) }
292291 clip: true
293292 Image {
294293 objectName: "titleImage"
@@ -310,8 +309,13 @@ Item {
310309 id: popover
311310 autoClose: false
312311
312+ property bool unfocusOnDestruction: false
313+
313314 Component.onDestruction: {
314315 headerContainer.popover = null;
316+ if (unfocusOnDestruction) {
317+ root.unfocus();
318+ }
315319 }
316320
317321 Column {
@@ -332,8 +336,7 @@ Item {
332336 onClicked: {
333337 searchHistory.addQuery(text);
334338 searchTextField.text = text;
335− closePopup();
336− unfocus();
339+ closePopup(/* keepFocus */false);
337340 }
338341 }
339342 }
@@ -343,6 +346,7 @@ Item {
343346
344347 Rectangle {
345348 id: bottomBorder
349+ visible: showSignatureLine
346350 anchors {
347351 top: headerContainer.bottom
348352 left: parent.left
@@ -350,7 +354,7 @@ Item {
350354 bottom: bottomContainer.top
351355 }
352356
353− color: scopeStyle ? scopeStyle.headerDividerColor : "#e0e0e0"
357+ color: root.scopeStyle ? root.scopeStyle.headerDividerColor : "#e0e0e0"
354358
355359 Rectangle {
356360 anchors {
@@ -404,8 +408,10 @@ Item {
404408 Qt.lighter(Qt.rgba(bottomItem.background.topColor.r,
405409 bottomItem.background.topColor.g,
406410 bottomItem.background.topColor.b, 1.0), 1.2);
407− } else if (!bottomItem && scopeStyle) {
408− Qt.lighter(Qt.rgba(scopeStyle.background.r, scopeStyle.background.g, scopeStyle.background.b, 1.0), 1.2);
411+ } else if (!bottomItem && root.scopeStyle) {
412+ Qt.lighter(Qt.rgba(root.scopeStyle.background.r,
413+ root.scopeStyle.background.g,
414+ root.scopeStyle.background.b, 1.0), 1.2);
409415 } else "#CCFFFFFF"
410416 }
411417 }
qml/Dash/PreviewListView.qml+2−2
@@ -44,7 +44,7 @@ Item {
4444 id: header
4545 objectName: "pageHeader"
4646 width: parent.width
47− title: scope ? scope.name : ""
47+ title: root.scope ? root.scope.name : ""
4848 showBackButton: true
4949 searchEntryEnabled: false
5050 scopeStyle: root.scopeStyle
@@ -78,7 +78,7 @@ Item {
7878 if (previewListView.currentItem && previewListView.currentItem.previewData !== undefined) {
7979 previewListView.currentItem.previewData.cancelAction();
8080 }
81− scope.cancelActivation();
81+ root.scope.cancelActivation();
8282 model = undefined;
8383 }
8484 }
qml/Dash/Previews/PreviewPayments.qml+8
@@ -49,6 +49,7 @@ PreviewWidget {
4949
5050 Payments {
5151 id: paymentClient
52+ objectName: "paymentClient"
5253
5354 property var source: widgetData["source"]
5455
@@ -59,8 +60,15 @@ PreviewWidget {
5960 root.triggered(widgetId, "purchaseCompleted", source);
6061 }
6162 onPurchaseError: {
63+ paymentButton.opacity = 1;
6264 root.triggered(widgetId, "purchaseError", source);
6365 }
66+ onPurchaseCancelled: {
67+ paymentButton.opacity = 1;
68+ // DO NOT emit the signal right now, as it causes a new
69+ // preview to be requested, when that is not what we want.
70+ //root.triggered(widgetId, "purchaseCancelled", source);
71+ }
6472 }
6573 }
6674
qml/Dash/ScopesOverview.qml+7−1
@@ -203,7 +203,7 @@ Item {
203203 }
204204 width: parent.width
205205 clip: true
206− title: i18n.tr("Manage Dash")
206+ title: i18n.tr("Manage Scopes")
207207 scopeStyle: overviewScopeStyle
208208 showSignatureLine: false
209209 searchEntryEnabled: true
@@ -386,6 +386,7 @@ Item {
386386
387387 Rectangle {
388388 id: bottomBar
389+ objectName: "bottomBar"
389390 color: "black"
390391 height: units.gu(8)
391392 width: parent.width
@@ -400,6 +401,11 @@ Item {
400401 }
401402 }
402403
404+ MouseArea {
405+ // Just eat any other press since this parent is black opaque
406+ anchors.fill: parent
407+ }
408+
403409 AbstractButton {
404410 objectName: "scopesOverviewDoneButton"
405411 width: Math.max(label.width + units.gu(2), units.gu(10))
qml/Dash/graphics/checkers.pngdeleted

Binary file not shown.

qml/Dash/graphics/pixel.pngnew file

Binary file not shown.

qml/Launcher/Launcher.qml+1−2
@@ -243,10 +243,9 @@ Item {
243243 onDraggingChanged: {
244244 if (!dragging) {
245245 if (distance > panel.width / 2) {
246+ root.switchToNextState("visible")
246247 if (distance > minimizeDistance) {
247248 root.dash();
248− } else {
249− root.switchToNextState("visible")
250249 }
251250 } else {
252251 root.switchToNextState("")
qml/Launcher/LauncherDelegate.qml+4−2
@@ -21,7 +21,8 @@ Item {
2121 id: root
2222
2323 property string iconName
24− property int count: -1
24+ property int count: 0
25+ property bool countVisible: false
2526 property int progress: -1
2627 property bool itemFocused: false
2728 property real maxAngle: 0
@@ -80,11 +81,12 @@ Item {
8081 width: Math.min(root.itemWidth, Math.max(units.gu(2), countLabel.implicitWidth + units.gu(1)))
8182 height: units.gu(2)
8283 color: UbuntuColors.orange
83− visible: root.count > 0
84+ visible: root.countVisible
8485 borderSource: "none"
8586
8687 Label {
8788 id: countLabel
89+ objectName: "countLabel"
8890 text: root.count
8991 anchors.centerIn: parent
9092 // FIXME: verticalCenter seems to be off wee bit and QML doesn't have a centerLine
qml/Launcher/LauncherPanel.qml+1
@@ -156,6 +156,7 @@ Rectangle {
156156 height: itemHeight
157157 iconName: model.icon
158158 count: model.count
159+ countVisible: model.countVisible
159160 progress: model.progress
160161 clipCorner: model.pinned
161162 itemFocused: model.focused
qml/Notifications/Notification.qml+133−47
@@ -39,19 +39,17 @@ Item {
3939 property bool fullscreen: false
4040 property int maxHeight
4141 property int margins
42− property Gradient greenGradient : Gradient {
43− GradientStop { position: 0.0; color: "#3fb24f" }
44− GradientStop { position: 1.0; color: "#3fb24f" }
45− }
46− property Gradient darkgreyGradient: Gradient {
47− GradientStop { position: 0.0; color: "#4d4745" }
48− GradientStop { position: 1.0; color: "#4d4745" }
49− }
42+ readonly property color red: "#fc4949"
43+ readonly property color green: "#3fb24f"
44+ readonly property color sdLightGrey: "#eaeaea"
45+ readonly property color sdDarkGrey: "#dddddd"
46+ readonly property color sdFontColor: "#5d5d5d"
47+ readonly property real contentSpacing: units.gu(2)
5048
5149 objectName: "background"
52− implicitHeight: type !== Notification.PlaceHolder ? (fullscreen ? maxHeight : contentColumn.height + contentColumn.spacing * 2) : 0
50+ implicitHeight: type !== Notification.PlaceHolder ? (fullscreen ? maxHeight : outterColumn.height + contentSpacing * 2) : 0
5351
54− color: Qt.rgba(0.132, 0.117, 0.109, 0.97)
52+ color: type == Notification.SnapDecision ? sdLightGrey : Qt.rgba(0.132, 0.117, 0.109, 0.97)
5553 opacity: 1 // FIXME: 1 because of LP: #1354406 workaround, has to be 0 really
5654
5755 state: {
@@ -84,7 +82,7 @@ Item {
8482
8583 // FIXME: using onCompleted because of LP: #1354406 workaround, has to be onOpacityChanged really
8684 Component.onCompleted: {
87− if (opacity == 1.0 && hints["suppress-sound"] != "true" && sound.source) {
85+ if (opacity == 1.0 && hints["suppress-sound"] != "true" && sound.source != "") {
8886 sound.play();
8987 }
9088 }
@@ -107,7 +105,7 @@ Item {
107105 states:[
108106 State {
109107 name: "contracted"
110− PropertyChanges {target: notification; height: units.gu(8)}
108+ PropertyChanges {target: notification; height: units.gu(10)}
111109 },
112110 State {
113111 name: "expanded"
@@ -131,6 +129,7 @@ Item {
131129 color: parent.color
132130 opacity: parent.opacity
133131 radius: "medium"
132+ borderSource: "none"
134133 }
135134
136135 Rectangle {
@@ -199,50 +198,41 @@ Item {
199198 }
200199
201200 Column {
202− id: contentColumn
203− objectName: "contentColumn"
201+ id: outterColumn
204202
205203 anchors {
206204 left: parent.left
207205 right: parent.right
208206 top: parent.top
209− margins: fullscreen ? 0 : spacing
207+ margins: 0
208+ topMargin: fullscreen ? 0 : units.gu(2)
210209 }
211210
212− spacing: units.gu(1)
211+ spacing: units.gu(2)
213212
214213 Row {
215214 id: topRow
216215
217− spacing: contentColumn.spacing
216+ spacing: contentSpacing
218217 anchors {
219218 left: parent.left
220219 right: parent.right
220+ margins: contentSpacing
221221 }
222222
223223 ShapedIcon {
224224 id: icon
225225
226226 objectName: "icon"
227− width: units.gu(6)
228− height: units.gu(6)
227+ width: type == Notification.Ephemeral && !bodyLabel.visible ? units.gu(3) : units.gu(6)
228+ height: width
229229 shaped: notification.hints["x-canonical-non-shaped-icon"] == "true" ? false : true
230230 visible: iconSource !== undefined && iconSource != ""
231− }
232−
233− Image {
234− id: secondaryIcon
235−
236− objectName: "secondaryIcon"
237− width: units.gu(2)
238− height: units.gu(2)
239− visible: source !== undefined && source != ""
240− fillMode: Image.PreserveAspectCrop
241− }
231+ }
242232
243233 Column {
244234 id: labelColumn
245− width: parent.width - x
235+ width: secondaryIcon.visible ? parent.width - x - units.gu(4.5) : parent.width - x
246236
247237 anchors.verticalCenter: (icon.visible && !bodyLabel.visible) ? icon.verticalCenter : undefined
248238
@@ -255,8 +245,7 @@ Item {
255245 right: parent.right
256246 }
257247 fontSize: "medium"
258− font.bold: true
259− color: Theme.palette.selected.backgroundText
248+ color: type == Notification.SnapDecision ? sdFontColor : Theme.palette.selected.backgroundText
260249 elide: Text.ElideRight
261250 textFormat: Text.PlainText
262251 }
@@ -271,14 +260,27 @@ Item {
271260 }
272261 visible: body != ""
273262 fontSize: "small"
274− color: Theme.palette.selected.backgroundText
275− opacity: 0.6
263+ color: type == Notification.SnapDecision ? sdFontColor : Theme.palette.selected.backgroundText
276264 wrapMode: Text.WordWrap
277− maximumLineCount: 10
265+ maximumLineCount: type == Notification.SnapDecision ? 12 : 2
278266 elide: Text.ElideRight
279267 textFormat: Text.PlainText
280268 }
281269 }
270+
271+ Image {
272+ id: secondaryIcon
273+
274+ objectName: "secondaryIcon"
275+ width: units.gu(3)
276+ height: units.gu(3)
277+ visible: status === Image.Ready
278+ fillMode: Image.PreserveAspectCrop
279+ }
280+ }
281+
282+ ListItem.ThinDivider {
283+ visible: type == Notification.SnapDecision
282284 }
283285
284286 Column {
@@ -321,6 +323,74 @@ Item {
321323 }
322324 }
323325
326+ Column {
327+ id: oneOverTwoCase
328+
329+ anchors {
330+ left: parent.left
331+ right: parent.right
332+ margins: contentSpacing
333+ }
334+
335+ spacing: contentSpacing
336+
337+ visible: notification.type == Notification.SnapDecision && oneOverTwoRepeaterTop.count == 3
338+
339+ Repeater {
340+ id: oneOverTwoRepeaterTop
341+
342+ model: notification.actions
343+ delegate: Loader {
344+ id: oneOverTwoLoaderTop
345+
346+ property string actionId: id
347+ property string actionLabel: label
348+
349+ Component {
350+ id: oneOverTwoButtonTop
351+
352+ Button {
353+ objectName: "notify_oot_button" + index
354+ width: oneOverTwoCase.width
355+ text: oneOverTwoLoaderTop.actionLabel
356+ color: notification.hints["x-canonical-private-affirmative-tint"] == "true" ? green : sdDarkGrey
357+ onClicked: notification.notification.invokeAction(oneOverTwoLoaderTop.actionId)
358+ }
359+ }
360+ sourceComponent: index == 0 ? oneOverTwoButtonTop : undefined
361+ }
362+ }
363+
364+ Row {
365+ spacing: contentSpacing
366+
367+ Repeater {
368+ id: oneOverTwoRepeaterBottom
369+
370+ model: notification.actions
371+ delegate: Loader {
372+ id: oneOverTwoLoaderBottom
373+
374+ property string actionId: id
375+ property string actionLabel: label
376+
377+ Component {
378+ id: oneOverTwoButtonBottom
379+
380+ Button {
381+ objectName: "notify_oot_button" + index
382+ width: oneOverTwoCase.width / 2 - spacing * 2
383+ text: oneOverTwoLoaderBottom.actionLabel
384+ color: index == 1 && notification.hints["x-canonical-private-rejection-tint"] == "true" ? red : sdDarkGrey
385+ onClicked: notification.notification.invokeAction(oneOverTwoLoaderBottom.actionId)
386+ }
387+ }
388+ sourceComponent: (index == 1 || index == 2) ? oneOverTwoButtonBottom : undefined
389+ }
390+ }
391+ }
392+ }
393+
324394 Row {
325395 id: buttonRow
326396
@@ -328,9 +398,10 @@ Item {
328398 anchors {
329399 left: parent.left
330400 right: parent.right
401+ margins: contentSpacing
331402 }
332− visible: notification.type == Notification.SnapDecision && actionRepeater.count > 0
333− spacing: units.gu(1)
403+ visible: notification.type == Notification.SnapDecision && actionRepeater.count > 0 && !oneOverTwoCase.visible
404+ spacing: units.gu(2)
334405 layoutDirection: Qt.RightToLeft
335406
336407 Repeater {
@@ -347,10 +418,19 @@ Item {
347418 id: actionButton
348419
349420 Button {
350− objectName: "button" + index
351− width: buttonRow.width / 2 - spacing
421+ objectName: "notify_button" + index
422+ width: buttonRow.width / 2 - spacing*2
352423 text: loader.actionLabel
353− gradient: notification.hints["x-canonical-private-button-tint"] == "true" && index == 0 ? greenGradient : darkgreyGradient
424+ color: {
425+ var result = sdDarkGrey;
426+ if (index == 0 && notification.hints["x-canonical-private-affirmative-tint"] == "true") {
427+ result = green;
428+ }
429+ if (index == 1 && notification.hints["x-canonical-private-rejection-tint"] == "true") {
430+ result = red;
431+ }
432+ return result;
433+ }
354434 onClicked: notification.notification.invokeAction(loader.actionId)
355435 }
356436 }
@@ -362,10 +442,16 @@ Item {
362442 ComboButton {
363443 id: comboButton
364444
365− objectName: "button2"
445+ objectName: "notify_button2"
366446 width: parent.width
367− visible: notification.type == Notification.SnapDecision && actionRepeater.count > 3
368− gradient: darkgreyGradient
447+ anchors {
448+ left: parent.left
449+ right: parent.right
450+ margins: contentSpacing
451+ }
452+
453+ visible: notification.type == Notification.SnapDecision && actionRepeater.count > 3 && !oneOverTwoCase.visible
454+ color: sdDarkGrey
369455 onClicked: notification.notification.invokeAction(comboRepeater.itemAt(2).actionId)
370456 expanded: false
371457 expandedHeight: (comboRepeater.count - 2) * units.gu(4) + units.gu(.5)
@@ -399,7 +485,7 @@ Item {
399485 MouseArea {
400486 id: comboInputArea
401487
402− objectName: "button" + index
488+ objectName: "notify_button" + index
403489 width: comboButton.width
404490 height: comboIcon.height + units.gu(2)
405491
@@ -421,7 +507,7 @@ Item {
421507 }
422508 width: units.gu(2)
423509 height: units.gu(2)
424− color: "white"
510+ color: sdFontColor
425511 name: splitLabel[2]
426512 }
427513
@@ -434,7 +520,7 @@ Item {
434520 verticalCenter: comboIcon.verticalCenter
435521 }
436522 fontSize: "small"
437− color: "white"
523+ color: sdFontColor
438524 text: splitLabel[3]
439525 }
440526 }
qml/Notifications/NotificationMenuItemFactory.qml+4
@@ -55,6 +55,7 @@ Loader {
5555 anchors {
5656 left: parent.left
5757 right: parent.right
58+ margins: spacing
5859 }
5960
6061 Component.onCompleted: {
@@ -65,6 +66,7 @@ Loader {
6566
6667 Label {
6768 text: menuData.label
69+ color: notification.sdFontColor
6870 }
6971
7072 TextField {
@@ -98,11 +100,13 @@ Loader {
98100 id: checkBox
99101
100102 checked: false
103+ activeFocusOnPress: false
101104 }
102105
103106 Label {
104107 anchors.verticalCenter: checkBox.verticalCenter
105108 text: i18n.tr("Show password")
109+ color: notification.sdFontColor
106110 }
107111 }
108112 }
qml/Notifications/Notifications.qml+1−1
@@ -33,7 +33,7 @@ ListView {
3333 id: snapDecisionProxyModel
3434
3535 model: notificationList.model
36− filterRole: UnityNotifications.ModelInterface.RoleType
36+ filterRole: UnityNotifications.ModelInterface != undefined ? UnityNotifications.ModelInterface.RoleType : 0
3737 filterRegExp: RegExp(UnityNotifications.Notification.SnapDecision)
3838 }
3939
qml/Panel/Indicators/IndicatorsLight.qml+4−7
@@ -27,12 +27,9 @@ QtObject {
2727 Component.onDestruction: Lights.state = Lights.Off
2828
2929 // QtObject does not have children
30− property var _connections: Connections {
31− id: powerConnection
32−
33− target: Powerd
34− onDisplayPowerStateChange: {
35− Lights.state = (status === Powerd.Off) ? Lights.On : Lights.Off
36− }
30+ property var _binding: Binding {
31+ target: Lights
32+ property: "state"
33+ value: (Powerd.status === Powerd.Off) ? Lights.On : Lights.Off
3734 }
3835}
qml/Shell.qml+42−21
@@ -15,6 +15,7 @@
1515 */
1616
1717import QtQuick 2.0
18+import QtQuick.Window 2.0
1819import AccountsService 0.1
1920import GSettings 1.0
2021import Unity.Application 0.1
@@ -22,6 +23,7 @@ import Ubuntu.Components 0.1
2223import Ubuntu.Components.Popups 1.0
2324import Ubuntu.Gestures 0.1
2425import Ubuntu.SystemImage 0.1
26+import Ubuntu.Telephony 0.1 as Telephony
2527import Unity.Connectivity 0.1
2628import Unity.Launcher 0.1
2729import Utils 0.1
@@ -60,6 +62,22 @@ Item {
6062 property int failedLoginsDelayAttempts: 7 // number of failed logins
6163 property int failedLoginsDelaySeconds: 5 * 60 // seconds of forced waiting
6264
65+ property int orientation
66+ readonly property int deviceOrientationAngle: Screen.angleBetween(Screen.primaryOrientation, Screen.orientation)
67+ onDeviceOrientationAngleChanged: {
68+ if (!OrientationLock.enabled) {
69+ orientation = Screen.orientation;
70+ }
71+ }
72+ readonly property bool orientationLockEnabled: OrientationLock.enabled
73+ onOrientationLockEnabledChanged: {
74+ if (orientationLockEnabled) {
75+ OrientationLock.savedOrientation = Screen.orientation;
76+ } else {
77+ orientation = Screen.orientation;
78+ }
79+ }
80+
6381 function activateApplication(appId) {
6482 if (ApplicationManager.findApplication(appId)) {
6583 ApplicationManager.requestFocusApplication(appId);
@@ -84,6 +102,12 @@ Item {
84102
85103 Component.onCompleted: {
86104 Theme.name = "Ubuntu.Components.Themes.SuruGradient"
105+ if (ApplicationManager.count > 0) {
106+ ApplicationManager.focusApplication(ApplicationManager.get(0).appId);
107+ }
108+ if (orientationLockEnabled) {
109+ orientation = OrientationLock.savedOrientation;
110+ }
87111 }
88112
89113 GSettings {
@@ -146,6 +170,7 @@ Item {
146170 lockscreen.show();
147171 }
148172 greeter.hide();
173+ launcher.hide();
149174 }
150175
151176 onFocusedApplicationIdChanged: {
@@ -164,6 +189,7 @@ Item {
164189 // for an emergency call or accepted an incoming call.
165190 setFakeActiveForApp(appId)
166191 }
192+ launcher.hide();
167193 }
168194 }
169195
@@ -204,6 +230,11 @@ Item {
204230 property: "inverseProgress"
205231 value: launcher.progress
206232 }
233+ Binding {
234+ target: applicationsDisplayLoader.item
235+ property: "orientation"
236+ value: shell.orientation
237+ }
207238 }
208239 }
209240
@@ -457,18 +488,9 @@ Item {
457488 id: powerConnection
458489 target: Powerd
459490
460− onDisplayPowerStateChange: {
461− // We ignore any display-off signals when the proximity sensor
462− // is active. This usually indicates something like a phone call.
463− if (status == Powerd.Off && reason != Powerd.Proximity && !edgeDemo.running) {
464− greeter.showNow();
465− }
466−
467− // No reason to chew demo CPU when user isn't watching
468− if (status == Powerd.Off) {
469− edgeDemo.paused = true;
470− } else if (status == Powerd.On) {
471− edgeDemo.paused = false;
491+ onStatusChanged: {
492+ if (Powerd.status === Powerd.Off && !callManager.hasCalls && !edgeDemo.running) {
493+ greeter.showNow()
472494 }
473495 }
474496 }
@@ -542,9 +564,13 @@ Item {
542564 available: edgeDemo.launcherEnabled && (!shell.locked || AccountsService.enableLauncherWhileLocked) && greeter.fakeActiveForApp === ""
543565
544566 onShowDashHome: showHome()
545− onDash: showDash()
567+ onDash: {
568+ if (ApplicationManager.focusedApplicationId != "unity8-dash") {
569+ showDash()
570+ }
571+ }
546572 onDashSwipeChanged: {
547− if (dashSwipe && ApplicationManager.focusedApplicationId !== "unity8-dash") {
573+ if (dashSwipe) {
548574 dash.setCurrentScope("clickscope", false, true)
549575 }
550576 }
@@ -568,7 +594,7 @@ Item {
568594 visible: notifications.useModal && !greeter.shown && (notifications.state == "narrow")
569595 color: "#000000"
570596 anchors.fill: parent
571− opacity: 0.5
597+ opacity: 0.9
572598
573599 MouseArea {
574600 anchors.fill: parent
@@ -601,12 +627,6 @@ Item {
601627 }
602628 }
603629
604− Binding {
605− target: i18n
606− property: "domain"
607− value: "unity8"
608− }
609−
610630 Dialogs {
611631 id: dialogs
612632 anchors.fill: parent
@@ -637,6 +657,7 @@ Item {
637657 EdgeDemo {
638658 id: edgeDemo
639659 z: alphaDisclaimerLabel.z + 10
660+ paused: Powerd.status === Powerd.Off // Saves power
640661 greeter: greeter
641662 launcher: launcher
642663 indicators: panel.indicators
qml/Stages/ApplicationWindow.qml+5−2
@@ -27,6 +27,7 @@ Item {
2727
2828 // to be set from outside
2929 property QtObject application
30+ property int orientation
3031
3132 QtObject {
3233 id: d
@@ -55,7 +56,8 @@ Item {
5556 property bool surfaceInitialized: false
5657
5758 function forceSurfaceActiveFocusIfReady() {
58− if (sessionContainer.surface.focus &&
59+ if (sessionContainer.surface !== null &&
60+ sessionContainer.surface.focus &&
5961 sessionContainer.surface.parent === sessionContainer.surfaceContainer &&
6062 sessionContainer.surface.enabled) {
6163 sessionContainer.surface.forceActiveFocus();
@@ -110,14 +112,15 @@ Item {
110112 id: sessionContainer
111113 session: application ? application.session : null
112114 anchors.fill: parent
115+ orientation: root.orientation
113116
114117 onSurfaceChanged: {
115118 if (sessionContainer.surface) {
116119 surfaceInitTimer.start();
120+ d.forceSurfaceActiveFocusIfReady();
117121 } else {
118122 d.surfaceInitialized = false;
119123 }
120− d.forceSurfaceActiveFocusIfReady();
121124 }
122125 }
123126
qml/Stages/PhoneStage.qml+15−1
@@ -18,6 +18,7 @@ import QtQuick 2.0
1818import Ubuntu.Components 0.1
1919import Ubuntu.Gestures 0.1
2020import Unity.Application 0.1
21+import Unity.Session 0.1
2122import Utils 0.1
2223import "../Components"
2324
@@ -30,6 +31,7 @@ Rectangle {
3031 property bool interactive
3132 property bool spreadEnabled: true // If false, animations and right edge will be disabled
3233 property real inverseProgress: 0 // This is the progress for left edge drags, in pixels.
34+ property int orientation: Qt.PortraitOrientation
3335
3436 color: "black"
3537
@@ -44,6 +46,9 @@ Rectangle {
4446 }
4547
4648 onInverseProgressChanged: {
49+ // This can't be a simple binding because that would be triggered after this handler
50+ // while we need it active before doing the anition left/right
51+ priv.animateX = (inverseProgress == 0)
4752 if (inverseProgress == 0 && priv.oldInverseProgress > 0) {
4853 // left edge drag released. Minimum distance is given by design.
4954 if (priv.oldInverseProgress > units.gu(22)) {
@@ -92,6 +97,7 @@ Rectangle {
9297 property var focusedAppDelegate: null
9398
9499 property real oldInverseProgress: 0
100+ property bool animateX: true
95101
96102 onFocusedAppIdChanged: focusedAppDelegate = spreadRepeater.itemAt(0);
97103
@@ -311,7 +317,8 @@ Rectangle {
311317 Behavior on x {
312318 enabled: root.spreadEnabled &&
313319 !spreadView.active &&
314− !snapAnimation.running
320+ !snapAnimation.running &&
321+ priv.animateX
315322 UbuntuNumberAnimation {
316323 duration: UbuntuAnimation.FastDuration
317324 onRunningChanged: {
@@ -367,6 +374,13 @@ Rectangle {
367374 progress: appDelegate.progress - spreadView.positionMarker1
368375 }
369376
377+ Binding {
378+ target: appDelegate
379+ property: "orientation"
380+ when: appDelegate.interactive
381+ value: root.orientation
382+ }
383+
370384 onClicked: {
371385 if (spreadView.phase == 2) {
372386 if (ApplicationManager.focusedApplicationId == ApplicationManager.get(index).appId) {
qml/Stages/SessionContainer.qml+7
@@ -24,12 +24,14 @@ Item {
2424 readonly property var childSessions: session ? session.childSessions : null
2525 readonly property alias surface: _surfaceContainer.surface
2626 property bool interactive: true
27+ property int orientation
2728
2829 readonly property alias surfaceContainer: _surfaceContainer
2930 SurfaceContainer {
3031 id: _surfaceContainer
3132 anchors.fill: parent
3233 surface: session ? session.surface : null
34+ orientation: root.orientation
3335 }
3436
3537 Binding {
@@ -74,6 +76,11 @@ Item {
7476 target: item; when: item
7577 property: "height"; value: root.height
7678 }
79+
80+ Binding {
81+ target: item; when: item
82+ property: "orientation"; value: root.orientation
83+ }
7784 }
7885 }
7986
qml/Stages/SpreadDelegate.qml+3
@@ -36,6 +36,7 @@ Item {
3636 property alias swipeToCloseEnabled: dragArea.enabled
3737 property bool closeable
3838 property alias application: appWindow.application
39+ property int orientation
3940
4041 Item {
4142 objectName: "appWindowWithShadow"
@@ -56,12 +57,14 @@ Item {
5657
5758 ApplicationWindow {
5859 id: appWindow
60+ objectName: application ? "appWindow_" + application.appId : "appWindow_null"
5961 anchors {
6062 fill: parent
6163 topMargin: appWindow.fullscreen ? 0 : maximizedAppTopMargin
6264 }
6365
6466 interactive: root.interactive
67+ orientation: root.orientation
6568 }
6669 }
6770
qml/Stages/SurfaceContainer.qml+5
@@ -22,6 +22,7 @@ Item {
2222 objectName: "surfaceContainer"
2323 property Item surface: null
2424 property bool hadSurface: false
25+ property int orientation
2526
2627 onSurfaceChanged: {
2728 if (surface) {
@@ -34,6 +35,10 @@ Item {
3435 target: surface
3536 property: "anchors.fill"; value: root
3637 }
38+ Binding {
39+ target: surface
40+ property: "orientation"; value: root.orientation
41+ }
3742
3843 states: [
3944 State {
qml/Stages/TabletStage.qml+13
@@ -34,8 +34,12 @@ Rectangle {
3434 property real maximizedAppTopMargin
3535 property bool interactive
3636 property real inverseProgress: 0 // This is the progress for left edge drags, in pixels.
37+ property int orientation: Qt.PortraitOrientation
3738
3839 onInverseProgressChanged: {
40+ // This can't be a simple binding because that would be triggered after this handler
41+ // while we need it active before doing the anition left/right
42+ spreadView.animateX = (inverseProgress == 0)
3943 if (inverseProgress == 0 && priv.oldInverseProgress > 0) {
4044 // left edge drag released. Minimum distance is given by design.
4145 if (priv.oldInverseProgress > units.gu(22)) {
@@ -193,6 +197,8 @@ Rectangle {
193197 property int draggedDelegateCount: 0
194198 property int closingIndex: -1
195199
200+ property bool animateX: true
201+
196202 property bool sideStageDragging: sideStageDragHandle.dragging
197203 property real sideStageDragProgress: sideStageDragHandle.progress
198204
@@ -530,6 +536,13 @@ Rectangle {
530536 return progress;
531537 }
532538
539+ Binding {
540+ target: spreadTile
541+ property: "orientation"
542+ when: spreadTile.interactive
543+ value: root.orientation
544+ }
545+
533546 onClicked: {
534547 if (spreadView.phase == 2) {
535548 spreadView.snapTo(index);
qml/Stages/TransformedTabletSpreadDelegate.qml+2−1
@@ -138,7 +138,8 @@ SpreadDelegate {
138138 enabled: !spreadView.active &&
139139 !snapAnimation.running &&
140140 model.appId !== "unity8-dash" &&
141− !spreadView.sideStageDragging
141+ !spreadView.sideStageDragging &&
142+ spreadView.animateX
142143 UbuntuNumberAnimation {
143144 duration: UbuntuAnimation.FastDuration
144145 }
run_on_device.sh+43−41
@@ -4,8 +4,8 @@ USER=phablet
44USER_ID=32011
55PACKAGE=unity8
66BINARY=unity8
7−TARGET_IP=${TARGET_IP-127.0.0.1}
8−TARGET_SSH_PORT=${TARGET_SSH_PORT-2222}
7+TARGET_IP=127.0.0.1
8+TARGET_SSH_PORT=2222
99TARGET_DEBUG_PORT=3768
1010RUN_OPTIONS=-qmljsdebugger=port:$TARGET_DEBUG_PORT
1111SETUP=false
@@ -14,18 +14,23 @@ PINLOCK=false
1414KEYLOCK=false
1515NUM_JOBS='$(( `grep -c ^processor /proc/cpuinfo` + 1 ))'
1616FLIPPED=false
17−CHROOT_PREFIX="/data/ubuntu"
1817SSH_WAS_STARTED=0
1918SSH_STARTED=0
19+PASSWORD=""
20+PASSFILE=""
2021
2122usage() {
22− echo "usage: run_on_device [OPTIONS]\n"
23− echo "Script to setup a build environment for the shell and sync build and run it on the device\n"
23+ echo "usage: run_on_device -a SUDO_PASSWORD [OPTIONS]"
24+ echo
25+ echo "Script to setup a build environment for the shell and sync build and run it on the device"
26+ echo
2427 echo "OPTIONS:"
25− echo " -s, --setup Setup the build environment"
26− echo " -p, --pinlock Enable a PIN lock screen when running"
27− echo " -k, --keylock Enable a Keyboard lock screen when running"
28− echo ""
28+ echo " -a, --password The sudo password to use"
29+ echo " -s, --setup Setup the build environment"
30+ echo " -g, --gdb Run with gdb"
31+ echo " -p, --pinlock Enable a PIN lock screen when running"
32+ echo " -k, --keylock Enable a Keyboard lock screen when running"
33+ echo
2934 echo "IMPORTANT:"
3035 echo " * Make sure to have networking setup on the device beforehand."
3136 echo " * Execute that script from a directory containing unity8 code."
@@ -34,7 +39,7 @@ usage() {
3439
3540start_ssh() {
3641 if [ $SSH_STARTED -eq 0 ]; then
37− exec_with_adb initctl start ssh
42+ adb_sudo initctl start ssh
3843 SSH_STARTED=1
3944 fi
4045}
@@ -44,25 +49,13 @@ exec_with_ssh() {
4449 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -t $USER@$TARGET_IP -p $TARGET_SSH_PORT sudo -u $USER -i bash -ic \"$@\"
4550}
4651
47−exec_with_adb() {
48− if $FLIPPED; then
49− adb shell $@
50− else
51− adb shell chroot /data/ubuntu /usr/bin/env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin "$@"
52− fi
53−}
54−
55−adb_root() {
56− adb root
57− adb wait-for-device
52+adb_sudo() {
53+ adb shell "SUDO_ASKPASS=${PASSFILE} sudo --askpass $@"
5854}
5955
6056install_ssh_key() {
61− ssh-keygen -R $TARGET_IP
62− HOME_DIR="${CHROOT_PREFIX}/home/phablet"
57+ HOME_DIR="/home/phablet"
6358 adb push ~/.ssh/id_rsa.pub $HOME_DIR/.ssh/authorized_keys
64− adb shell chown $USER_ID:$USER_ID $HOME_DIR/.ssh
65− adb shell chown $USER_ID:$USER_ID $HOME_DIR/.ssh/authorized_keys
6659 adb shell chmod 700 $HOME_DIR/.ssh
6760 adb shell chmod 600 $HOME_DIR/.ssh/authorized_keys
6861}
@@ -73,8 +66,14 @@ setup_adb_forwarding() {
7366}
7467
7568install_dependencies() {
76− exec_with_adb apt-get update
77− exec_with_adb apt-get -y --force-yes install build-essential rsync bzr ccache gdb ninja-build devscripts equivs unity-plugin-scopes
69+ phablet-config writable-image --remotepassword ${PASSWORD} -p build-essential \
70+ -p rsync \
71+ -p bzr \
72+ -p ccache \
73+ -p gdb \
74+ -p ninja-build \
75+ -p devscripts \
76+ -p equivs
7877}
7978
8079sync_code() {
@@ -108,12 +107,13 @@ run() {
108107 exec_with_ssh "start unity8"
109108}
110109
111−set -- `getopt -n$0 -u -a --longoptions="setup,gdb,pinlock,keylock,help" "sgpkh" "$@"`
110+set -- `getopt -n$0 -u -a --longoptions="password:,setup,gdb,pinlock,keylock,help" "a:sgpkh" "$@"`
112111
113112# FIXME: giving incorrect arguments does not call usage and exit
114113while [ $# -gt 0 ]
115114do
116115 case "$1" in
116+ -a|--password) PASSWORD=$2;;
117117 -s|--setup) SETUP=true;;
118118 -g|--gdb) GDB=true;;
119119 -p|--pinlock) PINLOCK=true;;
@@ -124,21 +124,21 @@ do
124124 shift
125125done
126126
127+if [ -z "${PASSWORD}" ]; then
128+ echo "ERROR: You need to provide a sudo password..."
129+ echo
130+ usage
131+fi
127132
128−adb_root
129−[ "${TARGET_IP}" = "127.0.0.1" ] && setup_adb_forwarding
133+PASSFILE=$( adb shell "FILE=\`mktemp\`
134+ echo \"#!/bin/sh\" > \$FILE
135+ echo \"echo \\\"${PASSWORD}\\\"\" >> \$FILE
136+ chmod +x \$FILE
137+ echo \$FILE" | tr -d '\r' )
130138
131−if [ "`adb shell 'grep -q Ubuntu /etc/lsb-release 2> /dev/null && echo -n FLIPPED'`" = "FLIPPED" ]; then
132− FLIPPED=true
133− CHROOT_PREFIX=""
134− if [ "${TARGET_IP}" != "127.0.0.1" ]; then
135− echo "ERROR: Flipped image detected, adb over TCP/IP isn't supported, yet :/"
136− echo "Unset TARGET_IP and try again."
137− exit 2
138− fi
139−fi
139+setup_adb_forwarding
140140
141−status_output=$(exec_with_adb initctl status ssh)
141+status_output=$(adb_sudo initctl status ssh)
142142if [[ $status_output == "ssh start/running, process "* ]]; then
143143 SSH_WAS_STARTED=1
144144fi
@@ -158,6 +158,8 @@ else
158158 run
159159fi
160160
161+adb shell "rm ${PASSFILE}"
162+
161163if [ $SSH_WAS_STARTED -eq 0 ]; then
162− exec_with_adb initctl stop ssh
164+ adb_sudo initctl stop ssh
163165fi
src/Dash/CMakeLists.txt+1
@@ -1,5 +1,6 @@
11set(DASH_SRCS
22 main.cpp
3+ ../ApplicationArguments.h
34 ../MouseTouchAdaptor.cpp
45 ../CachingNetworkManagerFactory.cpp
56)
src/Dash/main.cpp+17−2
@@ -28,6 +28,7 @@
2828
2929#include <paths.h>
3030#include "../MouseTouchAdaptor.h"
31+#include "../ApplicationArguments.h"
3132#include "../CachingNetworkManagerFactory.h"
3233
3334int main(int argc, const char *argv[])
@@ -42,7 +43,11 @@ int main(int argc, const char *argv[])
4243 "Allow the mouse to provide touch input");
4344 parser.addOption(mousetouchOption);
4445
45− // FIXME Remove once we drop the need of the hint
46+ QCommandLineOption windowGeometryOption(QStringList() << "windowgeometry",
47+ "Specify the window geometry as [<width>x<height>]", "windowgeometry", "1");
48+ parser.addOption(windowGeometryOption);
49+
50+ // FIXME Remove once we drop the need of the hint
4651 QCommandLineOption desktopFileHintOption("desktop_file_hint",
4752 "The desktop_file_hint option for QtMir", "hint_file");
4853 parser.addOption(desktopFileHintOption);
@@ -52,6 +57,14 @@ int main(int argc, const char *argv[])
5257 parser.setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions);
5358 parser.process(*application);
5459
60+ ApplicationArguments qmlArgs;
61+ if (parser.isSet(windowGeometryOption) &&
62+ parser.value(windowGeometryOption).split('x').size() == 2)
63+ {
64+ QStringList geom = parser.value(windowGeometryOption).split('x');
65+ qmlArgs.setSize(geom.at(0).toInt(), geom.at(1).toInt());
66+ }
67+
5568 if (getenv("QT_LOAD_TESTABILITY")) {
5669 QLibrary testLib(QLatin1String("qttestability"));
5770 if (testLib.load()) {
@@ -68,10 +81,12 @@ int main(int argc, const char *argv[])
6881 }
6982
7083 bindtextdomain("unity8", translationDirectory().toUtf8().data());
84+ textdomain("unity8");
7185
7286 QQuickView* view = new QQuickView();
7387 view->setResizeMode(QQuickView::SizeRootObjectToView);
74− view->setTitle("Unity Dash");
88+ view->setTitle("Scopes");
89+ view->rootContext()->setContextProperty("applicationArguments", &qmlArgs);
7590
7691 // You will need this if you want to interact with touch-only components using a mouse
7792 // Needed only when manually testing on a desktop.
src/main.cpp+1
@@ -108,6 +108,7 @@ Load the testability driver");
108108 }
109109
110110 bindtextdomain("unity8", translationDirectory().toUtf8().data());
111+ textdomain("unity8");
111112
112113 QQuickView* view = new QQuickView();
113114 view->setResizeMode(QQuickView::SizeRootObjectToView);
tests/autopilot/unity8/application_lifecycle/tests/test_application_lifecycle.py+4−2
@@ -97,7 +97,8 @@ class ApplicationLifecycleTests(tests.ApplicationLifeCycleTestCase):
9797 self.assertThat(greeter.created, Eventually(Equals(True)))
9898
9999 application_name = self.launch_fake_app()
100− self.assertThat(greeter.created, Eventually(Equals(False)))
100+ greeter.wait_swiped_away()
101+ process_helpers.unlock_unity()
101102 self.assert_current_focused_application(application_name)
102103
103104 def test_greeter_hides_on_app_focus(self):
@@ -113,7 +114,8 @@ class ApplicationLifecycleTests(tests.ApplicationLifeCycleTestCase):
113114 self.assertThat(greeter.created, Eventually(Equals(True)))
114115
115116 self.launch_upstart_application(application_name)
116− self.assertThat(greeter.created, Eventually(Equals(False)))
117+ greeter.wait_swiped_away()
118+ process_helpers.unlock_unity()
117119 self.assert_current_focused_application(application_name)
118120
119121 def test_click_dash_icon_must_unfocus_application(self):
tests/autopilot/unity8/process_helpers.py+12−17
@@ -20,6 +20,7 @@
2020import logging
2121import subprocess
2222import sys
23+import dbus
2324
2425# This has to work in both python 3 (ap 1.5) and py2 (ap legacy 1.4.1) so we
2526# pick the correct location in each case. Remove the py2 branch once we no
@@ -82,22 +83,16 @@ def unlock_unity(unity_proxy_obj=None):
8283 if greeter.created is False:
8384 raise RuntimeWarning("Greeter appears to be already unlocked.")
8485
85− # Because of potential input jerkiness under heavy load,
86− # retry unlocking the greeter two times.
87− # https://bugs.launchpad.net/ubuntu/+bug/1260113
88−
89− retries = 3
90− while retries > 0:
91− try:
92− greeter.swipe()
93− except AssertionError:
94− retries -= 1
95− if retries == 0:
96− raise
97− logger.info("Failed to unlock greeter, trying again...")
98− else:
99− logger.info("Greeter unlocked, continuing.")
100− break
86+ bus = dbus.SessionBus()
87+ dbus_proxy = bus.get_object("com.canonical.UnityGreeter", "/")
88+ try:
89+ dbus_proxy.HideGreeter()
90+ except dbus.DBusException:
91+ logger.info("Failed to unlock greeter")
92+ raise
93+ else:
94+ greeter.created.wait_for(False)
95+ logger.info("Greeter unlocked, continuing.")
10196
10297
10398def lock_unity(unity_proxy_obj=None):
@@ -198,7 +193,7 @@ def get_job_status(name):
198193 ], universal_newlines=True)
199194 except subprocess.CalledProcessError as error:
200195 raise JobError(
201− "Unable to get {}'s status: {}".format(name, error)
196+ "Unable to get {}'s status: {}".format(name, error)
202197 )
203198
204199
tests/autopilot/unity8/shell/emulators/greeter.py+4−1
@@ -25,6 +25,9 @@ from unity8.shell.emulators import UnityEmulatorBase
2525class Greeter(UnityEmulatorBase):
2626 """An emulator that understands the greeter screen."""
2727
28+ def wait_swiped_away(self):
29+ self.showProgress.wait_for(0)
30+
2831 def swipe(self):
2932 """Swipe the greeter screen away."""
3033 self.created.wait_for(True)
@@ -37,7 +40,7 @@ class Greeter(UnityEmulatorBase):
3740 stop_y = start_y
3841 self.pointing_device.drag(start_x, start_y, stop_x, stop_y)
3942
40− self.showProgress.wait_for(0)
43+ self.wait_swiped_away()
4144
4245 def get_prompt(self):
4346 return self.select_single(
tests/autopilot/unity8/shell/tests/__init__.py+4−21
@@ -432,12 +432,6 @@ class DashBaseTestCase(AutopilotTestCase):
432432 binary_path = get_binary_path('unity8-dash')
433433 dash_proxy = self.launch_dash(binary_path, self.environment)
434434
435− if self.should_simulate_device():
436− # XXX Currently we have no way to launch the application with a
437− # specific size, so we must resize it after it's launched.
438− # --elopio - 2014-06-25
439− self.resize_window()
440−
441435 self.dash_app = dash_helpers.DashApp(dash_proxy)
442436 self.dash = self.dash_app.dash
443437 self.wait_for_dash()
@@ -470,18 +464,7 @@ class DashBaseTestCase(AutopilotTestCase):
470464 simulate_device_fixture = self.useFixture(
471465 toolkit_fixtures.SimulateDevice(
472466 self.app_width, self.app_height, self.grid_unit_px))
473− self.app_width = simulate_device_fixture.app_width
474− self.app_height = simulate_device_fixture.app_height
475−
476− def resize_window(self):
477− application = self.process_manager.get_running_applications()[0]
478− window = application.get_windows()[0]
479− window.resize(self.app_width, self.app_height)
480−
481− def get_window_size():
482− _, _, window_width, window_height = window.geometry
483− return window_width, window_height
484−
485− self.assertThat(
486− get_window_size,
487− Eventually(Equals((self.app_width, self.app_height))))
467+ self.environment['GRID_UNIT_PX'] = simulate_device_fixture.grid_unit_px
468+ self.environment['ARGS'] = '-windowgeometry {0}x{1}'\
469+ .format(simulate_device_fixture.app_width,
470+ simulate_device_fixture.app_height)
tests/autopilot/unity8/shell/tests/test_lock_screen.py+8−9
@@ -20,7 +20,6 @@
2020
2121from __future__ import absolute_import
2222
23−from unity8.process_helpers import unlock_unity
2423from unity8.shell import with_lightdm_mock
2524from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
2625
@@ -45,11 +44,11 @@ class TestLockscreen(UnityTestCase):
4544 @with_lightdm_mock("single-pin")
4645 def test_can_unlock_pin_screen(self):
4746 """Must be able to unlock the PIN entry lock screen."""
48− unity_proxy = self.launch_unity()
47+ self.launch_unity()
4948 greeter = self.main_window.get_greeter()
5049
5150 if greeter.narrowMode:
52− unlock_unity(unity_proxy)
51+ greeter.swipe()
5352 lockscreen = self._wait_for_lockscreen()
5453 self.main_window.enter_pin_code("1234")
5554 self.assertThat(lockscreen.shown, Eventually(Equals(False)))
@@ -60,11 +59,11 @@ class TestLockscreen(UnityTestCase):
6059 @with_lightdm_mock("single-passphrase")
6160 def test_can_unlock_passphrase_screen(self):
6261 """Must be able to unlock the passphrase entry screen."""
63− unity_proxy = self.launch_unity()
62+ self.launch_unity()
6463 greeter = self.main_window.get_greeter()
6564
6665 if greeter.narrowMode:
67− unlock_unity(unity_proxy)
66+ greeter.swipe()
6867 lockscreen = self._wait_for_lockscreen()
6968 self._enter_pin_passphrase("password")
7069 self.assertThat(lockscreen.shown, Eventually(Equals(False)))
@@ -75,11 +74,11 @@ class TestLockscreen(UnityTestCase):
7574 @with_lightdm_mock("single-pin")
7675 def test_pin_screen_wrong_code(self):
7776 """Entering the wrong pin code must not dismiss the lock screen."""
78− unity_proxy = self.launch_unity()
77+ self.launch_unity()
7978 greeter = self.main_window.get_greeter()
8079
8180 if greeter.narrowMode:
82− unlock_unity(unity_proxy)
81+ greeter.swipe()
8382 lockscreen = self._wait_for_lockscreen()
8483 self.main_window.enter_pin_code("4321")
8584 pinentryField = self.main_window.get_pinentryField()
@@ -94,11 +93,11 @@ class TestLockscreen(UnityTestCase):
9493 @with_lightdm_mock("single-passphrase")
9594 def test_passphrase_screen_wrong_password(self):
9695 """Entering the wrong password must not dismiss the lock screen."""
97− unity_proxy = self.launch_unity()
96+ self.launch_unity()
9897 greeter = self.main_window.get_greeter()
9998
10099 if greeter.narrowMode:
101− unlock_unity(unity_proxy)
100+ greeter.swipe()
102101 lockscreen = self._wait_for_lockscreen()
103102 self._enter_pin_passphrase("foobar")
104103 pinentryField = self.main_window.get_pinentryField()
tests/autopilot/unity8/shell/tests/test_notifications.py+61−97
@@ -135,10 +135,7 @@ class InteractiveNotificationBase(NotificationsBase):
135135 actions = [("action_id", "dummy")]
136136 hints = [
137137 ("x-canonical-switch-to-application", "true"),
138− (
139− "x-canonical-secondary-icon",
140− self._get_icon_path('applicationIcons/dialer-app.png')
141− )
138+ ("x-canonical-secondary-icon","dialer")
142139 ]
143140
144141 self._create_interactive_notification(
@@ -170,20 +167,19 @@ class InteractiveNotificationBase(NotificationsBase):
170167 body = "Frank Zappa\n+44 (0)7736 027340"
171168 icon_path = self._get_icon_path('avatars/anna_olsson.png')
172169 hints = [
173− (
174− "x-canonical-secondary-icon",
175− self._get_icon_path('applicationIcons/dialer-app.png')
176− ),
170+ ("x-canonical-secondary-icon", "incoming-call"),
177171 ("x-canonical-snap-decisions", "true"),
172+ ("x-canonical-private-affirmative-tint", "true"),
173+ ("x-canonical-private-rejection-tint", "true"),
178174 ]
179175
180176 actions = [
181177 ('action_accept', 'Hold + Answer'),
182178 ('action_decline_1', 'End + Answer'),
183179 ('action_decline_2', 'Decline'),
184− ('action_decline_3', 'messages:I missed your call - can you call me now?'),
185− ('action_decline_4', 'messages:I\'m running late. I\'m on my way.'),
186− ('action_decline_5', 'messages:I\'m busy at the moment. I\'ll call later.'),
180+ ('action_decline_3', 'message:I missed your call - can you call me now?'),
181+ ('action_decline_4', 'message:I\'m running late. I\'m on my way.'),
182+ ('action_decline_5', 'message:I\'m busy at the moment. I\'ll call later.'),
187183 ('action_decline_6', 'edit:Custom'),
188184 ]
189185
@@ -204,13 +200,53 @@ class InteractiveNotificationBase(NotificationsBase):
204200 notification.pointing_device.click_object(
205201 notification.select_single(objectName="combobutton_dropdown"))
206202 self.assertThat(
207− notification.select_single(objectName="button2").expanded,
203+ notification.select_single(objectName="notify_button2").expanded,
208204 Eventually(Equals(True)))
209205 time.sleep(2)
210206 notification.pointing_device.click_object(
211− notification.select_single(objectName="button4"))
207+ notification.select_single(objectName="notify_button4"))
212208 self.assert_notification_action_id_was_called("action_decline_4")
213209
210+
211+ def test_sd_one_over_two_layout(self):
212+ """Snap-decision with three actions should use one-over two button layout."""
213+ unity_proxy = self.launch_unity()
214+ unlock_unity(unity_proxy)
215+
216+ summary = "Theatre at Ferria Stadium"
217+ body = "at Ferria Stadium in Bilbao, Spain\n07578545317"
218+ hints = [
219+ ("x-canonical-snap-decisions", "true"),
220+ ("x-canonical-non-shaped-icon", "true"),
221+ ("x-canonical-private-affirmative-tint", "true")
222+ ]
223+
224+ actions = [
225+ ('action_accept', 'Ok'),
226+ ('action_decline_1', 'Snooze'),
227+ ('action_decline_2', 'View'),
228+ ]
229+
230+ self._create_interactive_notification(
231+ summary,
232+ body,
233+ None,
234+ "NORMAL",
235+ actions,
236+ hints
237+ )
238+
239+ # verify and interact with the triggered snap-decision notification
240+ notify_list = self._get_notifications_list()
241+ get_notification = lambda: notify_list.wait_select_single(
242+ 'Notification', objectName='notification1')
243+ notification = get_notification()
244+ self._assert_notification(
245+ notification, summary, body, False, False, 1.0)
246+ notification.pointing_device.click_object(
247+ notification.select_single(objectName="notify_oot_button0"))
248+ self.assert_notification_action_id_was_called("action_accept")
249+
214250 def test_modal_sd_without_greeter(self):
215251 """Snap-decision should block input to shell without greeter."""
216252 unity_proxy = self.launch_unity()
@@ -222,6 +258,8 @@ class InteractiveNotificationBase(NotificationsBase):
222258 hints = [
223259 ("x-canonical-snap-decisions", "true"),
224260 ("x-canonical-non-shaped-icon", "true"),
261+ ("x-canonical-private-affirmative-tint", "true"),
262+ ("x-canonical-private-rejection-tint", "true"),
225263 ]
226264
227265 actions = [
@@ -253,7 +291,7 @@ class InteractiveNotificationBase(NotificationsBase):
253291 self._assert_notification(
254292 notification, summary, body, True, False, 1.0)
255293 notification.pointing_device.click_object(
256− notification.select_single(objectName="button0"))
294+ notification.select_single(objectName="notify_button0"))
257295 self.assert_notification_action_id_was_called("action_accept")
258296
259297 def test_modal_sd_with_greeter(self):
@@ -266,6 +304,8 @@ class InteractiveNotificationBase(NotificationsBase):
266304 hints = [
267305 ("x-canonical-snap-decisions", "true"),
268306 ("x-canonical-non-shaped-icon", "true"),
307+ ("x-canonical-private-affirmative-tint", "true"),
308+ ("x-canonical-private-rejection-tint", "true"),
269309 ]
270310
271311 actions = [
@@ -296,7 +336,7 @@ class InteractiveNotificationBase(NotificationsBase):
296336 self._assert_notification(
297337 notification, summary, body, True, False, 1.0)
298338 notification.pointing_device.click_object(
299− notification.select_single(objectName="button0"))
339+ notification.select_single(objectName="notify_button0"))
300340 self.assert_notification_action_id_was_called("action_accept")
301341
302342 def _create_interactive_notification(
@@ -438,10 +478,7 @@ class EphemeralNotificationsTests(NotificationsBase):
438478 "join me and Anna?"
439479 icon_path = self._get_icon_path('avatars/anna_olsson.png')
440480 hints = [
441− (
442− "x-canonical-secondary-icon",
443− self._get_icon_path('applicationIcons/dialer-app.png')
444− )
481+ ("x-canonical-secondary-icon", "message")
445482 ]
446483
447484 notification = shell.create_ephemeral_notification(
@@ -474,17 +511,13 @@ class EphemeralNotificationsTests(NotificationsBase):
474511 notify_list = self._get_notifications_list()
475512
476513 summary = "Upload of image completed"
477− hints = [
478− (
479− "x-canonical-secondary-icon",
480− self._get_icon_path('applicationIcons/facebook.png')
481− )
482− ]
514+ icon_path = self._get_icon_path('applicationIcons/facebook.png')
515+ hints=[]
483516
484517 notification = shell.create_ephemeral_notification(
485518 summary,
486519 None,
487− None,
520+ icon_path,
488521 hints,
489522 "NORMAL",
490523 )
@@ -497,8 +530,8 @@ class EphemeralNotificationsTests(NotificationsBase):
497530 notification(),
498531 summary,
499532 None,
500− False,
501533 True,
534+ False,
502535 1.0
503536 )
504537
@@ -683,7 +716,7 @@ class EphemeralNotificationsTests(NotificationsBase):
683716 body = 'This bubble uses the icon-title-body layout with a ' \
684717 'secondary icon.'
685718 icon_path = self._get_icon_path('avatars/anna_olsson.png')
686− hint_icon = self._get_icon_path('applicationIcons/dialer-app.png')
719+ hint_icon = 'dialer'
687720
688721 notification = shell.create_ephemeral_notification(
689722 summary,
@@ -718,72 +751,3 @@ class EphemeralNotificationsTests(NotificationsBase):
718751 self.assertThat(get_notification, Eventually(NotEquals(None)))
719752 self._assert_notification(
720753 get_notification(), summary, body, False, False, 1.0)
721−
722− def test_append_hint(self):
723− """Notification has to accumulate body-text using append-hint."""
724− unity_proxy = self.launch_unity()
725− unlock_unity(unity_proxy)
726−
727− notify_list = self._get_notifications_list()
728−
729− summary = 'Cole Raby'
730− body = 'Hey Bro Coly!'
731− icon_path = self._get_icon_path('avatars/amanda.png')
732− body_sum = body
733− notification = shell.create_ephemeral_notification(
734− summary,
735− body,
736− icon_path,
737− hints=[('x-canonical-append', 'true')]
738− )
739−
740− notification.show()
741−
742− get_notification = lambda: notify_list.wait_select_single(
743− 'Notification', objectName='notification1')
744−
745− notification = get_notification()
746− self._assert_notification(
747− notification,
748− summary,
749− body_sum,
750− True,
751− False,
752− 1.0
753− )
754−
755− bodies = [
756− 'What\'s up dude?',
757− 'Did you watch the air-race in Oshkosh last week?',
758− 'Phil owned the place like no one before him!',
759− 'Did really everything in the race work according to regulations?',
760− 'Somehow I think to remember Burt Williams did cut corners and '
761− 'was not punished for this.',
762− 'Hopefully the referees will watch the videos of the race.',
763− 'Burt could get fined with US$ 50000 for that rule-violation :)'
764− ]
765−
766− for new_body in bodies:
767− body = new_body
768− body_sum += '\n' + body
769− notification = shell.create_ephemeral_notification(
770− summary,
771− body,
772− icon_path,
773− hints=[('x-canonical-append', 'true')]
774− )
775− notification.show()
776−
777− get_notification = lambda: notify_list.wait_select_single(
778− 'Notification',
779− objectName='notification1'
780− )
781− notification = get_notification()
782− self._assert_notification(
783− notification,
784− summary,
785− body_sum,
786− True,
787− False,
788− 1.0
789− )
tests/mocks/HudClient/fake_libhud_client.cpp+8−1
@@ -63,6 +63,7 @@ HudClientQuery *hud_client_query_new(const gchar *query)
6363DeeModel *hud_client_query_get_results_model(HudClientQuery *cquery)
6464{
6565 Q_ASSERT(cquery == HudClientStub::m_query);
66+ Q_UNUSED(cquery);
6667 if (!resultsModel) {
6768 resultsModel = dee_sequence_model_new();
6869 dee_model_set_schema_full(resultsModel, results_model_schema, G_N_ELEMENTS(results_model_schema));
@@ -113,18 +114,21 @@ void hud_client_query_execute_toolbar_item(HudClientQuery *cquery, HudClientQuer
113114{
114115 Q_ASSERT(cquery == HudClientStub::m_query);
115116 Q_UNUSED(timestamp);
117+ Q_UNUSED(cquery);
116118 HudClientStub::m_lastExecutedToolbarItem = item;
117119}
118120
119121void hud_client_query_set_query(HudClientQuery *cquery, const char *query)
120122{
121123 Q_ASSERT(cquery == HudClientStub::m_query);
124+ Q_UNUSED(cquery);
122125 HudClientStub::m_lastSetQuery = QString::fromUtf8(query);
123126}
124127
125128void hud_client_query_execute_command(HudClientQuery *cquery, GVariant *command_key, guint timestamp)
126129{
127130 Q_ASSERT(cquery == HudClientStub::m_query);
131+ Q_UNUSED(cquery);
128132 Q_UNUSED(timestamp);
129133 for (uint i = 0; i < dee_model_get_n_rows(resultsModel); ++i) {
130134 DeeModelIter *iter = dee_model_get_iter_at_row(resultsModel, i);
@@ -144,6 +148,7 @@ void hud_client_query_execute_command(HudClientQuery *cquery, GVariant *command_
144148HudClientParam *hud_client_query_execute_param_command(HudClientQuery *cquery, GVariant *command_key, guint timestamp)
145149{
146150 Q_ASSERT(cquery == HudClientStub::m_query);
151+ Q_UNUSED(cquery);
147152 Q_UNUSED(timestamp);
148153 for (uint i = 0; i < dee_model_get_n_rows(resultsModel); ++i) {
149154 DeeModelIter *iter = dee_model_get_iter_at_row(resultsModel, i);
@@ -165,12 +170,14 @@ HudClientParam *hud_client_query_execute_param_command(HudClientQuery *cquery, G
165170void hud_client_query_voice_query(HudClientQuery *cquery)
166171{
167172 Q_ASSERT(cquery == HudClientStub::m_query);
173+ Q_UNUSED(cquery);
168174 // TODO We are not testing voice queries yet
169175}
170176
171177gboolean hud_client_query_toolbar_item_active(HudClientQuery *cquery, HudClientQueryToolbarItems item)
172178{
173179 Q_ASSERT(cquery == HudClientStub::m_query);
180+ Q_UNUSED(cquery);
174181 if (item == HUD_CLIENT_QUERY_TOOLBAR_HELP)
175182 return HudClientStub::m_helpToolbarItemEnabled;
176183
@@ -218,7 +225,7 @@ GActionGroup *hud_client_param_get_actions(HudClientParam *param)
218225 if (!parametrizedActionGroup) {
219226 GSimpleActionGroup *actionGroup = g_simple_action_group_new();
220227 GSimpleAction *action = g_simple_action_new("costAction", G_VARIANT_TYPE_DOUBLE);
221− g_simple_action_group_insert(actionGroup, G_ACTION(action));
228+ g_action_map_add_action(G_ACTION_MAP(actionGroup), G_ACTION(action));
222229
223230 g_signal_connect (action, "activate", G_CALLBACK (on_signal_activated), nullptr);
224231
tests/mocks/Powerd/Powerd.cpp+15−1
@@ -19,6 +19,20 @@
1919#include "Powerd.h"
2020
2121Powerd::Powerd(QObject* parent)
22− : QObject(parent)
22+ : QObject(parent),
23+ m_status(Powerd::Status::On)
2324{
2425}
26+
27+void Powerd::setStatus(Powerd::Status status)
28+{
29+ if (m_status != status) {
30+ m_status = status;
31+ Q_EMIT statusChanged(DisplayStateChangeReason::Unknown);
32+ }
33+}
34+
35+Powerd::Status Powerd::status() const
36+{
37+ return m_status;
38+}
tests/mocks/Powerd/Powerd.h+8−1
@@ -26,6 +26,7 @@ class Powerd: public QObject
2626 Q_OBJECT
2727 Q_ENUMS(Status)
2828 Q_ENUMS(DisplayStateChangeReason)
29+ Q_PROPERTY(Status status READ status WRITE setStatus NOTIFY statusChanged) // write only exists for tests
2930
3031public:
3132 enum DisplayStateChangeReason {
@@ -42,8 +43,14 @@ public:
4243
4344 explicit Powerd(QObject *parent = 0);
4445
46+ Status status() const;
47+ void setStatus(Status status);
48+
4549Q_SIGNALS:
46− void displayPowerStateChange(int status, int reason);
50+ void statusChanged(DisplayStateChangeReason reason);
51+
52+private:
53+ Status m_status;
4754};
4855
4956#endif
tests/mocks/Powerd/Powerd.qmltypes+3−3
@@ -30,10 +30,10 @@ Module {
3030 "On": 1
3131 }
3232 }
33+ Property { name: "status"; type: "Status" }
3334 Signal {
34− name: "displayPowerStateChange"
35− Parameter { name: "status"; type: "int" }
36− Parameter { name: "reason"; type: "int" }
35+ name: "statusChanged"
36+ Parameter { name: "reason"; type: "DisplayStateChangeReason" }
3737 }
3838 }
3939}
tests/mocks/QtMultimedia/audio.cpp+1−1
@@ -77,7 +77,7 @@ void Audio::pause()
7777
7878void Audio::play()
7979{
80− if (m_playbackState != PlayingState && m_source.isValid()) {
80+ if (m_playbackState != PlayingState) {
8181 m_playbackState = PlayingState;
8282 Q_EMIT playbackStateChanged(m_playbackState);
8383
tests/mocks/Ubuntu/Payments/MockPayments.cpp+12−7
@@ -77,13 +77,18 @@ void MockPayments::setStoreItemId(const QString &store_item_id)
7777
7878void MockPayments::start()
7979{
80− if (!m_store_item_id.isEmpty()) {
81− if (m_store_item_id == "com.example.invalid") {
82− Q_EMIT purchaseError("Purchase failed.");
83− } else {
84− Q_EMIT purchaseCompleted();
85− }
86− } else {
80+ if (m_store_item_id.isEmpty()) {
8781 Q_EMIT purchaseError("No item ID supplied.");
8882 }
8983}
84+
85+void MockPayments::process()
86+{
87+ if (m_store_item_id == "com.example.cancel") {
88+ Q_EMIT purchaseCancelled();
89+ } else if (m_store_item_id == "com.example.invalid") {
90+ Q_EMIT purchaseError("Purchase failed.");
91+ } else {
92+ Q_EMIT purchaseCompleted();
93+ }
94+}
tests/mocks/Ubuntu/Payments/MockPayments.h+2
@@ -41,6 +41,7 @@ public:
4141 void setPrice(const double price);
4242 void setStoreItemId(const QString& store_item_id);
4343 Q_INVOKABLE void start();
44+ Q_INVOKABLE void process(); // only available for testing
4445
4546Q_SIGNALS:
4647 void currencyChanged(const QString& currency);
@@ -50,6 +51,7 @@ Q_SIGNALS:
5051
5152 void purchaseError(const QString &error);
5253 void purchaseCompleted();
54+ void purchaseCancelled();
5355
5456private:
5557 QString m_currency;
tests/mocks/Unity/Application/MirSurfaceItem.cpp+14
@@ -39,6 +39,7 @@ MirSurfaceItem::MirSurfaceItem(const QString& name,
3939 , m_type(type)
4040 , m_state(state)
4141 , m_live(true)
42+ , m_orientation(Qt::PortraitOrientation)
4243 , m_qmlItem(nullptr)
4344 , m_screenshotUrl(screenshot)
4445{
@@ -108,6 +109,19 @@ void MirSurfaceItem::release()
108109 }
109110}
110111
112+void MirSurfaceItem::setOrientation(const Qt::ScreenOrientation orientation)
113+{
114+ if (m_orientation == orientation)
115+ return;
116+
117+ m_orientation = orientation;
118+
119+ QQmlProperty orientationProp(m_qmlItem, "orientation");
120+ orientationProp.write(QVariant::fromValue(orientation));
121+
122+ Q_EMIT orientationChanged();
123+}
124+
111125void MirSurfaceItem::setSession(Session* session)
112126{
113127 m_session = session;
tests/mocks/Unity/Application/MirSurfaceItem.h+7
@@ -34,6 +34,7 @@ class MirSurfaceItem : public QQuickItem
3434 Q_PROPERTY(State state READ state NOTIFY stateChanged)
3535 Q_PROPERTY(QString name READ name CONSTANT)
3636 Q_PROPERTY(bool live READ live NOTIFY liveChanged)
37+ Q_PROPERTY(Qt::ScreenOrientation orientation READ orientation WRITE setOrientation NOTIFY orientationChanged DESIGNABLE false)
3738
3839public:
3940 enum Type {
@@ -64,6 +65,9 @@ public:
6465 State state() const { return m_state; }
6566 QString name() const { return m_name; }
6667 bool live() const { return m_live; }
68+ Qt::ScreenOrientation orientation() const { return m_orientation; }
69+
70+ void setOrientation(const Qt::ScreenOrientation orientation);
6771
6872 void setSession(Session* item);
6973 void setScreenshot(const QUrl& screenshot);
@@ -76,6 +80,7 @@ Q_SIGNALS:
7680 void typeChanged(Type);
7781 void stateChanged(State);
7882 void liveChanged(bool live);
83+ void orientationChanged();
7984
8085 void inputMethodRequested();
8186 void inputMethodDismissed();
@@ -104,6 +109,7 @@ private:
104109 const Type m_type;
105110 State m_state;
106111 bool m_live;
112+ Qt::ScreenOrientation m_orientation;
107113
108114 QQmlComponent *m_qmlContentComponent;
109115 QQuickItem *m_qmlItem;
@@ -114,5 +120,6 @@ private:
114120
115121Q_DECLARE_METATYPE(MirSurfaceItem*)
116122Q_DECLARE_METATYPE(QList<MirSurfaceItem*>)
123+Q_DECLARE_METATYPE(Qt::ScreenOrientation)
117124
118125#endif // MIRSURFACEITEM_H
tests/mocks/Unity/Application/MirSurfaceItem.qml+12−2
@@ -21,12 +21,22 @@ Rectangle {
2121 id: root
2222 color: "pink"
2323
24− anchors.fill: parent
25−
2624 implicitWidth: units.gu(40)
2725 implicitHeight: units.gu(70)
2826
27+ rotation: {
28+ if (orientation == Qt.PortraitOrientation) return 0;
29+ else if (orientation == Qt.LandscapeOrientation) return 90;
30+ else if (orientation == Qt.InvertedPortraitOrientation) return 180;
31+ else return 270;
32+ }
33+ x: parent ? (parent.width - width) / 2 : 0
34+ y: parent ? (parent.height - height) / 2 : 0
35+ width: parent ? (rotation == 0 || rotation == 180 ? parent.width : parent.height) : implicitWidth
36+ height: parent ? (rotation == 0 || rotation == 180 ? parent.height : parent.width) : implicitHeight
37+
2938 property alias screenshotSource: screenshotImage.source
39+ property int orientation: Qt.PortraitOrientation
3040
3141 property bool wantInputMethod: false
3242
tests/mocks/Unity/DashCommunicator/dashcommunicatorservice.cpp+2−2
@@ -27,7 +27,7 @@ DashCommunicatorService::~DashCommunicatorService()
2727
2828}
2929
30−void DashCommunicatorService::mockSetCurrentScope(const QString &scopeId, bool animate, bool reset)
30+void DashCommunicatorService::mockSetCurrentScope(const QString &scopeId, bool animate, bool isSwipe)
3131{
32− Q_EMIT setCurrentScopeRequested(scopeId, animate, reset);
32+ Q_EMIT setCurrentScopeRequested(scopeId, animate, isSwipe);
3333}
tests/mocks/Unity/DashCommunicator/dashcommunicatorservice.h+2−2
@@ -27,10 +27,10 @@ public:
2727 ~DashCommunicatorService();
2828
2929Q_SIGNALS:
30− void setCurrentScopeRequested(const QString &scopeId, bool animate, bool reset);
30+ void setCurrentScopeRequested(const QString &scopeId, bool animate, bool isSwipe);
3131
3232public Q_SLOTS:
33− void mockSetCurrentScope(const QString &scopeId, bool animate, bool reset);
33+ void mockSetCurrentScope(const QString &scopeId, bool animate, bool isSwipe);
3434};
3535
3636#endif // DBUSUNITYSESSIONSERVICE_H
tests/mocks/Unity/Launcher/CMakeLists.txt+1−1
@@ -1,4 +1,4 @@
1−pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=3)
1+pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=4)
22
33include_directories(
44 ${CMAKE_CURRENT_SOURCE_DIR}
tests/mocks/Unity/Launcher/MockLauncherItem.cpp+14
@@ -35,6 +35,7 @@ MockLauncherItem::MockLauncherItem(const QString &appId, const QString& desktopF
3535 m_recent(false),
3636 m_progress(-1),
3737 m_count(0),
38+ m_countVisible(false),
3839 m_focused(false),
3940 m_quickList(new MockQuickListModel(this))
4041{
@@ -131,6 +132,19 @@ void MockLauncherItem::setCount(int count)
131132 }
132133}
133134
135+bool MockLauncherItem::countVisible() const
136+{
137+ return m_countVisible;
138+}
139+
140+void MockLauncherItem::setCountVisible(bool countVisible)
141+{
142+ if (m_countVisible != countVisible) {
143+ m_countVisible = countVisible;
144+ Q_EMIT countVisibleChanged(countVisible);
145+ }
146+}
147+
134148bool MockLauncherItem::focused() const
135149{
136150 return m_focused;
tests/mocks/Unity/Launcher/MockLauncherItem.h+18−17
@@ -32,32 +32,30 @@ class MockLauncherItem: public LauncherItemInterface
3232public:
3333 MockLauncherItem(const QString &appId, const QString& desktopFile, const QString& name, const QString& icon, QObject* parent = 0);
3434
35− QString appId() const;
35+ QString appId() const override;
3636 QString desktopFile() const;
37− QString name() const;
38− QString icon() const;
37+ QString name() const override;
38+ QString icon() const override;
3939
40− bool pinned() const;
41− void setPinned(bool pinned);
40+ bool pinned() const override;
41+ bool running() const override;
42+ bool recent() const override;
43+ int progress() const override;
44+ int count() const override;
45+ bool countVisible() const override;
46+ bool focused() const;
4247
43− bool running() const;
44− void setRunning(bool running);
48+ unity::shell::launcher::QuickListModelInterface *quickList() const;
4549
46− bool recent() const;
50+private:
51+ void setPinned(bool pinned);
52+ void setRunning(bool running);
4753 void setRecent(bool recent);
48−
49− int progress() const;
5054 void setProgress(int progress);
51−
52− int count() const;
5355 void setCount(int count);
54−
55− bool focused() const;
56+ void setCountVisible(bool countVisible);
5657 void setFocused(bool focused);
5758
58− unity::shell::launcher::QuickListModelInterface *quickList() const;
59−
60−private:
6159 QString m_appId;
6260 QString m_desktopFile;
6361 QString m_name;
@@ -67,8 +65,11 @@ private:
6765 bool m_recent;
6866 int m_progress;
6967 int m_count;
68+ bool m_countVisible;
7069 bool m_focused;
7170 MockQuickListModel *m_quickList;
71+
72+ friend class MockLauncherModel;
7273};
7374
7475#endif // MOCKLAUNCHERITEM_H
tests/mocks/Unity/Launcher/MockLauncherModel.cpp+10
@@ -33,26 +33,32 @@ MockLauncherModel::MockLauncherModel(QObject* parent): LauncherModelInterface(pa
3333 m_list.append(item);
3434 item = new MockLauncherItem("gallery-app", "/usr/share/applications/gallery-app.desktop", "Gallery", "gallery", this);
3535 item->setProgress(50);
36+ item->setCountVisible(true);
3637 m_list.append(item);
3738 item = new MockLauncherItem("facebook-webapp", "/usr/share/applications/facebook-webapp.desktop", "Facebook", "facebook", this);
3839 item->setProgress(150);
3940 m_list.append(item);
4041 item = new MockLauncherItem("webbrowser-app", "/usr/share/applications/webbrowser-app.desktop", "Browser", "browser", this);
4142 item->setCount(1);
43+ item->setCountVisible(true);
4244 m_list.append(item);
4345 item = new MockLauncherItem("twitter-webapp", "/usr/share/applications/twitter-webapp.desktop", "Twitter", "twitter", this);
4446 item->setCount(12);
47+ item->setCountVisible(true);
4548 item->setPinned(true);
4649 m_list.append(item);
4750 item = new MockLauncherItem("gmail-webapp", "/usr/share/applications/gmail-webapp.desktop", "GMail", "gmail", this);
4851 item->setCount(123);
52+ item->setCountVisible(true);
4953 m_list.append(item);
5054 item = new MockLauncherItem("ubuntu-weather-app", "/usr/share/applications/ubuntu-weather-app.desktop", "Weather", "weather", this);
5155 item->setCount(1234567890);
56+ item->setCountVisible(true);
5257 m_list.append(item);
5358 item = new MockLauncherItem("notes-app", "/usr/share/applications/notes-app.desktop", "Notepad", "notepad", this);
5459 item->setProgress(50);
5560 item->setCount(5);
61+ item->setCountVisible(true);
5662 item->setFocused(true);
5763 item->setPinned(true);
5864 m_list.append(item);
@@ -76,6 +82,8 @@ QVariant MockLauncherModel::data(const QModelIndex& index, int role) const
7682 LauncherItemInterface *item = m_list.at(index.row());
7783 switch(role)
7884 {
85+ case RoleAppId:
86+ return item->appId();
7987 case RoleName:
8088 return item->name();
8189 case RoleIcon:
@@ -90,6 +98,8 @@ QVariant MockLauncherModel::data(const QModelIndex& index, int role) const
9098 return item->progress();
9199 case RoleCount:
92100 return item->count();
101+ case RoleCountVisible:
102+ return item->countVisible();
93103 case RoleFocused:
94104 return item->focused();
95105 }
tests/mocks/Unity/fake_categories.cpp+95−136
@@ -29,25 +29,12 @@ Categories::Categories(int category_count, QObject* parent)
2929
3030int Categories::rowCount(const QModelIndex& /*parent*/) const
3131{
32− return m_category_count + m_specialCategories.count();
32+ return m_category_count;
3333}
3434
35−void Categories::addSpecialCategory(QString const& categoryId, QString const& name, QString const& icon, QString const& rawTemplate, QObject* countObject)
35+void Categories::addSpecialCategory(QString const& /*categoryId*/, QString const& /*name*/, QString const& /*icon*/, QString const& /*rawTemplate*/, QObject* /*countObject*/)
3636{
37− CategoryData catData;
38− catData.categoryId = categoryId;
39− catData.name = name;
40− catData.icon = icon;
41− catData.rawTemplate = rawTemplate;
42− catData.countObject = countObject;
43−
44− beginInsertRows(QModelIndex(), 0, 0);
45− m_specialCategories.prepend(catData);
46− endInsertRows();
47−
48− if (countObject) {
49− connect(countObject, SIGNAL(countChanged()), this, SLOT(countChanged()));
50− }
37+ qFatal("Using un-implemented Categories::addSpecialCategory");
5138}
5239
5340bool Categories::overrideCategoryJson(QString const& /* categoryId */, QString const& /* json */)
@@ -55,23 +42,6 @@ bool Categories::overrideCategoryJson(QString const& /* categoryId */, QString c
5542 qFatal("Using un-implemented Categories::overrideCategoryJson");
5643}
5744
58−void Categories::countChanged()
59−{
60− QObject* countObject = sender();
61−
62− for (int i = 0; i < m_specialCategories.count(); ++i) {
63− const CategoryData &catData = m_specialCategories.at(i);
64− if (catData.countObject == countObject) {
65− QVector<int> roles;
66− roles.append(RoleCount);
67−
68− QModelIndex changedIndex(index(i));
69− dataChanged(changedIndex, changedIndex, roles);
70− break;
71− }
72− }
73−}
74−
7545QVariant
7646Categories::data(const QModelIndex& index, int role) const
7747{
@@ -79,115 +49,74 @@ Categories::data(const QModelIndex& index, int role) const
7949 return QVariant();
8050 }
8151
82− ResultsModel *resultsModel = m_resultsModels[index.row()];
83− if (!resultsModel) {
84− resultsModel = new ResultsModel(15, index.row());
85− m_resultsModels[index.row()] = resultsModel;
86− }
87− if (index.row() < m_specialCategories.count()) {
88− const CategoryData &catData = m_specialCategories.at(index.row());
89− switch (role) {
90− case RoleCategoryId:
91− return catData.categoryId;
92− case RoleName:
93− return catData.name;
94− case RoleIcon:
95− return catData.icon;
96− case RoleRawRendererTemplate:
97− return catData.rawTemplate;
98− case RoleRenderer:
99− {
100− QVariantMap map;
101− if (index.row() % 2 == 0) {
102− map["category-layout"] = "grid";
103− } else {
104− map["category-layout"] = "carousel";
105− map["overlay"] = true;
106− }
107− map["card-size"] = "small";
108− return map;
52+ ResultsModel *resultsModel = resultModel(index.row());
53+ switch (role) {
54+ case RoleCategoryId:
55+ return QString("%1").arg(index.row());
56+ case RoleName:
57+ return QString("Category %1").arg(index.row());
58+ case RoleIcon:
59+ return "gtk-apply";
60+ case RoleRawRendererTemplate:
61+ qFatal("Using un-implemented RoleRawRendererTemplate Categories role");
62+ return QVariant();
63+ case RoleRenderer:
64+ {
65+ QVariantMap map;
66+ if (index.row() % 2 == 0) {
67+ map["category-layout"] = "grid";
68+ } else {
69+ map["category-layout"] = "carousel";
10970 }
110− case RoleComponents:
111− {
112− QVariantMap map, artMap, attributeMap;
113− artMap["aspect-ratio"] = "1.0";
114− artMap["field"] = "art";
115− map["art"] = artMap;
116− map["title"] = "HOLA";
117− attributeMap["field"] = "attribute";
118− map["attributes"] = attributeMap;
119− return map;
71+ if (index.row() == 18) {
72+ map["category-layout"] = "horizontal-list";
73+ }
74+ if (index.row() == 19) {
75+ map["category-layout"] = "grid";
76+ map["collapsed-rows"] = 0;
77+ }
78+ map["card-size"] = "small";
79+
80+ map["category-layout"] = m_layouts.value(index.row(), map["category-layout"].toString());
81+
82+ if (map["category-layout"] == "carousel") {
83+ map["overlay"] = true;
12084 }
121− case RoleHeaderLink:
122− return QString();
123− case RoleResults:
124− return QVariant();
125− case RoleCount:
126− return catData.countObject->property("count");
127− default:
128− qFatal("Using un-implemented Categories role");
129− return QVariant();
85+
86+ return map;
13087 }
131− } else {
132− switch (role) {
133− case RoleCategoryId:
134− return QString("%1").arg(index.row());
135− case RoleName:
136− return QString("Category %1").arg(index.row());
137− case RoleIcon:
138− return "gtk-apply";
139− case RoleRawRendererTemplate:
140− qFatal("Using un-implemented RoleRawRendererTemplate Categories role");
141− return QVariant();
142− case RoleRenderer:
143− {
144− QVariantMap map;
145− if (index.row() % 2 == 0) {
146− map["category-layout"] = "grid";
147− } else {
148− map["category-layout"] = "carousel";
149− map["card-size"] = "medium";
150− map["overlay"] = true;
151− }
152− if (index.row() == 18) {
153− map["category-layout"] = "horizontal-list";
154− }
155− if (index.row() == 19) {
156− map["category-layout"] = "grid";
157− map["collapsed-rows"] = 0;
158− }
159− map["card-size"] = "small";
160− return map;
88+ case RoleComponents:
89+ {
90+ QVariantMap map, artMap, attributeMap;
91+ if (index.row() % 2 != 0) {
92+ artMap["aspect-ratio"] = QString("1.%1").arg(index.row());
93+ } else {
94+ artMap["aspect-ratio"] = "1.0";
16195 }
162− case RoleComponents:
163− {
164− QVariantMap map, artMap, attributeMap;
165− if (index.row() % 2 != 0) {
166− artMap["aspect-ratio"] = QString("1.%1").arg(index.row());
167− } else {
168− artMap["aspect-ratio"] = "1.0";
169− }
170− artMap["field"] = "art";
171− map["art"] = artMap;
172− map["title"] = "HOLA";
173− map["subtitle"] = "HOLA";
174− attributeMap["field"] = "attribute";
175− map["attributes"] = attributeMap;
176− return map;
96+ artMap["field"] = "art";
97+ map["art"] = artMap;
98+ map["title"] = "HOLA";
99+ map["subtitle"] = "HOLA";
100+ attributeMap["field"] = "attribute";
101+ map["attributes"] = attributeMap;
102+ return map;
103+ }
104+ case RoleHeaderLink:
105+ {
106+ QString res;
107+ if (index.row() == 1 || index.row() == 4) {
108+ res = QString("scope://query/1");
177109 }
178− case RoleHeaderLink:
179− if (index.row() == 1 || index.row() == 4) {
180− return QString("scope://query/1");
181− }
182− return QString();
183− case RoleResults:
184− return QVariant::fromValue(resultsModel);
185− case RoleCount:
186− return resultsModel->rowCount();
187− default:
188− qFatal("Using un-implemented Categories role");
189− return QVariant();
110+ res = m_headerLinks.value(index.row(), res);
111+ return res;
190112 }
113+ case RoleResults:
114+ return QVariant::fromValue(resultsModel);
115+ case RoleCount:
116+ return resultsModel->rowCount();
117+ default:
118+ qFatal("Using un-implemented Categories role");
119+ return QVariant();
191120 }
192121}
193122
@@ -196,3 +125,33 @@ Categories::data(int row, int role) const
196125{
197126 return data(index(row, 0), role);
198127}
128+
129+void Categories::setCount(int count)
130+{
131+ if (m_category_count != count) {
132+ beginResetModel(); // This is just for test setup so we can be lazy and reset
133+ m_category_count = count;
134+ endResetModel();
135+ }
136+}
137+
138+ResultsModel* Categories::resultModel(int row) const
139+{
140+ ResultsModel *result = m_resultsModels[row];
141+ if (!result) {
142+ Categories *that = const_cast<Categories*>(this);
143+ result = new ResultsModel(15, row, that);
144+ m_resultsModels[row] = result;
145+ }
146+ return result;
147+}
148+
149+void Categories::setLayout(int row, const QString &layout)
150+{
151+ m_layouts[row] = layout;
152+}
153+
154+void Categories::setHeaderLink(int row, const QString &headerLink)
155+{
156+ m_headerLinks[row] = headerLink;
157+}
tests/mocks/Unity/fake_categories.h+7−12
@@ -39,22 +39,17 @@ public:
3939
4040 Q_INVOKABLE QVariant data(int row, int role) const;
4141
42−private Q_SLOTS:
43− void countChanged();
42+ // For testing purposes
43+ Q_INVOKABLE void setCount(int count);
44+ Q_INVOKABLE ResultsModel* resultModel(int row) const;
45+ Q_INVOKABLE void setLayout(int row, const QString &layout);
46+ Q_INVOKABLE void setHeaderLink(int row, const QString &headerLink);
4447
4548private:
4649 mutable QHash<int, ResultsModel*> m_resultsModels;
50+ QHash<int, QString> m_layouts;
51+ QHash<int, QString> m_headerLinks;
4752 int m_category_count;
48−
49− struct CategoryData {
50− QString categoryId;
51− QString name;
52− QString icon;
53− QString rawTemplate;
54− QObject* countObject;
55− };
56−
57− QList<CategoryData> m_specialCategories;
5853};
5954
6055#endif // FAKE_CATEGORIES_H
tests/mocks/Unity/fake_resultsmodel.cpp+9
@@ -44,6 +44,15 @@ void ResultsModel::setCategoryId(QString const& /*id*/)
4444 qFatal("Calling un-implemented ResultsModel::setCategoryId");
4545}
4646
47+void ResultsModel::setResultCount(int result_count)
48+{
49+ if (m_result_count != result_count) {
50+ beginResetModel(); // This is just for test setup so we can be lazy and reset
51+ m_result_count = result_count;
52+ endResetModel();
53+ }
54+}
55+
4756int ResultsModel::rowCount(const QModelIndex& parent) const
4857{
4958 Q_UNUSED(parent);
tests/mocks/Unity/fake_resultsmodel.h+3
@@ -41,6 +41,9 @@ public:
4141 /* setters */
4242 void setCategoryId(QString const& id) override;
4343
44+ // For testing purposes
45+ Q_INVOKABLE void setResultCount(int result_count);
46+
4447private:
4548 int m_result_count;
4649 int m_categoryId;
tests/mocks/Unity/fake_scope.cpp+27−5
@@ -24,11 +24,11 @@
2424#include "fake_scopes.h"
2525#include "fake_settingsmodel.h"
2626
27−Scope::Scope(Scopes* parent) : Scope(QString(), QString(), false, parent)
27+Scope::Scope(Scopes* parent) : Scope("MockScope5", "Mock Scope", false, parent)
2828{
2929}
3030
31−Scope::Scope(QString const& id, QString const& name, bool favorite, Scopes* parent, int categories)
31+Scope::Scope(QString const& id, QString const& name, bool favorite, Scopes* parent, int categories, bool returnNullPreview)
3232 : unity::shell::scopes::ScopeInterface(parent)
3333 , m_id(id)
3434 , m_name(name)
@@ -41,6 +41,7 @@ Scope::Scope(QString const& id, QString const& name, bool favorite, Scopes* pare
4141 , m_categories(new Categories(categories, this))
4242 , m_openScope(nullptr)
4343 , m_settings(new SettingsModel(this))
44+ , m_returnNullPreview(returnNullPreview)
4445{
4546}
4647
@@ -145,6 +146,23 @@ void Scope::setFavorite(const bool favorite)
145146 Q_EMIT favoriteChanged();
146147 }
147148}
149+
150+void Scope::setId(const QString &id)
151+{
152+ if (id != m_id) {
153+ m_id = id;
154+ Q_EMIT idChanged();
155+ }
156+}
157+
158+void Scope::setName(const QString &name)
159+{
160+ if (name != m_name) {
161+ m_name = name;
162+ Q_EMIT nameChanged();
163+ }
164+}
165+
148166void Scope::setSearchInProgress(const bool inProg)
149167{
150168 if (inProg != m_searching) {
@@ -175,9 +193,13 @@ PreviewStack* Scope::preview(QVariant const& result)
175193{
176194 Q_UNUSED(result);
177195
178− // This probably leaks, do we don't care
179− // it's a test after all
180− return new PreviewStack;
196+ if (m_returnNullPreview) {
197+ return nullptr;
198+ } else {
199+ // This probably leaks, do we don't care
200+ // it's a test after all
201+ return new PreviewStack;
202+ }
181203}
182204
183205void Scope::cancelActivation()
tests/mocks/Unity/fake_scope.h+5−1
@@ -32,7 +32,7 @@ class Scope : public unity::shell::scopes::ScopeInterface
3232
3333public:
3434 Scope(Scopes* parent = 0);
35− Scope(QString const& id, QString const& name, bool favorite, Scopes* parent = 0, int categories = 20);
35+ Scope(QString const& id, QString const& name, bool favorite, Scopes* parent = 0, int categories = 20, bool returnNullPreview = false);
3636
3737 /* getters */
3838 QString id() const override;
@@ -56,6 +56,8 @@ public:
5656 void setFormFactor(const QString& form_factor) override;
5757 void setActive(const bool) override;
5858 void setFavorite(const bool) override;
59+ Q_INVOKABLE void setId(const QString &id); // This is not invokable in the Interface, here for testing benefits
60+ Q_INVOKABLE void setName(const QString &name); // This is not invokable in the Interface, here for testing benefits
5961 Q_INVOKABLE void setSearchInProgress(const bool inProg); // This is not invokable in the Interface, here for testing benefits
6062
6163 Q_INVOKABLE void activate(QVariant const& result) override;
@@ -97,6 +99,8 @@ protected:
9799 unity::shell::scopes::CategoriesInterface* m_categories;
98100 unity::shell::scopes::ScopeInterface* m_openScope;
99101 unity::shell::scopes::SettingsModelInterface* m_settings;
102+
103+ bool m_returnNullPreview;
100104};
101105
102106#endif // FAKE_SCOPE_H
tests/mocks/Unity/fake_scopes.cpp+1
@@ -59,6 +59,7 @@ void Scopes::updateScopes()
5959 addScope(new Scope("MockScope7", "MS7", false, this));
6060 addScope(new Scope("MockScope8", "MS8", false, this));
6161 addScope(new Scope("MockScope9", "MS9", false, this));
62+ addScope(new Scope("NullPreviewScope", "NPS", false, this, 1, true));
6263 m_scopesOverview = new ScopesOverview(this);
6364
6465 if (!m_loaded) {
tests/plugins/Dash/cardcreator/1.res+2−2
@@ -40,8 +40,8 @@ Item {
4040 width = root.fixedArtShapeSize.width;
4141 height = root.fixedArtShapeSize.height;
4242 } else {
43− width = Qt.binding(function() { return !visible ? 0 : image.width });
44− height = Qt.binding(function() { return !visible ? 0 : image.height });
43+ width = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.width });
44+ height = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.height });
4545 }
4646 }
4747 image: Image {
tests/plugins/Dash/cardcreator/2.res+2−2
@@ -94,7 +94,7 @@ Image {
9494 wrapMode: Text.Wrap;
9595 maximumLineCount: 2;
9696 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
97− color: backgroundLoader.active && backgroundLoader.item && root.scopeStyle ? root.scopeStyle.getTextColor(backgroundLoader.item.luminance) : (backgroundLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white");
97+ color: backgroundLoader.active && backgroundLoader.item && root.scopeStyle ? root.scopeStyle.getTextColor(backgroundLoader.item.luminance) : (backgroundLoader.item && backgroundLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white");
9898 visible: showHeader ;
9999 text: root.title;
100100 font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
@@ -112,7 +112,7 @@ Image {
112112 elide: Text.ElideRight;
113113 fontSize: "small";
114114 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
115− color: backgroundLoader.active && backgroundLoader.item && root.scopeStyle ? root.scopeStyle.getTextColor(backgroundLoader.item.luminance) : (backgroundLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white");
115+ color: backgroundLoader.active && backgroundLoader.item && root.scopeStyle ? root.scopeStyle.getTextColor(backgroundLoader.item.luminance) : (backgroundLoader.item && backgroundLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white");
116116 visible: titleLabel.visible && titleLabel.text;
117117 text: cardData && cardData["subtitle"] || "";
118118 font.weight: Font.Light;
tests/plugins/Dash/cardcreator/3.res+3−3
@@ -40,9 +40,9 @@ Item {
4040 width = root.fixedArtShapeSize.width;
4141 height = root.fixedArtShapeSize.height;
4242 } else {
43− width = Qt.binding(function() { return !visible ? 0 : image.width });
44− height = Qt.binding(function() { return !visible ? 0 : image.height });
45− }
43+ width = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.width });
44+ height = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.height });
45+ }
4646 }
4747 image: Image {
4848 objectName: "artImage";
tests/plugins/Dash/cardcreator/5.res+5−5
@@ -40,9 +40,9 @@ Item {
4040 width = root.fixedArtShapeSize.width;
4141 height = root.fixedArtShapeSize.height;
4242 } else {
43− width = Qt.binding(function() { return !visible ? 0 : image.width });
44− height = Qt.binding(function() { return !visible ? 0 : image.height });
45− }
43+ width = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.width });
44+ height = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.height });
45+ }
4646 }
4747 image: Image {
4848 objectName: "artImage";
@@ -114,7 +114,7 @@ Label {
114114 wrapMode: Text.Wrap;
115115 maximumLineCount: 2;
116116 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
117− color: root.scopeStyle ? root.scopeStyle.getTextColor(overlayLoader.item.luminance) : (overlayLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white");
117+ color: root.scopeStyle && overlayLoader.item ? root.scopeStyle.getTextColor(overlayLoader.item.luminance) : (overlayLoader.item && overlayLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white");
118118 visible: showHeader && overlayLoader.active;
119119 text: root.title;
120120 font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
@@ -133,7 +133,7 @@ Label {
133133 elide: Text.ElideRight;
134134 fontSize: "small";
135135 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
136− color: root.scopeStyle ? root.scopeStyle.getTextColor(overlayLoader.item.luminance) : (overlayLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white");
136+ color: root.scopeStyle && overlayLoader.item ? root.scopeStyle.getTextColor(overlayLoader.item.luminance) : (overlayLoader.item && overlayLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white");
137137 visible: titleLabel.visible && titleLabel.text;
138138 text: cardData && cardData["subtitle"] || "";
139139 font.weight: Font.Light;
tests/plugins/Dash/cardcreator/6.res+3−3
@@ -70,7 +70,7 @@ Item {
7070 wrapMode: Text.Wrap;
7171 maximumLineCount: 2;
7272 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
73− color: backgroundLoader.active && backgroundLoader.item && root.scopeStyle ? root.scopeStyle.getTextColor(backgroundLoader.item.luminance) : (backgroundLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white");
73+ color: backgroundLoader.active && backgroundLoader.item && root.scopeStyle ? root.scopeStyle.getTextColor(backgroundLoader.item.luminance) : (backgroundLoader.item && backgroundLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white");
7474 visible: showHeader ;
7575 text: root.title;
7676 font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
@@ -88,7 +88,7 @@ Item {
8888 elide: Text.ElideRight;
8989 fontSize: "small";
9090 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
91− color: backgroundLoader.active && backgroundLoader.item && root.scopeStyle ? root.scopeStyle.getTextColor(backgroundLoader.item.luminance) : (backgroundLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white");
91+ color: backgroundLoader.active && backgroundLoader.item && root.scopeStyle ? root.scopeStyle.getTextColor(backgroundLoader.item.luminance) : (backgroundLoader.item && backgroundLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white");
9292 visible: titleLabel.visible && titleLabel.text;
9393 text: cardData && cardData["subtitle"] || "";
9494 font.weight: Font.Light;
@@ -103,7 +103,7 @@ Item {
103103 rightMargin: units.gu(1);
104104 }
105105 source: cardData && cardData["emblem"] || "";
106− color: backgroundLoader.active && backgroundLoader.item && root.scopeStyle ? root.scopeStyle.getTextColor(backgroundLoader.item.luminance) : (backgroundLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white");
106+ color: backgroundLoader.active && backgroundLoader.item && root.scopeStyle ? root.scopeStyle.getTextColor(backgroundLoader.item.luminance) : (backgroundLoader.item && backgroundLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white");
107107 width: height;
108108 height: source != "" ? titleLabel.font.pixelSize : 0;
109109 }
tests/plugins/Dash/cardcreator/7.res+3−3
@@ -95,7 +95,7 @@ Image {
9595 wrapMode: Text.Wrap;
9696 maximumLineCount: 2;
9797 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
98− color: backgroundLoader.active && backgroundLoader.item && root.scopeStyle ? root.scopeStyle.getTextColor(backgroundLoader.item.luminance) : (backgroundLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white");
98+ color: backgroundLoader.active && backgroundLoader.item && root.scopeStyle ? root.scopeStyle.getTextColor(backgroundLoader.item.luminance) : (backgroundLoader.item && backgroundLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white");
9999 visible: showHeader ;
100100 text: root.title;
101101 font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
@@ -113,7 +113,7 @@ Image {
113113 elide: Text.ElideRight;
114114 fontSize: "small";
115115 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
116− color: backgroundLoader.active && backgroundLoader.item && root.scopeStyle ? root.scopeStyle.getTextColor(backgroundLoader.item.luminance) : (backgroundLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white");
116+ color: backgroundLoader.active && backgroundLoader.item && root.scopeStyle ? root.scopeStyle.getTextColor(backgroundLoader.item.luminance) : (backgroundLoader.item && backgroundLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white");
117117 visible: titleLabel.visible && titleLabel.text;
118118 text: cardData && cardData["subtitle"] || "";
119119 font.weight: Font.Light;
@@ -127,7 +127,7 @@ Image {
127127 rightMargin: units.gu(1);
128128 top: subtitleLabel.bottom;
129129 }
130− color: backgroundLoader.active && backgroundLoader.item && root.scopeStyle ? root.scopeStyle.getTextColor(backgroundLoader.item.luminance) : (backgroundLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white");
130+ color: backgroundLoader.active && backgroundLoader.item && root.scopeStyle ? root.scopeStyle.getTextColor(backgroundLoader.item.luminance) : (backgroundLoader.item && backgroundLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white");
131131 fontScale: root.fontScale;
132132 model: cardData && cardData["attributes"];
133133 }
tests/plugins/Unity/Launcher/CMakeLists.txt+9−24
@@ -1,12 +1,11 @@
11pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
2−pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=3)
2+pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=4)
33pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=3)
44
55include_directories(
66 ${CMAKE_CURRENT_BINARY_DIR}
77 ${CMAKE_SOURCE_DIR}/plugins/AccountsService
88 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher
9− ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/backend
109 ${GSETTINGS_QT_INCLUDE_DIRS}
1110 )
1211
@@ -14,35 +13,21 @@ add_definitions(-DSM_BUSNAME=sessionBus)
1413add_definitions(-DSRCDIR="${CMAKE_CURRENT_SOURCE_DIR}")
1514add_definitions(-DLAUNCHER_TESTING)
1615
17−### LauncherBackendTest
18−set(testBackendCommand dbus-test-runner --task ${CMAKE_CURRENT_BINARY_DIR}/launcherbackendtestExec
19− --parameter -o --parameter ${CMAKE_BINARY_DIR}/launcherbackendtest.xml,xunitxml
20− --parameter -o --parameter -,txt)
21−add_test(NAME launcherbackendtest COMMAND ${testBackendCommand})
22−add_custom_target(launcherbackendtest ${testBackendCommand})
23−add_executable(launcherbackendtestExec
24− launcherbackendtest.cpp
25− ${CMAKE_SOURCE_DIR}/plugins/AccountsService/AccountsServiceDBusAdaptor.cpp
26− ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/backend/launcherbackend.cpp
27− ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/common/quicklistentry.cpp
28− )
29−target_link_libraries(launcherbackendtestExec ${GSETTINGS_QT_LDFLAGS})
30−qt5_use_modules(launcherbackendtestExec Test Core DBus)
31−
3216### LauncherModelTest
33−set(testModelCommand ${CMAKE_CURRENT_BINARY_DIR}/launchermodeltestExec
34− -o ${CMAKE_BINARY_DIR}/launchermodeltest.xml,xunitxml
35− -o -,txt)
17+set(testModelCommand dbus-test-runner --task ${CMAKE_CURRENT_BINARY_DIR}/launchermodeltestExec
18+ --parameter -o --parameter ${CMAKE_BINARY_DIR}/launchermodeltest.xml,xunitxml
19+ --parameter -o --parameter -,txt)
3620add_test(NAME launchermodeltest COMMAND ${testModelCommand})
3721add_custom_target(launchermodeltest ${testModelCommand})
3822add_executable(launchermodeltestExec
3923 launchermodeltest.cpp
24+ gsettings.cpp
4025 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/launchermodel.cpp
4126 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/launcheritem.cpp
4227 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/quicklistmodel.cpp
43− ${CMAKE_SOURCE_DIR}/plugins/AccountsService/AccountsServiceDBusAdaptor.cpp
44− ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/backend/launcherbackend.cpp
45− ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/common/quicklistentry.cpp
28+ ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/dbusinterface.cpp
29+ ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/desktopfilehandler.cpp
30+ ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/quicklistentry.cpp
4631 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherItemInterface.h
4732 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherModelInterface.h
4833 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/QuickListModelInterface.h
@@ -50,7 +35,7 @@ add_executable(launchermodeltestExec
5035 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
5136 )
5237target_link_libraries(launchermodeltestExec ${GSETTINGS_QT_LDFLAGS})
53−qt5_use_modules(launchermodeltestExec Test Core DBus)
38+qt5_use_modules(launchermodeltestExec Test Core DBus Xml Gui)
5439
5540# copy .desktop files into build directory for shadow builds
5641file(GLOB DESKTOP_FILES *.desktop)
tests/plugins/Unity/Launcher/gsettings.cppnew file+40
@@ -0,0 +1,40 @@
1+/*
2+ * Copyright 2014 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Authors:
17+ * Michael Zanetti <michael.zanetti@canonical.com>
18+ */
19+
20+#include "gsettings.h"
21+
22+#include <QDebug>
23+
24+// This is a mock implementation to not touch GSettings for real during tests
25+
26+GSettings::GSettings(QObject *parent):
27+ QObject(parent)
28+{
29+
30+}
31+
32+QStringList GSettings::storedApplications() const
33+{
34+ return QStringList();
35+}
36+
37+void GSettings::setStoredApplications(const QStringList &storedApplications)
38+{
39+ Q_UNUSED(storedApplications)
40+}
tests/plugins/Unity/Launcher/gsettings.hnew file+38
@@ -0,0 +1,38 @@
1+/*
2+ * Copyright 2014 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Authors:
17+ * Michael Zanetti <michael.zanetti@canonical.com>
18+ */
19+
20+#ifndef GSETTINGS_H
21+#define GSETTINGS_H
22+
23+#include <QObject>
24+#include <QStringList>
25+
26+// This is a mock implementation to not touch GSettings for real during tests
27+
28+class GSettings: public QObject
29+{
30+ Q_OBJECT
31+public:
32+ GSettings(QObject *parent = nullptr);
33+
34+ QStringList storedApplications() const;
35+ void setStoredApplications(const QStringList &storedApplications);
36+};
37+
38+#endif
tests/plugins/Unity/Launcher/launcherbackendtest.cppdeleted−239
@@ -1,239 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU Lesser General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Michael Terry <michael.terry@canonical.com>
18− */
19−
20−#include "launcherbackend.h"
21−
22−#include <QtTest>
23−#include <QDBusConnection>
24−#include <QDBusMessage>
25−#include <QDBusVariant>
26−
27−
28−class LauncherBackendTest : public QObject
29−{
30− Q_OBJECT
31−
32−private Q_SLOTS:
33−
34− void initTestCase()
35− {
36− // As we want to test absolute file paths in the .desktop file, we need to modify the
37− // sample file and replace the path in there with the current build dir.
38− QSettings settings(QDir::currentPath() + "/click-icon.desktop", QSettings::IniFormat);
39− settings.setValue("Desktop Entry/Path", QDir::currentPath());
40− }
41−
42− void testFileNames()
43− {
44− LauncherBackend backend;
45−
46− backend.setStoredApplications(QStringList() << "rel-icon" << "abs-icon" << "invalid");
47− QCOMPARE(backend.storedApplications(), QStringList() << "rel-icon" << "abs-icon");
48− }
49−
50− void testIcon_data() {
51− QTest::addColumn<QString>("appId");
52− QTest::addColumn<QString>("expectedIcon");
53−
54− // Needs to expand a relative icon to the absolute path
55− QTest::newRow("relative icon path") << "rel-icon" << QDir::currentPath() + "/rel-icon.svg";
56−
57− // In case an icon is not found on disk, it needs to fallback on image://theme/ for it
58− QTest::newRow("fallback on theme") << "abs-icon" << "image://theme//path/to/icon.png";
59−
60− // Click packages have a relative icon path but an absolute path as a separate entry
61− QTest::newRow("click package icon") << "click-icon" << QDir::currentPath() + "/click-icon.svg";
62− }
63−
64− void testIcon() {
65− QFETCH(QString, appId);
66− QFETCH(QString, expectedIcon);
67−
68− LauncherBackend backend;
69− backend.setStoredApplications(QStringList() << appId);
70−
71− QCOMPARE(backend.icon(appId), expectedIcon);
72− }
73−
74− void testGetItem_data() {
75− QTest::addColumn<QString>("appId");
76− QTest::addColumn<bool>("exists");
77−
78− QTest::newRow("Exists") << "rel-icon" << true;
79− QTest::newRow("Doesn't Exist") << "does-not-exist" << false;
80− }
81−
82− void testGetItem() {
83− QFETCH(QString, appId);
84− QFETCH(bool, exists);
85−
86− LauncherBackend backend;
87− auto item = backend.getItem(appId);
88−
89− if (exists) {
90− QVERIFY(item != nullptr);
91− } else {
92− QVERIFY(item == nullptr);
93− }
94− }
95−
96− void testCount_data() {
97− QTest::addColumn<QString>("appId");
98− QTest::addColumn<bool>("setCount");
99− QTest::addColumn<int>("inCount");
100− QTest::addColumn<bool>("countVisible");
101− QTest::addColumn<int>("expectedCount");
102−
103− /* Get baseline data on things working */
104− QTest::newRow("Baseline") << "rel-icon" << false << 0 << false << -1;
105−
106− /* Valid count, but not visible */
107− QTest::newRow("Not visible") << "rel-icon" << true << 42 << false << -1;
108−
109− /* Turn it on */
110− QTest::newRow("Visible Count") << "rel-icon" << true << 42 << true << 42;
111−
112− /* Invalide app to load */
113− QTest::newRow("Invalid App ID") << "this-app-doesnt-exist" << true << 42 << true << -1;
114− }
115−
116− void testCount() {
117− QFETCH(QString, appId);
118− QFETCH(bool, setCount);
119− QFETCH(int, inCount);
120− QFETCH(bool, countVisible);
121− QFETCH(int, expectedCount);
122−
123− LauncherBackend backend;
124−
125− if (setCount)
126− backend.setCount(appId, inCount);
127− backend.setCountVisible(appId, countVisible);
128−
129− QCOMPARE(backend.count(appId), expectedCount);
130− }
131−
132− void testDbusName_data() {
133− QTest::addColumn<QString>("decoded");
134− QTest::addColumn<QString>("encoded");
135−
136− /* Passthrough test */
137− QTest::newRow("Passthrough") << "fine" << "fine";
138−
139− /* Number as first characeter */
140− QTest::newRow("Number first") << "31337" << "_331337";
141−
142− /* Underscore test */
143− QTest::newRow("Underscore test") << "this_is_c_style_namespacing" << "this_5Fis_5Fc_5Fstyle_5Fnamespacing";
144−
145− /* Hyphen test */
146− QTest::newRow("Hyphen test") << "typical-application" << "typical_2Dapplication";
147−
148− /* Japanese test */
149− QTest::newRow("日本語 test") << "日本語" << "_E6_97_A5_E6_9C_AC_E8_AA_9E";
150− }
151−
152− void testDbusName() {
153− QFETCH(QString, decoded);
154− QFETCH(QString, encoded);
155−
156− QString encodeOut = LauncherBackend::encodeAppId(decoded);
157− QCOMPARE(encoded, encodeOut);
158−
159− QString decodeOut = LauncherBackend::decodeAppId(encoded);
160− QCOMPARE(decoded, decodeOut);
161− }
162−
163− void testDbusIface_data() {
164− QTest::addColumn<QString>("appId");
165− QTest::addColumn<bool>("setCount");
166− QTest::addColumn<int>("inCount");
167− QTest::addColumn<bool>("countVisible");
168− QTest::addColumn<int>("expectedCount");
169−
170− /* Get baseline data on things working */
171− QTest::newRow("Baseline") << "rel-icon" << false << 0 << false << -1;
172−
173− /* Turn it on */
174− QTest::newRow("Visible Count") << "rel-icon" << true << 42 << true << 42;
175−
176− /* Invalide app to load */
177− QTest::newRow("Invalid App ID") << "this-app-doesnt-exist" << true << 42 << true << -1;
178− }
179−
180− void testDbusIface() {
181− QFETCH(QString, appId);
182− QFETCH(bool, setCount);
183− QFETCH(int, inCount);
184− QFETCH(bool, countVisible);
185− QFETCH(int, expectedCount);
186−
187− QDBusConnection con = QDBusConnection::sessionBus();
188− QDBusMessage message;
189− QDBusMessage reply;
190−
191− LauncherBackend backend;
192−
193− if (setCount) {
194− message = QDBusMessage::createMethodCall("com.canonical.Unity.Launcher",
195− "/com/canonical/Unity/Launcher/" + LauncherBackend::encodeAppId(appId),
196− "org.freedesktop.DBus.Properties",
197− "Set");
198− QVariantList cargs;
199− cargs.append(QString("com.canonical.Unity.Launcher.Item"));
200− cargs.append(QString("count"));
201− cargs.append(QVariant::fromValue(QDBusVariant(inCount)));
202−
203− message.setArguments(cargs);
204− reply = con.call(message);
205− QCOMPARE(reply.type(), QDBusMessage::ReplyMessage);
206− }
207−
208− /* Set countVisible */
209− message = QDBusMessage::createMethodCall("com.canonical.Unity.Launcher",
210− "/com/canonical/Unity/Launcher/" + LauncherBackend::encodeAppId(appId),
211− "org.freedesktop.DBus.Properties",
212− "Set");
213− QVariantList cvargs;
214− cvargs.append(QString("com.canonical.Unity.Launcher.Item"));
215− cvargs.append(QString("countVisible"));
216− cvargs.append(QVariant::fromValue(QDBusVariant(countVisible)));
217−
218− message.setArguments(cvargs);
219− reply = con.call(message);
220− QCOMPARE(reply.type(), QDBusMessage::ReplyMessage);
221−
222− /* Get value */
223− message = QDBusMessage::createMethodCall("com.canonical.Unity.Launcher",
224− "/com/canonical/Unity/Launcher/" + LauncherBackend::encodeAppId(appId),
225− "org.freedesktop.DBus.Properties",
226− "Get");
227− QVariantList getargs;
228− getargs.append(QString("com.canonical.Unity.Launcher.Item"));
229− getargs.append(QString("count"));
230−
231− message.setArguments(getargs);
232− reply = con.call(message);
233− QCOMPARE(reply.type(), QDBusMessage::ReplyMessage);
234− QCOMPARE(reply.arguments()[0].value<QDBusVariant>().variant().toInt(), expectedCount);
235− }
236−};
237−
238−QTEST_GUILESS_MAIN(LauncherBackendTest)
239−#include "launcherbackendtest.moc"
tests/plugins/Unity/Launcher/launchermodeltest.cpp+81−1
@@ -23,8 +23,12 @@
2323
2424#include "launcheritem.h"
2525#include "launchermodel.h"
26+#include "dbusinterface.h"
2627
2728#include <QtTest>
29+#include <QDBusInterface>
30+#include <QDBusReply>
31+#include <QDomDocument>
2832
2933// This is a mock, specifically to test the LauncherModel
3034class MockApp: public unity::shell::application::ApplicationInfoInterface
@@ -287,10 +291,86 @@ private Q_SLOTS:
287291 QCOMPARE(launcherModel->getUrlForAppId(QString()), QString());
288292 QCOMPARE(launcherModel->getUrlForAppId(""), QString());
289293 QCOMPARE(launcherModel->getUrlForAppId("no-name"), QString("application:///no-name.desktop"));
290− QCOMPARE(launcherModel->getUrlForAppId("com.test.good"), QString("appid://com.test.good/first-listed-app/current-user-version"));
294+ QCOMPARE(launcherModel->getUrlForAppId("com.test.good"), QString("application:///com.test.good.desktop"));
291295 QCOMPARE(launcherModel->getUrlForAppId("com.test.good_application"), QString("appid://com.test.good/application/current-user-version"));
292296 QCOMPARE(launcherModel->getUrlForAppId("com.test.good_application_1.2.3"), QString("appid://com.test.good/application/current-user-version"));
293297 }
298+
299+ void testIntrospection() {
300+ QDBusInterface interface("com.canonical.Unity.Launcher", "/com/canonical/Unity/Launcher", "org.freedesktop.DBus.Introspectable");
301+ QDBusReply<QString> reply = interface.call("Introspect");
302+ QStringList nodes = extractNodes(reply.value());
303+ QCOMPARE(nodes.count(), launcherModel->rowCount());
304+
305+ appManager->addApplication(new MockApp("foobar"));
306+ reply = interface.call("Introspect");
307+ nodes = extractNodes(reply.value());
308+ QCOMPARE(nodes.contains("foobar"), true);
309+
310+ appManager->removeApplication(2);
311+ reply = interface.call("Introspect");
312+ nodes = extractNodes(reply.value());
313+ QCOMPARE(nodes.contains("foobar"), false);
314+ }
315+
316+ QStringList extractNodes(const QString &introspectionXml) {
317+ QXmlStreamReader introspectReply(introspectionXml);
318+
319+ QStringList ret;
320+ while (!introspectReply.atEnd() && !introspectReply.hasError()) {
321+ QXmlStreamReader::TokenType token = introspectReply.readNext();
322+
323+ if (token == QXmlStreamReader::StartElement) {
324+ if (introspectReply.name() == "node" && introspectReply.attributes().count() > 0) {
325+ ret << introspectReply.attributes().value("name").toString();
326+ }
327+ }
328+ }
329+ return ret;
330+ }
331+
332+ void testCountEmblems() {
333+ // Call GetAll on abs-icon
334+ QDBusInterface interface("com.canonical.Unity.Launcher", "/com/canonical/Unity/Launcher/abs_2Dicon", "org.freedesktop.DBus.Properties");
335+ QDBusReply<QVariantMap> reply = interface.call("GetAll");
336+ QVariantMap map = reply.value();
337+
338+ // Make sure GetAll returns a map with count and countVisible props
339+ QCOMPARE(map.contains("count"), true);
340+ QCOMPARE(map.contains("countVisible"), true);
341+
342+ // Make sure count is intitilized to 0 and non-visible
343+ QCOMPARE(map.value("count").toInt(), 0);
344+ QCOMPARE(map.value("countVisible").toBool(), false);
345+
346+ // Now make it visible and set it to 55 through D-Bus
347+ interface.call("Set", "com.canonical.Unity.Launcher.Item", "count", 55);
348+ interface.call("Set", "com.canonical.Unity.Launcher.Item", "countVisible", true);
349+
350+ // Fetch it again using GetAll
351+ reply = interface.call("GetAll");
352+ map = reply.value();
353+
354+ // Make sure values have changed on the D-Bus interface
355+ QCOMPARE(map.value("count").toInt(), 55);
356+ QCOMPARE(map.value("countVisible").toBool(), true);
357+
358+ // Now the item on the upper side of the API
359+ int index = launcherModel->findApplication("abs-icon");
360+ QCOMPARE(index >= 0, true);
361+
362+ // And make sure values have changed there as well
363+ QCOMPARE(launcherModel->get(index)->countVisible(), true);
364+ QCOMPARE(launcherModel->get(index)->count(), 55);
365+ }
366+
367+ void testRefresh() {
368+ QDBusInterface interface("com.canonical.Unity.Launcher", "/com/canonical/Unity/Launcher", "com.canonical.Unity.Launcher");
369+ QDBusReply<void> reply = interface.call("Refresh");
370+
371+ // Make sure the call to Refresh returned without error.
372+ QCOMPARE(reply.isValid(), true);
373+ }
294374};
295375
296376QTEST_GUILESS_MAIN(LauncherModelTest)
tests/plugins/Utils/CMakeLists.txt−1
@@ -11,7 +11,6 @@ macro(run_tests)
1111 -o ${CMAKE_BINARY_DIR}/${_test}.xml,xunitxml
1212 -o -,txt)
1313 add_test(NAME ${_test} COMMAND ${testCommand})
14− set_tests_properties(${_test} PROPERTIES ENVIRONMENT "LC_ALL=C")
1514 add_custom_target(${_test} env "LC_ALL=C" ${testCommand})
1615 add_executable(${_test}Exec ${_test}.cpp modeltest.cpp)
1716 qt5_use_modules(${_test}Exec Test Core Qml)
tests/qmltests/Dash/Previews/tst_PreviewPayments.qml+88−9
@@ -33,6 +33,10 @@ Rectangle {
3333 "source": { "price" : 0.99, "currency": "USD", "store_item_id": "com.example.invalid" }
3434 }
3535
36+ property var jsonPurchaseCancel: {
37+ "source": { "price" : 0.99, "currency": "USD", "store_item_id": "com.example.cancel" }
38+ }
39+
3640 SignalSpy {
3741 id: spy
3842 target: previewPayments
@@ -48,19 +52,28 @@ Rectangle {
4852 UT.UnityTestCase {
4953 name: "PreviewPaymentsTest"
5054 when: windowShown
55+ property var paymentClient
56+
57+ function init()
58+ {
59+ paymentClient = findInvisibleChild(previewPayments, "paymentClient");
60+ verify(paymentClient, "Could not find the payment client object.");
61+ }
5162
5263 function cleanup()
5364 {
65+ paymentClient = null;
66+ previewPayments.widgetData = null;
5467 spy.clear();
55− var button = findChild(root, "paymentButton");
68+ var button = findChild(previewPayments, "paymentButton");
5669 button.opacity = 1;
5770 }
5871
5972 function test_purchase_text_display() {
6073 previewPayments.widgetData = jsonPurchase;
6174
62− var button = findChild(root, "paymentButton");
63− verify(button != null, "Button not found.");
75+ var button = findChild(previewPayments, "paymentButton");
76+ verify(button, "Button not found.");
6477 compare(button.text, "0.99USD");
6578 }
6679
@@ -68,11 +81,12 @@ Rectangle {
6881 // Exercise the purchaseCompleted signal here.
6982 previewPayments.widgetData = jsonPurchase;
7083
71− var button = findChild(root, "paymentButton");
72− verify(button != null, "Button not found.");
84+ var button = findChild(previewPayments, "paymentButton");
85+ verify(button, "Button not found.");
7386
7487 mouseClick(button, button.width / 2, button.height / 2);
7588
89+ paymentClient.process();
7690 spy.wait();
7791
7892 var args = spy.signalArguments[0];
@@ -85,8 +99,8 @@ Rectangle {
8599 // Make sure the progress bar is shown.
86100 previewPayments.widgetData = jsonPurchase;
87101
88− var button = findChild(root, "paymentButton");
89− var progress = findChild(root, "loadingBar");
102+ var button = findChild(previewPayments, "paymentButton");
103+ var progress = findChild(previewPayments, "loadingBar");
90104
91105 tryCompare(progress, "visible", false);
92106 tryCompare(progress, "opacity", 0);
@@ -95,6 +109,7 @@ Rectangle {
95109
96110 mouseClick(button, button.width / 2, button.height / 2);
97111
112+ paymentClient.process();
98113 spy.wait();
99114
100115 tryCompare(progress, "visible", true);
@@ -103,16 +118,45 @@ Rectangle {
103118 tryCompare(button, "opacity", 0);
104119 }
105120
121+ function test_progress_show_cancel() {
122+ // Make sure the progress bar is shown.
123+ previewPayments.widgetData = jsonPurchaseError;
124+
125+ var button = findChild(previewPayments, "paymentButton");
126+ var progress = findChild(previewPayments, "loadingBar");
127+
128+ tryCompare(progress, "visible", false);
129+ tryCompare(progress, "opacity", 0);
130+ tryCompare(button, "visible", true);
131+ tryCompare(button, "opacity", 1);
132+
133+ mouseClick(button, button.width / 2, button.height / 2);
134+
135+ tryCompare(progress, "visible", true);
136+ tryCompare(progress, "opacity", 1);
137+ tryCompare(button, "visible", false);
138+ tryCompare(button, "opacity", 0);
139+
140+ paymentClient.process();
141+ spy.wait();
142+
143+ tryCompare(progress, "visible", false);
144+ tryCompare(progress, "opacity", 0);
145+ tryCompare(button, "visible", true);
146+ tryCompare(button, "opacity", 1);
147+ }
148+
106149 function test_purchase_error() {
107150 // The mock Payments triggers an error when com.example.invalid is
108151 // passed to it as store_item_id. Exercise it here
109152 previewPayments.widgetData = jsonPurchaseError;
110153
111− var button = findChild(root, "paymentButton");
112− verify(button != null, "Button not found.");
154+ var button = findChild(previewPayments, "paymentButton");
155+ verify(button, "Button not found.");
113156
114157 mouseClick(button, button.width / 2, button.height / 2);
115158
159+ paymentClient.process();
116160 spy.wait();
117161
118162 var args = spy.signalArguments[0];
@@ -120,5 +164,40 @@ Rectangle {
120164 compare(args[1], "purchaseError");
121165 compare(args[2], jsonPurchaseError["source"]);
122166 }
167+
168+ function test_purchase_cancelled() {
169+ // The mock Payments triggers cancellation when com.example.cancel
170+ // is passed to it as store_item_id. Exercise it here
171+ previewPayments.widgetData = jsonPurchaseCancel;
172+
173+ var button = findChild(previewPayments, "paymentButton");
174+ var progress = findChild(previewPayments, "loadingBar");
175+ verify(button, "Button not found.");
176+ verify(progress, "Progress not found.");
177+
178+ mouseClick(button, button.width / 2, button.height / 2);
179+
180+ tryCompare(progress, "visible", true);
181+ tryCompare(progress, "opacity", 1);
182+ tryCompare(button, "visible", false);
183+ tryCompare(button, "opacity", 0);
184+
185+ paymentClient.process();
186+
187+ // Signal is not used at the moment, to avoid preview refresh.
188+ /*
189+ *spy.wait();
190+ *
191+ * var args = spy.signalArguments[0];
192+ * compare(args[0], "previewPayments");
193+ * compare(args[1], "purchaseCancelled");
194+ * compare(args[2], jsonPurchaseCancel["source"]);
195+ */
196+
197+ tryCompare(progress, "visible", false);
198+ tryCompare(progress, "opacity", 0);
199+ tryCompare(button, "visible", true);
200+ tryCompare(button, "opacity", 1);
201+ }
123202 }
124203}
tests/qmltests/Dash/tst_Card.qml+3−3
@@ -29,9 +29,9 @@ Rectangle {
2929
3030 property string cardData: '
3131 {
32− "art": "../../../tests/qmltests/Dash/artwork/music-player-design.png",
33− "mascot": "../../../tests/qmltests/Dash/artwork/avatar.png",
34− "emblem": "../../../tests/qmltests/Dash/artwork/emblem.png",
32+ "art": "'+Qt.resolvedUrl("artwork/music-player-design.png").toString()+'",
33+ "mascot": "'+Qt.resolvedUrl("artwork/avatar.png").toString()+'",
34+ "emblem": "'+Qt.resolvedUrl("artwork/emblem.png").toString()+'",
3535 "title": "foo",
3636 "subtitle": "bar",
3737 "summary": "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
tests/qmltests/Dash/tst_Dash.qml+9−2
@@ -189,6 +189,14 @@ Item {
189189 var scopesOverviewAllView = findChild(dash, "scopesOverviewRepeaterChild1");
190190 tryCompare(scopesOverviewAllView, "enabled", true);
191191
192+ // Click in the middle of the black bar (nothing happens)
193+ var bottomBar = findChild(scopesOverview, "bottomBar");
194+ mouseClick(bottomBar, bottomBar.width / 2, bottomBar.height / 2);
195+ // Check temp scope is not there
196+ var scopesOverviewTempScopeItem = findChild(dash, "scopesOverviewTempScopeItem");
197+ expectFailContinue("", "Clicking in the middle of bottom bar should not open a temp scope");
198+ tryCompareFunction( function() { return scopesOverviewTempScopeItem.scope != null; }, true);
199+
192200 // Click on a temp scope
193201 var tempScopeCard = findChild(scopesOverviewAllView, "delegate1");
194202 mouseClick(tempScopeCard, 0, 0);
@@ -198,7 +206,6 @@ Item {
198206 compare(overviewDragHandle.enabled, false);
199207
200208 // Check temp scope is there
201− var scopesOverviewTempScopeItem = findChild(dash, "scopesOverviewTempScopeItem");
202209 tryCompareFunction( function() { return scopesOverviewTempScopeItem.scope != null; }, true);
203210 tryCompare(scopesOverviewTempScopeItem, "enabled", true);
204211
@@ -328,7 +335,7 @@ Item {
328335 mouseFlick(dash, startX, startY, stopX, stopY);
329336 compare(dashContentList.currentIndex, 2, "Could not flick to scope id 2");
330337 var dashCommunicatorService = findInvisibleChild(dash, "dashCommunicatorService");
331− dashCommunicatorService.mockSetCurrentScope("clickscope", true, true);
338+ dashCommunicatorService.mockSetCurrentScope("clickscope", true, false);
332339 tryCompare(dashContentList, "currentIndex", 1)
333340 }
334341
tests/qmltests/Dash/tst_GenericScopeView.qml+129−1
@@ -1,5 +1,5 @@
11/*
2− * Copyright 2013 Canonical Ltd.
2+ * Copyright 2014 Canonical Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -43,6 +43,10 @@ Item {
4343 onLoadedChanged: if (loaded) genericScopeView.scope = scopes.getScope(2);
4444 }
4545
46+ MockScope {
47+ id: mockScope
48+ }
49+
4650 SignalSpy {
4751 id: spy
4852 }
@@ -92,6 +96,17 @@ Item {
9296 return findChild(genericScopeView, category);
9397 }
9498
99+ function scrollToEnd()
100+ {
101+ var categoryListView = findChild(genericScopeView, "categoryListView");
102+ waitForRendering(categoryListView);
103+ while (!categoryListView.atYEnd) {
104+ mouseFlick(genericScopeView, genericScopeView.width/2, genericScopeView.height - units.gu(8),
105+ genericScopeView.width/2, genericScopeView.y)
106+ tryCompare(categoryListView, "moving", false);
107+ }
108+ }
109+
95110 function test_isActive() {
96111 tryCompare(genericScopeView.scope, "isActive", false)
97112 genericScopeView.isCurrent = true
@@ -280,6 +295,7 @@ Item {
280295 mouseClick(tile, tile.width / 2, tile.height / 2);
281296 tryCompare(testCase.subPageLoader, "open", true);
282297 tryCompare(testCase.subPageLoader, "x", 0);
298+ tryCompare(findChild(genericScopeView, "categoryListView"), "visible", false);
283299 }
284300
285301 function closePreview() {
@@ -288,6 +304,9 @@ Item {
288304
289305 tryCompare(testCase.subPageLoader, "open", false);
290306 tryCompare(testCase.subPageLoader, "visible", false);
307+ var categoryListView = findChild(genericScopeView, "categoryListView");
308+ tryCompare(categoryListView, "visible", true);
309+ tryCompare(categoryListView, "x", 0);
291310 }
292311
293312 function test_previewOpenClose() {
@@ -301,6 +320,34 @@ Item {
301320 closePreview();
302321 }
303322
323+ function test_tryOpenNullPreview() {
324+ genericScopeView.scope = scopes.getScope("NullPreviewScope");
325+
326+ tryCompareFunction(function() {
327+ var cardGrid = findChild(genericScopeView, 0);
328+ if (cardGrid != null) {
329+ var tile = findChild(cardGrid, 0);
330+ return tile != null;
331+ }
332+ return false;
333+ },
334+ true);
335+ var tile = findChild(findChild(genericScopeView, 0), 0);
336+
337+ tryCompare(testCase.subPageLoader, "open", false);
338+ tryCompare(testCase.subPageLoader, "visible", false);
339+
340+ mouseClick(tile, tile.width / 2, tile.height / 2);
341+
342+ tryCompare(testCase.subPageLoader, "open", false);
343+ tryCompare(testCase.subPageLoader, "visible", false);
344+
345+ mousePress(tile, tile.width / 2, tile.height / 2);
346+ tryCompare(testCase.subPageLoader, "open", false);
347+ tryCompare(testCase.subPageLoader, "visible", false);
348+ mouseRelease(tile, tile.width / 2, tile.height / 2);
349+ }
350+
304351 function test_showPreviewCarousel() {
305352 var category = scrollToCategory("dashCategory1");
306353
@@ -426,6 +473,87 @@ Item {
426473 compare(image.source, data.logo, "Title image has the wrong source");
427474 }
428475
476+ function test_seeAllTwoCategoriesScenario1() {
477+ mockScope.setId("mockScope");
478+ mockScope.setName("Mock Scope");
479+ mockScope.categories.setCount(2);
480+ mockScope.categories.resultModel(0).setResultCount(50);
481+ mockScope.categories.resultModel(1).setResultCount(15);
482+ mockScope.categories.setLayout(0, "grid");
483+ mockScope.categories.setLayout(1, "grid");
484+ mockScope.categories.setHeaderLink(0, "");
485+ mockScope.categories.setHeaderLink(1, "");
486+ genericScopeView.scope = mockScope;
487+ waitForRendering(genericScopeView.categoryView);
488+
489+ var category0 = findChild(genericScopeView, "dashCategory0")
490+ var seeAll0 = findChild(category0, "seeAll")
491+
492+ waitForRendering(seeAll0);
493+ verify(category0.expandable);
494+ verify(!category0.expanded);
495+
496+ mouseClick(seeAll0, seeAll0.width / 2, seeAll0.height / 2);
497+ verify(category0.expanded);
498+ tryCompare(category0, "height", category0.item.expandedHeight + seeAll0.height);
499+ tryCompare(genericScopeView.categoryView, "contentY", units.gu(13.5));
500+
501+ scrollToEnd();
502+
503+ tryCompareFunction(function() { return findChild(genericScopeView, "dashCategory1") !== null; }, true);
504+ var category1 = findChild(genericScopeView, "dashCategory1")
505+ var seeAll1 = findChild(category1, "seeAll")
506+ verify(category1.expandable);
507+ verify(!category1.expanded);
508+
509+ mouseClick(seeAll1, seeAll1.width / 2, seeAll1.height / 2);
510+ verify(!category0.expanded);
511+ verify(category1.expanded);
512+ tryCompare(category1, "height", category1.item.expandedHeight + seeAll1.height);
513+ tryCompareFunction(function() {
514+ return genericScopeView.categoryView.contentY + category1.y + category1.height
515+ == genericScopeView.categoryView.contentHeight;}
516+ , true);
517+ }
518+
519+ function test_seeAllTwoCategoriesScenario2() {
520+ mockScope.setId("mockScope");
521+ mockScope.setName("Mock Scope");
522+ mockScope.categories.setCount(2);
523+ mockScope.categories.resultModel(0).setResultCount(15);
524+ mockScope.categories.resultModel(1).setResultCount(50);
525+ mockScope.categories.setLayout(0, "grid");
526+ mockScope.categories.setLayout(1, "grid");
527+ mockScope.categories.setHeaderLink(0, "");
528+ mockScope.categories.setHeaderLink(1, "");
529+ genericScopeView.scope = mockScope;
530+ waitForRendering(genericScopeView.categoryView);
531+
532+ var category0 = findChild(genericScopeView, "dashCategory0")
533+ var seeAll0 = findChild(category0, "seeAll")
534+
535+ waitForRendering(seeAll0);
536+ verify(category0.expandable);
537+ verify(!category0.expanded);
538+
539+ mouseClick(seeAll0, seeAll0.width / 2, seeAll0.height / 2);
540+ verify(category0.expanded);
541+ tryCompare(category0, "height", category0.item.expandedHeight + seeAll0.height);
542+
543+ scrollToEnd();
544+
545+ var category1 = findChild(genericScopeView, "dashCategory1")
546+ var seeAll1 = findChild(category1, "seeAll")
547+ verify(category1.expandable);
548+ verify(!category1.expanded);
549+
550+ mouseClick(seeAll1, seeAll1.width / 2, seeAll1.height / 2);
551+ verify(!category0.expanded);
552+ verify(category1.expanded);
553+ tryCompare(category1, "height", category1.item.expandedHeight + seeAll1.height);
554+ tryCompare(category1, "y", units.gu(5));
555+ }
556+
429557 function test_favorite_data() {
430558 return [
431559 { tag: "People", id: "MockScope1", favorite: true },
tests/qmltests/Dash/tst_PreviewListView.qml+29−1
@@ -16,6 +16,7 @@
1616
1717import QtQuick 2.0
1818import QtTest 1.0
19+import Ubuntu.Components 1.1
1920import "../../../qml/Dash"
2021import Unity.Test 0.1 as UT
2122import Unity 0.2 as Unity
@@ -39,7 +40,9 @@ Rectangle {
3940 id: listView
4041 anchors.fill: parent
4142 scope: mockScope
42− scopeStyle: ScopeStyle { }
43+ scopeStyle: ScopeStyle {
44+ style: mockScope.customizations
45+ }
4346 }
4447
4548 UT.UnityTestCase {
@@ -83,5 +86,30 @@ Rectangle {
8386 mouseClick(listView, listView.width / 2, listView.height / 2);
8487 clickedSpy.wait();
8588 }
89+
90+ function test_title() {
91+ var header = findChild(listView, "innerPageHeader");
92+ verify(header, "Could not find the preview header");
93+
94+ compare(header.title, "Mock Scope");
95+ }
96+
97+ function test_header_style() {
98+ var header = findChild(listView, "pageHeader");
99+ verify(header, "Could not find the header");
100+
101+ var innerHeader = findChild(header, "innerPageHeader");
102+ verify(innerHeader, "Could not find the inner header");
103+ verify(Qt.colorEqual(innerHeader.textColor, UbuntuColors.darkGrey),
104+ "Foreground color not equal: %1 != %2".arg(innerHeader.textColor).arg(UbuntuColors.darkGrey));
105+
106+ var background = findChild(header, "headerBackground");
107+ verify(background, "Could not find the background");
108+ compare(background.style, "gradient:///lightgrey/grey");
109+
110+ var image = findChild(header, "titleImage");
111+ verify(image, "Could not find the title image.");
112+ compare(image.source, Qt.resolvedUrl("../Dash/tst_PageHeader/logo-ubuntu-orange.svg"), "Title image has the wrong source");
113+ }
86114 }
87115}
tests/qmltests/Launcher/tst_Launcher.qml+3−1
@@ -194,7 +194,9 @@ Item {
194194 var launcherListView = findChild(launcher, "launcherListView");
195195 for (var i = 0; i < launcherListView.count; ++i) {
196196 var delegate = findChild(launcherListView, "launcherDelegate" + i)
197− compare(findChild(delegate, "countEmblem").visible, LauncherModel.get(i).count > 0)
197+ compare(findChild(delegate, "countEmblem").visible, LauncherModel.get(i).countVisible)
198+ // Intentionally allow type coercion (string/number)
199+ compare(findChild(delegate, "countLabel").text == LauncherModel.get(i).count, true)
198200 }
199201 }
200202
tests/qmltests/Notifications/tst_Notifications.qml+60−18
@@ -64,7 +64,7 @@ Row {
6464 function addSnapDecisionNotification() {
6565 var n = {
6666 type: Notification.SnapDecision,
67− hints: {"x-canonical-private-button-tint": "true"},
67+ hints: {"x-canonical-private-affirmative-tint": "true"},
6868 summary: "Tom Ato",
6969 body: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.",
7070 icon: "../graphics/avatars/funky.png",
@@ -79,6 +79,22 @@ Row {
7979 mockModel.append(n)
8080 }
8181
82+ function add2over1SnapDecisionNotification() {
83+ var n = {
84+ type: Notification.SnapDecision,
85+ hints: {"x-canonical-private-affirmative-tint": "true",},
86+ summary: "Theatre at Ferria Stadium",
87+ body: "at Ferria Stadium in Bilbao, Spain\n07578545317",
88+ icon: "",
89+ secondaryIcon: "",
90+ actions: [{ id: "ok_id", label: "Ok"},
91+ { id: "snooze_id", label: "Snooze"},
92+ { id: "view_id", label: "View"}]
93+ }
94+
95+ mockModel.append(n)
96+ }
97+
8298 function addEphemeralNotification() {
8399 var n = {
84100 type: Notification.Ephemeral,
@@ -181,6 +197,12 @@ Row {
181197 onClicked: addSnapDecisionNotification()
182198 }
183199
200+ Button {
201+ width: parent.width
202+ text: "add a 2over1 snap-decision"
203+ onClicked: add2over1SnapDecisionNotification()
204+ }
205+
184206 Button {
185207 width: parent.width
186208 text: "add an ephemeral"
@@ -229,7 +251,7 @@ Row {
229251 {
230252 tag: "Snap Decision with secondary icon and button-tint",
231253 type: Notification.SnapDecision,
232− hints: {"x-canonical-private-button-tint": "true"},
254+ hints: {"x-canonical-private-affirmative-tint": "true"},
233255 summary: "Tom Ato",
234256 body: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.",
235257 icon: "../graphics/avatars/funky.png",
@@ -249,10 +271,31 @@ Row {
249271 buttonTinted: true,
250272 hasSound: false
251273 },
274+ {
275+ tag: "2-over-1 Snap Decision with button-tint",
276+ type: Notification.SnapDecision,
277+ hints: {"x-canonical-private-affirmative-tint": "true"},
278+ summary: "Theatre at Ferria Stadium",
279+ body: "at Ferria Stadium in Bilbao, Spain\n07578545317",
280+ icon: "",
281+ secondaryIcon: "",
282+ actions: [{ id: "ok_id", label: "Ok"},
283+ { id: "snooze_id", label: "Snooze"},
284+ { id: "view_id", label: "View"}],
285+ summaryVisible: true,
286+ bodyVisible: true,
287+ iconVisible: false,
288+ shapedIcon: false,
289+ nonShapedIcon: false,
290+ secondaryIconVisible: false,
291+ buttonRowVisible: false,
292+ buttonTinted: true,
293+ hasSound: false
294+ },
252295 {
253296 tag: "Ephemeral notification - icon-summary layout",
254297 type: Notification.Ephemeral,
255− hints: {"x-canonical-private-button-tint": "false"},
298+ hints: {"x-canonical-private-affirmative-tint": "false"},
256299 summary: "Photo upload completed",
257300 body: "",
258301 icon: "",
@@ -271,7 +314,7 @@ Row {
271314 {
272315 tag: "Ephemeral notification - check suppression of secondary icon for icon-summary layout",
273316 type: Notification.Ephemeral,
274− hints: {"x-canonical-private-button-tint": "false",
317+ hints: {"x-canonical-private-affirmative-tint": "false",
275318 "sound-file": "dummy.ogg",
276319 "suppress-sound": "true"},
277320 summary: "New comment successfully published",
@@ -293,7 +336,7 @@ Row {
293336 {
294337 tag: "Interactive notification",
295338 type: Notification.Interactive,
296− hints: {"x-canonical-private-button-tint": "false",
339+ hints: {"x-canonical-private-affirmative-tint": "false",
297340 "sound-file": "dummy.ogg"},
298341 summary: "Interactive notification",
299342 body: "This is a notification that can be clicked",
@@ -313,7 +356,7 @@ Row {
313356 {
314357 tag: "Snap Decision without secondary icon and no button-tint",
315358 type: Notification.SnapDecision,
316− hints: {"x-canonical-private-button-tint": "false",
359+ hints: {"x-canonical-private-affirmative-tint": "false",
317360 "sound-file": "dummy.ogg"},
318361 summary: "Bro Coly",
319362 body: "At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
@@ -334,7 +377,7 @@ Row {
334377 {
335378 tag: "Ephemeral notification",
336379 type: Notification.Ephemeral,
337− hints: {"x-canonical-private-button-tint": "false",
380+ hints: {"x-canonical-private-affirmative-tint": "false",
338381 "sound-file": "dummy.ogg"},
339382 summary: "Cole Raby",
340383 body: "I did not expect it to be that late.",
@@ -354,9 +397,8 @@ Row {
354397 {
355398 tag: "Ephemeral notification with non-shaped icon",
356399 type: Notification.Ephemeral,
357− hints: {"x-canonical-private-button-tint": "false",
358− "x-canonical-non-shaped-icon": "true",
359− "sound-file": "dummy.ogg"},
400+ hints: {"x-canonical-private-affirmative-tint": "false",
401+ "x-canonical-non-shaped-icon": "true"},
360402 summary: "Contacts",
361403 body: "Synchronised contacts-database with cloud-storage.",
362404 icon: "../graphics/applicationIcons/contacts-app.png",
@@ -370,7 +412,7 @@ Row {
370412 secondaryIconVisible: false,
371413 buttonRowVisible: false,
372414 buttonTinted: false,
373− hasSound: true
415+ hasSound: false
374416 }
375417 ]
376418 }
@@ -434,11 +476,11 @@ Row {
434476 compare(buttonRow.visible, data.buttonRowVisible, "button visibility is incorrect")
435477
436478 var audioItem = findInvisibleChild(notification, "sound")
437− tryCompare(audioItem, "playbackState", data.hasSound ? Audio.PlayingState : Audio.StoppedState)
479+ compare(audioItem.playbackState, data.hasSound ? Audio.PlayingState : Audio.StoppedState, "Audio has wrong state")
438480
439481 if(data.buttonRowVisible) {
440− var buttonCancel = findChild(buttonRow, "button1")
441− var buttonAccept = findChild(buttonRow, "button0")
482+ var buttonCancel = findChild(buttonRow, "notify_button1")
483+ var buttonAccept = findChild(buttonRow, "notify_button0")
442484
443485 // only test the left/cancel-button if two actions have been passed in
444486 if (data.actions.length == 2) {
@@ -448,7 +490,7 @@ Row {
448490 }
449491
450492 // check the tinting of the positive/right button
451− verify(buttonAccept.gradient === data.buttonTinted ? UbuntuColors.orangeGradient : UbuntuColors.greyGradient, "button has the wrong color-tint")
493+ verify(buttonAccept.color === data.buttonTinted ? "#3fb24f" : "#dddddd", "button has the wrong color-tint")
452494
453495 // click the positive/right button
454496 tryCompareFunction(function() { mouseClick(buttonAccept, buttonAccept.width / 2, buttonAccept.height / 2); return actionSpy.signalArguments.length > 0; }, true);
@@ -458,19 +500,19 @@ Row {
458500
459501 // check if there's a ComboButton created due to more actions being passed
460502 if (data.actions.length > 2) {
461− var comboButton = findChild(notification, "button2")
503+ var comboButton = findChild(notification, "notify_button2")
462504 tryCompareFunction(function() { return comboButton.expanded == false; }, true);
463505
464506 // click to expand
465507 tryCompareFunction(function() { mouseClick(comboButton, comboButton.width - comboButton.__styleInstance.dropDownWidth / 2, comboButton.height / 2); return comboButton.expanded == true; }, true);
466508
467509 // try clicking on choices in expanded comboList
468− var choiceButton1 = findChild(notification, "button3")
510+ var choiceButton1 = findChild(notification, "notify_button3")
469511 tryCompareFunction(function() { mouseClick(choiceButton1, choiceButton1.width / 2, choiceButton1.height / 2); return actionSpy.signalArguments.length > 0; }, true);
470512 compare(actionSpy.signalArguments[0][0], data.actions[3]["id"], "got wrong id choice action 1")
471513 actionSpy.clear()
472514
473− var choiceButton2 = findChild(notification, "button4")
515+ var choiceButton2 = findChild(notification, "notify_button4")
474516 tryCompareFunction(function() { mouseClick(choiceButton2, choiceButton2.width / 2, choiceButton2.height / 2); return actionSpy.signalArguments.length > 0; }, true);
475517 compare(actionSpy.signalArguments[0][0], data.actions[4]["id"], "got wrong id choice action 2")
476518 actionSpy.clear()
tests/qmltests/Stages/RecursingChildSessionControl.qml+1−1
@@ -93,7 +93,7 @@ ColumnLayout {
9393 onCheckedChanged: {
9494 if (checked) {
9595 root.session.createSurface();
96− } else if (root.session.surface) {
96+ } else if (root.session && root.session.surface) {
9797 ApplicationTest.removeSurface(root.session.surface);
9898 }
9999 }
tests/qmltests/Stages/tst_ApplicationWindow.qml+30−12
@@ -50,22 +50,18 @@ Rectangle {
5050 ApplicationWindow {
5151 anchors.fill: parent
5252 application: fakeApplication
53+ orientation: Qt.PortraitOrientation
5354 }
5455 }
55− FocusScope {
56− id: appFocus
56+ Loader {
57+ id: applicationWindowLoader
5758 anchors {
5859 top: parent.top
5960 bottom: parent.bottom
6061 left: parent.left
6162 }
6263 width: units.gu(40)
63−
64− Loader {
65− id: applicationWindowLoader
66− anchors.fill: parent
67− sourceComponent: applicationWindowComponent
68− }
64+ sourceComponent: applicationWindowComponent
6965 }
7066
7167 Rectangle {
@@ -73,7 +69,7 @@ Rectangle {
7369 anchors {
7470 top: parent.top
7571 bottom: parent.bottom
76− left: appFocus.right
72+ left: applicationWindowLoader.right
7773 right: parent.right
7874 }
7975
@@ -147,6 +143,24 @@ Rectangle {
147143 }
148144 }
149145
146+ Button {
147+ anchors { left: parent.left; right: parent.right }
148+ text: "Rotate device \u27F3"
149+ onClicked: {
150+ var orientation = applicationWindowLoader.item.orientation
151+ if (orientation == Qt.PortraitOrientation) {
152+ orientation = Qt.LandscapeOrientation;
153+ } else if (orientation == Qt.LandscapeOrientation) {
154+ orientation = Qt.InvertedPortraitOrientation;
155+ } else if (orientation == Qt.InvertedPortraitOrientation) {
156+ orientation = Qt.InvertedLandscapeOrientation;
157+ } else {
158+ orientation = Qt.PortraitOrientation;
159+ }
160+ applicationWindowLoader.item.orientation = orientation;
161+ }
162+ }
163+
150164 }
151165 }
152166
@@ -384,15 +398,19 @@ Rectangle {
384398 verify(stateGroup.state === "void");
385399 }
386400
387− // should be forcing active focus when interactive changes,
388− // which will cause a FocusScope higher in the object hierarchy tp be given the focus
389401 function test_forceActiveFocusFollowsInterative() {
390402 fakeApplication.createSession();
391403 applicationWindowLoader.item.interactive = false;
392404 applicationWindowLoader.item.interactive = true;
393405 fakeSession.createSurface();
394406
395− compare(appFocus.focus, true);
407+ compare(fakeSession.surface.activeFocus, true);
408+
409+ applicationWindowLoader.item.interactive = false;
410+ compare(fakeSession.surface.activeFocus, false);
411+
412+ applicationWindowLoader.item.interactive = true;
413+ compare(fakeSession.surface.activeFocus, true);
396414 }
397415 }
398416}
tests/qmltests/Stages/tst_PhoneStage.qml+58
@@ -31,6 +31,8 @@ Item {
3131 anchors { fill: parent; rightMargin: units.gu(30) }
3232 dragAreaWidth: units.gu(2)
3333 maximizedAppTopMargin: units.gu(3) + units.dp(2)
34+ interactive: true
35+ orientation: Qt.PortraitOrientation
3436 }
3537
3638 Binding {
@@ -67,6 +69,21 @@ Item {
6769 ApplicationManager.get(appList.selectedAppIndex).setState(ApplicationInfoInterface.Stopped);
6870 }
6971 }
72+ Button {
73+ anchors { left: parent.left; right: parent.right }
74+ text: "Rotate device \u27F3"
75+ onClicked: {
76+ if (phoneStage.orientation == Qt.PortraitOrientation) {
77+ phoneStage.orientation = Qt.LandscapeOrientation;
78+ } else if (phoneStage.orientation == Qt.LandscapeOrientation) {
79+ phoneStage.orientation = Qt.InvertedPortraitOrientation;
80+ } else if (phoneStage.orientation == Qt.InvertedPortraitOrientation) {
81+ phoneStage.orientation = Qt.InvertedLandscapeOrientation;
82+ } else {
83+ phoneStage.orientation = Qt.PortraitOrientation;
84+ }
85+ }
86+ }
7087 }
7188 ListView {
7289 id: appList
@@ -256,6 +273,46 @@ Item {
256273 compare(ApplicationManager.focusedApplicationId, selectedApp.appId);
257274 }
258275
276+ function test_orientation_change_sent_to_focused_app() {
277+ phoneStage.orientation = Qt.PortraitOrientation;
278+ addApps(1);
279+
280+ var spreadView = findChild(phoneStage, "spreadView");
281+ var app = findChild(spreadView, "appDelegate0");
282+ tryCompare(app, "orientation", Qt.PortraitOrientation);
283+
284+ phoneStage.orientation = Qt.LandscapeOrientation;
285+ tryCompare(app, "orientation", Qt.LandscapeOrientation);
286+ }
287+
288+ function test_orientation_change_not_sent_to_apps_while_spread_open() {
289+ phoneStage.orientation = Qt.PortraitOrientation;
290+ addApps(1);
291+
292+ var spreadView = findChild(phoneStage, "spreadView");
293+ var app = findChild(spreadView, "appDelegate0");
294+ tryCompare(app, "orientation", Qt.PortraitOrientation);
295+
296+ goToSpread();
297+ phoneStage.orientation = Qt.LandscapeOrientation;
298+ tryCompare(app, "orientation", Qt.PortraitOrientation);
299+ }
300+
301+ function test_orientation_change_not_sent_to_unfocused_app_until_it_focused() {
302+ phoneStage.orientation = Qt.PortraitOrientation;
303+ addApps(1);
304+
305+ var spreadView = findChild(phoneStage, "spreadView");
306+ var app = findChild(spreadView, "appDelegate0");
307+
308+ goToSpread();
309+ phoneStage.orientation = Qt.LandscapeOrientation;
310+ tryCompare(app, "orientation", Qt.PortraitOrientation);
311+
312+ phoneStage.select(app.application.appId);
313+ tryCompare(app, "orientation", Qt.LandscapeOrientation);
314+ }
315+
259316 function cleanup() {
260317 while (ApplicationManager.count > 1) {
261318 var oldCount = ApplicationManager.count;
@@ -263,6 +320,7 @@ Item {
263320 ApplicationManager.stopApplication(ApplicationManager.get(closingIndex).appId)
264321 tryCompare(ApplicationManager, "count", oldCount - 1)
265322 }
323+ phoneStage.orientation = Qt.PortraitOrientation;
266324 }
267325 }
268326}
tests/qmltests/Stages/tst_SessionContainer.qml+63
@@ -41,6 +41,7 @@ Rectangle {
4141 SessionContainer {
4242 id: sessionContainer
4343 anchors.fill: parent
44+ orientation: Qt.PortraitOrientation
4445 }
4546 }
4647
@@ -112,6 +113,24 @@ Rectangle {
112113 session: sessionContainerLoader.item ? sessionContainerLoader.item.session : null
113114 }
114115 }
116+
117+ Button {
118+ anchors { left: parent.left; right: parent.right }
119+ text: "Rotate device \u27F3"
120+ onClicked: {
121+ var orientation = sessionContainerLoader.item.orientation
122+ if (orientation == Qt.PortraitOrientation) {
123+ orientation = Qt.LandscapeOrientation;
124+ } else if (orientation == Qt.LandscapeOrientation) {
125+ orientation = Qt.InvertedPortraitOrientation;
126+ } else if (orientation == Qt.InvertedPortraitOrientation) {
127+ orientation = Qt.InvertedLandscapeOrientation;
128+ } else {
129+ orientation = Qt.PortraitOrientation;
130+ }
131+ sessionContainerLoader.item.orientation = orientation;
132+ }
133+ }
115134 }
116135 }
117136
@@ -263,5 +282,49 @@ Rectangle {
263282 // wait for animation to end
264283 tryCompareFunction(function() { return isContainerAnimating(childContainer); }, false);
265284 }
285+
286+ function test_orientationPropagatedToChildren_data() {
287+ return [ { tag: "count=1", count: 1 },
288+ { tag: "count=4", count: 4 } ];
289+ }
290+
291+ /* Test orientation changes are propagated to all children immediately */
292+ function test_orientationPropagatedToChildren(data) {
293+ sessionCheckbox.checked = true;
294+ var rootSessionContainer = sessionContainerLoader.item;
295+ compare(rootSessionContainer.childSessions.count(), 0);
296+
297+ var i;
298+ var sessions = [];
299+ for (i = 0; i < data.count; i++) {
300+ var session = ApplicationTest.addChildSession(rootSessionContainer.session,
301+ "gallery");
302+ session.createSurface();
303+ rootSessionContainer.session.addChildSession(session);
304+
305+ // Check child SessionContainer has orientation matching the parent
306+ var delegate = findChild(rootSessionContainer, "childDelegate" + i);
307+ var childSessionContainer = findChild(delegate, "sessionContainer");
308+
309+ tryCompare(rootSessionContainer, "orientation", childSessionContainer.orientation);
310+
311+ sessions.push(session);
312+ }
313+
314+ // Change orientation and verify all children updated
315+ rootSessionContainer.orientation = Qt.LandscapeOrientation;
316+
317+ for (i = 0; i < data.count; i++) {
318+ var delegate = findChild(rootSessionContainer, "childDelegate" + i);
319+ var childSessionContainer = findChild(delegate, "sessionContainer");
320+
321+ tryCompare(rootSessionContainer, "orientation", childSessionContainer.orientation);
322+ }
323+
324+ // Clean up
325+ for (i = data.count-1; i >= 0; i--) {
326+ ApplicationTest.removeSession(sessions[i]);
327+ }
328+ }
266329 }
267330}
tests/qmltests/tst_Shell.qml+117−35
@@ -21,6 +21,8 @@ import QtQuick 2.0
2121import QtTest 1.0
2222import GSettings 1.0
2323import LightDM 0.1 as LightDM
24+import Ubuntu.Components 1.1
25+import Ubuntu.Telephony 0.1 as Telephony
2426import Unity.Application 0.1
2527import Unity.Connectivity 0.1
2628import Unity.Test 0.1 as UT
@@ -28,10 +30,9 @@ import Powerd 0.1
2830
2931import "../../qml"
3032
31−Item {
33+Row {
3234 id: root
33− width: shell.width
34− height: shell.height
35+ spacing: 0
3536
3637 QtObject {
3738 id: applicationArguments
@@ -49,13 +50,52 @@ Item {
4950 }
5051 }
5152
52− Shell {
53− id: shell
53+ Loader {
54+ id: shellLoader
55+
56+ // Copied from Shell.qml
57+ property bool tablet: false
58+ width: tablet ? units.gu(160)
59+ : applicationArguments.hasGeometry() ? applicationArguments.width()
60+ : units.gu(40)
61+ height: tablet ? units.gu(100)
62+ : applicationArguments.hasGeometry() ? applicationArguments.height()
63+ : units.gu(71)
64+
65+ property bool itemDestroyed: false
66+ sourceComponent: Component {
67+ Shell {
68+ Component.onDestruction: {
69+ shellLoader.itemDestroyed = true;
70+ }
71+ }
72+ }
5473 }
5574
56− Component {
57− id: shellComponent
58− Shell {}
75+ Rectangle {
76+ color: "white"
77+ width: units.gu(30)
78+ height: shellLoader.height
79+
80+ Column {
81+ anchors { left: parent.left; right: parent.right; top: parent.top; margins: units.gu(1) }
82+ spacing: units.gu(1)
83+ Row {
84+ anchors { left: parent.left; right: parent.right }
85+ Button {
86+ text: "Show Greeter"
87+ onClicked: {
88+ if (shellLoader.status !== Loader.Ready)
89+ return;
90+
91+ var greeter = testCase.findChild(shellLoader.item, "greeter");
92+ if (!greeter.shown) {
93+ greeter.show();
94+ }
95+ }
96+ }
97+ }
98+ }
5999 }
60100
61101 SignalSpy {
@@ -74,11 +114,19 @@ Item {
74114 signalName: "unlockingAllModems"
75115 }
76116
117+ Telephony.CallEntry {
118+ id: phoneCall
119+ phoneNumber: "+447812221111"
120+ }
121+
77122 UT.UnityTestCase {
123+ id: testCase
78124 name: "Shell"
79125 when: windowShown
80126
81− function initTestCase() {
127+ property Item shell: shellLoader.status === Loader.Ready ? shellLoader.item : null
128+
129+ function init() {
82130 swipeAwayGreeter();
83131
84132 sessionSpy.target = findChild(shell, "greeter")
@@ -86,17 +134,30 @@ Item {
86134 }
87135
88136 function cleanup() {
89− // If a test invoked the greeter, make sure we swipe it away again
90− var greeter = findChild(shell, "greeter");
91− if (greeter.shown) {
92− swipeAwayGreeter();
93− }
137+ shellLoader.itemDestroyed = false;
138+
139+ shellLoader.active = false;
140+
141+ tryCompare(shellLoader, "status", Loader.Null);
142+ tryCompare(shellLoader, "item", null);
143+ // Loader.status might be Loader.Null and Loader.item might be null but the Loader
144+ // item might still be alive. So if we set Loader.active back to true
145+ // again right now we will get the very same Shell instance back. So no reload
146+ // actually took place. Likely because Loader waits until the next event loop
147+ // iteration to do its work. So to ensure the reload, we will wait until the
148+ // Shell instance gets destroyed.
149+ tryCompare(shellLoader, "itemDestroyed", true);
94150
95151 // kill all (fake) running apps
96152 killApps(ApplicationManager);
97153
98− waitForUIToSettle();
99− hideIndicators();
154+ unlockAllModemsSpy.clear()
155+
156+ // reload our test subject to get it in a fresh state once again
157+ shellLoader.active = true;
158+
159+ tryCompare(shellLoader, "status", Loader.Ready);
160+ removeTimeConstraintsFromDirectionalDragAreas(shellLoader.item);
100161 }
101162
102163 function killApps() {
@@ -109,10 +170,11 @@ Item {
109170
110171 function test_leftEdgeDrag_data() {
111172 return [
112− {tag: "without launcher", revealLauncher: false, swipeLength: units.gu(27), appHides: true},
113− {tag: "with launcher", revealLauncher: true, swipeLength: units.gu(27), appHides: true},
114− {tag: "small swipe", revealLauncher: false, swipeLength: units.gu(25), appHides: false},
115− {tag: "long swipe", revealLauncher: false, swipeLength: units.gu(27), appHides: true}
173+ {tag: "without launcher", revealLauncher: false, swipeLength: units.gu(27), appHides: true, focusedApp: "dialer-app", launcherHides: true},
174+ {tag: "with launcher", revealLauncher: true, swipeLength: units.gu(27), appHides: true, focusedApp: "dialer-app", launcherHides: true},
175+ {tag: "small swipe", revealLauncher: false, swipeLength: units.gu(25), appHides: false, focusedApp: "dialer-app", launcherHides: false},
176+ {tag: "long swipe", revealLauncher: false, swipeLength: units.gu(27), appHides: true, focusedApp: "dialer-app", launcherHides: true},
177+ {tag: "long swipe", revealLauncher: false, swipeLength: units.gu(27), appHides: true, focusedApp: "unity8-dash", launcherHides: false}
116178 ];
117179 }
118180
@@ -120,16 +182,22 @@ Item {
120182 dragLauncherIntoView();
121183 tapOnAppIconInLauncher();
122184 waitUntilApplicationWindowIsFullyVisible();
185+ ApplicationManager.focusApplication(data.focusedApp)
186+ waitUntilApplicationWindowIsFullyVisible();
123187
124188 if (data.revealLauncher) {
125189 dragLauncherIntoView();
126190 }
127191
128192 swipeFromLeftEdge(data.swipeLength);
129− if (data.appHides)
193+ if (data.appHides) {
130194 waitUntilDashIsFocused();
131− else
195+ } else {
132196 waitUntilApplicationWindowIsFullyVisible();
197+ }
198+
199+ var launcher = findChild(shell, "launcherPanel");
200+ tryCompare(launcher, "x", data.launcherHides ? -launcher.width : 0)
133201 }
134202
135203 function test_suspend() {
@@ -146,21 +214,22 @@ Item {
146214 verify(mainApp);
147215 tryCompare(mainApp, "state", ApplicationInfoInterface.Running);
148216
149− // Try to suspend while proximity is engaged...
150− Powerd.displayPowerStateChange(Powerd.Off, Powerd.Proximity);
217+ // Suspend while call is active...
218+ callManager.foregroundCall = phoneCall;
219+ Powerd.status = Powerd.Off;
151220 tryCompare(greeter, "showProgress", 0);
152221
153− // Now really suspend
154− print("suspending")
155− Powerd.displayPowerStateChange(Powerd.Off, 0);
156− print("done suspending")
222+ // Now try again after ending call
223+ callManager.foregroundCall = null;
224+ Powerd.status = Powerd.On;
225+ Powerd.status = Powerd.Off;
157226 tryCompare(greeter, "showProgress", 1);
158227
159228 tryCompare(ApplicationManager, "suspended", true);
160229 compare(mainApp.state, ApplicationInfoInterface.Suspended);
161230
162231 // And wake up
163− Powerd.displayPowerStateChange(Powerd.On, 0);
232+ Powerd.status = Powerd.On;
164233 tryCompare(greeter, "showProgress", 1);
165234
166235 // Swipe away greeter to focus app
@@ -234,10 +303,27 @@ Item {
234303 tryCompare(item, "visible", false);
235304 }
236305
306+ // wait until any transition animation has finished
307+ function waitUntilTransitionsEnd(stateGroup) {
308+ var transitions = stateGroup.transitions;
309+ for (var i = 0; i < transitions.length; ++i) {
310+ var transition = transitions[i];
311+ tryCompare(transition, "running", false, 2000);
312+ }
313+ }
314+
315+ // Wait until the ApplicationWindow for the given Application object is fully loaded
316+ // (ie, the real surface has replaced the splash screen)
317+ function waitUntilAppWindowIsFullyLoaded(app) {
318+ var appWindow = findChild(shell, "appWindow_" + app.appId);
319+ var appWindowStateGroup = findInvisibleChild(appWindow, "applicationWindowStateGroup");
320+ tryCompareFunction(function() { return appWindowStateGroup.state === "surface" }, true);
321+ waitUntilTransitionsEnd(appWindowStateGroup);
322+ }
323+
237324 function test_surfaceLosesFocusWhilePanelIsOpen() {
238325 var app = ApplicationManager.startApplication("dialer-app");
239− // wait until the app is fully loaded (ie, real surface replaces splash screen)
240− tryCompareFunction(function() { return app.session !== null && app.session.surface !== null }, true);
326+ waitUntilAppWindowIsFullyLoaded(app);
241327
242328 tryCompare(app.session.surface, "focus", true);
243329
@@ -458,13 +544,9 @@ Item {
458544 }
459545
460546 function test_unlockAllModemsOnBoot() {
461− unlockAllModemsSpy.clear()
462− // actually create an object so we notice the onCompleted signal
463− var greeter = shellComponent.createObject(root)
464547 // TODO reenable when service ready (LP: #1361074)
465548 expectFail("", "Unlock on boot temporarily disabled");
466549 tryCompare(unlockAllModemsSpy, "count", 1)
467− greeter.destroy()
468550 }
469551 }
470552}
tools/registry-tracker.cpp+6
@@ -119,6 +119,12 @@ void RegistryTracker::runRegistry()
119119 QString registry_ini = QString(REGISTRY_CONFIG).arg(m_mw_config.fileName()).arg(scopeInstallDir).arg(scopeRunnerBin);
120120 QString mw_ini = QString(MW_CONFIG).arg(m_endpoints_dir.path());
121121
122+ if (!m_systemScopes) {
123+ // Disable OEM and Click scopes when system scopes are disabled
124+ registry_ini += "OEM.InstallDir = /unused\n";
125+ registry_ini += "Click.InstallDir = /unused\n";
126+ }
127+
122128 m_runtime_config.write(runtime_ini.toUtf8());
123129 m_registry_config.write(registry_ini.toUtf8());
124130 m_mw_config.write(mw_ini.toUtf8());
tools/scopetool.cpp+3
@@ -44,6 +44,9 @@ int main(int argc, char *argv[])
4444 setenv("QML_FORCE_THREADED_RENDERER", "1", 1);
4545 setenv("QML_FIXED_ANIMATION_STEP", "1", 1);
4646
47+ // ignore favorites in unity-scopes-shell plugin
48+ setenv("UNITY_SCOPES_NO_FAVORITES", "1", 1);
49+
4750 QGuiApplication::setApplicationName("Unity Scope Tool");
4851 QGuiApplication *application;
4952 application = new QGuiApplication(argc, argv);
tools/unlock-device+4−5
@@ -19,13 +19,12 @@ done
1919
2020eval "$WAIT_COMMAND"
2121
22−# Force a sleep of twenty no matter what, since we may need to wait for unity8
22+# Force a sleep no matter what, since we may need to wait for unity8
2323# to finish coming up (it's hard to tell when the greeter is actually rendered)
24−sleep 20
24+sleep 30
2525
26−GDBUS_CMD="gdbus call --session --dest com.canonical.UnityGreeter --object-path / --method com.canonical.UnityGreeter.HideGreeter && echo Greeter unlocked"
27−
28−UNLOCK_OUTPUT=$(adb shell "if [ \"\$(id -u)\" = 0 ]; then sudo -u phablet -i $GDBUS_CMD; else $GDBUS_CMD; fi" 2>&1)
26+# We need to go through sudo to get a proper environment for dbus set up
27+UNLOCK_OUTPUT=$(adb shell "gdbus call --session --dest com.canonical.UnityGreeter --object-path / --method com.canonical.UnityGreeter.HideGreeter && echo Greeter unlocked" 2>&1)
2928if echo "$UNLOCK_OUTPUT" | grep 'Greeter unlocked' >/dev/null; then
3029 echo "I: Unlock passed"
3130 exit 0