on xenial help sign in
Merge trunk
4cce774Gerry Boland
cmake/modules/QmlTest.cmake+15−3
@@ -27,11 +27,14 @@ endif()
27
27
28set(qmlscene_exe ${CMAKE_BINARY_DIR}/tests/uqmlscene/uqmlscene)
28set(qmlscene_exe ${CMAKE_BINARY_DIR}/tests/uqmlscene/uqmlscene)
29
29
30+set(test_env UNITY_TESTING=1)
31+
30macro(add_manual_qml_test SUBPATH COMPONENT_NAME)
32macro(add_manual_qml_test SUBPATH COMPONENT_NAME)
31 set(options NO_ADD_TEST NO_TARGETS)
33 set(options NO_ADD_TEST NO_TARGETS)
32 set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT)
34 set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT)
33
35
34 cmake_parse_arguments(qmltest "${options}" "" "${multi_value_keywords}" ${ARGN})
36 cmake_parse_arguments(qmltest "${options}" "" "${multi_value_keywords}" ${ARGN})
37+ cmake_parse_arguments(qmltest_default "${options}" "" "${multi_value_keywords}" ${qmltest_DEFAULT_PROPERTIES})
35
38
36 set(qmlscene_TARGET try${COMPONENT_NAME})
39 set(qmlscene_TARGET try${COMPONENT_NAME})
37 set(qmltest_FILE ${SUBPATH}/tst_${COMPONENT_NAME})
40 set(qmltest_FILE ${SUBPATH}/tst_${COMPONENT_NAME})
@@ -49,8 +52,12 @@ macro(add_manual_qml_test SUBPATH COMPONENT_NAME)
49 endforeach(IMPORT_PATH)
52 endforeach(IMPORT_PATH)
50 endif()
53 endif()
51
54
55+ if("${qmltest_ENVIRONMENT}" STREQUAL "")
56+ set(qmltest_ENVIRONMENT "${qmltest_default_ENVIRONMENT}")
57+ endif()
58+
52 set(qmlscene_command
59 set(qmlscene_command
53− env ${qmltest_ENVIRONMENT}
60+ env ${test_env} ${qmltest_ENVIRONMENT}
54 ${qmlscene_exe} -qmljsdebugger=port:3768 ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
61 ${qmlscene_exe} -qmljsdebugger=port:3768 ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
55 ${qmlscene_imports}
62 ${qmlscene_imports}
56 )
63 )
@@ -71,6 +78,7 @@ macro(add_qml_test_internal SUBPATH COMPONENT_NAME ITERATIONS)
71 set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT)
78 set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT)
72
79
73 cmake_parse_arguments(qmltest "${options}" "" "${multi_value_keywords}" ${ARGN})
80 cmake_parse_arguments(qmltest "${options}" "" "${multi_value_keywords}" ${ARGN})
81+ cmake_parse_arguments(qmltest_default "${options}" "" "${multi_value_keywords}" ${qmltest_DEFAULT_PROPERTIES})
74
82
75 set(qmltest_TARGET test${COMPONENT_NAME})
83 set(qmltest_TARGET test${COMPONENT_NAME})
76 set(qmltest_xvfb_TARGET xvfbtest${COMPONENT_NAME})
84 set(qmltest_xvfb_TARGET xvfbtest${COMPONENT_NAME})
@@ -102,8 +110,12 @@ macro(add_qml_test_internal SUBPATH COMPONENT_NAME ITERATIONS)
102 set(ITERATIONS_STRING "")
110 set(ITERATIONS_STRING "")
103 endif()
111 endif()
104
112
113+ if("${qmltest_ENVIRONMENT}" STREQUAL "")
114+ set(qmltest_ENVIRONMENT "${qmltest_default_ENVIRONMENT}")
115+ endif()
116+
105 set(qmltest_command
117 set(qmltest_command
106− env ${qmltest_ENVIRONMENT} UNITY_TESTING=1
118+ env ${test_env} ${qmltest_ENVIRONMENT}
107 ${qmltestrunner_exe} -input ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
119 ${qmltestrunner_exe} -input ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
108 ${qmltestrunner_imports}
120 ${qmltestrunner_imports}
109 ${ITERATIONS_STRING}
121 ${ITERATIONS_STRING}
@@ -117,7 +129,7 @@ macro(add_qml_test_internal SUBPATH COMPONENT_NAME ITERATIONS)
117 set(LD_PRELOAD_PATH "LD_PRELOAD=/usr/lib/${ARCH_TRIPLET}/mesa/libGL.so.1")
129 set(LD_PRELOAD_PATH "LD_PRELOAD=/usr/lib/${ARCH_TRIPLET}/mesa/libGL.so.1")
118 endif()
130 endif()
119 set(qmltest_xvfb_command
131 set(qmltest_xvfb_command
120− env ${qmltest_ENVIRONMENT} ${LD_PRELOAD_PATH} UNITY_TESTING=1
132+ env ${test_env} ${qmltest_ENVIRONMENT} ${LD_PRELOAD_PATH}
121 xvfb-run --server-args "-screen 0 1024x768x24" --auto-servernum
133 xvfb-run --server-args "-screen 0 1024x768x24" --auto-servernum
122 ${qmltestrunner_exe} -input ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
134 ${qmltestrunner_exe} -input ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
123 ${qmltestrunner_imports}
135 ${qmltestrunner_imports}
data/unity8-dash.desktop.in+3−3
@@ -1,9 +1,9 @@
1[Desktop Entry]
1[Desktop Entry]
2Type=Application
2Type=Application
3−Name=Unity 8 Dash
3+Name=Scopes
4−Comment=The converged Unity shell dash
4+Comment=An interface for using the Scopes system
5Exec=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@/unity8-dash
5Exec=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@/unity8-dash
6Terminal=false
6Terminal=false
7−Icon=unity8
7+Icon=
8NoDisplay=true
8NoDisplay=true
9X-Ubuntu-Touch=true
9X-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
4Comment=The converged Unity shell
4Comment=The converged Unity shell
5Exec=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@/unity8
5Exec=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@/unity8
6Terminal=false
6Terminal=false
7−Icon=unity8
7+Icon=
8NoDisplay=true
8NoDisplay=true
9X-Ubuntu-Touch=true
9X-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+
1unity8 (8.00+14.10.20140903.1-0ubuntu1) utopic; urgency=low
123unity8 (8.00+14.10.20140903.1-0ubuntu1) utopic; urgency=low
2
124
3 [ Nick Dedekind ]
125 [ Nick Dedekind ]
debian/control+4−4
@@ -24,7 +24,7 @@ Build-Depends: cmake,
24 libpulse-dev,
24 libpulse-dev,
25 libqmenumodel-dev (>= 0.2.8),
25 libqmenumodel-dev (>= 0.2.8),
26 libqt5xmlpatterns5-dev,
26 libqt5xmlpatterns5-dev,
27− libunity-api-dev (>= 7.89),
27+ libunity-api-dev (>= 7.90),
28 libusermetricsoutput1-dev,
28 libusermetricsoutput1-dev,
29 libxcb1-dev,
29 libxcb1-dev,
30 pkg-config,
30 pkg-config,
@@ -87,7 +87,7 @@ Depends: gsettings-desktop-schemas,
87 qtdeclarative5-gsettings1.0,
87 qtdeclarative5-gsettings1.0,
88 qtdeclarative5-qtmir-plugin (>= 0.4.3),
88 qtdeclarative5-qtmir-plugin (>= 0.4.3),
89 qtdeclarative5-ubuntu-telephony0.1,
89 qtdeclarative5-ubuntu-telephony0.1,
90− unity-launcher-impl-3,
90+ unity-launcher-impl-4,
91 unity8-common (= ${source:Version}),
91 unity8-common (= ${source:Version}),
92 unity8-private (= ${binary:Version}),
92 unity8-private (= ${binary:Version}),
93 unity8-private | unity-launcher-impl,
93 unity8-private | unity-launcher-impl,
@@ -171,12 +171,12 @@ Pre-Depends: ${misc:Pre-Depends},
171Depends: accountsservice-ubuntu-schemas (>= 0.0.3),
171Depends: accountsservice-ubuntu-schemas (>= 0.0.3),
172 gsettings-ubuntu-schemas (>= 0.0.2+14.10.20140815),
172 gsettings-ubuntu-schemas (>= 0.0.2+14.10.20140815),
173 libhardware2,
173 libhardware2,
174− libunity-core-6.0-9,
174+ unity-schemas (>= 7.3.1+14.10.20140915),
175 pay-service,
175 pay-service,
176 ${misc:Depends},
176 ${misc:Depends},
177 ${shlibs:Depends},
177 ${shlibs:Depends},
178Provides: unity-launcher-impl,
178Provides: unity-launcher-impl,
179− unity-launcher-impl-3,
179+ unity-launcher-impl-4,
180Description: Unity 8 private libs
180Description: Unity 8 private libs
181 The Unity 8 shell is the primary user interface for Ubuntu devices.
181 The Unity 8 shell is the primary user interface for Ubuntu devices.
182 .
182 .
debian/unity8.install+1
@@ -1,5 +1,6 @@
1data/unity8.conf usr/share/upstart/sessions/
1data/unity8.conf usr/share/upstart/sessions/
2data/unity8-dash.conf usr/share/upstart/sessions/
2data/unity8-dash.conf usr/share/upstart/sessions/
3+data/unity8-filewatcher.conf usr/share/upstart/sessions/
3usr/bin/unity8
4usr/bin/unity8
4usr/bin/unity8-dash
5usr/bin/unity8-dash
5usr/share/applications/unity8.desktop
6usr/share/applications/unity8.desktop
plugins/Dash/CardCreator.js+4−4
@@ -78,8 +78,8 @@ var kArtShapeHolderCode = 'Item { \n\
78 width = root.fixedArtShapeSize.width; \n\
78 width = root.fixedArtShapeSize.width; \n\
79 height = root.fixedArtShapeSize.height; \n\
79 height = root.fixedArtShapeSize.height; \n\
80 } else { \n\
80 } else { \n\
81− width = Qt.binding(function() { return !visible ? 0 : image.width }); \n\
81+ width = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.width }); \n\
82− height = Qt.binding(function() { return !visible ? 0 : image.height }); \n\
82+ height = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.height }); \n\
83 } \n\
83 } \n\
84 } \n\
84 } \n\
85 image: Image { \n\
85 image: Image { \n\
@@ -440,14 +440,14 @@ function cardString(template, components) {
440 mascotCode = kMascotImageCode.arg(mascotAnchors).arg(mascotImageVisible);
440 mascotCode = kMascotImageCode.arg(mascotAnchors).arg(mascotImageVisible);
441 }
441 }
442
442
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")';
444
444
445 var hasTitleContainer = hasTitle && (hasEmblem || (hasMascot && (hasSubtitle || hasAttributes)));
445 var hasTitleContainer = hasTitle && (hasEmblem || (hasMascot && (hasSubtitle || hasAttributes)));
446 var titleSubtitleCode = '';
446 var titleSubtitleCode = '';
447 if (hasTitle) {
447 if (hasTitle) {
448 var titleColor;
448 var titleColor;
449 if (headerAsOverlay) {
449 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")';
451 } else if (hasSummary) {
451 } else if (hasSummary) {
452 titleColor = 'summary.color';
452 titleColor = 'summary.color';
453 } else if (hasBackground) {
453 } else if (hasBackground) {
plugins/Dash/listviewwithpageheader.cpp+18−5
@@ -172,7 +172,7 @@ ListViewWithPageHeader::ListViewWithPageHeader()
172 connect(this, SIGNAL(contentWidthChanged()), this, SLOT(onContentWidthChanged()));
172 connect(this, SIGNAL(contentWidthChanged()), this, SLOT(onContentWidthChanged()));
173 connect(this, SIGNAL(contentHeightChanged()), this, SLOT(onContentHeightChanged()));
173 connect(this, SIGNAL(contentHeightChanged()), this, SLOT(onContentHeightChanged()));
174 connect(this, SIGNAL(heightChanged()), this, SLOT(onHeightChanged()));
174 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)));
176
176
177 setFlickableDirection(VerticalFlick);
177 setFlickableDirection(VerticalFlick);
178}
178}
@@ -409,6 +409,16 @@ void ListViewWithPageHeader::showHeader()
409 }
409 }
410}
410}
411
411
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+
412QQuickItem *ListViewWithPageHeader::item(int modelIndex) const
422QQuickItem *ListViewWithPageHeader::item(int modelIndex) const
413{
423{
414 ListItem *item = itemAtIndex(modelIndex);
424 ListItem *item = itemAtIndex(modelIndex);
@@ -520,7 +530,7 @@ void ListViewWithPageHeader::adjustHeader(qreal diff)
520 // (but the header was not shown by it's own position)
530 // (but the header was not shown by it's own position)
521 // or the header is partially shown and we are not doing a maximizeVisibleArea either
531 // or the header is partially shown and we are not doing a maximizeVisibleArea either
522 const bool scrolledUp = m_previousContentY > contentY();
532 const bool scrolledUp = m_previousContentY > contentY();
523− const bool notRebounding = contentY() + height() < contentHeight();
533+ const bool notRebounding = qRound(contentY() + height()) < qRound(contentHeight());
524 const bool notShownByItsOwn = contentY() + diff >= m_headerItem->y() + m_headerItem->height();
534 const bool notShownByItsOwn = contentY() + diff >= m_headerItem->y() + m_headerItem->height();
525 const bool maximizeVisibleAreaRunning = m_contentYAnimation->isRunning() && contentYAnimationType == ContentYAnimationMaximizeVisibleArea;
535 const bool maximizeVisibleAreaRunning = m_contentYAnimation->isRunning() && contentYAnimationType == ContentYAnimationMaximizeVisibleArea;
526
536
@@ -1056,10 +1066,13 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
1056 m_contentHeightDirty = true;
1066 m_contentHeightDirty = true;
1057}
1067}
1058
1068
1059−void ListViewWithPageHeader::onShowHeaderAnimationFinished()
1069+void ListViewWithPageHeader::contentYAnimationRunningChanged(bool running)
1060{
1070{
1071+ setInteractive(!running);
1072+ if (!running) {
1061− m_contentHeightDirty = true;
1073+ m_contentHeightDirty = true;
1062− polish();
1074+ polish();
1075+ }
1063}
1076}
1064
1077
1065void ListViewWithPageHeader::itemGeometryChanged(QQuickItem * /*item*/, const QRectF &newGeometry, const QRectF &oldGeometry)
1078void ListViewWithPageHeader::itemGeometryChanged(QQuickItem * /*item*/, const QRectF &newGeometry, const QRectF &oldGeometry)
plugins/Dash/listviewwithpageheader.h+3−1
@@ -86,6 +86,8 @@ public:
86
86
87 Q_INVOKABLE void positionAtBeginning();
87 Q_INVOKABLE void positionAtBeginning();
88 Q_INVOKABLE void showHeader();
88 Q_INVOKABLE void showHeader();
89+ Q_INVOKABLE int firstCreatedIndex() const;
90+ Q_INVOKABLE int createdItemCount() const;
89 Q_INVOKABLE QQuickItem *item(int modelIndex) const;
91 Q_INVOKABLE QQuickItem *item(int modelIndex) const;
90
92
91 // The index has to be created for this to try to do something
93 // The index has to be created for this to try to do something
@@ -118,7 +120,7 @@ private Q_SLOTS:
118 void onContentWidthChanged();
120 void onContentWidthChanged();
119 void onHeightChanged();
121 void onHeightChanged();
120 void onModelUpdated(const QQmlChangeSet &changeSet, bool reset);
122 void onModelUpdated(const QQmlChangeSet &changeSet, bool reset);
121− void onShowHeaderAnimationFinished();
123+ void contentYAnimationRunningChanged(bool running);
122
124
123private:
125private:
124 class ListItem
126 class ListItem
plugins/Lights/Lights.cpp+1−2
@@ -20,8 +20,7 @@
20#include <QtCore/QDebug>
20#include <QtCore/QDebug>
21
21
22extern "C" {
22extern "C" {
23−#include <hardware/hardware.h>
24−#include <hardware/lights.h>
23+#include "android-hardware.h"
25#include <string.h>
24#include <string.h>
26}
25}
27
26
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
39
39
40Powerd::Powerd(QObject* parent)
40Powerd::Powerd(QObject* parent)
41 : QObject(parent),
41 : QObject(parent),
42− unityScreen(nullptr)
42+ unityScreen(nullptr),
43+ cachedStatus(Status::On)
43{
44{
44 unityScreen = new QDBusInterface("com.canonical.Unity.Screen",
45 unityScreen = new QDBusInterface("com.canonical.Unity.Screen",
45 "/com/canonical/Unity/Screen",
46 "/com/canonical/Unity/Screen",
@@ -51,7 +52,7 @@ Powerd::Powerd(QObject* parent)
51 "com.canonical.Unity.Screen",
52 "com.canonical.Unity.Screen",
52 "DisplayPowerStateChange",
53 "DisplayPowerStateChange",
53 this,
54 this,
54− SIGNAL(displayPowerStateChange(int, int)));
55+ SLOT(handleDisplayPowerStateChange(int, int)));
55
56
56 systemSettings = g_settings_new("com.ubuntu.touch.system");
57 systemSettings = g_settings_new("com.ubuntu.touch.system");
57 g_signal_connect(systemSettings, "changed::auto-brightness", G_CALLBACK(autoBrightnessChanged), unityScreen);
58 g_signal_connect(systemSettings, "changed::auto-brightness", G_CALLBACK(autoBrightnessChanged), unityScreen);
@@ -67,3 +68,16 @@ Powerd::~Powerd()
67 g_signal_handlers_disconnect_by_data(systemSettings, unityScreen);
68 g_signal_handlers_disconnect_by_data(systemSettings, unityScreen);
68 g_object_unref(systemSettings);
69 g_object_unref(systemSettings);
69}
70}
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
29 Q_OBJECT
29 Q_OBJECT
30 Q_ENUMS(Status)
30 Q_ENUMS(Status)
31 Q_ENUMS(DisplayStateChangeReason)
31 Q_ENUMS(DisplayStateChangeReason)
32+ Q_PROPERTY(Status status READ status NOTIFY statusChanged)
32
33
33public:
34public:
34 enum DisplayStateChangeReason {
35 enum DisplayStateChangeReason {
@@ -46,12 +47,18 @@ public:
46 explicit Powerd(QObject *parent = 0);
47 explicit Powerd(QObject *parent = 0);
47 ~Powerd();
48 ~Powerd();
48
49
50+ Status status() const;
51+
49Q_SIGNALS:
52Q_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);
51
57
52private:
58private:
53 QDBusInterface *unityScreen;
59 QDBusInterface *unityScreen;
54 GSettings *systemSettings;
60 GSettings *systemSettings;
61+ Status cachedStatus;
55};
62};
56
63
57#endif
64#endif
plugins/Powerd/Powerd.qmltypes+3−3
@@ -30,10 +30,10 @@ Module {
30 "On": 1
30 "On": 1
31 }
31 }
32 }
32 }
33+ Property { name: "status"; type: "Status"; isReadonly: true }
33 Signal {
34 Signal {
34− name: "displayPowerStateChange"
35+ name: "statusChanged"
35− Parameter { name: "status"; type: "int" }
36− Parameter { name: "reason"; type: "int" }
36+ Parameter { name: "reason"; type: "DisplayStateChangeReason" }
37 }
37 }
38 }
38 }
39}
39}
plugins/Ubuntu/Payments/Payments.cpp+21−1
@@ -41,13 +41,23 @@ static void observer(PayPackage* /* package */, const char* itemid, PayPackageIt
41 case PAY_PACKAGE_ITEM_STATUS_PURCHASED:
41 case PAY_PACKAGE_ITEM_STATUS_PURCHASED:
42 Q_EMIT self->purchaseCompleted();
42 Q_EMIT self->purchaseCompleted();
43 break;
43 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;
44 default:
53 default:
45 break;
54 break;
46 }
55 }
47}
56}
48
57
49Payments::Payments(QObject *parent)
58Payments::Payments(QObject *parent)
50− : QObject(parent)
59+ : QObject(parent),
60+ m_purchasing(false)
51{
61{
52 m_package = pay_package_new("click-scope");
62 m_package = pay_package_new("click-scope");
53 pay_package_item_observer_install(m_package, observer, this);
63 pay_package_item_observer_install(m_package, observer, this);
@@ -80,6 +90,11 @@ QString Payments::formattedPrice() const
80 return locale.toCurrencyString(m_price, m_currency);
90 return locale.toCurrencyString(m_price, m_currency);
81}
91}
82
92
93+bool Payments::purchasing() const
94+{
95+ return m_purchasing;
96+}
97+
83void Payments::setCurrency(const QString &currency)
98void Payments::setCurrency(const QString &currency)
84{
99{
85 if(m_currency != currency) {
100 if(m_currency != currency) {
@@ -112,6 +127,11 @@ void Payments::setStoreItemId(const QString &store_item_id)
112 pay_package_item_start_verification(m_package, m_store_item_id.toLocal8Bit().data());
127 pay_package_item_start_verification(m_package, m_store_item_id.toLocal8Bit().data());
113}
128}
114
129
130+void Payments::setPurchasing(bool is_purchasing)
131+{
132+ m_purchasing = is_purchasing;
133+}
134+
115void Payments::start()
135void Payments::start()
116{
136{
117 pay_package_item_start_purchase(m_package, m_store_item_id.toLocal8Bit().data());
137 pay_package_item_start_purchase(m_package, m_store_item_id.toLocal8Bit().data());
plugins/Ubuntu/Payments/Payments.h+4
@@ -39,10 +39,12 @@ public:
39 double price() const;
39 double price() const;
40 QString storeItemId() const;
40 QString storeItemId() const;
41 QString formattedPrice() const;
41 QString formattedPrice() const;
42+ bool purchasing() const;
42
43
43 void setCurrency(const QString& currency);
44 void setCurrency(const QString& currency);
44 void setPrice(const double price);
45 void setPrice(const double price);
45 void setStoreItemId(const QString& store_item_id);
46 void setStoreItemId(const QString& store_item_id);
47+ void setPurchasing(bool is_purchasing);
46 Q_INVOKABLE void start();
48 Q_INVOKABLE void start();
47
49
48Q_SIGNALS:
50Q_SIGNALS:
@@ -53,11 +55,13 @@ Q_SIGNALS:
53
55
54 void purchaseError(const QString &error);
56 void purchaseError(const QString &error);
55 void purchaseCompleted();
57 void purchaseCompleted();
58+ void purchaseCancelled();
56
59
57private:
60private:
58 QString m_currency;
61 QString m_currency;
59 double m_price;
62 double m_price;
60 QString m_store_item_id;
63 QString m_store_item_id;
64+ bool m_purchasing;
61
65
62 PayPackage *m_package;
66 PayPackage *m_package;
63};
67};
plugins/Unity/DashCommunicator/dashcommunicator.cpp+2−2
@@ -27,12 +27,12 @@ DashCommunicator::DashCommunicator(QObject *parent)
27{
27{
28}
28}
29
29
30−void DashCommunicator::setCurrentScope(const QString &scopeId, bool animate, bool reset)
30+void DashCommunicator::setCurrentScope(const QString &scopeId, bool animate, bool isSwipe)
31{
31{
32 if (dbusInterface() == nullptr) {
32 if (dbusInterface() == nullptr) {
33 qDebug() << "DashCommunicator - setCurrentScope failed as Dash DBus interface not available";
33 qDebug() << "DashCommunicator - setCurrentScope failed as Dash DBus interface not available";
34 return;
34 return;
35 } else {
35 } else {
36− dbusInterface()->asyncCall("SetCurrentScope", scopeId, animate, reset);
36+ dbusInterface()->asyncCall("SetCurrentScope", scopeId, animate, isSwipe);
37 }
37 }
38}
38}
plugins/Unity/DashCommunicator/dashcommunicator.h+1−1
@@ -32,7 +32,7 @@ public:
32 ~DashCommunicator() = default;
32 ~DashCommunicator() = default;
33
33
34public Q_SLOTS:
34public Q_SLOTS:
35− void setCurrentScope(const QString &scopeId, bool animate, bool reset);
35+ void setCurrentScope(const QString &scopeId, bool animate, bool isSwipe);
36};
36};
37
37
38#endif
38#endif
plugins/Unity/DashCommunicator/dashcommunicatorservice.h+1−1
@@ -29,7 +29,7 @@ public:
29 ~DashCommunicatorService();
29 ~DashCommunicatorService();
30
30
31Q_SIGNALS:
31Q_SIGNALS:
32− void setCurrentScopeRequested(const QString &scopeId, bool animate, bool reset);
32+ void setCurrentScopeRequested(const QString &scopeId, bool animate, bool isSwipe);
33
33
34private:
34private:
35 DBusDashCommunicatorService *m_dbusService;
35 DBusDashCommunicatorService *m_dbusService;
plugins/Unity/DashCommunicator/dbusdashcommunicatorservice.cpp+2−2
@@ -33,7 +33,7 @@ DBusDashCommunicatorService::~DBusDashCommunicatorService()
33{
33{
34}
34}
35
35
36−void DBusDashCommunicatorService::SetCurrentScope(const QString &scopeId, bool animate, bool reset)
36+void DBusDashCommunicatorService::SetCurrentScope(const QString &scopeId, bool animate, bool isSwipe)
37{
37{
38− Q_EMIT setCurrentScopeRequested(scopeId, animate, reset);
38+ Q_EMIT setCurrentScopeRequested(scopeId, animate, isSwipe);
39}
39}
plugins/Unity/DashCommunicator/dbusdashcommunicatorservice.h+2−2
@@ -29,10 +29,10 @@ public:
29 ~DBusDashCommunicatorService();
29 ~DBusDashCommunicatorService();
30
30
31Q_SIGNALS:
31Q_SIGNALS:
32− void setCurrentScopeRequested(const QString &scopeId, bool animate, bool reset);
32+ void setCurrentScopeRequested(const QString &scopeId, bool animate, bool isSwipe);
33
33
34public Q_SLOTS:
34public 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);
36
36
37};
37};
38
38
plugins/Unity/Launcher/CMakeLists.txt+6−4
@@ -1,5 +1,5 @@
1include(FindPkgConfig)
1include(FindPkgConfig)
2−pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=3)
2+pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=4)
3pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=3)
3pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=3)
4pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
4pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
5
5
@@ -16,8 +16,10 @@ set(QMLLAUNCHERPLUGIN_SRC
16 launchermodel.cpp
16 launchermodel.cpp
17 launcheritem.cpp
17 launcheritem.cpp
18 quicklistmodel.cpp
18 quicklistmodel.cpp
19− common/quicklistentry.cpp
19+ quicklistentry.cpp
20− backend/launcherbackend.cpp
20+ dbusinterface.cpp
21+ gsettings.cpp
22+ desktopfilehandler.cpp
21 ${CMAKE_SOURCE_DIR}/plugins/AccountsService/AccountsServiceDBusAdaptor.cpp
23 ${CMAKE_SOURCE_DIR}/plugins/AccountsService/AccountsServiceDBusAdaptor.cpp
22 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherItemInterface.h
24 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherItemInterface.h
23 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherModelInterface.h
25 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherModelInterface.h
@@ -30,6 +32,6 @@ add_library(UnityLauncher-qml MODULE
30
32
31target_link_libraries(UnityLauncher-qml ${GSETTINGS_QT_LDFLAGS})
33target_link_libraries(UnityLauncher-qml ${GSETTINGS_QT_LDFLAGS})
32
34
33−qt5_use_modules(UnityLauncher-qml DBus Qml)
35+qt5_use_modules(UnityLauncher-qml DBus Qml Gui)
34
36
35add_unity8_plugin(Unity.Launcher 0.1 Unity/Launcher TARGETS UnityLauncher-qml)
37add_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
32 m_recent(false),
32 m_recent(false),
33 m_progress(-1),
33 m_progress(-1),
34 m_count(0),
34 m_count(0),
35+ m_countVisible(false),
35 m_focused(false),
36 m_focused(false),
36 m_quickList(new QuickListModel(this))
37 m_quickList(new QuickListModel(this))
37{
38{
38 QuickListEntry nameAction;
39 QuickListEntry nameAction;
40+ nameAction.setActionId("launch_item");
39 nameAction.setText(m_name);
41 nameAction.setText(m_name);
40 m_quickList->appendAction(nameAction);
42 m_quickList->appendAction(nameAction);
41 QuickListEntry pinningAction;
43 QuickListEntry pinningAction;
@@ -54,11 +56,27 @@ QString LauncherItem::name() const
54 return m_name;
56 return m_name;
55}
57}
56
58
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+
57QString LauncherItem::icon() const
67QString LauncherItem::icon() const
58{
68{
59 return m_icon;
69 return m_icon;
60}
70}
61
71
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+
62bool LauncherItem::pinned() const
80bool LauncherItem::pinned() const
63{
81{
64 return m_pinned;
82 return m_pinned;
@@ -128,6 +146,19 @@ void LauncherItem::setCount(int count)
128 }
146 }
129}
147}
130
148
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+
131bool LauncherItem::focused() const
162bool LauncherItem::focused() const
132{
163{
133 return m_focused;
164 return m_focused;
plugins/Unity/Launcher/launcheritem.h+19−20
@@ -34,34 +34,30 @@ class LauncherItem: public LauncherItemInterface
34public:
34public:
35 LauncherItem(const QString &appId, const QString &name, const QString &icon, QObject *parent = 0);
35 LauncherItem(const QString &appId, const QString &name, const QString &icon, QObject *parent = 0);
36
36
37− QString appId() const;
37+ QString appId() const override;
38− QString name() const;
38+ QString name() const override;
39− QString icon() const;
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;
40
49
41− bool pinned() const;
50+private:
51+ void setName(const QString &name);
52+ void setIcon(const QString &icon);
42 void setPinned(bool pinned);
53 void setPinned(bool pinned);
43−
44− bool running() const;
45 void setRunning(bool running);
54 void setRunning(bool running);
46−
47− bool recent() const;
48 void setRecent(bool recent);
55 void setRecent(bool recent);
49−
50− int progress() const;
51 void setProgress(int progress);
56 void setProgress(int progress);
52−
53− int count() const;
54 void setCount(int count);
57 void setCount(int count);
55−
58+ void setCountVisible(bool countVisible);
56− bool focused() const;
57 void setFocused(bool focused);
59 void setFocused(bool focused);
58
60
59− unity::shell::launcher::QuickListModelInterface *quickList() const;
60−
61−Q_SIGNALS:
62− void favoriteChanged(bool favorite);
63− void runningChanged(bool running);
64−
65private:
61private:
66 QString m_appId;
62 QString m_appId;
67 QString m_name;
63 QString m_name;
@@ -71,8 +67,11 @@ private:
71 bool m_recent;
67 bool m_recent;
72 int m_progress;
68 int m_progress;
73 int m_count;
69 int m_count;
70+ bool m_countVisible;
74 bool m_focused;
71 bool m_focused;
75 QuickListModel *m_quickList;
72 QuickListModel *m_quickList;
73+
74+ friend class LauncherModel;
76};
75};
77
76
78#endif // LAUNCHERITEM_H
77#endif // LAUNCHERITEM_H
plugins/Unity/Launcher/launchermodel.cpp+88−15
@@ -19,26 +19,37 @@
19
19
20#include "launchermodel.h"
20#include "launchermodel.h"
21#include "launcheritem.h"
21#include "launcheritem.h"
22−#include "backend/launcherbackend.h"
22+#include "gsettings.h"
23+#include "desktopfilehandler.h"
24+#include "dbusinterface.h"
23
25
24#include <unity/shell/application/ApplicationInfoInterface.h>
26#include <unity/shell/application/ApplicationInfoInterface.h>
25
27
28+#include <QDesktopServices>
26#include <QDebug>
29#include <QDebug>
27
30
28using namespace unity::shell::application;
31using namespace unity::shell::application;
29
32
30LauncherModel::LauncherModel(QObject *parent):
33LauncherModel::LauncherModel(QObject *parent):
31 LauncherModelInterface(parent),
34 LauncherModelInterface(parent),
32− m_backend(new LauncherBackend(this)),
35+ m_settings(new GSettings(this)),
36+ m_dbusIface(new DBusInterface(this)),
33 m_appManager(0)
37 m_appManager(0)
34{
38{
35− connect(m_backend, SIGNAL(countChanged(QString,int)), SLOT(countChanged(QString,int)));
39+ connect(m_dbusIface, &DBusInterface::countChanged, this, &LauncherModel::countChanged);
36− connect(m_backend, SIGNAL(progressChanged(QString,int)), SLOT(progressChanged(QString,int)));
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+ }
37
49
38− Q_FOREACH (const QString &entry, m_backend->storedApplications()) {
39 LauncherItem *item = new LauncherItem(entry,
50 LauncherItem *item = new LauncherItem(entry,
40− m_backend->displayName(entry),
51+ desktopFile.displayName(),
41− m_backend->icon(entry),
52+ desktopFile.icon(),
42 this);
53 this);
43 item->setPinned(true);
54 item->setPinned(true);
44 m_list.append(item);
55 m_list.append(item);
@@ -72,6 +83,8 @@ QVariant LauncherModel::data(const QModelIndex &index, int role) const
72 return item->pinned();
83 return item->pinned();
73 case RoleCount:
84 case RoleCount:
74 return item->count();
85 return item->count();
86+ case RoleCountVisible:
87+ return item->countVisible();
75 case RoleProgress:
88 case RoleProgress:
76 return item->progress();
89 return item->progress();
77 case RoleFocused:
90 case RoleFocused:
@@ -138,10 +151,17 @@ void LauncherModel::pin(const QString &appId, int index)
138 if (index == -1) {
151 if (index == -1) {
139 index = m_list.count();
152 index = m_list.count();
140 }
153 }
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+
141 beginInsertRows(QModelIndex(), index, index);
161 beginInsertRows(QModelIndex(), index, index);
142 LauncherItem *item = new LauncherItem(appId,
162 LauncherItem *item = new LauncherItem(appId,
143− m_backend->displayName(appId),
163+ desktopFile.displayName(),
144− m_backend->icon(appId),
164+ desktopFile.icon(),
145 this);
165 this);
146 item->setPinned(true);
166 item->setPinned(true);
147 m_list.insert(index, item);
167 m_list.insert(index, item);
@@ -191,28 +211,32 @@ void LauncherModel::quickListActionInvoked(const QString &appId, int actionIndex
191 } else {
211 } else {
192 pin(appId);
212 pin(appId);
193 }
213 }
214+ } else if (actionId == "launch_item") {
215+ QDesktopServices::openUrl(getUrlForAppId(appId));
194
216
195 // Nope, we don't know this action, let the backend forward it to the application
217 // Nope, we don't know this action, let the backend forward it to the application
196 } else {
218 } else {
197− m_backend->triggerQuickListAction(appId, actionId);
219+ // TODO: forward quicklist action to app, possibly via m_dbusIface
198 }
220 }
199 }
221 }
200}
222}
201
223
202void LauncherModel::setUser(const QString &username)
224void LauncherModel::setUser(const QString &username)
203{
225{
204− m_backend->setUser(username);
226+ Q_UNUSED(username)
227+ qWarning() << "This backend doesn't support multiple users";
205}
228}
206
229
207QString LauncherModel::getUrlForAppId(const QString &appId) const
230QString LauncherModel::getUrlForAppId(const QString &appId) const
208{
231{
209 // appId is either an appId or a legacy app name. Let's find out which
232 // appId is either an appId or a legacy app name. Let's find out which
210− if (appId.isEmpty())
233+ if (appId.isEmpty()) {
211 return QString();
234 return QString();
235+ }
212
236
213− QString df = m_backend->desktopFile(appId + ".desktop");
237+ if (!appId.contains("_")) {
214− if (!df.isEmpty())
215 return "application:///" + appId + ".desktop";
238 return "application:///" + appId + ".desktop";
239+ }
216
240
217 QStringList parts = appId.split('_');
241 QStringList parts = appId.split('_');
218 QString package = parts.value(0);
242 QString package = parts.value(0);
@@ -272,7 +296,7 @@ void LauncherModel::storeAppList()
272 appIds << item->appId();
296 appIds << item->appId();
273 }
297 }
274 }
298 }
275− m_backend->setStoredApplications(appIds);
299+ m_settings->setStoredApplications(appIds);
276}
300}
277
301
278int LauncherModel::findApplication(const QString &appId)
302int LauncherModel::findApplication(const QString &appId)
@@ -307,6 +331,55 @@ void LauncherModel::countChanged(const QString &appId, int count)
307 }
331 }
308}
332}
309
333
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+
310void LauncherModel::applicationAdded(const QModelIndex &parent, int row)
383void LauncherModel::applicationAdded(const QModelIndex &parent, int row)
311{
384{
312 Q_UNUSED(parent);
385 Q_UNUSED(parent);
plugins/Unity/Launcher/launchermodel.h+15−8
@@ -20,15 +20,14 @@
20#ifndef LAUNCHERMODEL_H
20#ifndef LAUNCHERMODEL_H
21#define LAUNCHERMODEL_H
21#define LAUNCHERMODEL_H
22
22
23−// unity-api
24#include <unity/shell/launcher/LauncherModelInterface.h>
23#include <unity/shell/launcher/LauncherModelInterface.h>
25#include <unity/shell/application/ApplicationManagerInterface.h>
24#include <unity/shell/application/ApplicationManagerInterface.h>
26
25
27−// Qt
28#include <QAbstractListModel>
26#include <QAbstractListModel>
29
27
30class LauncherItem;
28class LauncherItem;
31−class LauncherBackend;
29+class GSettings;
30+class DBusInterface;
32
31
33using namespace unity::shell::launcher;
32using namespace unity::shell::launcher;
34using namespace unity::shell::application;
33using namespace unity::shell::application;
@@ -41,14 +40,13 @@ public:
41 LauncherModel(QObject *parent = 0);
40 LauncherModel(QObject *parent = 0);
42 ~LauncherModel();
41 ~LauncherModel();
43
42
44− int rowCount(const QModelIndex &parent) const;
43+ int rowCount(const QModelIndex &parent = QModelIndex()) const;
45
44
46 QVariant data(const QModelIndex &index, int role) const;
45 QVariant data(const QModelIndex &index, int role) const;
47
46
48 Q_INVOKABLE unity::shell::launcher::LauncherItemInterface* get(int index) const;
47 Q_INVOKABLE unity::shell::launcher::LauncherItemInterface* get(int index) const;
49 Q_INVOKABLE void move(int oldIndex, int newIndex);
48 Q_INVOKABLE void move(int oldIndex, int newIndex);
50 Q_INVOKABLE void pin(const QString &appId, int index = -1);
49 Q_INVOKABLE void pin(const QString &appId, int index = -1);
51− Q_INVOKABLE void requestRemove(const QString &appId);
52 Q_INVOKABLE void quickListActionInvoked(const QString &appId, int actionIndex);
50 Q_INVOKABLE void quickListActionInvoked(const QString &appId, int actionIndex);
53 Q_INVOKABLE void setUser(const QString &username);
51 Q_INVOKABLE void setUser(const QString &username);
54 Q_INVOKABLE QString getUrlForAppId(const QString &appId) const;
52 Q_INVOKABLE QString getUrlForAppId(const QString &appId) const;
@@ -56,13 +54,19 @@ public:
56 unity::shell::application::ApplicationManagerInterface* applicationManager() const;
54 unity::shell::application::ApplicationManagerInterface* applicationManager() const;
57 void setApplicationManager(unity::shell::application::ApplicationManagerInterface *appManager);
55 void setApplicationManager(unity::shell::application::ApplicationManagerInterface *appManager);
58
56
57+ int findApplication(const QString &appId);
58+
59+public Q_SLOTS:
60+ void requestRemove(const QString &appId);
61+
59private:
62private:
60 void storeAppList();
63 void storeAppList();
61− int findApplication(const QString &appId);
62
64
63private Q_SLOTS:
65private Q_SLOTS:
64− void progressChanged(const QString &appId, int progress);
65 void countChanged(const QString &appId, int count);
66 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();
66
70
67 void applicationAdded(const QModelIndex &parent, int row);
71 void applicationAdded(const QModelIndex &parent, int row);
68 void applicationRemoved(const QModelIndex &parent, int row);
72 void applicationRemoved(const QModelIndex &parent, int row);
@@ -70,7 +74,10 @@ private Q_SLOTS:
70
74
71private:
75private:
72 QList<LauncherItem*> m_list;
76 QList<LauncherItem*> m_list;
73− LauncherBackend *m_backend;
77+
78+ GSettings *m_settings;
79+ DBusInterface *m_dbusIface;
80+
74 ApplicationManagerInterface *m_appManager;
81 ApplicationManagerInterface *m_appManager;
75};
82};
76
83
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 @@
20#ifndef QUICKLISTMODEL_H
20#ifndef QUICKLISTMODEL_H
21#define QUICKLISTMODEL_H
21#define QUICKLISTMODEL_H
22
22
23−#include "common/quicklistentry.h"
23+#include "quicklistentry.h"
24
24
25#include <unity/shell/launcher/QuickListModelInterface.h>
25#include <unity/shell/launcher/QuickListModelInterface.h>
26
26
plugins/Unity/Session/CMakeLists.txt+7
@@ -1,10 +1,16 @@
1+include(FindPkgConfig)
2+
3+pkg_search_module(GIO REQUIRED gio-2.0)
4+
1include_directories(
5include_directories(
2 ${CMAKE_CURRENT_SOURCE_DIR}
6 ${CMAKE_CURRENT_SOURCE_DIR}
7+ ${GIO_INCLUDE_DIRS}
3)
8)
4
9
5set(QMLSESSIONPLUGIN_SRC
10set(QMLSESSIONPLUGIN_SRC
6 plugin.cpp
11 plugin.cpp
7 dbusunitysessionservice.cpp
12 dbusunitysessionservice.cpp
13+ orientationlock.cpp
8 )
14 )
9
15
10add_library(UnitySession-qml MODULE
16add_library(UnitySession-qml MODULE
@@ -12,6 +18,7 @@ add_library(UnitySession-qml MODULE
12 )
18 )
13
19
14qt5_use_modules(UnitySession-qml DBus Qml)
20qt5_use_modules(UnitySession-qml DBus Qml)
21+target_link_libraries(UnitySession-qml ${GIO_LDFLAGS})
15
22
16# export the qmldir and qmltypes files
23# export the qmldir and qmltypes files
17add_unity8_plugin(Unity.Session 0.1 Unity/Session TARGETS UnitySession-qml)
24add_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 @@
18
18
19#include "plugin.h"
19#include "plugin.h"
20#include "dbusunitysessionservice.h"
20#include "dbusunitysessionservice.h"
21+#include "orientationlock.h"
21
22
22#include <QAbstractItemModel>
23#include <QAbstractItemModel>
23#include <QDBusConnection>
24#include <QDBusConnection>
24#include <QtQml/qqml.h>
25#include <QtQml/qqml.h>
25
26
26−static QObject *dbusunitysessionservice_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
27+static QObject *dbusunitysessionservice_provider(QQmlEngine */*engine*/, QJSEngine */*jsEngine*/)
27{
28{
28− Q_UNUSED(engine)
29− Q_UNUSED(scriptEngine)
30−
31 return new DBusUnitySessionService();
29 return new DBusUnitySessionService();
32}
30}
33
31
32+static QObject *orientationlock_provider(QQmlEngine */*engine*/, QJSEngine */*jsEngine*/)
33+{
34+ return new OrientationLock();
35+}
36+
34void SessionPlugin::registerTypes(const char *uri)
37void SessionPlugin::registerTypes(const char *uri)
35{
38{
36 qmlRegisterType<QAbstractItemModel>();
39 qmlRegisterType<QAbstractItemModel>();
37
40
38 Q_ASSERT(uri == QLatin1String("Unity.Session"));
41 Q_ASSERT(uri == QLatin1String("Unity.Session"));
39 qmlRegisterSingletonType<DBusUnitySessionService>(uri, 0, 1, "DBusUnitySessionService", dbusunitysessionservice_provider);
42 qmlRegisterSingletonType<DBusUnitySessionService>(uri, 0, 1, "DBusUnitySessionService", dbusunitysessionservice_provider);
43+ qmlRegisterSingletonType<OrientationLock>(uri, 0, 1, "OrientationLock", orientationlock_provider);
40}
44}
plugins/Utils/windowkeysfilter.cpp+1
@@ -31,6 +31,7 @@ bool WindowKeysFilter::eventFilter(QObject *watched, QEvent *event)
31{
31{
32 Q_ASSERT(!m_filteredWindow.isNull());
32 Q_ASSERT(!m_filteredWindow.isNull());
33 Q_ASSERT(watched == static_cast<QObject*>(m_filteredWindow.data()));
33 Q_ASSERT(watched == static_cast<QObject*>(m_filteredWindow.data()));
34+ Q_UNUSED(watched);
34
35
35 if (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease) {
36 if (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease) {
36 // Let QML see this event and decide if it does not want it
37 // Let QML see this event and decide if it does not want it
po/am.po+7−3
@@ -7,14 +7,14 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11−"PO-Revision-Date: 2014-09-02 01:51+0000\n"
11+"PO-Revision-Date: 2014-09-20 13:57+0000\n"
12"Last-Translator: samson <Unknown>\n"
12"Last-Translator: samson <Unknown>\n"
13"Language-Team: Amharic <am@li.org>\n"
13"Language-Team: Amharic <am@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-09-03 07:05+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-21 06:25+0000\n"
18"X-Generator: Launchpad (build 17196)\n"
18"X-Generator: Launchpad (build 17196)\n"
19
19
20#: plugins/LightDM/Greeter.cpp:130
20#: plugins/LightDM/Greeter.cpp:130
@@ -80,6 +80,10 @@ msgstr ""
80msgid "Power off"
80msgid "Power off"
81msgstr "ማጥፊያ"
81msgstr "ማጥፊያ"
82
82
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr "እንደገና ማስጀመሪያ"
86+
83#: qml/Components/Dialogs.qml:157
87#: qml/Components/Dialogs.qml:157
84msgid "Cancel"
88msgid "Cancel"
85msgstr "መሰረዣ"
89msgstr "መሰረዣ"
po/ar.po+25−20
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-05-22 08:22+0000\n"
11"PO-Revision-Date: 2014-05-22 08:22+0000\n"
12"Last-Translator: Ibrahim Saed <ibraheem5000@gmail.com>\n"
12"Last-Translator: Ibrahim Saed <ibraheem5000@gmail.com>\n"
13"Language-Team: Arabic <ar@li.org>\n"
13"Language-Team: Arabic <ar@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -164,7 +168,8 @@ msgstr "شاهد أقل"
164msgid "See all"
168msgid "See all"
165msgstr ""
169msgstr ""
166
170
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
168msgid "Search"
173msgid "Search"
169msgstr "ابحث"
174msgstr "ابحث"
170
175
@@ -204,11 +209,11 @@ msgstr "أرسل"
204msgid "Manage Dash"
209msgid "Manage Dash"
205msgstr ""
210msgstr ""
206
211
207−#: qml/Dash/ScopesOverview.qml:408
212+#: qml/Dash/ScopesOverview.qml:417
208msgid "Done"
213msgid "Done"
209msgstr ""
214msgstr ""
210
215
211−#: qml/Dash/ScopesOverview.qml:434
216+#: qml/Dash/ScopesOverview.qml:443
212msgid "Store"
217msgid "Store"
213msgstr ""
218msgstr ""
214
219
@@ -224,7 +229,7 @@ msgstr ""
224msgid "Swipe to unlock"
229msgid "Swipe to unlock"
225msgstr "اسحب لفتح القفل"
230msgstr "اسحب لفتح القفل"
226
231
227−#: qml/Hud/HudParametrizedActionsPage.qml:132
232+#: qml/Hud/HudParametrizedActionsPage.qml:139
228msgid "Confirm"
233msgid "Confirm"
229msgstr "التأكيد"
234msgstr "التأكيد"
230
235
@@ -252,7 +257,7 @@ msgstr "عرض كلمة السر"
252msgid "Enter SIM PIN"
257msgid "Enter SIM PIN"
253msgstr ""
258msgstr ""
254
259
255−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
260+#: qml/Notifications/NotificationMenuItemFactory.qml:121
256msgid "Sorry, incorrect PIN"
261msgid "Sorry, incorrect PIN"
257msgstr ""
262msgstr ""
258
263
@@ -296,11 +301,11 @@ msgstr ""
296msgid "Roaming"
301msgid "Roaming"
297msgstr ""
302msgstr ""
298
303
299−#: qml/Shell.qml:266
304+#: qml/Shell.qml:279
300msgid "Enter your passphrase"
305msgid "Enter your passphrase"
301msgstr ""
306msgstr ""
302
307
303−#: qml/Shell.qml:267
308+#: qml/Shell.qml:280
304msgid "Sorry, incorrect passphrase"
309msgid "Sorry, incorrect passphrase"
305msgstr ""
310msgstr ""
306
311
@@ -312,35 +317,35 @@ msgstr ""
312msgid "Sorry, incorrect passcode"
317msgid "Sorry, incorrect passcode"
313msgstr ""
318msgstr ""
314
319
315−#: qml/Shell.qml:273
320+#: qml/Shell.qml:286
316#, qt-format
321#, qt-format
317msgid "Enter your %1"
322msgid "Enter your %1"
318msgstr ""
323msgstr ""
319
324
320−#: qml/Shell.qml:274
325+#: qml/Shell.qml:287
321#, qt-format
326#, qt-format
322msgid "Sorry, incorrect %1"
327msgid "Sorry, incorrect %1"
323msgstr ""
328msgstr ""
324
329
325−#: qml/Shell.qml:310
330+#: qml/Shell.qml:323
326msgid "Sorry, incorrect passphrase."
331msgid "Sorry, incorrect passphrase."
327msgstr ""
332msgstr ""
328
333
329−#: qml/Shell.qml:311
334+#: qml/Shell.qml:324
330msgid "Sorry, incorrect passcode."
335msgid "Sorry, incorrect passcode."
331msgstr ""
336msgstr ""
332
337
333−#: qml/Shell.qml:312
338+#: qml/Shell.qml:325
334msgid "This will be your last attempt."
339msgid "This will be your last attempt."
335msgstr ""
340msgstr ""
336
341
337−#: qml/Shell.qml:314
342+#: qml/Shell.qml:327
338msgid ""
343msgid ""
339"If passphrase is entered incorrectly, your phone will conduct a factory "
344"If passphrase is entered incorrectly, your phone will conduct a factory "
340"reset and all personal data will be deleted."
345"reset and all personal data will be deleted."
341msgstr ""
346msgstr ""
342
347
343−#: qml/Shell.qml:315
348+#: qml/Shell.qml:328
344msgid ""
349msgid ""
345"If passcode is entered incorrectly, your phone will conduct a factory reset "
350"If passcode is entered incorrectly, your phone will conduct a factory reset "
346"and all personal data will be deleted."
351"and all personal data will be deleted."
po/ast.po+7−3
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-08-31 12:51+0000\n"
11"PO-Revision-Date: 2014-08-31 12:51+0000\n"
12"Last-Translator: ivarela <ivarela@ubuntu.com>\n"
12"Last-Translator: ivarela <ivarela@ubuntu.com>\n"
13"Language-Team: Asturian <ast@li.org>\n"
13"Language-Team: Asturian <ast@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-09-01 07:33+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20#: plugins/LightDM/Greeter.cpp:130
20#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
@@ -80,6 +80,10 @@ msgstr ""
80msgid "Power off"
80msgid "Power off"
81msgstr "Apagar"
81msgstr "Apagar"
82
82
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
83#: qml/Components/Dialogs.qml:157
87#: qml/Components/Dialogs.qml:157
84msgid "Cancel"
88msgid "Cancel"
85msgstr "Encaboxar"
89msgstr "Encaboxar"
po/az.po+6−2
@@ -7,14 +7,14 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-09-03 16:39+0000\n"
11"PO-Revision-Date: 2014-09-03 16:39+0000\n"
12"Last-Translator: Nicat Məmmədov <n1c4t97@gmail.com>\n"
12"Last-Translator: Nicat Məmmədov <n1c4t97@gmail.com>\n"
13"Language-Team: Azerbaijani <az@li.org>\n"
13"Language-Team: Azerbaijani <az@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-09-04 08:35+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18"X-Generator: Launchpad (build 17196)\n"
18"X-Generator: Launchpad (build 17196)\n"
19
19
20#: plugins/LightDM/Greeter.cpp:130
20#: plugins/LightDM/Greeter.cpp:130
@@ -78,6 +78,10 @@ msgstr ""
78msgid "Power off"
78msgid "Power off"
79msgstr "Söndür"
79msgstr "Söndür"
80
80
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
81#: qml/Components/Dialogs.qml:157
85#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr "İmtina"
87msgstr "İmtina"
po/bg.po+25−20
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-04-01 14:08+0000\n"
11"PO-Revision-Date: 2014-04-01 14:08+0000\n"
12"Last-Translator: Atanas Kovachki <Unknown>\n"
12"Last-Translator: Atanas Kovachki <Unknown>\n"
13"Language-Team: Bulgarian <bg@li.org>\n"
13"Language-Team: Bulgarian <bg@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -168,7 +172,8 @@ msgstr ""
168msgid "See all"
172msgid "See all"
169msgstr ""
173msgstr ""
170
174
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
172msgid "Search"
177msgid "Search"
173msgstr "Търсене"
178msgstr "Търсене"
174
179
@@ -208,11 +213,11 @@ msgstr "Изпрати"
208msgid "Manage Dash"
213msgid "Manage Dash"
209msgstr ""
214msgstr ""
210
215
211−#: qml/Dash/ScopesOverview.qml:408
216+#: qml/Dash/ScopesOverview.qml:417
212msgid "Done"
217msgid "Done"
213msgstr ""
218msgstr ""
214
219
215−#: qml/Dash/ScopesOverview.qml:434
220+#: qml/Dash/ScopesOverview.qml:443
216msgid "Store"
221msgid "Store"
217msgstr ""
222msgstr ""
218
223
@@ -228,7 +233,7 @@ msgstr ""
228msgid "Swipe to unlock"
233msgid "Swipe to unlock"
229msgstr ""
234msgstr ""
230
235
231−#: qml/Hud/HudParametrizedActionsPage.qml:132
236+#: qml/Hud/HudParametrizedActionsPage.qml:139
232msgid "Confirm"
237msgid "Confirm"
233msgstr "Потвърди"
238msgstr "Потвърди"
234
239
@@ -256,7 +261,7 @@ msgstr "Покажи паролата"
256msgid "Enter SIM PIN"
261msgid "Enter SIM PIN"
257msgstr ""
262msgstr ""
258
263
259−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
264+#: qml/Notifications/NotificationMenuItemFactory.qml:121
260msgid "Sorry, incorrect PIN"
265msgid "Sorry, incorrect PIN"
261msgstr ""
266msgstr ""
262
267
@@ -300,11 +305,11 @@ msgstr ""
300msgid "Roaming"
305msgid "Roaming"
301msgstr ""
306msgstr ""
302
307
303−#: qml/Shell.qml:266
308+#: qml/Shell.qml:279
304msgid "Enter your passphrase"
309msgid "Enter your passphrase"
305msgstr ""
310msgstr ""
306
311
307−#: qml/Shell.qml:267
312+#: qml/Shell.qml:280
308msgid "Sorry, incorrect passphrase"
313msgid "Sorry, incorrect passphrase"
309msgstr ""
314msgstr ""
310
315
@@ -316,35 +321,35 @@ msgstr ""
316msgid "Sorry, incorrect passcode"
321msgid "Sorry, incorrect passcode"
317msgstr ""
322msgstr ""
318
323
319−#: qml/Shell.qml:273
324+#: qml/Shell.qml:286
320#, qt-format
325#, qt-format
321msgid "Enter your %1"
326msgid "Enter your %1"
322msgstr ""
327msgstr ""
323
328
324−#: qml/Shell.qml:274
329+#: qml/Shell.qml:287
325#, qt-format
330#, qt-format
326msgid "Sorry, incorrect %1"
331msgid "Sorry, incorrect %1"
327msgstr ""
332msgstr ""
328
333
329−#: qml/Shell.qml:310
334+#: qml/Shell.qml:323
330msgid "Sorry, incorrect passphrase."
335msgid "Sorry, incorrect passphrase."
331msgstr ""
336msgstr ""
332
337
333−#: qml/Shell.qml:311
338+#: qml/Shell.qml:324
334msgid "Sorry, incorrect passcode."
339msgid "Sorry, incorrect passcode."
335msgstr ""
340msgstr ""
336
341
337−#: qml/Shell.qml:312
342+#: qml/Shell.qml:325
338msgid "This will be your last attempt."
343msgid "This will be your last attempt."
339msgstr ""
344msgstr ""
340
345
341−#: qml/Shell.qml:314
346+#: qml/Shell.qml:327
342msgid ""
347msgid ""
343"If passphrase is entered incorrectly, your phone will conduct a factory "
348"If passphrase is entered incorrectly, your phone will conduct a factory "
344"reset and all personal data will be deleted."
349"reset and all personal data will be deleted."
345msgstr ""
350msgstr ""
346
351
347−#: qml/Shell.qml:315
352+#: qml/Shell.qml:328
348msgid ""
353msgid ""
349"If passcode is entered incorrectly, your phone will conduct a factory reset "
354"If passcode is entered incorrectly, your phone will conduct a factory reset "
350"and all personal data will be deleted."
355"and all personal data will be deleted."
po/br.po+41−43
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-08-26 08:28+0000\n"
11"PO-Revision-Date: 2014-08-26 08:28+0000\n"
12"Last-Translator: Fohanno Thierry <thierry.fohanno@ofis-bzh.org>\n"
12"Last-Translator: Fohanno Thierry <thierry.fohanno@ofis-bzh.org>\n"
13"Language-Team: Breton <br@li.org>\n"
13"Language-Team: Breton <br@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr "Ger-tremen : "
22msgstr "Ger-tremen : "
23
23
@@ -32,53 +32,59 @@ msgstr "Dispilhennañ ar verradenn"
32
32
33#: qml/Components/Dialogs.qml:70
33#: qml/Components/Dialogs.qml:70
34msgid "Log out"
34msgid "Log out"
35−msgstr ""
35+msgstr "Digevreañ"
36
36
37#: qml/Components/Dialogs.qml:71
37#: qml/Components/Dialogs.qml:71
38msgid "Are you sure you want to log out?"
38msgid "Are you sure you want to log out?"
39−msgstr ""
39+msgstr "Ha sur oc'h e fell deoc'h digevreañ ?"
40
40
41#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
41#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
42#: qml/Components/Dialogs.qml:122
42#: qml/Components/Dialogs.qml:122
43msgid "No"
43msgid "No"
44−msgstr ""
44+msgstr "N'on ket"
45
45
46#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
46#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
47#: qml/Components/Dialogs.qml:129
47#: qml/Components/Dialogs.qml:129
48msgid "Yes"
48msgid "Yes"
49−msgstr ""
49+msgstr "Ya"
50
50
51#: qml/Components/Dialogs.qml:94
51#: qml/Components/Dialogs.qml:94
52msgid "Shut down"
52msgid "Shut down"
53−msgstr ""
53+msgstr "Lazhañ ar benveg"
54
54
55#: qml/Components/Dialogs.qml:95
55#: qml/Components/Dialogs.qml:95
56msgid "Are you sure you want to shut down?"
56msgid "Are you sure you want to shut down?"
57−msgstr ""
57+msgstr "Ha sur oc'h e fell deoc'h lazhañ ar benveg ?"
58
58
59#: qml/Components/Dialogs.qml:119
59#: qml/Components/Dialogs.qml:119
60msgid "Reboot"
60msgid "Reboot"
61−msgstr ""
61+msgstr "Adloc'hañ"
62
62
63#: qml/Components/Dialogs.qml:120
63#: qml/Components/Dialogs.qml:120
64msgid "Are you sure you want to reboot?"
64msgid "Are you sure you want to reboot?"
65−msgstr ""
65+msgstr "Ha sur oc'h e fell deoc'h adloc'hañ ?"
66
66
67#: qml/Components/Dialogs.qml:144
67#: qml/Components/Dialogs.qml:144
68msgid "Power"
68msgid "Power"
69−msgstr ""
69+msgstr "Tredan"
70
70
71#: qml/Components/Dialogs.qml:145
71#: qml/Components/Dialogs.qml:145
72msgid ""
72msgid ""
73"Are you sure you would like\n"
73"Are you sure you would like\n"
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76+"Ha sur oc'h e fell deoc'h\n"
77+"troc'hañ an tredan ?"
76
78
77−#: qml/Components/Dialogs.qml:144
79+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
80msgid "Power off"
79msgstr "Lazhañ"
81msgstr "Lazhañ"
80
82
81−#: qml/Components/Dialogs.qml:162
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
87+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
88msgid "Cancel"
83msgstr "Nullañ"
89msgstr "Nullañ"
84
90
@@ -168,21 +174,22 @@ msgstr "Gwelet nebeutoc'h"
168msgid "See all"
174msgid "See all"
169msgstr "Gwelet pep tra"
175msgstr "Gwelet pep tra"
170
176
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
172msgid "Search"
179msgid "Search"
173msgstr "Klask"
180msgstr "Klask"
174
181
175#: qml/Dash/PageHeader.qml:270
182#: qml/Dash/PageHeader.qml:270
176msgid "Settings"
183msgid "Settings"
177−msgstr ""
184+msgstr "Arventennoù"
178
185
179#: qml/Dash/PageHeader.qml:279
186#: qml/Dash/PageHeader.qml:279
180msgid "Remove from Favorites"
187msgid "Remove from Favorites"
181−msgstr ""
188+msgstr "Lemel eus ar sinedoù"
182
189
183#: qml/Dash/PageHeader.qml:279
190#: qml/Dash/PageHeader.qml:279
184msgid "Add to Favorites"
191msgid "Add to Favorites"
185−msgstr ""
192+msgstr "Ouzhpennañ d'ar sinedoù"
186
193
187#: qml/Dash/Previews/PreviewActionCombo.qml:34
194#: qml/Dash/Previews/PreviewActionCombo.qml:34
188msgid "More..."
195msgid "More..."
@@ -208,11 +215,11 @@ msgstr "Kas"
208msgid "Manage Dash"
215msgid "Manage Dash"
209msgstr "Merañ an daolenn-vourzh"
216msgstr "Merañ an daolenn-vourzh"
210
217
211−#: qml/Dash/ScopesOverview.qml:408
218+#: qml/Dash/ScopesOverview.qml:417
212msgid "Done"
219msgid "Done"
213msgstr "Graet eo"
220msgstr "Graet eo"
214
221
215−#: qml/Dash/ScopesOverview.qml:434
222+#: qml/Dash/ScopesOverview.qml:443
216msgid "Store"
223msgid "Store"
217msgstr "Enrollañ"
224msgstr "Enrollañ"
218
225
@@ -228,7 +235,7 @@ msgstr "An holl anezho"
228msgid "Swipe to unlock"
235msgid "Swipe to unlock"
229msgstr "Riklañ evit dibrennañ"
236msgstr "Riklañ evit dibrennañ"
230
237
231−#: qml/Hud/HudParametrizedActionsPage.qml:132
238+#: qml/Hud/HudParametrizedActionsPage.qml:139
232msgid "Confirm"
239msgid "Confirm"
233msgstr "Kadarnaat"
240msgstr "Kadarnaat"
234
241
@@ -256,7 +263,7 @@ msgstr "Diskouez ar ger-tremen"
256msgid "Enter SIM PIN"
263msgid "Enter SIM PIN"
257msgstr "Ebarzhit kod PIN ar gartenn SIM"
264msgstr "Ebarzhit kod PIN ar gartenn SIM"
258
265
259−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
266+#: qml/Notifications/NotificationMenuItemFactory.qml:121
260msgid "Sorry, incorrect PIN"
267msgid "Sorry, incorrect PIN"
261msgstr "Siwazh, kod PIN direizh"
268msgstr "Siwazh, kod PIN direizh"
262
269
@@ -300,45 +307,45 @@ msgstr "Dibrennañ ar gartenn SIM"
300msgid "Roaming"
307msgid "Roaming"
301msgstr "O kantren"
308msgstr "O kantren"
302
309
303−#: qml/Shell.qml:266
310+#: qml/Shell.qml:279
304msgid "Enter your passphrase"
311msgid "Enter your passphrase"
305msgstr "Ebarzhit ho frazenn-dremen"
312msgstr "Ebarzhit ho frazenn-dremen"
306
313
307−#: qml/Shell.qml:267
314+#: qml/Shell.qml:280
308msgid "Sorry, incorrect passphrase"
315msgid "Sorry, incorrect passphrase"
309msgstr "Siwazh, frazenn-dremen direizh"
316msgstr "Siwazh, frazenn-dremen direizh"
310
317
311#: qml/Shell.qml:282
318#: qml/Shell.qml:282
312msgid "Enter your passcode"
319msgid "Enter your passcode"
313−msgstr ""
320+msgstr "Ebarzhit ho kod-tremen"
314
321
315#: qml/Shell.qml:283
322#: qml/Shell.qml:283
316msgid "Sorry, incorrect passcode"
323msgid "Sorry, incorrect passcode"
317−msgstr ""
324+msgstr "Digarezit, kod-tremen direizh"
318
325
319−#: qml/Shell.qml:273
326+#: qml/Shell.qml:286
320#, qt-format
327#, qt-format
321msgid "Enter your %1"
328msgid "Enter your %1"
322msgstr "Ebarzhit ho %1"
329msgstr "Ebarzhit ho %1"
323
330
324−#: qml/Shell.qml:274
331+#: qml/Shell.qml:287
325#, qt-format
332#, qt-format
326msgid "Sorry, incorrect %1"
333msgid "Sorry, incorrect %1"
327msgstr "Siwazh, %1 direizh"
334msgstr "Siwazh, %1 direizh"
328
335
329−#: qml/Shell.qml:310
336+#: qml/Shell.qml:323
330msgid "Sorry, incorrect passphrase."
337msgid "Sorry, incorrect passphrase."
331msgstr "Siwazh, frazenn-dremen direizh"
338msgstr "Siwazh, frazenn-dremen direizh"
332
339
333−#: qml/Shell.qml:311
340+#: qml/Shell.qml:324
334msgid "Sorry, incorrect passcode."
341msgid "Sorry, incorrect passcode."
335msgstr "Siwazh, kod-tremen direizh"
342msgstr "Siwazh, kod-tremen direizh"
336
343
337−#: qml/Shell.qml:312
344+#: qml/Shell.qml:325
338msgid "This will be your last attempt."
345msgid "This will be your last attempt."
339msgstr "Ho taol-esae diwezhañ e vo."
346msgstr "Ho taol-esae diwezhañ e vo."
340
347
341−#: qml/Shell.qml:314
348+#: qml/Shell.qml:327
342msgid ""
349msgid ""
343"If passphrase is entered incorrectly, your phone will conduct a factory "
350"If passphrase is entered incorrectly, your phone will conduct a factory "
344"reset and all personal data will be deleted."
351"reset and all personal data will be deleted."
@@ -346,19 +353,10 @@ msgstr ""
346"Ma vez ebarzhet ur frazenn-dremen direizh, e vo adderaouekaet ho pellgomzer "
353"Ma vez ebarzhet ur frazenn-dremen direizh, e vo adderaouekaet ho pellgomzer "
347"gant arventennoù al labouradeg hag e vo diverket an holl roadennoù personel"
354"gant arventennoù al labouradeg hag e vo diverket an holl roadennoù personel"
348
355
349−#: qml/Shell.qml:315
356+#: qml/Shell.qml:328
350msgid ""
357msgid ""
351"If passcode is entered incorrectly, your phone will conduct a factory reset "
358"If passcode is entered incorrectly, your phone will conduct a factory reset "
352"and all personal data will be deleted."
359"and all personal data will be deleted."
353msgstr ""
360msgstr ""
354"Ma vez ebarzhet ur c'hod-tremen direizh, e vo adderaouekaet ho pellgomzer "
361"Ma vez ebarzhet ur c'hod-tremen direizh, e vo adderaouekaet ho pellgomzer "
355"gant arventennoù al labouradeg hag e vo diverket an holl roadennoù personel."
362"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 ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-01-16 22:33+0000\n"
11"PO-Revision-Date: 2014-01-16 22:33+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Bosnian <bs@li.org>\n"
13"Language-Team: Bosnian <bs@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -161,7 +165,8 @@ msgstr ""
161msgid "See all"
165msgid "See all"
162msgstr ""
166msgstr ""
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr ""
171msgstr ""
167
172
@@ -201,11 +206,11 @@ msgstr ""
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr ""
215msgstr ""
211
216
@@ -221,7 +226,7 @@ msgstr ""
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr ""
227msgstr ""
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr ""
231msgstr ""
227
232
@@ -249,7 +254,7 @@ msgstr ""
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr ""
293msgid "Roaming"
298msgid "Roaming"
294msgstr ""
299msgstr ""
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,35 +314,35 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
po/ca.po+13−7
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11−"PO-Revision-Date: 2014-09-01 01:01+0000\n"
11+"PO-Revision-Date: 2014-09-07 04:05+0000\n"
12"Last-Translator: David Planella <david.planella@ubuntu.com>\n"
12"Last-Translator: David Planella <david.planella@ubuntu.com>\n"
13"Language-Team: Catalan <ca@li.org>\n"
13"Language-Team: Catalan <ca@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-09-01 07:33+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20#: plugins/LightDM/Greeter.cpp:130
20#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
@@ -50,11 +50,11 @@ msgstr "Sí"
50
50
51#: qml/Components/Dialogs.qml:94
51#: qml/Components/Dialogs.qml:94
52msgid "Shut down"
52msgid "Shut down"
53−msgstr ""
53+msgstr "Apaga"
54
54
55#: qml/Components/Dialogs.qml:95
55#: qml/Components/Dialogs.qml:95
56msgid "Are you sure you want to shut down?"
56msgid "Are you sure you want to shut down?"
57−msgstr ""
57+msgstr "Segur que voleu apagar?"
58
58
59#: qml/Components/Dialogs.qml:119
59#: qml/Components/Dialogs.qml:119
60msgid "Reboot"
60msgid "Reboot"
@@ -73,10 +73,16 @@ msgid ""
73"Are you sure you would like\n"
73"Are you sure you would like\n"
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76+"Segur que voleu\n"
77+"apagar?"
76
78
77#: qml/Components/Dialogs.qml:147
79#: qml/Components/Dialogs.qml:147
78msgid "Power off"
80msgid "Power off"
79−msgstr "Apaga'l"
81+msgstr "Apaga"
82+
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
80
86
81#: qml/Components/Dialogs.qml:157
87#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
88msgid "Cancel"
po/ckb.po+25−20
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-01-21 11:05+0000\n"
11"PO-Revision-Date: 2014-01-21 11:05+0000\n"
12"Last-Translator: Aras <aras.noori@gmail.com>\n"
12"Last-Translator: Aras <aras.noori@gmail.com>\n"
13"Language-Team: Kurdish (Sorani) <ckb@li.org>\n"
13"Language-Team: Kurdish (Sorani) <ckb@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -161,7 +165,8 @@ msgstr ""
161msgid "See all"
165msgid "See all"
162msgstr ""
166msgstr ""
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr "گەڕان"
171msgstr "گەڕان"
167
172
@@ -201,11 +206,11 @@ msgstr "ناردن"
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr ""
215msgstr ""
211
216
@@ -221,7 +226,7 @@ msgstr ""
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr ""
227msgstr ""
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr "پشتڕاستکردنەوە"
231msgstr "پشتڕاستکردنەوە"
227
232
@@ -249,7 +254,7 @@ msgstr "تێپەڕەوشە پیشان بدە"
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr ""
293msgid "Roaming"
298msgid "Roaming"
294msgstr ""
299msgstr ""
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,35 +314,35 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
po/cs.po+25−20
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-01-08 10:11+0000\n"
11"PO-Revision-Date: 2014-01-08 10:11+0000\n"
12"Last-Translator: Tadeáš Pařík <tadeas.parik@gmail.com>\n"
12"Last-Translator: Tadeáš Pařík <tadeas.parik@gmail.com>\n"
13"Language-Team: Czech <cs@li.org>\n"
13"Language-Team: Czech <cs@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -161,7 +165,8 @@ msgstr ""
161msgid "See all"
165msgid "See all"
162msgstr ""
166msgstr ""
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr "Hledat"
171msgstr "Hledat"
167
172
@@ -201,11 +206,11 @@ msgstr "Odeslat"
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr ""
215msgstr ""
211
216
@@ -221,7 +226,7 @@ msgstr ""
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr ""
227msgstr ""
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr "Potvrdit"
231msgstr "Potvrdit"
227
232
@@ -249,7 +254,7 @@ msgstr "Zobrazit heslo"
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr ""
293msgid "Roaming"
298msgid "Roaming"
294msgstr ""
299msgstr ""
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,35 +314,35 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
po/da.po+25−20
@@ -8,17 +8,17 @@ msgid ""
8msgstr ""
8msgstr ""
9"Project-Id-Version: unity8\n"
9"Project-Id-Version: unity8\n"
10"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
11−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
12"PO-Revision-Date: 2014-07-30 12:37+0000\n"
12"PO-Revision-Date: 2014-07-30 12:37+0000\n"
13"Last-Translator: Ask Hjorth Larsen <asklarsen@gmail.com>\n"
13"Last-Translator: Ask Hjorth Larsen <asklarsen@gmail.com>\n"
14"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
14"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
15"MIME-Version: 1.0\n"
15"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
17"Content-Transfer-Encoding: 8bit\n"
18−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
19−"X-Generator: Launchpad (build 17174)\n"
19+"X-Generator: Launchpad (build 17196)\n"
20
20
21−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
23msgstr ""
23msgstr ""
24
24
@@ -75,11 +75,15 @@ msgid ""
75"to power off?"
75"to power off?"
76msgstr ""
76msgstr ""
77
77
78−#: qml/Components/Dialogs.qml:144
78+#: qml/Components/Dialogs.qml:147
79msgid "Power off"
79msgid "Power off"
80msgstr ""
80msgstr ""
81
81
82−#: qml/Components/Dialogs.qml:162
82+#: qml/Components/Dialogs.qml:157
83+msgid "Restart"
84+msgstr ""
85+
86+#: qml/Components/Dialogs.qml:157
83msgid "Cancel"
87msgid "Cancel"
84msgstr ""
88msgstr ""
85
89
@@ -164,7 +168,8 @@ msgstr "Vis mindre"
164msgid "See all"
168msgid "See all"
165msgstr "Se alle"
169msgstr "Se alle"
166
170
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
168msgid "Search"
173msgid "Search"
169msgstr "Søg"
174msgstr "Søg"
170
175
@@ -204,11 +209,11 @@ msgstr "Send"
204msgid "Manage Dash"
209msgid "Manage Dash"
205msgstr ""
210msgstr ""
206
211
207−#: qml/Dash/ScopesOverview.qml:408
212+#: qml/Dash/ScopesOverview.qml:417
208msgid "Done"
213msgid "Done"
209msgstr ""
214msgstr ""
210
215
211−#: qml/Dash/ScopesOverview.qml:434
216+#: qml/Dash/ScopesOverview.qml:443
212msgid "Store"
217msgid "Store"
213msgstr ""
218msgstr ""
214
219
@@ -224,7 +229,7 @@ msgstr ""
224msgid "Swipe to unlock"
229msgid "Swipe to unlock"
225msgstr "Stryg for at låse op"
230msgstr "Stryg for at låse op"
226
231
227−#: qml/Hud/HudParametrizedActionsPage.qml:132
232+#: qml/Hud/HudParametrizedActionsPage.qml:139
228msgid "Confirm"
233msgid "Confirm"
229msgstr "Bekræft"
234msgstr "Bekræft"
230
235
@@ -252,7 +257,7 @@ msgstr "Vis adgangskode"
252msgid "Enter SIM PIN"
257msgid "Enter SIM PIN"
253msgstr ""
258msgstr ""
254
259
255−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
260+#: qml/Notifications/NotificationMenuItemFactory.qml:121
256msgid "Sorry, incorrect PIN"
261msgid "Sorry, incorrect PIN"
257msgstr ""
262msgstr ""
258
263
@@ -296,11 +301,11 @@ msgstr ""
296msgid "Roaming"
301msgid "Roaming"
297msgstr ""
302msgstr ""
298
303
299−#: qml/Shell.qml:266
304+#: qml/Shell.qml:279
300msgid "Enter your passphrase"
305msgid "Enter your passphrase"
301msgstr ""
306msgstr ""
302
307
303−#: qml/Shell.qml:267
308+#: qml/Shell.qml:280
304msgid "Sorry, incorrect passphrase"
309msgid "Sorry, incorrect passphrase"
305msgstr ""
310msgstr ""
306
311
@@ -312,35 +317,35 @@ msgstr ""
312msgid "Sorry, incorrect passcode"
317msgid "Sorry, incorrect passcode"
313msgstr ""
318msgstr ""
314
319
315−#: qml/Shell.qml:273
320+#: qml/Shell.qml:286
316#, qt-format
321#, qt-format
317msgid "Enter your %1"
322msgid "Enter your %1"
318msgstr ""
323msgstr ""
319
324
320−#: qml/Shell.qml:274
325+#: qml/Shell.qml:287
321#, qt-format
326#, qt-format
322msgid "Sorry, incorrect %1"
327msgid "Sorry, incorrect %1"
323msgstr ""
328msgstr ""
324
329
325−#: qml/Shell.qml:310
330+#: qml/Shell.qml:323
326msgid "Sorry, incorrect passphrase."
331msgid "Sorry, incorrect passphrase."
327msgstr ""
332msgstr ""
328
333
329−#: qml/Shell.qml:311
334+#: qml/Shell.qml:324
330msgid "Sorry, incorrect passcode."
335msgid "Sorry, incorrect passcode."
331msgstr ""
336msgstr ""
332
337
333−#: qml/Shell.qml:312
338+#: qml/Shell.qml:325
334msgid "This will be your last attempt."
339msgid "This will be your last attempt."
335msgstr ""
340msgstr ""
336
341
337−#: qml/Shell.qml:314
342+#: qml/Shell.qml:327
338msgid ""
343msgid ""
339"If passphrase is entered incorrectly, your phone will conduct a factory "
344"If passphrase is entered incorrectly, your phone will conduct a factory "
340"reset and all personal data will be deleted."
345"reset and all personal data will be deleted."
341msgstr ""
346msgstr ""
342
347
343−#: qml/Shell.qml:315
348+#: qml/Shell.qml:328
344msgid ""
349msgid ""
345"If passcode is entered incorrectly, your phone will conduct a factory reset "
350"If passcode is entered incorrectly, your phone will conduct a factory reset "
346"and all personal data will be deleted."
351"and all personal data will be deleted."
po/de.po+14−10
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11−"PO-Revision-Date: 2014-08-29 13:00+0000\n"
11+"PO-Revision-Date: 2014-09-19 15:32+0000\n"
12−"Last-Translator: Martin Pitt <martin.pitt@ubuntu.com>\n"
12+"Last-Translator: Tobias Bannert <Unknown>\n"
13"Language-Team: German <de@li.org>\n"
13"Language-Team: German <de@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-30 07:46+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20#: plugins/LightDM/Greeter.cpp:130
20#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
@@ -36,7 +36,7 @@ msgstr "Abmelden"
36
36
37#: qml/Components/Dialogs.qml:71
37#: qml/Components/Dialogs.qml:71
38msgid "Are you sure you want to log out?"
38msgid "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?"
40
40
41#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
41#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
42#: qml/Components/Dialogs.qml:122
42#: qml/Components/Dialogs.qml:122
@@ -54,7 +54,7 @@ msgstr "Herunterfahren"
54
54
55#: qml/Components/Dialogs.qml:95
55#: qml/Components/Dialogs.qml:95
56msgid "Are you sure you want to shut down?"
56msgid "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?"
58
58
59#: qml/Components/Dialogs.qml:119
59#: qml/Components/Dialogs.qml:119
60msgid "Reboot"
60msgid "Reboot"
@@ -62,7 +62,7 @@ msgstr "Neustart"
62
62
63#: qml/Components/Dialogs.qml:120
63#: qml/Components/Dialogs.qml:120
64msgid "Are you sure you want to reboot?"
64msgid "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?"
66
66
67#: qml/Components/Dialogs.qml:144
67#: qml/Components/Dialogs.qml:144
68msgid "Power"
68msgid "Power"
@@ -73,13 +73,17 @@ msgid ""
73"Are you sure you would like\n"
73"Are you sure you would like\n"
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76−"Sind Sie sicher dass Sie\n"
76+"Sind Sie sicher, dass Sie das\n"
77−"ausschalten wollen?"
77+"Gerät ausschalten wollen?"
78
78
79#: qml/Components/Dialogs.qml:147
79#: qml/Components/Dialogs.qml:147
80msgid "Power off"
80msgid "Power off"
81msgstr "Ausschalten"
81msgstr "Ausschalten"
82
82
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr "Neustarten"
86+
83#: qml/Components/Dialogs.qml:157
87#: qml/Components/Dialogs.qml:157
84msgid "Cancel"
88msgid "Cancel"
85msgstr "Abbrechen"
89msgstr "Abbrechen"
po/el.po+25−23
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-08-21 12:06+0000\n"
11"PO-Revision-Date: 2014-08-21 12:06+0000\n"
12"Last-Translator: Chris Taklis (aka Kailor) <ctaklis@gmail.com>\n"
12"Last-Translator: Chris Taklis (aka Kailor) <ctaklis@gmail.com>\n"
13"Language-Team: Greek <el@li.org>\n"
13"Language-Team: Greek <el@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr "Κωδικός πρόσβασης: "
22msgstr "Κωδικός πρόσβασης: "
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr "Τερματισμός"
79msgstr "Τερματισμός"
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr "Ακύρωση"
87msgstr "Ακύρωση"
84
88
@@ -165,7 +169,8 @@ msgstr "Λιγότερα"
165msgid "See all"
169msgid "See all"
166msgstr "Εμφάνιση όλων"
170msgstr "Εμφάνιση όλων"
167
171
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
169msgid "Search"
174msgid "Search"
170msgstr "Αναζήτηση"
175msgstr "Αναζήτηση"
171
176
@@ -205,11 +210,11 @@ msgstr "Αποστολή"
205msgid "Manage Dash"
210msgid "Manage Dash"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:408
213+#: qml/Dash/ScopesOverview.qml:417
209msgid "Done"
214msgid "Done"
210msgstr "Ολοκληρώθηκε"
215msgstr "Ολοκληρώθηκε"
211
216
212−#: qml/Dash/ScopesOverview.qml:434
217+#: qml/Dash/ScopesOverview.qml:443
213msgid "Store"
218msgid "Store"
214msgstr "Κατάστημα"
219msgstr "Κατάστημα"
215
220
@@ -225,7 +230,7 @@ msgstr "Όλα"
225msgid "Swipe to unlock"
230msgid "Swipe to unlock"
226msgstr "Σύρετε για να ξεκλειδώσετε"
231msgstr "Σύρετε για να ξεκλειδώσετε"
227
232
228−#: qml/Hud/HudParametrizedActionsPage.qml:132
233+#: qml/Hud/HudParametrizedActionsPage.qml:139
229msgid "Confirm"
234msgid "Confirm"
230msgstr "Επιβεβαίωση"
235msgstr "Επιβεβαίωση"
231
236
@@ -253,7 +258,7 @@ msgstr "Εμφάνιση κωδικού"
253msgid "Enter SIM PIN"
258msgid "Enter SIM PIN"
254msgstr ""
259msgstr ""
255
260
256−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
261+#: qml/Notifications/NotificationMenuItemFactory.qml:121
257msgid "Sorry, incorrect PIN"
262msgid "Sorry, incorrect PIN"
258msgstr ""
263msgstr ""
259
264
@@ -297,11 +302,11 @@ msgstr "Ξεκλείδωμα SIM"
297msgid "Roaming"
302msgid "Roaming"
298msgstr "Περιαγωγή"
303msgstr "Περιαγωγή"
299
304
300−#: qml/Shell.qml:266
305+#: qml/Shell.qml:279
301msgid "Enter your passphrase"
306msgid "Enter your passphrase"
302msgstr ""
307msgstr ""
303
308
304−#: qml/Shell.qml:267
309+#: qml/Shell.qml:280
305msgid "Sorry, incorrect passphrase"
310msgid "Sorry, incorrect passphrase"
306msgstr ""
311msgstr ""
307
312
@@ -313,39 +318,36 @@ msgstr ""
313msgid "Sorry, incorrect passcode"
318msgid "Sorry, incorrect passcode"
314msgstr ""
319msgstr ""
315
320
316−#: qml/Shell.qml:273
321+#: qml/Shell.qml:286
317#, qt-format
322#, qt-format
318msgid "Enter your %1"
323msgid "Enter your %1"
319msgstr "Εισάγετε το %1"
324msgstr "Εισάγετε το %1"
320
325
321−#: qml/Shell.qml:274
326+#: qml/Shell.qml:287
322#, qt-format
327#, qt-format
323msgid "Sorry, incorrect %1"
328msgid "Sorry, incorrect %1"
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:310
331+#: qml/Shell.qml:323
327msgid "Sorry, incorrect passphrase."
332msgid "Sorry, incorrect passphrase."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:311
335+#: qml/Shell.qml:324
331msgid "Sorry, incorrect passcode."
336msgid "Sorry, incorrect passcode."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:312
339+#: qml/Shell.qml:325
335msgid "This will be your last attempt."
340msgid "This will be your last attempt."
336msgstr ""
341msgstr ""
337
342
338−#: qml/Shell.qml:314
343+#: qml/Shell.qml:327
339msgid ""
344msgid ""
340"If passphrase is entered incorrectly, your phone will conduct a factory "
345"If passphrase is entered incorrectly, your phone will conduct a factory "
341"reset and all personal data will be deleted."
346"reset and all personal data will be deleted."
342msgstr ""
347msgstr ""
343
348
344−#: qml/Shell.qml:315
349+#: qml/Shell.qml:328
345msgid ""
350msgid ""
346"If passcode is entered incorrectly, your phone will conduct a factory reset "
351"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"and all personal data will be deleted."
352"and all personal data will be deleted."
348msgstr ""
353msgstr ""
349−
350−#~ msgid "Restart"
351−#~ msgstr "Επανεκκίνηση"
po/en_AU.po+7−3
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-08-31 11:20+0000\n"
11"PO-Revision-Date: 2014-08-31 11:20+0000\n"
12"Last-Translator: Jared Norris <jarednorris@ubuntu.com>\n"
12"Last-Translator: Jared Norris <jarednorris@ubuntu.com>\n"
13"Language-Team: English (Australia) <en_AU@li.org>\n"
13"Language-Team: English (Australia) <en_AU@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-09-01 07:33+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20#: plugins/LightDM/Greeter.cpp:130
20#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
@@ -80,6 +80,10 @@ msgstr ""
80msgid "Power off"
80msgid "Power off"
81msgstr "Power off"
81msgstr "Power off"
82
82
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
83#: qml/Components/Dialogs.qml:157
87#: qml/Components/Dialogs.qml:157
84msgid "Cancel"
88msgid "Cancel"
85msgstr "Cancel"
89msgstr "Cancel"
po/en_GB.po+42−44
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-08-23 13:48+0000\n"
11"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"
13"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
13"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr "Password: "
22msgstr "Password: "
23
23
@@ -32,53 +32,59 @@ msgstr "Unpin shortcut"
32
32
33#: qml/Components/Dialogs.qml:70
33#: qml/Components/Dialogs.qml:70
34msgid "Log out"
34msgid "Log out"
35−msgstr ""
35+msgstr "Log out"
36
36
37#: qml/Components/Dialogs.qml:71
37#: qml/Components/Dialogs.qml:71
38msgid "Are you sure you want to log out?"
38msgid "Are you sure you want to log out?"
39−msgstr ""
39+msgstr "Are you sure you want to log out?"
40
40
41#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
41#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
42#: qml/Components/Dialogs.qml:122
42#: qml/Components/Dialogs.qml:122
43msgid "No"
43msgid "No"
44−msgstr ""
44+msgstr "No"
45
45
46#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
46#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
47#: qml/Components/Dialogs.qml:129
47#: qml/Components/Dialogs.qml:129
48msgid "Yes"
48msgid "Yes"
49−msgstr ""
49+msgstr "Yes"
50
50
51#: qml/Components/Dialogs.qml:94
51#: qml/Components/Dialogs.qml:94
52msgid "Shut down"
52msgid "Shut down"
53−msgstr ""
53+msgstr "Shut down"
54
54
55#: qml/Components/Dialogs.qml:95
55#: qml/Components/Dialogs.qml:95
56msgid "Are you sure you want to shut down?"
56msgid "Are you sure you want to shut down?"
57−msgstr ""
57+msgstr "Are you sure you want to shut down?"
58
58
59#: qml/Components/Dialogs.qml:119
59#: qml/Components/Dialogs.qml:119
60msgid "Reboot"
60msgid "Reboot"
61−msgstr ""
61+msgstr "Reboot"
62
62
63#: qml/Components/Dialogs.qml:120
63#: qml/Components/Dialogs.qml:120
64msgid "Are you sure you want to reboot?"
64msgid "Are you sure you want to reboot?"
65−msgstr ""
65+msgstr "Are you sure you want to reboot?"
66
66
67#: qml/Components/Dialogs.qml:144
67#: qml/Components/Dialogs.qml:144
68msgid "Power"
68msgid "Power"
69−msgstr ""
69+msgstr "Power"
70
70
71#: qml/Components/Dialogs.qml:145
71#: qml/Components/Dialogs.qml:145
72msgid ""
72msgid ""
73"Are you sure you would like\n"
73"Are you sure you would like\n"
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76+"Are you sure you would like\n"
77+"to power off?"
76
78
77−#: qml/Components/Dialogs.qml:144
79+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
80msgid "Power off"
79msgstr "Power off"
81msgstr "Power off"
80
82
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
82msgid "Cancel"
88msgid "Cancel"
83msgstr "Cancel"
89msgstr "Cancel"
84
90
@@ -163,21 +169,22 @@ msgstr "See less"
163msgid "See all"
169msgid "See all"
164msgstr "See all"
170msgstr "See all"
165
171
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
167msgid "Search"
174msgid "Search"
168msgstr "Search"
175msgstr "Search"
169
176
170#: qml/Dash/PageHeader.qml:270
177#: qml/Dash/PageHeader.qml:270
171msgid "Settings"
178msgid "Settings"
172−msgstr ""
179+msgstr "Settings"
173
180
174#: qml/Dash/PageHeader.qml:279
181#: qml/Dash/PageHeader.qml:279
175msgid "Remove from Favorites"
182msgid "Remove from Favorites"
176−msgstr ""
183+msgstr "Remove from Favourites"
177
184
178#: qml/Dash/PageHeader.qml:279
185#: qml/Dash/PageHeader.qml:279
179msgid "Add to Favorites"
186msgid "Add to Favorites"
180−msgstr ""
187+msgstr "Add to Favourites"
181
188
182#: qml/Dash/Previews/PreviewActionCombo.qml:34
189#: qml/Dash/Previews/PreviewActionCombo.qml:34
183msgid "More..."
190msgid "More..."
@@ -203,11 +210,11 @@ msgstr "Send"
203msgid "Manage Dash"
210msgid "Manage Dash"
204msgstr "Manage Dash"
211msgstr "Manage Dash"
205
212
206−#: qml/Dash/ScopesOverview.qml:408
213+#: qml/Dash/ScopesOverview.qml:417
207msgid "Done"
214msgid "Done"
208msgstr "Done"
215msgstr "Done"
209
216
210−#: qml/Dash/ScopesOverview.qml:434
217+#: qml/Dash/ScopesOverview.qml:443
211msgid "Store"
218msgid "Store"
212msgstr "Store"
219msgstr "Store"
213
220
@@ -223,7 +230,7 @@ msgstr "All"
223msgid "Swipe to unlock"
230msgid "Swipe to unlock"
224msgstr "Swipe to unlock"
231msgstr "Swipe to unlock"
225
232
226−#: qml/Hud/HudParametrizedActionsPage.qml:132
233+#: qml/Hud/HudParametrizedActionsPage.qml:139
227msgid "Confirm"
234msgid "Confirm"
228msgstr "Confirm"
235msgstr "Confirm"
229
236
@@ -251,7 +258,7 @@ msgstr "Show password"
251msgid "Enter SIM PIN"
258msgid "Enter SIM PIN"
252msgstr "Enter SIM PIN"
259msgstr "Enter SIM PIN"
253
260
254−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
261+#: qml/Notifications/NotificationMenuItemFactory.qml:121
255msgid "Sorry, incorrect PIN"
262msgid "Sorry, incorrect PIN"
256msgstr "Sorry, incorrect PIN"
263msgstr "Sorry, incorrect PIN"
257
264
@@ -295,45 +302,45 @@ msgstr "Unlock SIM"
295msgid "Roaming"
302msgid "Roaming"
296msgstr "Roaming"
303msgstr "Roaming"
297
304
298−#: qml/Shell.qml:266
305+#: qml/Shell.qml:279
299msgid "Enter your passphrase"
306msgid "Enter your passphrase"
300msgstr "Enter your passphrase"
307msgstr "Enter your passphrase"
301
308
302−#: qml/Shell.qml:267
309+#: qml/Shell.qml:280
303msgid "Sorry, incorrect passphrase"
310msgid "Sorry, incorrect passphrase"
304msgstr "Sorry, incorrect passphrase"
311msgstr "Sorry, incorrect passphrase"
305
312
306#: qml/Shell.qml:282
313#: qml/Shell.qml:282
307msgid "Enter your passcode"
314msgid "Enter your passcode"
308−msgstr ""
315+msgstr "Enter your passcode"
309
316
310#: qml/Shell.qml:283
317#: qml/Shell.qml:283
311msgid "Sorry, incorrect passcode"
318msgid "Sorry, incorrect passcode"
312−msgstr ""
319+msgstr "Sorry, incorrect passcode"
313
320
314−#: qml/Shell.qml:273
321+#: qml/Shell.qml:286
315#, qt-format
322#, qt-format
316msgid "Enter your %1"
323msgid "Enter your %1"
317msgstr "Enter your %1"
324msgstr "Enter your %1"
318
325
319−#: qml/Shell.qml:274
326+#: qml/Shell.qml:287
320#, qt-format
327#, qt-format
321msgid "Sorry, incorrect %1"
328msgid "Sorry, incorrect %1"
322msgstr "Sorry, incorrect %1"
329msgstr "Sorry, incorrect %1"
323
330
324−#: qml/Shell.qml:310
331+#: qml/Shell.qml:323
325msgid "Sorry, incorrect passphrase."
332msgid "Sorry, incorrect passphrase."
326msgstr "Sorry, incorrect passphrase."
333msgstr "Sorry, incorrect passphrase."
327
334
328−#: qml/Shell.qml:311
335+#: qml/Shell.qml:324
329msgid "Sorry, incorrect passcode."
336msgid "Sorry, incorrect passcode."
330msgstr "Sorry, incorrect passcode."
337msgstr "Sorry, incorrect passcode."
331
338
332−#: qml/Shell.qml:312
339+#: qml/Shell.qml:325
333msgid "This will be your last attempt."
340msgid "This will be your last attempt."
334msgstr "This will be your last attempt."
341msgstr "This will be your last attempt."
335
342
336−#: qml/Shell.qml:314
343+#: qml/Shell.qml:327
337msgid ""
344msgid ""
338"If passphrase is entered incorrectly, your phone will conduct a factory "
345"If passphrase is entered incorrectly, your phone will conduct a factory "
339"reset and all personal data will be deleted."
346"reset and all personal data will be deleted."
@@ -341,19 +348,10 @@ msgstr ""
341"If passphrase is entered incorrectly, your phone will conduct a factory "
348"If passphrase is entered incorrectly, your phone will conduct a factory "
342"reset and all personal data will be deleted."
349"reset and all personal data will be deleted."
343
350
344−#: qml/Shell.qml:315
351+#: qml/Shell.qml:328
345msgid ""
352msgid ""
346"If passcode is entered incorrectly, your phone will conduct a factory reset "
353"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"and all personal data will be deleted."
354"and all personal data will be deleted."
348msgstr ""
355msgstr ""
349"If passcode is entered incorrectly, your phone will conduct a factory reset "
356"If passcode is entered incorrectly, your phone will conduct a factory reset "
350"and all personal data will be deleted."
357"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 ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2013-06-26 22:35+0000\n"
11"PO-Revision-Date: 2013-06-26 22:35+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Esperanto <eo@li.org>\n"
13"Language-Team: Esperanto <eo@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -161,7 +165,8 @@ msgstr ""
161msgid "See all"
165msgid "See all"
162msgstr ""
166msgstr ""
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr ""
171msgstr ""
167
172
@@ -201,11 +206,11 @@ msgstr ""
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr ""
215msgstr ""
211
216
@@ -221,7 +226,7 @@ msgstr ""
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr ""
227msgstr ""
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr ""
231msgstr ""
227
232
@@ -249,7 +254,7 @@ msgstr ""
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr ""
293msgid "Roaming"
298msgid "Roaming"
294msgstr ""
299msgstr ""
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,35 +314,35 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
po/es.po+7−3
@@ -7,14 +7,14 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-09-02 08:16+0000\n"
11"PO-Revision-Date: 2014-09-02 08:16+0000\n"
12"Last-Translator: Víctor R. Ruiz <Unknown>\n"
12"Last-Translator: Víctor R. Ruiz <Unknown>\n"
13"Language-Team: Spanish <es@li.org>\n"
13"Language-Team: Spanish <es@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-09-03 07:05+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18"X-Generator: Launchpad (build 17196)\n"
18"X-Generator: Launchpad (build 17196)\n"
19
19
20#: plugins/LightDM/Greeter.cpp:130
20#: plugins/LightDM/Greeter.cpp:130
@@ -80,6 +80,10 @@ msgstr ""
80msgid "Power off"
80msgid "Power off"
81msgstr "Apagar"
81msgstr "Apagar"
82
82
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
83#: qml/Components/Dialogs.qml:157
87#: qml/Components/Dialogs.qml:157
84msgid "Cancel"
88msgid "Cancel"
85msgstr "Cancelar"
89msgstr "Cancelar"
@@ -303,7 +307,7 @@ msgstr "Itinerancia"
303
307
304#: qml/Shell.qml:279
308#: qml/Shell.qml:279
305msgid "Enter your passphrase"
309msgid "Enter your passphrase"
306−msgstr "Introudzca su contraseña"
310+msgstr "Introduzca su contraseña"
307
311
308#: qml/Shell.qml:280
312#: qml/Shell.qml:280
309msgid "Sorry, incorrect passphrase"
313msgid "Sorry, incorrect passphrase"
po/eu.po+8−4
@@ -7,14 +7,14 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11−"PO-Revision-Date: 2014-09-02 20:34+0000\n"
11+"PO-Revision-Date: 2014-09-20 13:13+0000\n"
12"Last-Translator: Ibai Oihanguren Sala <Unknown>\n"
12"Last-Translator: Ibai Oihanguren Sala <Unknown>\n"
13"Language-Team: Basque <eu@li.org>\n"
13"Language-Team: Basque <eu@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-09-03 07:05+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-21 06:25+0000\n"
18"X-Generator: Launchpad (build 17196)\n"
18"X-Generator: Launchpad (build 17196)\n"
19
19
20#: plugins/LightDM/Greeter.cpp:130
20#: plugins/LightDM/Greeter.cpp:130
@@ -66,7 +66,7 @@ msgstr "Ziur berrabiarazi nahi duzula?"
66
66
67#: qml/Components/Dialogs.qml:144
67#: qml/Components/Dialogs.qml:144
68msgid "Power"
68msgid "Power"
69−msgstr "Energia"
69+msgstr "Piztu/itzali"
70
70
71#: qml/Components/Dialogs.qml:145
71#: qml/Components/Dialogs.qml:145
72msgid ""
72msgid ""
@@ -78,6 +78,10 @@ msgstr "Ziur itzali nahi duzula?"
78msgid "Power off"
78msgid "Power off"
79msgstr "Itzali"
79msgstr "Itzali"
80
80
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr "Berrabiarazi"
84+
81#: qml/Components/Dialogs.qml:157
85#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr "Utzi"
87msgstr "Utzi"
po/fa.po+26−27
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11−"PO-Revision-Date: 2014-08-27 20:08+0000\n"
11+"PO-Revision-Date: 2014-09-21 10:43+0000\n"
12"Last-Translator: Danial Behzadi <dani.behzi@gmail.com>\n"
12"Last-Translator: Danial Behzadi <dani.behzi@gmail.com>\n"
13"Language-Team: Persian <fa@li.org>\n"
13"Language-Team: Persian <fa@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-22 07:05+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr "گذرواژه: "
22msgstr "گذرواژه: "
23
23
@@ -76,11 +76,15 @@ msgstr ""
76"آیا مطمئن هستید که\n"
76"آیا مطمئن هستید که\n"
77"می‌خواهید خاموش کنید؟"
77"می‌خواهید خاموش کنید؟"
78
78
79−#: qml/Components/Dialogs.qml:144
79+#: qml/Components/Dialogs.qml:147
80msgid "Power off"
80msgid "Power off"
81msgstr "خاموش کردن"
81msgstr "خاموش کردن"
82
82
83−#: qml/Components/Dialogs.qml:162
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr "شروع مجدّد"
86+
87+#: qml/Components/Dialogs.qml:157
84msgid "Cancel"
88msgid "Cancel"
85msgstr "لغو"
89msgstr "لغو"
86
90
@@ -165,7 +169,8 @@ msgstr "کم‌تر ببینید"
165msgid "See all"
169msgid "See all"
166msgstr "دیدن همه"
170msgstr "دیدن همه"
167
171
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
169msgid "Search"
174msgid "Search"
170msgstr "جست‌وجو"
175msgstr "جست‌وجو"
171
176
@@ -205,11 +210,11 @@ msgstr "ارسال"
205msgid "Manage Dash"
210msgid "Manage Dash"
206msgstr "مدیریت دش"
211msgstr "مدیریت دش"
207
212
208−#: qml/Dash/ScopesOverview.qml:408
213+#: qml/Dash/ScopesOverview.qml:417
209msgid "Done"
214msgid "Done"
210msgstr "انجام شد"
215msgstr "انجام شد"
211
216
212−#: qml/Dash/ScopesOverview.qml:434
217+#: qml/Dash/ScopesOverview.qml:443
213msgid "Store"
218msgid "Store"
214msgstr "فروشگاه"
219msgstr "فروشگاه"
215
220
@@ -225,7 +230,7 @@ msgstr "همه"
225msgid "Swipe to unlock"
230msgid "Swipe to unlock"
226msgstr "برای باز کردن قفل بکشد"
231msgstr "برای باز کردن قفل بکشد"
227
232
228−#: qml/Hud/HudParametrizedActionsPage.qml:132
233+#: qml/Hud/HudParametrizedActionsPage.qml:139
229msgid "Confirm"
234msgid "Confirm"
230msgstr "تأیید"
235msgstr "تأیید"
231
236
@@ -253,7 +258,7 @@ msgstr "نمایش گذرواژه"
253msgid "Enter SIM PIN"
258msgid "Enter SIM PIN"
254msgstr "PIN سیم‌کارت را وارد کنید"
259msgstr "PIN سیم‌کارت را وارد کنید"
255
260
256−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
261+#: qml/Notifications/NotificationMenuItemFactory.qml:121
257msgid "Sorry, incorrect PIN"
262msgid "Sorry, incorrect PIN"
258msgstr "متأسّفیم، PIN نادرست بود"
263msgstr "متأسّفیم، PIN نادرست بود"
259
264
@@ -297,11 +302,11 @@ msgstr "باز کردن قفل سیم‌کارت"
297msgid "Roaming"
302msgid "Roaming"
298msgstr "رومینگ"
303msgstr "رومینگ"
299
304
300−#: qml/Shell.qml:266
305+#: qml/Shell.qml:279
301msgid "Enter your passphrase"
306msgid "Enter your passphrase"
302msgstr "عبارت‌عبورتان را وارد کنید"
307msgstr "عبارت‌عبورتان را وارد کنید"
303
308
304−#: qml/Shell.qml:267
309+#: qml/Shell.qml:280
305msgid "Sorry, incorrect passphrase"
310msgid "Sorry, incorrect passphrase"
306msgstr "متأسّفیم، عبارت‌عبور نادرست بود"
311msgstr "متأسّفیم، عبارت‌عبور نادرست بود"
307
312
@@ -313,29 +318,29 @@ msgstr "رمزعبورتان را وارد کنید"
313msgid "Sorry, incorrect passcode"
318msgid "Sorry, incorrect passcode"
314msgstr "متأسّفیم، رمزعبور نادرست بود"
319msgstr "متأسّفیم، رمزعبور نادرست بود"
315
320
316−#: qml/Shell.qml:273
321+#: qml/Shell.qml:286
317#, qt-format
322#, qt-format
318msgid "Enter your %1"
323msgid "Enter your %1"
319msgstr "%1 خود را وارد کنید"
324msgstr "%1 خود را وارد کنید"
320
325
321−#: qml/Shell.qml:274
326+#: qml/Shell.qml:287
322#, qt-format
327#, qt-format
323msgid "Sorry, incorrect %1"
328msgid "Sorry, incorrect %1"
324msgstr "متأسّفیم، %1 نادرست بود"
329msgstr "متأسّفیم، %1 نادرست بود"
325
330
326−#: qml/Shell.qml:310
331+#: qml/Shell.qml:323
327msgid "Sorry, incorrect passphrase."
332msgid "Sorry, incorrect passphrase."
328msgstr "متأسّفیم، عبارت‌عبور نادرست است."
333msgstr "متأسّفیم، عبارت‌عبور نادرست است."
329
334
330−#: qml/Shell.qml:311
335+#: qml/Shell.qml:324
331msgid "Sorry, incorrect passcode."
336msgid "Sorry, incorrect passcode."
332msgstr "متأسّفیم، رمزعبور نادرست است."
337msgstr "متأسّفیم، رمزعبور نادرست است."
333
338
334−#: qml/Shell.qml:312
339+#: qml/Shell.qml:325
335msgid "This will be your last attempt."
340msgid "This will be your last attempt."
336msgstr "این آخرین تلاش شما خواهد بود."
341msgstr "این آخرین تلاش شما خواهد بود."
337
342
338−#: qml/Shell.qml:314
343+#: qml/Shell.qml:327
339msgid ""
344msgid ""
340"If passphrase is entered incorrectly, your phone will conduct a factory "
345"If passphrase is entered incorrectly, your phone will conduct a factory "
341"reset and all personal data will be deleted."
346"reset and all personal data will be deleted."
@@ -343,16 +348,10 @@ msgstr ""
343"اگر عبارت‌عبور نادرست وارد شود، تلفن شما بازنشانی کارخانه خواهد شد و تمامی "
348"اگر عبارت‌عبور نادرست وارد شود، تلفن شما بازنشانی کارخانه خواهد شد و تمامی "
344"اطّلاعات شخصی حذف خواهند شد."
349"اطّلاعات شخصی حذف خواهند شد."
345
350
346−#: qml/Shell.qml:315
351+#: qml/Shell.qml:328
347msgid ""
352msgid ""
348"If passcode is entered incorrectly, your phone will conduct a factory reset "
353"If passcode is entered incorrectly, your phone will conduct a factory reset "
349"and all personal data will be deleted."
354"and all personal data will be deleted."
350msgstr ""
355msgstr ""
351"اگر رمزعبور نادرست وارد شود، تلفن شما بازنشانی کارخانه خواهد شد و تمامی "
356"اگر رمزعبور نادرست وارد شود، تلفن شما بازنشانی کارخانه خواهد شد و تمامی "
352"اطّلاعات شخصی حذف خواهند شد."
357"اطّلاعات شخصی حذف خواهند شد."
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 ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-08-28 13:47+0000\n"
11"PO-Revision-Date: 2014-08-28 13:47+0000\n"
12"Last-Translator: Timo Jyrinki <timo.jyrinki@canonical.com>\n"
12"Last-Translator: Timo Jyrinki <timo.jyrinki@canonical.com>\n"
13"Language-Team: Finnish <fi@li.org>\n"
13"Language-Team: Finnish <fi@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-30 07:46+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20#: plugins/LightDM/Greeter.cpp:130
20#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
@@ -80,6 +80,10 @@ msgstr ""
80msgid "Power off"
80msgid "Power off"
81msgstr "Sammuta"
81msgstr "Sammuta"
82
82
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
83#: qml/Components/Dialogs.qml:157
87#: qml/Components/Dialogs.qml:157
84msgid "Cancel"
88msgid "Cancel"
85msgstr "Peru"
89msgstr "Peru"
po/fo.po+25−20
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-01-14 20:08+0000\n"
11"PO-Revision-Date: 2014-01-14 20:08+0000\n"
12"Last-Translator: Jógvan Olsen <jeggy@jebster.net>\n"
12"Last-Translator: Jógvan Olsen <jeggy@jebster.net>\n"
13"Language-Team: Faroese <fo@li.org>\n"
13"Language-Team: Faroese <fo@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -161,7 +165,8 @@ msgstr ""
161msgid "See all"
165msgid "See all"
162msgstr ""
166msgstr ""
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr "Leita"
171msgstr "Leita"
167
172
@@ -201,11 +206,11 @@ msgstr ""
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr ""
215msgstr ""
211
216
@@ -221,7 +226,7 @@ msgstr ""
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr ""
227msgstr ""
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr "Vátta"
231msgstr "Vátta"
227
232
@@ -249,7 +254,7 @@ msgstr ""
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr ""
293msgid "Roaming"
298msgid "Roaming"
294msgstr ""
299msgstr ""
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,35 +314,35 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
po/fr.po+11−5
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-08-29 10:31+0000\n"
11"PO-Revision-Date: 2014-08-29 10:31+0000\n"
12"Last-Translator: Sébastien Maes <nautilussebastien@gmail.com>\n"
12"Last-Translator: Sébastien Maes <nautilussebastien@gmail.com>\n"
13"Language-Team: French <fr@li.org>\n"
13"Language-Team: French <fr@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-30 07:46+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20#: plugins/LightDM/Greeter.cpp:130
20#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
@@ -66,18 +66,24 @@ msgstr "Êtes-vous sûr de vouloir redémarrer ?"
66
66
67#: qml/Components/Dialogs.qml:144
67#: qml/Components/Dialogs.qml:144
68msgid "Power"
68msgid "Power"
69−msgstr ""
69+msgstr "Alimentation"
70
70
71#: qml/Components/Dialogs.qml:145
71#: qml/Components/Dialogs.qml:145
72msgid ""
72msgid ""
73"Are you sure you would like\n"
73"Are you sure you would like\n"
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76+"Êtes-vous sûr de vouloir\n"
77+"couper l'alimentation ?"
76
78
77#: qml/Components/Dialogs.qml:147
79#: qml/Components/Dialogs.qml:147
78msgid "Power off"
80msgid "Power off"
79msgstr "Éteindre"
81msgstr "Éteindre"
80
82
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
81#: qml/Components/Dialogs.qml:157
87#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
88msgid "Cancel"
83msgstr "Annuler"
89msgstr "Annuler"
@@ -217,7 +223,7 @@ msgstr "Terminé"
217
223
218#: qml/Dash/ScopesOverview.qml:443
224#: qml/Dash/ScopesOverview.qml:443
219msgid "Store"
225msgid "Store"
220−msgstr ""
226+msgstr "Logithèque"
221
227
222#: qml/Dash/ScopesOverviewTab.qml:36
228#: qml/Dash/ScopesOverviewTab.qml:36
223msgid "Favorites"
229msgid "Favorites"
po/gd.po+62−55
@@ -7,20 +7,20 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11−"PO-Revision-Date: 2014-08-13 00:21+0000\n"
11+"PO-Revision-Date: 2014-09-12 16:34+0000\n"
12−"Last-Translator: Akerbeltz <fios@akerbeltz.org>\n"
12+"Last-Translator: GunChleoc <Unknown>\n"
13−"Language-Team: Fòram na Gàidhlig http://www.foramnagaidhlig.net\n"
13+"Language-Team: Fòram na Gàidhlig\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19"Language: gd\n"
19"Language: gd\n"
20
20
21−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
23−msgstr ""
23+msgstr "Facal-faire: "
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:43
25#: plugins/Unity/Launcher/launcheritem.cpp:43
26#: plugins/Unity/Launcher/launcheritem.cpp:73
26#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -33,53 +33,59 @@ msgstr "Neo-phrìnich an ath-ghoirid"
33
33
34#: qml/Components/Dialogs.qml:70
34#: qml/Components/Dialogs.qml:70
35msgid "Log out"
35msgid "Log out"
36−msgstr ""
36+msgstr "Clàraich a-mach"
37
37
38#: qml/Components/Dialogs.qml:71
38#: qml/Components/Dialogs.qml:71
39msgid "Are you sure you want to log out?"
39msgid "Are you sure you want to log out?"
40−msgstr ""
40+msgstr "A bheil thu cinnteach gu bheil thu airson clàradh a-mach?"
41
41
42#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
42#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
43#: qml/Components/Dialogs.qml:122
43#: qml/Components/Dialogs.qml:122
44msgid "No"
44msgid "No"
45−msgstr ""
45+msgstr "Chan eil"
46
46
47#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
47#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
48#: qml/Components/Dialogs.qml:129
48#: qml/Components/Dialogs.qml:129
49msgid "Yes"
49msgid "Yes"
50−msgstr ""
50+msgstr "Tha"
51
51
52#: qml/Components/Dialogs.qml:94
52#: qml/Components/Dialogs.qml:94
53msgid "Shut down"
53msgid "Shut down"
54−msgstr ""
54+msgstr "Dùin sìos"
55
55
56#: qml/Components/Dialogs.qml:95
56#: qml/Components/Dialogs.qml:95
57msgid "Are you sure you want to shut down?"
57msgid "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?"
59
59
60#: qml/Components/Dialogs.qml:119
60#: qml/Components/Dialogs.qml:119
61msgid "Reboot"
61msgid "Reboot"
62−msgstr ""
62+msgstr "Ath-thòisich an siostam"
63
63
64#: qml/Components/Dialogs.qml:120
64#: qml/Components/Dialogs.qml:120
65msgid "Are you sure you want to reboot?"
65msgid "Are you sure you want to reboot?"
66−msgstr ""
66+msgstr "A bheil thu cinnteach gu bheil thu airson tòiseachadh às ùr?"
67
67
68#: qml/Components/Dialogs.qml:144
68#: qml/Components/Dialogs.qml:144
69msgid "Power"
69msgid "Power"
70−msgstr ""
70+msgstr "Cumhachd"
71
71
72#: qml/Components/Dialogs.qml:145
72#: qml/Components/Dialogs.qml:145
73msgid ""
73msgid ""
74"Are you sure you would like\n"
74"Are you sure you would like\n"
75"to power off?"
75"to power off?"
76msgstr ""
76msgstr ""
77+"A bheil thu cinnteach gu bheil thu\n"
78+"airson a' chumhachd a chur dheth?"
77
79
78−#: qml/Components/Dialogs.qml:144
80+#: qml/Components/Dialogs.qml:147
79msgid "Power off"
81msgid "Power off"
80msgstr "Cuir a' chumhachd dheth"
82msgstr "Cuir a' chumhachd dheth"
81
83
82−#: qml/Components/Dialogs.qml:162
84+#: qml/Components/Dialogs.qml:157
85+msgid "Restart"
86+msgstr ""
87+
88+#: qml/Components/Dialogs.qml:157
83msgid "Cancel"
89msgid "Cancel"
84msgstr "Sguir dheth"
90msgstr "Sguir dheth"
85
91
@@ -139,11 +145,11 @@ msgstr ""
139
145
140#: qml/Components/Lockscreen.qml:167
146#: qml/Components/Lockscreen.qml:167
141msgid "Please wait"
147msgid "Please wait"
142−msgstr ""
148+msgstr "Fuirich ort"
143
149
144#: qml/Components/Lockscreen.qml:172
150#: qml/Components/Lockscreen.qml:172
145msgid "Too many incorrect attempts"
151msgid "Too many incorrect attempts"
146−msgstr ""
152+msgstr "Cus oidhirpean leis nach do shoirbhich"
147
153
148#: qml/Components/Lockscreen.qml:206
154#: qml/Components/Lockscreen.qml:206
149msgid "Emergency Call"
155msgid "Emergency Call"
@@ -170,21 +176,22 @@ msgstr "Seall nas lugha"
170msgid "See all"
176msgid "See all"
171msgstr "Seall na h-uile"
177msgstr "Seall na h-uile"
172
178
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
174msgid "Search"
181msgid "Search"
175msgstr "Lorg"
182msgstr "Lorg"
176
183
177#: qml/Dash/PageHeader.qml:270
184#: qml/Dash/PageHeader.qml:270
178msgid "Settings"
185msgid "Settings"
179−msgstr ""
186+msgstr "Roghainnean"
180
187
181#: qml/Dash/PageHeader.qml:279
188#: qml/Dash/PageHeader.qml:279
182msgid "Remove from Favorites"
189msgid "Remove from Favorites"
183−msgstr ""
190+msgstr "Thoir air falbh o na h-annsachdan"
184
191
185#: qml/Dash/PageHeader.qml:279
192#: qml/Dash/PageHeader.qml:279
186msgid "Add to Favorites"
193msgid "Add to Favorites"
187−msgstr ""
194+msgstr "Cuir ris na h-annsachdan"
188
195
189#: qml/Dash/Previews/PreviewActionCombo.qml:34
196#: qml/Dash/Previews/PreviewActionCombo.qml:34
190msgid "More..."
197msgid "More..."
@@ -210,11 +217,11 @@ msgstr "Cuir"
210msgid "Manage Dash"
217msgid "Manage Dash"
211msgstr "Stiùirich an deas-bhòrd"
218msgstr "Stiùirich an deas-bhòrd"
212
219
213−#: qml/Dash/ScopesOverview.qml:408
220+#: qml/Dash/ScopesOverview.qml:417
214msgid "Done"
221msgid "Done"
215msgstr "Deiseil"
222msgstr "Deiseil"
216
223
217−#: qml/Dash/ScopesOverview.qml:434
224+#: qml/Dash/ScopesOverview.qml:443
218msgid "Store"
225msgid "Store"
219msgstr "Am bùth"
226msgstr "Am bùth"
220
227
@@ -230,7 +237,7 @@ msgstr "Na h-uile"
230msgid "Swipe to unlock"
237msgid "Swipe to unlock"
231msgstr "Dèan grad-shlaighdeadh gus a' ghlas a thoirt dheth"
238msgstr "Dèan grad-shlaighdeadh gus a' ghlas a thoirt dheth"
232
239
233−#: qml/Hud/HudParametrizedActionsPage.qml:132
240+#: qml/Hud/HudParametrizedActionsPage.qml:139
234msgid "Confirm"
241msgid "Confirm"
235msgstr "Dearbhaich"
242msgstr "Dearbhaich"
236
243
@@ -256,11 +263,11 @@ msgstr "Seall am facal-faire"
256
263
257#: qml/Notifications/NotificationMenuItemFactory.qml:120
264#: qml/Notifications/NotificationMenuItemFactory.qml:120
258msgid "Enter SIM PIN"
265msgid "Enter SIM PIN"
259−msgstr ""
266+msgstr "Cuir a-steach PIN an t-SIM"
260
267
261−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
268+#: qml/Notifications/NotificationMenuItemFactory.qml:121
262msgid "Sorry, incorrect PIN"
269msgid "Sorry, incorrect PIN"
263−msgstr ""
270+msgstr "Duilich ach tha a' PIN cearr"
264
271
265#: qml/Panel/ActiveCallHint.qml:77
272#: qml/Panel/ActiveCallHint.qml:77
266msgid "Tap to return to call..."
273msgid "Tap to return to call..."
@@ -302,58 +309,58 @@ msgstr "Thoir a' ghlas far an SIM"
302msgid "Roaming"
309msgid "Roaming"
303msgstr "Air fàrsan"
310msgstr "Air fàrsan"
304
311
305−#: qml/Shell.qml:266
312+#: qml/Shell.qml:279
306msgid "Enter your passphrase"
313msgid "Enter your passphrase"
307−msgstr ""
314+msgstr "Cuir an abairt-fhaire agad a-steach"
308
315
309−#: qml/Shell.qml:267
316+#: qml/Shell.qml:280
310msgid "Sorry, incorrect passphrase"
317msgid "Sorry, incorrect passphrase"
311−msgstr ""
318+msgstr "Duilich ach tha an abairt-fhaire cearr"
312
319
313#: qml/Shell.qml:282
320#: qml/Shell.qml:282
314msgid "Enter your passcode"
321msgid "Enter your passcode"
315−msgstr ""
322+msgstr "Cuir an còd-faire agad a-steach"
316
323
317#: qml/Shell.qml:283
324#: qml/Shell.qml:283
318msgid "Sorry, incorrect passcode"
325msgid "Sorry, incorrect passcode"
319−msgstr ""
326+msgstr "Duilich ach tha an còd-faire cearr"
320
327
321−#: qml/Shell.qml:273
328+#: qml/Shell.qml:286
322#, qt-format
329#, qt-format
323msgid "Enter your %1"
330msgid "Enter your %1"
324−msgstr ""
331+msgstr "Cuir a-steach a' %1 agad"
325
332
326−#: qml/Shell.qml:274
333+#: qml/Shell.qml:287
327#, qt-format
334#, qt-format
328msgid "Sorry, incorrect %1"
335msgid "Sorry, incorrect %1"
329−msgstr ""
336+msgstr "Duilich ach tha a' %1 cearr"
330
337
331−#: qml/Shell.qml:310
338+#: qml/Shell.qml:323
332msgid "Sorry, incorrect passphrase."
339msgid "Sorry, incorrect passphrase."
333−msgstr ""
340+msgstr "Duilich ach tha an abairt-fhaire cearr."
334
341
335−#: qml/Shell.qml:311
342+#: qml/Shell.qml:324
336msgid "Sorry, incorrect passcode."
343msgid "Sorry, incorrect passcode."
337−msgstr ""
344+msgstr "Duilich ach tha an còd-faire cearr."
338
345
339−#: qml/Shell.qml:312
346+#: qml/Shell.qml:325
340msgid "This will be your last attempt."
347msgid "This will be your last attempt."
341−msgstr ""
348+msgstr "Seo an oidhirp mu dheireadh agad."
342
349
343−#: qml/Shell.qml:314
350+#: qml/Shell.qml:327
344msgid ""
351msgid ""
345"If passphrase is entered incorrectly, your phone will conduct a factory "
352"If passphrase is entered incorrectly, your phone will conduct a factory "
346"reset and all personal data will be deleted."
353"reset and all personal data will be deleted."
347msgstr ""
354msgstr ""
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."
348
358
349−#: qml/Shell.qml:315
359+#: qml/Shell.qml:328
350msgid ""
360msgid ""
351"If passcode is entered incorrectly, your phone will conduct a factory reset "
361"If passcode is entered incorrectly, your phone will conduct a factory reset "
352"and all personal data will be deleted."
362"and all personal data will be deleted."
353msgstr ""
363msgstr ""
354−
364+"Ma thèid an còd-faire a chur a-steach mar bu chòir, thèid an fhòn agad a ath-"
355−#~ msgid "Are you sure you would like to turn power off?"
365+"shuidheachadh air roghainnean an fhactaraidh agus thèid gach dàta pearsanta "
356−#~ msgstr "A bheil thu cinnteach gu bheil thu airson a chur dheth?"
366+"a sguabadh às."
357−
358−#~ msgid "Restart"
359−#~ msgstr "Ath-thòisich"
po/gl.po+41−45
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11−"PO-Revision-Date: 2014-08-22 15:16+0000\n"
11+"PO-Revision-Date: 2014-09-20 12:08+0000\n"
12"Last-Translator: Marcos Lans <Unknown>\n"
12"Last-Translator: Marcos Lans <Unknown>\n"
13"Language-Team: Galician <gl@li.org>\n"
13"Language-Team: Galician <gl@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-21 06:25+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr "Contrasinal : "
22msgstr "Contrasinal : "
23
23
@@ -32,53 +32,57 @@ msgstr "Eliminar o atallo"
32
32
33#: qml/Components/Dialogs.qml:70
33#: qml/Components/Dialogs.qml:70
34msgid "Log out"
34msgid "Log out"
35−msgstr ""
35+msgstr "Saír da sesión"
36
36
37#: qml/Components/Dialogs.qml:71
37#: qml/Components/Dialogs.qml:71
38msgid "Are you sure you want to log out?"
38msgid "Are you sure you want to log out?"
39−msgstr ""
39+msgstr "Está seguro de querer pechar a sesión?"
40
40
41#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
41#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
42#: qml/Components/Dialogs.qml:122
42#: qml/Components/Dialogs.qml:122
43msgid "No"
43msgid "No"
44−msgstr ""
44+msgstr "Non"
45
45
46#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
46#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
47#: qml/Components/Dialogs.qml:129
47#: qml/Components/Dialogs.qml:129
48msgid "Yes"
48msgid "Yes"
49−msgstr ""
49+msgstr "Si"
50
50
51#: qml/Components/Dialogs.qml:94
51#: qml/Components/Dialogs.qml:94
52msgid "Shut down"
52msgid "Shut down"
53−msgstr ""
53+msgstr "Apagar"
54
54
55#: qml/Components/Dialogs.qml:95
55#: qml/Components/Dialogs.qml:95
56msgid "Are you sure you want to shut down?"
56msgid "Are you sure you want to shut down?"
57−msgstr ""
57+msgstr "Está seguro de querer apagar?"
58
58
59#: qml/Components/Dialogs.qml:119
59#: qml/Components/Dialogs.qml:119
60msgid "Reboot"
60msgid "Reboot"
61−msgstr ""
61+msgstr "Reiniciar"
62
62
63#: qml/Components/Dialogs.qml:120
63#: qml/Components/Dialogs.qml:120
64msgid "Are you sure you want to reboot?"
64msgid "Are you sure you want to reboot?"
65−msgstr ""
65+msgstr "Está seguro de querer reiniciar?"
66
66
67#: qml/Components/Dialogs.qml:144
67#: qml/Components/Dialogs.qml:144
68msgid "Power"
68msgid "Power"
69−msgstr ""
69+msgstr "Enerxía"
70
70
71#: qml/Components/Dialogs.qml:145
71#: qml/Components/Dialogs.qml:145
72msgid ""
72msgid ""
73"Are you sure you would like\n"
73"Are you sure you would like\n"
74"to power off?"
74"to power off?"
75−msgstr ""
75+msgstr "Está seguro de querer apagar?"
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr "Apagar"
79msgstr "Apagar"
80
80
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
82msgid "Cancel"
86msgid "Cancel"
83msgstr "Cancelar"
87msgstr "Cancelar"
84
88
@@ -165,21 +169,22 @@ msgstr "Ver menos"
165msgid "See all"
169msgid "See all"
166msgstr "Ver todo"
170msgstr "Ver todo"
167
171
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
169msgid "Search"
174msgid "Search"
170msgstr "Buscar"
175msgstr "Buscar"
171
176
172#: qml/Dash/PageHeader.qml:270
177#: qml/Dash/PageHeader.qml:270
173msgid "Settings"
178msgid "Settings"
174−msgstr ""
179+msgstr "Axustes"
175
180
176#: qml/Dash/PageHeader.qml:279
181#: qml/Dash/PageHeader.qml:279
177msgid "Remove from Favorites"
182msgid "Remove from Favorites"
178−msgstr ""
183+msgstr "Eliminar dos favoritos"
179
184
180#: qml/Dash/PageHeader.qml:279
185#: qml/Dash/PageHeader.qml:279
181msgid "Add to Favorites"
186msgid "Add to Favorites"
182−msgstr ""
187+msgstr "Engadir aos favoritos"
183
188
184#: qml/Dash/Previews/PreviewActionCombo.qml:34
189#: qml/Dash/Previews/PreviewActionCombo.qml:34
185msgid "More..."
190msgid "More..."
@@ -205,11 +210,11 @@ msgstr "Enviar"
205msgid "Manage Dash"
210msgid "Manage Dash"
206msgstr "Xestión do Panel"
211msgstr "Xestión do Panel"
207
212
208−#: qml/Dash/ScopesOverview.qml:408
213+#: qml/Dash/ScopesOverview.qml:417
209msgid "Done"
214msgid "Done"
210msgstr "Feito"
215msgstr "Feito"
211
216
212−#: qml/Dash/ScopesOverview.qml:434
217+#: qml/Dash/ScopesOverview.qml:443
213msgid "Store"
218msgid "Store"
214msgstr "Tenda"
219msgstr "Tenda"
215
220
@@ -225,7 +230,7 @@ msgstr "Todos"
225msgid "Swipe to unlock"
230msgid "Swipe to unlock"
226msgstr "Esvare o dedo para desbloquear"
231msgstr "Esvare o dedo para desbloquear"
227
232
228−#: qml/Hud/HudParametrizedActionsPage.qml:132
233+#: qml/Hud/HudParametrizedActionsPage.qml:139
229msgid "Confirm"
234msgid "Confirm"
230msgstr "Confirmar"
235msgstr "Confirmar"
231
236
@@ -253,7 +258,7 @@ msgstr "Mostrar contrasinal"
253msgid "Enter SIM PIN"
258msgid "Enter SIM PIN"
254msgstr "Introduza o PIN da SIM"
259msgstr "Introduza o PIN da SIM"
255
260
256−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
261+#: qml/Notifications/NotificationMenuItemFactory.qml:121
257msgid "Sorry, incorrect PIN"
262msgid "Sorry, incorrect PIN"
258msgstr "Sentímolo, o PIN é incorrecto"
263msgstr "Sentímolo, o PIN é incorrecto"
259
264
@@ -297,45 +302,45 @@ msgstr "Desbloquear a SIM"
297msgid "Roaming"
302msgid "Roaming"
298msgstr "Itinerancia"
303msgstr "Itinerancia"
299
304
300−#: qml/Shell.qml:266
305+#: qml/Shell.qml:279
301msgid "Enter your passphrase"
306msgid "Enter your passphrase"
302msgstr "Introduza a frase de paso"
307msgstr "Introduza a frase de paso"
303
308
304−#: qml/Shell.qml:267
309+#: qml/Shell.qml:280
305msgid "Sorry, incorrect passphrase"
310msgid "Sorry, incorrect passphrase"
306msgstr "Sentímolo a frase é incorrecta"
311msgstr "Sentímolo a frase é incorrecta"
307
312
308#: qml/Shell.qml:282
313#: qml/Shell.qml:282
309msgid "Enter your passcode"
314msgid "Enter your passcode"
310−msgstr ""
315+msgstr "Introduza a clave"
311
316
312#: qml/Shell.qml:283
317#: qml/Shell.qml:283
313msgid "Sorry, incorrect passcode"
318msgid "Sorry, incorrect passcode"
314−msgstr ""
319+msgstr "Sentímolo, a clave é incorrecta"
315
320
316−#: qml/Shell.qml:273
321+#: qml/Shell.qml:286
317#, qt-format
322#, qt-format
318msgid "Enter your %1"
323msgid "Enter your %1"
319msgstr "Introducir %1"
324msgstr "Introducir %1"
320
325
321−#: qml/Shell.qml:274
326+#: qml/Shell.qml:287
322#, qt-format
327#, qt-format
323msgid "Sorry, incorrect %1"
328msgid "Sorry, incorrect %1"
324msgstr "Sentímolo, %1 incorrecto"
329msgstr "Sentímolo, %1 incorrecto"
325
330
326−#: qml/Shell.qml:310
331+#: qml/Shell.qml:323
327msgid "Sorry, incorrect passphrase."
332msgid "Sorry, incorrect passphrase."
328msgstr "Sentímolo é incorrecta."
333msgstr "Sentímolo é incorrecta."
329
334
330−#: qml/Shell.qml:311
335+#: qml/Shell.qml:324
331msgid "Sorry, incorrect passcode."
336msgid "Sorry, incorrect passcode."
332msgstr "Sentímolo, a clave é incorrecta."
337msgstr "Sentímolo, a clave é incorrecta."
333
338
334−#: qml/Shell.qml:312
339+#: qml/Shell.qml:325
335msgid "This will be your last attempt."
340msgid "This will be your last attempt."
336msgstr "Este será o seu último intento."
341msgstr "Este será o seu último intento."
337
342
338−#: qml/Shell.qml:314
343+#: qml/Shell.qml:327
339msgid ""
344msgid ""
340"If passphrase is entered incorrectly, your phone will conduct a factory "
345"If passphrase is entered incorrectly, your phone will conduct a factory "
341"reset and all personal data will be deleted."
346"reset and all personal data will be deleted."
@@ -343,19 +348,10 @@ msgstr ""
343"Se a frase de paso introducida é incorrecta, o teléfono restabelecerá os "
348"Se a frase de paso introducida é incorrecta, o teléfono restabelecerá os "
344"valores de fábrica e perderá todos os datos persoais."
349"valores de fábrica e perderá todos os datos persoais."
345
350
346−#: qml/Shell.qml:315
351+#: qml/Shell.qml:328
347msgid ""
352msgid ""
348"If passcode is entered incorrectly, your phone will conduct a factory reset "
353"If passcode is entered incorrectly, your phone will conduct a factory reset "
349"and all personal data will be deleted."
354"and all personal data will be deleted."
350msgstr ""
355msgstr ""
351"Se a clave introducida é incorrecta, o teléfono restabelecerá os valores de "
356"Se a clave introducida é incorrecta, o teléfono restabelecerá os valores de "
352"fábrica e perderá todos os datos persoais."
357"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 ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-08-23 14:19+0000\n"
11"PO-Revision-Date: 2014-08-23 14:19+0000\n"
12"Last-Translator: Yaron <sh.yaron@gmail.com>\n"
12"Last-Translator: Yaron <sh.yaron@gmail.com>\n"
13"Language-Team: Hebrew <he@li.org>\n"
13"Language-Team: Hebrew <he@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr "ססמה: "
22msgstr "ססמה: "
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr "כיבוי"
79msgstr "כיבוי"
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr "ביטול"
87msgstr "ביטול"
84
88
@@ -163,7 +167,8 @@ msgstr "לראות פחות"
163msgid "See all"
167msgid "See all"
164msgstr "להציג הכול"
168msgstr "להציג הכול"
165
169
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
167msgid "Search"
172msgid "Search"
168msgstr "חיפוש"
173msgstr "חיפוש"
169
174
@@ -203,11 +208,11 @@ msgstr "שליחה"
203msgid "Manage Dash"
208msgid "Manage Dash"
204msgstr ""
209msgstr ""
205
210
206−#: qml/Dash/ScopesOverview.qml:408
211+#: qml/Dash/ScopesOverview.qml:417
207msgid "Done"
212msgid "Done"
208msgstr "סיימתי"
213msgstr "סיימתי"
209
214
210−#: qml/Dash/ScopesOverview.qml:434
215+#: qml/Dash/ScopesOverview.qml:443
211msgid "Store"
216msgid "Store"
212msgstr "אחסון"
217msgstr "אחסון"
213
218
@@ -223,7 +228,7 @@ msgstr "הכול"
223msgid "Swipe to unlock"
228msgid "Swipe to unlock"
224msgstr "יש להחליק לפתיחה"
229msgstr "יש להחליק לפתיחה"
225
230
226−#: qml/Hud/HudParametrizedActionsPage.qml:132
231+#: qml/Hud/HudParametrizedActionsPage.qml:139
227msgid "Confirm"
232msgid "Confirm"
228msgstr "אישור"
233msgstr "אישור"
229
234
@@ -251,7 +256,7 @@ msgstr "הצגת הססמה"
251msgid "Enter SIM PIN"
256msgid "Enter SIM PIN"
252msgstr ""
257msgstr ""
253
258
254−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
259+#: qml/Notifications/NotificationMenuItemFactory.qml:121
255msgid "Sorry, incorrect PIN"
260msgid "Sorry, incorrect PIN"
256msgstr ""
261msgstr ""
257
262
@@ -295,11 +300,11 @@ msgstr ""
295msgid "Roaming"
300msgid "Roaming"
296msgstr "נדידה"
301msgstr "נדידה"
297
302
298−#: qml/Shell.qml:266
303+#: qml/Shell.qml:279
299msgid "Enter your passphrase"
304msgid "Enter your passphrase"
300msgstr "נא להזין את מילת הצופן שלך"
305msgstr "נא להזין את מילת הצופן שלך"
301
306
302−#: qml/Shell.qml:267
307+#: qml/Shell.qml:280
303msgid "Sorry, incorrect passphrase"
308msgid "Sorry, incorrect passphrase"
304msgstr "מילת הצופן שגויה, עמך הסליחה."
309msgstr "מילת הצופן שגויה, עמך הסליחה."
305
310
@@ -311,42 +316,36 @@ msgstr ""
311msgid "Sorry, incorrect passcode"
316msgid "Sorry, incorrect passcode"
312msgstr ""
317msgstr ""
313
318
314−#: qml/Shell.qml:273
319+#: qml/Shell.qml:286
315#, qt-format
320#, qt-format
316msgid "Enter your %1"
321msgid "Enter your %1"
317msgstr ""
322msgstr ""
318
323
319−#: qml/Shell.qml:274
324+#: qml/Shell.qml:287
320#, qt-format
325#, qt-format
321msgid "Sorry, incorrect %1"
326msgid "Sorry, incorrect %1"
322msgstr ""
327msgstr ""
323
328
324−#: qml/Shell.qml:310
329+#: qml/Shell.qml:323
325msgid "Sorry, incorrect passphrase."
330msgid "Sorry, incorrect passphrase."
326msgstr "מילת הצופן שגויה, עמך הסליחה."
331msgstr "מילת הצופן שגויה, עמך הסליחה."
327
332
328−#: qml/Shell.qml:311
333+#: qml/Shell.qml:324
329msgid "Sorry, incorrect passcode."
334msgid "Sorry, incorrect passcode."
330msgstr "הצופן שגוי, עם הסליחה."
335msgstr "הצופן שגוי, עם הסליחה."
331
336
332−#: qml/Shell.qml:312
337+#: qml/Shell.qml:325
333msgid "This will be your last attempt."
338msgid "This will be your last attempt."
334msgstr "זה יהיה הניסיון האחרון שלך."
339msgstr "זה יהיה הניסיון האחרון שלך."
335
340
336−#: qml/Shell.qml:314
341+#: qml/Shell.qml:327
337msgid ""
342msgid ""
338"If passphrase is entered incorrectly, your phone will conduct a factory "
343"If passphrase is entered incorrectly, your phone will conduct a factory "
339"reset and all personal data will be deleted."
344"reset and all personal data will be deleted."
340msgstr ""
345msgstr ""
341
346
342−#: qml/Shell.qml:315
347+#: qml/Shell.qml:328
343msgid ""
348msgid ""
344"If passcode is entered incorrectly, your phone will conduct a factory reset "
349"If passcode is entered incorrectly, your phone will conduct a factory reset "
345"and all personal data will be deleted."
350"and all personal data will be deleted."
346msgstr ""
351msgstr ""
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 ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-01-15 01:49+0000\n"
11"PO-Revision-Date: 2014-01-15 01:49+0000\n"
12"Last-Translator: Siddhanathan S. <Unknown>\n"
12"Last-Translator: Siddhanathan S. <Unknown>\n"
13"Language-Team: Hindi <hi@li.org>\n"
13"Language-Team: Hindi <hi@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -161,7 +165,8 @@ msgstr ""
161msgid "See all"
165msgid "See all"
162msgstr ""
166msgstr ""
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr "खोजें"
171msgstr "खोजें"
167
172
@@ -201,11 +206,11 @@ msgstr "भेजें"
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr ""
215msgstr ""
211
216
@@ -221,7 +226,7 @@ msgstr ""
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr ""
227msgstr ""
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr ""
231msgstr ""
227
232
@@ -249,7 +254,7 @@ msgstr ""
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr ""
293msgid "Roaming"
298msgid "Roaming"
294msgstr ""
299msgstr ""
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,35 +314,35 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
po/hr.po+25−20
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2013-06-27 04:14+0000\n"
11"PO-Revision-Date: 2013-06-27 04:14+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Croatian <hr@li.org>\n"
13"Language-Team: Croatian <hr@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -161,7 +165,8 @@ msgstr ""
161msgid "See all"
165msgid "See all"
162msgstr ""
166msgstr ""
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr "Pretraživanje"
171msgstr "Pretraživanje"
167
172
@@ -201,11 +206,11 @@ msgstr ""
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr ""
215msgstr ""
211
216
@@ -221,7 +226,7 @@ msgstr ""
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr ""
227msgstr ""
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr "Potvrdi"
231msgstr "Potvrdi"
227
232
@@ -249,7 +254,7 @@ msgstr ""
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr ""
293msgid "Roaming"
298msgid "Roaming"
294msgstr ""
299msgstr ""
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,35 +314,35 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
po/hu.po+7−3
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-08-30 08:11+0000\n"
11"PO-Revision-Date: 2014-08-30 08:11+0000\n"
12"Last-Translator: Richard Somlói <ricsipontaz@gmail.com>\n"
12"Last-Translator: Richard Somlói <ricsipontaz@gmail.com>\n"
13"Language-Team: Hungarian <hu@li.org>\n"
13"Language-Team: Hungarian <hu@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-31 07:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20#: plugins/LightDM/Greeter.cpp:130
20#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
@@ -80,6 +80,10 @@ msgstr ""
80msgid "Power off"
80msgid "Power off"
81msgstr "Kikapcsolás"
81msgstr "Kikapcsolás"
82
82
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
83#: qml/Components/Dialogs.qml:157
87#: qml/Components/Dialogs.qml:157
84msgid "Cancel"
88msgid "Cancel"
85msgstr "Mégse"
89msgstr "Mégse"
po/hy.po+25−20
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2013-06-27 04:43+0000\n"
11"PO-Revision-Date: 2013-06-27 04:43+0000\n"
12"Last-Translator: iAbaS <sosabazyan@yandex.ru>\n"
12"Last-Translator: iAbaS <sosabazyan@yandex.ru>\n"
13"Language-Team: Armenian <hy@li.org>\n"
13"Language-Team: Armenian <hy@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -161,7 +165,8 @@ msgstr ""
161msgid "See all"
165msgid "See all"
162msgstr ""
166msgstr ""
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr "Որոնում"
171msgstr "Որոնում"
167
172
@@ -201,11 +206,11 @@ msgstr ""
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr ""
215msgstr ""
211
216
@@ -221,7 +226,7 @@ msgstr ""
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr ""
227msgstr ""
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr "Հաստատել"
231msgstr "Հաստատել"
227
232
@@ -249,7 +254,7 @@ msgstr ""
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr ""
293msgid "Roaming"
298msgid "Roaming"
294msgstr ""
299msgstr ""
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,35 +314,35 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
po/id.po+25−20
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2013-06-26 22:35+0000\n"
11"PO-Revision-Date: 2013-06-26 22:35+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Indonesian <id@li.org>\n"
13"Language-Team: Indonesian <id@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -161,7 +165,8 @@ msgstr ""
161msgid "See all"
165msgid "See all"
162msgstr ""
166msgstr ""
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr ""
171msgstr ""
167
172
@@ -201,11 +206,11 @@ msgstr ""
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr ""
215msgstr ""
211
216
@@ -221,7 +226,7 @@ msgstr ""
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr ""
227msgstr ""
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr ""
231msgstr ""
227
232
@@ -249,7 +254,7 @@ msgstr ""
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr ""
293msgid "Roaming"
298msgid "Roaming"
294msgstr ""
299msgstr ""
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,35 +314,35 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
po/is.po+46−41
@@ -9,20 +9,20 @@ msgid ""
9msgstr ""
9msgstr ""
10"Project-Id-Version: po_unity8-is\n"
10"Project-Id-Version: po_unity8-is\n"
11"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
11"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
12−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
12+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
13−"PO-Revision-Date: 2014-07-31 16:10+0000\n"
13+"PO-Revision-Date: 2014-09-21 12:07+0000\n"
14"Last-Translator: Sveinn í Felli <sv1@fellsnet.is>\n"
14"Last-Translator: Sveinn í Felli <sv1@fellsnet.is>\n"
15"Language-Team: Icelandic <translation-team-is@lists.sourceforge.net>\n"
15"Language-Team: Icelandic <translation-team-is@lists.sourceforge.net>\n"
16"MIME-Version: 1.0\n"
16"MIME-Version: 1.0\n"
17"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Type: text/plain; charset=UTF-8\n"
18"Content-Transfer-Encoding: 8bit\n"
18"Content-Transfer-Encoding: 8bit\n"
19−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
19+"X-Launchpad-Export-Date: 2014-09-22 07:04+0000\n"
20−"X-Generator: Launchpad (build 17174)\n"
20+"X-Generator: Launchpad (build 17196)\n"
21"Language: is\n"
21"Language: is\n"
22
22
23−#: plugins/LightDM/Greeter.cpp:129
23+#: plugins/LightDM/Greeter.cpp:130
24msgid "Password: "
24msgid "Password: "
25−msgstr ""
25+msgstr "Lykilorð: "
26
26
27#: plugins/Unity/Launcher/launcheritem.cpp:43
27#: plugins/Unity/Launcher/launcheritem.cpp:43
28#: plugins/Unity/Launcher/launcheritem.cpp:73
28#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -35,7 +35,7 @@ msgstr "Losa flýtilykil"
35
35
36#: qml/Components/Dialogs.qml:70
36#: qml/Components/Dialogs.qml:70
37msgid "Log out"
37msgid "Log out"
38−msgstr ""
38+msgstr "Útskráning"
39
39
40#: qml/Components/Dialogs.qml:71
40#: qml/Components/Dialogs.qml:71
41msgid "Are you sure you want to log out?"
41msgid "Are you sure you want to log out?"
@@ -44,16 +44,16 @@ msgstr ""
44#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
44#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
45#: qml/Components/Dialogs.qml:122
45#: qml/Components/Dialogs.qml:122
46msgid "No"
46msgid "No"
47−msgstr ""
47+msgstr "Nei"
48
48
49#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
49#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
50#: qml/Components/Dialogs.qml:129
50#: qml/Components/Dialogs.qml:129
51msgid "Yes"
51msgid "Yes"
52−msgstr ""
52+msgstr "Já"
53
53
54#: qml/Components/Dialogs.qml:94
54#: qml/Components/Dialogs.qml:94
55msgid "Shut down"
55msgid "Shut down"
56−msgstr ""
56+msgstr "Slökkva á tölvunni"
57
57
58#: qml/Components/Dialogs.qml:95
58#: qml/Components/Dialogs.qml:95
59msgid "Are you sure you want to shut down?"
59msgid "Are you sure you want to shut down?"
@@ -61,7 +61,7 @@ msgstr ""
61
61
62#: qml/Components/Dialogs.qml:119
62#: qml/Components/Dialogs.qml:119
63msgid "Reboot"
63msgid "Reboot"
64−msgstr ""
64+msgstr "Endurræsa"
65
65
66#: qml/Components/Dialogs.qml:120
66#: qml/Components/Dialogs.qml:120
67msgid "Are you sure you want to reboot?"
67msgid "Are you sure you want to reboot?"
@@ -69,7 +69,7 @@ msgstr ""
69
69
70#: qml/Components/Dialogs.qml:144
70#: qml/Components/Dialogs.qml:144
71msgid "Power"
71msgid "Power"
72−msgstr ""
72+msgstr "Aflstjórnun"
73
73
74#: qml/Components/Dialogs.qml:145
74#: qml/Components/Dialogs.qml:145
75msgid ""
75msgid ""
@@ -77,13 +77,17 @@ msgid ""
77"to power off?"
77"to power off?"
78msgstr ""
78msgstr ""
79
79
80−#: qml/Components/Dialogs.qml:144
80+#: qml/Components/Dialogs.qml:147
81msgid "Power off"
81msgid "Power off"
82−msgstr ""
82+msgstr "Slökkva"
83
83
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
85msgid "Cancel"
89msgid "Cancel"
86−msgstr ""
90+msgstr "Hætta við"
87
91
88#: qml/Components/EdgeDemoOverlay.qml:151
92#: qml/Components/EdgeDemoOverlay.qml:151
89msgid "Skip intro"
93msgid "Skip intro"
@@ -136,7 +140,7 @@ msgstr ""
136
140
137#: qml/Components/Lockscreen.qml:167
141#: qml/Components/Lockscreen.qml:167
138msgid "Please wait"
142msgid "Please wait"
139−msgstr ""
143+msgstr "Bíddu aðeins"
140
144
141#: qml/Components/Lockscreen.qml:172
145#: qml/Components/Lockscreen.qml:172
142msgid "Too many incorrect attempts"
146msgid "Too many incorrect attempts"
@@ -167,21 +171,22 @@ msgstr "Sjá minna"
167msgid "See all"
171msgid "See all"
168msgstr "Sjá allt"
172msgstr "Sjá allt"
169
173
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
171msgid "Search"
176msgid "Search"
172msgstr "Leita"
177msgstr "Leita"
173
178
174#: qml/Dash/PageHeader.qml:270
179#: qml/Dash/PageHeader.qml:270
175msgid "Settings"
180msgid "Settings"
176−msgstr ""
181+msgstr "Stillingar"
177
182
178#: qml/Dash/PageHeader.qml:279
183#: qml/Dash/PageHeader.qml:279
179msgid "Remove from Favorites"
184msgid "Remove from Favorites"
180−msgstr ""
185+msgstr "Fjarlægja úr Eftirlæti"
181
186
182#: qml/Dash/PageHeader.qml:279
187#: qml/Dash/PageHeader.qml:279
183msgid "Add to Favorites"
188msgid "Add to Favorites"
184−msgstr ""
189+msgstr "Bæta við Eftirlæti"
185
190
186#: qml/Dash/Previews/PreviewActionCombo.qml:34
191#: qml/Dash/Previews/PreviewActionCombo.qml:34
187msgid "More..."
192msgid "More..."
@@ -207,27 +212,27 @@ msgstr "Senda"
207msgid "Manage Dash"
212msgid "Manage Dash"
208msgstr ""
213msgstr ""
209
214
210−#: qml/Dash/ScopesOverview.qml:408
215+#: qml/Dash/ScopesOverview.qml:417
211msgid "Done"
216msgid "Done"
212−msgstr ""
217+msgstr "Lokið"
213
218
214−#: qml/Dash/ScopesOverview.qml:434
219+#: qml/Dash/ScopesOverview.qml:443
215msgid "Store"
220msgid "Store"
216−msgstr ""
221+msgstr "Geyma"
217
222
218#: qml/Dash/ScopesOverviewTab.qml:36
223#: qml/Dash/ScopesOverviewTab.qml:36
219msgid "Favorites"
224msgid "Favorites"
220−msgstr ""
225+msgstr "Eftirlæti"
221
226
222#: qml/Dash/ScopesOverviewTab.qml:54
227#: qml/Dash/ScopesOverviewTab.qml:54
223msgid "All"
228msgid "All"
224−msgstr ""
229+msgstr "Allt"
225
230
226#: qml/Greeter/Greeter.qml:157
231#: qml/Greeter/Greeter.qml:157
227msgid "Swipe to unlock"
232msgid "Swipe to unlock"
228msgstr "Strjúka til að aflæsa"
233msgstr "Strjúka til að aflæsa"
229
234
230−#: qml/Hud/HudParametrizedActionsPage.qml:132
235+#: qml/Hud/HudParametrizedActionsPage.qml:139
231msgid "Confirm"
236msgid "Confirm"
232msgstr "Staðfesta"
237msgstr "Staðfesta"
233
238
@@ -253,11 +258,11 @@ msgstr "Birta lykilorð"
253
258
254#: qml/Notifications/NotificationMenuItemFactory.qml:120
259#: qml/Notifications/NotificationMenuItemFactory.qml:120
255msgid "Enter SIM PIN"
260msgid "Enter SIM PIN"
256−msgstr ""
261+msgstr "Settu inn PIN-númer SIM-kortsins"
257
262
258−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
263+#: qml/Notifications/NotificationMenuItemFactory.qml:121
259msgid "Sorry, incorrect PIN"
264msgid "Sorry, incorrect PIN"
260−msgstr ""
265+msgstr "Því miður, rangt PIN-númer"
261
266
262#: qml/Panel/ActiveCallHint.qml:77
267#: qml/Panel/ActiveCallHint.qml:77
263msgid "Tap to return to call..."
268msgid "Tap to return to call..."
@@ -293,17 +298,17 @@ msgstr "Mistókst, sláðu létt til að reyna aftur"
293
298
294#: qml/Panel/Indicators/ModemInfoItem.qml:105
299#: qml/Panel/Indicators/ModemInfoItem.qml:105
295msgid "Unlock SIM"
300msgid "Unlock SIM"
296−msgstr ""
301+msgstr "Aflæsa SIM-korti"
297
302
298#: qml/Panel/Indicators/RoamingIndication.qml:27
303#: qml/Panel/Indicators/RoamingIndication.qml:27
299msgid "Roaming"
304msgid "Roaming"
300msgstr ""
305msgstr ""
301
306
302−#: qml/Shell.qml:266
307+#: qml/Shell.qml:279
303msgid "Enter your passphrase"
308msgid "Enter your passphrase"
304msgstr ""
309msgstr ""
305
310
306−#: qml/Shell.qml:267
311+#: qml/Shell.qml:280
307msgid "Sorry, incorrect passphrase"
312msgid "Sorry, incorrect passphrase"
308msgstr ""
313msgstr ""
309
314
@@ -315,35 +320,35 @@ msgstr ""
315msgid "Sorry, incorrect passcode"
320msgid "Sorry, incorrect passcode"
316msgstr ""
321msgstr ""
317
322
318−#: qml/Shell.qml:273
323+#: qml/Shell.qml:286
319#, qt-format
324#, qt-format
320msgid "Enter your %1"
325msgid "Enter your %1"
321msgstr ""
326msgstr ""
322
327
323−#: qml/Shell.qml:274
328+#: qml/Shell.qml:287
324#, qt-format
329#, qt-format
325msgid "Sorry, incorrect %1"
330msgid "Sorry, incorrect %1"
326msgstr ""
331msgstr ""
327
332
328−#: qml/Shell.qml:310
333+#: qml/Shell.qml:323
329msgid "Sorry, incorrect passphrase."
334msgid "Sorry, incorrect passphrase."
330msgstr ""
335msgstr ""
331
336
332−#: qml/Shell.qml:311
337+#: qml/Shell.qml:324
333msgid "Sorry, incorrect passcode."
338msgid "Sorry, incorrect passcode."
334msgstr ""
339msgstr ""
335
340
336−#: qml/Shell.qml:312
341+#: qml/Shell.qml:325
337msgid "This will be your last attempt."
342msgid "This will be your last attempt."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:314
345+#: qml/Shell.qml:327
341msgid ""
346msgid ""
342"If passphrase is entered incorrectly, your phone will conduct a factory "
347"If passphrase is entered incorrectly, your phone will conduct a factory "
343"reset and all personal data will be deleted."
348"reset and all personal data will be deleted."
344msgstr ""
349msgstr ""
345
350
346−#: qml/Shell.qml:315
351+#: qml/Shell.qml:328
347msgid ""
352msgid ""
348"If passcode is entered incorrectly, your phone will conduct a factory reset "
353"If passcode is entered incorrectly, your phone will conduct a factory reset "
349"and all personal data will be deleted."
354"and all personal data will be deleted."
po/it.po+7−3
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-08-28 15:31+0000\n"
11"PO-Revision-Date: 2014-08-28 15:31+0000\n"
12"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>\n"
12"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>\n"
13"Language-Team: Italian <it@li.org>\n"
13"Language-Team: Italian <it@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-30 07:46+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20#: plugins/LightDM/Greeter.cpp:130
20#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
@@ -80,6 +80,10 @@ msgstr ""
80msgid "Power off"
80msgid "Power off"
81msgstr "Spegni"
81msgstr "Spegni"
82
82
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
83#: qml/Components/Dialogs.qml:157
87#: qml/Components/Dialogs.qml:157
84msgid "Cancel"
88msgid "Cancel"
85msgstr "Annulla"
89msgstr "Annulla"
po/ja.po+20−16
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11−"PO-Revision-Date: 2014-09-01 06:20+0000\n"
11+"PO-Revision-Date: 2014-09-18 09:47+0000\n"
12"Last-Translator: Mitsuya Shibata <mty.shibata@gmail.com>\n"
12"Last-Translator: Mitsuya Shibata <mty.shibata@gmail.com>\n"
13"Language-Team: Japanese <ja@li.org>\n"
13"Language-Team: Japanese <ja@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-09-02 07:20+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17192)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20#: plugins/LightDM/Greeter.cpp:130
20#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
@@ -36,7 +36,7 @@ msgstr "ログアウト"
36
36
37#: qml/Components/Dialogs.qml:71
37#: qml/Components/Dialogs.qml:71
38msgid "Are you sure you want to log out?"
38msgid "Are you sure you want to log out?"
39−msgstr ""
39+msgstr "本当にログアウトしますか?"
40
40
41#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
41#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
42#: qml/Components/Dialogs.qml:122
42#: qml/Components/Dialogs.qml:122
@@ -54,7 +54,7 @@ msgstr "シャットダウン"
54
54
55#: qml/Components/Dialogs.qml:95
55#: qml/Components/Dialogs.qml:95
56msgid "Are you sure you want to shut down?"
56msgid "Are you sure you want to shut down?"
57−msgstr ""
57+msgstr "本当にシャットダウンしますか?"
58
58
59#: qml/Components/Dialogs.qml:119
59#: qml/Components/Dialogs.qml:119
60msgid "Reboot"
60msgid "Reboot"
@@ -62,22 +62,26 @@ msgstr "再起動"
62
62
63#: qml/Components/Dialogs.qml:120
63#: qml/Components/Dialogs.qml:120
64msgid "Are you sure you want to reboot?"
64msgid "Are you sure you want to reboot?"
65−msgstr ""
65+msgstr "本当に再起動しますか?"
66
66
67#: qml/Components/Dialogs.qml:144
67#: qml/Components/Dialogs.qml:144
68msgid "Power"
68msgid "Power"
69−msgstr ""
69+msgstr "電源"
70
70
71#: qml/Components/Dialogs.qml:145
71#: qml/Components/Dialogs.qml:145
72msgid ""
72msgid ""
73"Are you sure you would like\n"
73"Are you sure you would like\n"
74"to power off?"
74"to power off?"
75−msgstr ""
75+msgstr "本当に電源を切りますか?"
76
76
77#: qml/Components/Dialogs.qml:147
77#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr "電源を切る"
79msgstr "電源を切る"
80
80
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
81#: qml/Components/Dialogs.qml:157
85#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr "キャンセル"
87msgstr "キャンセル"
@@ -249,11 +253,11 @@ msgstr "パスワードを表示"
249
253
250#: qml/Notifications/NotificationMenuItemFactory.qml:120
254#: qml/Notifications/NotificationMenuItemFactory.qml:120
251msgid "Enter SIM PIN"
255msgid "Enter SIM PIN"
252−msgstr ""
256+msgstr "SIM PINの入力"
253
257
254#: qml/Notifications/NotificationMenuItemFactory.qml:121
258#: qml/Notifications/NotificationMenuItemFactory.qml:121
255msgid "Sorry, incorrect PIN"
259msgid "Sorry, incorrect PIN"
256−msgstr ""
260+msgstr "PINが違います"
257
261
258#: qml/Panel/ActiveCallHint.qml:77
262#: qml/Panel/ActiveCallHint.qml:77
259msgid "Tap to return to call..."
263msgid "Tap to return to call..."
@@ -297,19 +301,19 @@ msgstr "ローミング"
297
301
298#: qml/Shell.qml:279
302#: qml/Shell.qml:279
299msgid "Enter your passphrase"
303msgid "Enter your passphrase"
300−msgstr ""
304+msgstr "パスフレーズの入力"
301
305
302#: qml/Shell.qml:280
306#: qml/Shell.qml:280
303msgid "Sorry, incorrect passphrase"
307msgid "Sorry, incorrect passphrase"
304−msgstr ""
308+msgstr "パスフレーズが違います"
305
309
306#: qml/Shell.qml:282
310#: qml/Shell.qml:282
307msgid "Enter your passcode"
311msgid "Enter your passcode"
308−msgstr ""
312+msgstr "パスコードの入力"
309
313
310#: qml/Shell.qml:283
314#: qml/Shell.qml:283
311msgid "Sorry, incorrect passcode"
315msgid "Sorry, incorrect passcode"
312−msgstr "ごめんなさい、誤ったパスコードです"
316+msgstr "パスコードが違います"
313
317
314#: qml/Shell.qml:286
318#: qml/Shell.qml:286
315#, qt-format
319#, qt-format
@@ -319,7 +323,7 @@ msgstr "%1を入力してください"
319#: qml/Shell.qml:287
323#: qml/Shell.qml:287
320#, qt-format
324#, qt-format
321msgid "Sorry, incorrect %1"
325msgid "Sorry, incorrect %1"
322−msgstr ""
326+msgstr "%1が違います"
323
327
324#: qml/Shell.qml:323
328#: qml/Shell.qml:323
325msgid "Sorry, incorrect passphrase."
329msgid "Sorry, incorrect passphrase."
po/km.po+46−45
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-08-20 02:48+0000\n"
11"PO-Revision-Date: 2014-08-20 02:48+0000\n"
12"Last-Translator: Sok Sophea <sksophea@gmail.com>\n"
12"Last-Translator: Sok Sophea <sksophea@gmail.com>\n"
13"Language-Team: Khmer <km@li.org>\n"
13"Language-Team: Khmer <km@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr "ពាក្យសម្ងាត់៖ "
22msgstr "ពាក្យសម្ងាត់៖ "
23
23
@@ -32,53 +32,59 @@ msgstr "មិន​ភ្ជាប់ផ្លូវកាត់"
32
32
33#: qml/Components/Dialogs.qml:70
33#: qml/Components/Dialogs.qml:70
34msgid "Log out"
34msgid "Log out"
35−msgstr ""
35+msgstr "ចេញ"
36
36
37#: qml/Components/Dialogs.qml:71
37#: qml/Components/Dialogs.qml:71
38msgid "Are you sure you want to log out?"
38msgid "Are you sure you want to log out?"
39−msgstr ""
39+msgstr "តើ​អ្នក​ពិតជា​ចង់​ចេញ​មែន​ឬ?"
40
40
41#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
41#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
42#: qml/Components/Dialogs.qml:122
42#: qml/Components/Dialogs.qml:122
43msgid "No"
43msgid "No"
44−msgstr ""
44+msgstr "ទេ"
45
45
46#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
46#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
47#: qml/Components/Dialogs.qml:129
47#: qml/Components/Dialogs.qml:129
48msgid "Yes"
48msgid "Yes"
49−msgstr ""
49+msgstr "បាទ/ចាស"
50
50
51#: qml/Components/Dialogs.qml:94
51#: qml/Components/Dialogs.qml:94
52msgid "Shut down"
52msgid "Shut down"
53−msgstr ""
53+msgstr "បិទ"
54
54
55#: qml/Components/Dialogs.qml:95
55#: qml/Components/Dialogs.qml:95
56msgid "Are you sure you want to shut down?"
56msgid "Are you sure you want to shut down?"
57−msgstr ""
57+msgstr "តើ​អ្នក​ពិតជា​ចង់​បិទ​មែន​ឬ?"
58
58
59#: qml/Components/Dialogs.qml:119
59#: qml/Components/Dialogs.qml:119
60msgid "Reboot"
60msgid "Reboot"
61−msgstr ""
61+msgstr "ចាប់ផ្ដើម​ឡើងវិញ"
62
62
63#: qml/Components/Dialogs.qml:120
63#: qml/Components/Dialogs.qml:120
64msgid "Are you sure you want to reboot?"
64msgid "Are you sure you want to reboot?"
65−msgstr ""
65+msgstr "តើ​អ្នក​ពិតជា​ចង់​ចាប់ផ្ដើម​ឡើងវិញ​មែន​ឬ?"
66
66
67#: qml/Components/Dialogs.qml:144
67#: qml/Components/Dialogs.qml:144
68msgid "Power"
68msgid "Power"
69−msgstr ""
69+msgstr "បីទ/បើក"
70
70
71#: qml/Components/Dialogs.qml:145
71#: qml/Components/Dialogs.qml:145
72msgid ""
72msgid ""
73"Are you sure you would like\n"
73"Are you sure you would like\n"
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76+"តើ​អ្នក​ពិតជា​ចង់\n"
77+"បិទ​មែន​ឬ?"
76
78
77−#: qml/Components/Dialogs.qml:144
79+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
80msgid "Power off"
79msgstr "បិទ"
81msgstr "បិទ"
80
82
81−#: qml/Components/Dialogs.qml:162
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
87+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
88msgid "Cancel"
83msgstr "បោះបង់"
89msgstr "បោះបង់"
84
90
@@ -165,21 +171,22 @@ msgstr "មើល​តិច​ជាង"
165msgid "See all"
171msgid "See all"
166msgstr "មើល​ទាំងអស់"
172msgstr "មើល​ទាំងអស់"
167
173
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
169msgid "Search"
176msgid "Search"
170msgstr "ស្វែង​រក"
177msgstr "ស្វែង​រក"
171
178
172#: qml/Dash/PageHeader.qml:270
179#: qml/Dash/PageHeader.qml:270
173msgid "Settings"
180msgid "Settings"
174−msgstr ""
181+msgstr "ការកំណត់"
175
182
176#: qml/Dash/PageHeader.qml:279
183#: qml/Dash/PageHeader.qml:279
177msgid "Remove from Favorites"
184msgid "Remove from Favorites"
178−msgstr ""
185+msgstr "យក​ចេញពី​សំណព្វ"
179
186
180#: qml/Dash/PageHeader.qml:279
187#: qml/Dash/PageHeader.qml:279
181msgid "Add to Favorites"
188msgid "Add to Favorites"
182−msgstr ""
189+msgstr "បន្ថែម​ទៅ​សណព្វ"
183
190
184#: qml/Dash/Previews/PreviewActionCombo.qml:34
191#: qml/Dash/Previews/PreviewActionCombo.qml:34
185msgid "More..."
192msgid "More..."
@@ -205,11 +212,11 @@ msgstr "ផ្ញើ"
205msgid "Manage Dash"
212msgid "Manage Dash"
206msgstr "គ្រប់គ្រង​ផ្ទាំង"
213msgstr "គ្រប់គ្រង​ផ្ទាំង"
207
214
208−#: qml/Dash/ScopesOverview.qml:408
215+#: qml/Dash/ScopesOverview.qml:417
209msgid "Done"
216msgid "Done"
210msgstr "ធ្វើរួច"
217msgstr "ធ្វើរួច"
211
218
212−#: qml/Dash/ScopesOverview.qml:434
219+#: qml/Dash/ScopesOverview.qml:443
213msgid "Store"
220msgid "Store"
214msgstr "រក្សាទុក"
221msgstr "រក្សាទុក"
215
222
@@ -225,7 +232,7 @@ msgstr "ទាំងអស់"
225msgid "Swipe to unlock"
232msgid "Swipe to unlock"
226msgstr "អូស​ដើម្បី​ដោះសោ"
233msgstr "អូស​ដើម្បី​ដោះសោ"
227
234
228−#: qml/Hud/HudParametrizedActionsPage.qml:132
235+#: qml/Hud/HudParametrizedActionsPage.qml:139
229msgid "Confirm"
236msgid "Confirm"
230msgstr "បញ្ជាក់"
237msgstr "បញ្ជាក់"
231
238
@@ -251,11 +258,11 @@ msgstr "បង្ហាញ​ពាក្យ​សម្ងាត់"
251
258
252#: qml/Notifications/NotificationMenuItemFactory.qml:120
259#: qml/Notifications/NotificationMenuItemFactory.qml:120
253msgid "Enter SIM PIN"
260msgid "Enter SIM PIN"
254−msgstr ""
261+msgstr "បញ្ចូល​លេខ​កូដ PIN ស៊ីម"
255
262
256−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
263+#: qml/Notifications/NotificationMenuItemFactory.qml:121
257msgid "Sorry, incorrect PIN"
264msgid "Sorry, incorrect PIN"
258−msgstr ""
265+msgstr "សូមទោស! លេខ​កូដ PIN មិន​ត្រឹមត្រូវ"
259
266
260#: qml/Panel/ActiveCallHint.qml:77
267#: qml/Panel/ActiveCallHint.qml:77
261msgid "Tap to return to call..."
268msgid "Tap to return to call..."
@@ -297,45 +304,45 @@ msgstr "ដោះ​សោ​ស៊ីម"
297msgid "Roaming"
304msgid "Roaming"
298msgstr "រ៉ូមីង"
305msgstr "រ៉ូមីង"
299
306
300−#: qml/Shell.qml:266
307+#: qml/Shell.qml:279
301msgid "Enter your passphrase"
308msgid "Enter your passphrase"
302−msgstr ""
309+msgstr "បញ្ចូល​ឃ្លា​សម្ងាត់​របស់​អ្នក"
303
310
304−#: qml/Shell.qml:267
311+#: qml/Shell.qml:280
305msgid "Sorry, incorrect passphrase"
312msgid "Sorry, incorrect passphrase"
306−msgstr ""
313+msgstr "សូមទោស! ឃ្លា​សម្ងាត់​មិន​ត្រឹមត្រូវ"
307
314
308#: qml/Shell.qml:282
315#: qml/Shell.qml:282
309msgid "Enter your passcode"
316msgid "Enter your passcode"
310−msgstr ""
317+msgstr "បញ្ចូល​កូដ​សម្ងាត់​របស់​អ្នក"
311
318
312#: qml/Shell.qml:283
319#: qml/Shell.qml:283
313msgid "Sorry, incorrect passcode"
320msgid "Sorry, incorrect passcode"
314−msgstr ""
321+msgstr "សូមទោស! កូដ​សម្ងាត់​មិន​ត្រឹមត្រូវ"
315
322
316−#: qml/Shell.qml:273
323+#: qml/Shell.qml:286
317#, qt-format
324#, qt-format
318msgid "Enter your %1"
325msgid "Enter your %1"
319msgstr "បញ្ចូល %1 របស់​អ្នក"
326msgstr "បញ្ចូល %1 របស់​អ្នក"
320
327
321−#: qml/Shell.qml:274
328+#: qml/Shell.qml:287
322#, qt-format
329#, qt-format
323msgid "Sorry, incorrect %1"
330msgid "Sorry, incorrect %1"
324−msgstr ""
331+msgstr "សូមទោស! %1 មិន​ត្រឹមត្រូវ"
325
332
326−#: qml/Shell.qml:310
333+#: qml/Shell.qml:323
327msgid "Sorry, incorrect passphrase."
334msgid "Sorry, incorrect passphrase."
328msgstr "សូមទោស! ឃ្លា​សម្ងាត់​មិន​ត្រឹមត្រូវ។"
335msgstr "សូមទោស! ឃ្លា​សម្ងាត់​មិន​ត្រឹមត្រូវ។"
329
336
330−#: qml/Shell.qml:311
337+#: qml/Shell.qml:324
331msgid "Sorry, incorrect passcode."
338msgid "Sorry, incorrect passcode."
332msgstr "សូមទោស! កូដ​សម្ងាត់​មិន​ត្រឹមត្រូវ។"
339msgstr "សូមទោស! កូដ​សម្ងាត់​មិន​ត្រឹមត្រូវ។"
333
340
334−#: qml/Shell.qml:312
341+#: qml/Shell.qml:325
335msgid "This will be your last attempt."
342msgid "This will be your last attempt."
336msgstr "នេះ​គឺ​ការ​ព្យាយាម​លើក​ចុងក្រោយ។"
343msgstr "នេះ​គឺ​ការ​ព្យាយាម​លើក​ចុងក្រោយ។"
337
344
338−#: qml/Shell.qml:314
345+#: qml/Shell.qml:327
339msgid ""
346msgid ""
340"If passphrase is entered incorrectly, your phone will conduct a factory "
347"If passphrase is entered incorrectly, your phone will conduct a factory "
341"reset and all personal data will be deleted."
348"reset and all personal data will be deleted."
@@ -344,7 +351,7 @@ msgstr ""
344"ទូរស័ព្ទ​របស់​អ្នក​នឹង​កំណត់​ទៅ​ទិន្នន័យ​ពី​រោងចក្រ​វិញ "
351"ទូរស័ព្ទ​របស់​អ្នក​នឹង​កំណត់​ទៅ​ទិន្នន័យ​ពី​រោងចក្រ​វិញ "
345"ហើយ​ទិន្នន័យ​ផ្ទាល់ខ្លួន​ទាំងអស់​របស់​អ្នក​នឹង​ត្រូវ​បាន​លុប។"
352"ហើយ​ទិន្នន័យ​ផ្ទាល់ខ្លួន​ទាំងអស់​របស់​អ្នក​នឹង​ត្រូវ​បាន​លុប។"
346
353
347−#: qml/Shell.qml:315
354+#: qml/Shell.qml:328
348msgid ""
355msgid ""
349"If passcode is entered incorrectly, your phone will conduct a factory reset "
356"If passcode is entered incorrectly, your phone will conduct a factory reset "
350"and all personal data will be deleted."
357"and all personal data will be deleted."
@@ -352,9 +359,3 @@ msgstr ""
352"បើ​បញ្ចូល​កូដ​សម្ងាត់​មិន​ត្រឹមត្រូវ "
359"បើ​បញ្ចូល​កូដ​សម្ងាត់​មិន​ត្រឹមត្រូវ "
353"ទូរស័ព្ទ​របស់​អ្នក​នឹង​កំណត់​ទៅ​ទិន្នន័យ​ពី​រោងចក្រ​វិញ "
360"ទូរស័ព្ទ​របស់​អ្នក​នឹង​កំណត់​ទៅ​ទិន្នន័យ​ពី​រោងចក្រ​វិញ "
354"ហើយ​ទិន្នន័យ​ផ្ទាល់ខ្លួន​ទាំងអស់​របស់​អ្នក​នឹង​ត្រូវ​បាន​លុប។"
361"ហើយ​ទិន្នន័យ​ផ្ទាល់ខ្លួន​ទាំងអស់​របស់​អ្នក​នឹង​ត្រូវ​បាន​លុប។"
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 ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2013-06-27 05:43+0000\n"
11"PO-Revision-Date: 2013-06-27 05:43+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Kannada <kn@li.org>\n"
13"Language-Team: Kannada <kn@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -161,7 +165,8 @@ msgstr ""
161msgid "See all"
165msgid "See all"
162msgstr ""
166msgstr ""
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr "ಹುಡುಕು"
171msgstr "ಹುಡುಕು"
167
172
@@ -201,11 +206,11 @@ msgstr ""
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr ""
215msgstr ""
211
216
@@ -221,7 +226,7 @@ msgstr ""
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr ""
227msgstr ""
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr "ಖಚಿತಪಡಿಸು"
231msgstr "ಖಚಿತಪಡಿಸು"
227
232
@@ -249,7 +254,7 @@ msgstr ""
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr ""
293msgid "Roaming"
298msgid "Roaming"
294msgstr ""
299msgstr ""
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,35 +314,35 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
po/ko.po+72−76
@@ -7,78 +7,82 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-08-19 13:02+0000\n"
11"PO-Revision-Date: 2014-08-19 13:02+0000\n"
12"Last-Translator: MinSik CHO <Unknown>\n"
12"Last-Translator: MinSik CHO <Unknown>\n"
13"Language-Team: Korean <ko@li.org>\n"
13"Language-Team: Korean <ko@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22−msgstr "열쇠글: "
22+msgstr "암호: "
23
23
24#: plugins/Unity/Launcher/launcheritem.cpp:43
24#: plugins/Unity/Launcher/launcheritem.cpp:43
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26msgid "Pin shortcut"
26msgid "Pin shortcut"
27−msgstr "바로가기를 고정하기"
27+msgstr "바로 가기를 고정"
28
28
29#: plugins/Unity/Launcher/launcheritem.cpp:73
29#: plugins/Unity/Launcher/launcheritem.cpp:73
30msgid "Unpin shortcut"
30msgid "Unpin shortcut"
31−msgstr "바로가기를 고정 해제하기"
31+msgstr "바로 가기를 고정 해제"
32
32
33#: qml/Components/Dialogs.qml:70
33#: qml/Components/Dialogs.qml:70
34msgid "Log out"
34msgid "Log out"
35−msgstr ""
35+msgstr "로그아웃"
36
36
37#: qml/Components/Dialogs.qml:71
37#: qml/Components/Dialogs.qml:71
38msgid "Are you sure you want to log out?"
38msgid "Are you sure you want to log out?"
39−msgstr ""
39+msgstr "정말 로그아웃하시겠습니까?"
40
40
41#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
41#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
42#: qml/Components/Dialogs.qml:122
42#: qml/Components/Dialogs.qml:122
43msgid "No"
43msgid "No"
44−msgstr ""
44+msgstr "아니요"
45
45
46#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
46#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
47#: qml/Components/Dialogs.qml:129
47#: qml/Components/Dialogs.qml:129
48msgid "Yes"
48msgid "Yes"
49−msgstr ""
49+msgstr "예"
50
50
51#: qml/Components/Dialogs.qml:94
51#: qml/Components/Dialogs.qml:94
52msgid "Shut down"
52msgid "Shut down"
53−msgstr ""
53+msgstr "컴퓨터 끄기"
54
54
55#: qml/Components/Dialogs.qml:95
55#: qml/Components/Dialogs.qml:95
56msgid "Are you sure you want to shut down?"
56msgid "Are you sure you want to shut down?"
57−msgstr ""
57+msgstr "정말 컴퓨터를 끄시겠습니까?"
58
58
59#: qml/Components/Dialogs.qml:119
59#: qml/Components/Dialogs.qml:119
60msgid "Reboot"
60msgid "Reboot"
61−msgstr ""
61+msgstr "다시 시작"
62
62
63#: qml/Components/Dialogs.qml:120
63#: qml/Components/Dialogs.qml:120
64msgid "Are you sure you want to reboot?"
64msgid "Are you sure you want to reboot?"
65−msgstr ""
65+msgstr "정말 컴퓨터를 다시 시작하시겠습니까?"
66
66
67#: qml/Components/Dialogs.qml:144
67#: qml/Components/Dialogs.qml:144
68msgid "Power"
68msgid "Power"
69−msgstr ""
69+msgstr "전원"
70
70
71#: qml/Components/Dialogs.qml:145
71#: qml/Components/Dialogs.qml:145
72msgid ""
72msgid ""
73"Are you sure you would like\n"
73"Are you sure you would like\n"
74"to power off?"
74"to power off?"
75−msgstr ""
75+msgstr "정말 컴퓨터를 끄시겠습니까?"
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr "전원 끄기"
79msgstr "전원 끄기"
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr "취소"
87msgstr "취소"
84
88
@@ -92,15 +96,15 @@ msgstr "오른쪽 끝"
92
96
93#: qml/Components/EdgeDemo.qml:113
97#: qml/Components/EdgeDemo.qml:113
94msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
95−msgstr "휴대 전화를 잠금 해제하려면 오른쪽에서부터 끌어보세요."
99+msgstr "오른쪽 가장자리에서 쓸면 휴대 전화의 잠금을 해제합니다."
96
100
97#: qml/Components/EdgeDemo.qml:144
101#: qml/Components/EdgeDemo.qml:144
98msgid "Top edge"
102msgid "Top edge"
99−msgstr "윗쪽 끝"
103+msgstr "윗쪽 가장자리"
100
104
101#: qml/Components/EdgeDemo.qml:145
105#: qml/Components/EdgeDemo.qml:145
102msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
103−msgstr "알림을 보려면 위쪽에서 끌어보세요."
107+msgstr "위쪽 가장자리에서 쓸면 알림에 접근할 수 있습니다."
104
108
105#: qml/Components/EdgeDemo.qml:170
109#: qml/Components/EdgeDemo.qml:170
106msgid "Close"
110msgid "Close"
@@ -108,15 +112,15 @@ msgstr "닫기"
108
112
109#: qml/Components/EdgeDemo.qml:171
113#: qml/Components/EdgeDemo.qml:171
110msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
111−msgstr "환경설정 창을 닫으려면 위로 다시 끌어보세요."
115+msgstr "위쪽으로 쓸면 설정 화면을 닫습니다."
112
116
113#: qml/Components/EdgeDemo.qml:198
117#: qml/Components/EdgeDemo.qml:198
114msgid "Left edge"
118msgid "Left edge"
115−msgstr "왼쪽 끝"
119+msgstr "왼쪽 가장자리"
116
120
117#: qml/Components/EdgeDemo.qml:199
121#: qml/Components/EdgeDemo.qml:199
118msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
119−msgstr "애플리케이션을 빠르게 열기 위해 런처를 보려면 왼쪽에서 끌어보세요."
123+msgstr "왼쪽에서 쓸면 런처를 표시해 프로그램에 빠르게 접근할 수 있습니다."
120
124
121#: qml/Components/EdgeDemo.qml:226
125#: qml/Components/EdgeDemo.qml:226
122msgid "Well done"
126msgid "Well done"
@@ -127,8 +131,7 @@ msgid ""
127"You have now mastered the edge gestures and can start using the "
131"You have now mastered the edge gestures and can start using the "
128"phone<br><br>Tap on the screen to start"
132"phone<br><br>Tap on the screen to start"
129msgstr ""
133msgstr ""
130−"여러분은 끝에서 끌어오기 제스쳐를 완벽히 익히셨기 때문에 휴대 전화를 사용하기 시작할 수 있습니다. <br><br> 스크린을 터치해서 "
134+"여러분은 가장자리에서 끌어오기 제스쳐를 완벽히 익히셨고 휴대 전화를 사용할 수 있습니다. <br><br> 스크린을 터치해서 시작하세요."
131−"시작하세요."
132
135
133#: qml/Components/Lockscreen.qml:167
136#: qml/Components/Lockscreen.qml:167
134msgid "Please wait"
137msgid "Please wait"
@@ -157,27 +160,28 @@ msgstr "안녕하세요"
157
160
158#: qml/Dash/GenericScopeView.qml:361
161#: qml/Dash/GenericScopeView.qml:361
159msgid "See less"
162msgid "See less"
160−msgstr "간단히 표시하기"
163+msgstr "간단히 표시"
161
164
162#: qml/Dash/GenericScopeView.qml:361
165#: qml/Dash/GenericScopeView.qml:361
163msgid "See all"
166msgid "See all"
164msgstr "모두 보기"
167msgstr "모두 보기"
165
168
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
167msgid "Search"
171msgid "Search"
168msgstr "검색"
172msgstr "검색"
169
173
170#: qml/Dash/PageHeader.qml:270
174#: qml/Dash/PageHeader.qml:270
171msgid "Settings"
175msgid "Settings"
172−msgstr ""
176+msgstr "설정"
173
177
174#: qml/Dash/PageHeader.qml:279
178#: qml/Dash/PageHeader.qml:279
175msgid "Remove from Favorites"
179msgid "Remove from Favorites"
176−msgstr ""
180+msgstr "즐겨찾기에서 제거"
177
181
178#: qml/Dash/PageHeader.qml:279
182#: qml/Dash/PageHeader.qml:279
179msgid "Add to Favorites"
183msgid "Add to Favorites"
180−msgstr ""
184+msgstr "즐겨찾기에 추가"
181
185
182#: qml/Dash/Previews/PreviewActionCombo.qml:34
186#: qml/Dash/Previews/PreviewActionCombo.qml:34
183msgid "More..."
187msgid "More..."
@@ -189,11 +193,11 @@ msgstr "간단하게..."
189
193
190#: qml/Dash/Previews/PreviewRatingInput.qml:81
194#: qml/Dash/Previews/PreviewRatingInput.qml:81
191msgid "Rate this"
195msgid "Rate this"
192−msgstr "이 애플리케이션 평가하기"
196+msgstr "이 프로그램 평가"
193
197
194#: qml/Dash/Previews/PreviewRatingInput.qml:126
198#: qml/Dash/Previews/PreviewRatingInput.qml:126
195msgid "Add a review"
199msgid "Add a review"
196−msgstr "평가 제출하기"
200+msgstr "평가 추가"
197
201
198#: qml/Dash/Previews/PreviewRatingInput.qml:166
202#: qml/Dash/Previews/PreviewRatingInput.qml:166
199msgid "Send"
203msgid "Send"
@@ -203,11 +207,11 @@ msgstr "보내기"
203msgid "Manage Dash"
207msgid "Manage Dash"
204msgstr "대시 관리"
208msgstr "대시 관리"
205
209
206−#: qml/Dash/ScopesOverview.qml:408
210+#: qml/Dash/ScopesOverview.qml:417
207msgid "Done"
211msgid "Done"
208msgstr "완료"
212msgstr "완료"
209
213
210−#: qml/Dash/ScopesOverview.qml:434
214+#: qml/Dash/ScopesOverview.qml:443
211msgid "Store"
215msgid "Store"
212msgstr "장터"
216msgstr "장터"
213
217
@@ -221,9 +225,9 @@ msgstr "모두"
221
225
222#: qml/Greeter/Greeter.qml:157
226#: qml/Greeter/Greeter.qml:157
223msgid "Swipe to unlock"
227msgid "Swipe to unlock"
224−msgstr "휴대전화를 잠금 해제하려면 움직이세요."
228+msgstr "쓸어서 잠금 해제"
225
229
226−#: qml/Hud/HudParametrizedActionsPage.qml:132
230+#: qml/Hud/HudParametrizedActionsPage.qml:139
227msgid "Confirm"
231msgid "Confirm"
228msgstr "확인"
232msgstr "확인"
229
233
@@ -233,7 +237,7 @@ msgstr "명령을 입력하거나 말하세요."
233
237
234#: qml/Hud/Hud.qml:84
238#: qml/Hud/Hud.qml:84
235msgid "Loading. Please Wait..."
239msgid "Loading. Please Wait..."
236−msgstr "준비 중.. 잠시만 기다려 주세요..."
240+msgstr "불러오는 중 입니다. 짐시 기다려주십시오..."
237
241
238#: qml/Hud/Hud.qml:89
242#: qml/Hud/Hud.qml:89
239msgid "Speak Now..."
243msgid "Speak Now..."
@@ -245,15 +249,15 @@ msgstr "말하는 중..."
245
249
246#: qml/Notifications/NotificationMenuItemFactory.qml:105
250#: qml/Notifications/NotificationMenuItemFactory.qml:105
247msgid "Show password"
251msgid "Show password"
248−msgstr "비밀 번호 보기"
252+msgstr "암호 표시"
249
253
250#: qml/Notifications/NotificationMenuItemFactory.qml:120
254#: qml/Notifications/NotificationMenuItemFactory.qml:120
251msgid "Enter SIM PIN"
255msgid "Enter SIM PIN"
252−msgstr ""
256+msgstr "심 카드의 개인 식별 번호 입력"
253
257
254−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
258+#: qml/Notifications/NotificationMenuItemFactory.qml:121
255msgid "Sorry, incorrect PIN"
259msgid "Sorry, incorrect PIN"
256−msgstr ""
260+msgstr "죄송합니다. 개인 식별 번호가 올바르지 않습니다."
257
261
258#: qml/Panel/ActiveCallHint.qml:77
262#: qml/Panel/ActiveCallHint.qml:77
259msgid "Tap to return to call..."
263msgid "Tap to return to call..."
@@ -265,7 +269,7 @@ msgstr "회의"
265
269
266#: qml/Panel/Indicators/MenuItemFactory.qml:651
270#: qml/Panel/Indicators/MenuItemFactory.qml:651
267msgid "In queue…"
271msgid "In queue…"
268−msgstr "재생 중..."
272+msgstr "대기 중..."
269
273
270#: qml/Panel/Indicators/MenuItemFactory.qml:655
274#: qml/Panel/Indicators/MenuItemFactory.qml:655
271msgid "Downloading"
275msgid "Downloading"
@@ -273,82 +277,74 @@ msgstr "다운로드 중"
273
277
274#: qml/Panel/Indicators/MenuItemFactory.qml:657
278#: qml/Panel/Indicators/MenuItemFactory.qml:657
275msgid "Paused, tap to resume"
279msgid "Paused, tap to resume"
276−msgstr "일시 중지 되었습니다. 계속하려면 누르세요."
280+msgstr "일시 중지하였습니다. 계속하려면 눌러주세요."
277
281
278#: qml/Panel/Indicators/MenuItemFactory.qml:659
282#: qml/Panel/Indicators/MenuItemFactory.qml:659
279msgid "Canceled"
283msgid "Canceled"
280−msgstr "취소됨"
284+msgstr "취소함"
281
285
282#: qml/Panel/Indicators/MenuItemFactory.qml:661
286#: qml/Panel/Indicators/MenuItemFactory.qml:661
283msgid "Finished"
287msgid "Finished"
284−msgstr "완료됨"
288+msgstr "완료함"
285
289
286#: qml/Panel/Indicators/MenuItemFactory.qml:663
290#: qml/Panel/Indicators/MenuItemFactory.qml:663
287msgid "Failed, tap to retry"
291msgid "Failed, tap to retry"
288−msgstr "실패하였습니다. 재시도하려면 누르세요."
292+msgstr "실패, 누르면 다시 시도합니다."
289
293
290#: qml/Panel/Indicators/ModemInfoItem.qml:105
294#: qml/Panel/Indicators/ModemInfoItem.qml:105
291msgid "Unlock SIM"
295msgid "Unlock SIM"
292−msgstr "SIM 카드 보안 해제"
296+msgstr "심 카드 잠금 해제"
293
297
294#: qml/Panel/Indicators/RoamingIndication.qml:27
298#: qml/Panel/Indicators/RoamingIndication.qml:27
295msgid "Roaming"
299msgid "Roaming"
296msgstr "로밍"
300msgstr "로밍"
297
301
298−#: qml/Shell.qml:266
302+#: qml/Shell.qml:279
299msgid "Enter your passphrase"
303msgid "Enter your passphrase"
300−msgstr ""
304+msgstr "패스프레이즈를 입력해주십시오."
301
305
302−#: qml/Shell.qml:267
306+#: qml/Shell.qml:280
303msgid "Sorry, incorrect passphrase"
307msgid "Sorry, incorrect passphrase"
304−msgstr ""
308+msgstr "죄송합니다. 패스프레이즈가 올바르지 않습니다."
305
309
306#: qml/Shell.qml:282
310#: qml/Shell.qml:282
307msgid "Enter your passcode"
311msgid "Enter your passcode"
308−msgstr ""
312+msgstr "패스코드를 입력해주십시오."
309
313
310#: qml/Shell.qml:283
314#: qml/Shell.qml:283
311msgid "Sorry, incorrect passcode"
315msgid "Sorry, incorrect passcode"
312−msgstr ""
316+msgstr "죄송합니다. 패스코드가 올바르지 않습니다."
313
317
314−#: qml/Shell.qml:273
318+#: qml/Shell.qml:286
315#, qt-format
319#, qt-format
316msgid "Enter your %1"
320msgid "Enter your %1"
317−msgstr "%1를 입력하세요"
321+msgstr "%1을(를) 입력해주십시오."
318
322
319−#: qml/Shell.qml:274
323+#: qml/Shell.qml:287
320#, qt-format
324#, qt-format
321msgid "Sorry, incorrect %1"
325msgid "Sorry, incorrect %1"
322−msgstr ""
326+msgstr "죄송합니다. %1이(가) 올바르지 않습니다."
323
327
324−#: qml/Shell.qml:310
328+#: qml/Shell.qml:323
325msgid "Sorry, incorrect passphrase."
329msgid "Sorry, incorrect passphrase."
326−msgstr "잘못된 비밀번호입니다."
330+msgstr "올바르지 않은 패스프레이즈입니다."
327
331
328−#: qml/Shell.qml:311
332+#: qml/Shell.qml:324
329msgid "Sorry, incorrect passcode."
333msgid "Sorry, incorrect passcode."
330−msgstr "잘못된 비밀번호입니다."
334+msgstr "최송합니다. 패스코드가 올바르지 않습니다."
331
335
332−#: qml/Shell.qml:312
336+#: qml/Shell.qml:325
333msgid "This will be your last attempt."
337msgid "This will be your last attempt."
334msgstr "마지막 시도입니다."
338msgstr "마지막 시도입니다."
335
339
336−#: qml/Shell.qml:314
340+#: qml/Shell.qml:327
337msgid ""
341msgid ""
338"If passphrase is entered incorrectly, your phone will conduct a factory "
342"If passphrase is entered incorrectly, your phone will conduct a factory "
339"reset and all personal data will be deleted."
343"reset and all personal data will be deleted."
340−msgstr ""
344+msgstr "이번에도 올바르지 않은 패스프레이즈를 입력하면 휴대 전화를 공장 초기화하여 모든 개인 정보를 삭제합니다."
341−"만약 이번 시도에서 잘못 입력하면, 보안을 위해 휴대 전화가 공장 초기화 과정을 거쳐 모든 사용자 데이터를 삭제할 것입니다."
342
345
343−#: qml/Shell.qml:315
346+#: qml/Shell.qml:328
344msgid ""
347msgid ""
345"If passcode is entered incorrectly, your phone will conduct a factory reset "
348"If passcode is entered incorrectly, your phone will conduct a factory reset "
346"and all personal data will be deleted."
349"and all personal data will be deleted."
347−msgstr ""
350+msgstr "이번에도 올바르지 않은 패스코드를 입력하면 휴대 전화를 공장 초기화하여 모든 개인 정보를 삭제합니다."
348−"만약 이번 시도에서 잘못 입력하면, 보안을 위해 휴대 전화가 공장 초기화 과정을 거쳐 모든 사용자 데이터를 삭제할 것입니다."
349−
350−#~ msgid "Are you sure you would like to turn power off?"
351−#~ msgstr "정말로 전원을 끌까요?"
352−
353−#~ msgid "Restart"
354−#~ 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 ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2013-06-27 06:17+0000\n"
11"PO-Revision-Date: 2013-06-27 06:17+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Kirghiz <ky@li.org>\n"
13"Language-Team: Kirghiz <ky@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -161,7 +165,8 @@ msgstr ""
161msgid "See all"
165msgid "See all"
162msgstr ""
166msgstr ""
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr "Издөө"
171msgstr "Издөө"
167
172
@@ -201,11 +206,11 @@ msgstr ""
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr ""
215msgstr ""
211
216
@@ -221,7 +226,7 @@ msgstr ""
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr ""
227msgstr ""
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr "Аныктоо"
231msgstr "Аныктоо"
227
232
@@ -249,7 +254,7 @@ msgstr ""
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr ""
293msgid "Roaming"
298msgid "Roaming"
294msgstr ""
299msgstr ""
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,35 +314,35 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
po/lo.po+25−20
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2013-10-02 10:00+0000\n"
11"PO-Revision-Date: 2013-10-02 10:00+0000\n"
12"Last-Translator: Anousak <anousak@gmail.com>\n"
12"Last-Translator: Anousak <anousak@gmail.com>\n"
13"Language-Team: Lao <lo@li.org>\n"
13"Language-Team: Lao <lo@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -161,7 +165,8 @@ msgstr ""
161msgid "See all"
165msgid "See all"
162msgstr ""
166msgstr ""
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr "ຊອກຫາ"
171msgstr "ຊອກຫາ"
167
172
@@ -201,11 +206,11 @@ msgstr "ສົ່ງ"
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr ""
215msgstr ""
211
216
@@ -221,7 +226,7 @@ msgstr ""
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr ""
227msgstr ""
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr "ຢືນຢັນ"
231msgstr "ຢືນຢັນ"
227
232
@@ -249,7 +254,7 @@ msgstr ""
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr ""
293msgid "Roaming"
298msgid "Roaming"
294msgstr ""
299msgstr ""
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,35 +314,35 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
po/lt.po+25−20
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-05-19 17:15+0000\n"
11"PO-Revision-Date: 2014-05-19 17:15+0000\n"
12"Last-Translator: Mantas Kriaučiūnas <mantas@akl.lt>\n"
12"Last-Translator: Mantas Kriaučiūnas <mantas@akl.lt>\n"
13"Language-Team: Lithuanian <lt@li.org>\n"
13"Language-Team: Lithuanian <lt@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -164,7 +168,8 @@ msgstr ""
164msgid "See all"
168msgid "See all"
165msgstr ""
169msgstr ""
166
170
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
168msgid "Search"
173msgid "Search"
169msgstr "Paieška"
174msgstr "Paieška"
170
175
@@ -204,11 +209,11 @@ msgstr "Siųsti"
204msgid "Manage Dash"
209msgid "Manage Dash"
205msgstr ""
210msgstr ""
206
211
207−#: qml/Dash/ScopesOverview.qml:408
212+#: qml/Dash/ScopesOverview.qml:417
208msgid "Done"
213msgid "Done"
209msgstr ""
214msgstr ""
210
215
211−#: qml/Dash/ScopesOverview.qml:434
216+#: qml/Dash/ScopesOverview.qml:443
212msgid "Store"
217msgid "Store"
213msgstr ""
218msgstr ""
214
219
@@ -224,7 +229,7 @@ msgstr ""
224msgid "Swipe to unlock"
229msgid "Swipe to unlock"
225msgstr "Braukite ir atrakinsite"
230msgstr "Braukite ir atrakinsite"
226
231
227−#: qml/Hud/HudParametrizedActionsPage.qml:132
232+#: qml/Hud/HudParametrizedActionsPage.qml:139
228msgid "Confirm"
233msgid "Confirm"
229msgstr "Patvirtinti"
234msgstr "Patvirtinti"
230
235
@@ -252,7 +257,7 @@ msgstr "Rodyti slaptažodį"
252msgid "Enter SIM PIN"
257msgid "Enter SIM PIN"
253msgstr ""
258msgstr ""
254
259
255−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
260+#: qml/Notifications/NotificationMenuItemFactory.qml:121
256msgid "Sorry, incorrect PIN"
261msgid "Sorry, incorrect PIN"
257msgstr ""
262msgstr ""
258
263
@@ -296,11 +301,11 @@ msgstr ""
296msgid "Roaming"
301msgid "Roaming"
297msgstr ""
302msgstr ""
298
303
299−#: qml/Shell.qml:266
304+#: qml/Shell.qml:279
300msgid "Enter your passphrase"
305msgid "Enter your passphrase"
301msgstr ""
306msgstr ""
302
307
303−#: qml/Shell.qml:267
308+#: qml/Shell.qml:280
304msgid "Sorry, incorrect passphrase"
309msgid "Sorry, incorrect passphrase"
305msgstr ""
310msgstr ""
306
311
@@ -312,35 +317,35 @@ msgstr ""
312msgid "Sorry, incorrect passcode"
317msgid "Sorry, incorrect passcode"
313msgstr ""
318msgstr ""
314
319
315−#: qml/Shell.qml:273
320+#: qml/Shell.qml:286
316#, qt-format
321#, qt-format
317msgid "Enter your %1"
322msgid "Enter your %1"
318msgstr ""
323msgstr ""
319
324
320−#: qml/Shell.qml:274
325+#: qml/Shell.qml:287
321#, qt-format
326#, qt-format
322msgid "Sorry, incorrect %1"
327msgid "Sorry, incorrect %1"
323msgstr ""
328msgstr ""
324
329
325−#: qml/Shell.qml:310
330+#: qml/Shell.qml:323
326msgid "Sorry, incorrect passphrase."
331msgid "Sorry, incorrect passphrase."
327msgstr ""
332msgstr ""
328
333
329−#: qml/Shell.qml:311
334+#: qml/Shell.qml:324
330msgid "Sorry, incorrect passcode."
335msgid "Sorry, incorrect passcode."
331msgstr ""
336msgstr ""
332
337
333−#: qml/Shell.qml:312
338+#: qml/Shell.qml:325
334msgid "This will be your last attempt."
339msgid "This will be your last attempt."
335msgstr ""
340msgstr ""
336
341
337−#: qml/Shell.qml:314
342+#: qml/Shell.qml:327
338msgid ""
343msgid ""
339"If passphrase is entered incorrectly, your phone will conduct a factory "
344"If passphrase is entered incorrectly, your phone will conduct a factory "
340"reset and all personal data will be deleted."
345"reset and all personal data will be deleted."
341msgstr ""
346msgstr ""
342
347
343−#: qml/Shell.qml:315
348+#: qml/Shell.qml:328
344msgid ""
349msgid ""
345"If passcode is entered incorrectly, your phone will conduct a factory reset "
350"If passcode is entered incorrectly, your phone will conduct a factory reset "
346"and all personal data will be deleted."
351"and all personal data will be deleted."
po/lv.po+35−36
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-08-21 09:46+0000\n"
11"PO-Revision-Date: 2014-08-21 09:46+0000\n"
12"Last-Translator: Jānis-Marks Gailis <jm-gailis@fai-vianet.fr>\n"
12"Last-Translator: Jānis-Marks Gailis <jm-gailis@fai-vianet.fr>\n"
13"Language-Team: Latvian <lv@li.org>\n"
13"Language-Team: Latvian <lv@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr "Parole: "
22msgstr "Parole: "
23
23
@@ -32,7 +32,7 @@ msgstr ""
32
32
33#: qml/Components/Dialogs.qml:70
33#: qml/Components/Dialogs.qml:70
34msgid "Log out"
34msgid "Log out"
35−msgstr ""
35+msgstr "Iziet"
36
36
37#: qml/Components/Dialogs.qml:71
37#: qml/Components/Dialogs.qml:71
38msgid "Are you sure you want to log out?"
38msgid "Are you sure you want to log out?"
@@ -41,16 +41,16 @@ msgstr ""
41#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
41#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
42#: qml/Components/Dialogs.qml:122
42#: qml/Components/Dialogs.qml:122
43msgid "No"
43msgid "No"
44−msgstr ""
44+msgstr "Nē"
45
45
46#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
46#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
47#: qml/Components/Dialogs.qml:129
47#: qml/Components/Dialogs.qml:129
48msgid "Yes"
48msgid "Yes"
49−msgstr ""
49+msgstr "Jā"
50
50
51#: qml/Components/Dialogs.qml:94
51#: qml/Components/Dialogs.qml:94
52msgid "Shut down"
52msgid "Shut down"
53−msgstr ""
53+msgstr "Izslēgt"
54
54
55#: qml/Components/Dialogs.qml:95
55#: qml/Components/Dialogs.qml:95
56msgid "Are you sure you want to shut down?"
56msgid "Are you sure you want to shut down?"
@@ -58,7 +58,7 @@ msgstr ""
58
58
59#: qml/Components/Dialogs.qml:119
59#: qml/Components/Dialogs.qml:119
60msgid "Reboot"
60msgid "Reboot"
61−msgstr ""
61+msgstr "Pārstartēt"
62
62
63#: qml/Components/Dialogs.qml:120
63#: qml/Components/Dialogs.qml:120
64msgid "Are you sure you want to reboot?"
64msgid "Are you sure you want to reboot?"
@@ -66,7 +66,7 @@ msgstr ""
66
66
67#: qml/Components/Dialogs.qml:144
67#: qml/Components/Dialogs.qml:144
68msgid "Power"
68msgid "Power"
69−msgstr ""
69+msgstr "Barošana"
70
70
71#: qml/Components/Dialogs.qml:145
71#: qml/Components/Dialogs.qml:145
72msgid ""
72msgid ""
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr "Izslēgt"
79msgstr "Izslēgt"
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr "Atcelt"
87msgstr "Atcelt"
84
88
@@ -161,21 +165,22 @@ msgstr "Redzēt mazāk"
161msgid "See all"
165msgid "See all"
162msgstr "Skatīt visus"
166msgstr "Skatīt visus"
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr "Meklēt"
171msgstr "Meklēt"
167
172
168#: qml/Dash/PageHeader.qml:270
173#: qml/Dash/PageHeader.qml:270
169msgid "Settings"
174msgid "Settings"
170−msgstr ""
175+msgstr "Iestatījumi"
171
176
172#: qml/Dash/PageHeader.qml:279
177#: qml/Dash/PageHeader.qml:279
173msgid "Remove from Favorites"
178msgid "Remove from Favorites"
174−msgstr ""
179+msgstr "Izņemt no izlases"
175
180
176#: qml/Dash/PageHeader.qml:279
181#: qml/Dash/PageHeader.qml:279
177msgid "Add to Favorites"
182msgid "Add to Favorites"
178−msgstr ""
183+msgstr "Pievienot izlasei"
179
184
180#: qml/Dash/Previews/PreviewActionCombo.qml:34
185#: qml/Dash/Previews/PreviewActionCombo.qml:34
181msgid "More..."
186msgid "More..."
@@ -201,11 +206,11 @@ msgstr "Sūtīt"
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr "Pabeigts"
211msgstr "Pabeigts"
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr "Veikals"
215msgstr "Veikals"
211
216
@@ -221,7 +226,7 @@ msgstr "Visi"
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr ""
227msgstr ""
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr "Apstiprināt"
231msgstr "Apstiprināt"
227
232
@@ -247,9 +252,9 @@ msgstr "Rādīt paroli"
247
252
248#: qml/Notifications/NotificationMenuItemFactory.qml:120
253#: qml/Notifications/NotificationMenuItemFactory.qml:120
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250−msgstr ""
255+msgstr "Ievadiet SIM PIN"
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr "Atbloķēt SIM"
293msgid "Roaming"
298msgid "Roaming"
294msgstr "Viesabonēšana"
299msgstr "Viesabonēšana"
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,42 +314,36 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr "Ievadiet jūsu %1"
320msgstr "Ievadiet jūsu %1"
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr "Šīs būs jūs pēdējais mēģinājums."
337msgstr "Šīs būs jūs pēdējais mēģinājums."
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
344msgstr ""
349msgstr ""
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 ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2013-11-23 11:44+0000\n"
11"PO-Revision-Date: 2013-11-23 11:44+0000\n"
12"Last-Translator: ST Alfas <Unknown>\n"
12"Last-Translator: ST Alfas <Unknown>\n"
13"Language-Team: Malayalam <ml@li.org>\n"
13"Language-Team: Malayalam <ml@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -163,7 +167,8 @@ msgstr ""
163msgid "See all"
167msgid "See all"
164msgstr ""
168msgstr ""
165
169
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
167msgid "Search"
172msgid "Search"
168msgstr "തിരയുക"
173msgstr "തിരയുക"
169
174
@@ -203,11 +208,11 @@ msgstr "അയയ്‌ക്കുക"
203msgid "Manage Dash"
208msgid "Manage Dash"
204msgstr ""
209msgstr ""
205
210
206−#: qml/Dash/ScopesOverview.qml:408
211+#: qml/Dash/ScopesOverview.qml:417
207msgid "Done"
212msgid "Done"
208msgstr ""
213msgstr ""
209
214
210−#: qml/Dash/ScopesOverview.qml:434
215+#: qml/Dash/ScopesOverview.qml:443
211msgid "Store"
216msgid "Store"
212msgstr ""
217msgstr ""
213
218
@@ -223,7 +228,7 @@ msgstr ""
223msgid "Swipe to unlock"
228msgid "Swipe to unlock"
224msgstr ""
229msgstr ""
225
230
226−#: qml/Hud/HudParametrizedActionsPage.qml:132
231+#: qml/Hud/HudParametrizedActionsPage.qml:139
227msgid "Confirm"
232msgid "Confirm"
228msgstr "സ്ഥിരീകരിക്കുക"
233msgstr "സ്ഥിരീകരിക്കുക"
229
234
@@ -251,7 +256,7 @@ msgstr "രഹസ്യവാക്ക് കാണിക്കുക"
251msgid "Enter SIM PIN"
256msgid "Enter SIM PIN"
252msgstr ""
257msgstr ""
253
258
254−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
259+#: qml/Notifications/NotificationMenuItemFactory.qml:121
255msgid "Sorry, incorrect PIN"
260msgid "Sorry, incorrect PIN"
256msgstr ""
261msgstr ""
257
262
@@ -295,11 +300,11 @@ msgstr ""
295msgid "Roaming"
300msgid "Roaming"
296msgstr ""
301msgstr ""
297
302
298−#: qml/Shell.qml:266
303+#: qml/Shell.qml:279
299msgid "Enter your passphrase"
304msgid "Enter your passphrase"
300msgstr ""
305msgstr ""
301
306
302−#: qml/Shell.qml:267
307+#: qml/Shell.qml:280
303msgid "Sorry, incorrect passphrase"
308msgid "Sorry, incorrect passphrase"
304msgstr ""
309msgstr ""
305
310
@@ -311,35 +316,35 @@ msgstr ""
311msgid "Sorry, incorrect passcode"
316msgid "Sorry, incorrect passcode"
312msgstr ""
317msgstr ""
313
318
314−#: qml/Shell.qml:273
319+#: qml/Shell.qml:286
315#, qt-format
320#, qt-format
316msgid "Enter your %1"
321msgid "Enter your %1"
317msgstr ""
322msgstr ""
318
323
319−#: qml/Shell.qml:274
324+#: qml/Shell.qml:287
320#, qt-format
325#, qt-format
321msgid "Sorry, incorrect %1"
326msgid "Sorry, incorrect %1"
322msgstr ""
327msgstr ""
323
328
324−#: qml/Shell.qml:310
329+#: qml/Shell.qml:323
325msgid "Sorry, incorrect passphrase."
330msgid "Sorry, incorrect passphrase."
326msgstr ""
331msgstr ""
327
332
328−#: qml/Shell.qml:311
333+#: qml/Shell.qml:324
329msgid "Sorry, incorrect passcode."
334msgid "Sorry, incorrect passcode."
330msgstr ""
335msgstr ""
331
336
332−#: qml/Shell.qml:312
337+#: qml/Shell.qml:325
333msgid "This will be your last attempt."
338msgid "This will be your last attempt."
334msgstr ""
339msgstr ""
335
340
336−#: qml/Shell.qml:314
341+#: qml/Shell.qml:327
337msgid ""
342msgid ""
338"If passphrase is entered incorrectly, your phone will conduct a factory "
343"If passphrase is entered incorrectly, your phone will conduct a factory "
339"reset and all personal data will be deleted."
344"reset and all personal data will be deleted."
340msgstr ""
345msgstr ""
341
346
342−#: qml/Shell.qml:315
347+#: qml/Shell.qml:328
343msgid ""
348msgid ""
344"If passcode is entered incorrectly, your phone will conduct a factory reset "
349"If passcode is entered incorrectly, your phone will conduct a factory reset "
345"and all personal data will be deleted."
350"and all personal data will be deleted."
po/mr.po+25−20
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-01-14 19:54+0000\n"
11"PO-Revision-Date: 2014-01-14 19:54+0000\n"
12"Last-Translator: Rohan Deshmukh <Unknown>\n"
12"Last-Translator: Rohan Deshmukh <Unknown>\n"
13"Language-Team: Marathi <mr@li.org>\n"
13"Language-Team: Marathi <mr@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -161,7 +165,8 @@ msgstr ""
161msgid "See all"
165msgid "See all"
162msgstr ""
166msgstr ""
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr ""
171msgstr ""
167
172
@@ -201,11 +206,11 @@ msgstr ""
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr ""
215msgstr ""
211
216
@@ -221,7 +226,7 @@ msgstr ""
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr ""
227msgstr ""
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr ""
231msgstr ""
227
232
@@ -249,7 +254,7 @@ msgstr ""
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr ""
293msgid "Roaming"
298msgid "Roaming"
294msgstr ""
299msgstr ""
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,35 +314,35 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
po/ms.po+25−20
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-01-17 09:05+0000\n"
11"PO-Revision-Date: 2014-01-17 09:05+0000\n"
12"Last-Translator: abuyop <Unknown>\n"
12"Last-Translator: abuyop <Unknown>\n"
13"Language-Team: Malay <ms@li.org>\n"
13"Language-Team: Malay <ms@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -161,7 +165,8 @@ msgstr ""
161msgid "See all"
165msgid "See all"
162msgstr ""
166msgstr ""
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr "Gelintar"
171msgstr "Gelintar"
167
172
@@ -201,11 +206,11 @@ msgstr "Hantar"
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr ""
215msgstr ""
211
216
@@ -221,7 +226,7 @@ msgstr ""
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr ""
227msgstr ""
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr "Sahkan"
231msgstr "Sahkan"
227
232
@@ -249,7 +254,7 @@ msgstr "Tunjuk kata laluan"
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr ""
293msgid "Roaming"
298msgid "Roaming"
294msgstr ""
299msgstr ""
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,35 +314,35 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
po/my.po+25−20
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2013-12-12 11:12+0000\n"
11"PO-Revision-Date: 2013-12-12 11:12+0000\n"
12"Last-Translator: Pyae Sone <Unknown>\n"
12"Last-Translator: Pyae Sone <Unknown>\n"
13"Language-Team: Burmese <my@li.org>\n"
13"Language-Team: Burmese <my@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -161,7 +165,8 @@ msgstr ""
161msgid "See all"
165msgid "See all"
162msgstr ""
166msgstr ""
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr "ရှာဖွေ"
171msgstr "ရှာဖွေ"
167
172
@@ -201,11 +206,11 @@ msgstr "ပို့မည်"
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr ""
215msgstr ""
211
216
@@ -221,7 +226,7 @@ msgstr ""
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr ""
227msgstr ""
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr "အတည်ပြုပါ"
231msgstr "အတည်ပြုပါ"
227
232
@@ -249,7 +254,7 @@ msgstr "စကားဝှက်ကိုပြ"
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr ""
293msgid "Roaming"
298msgid "Roaming"
294msgstr ""
299msgstr ""
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,35 +314,35 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
po/nb.po+8−4
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11−"PO-Revision-Date: 2014-08-28 16:54+0000\n"
11+"PO-Revision-Date: 2014-09-20 12:02+0000\n"
12"Last-Translator: Åka Sikrom <Unknown>\n"
12"Last-Translator: Åka Sikrom <Unknown>\n"
13"Language-Team: Norwegian Bokmal <nb@li.org>\n"
13"Language-Team: Norwegian Bokmal <nb@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-30 07:46+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-21 06:25+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20#: plugins/LightDM/Greeter.cpp:130
20#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
@@ -80,6 +80,10 @@ msgstr ""
80msgid "Power off"
80msgid "Power off"
81msgstr "Slå av"
81msgstr "Slå av"
82
82
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr "Start på nytt"
86+
83#: qml/Components/Dialogs.qml:157
87#: qml/Components/Dialogs.qml:157
84msgid "Cancel"
88msgid "Cancel"
85msgstr "Avbryt"
89msgstr "Avbryt"
po/nl.po+8−4
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11−"PO-Revision-Date: 2014-08-30 18:22+0000\n"
11+"PO-Revision-Date: 2014-09-19 14:29+0000\n"
12"Last-Translator: rob <linuxned@gmail.com>\n"
12"Last-Translator: rob <linuxned@gmail.com>\n"
13"Language-Team: Dutch <nl@li.org>\n"
13"Language-Team: Dutch <nl@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-31 07:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20#: plugins/LightDM/Greeter.cpp:130
20#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
@@ -80,6 +80,10 @@ msgstr ""
80msgid "Power off"
80msgid "Power off"
81msgstr "Uitschakelen"
81msgstr "Uitschakelen"
82
82
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr "Herstarten"
86+
83#: qml/Components/Dialogs.qml:157
87#: qml/Components/Dialogs.qml:157
84msgid "Cancel"
88msgid "Cancel"
85msgstr "Annuleren"
89msgstr "Annuleren"
po/pl.po+25−20
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-08-18 20:25+0000\n"
11"PO-Revision-Date: 2014-08-18 20:25+0000\n"
12"Last-Translator: Paweł Stroka <pawstr@gmail.com>\n"
12"Last-Translator: Paweł Stroka <pawstr@gmail.com>\n"
13"Language-Team: Polish <pl@li.org>\n"
13"Language-Team: Polish <pl@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -165,7 +169,8 @@ msgstr "Zobacz mniej"
165msgid "See all"
169msgid "See all"
166msgstr "Zobacz wszystko"
170msgstr "Zobacz wszystko"
167
171
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
169msgid "Search"
174msgid "Search"
170msgstr "Szukaj"
175msgstr "Szukaj"
171
176
@@ -205,11 +210,11 @@ msgstr "Wyślij"
205msgid "Manage Dash"
210msgid "Manage Dash"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:408
213+#: qml/Dash/ScopesOverview.qml:417
209msgid "Done"
214msgid "Done"
210msgstr ""
215msgstr ""
211
216
212−#: qml/Dash/ScopesOverview.qml:434
217+#: qml/Dash/ScopesOverview.qml:443
213msgid "Store"
218msgid "Store"
214msgstr ""
219msgstr ""
215
220
@@ -225,7 +230,7 @@ msgstr ""
225msgid "Swipe to unlock"
230msgid "Swipe to unlock"
226msgstr "Przeciągnij aby odblokować"
231msgstr "Przeciągnij aby odblokować"
227
232
228−#: qml/Hud/HudParametrizedActionsPage.qml:132
233+#: qml/Hud/HudParametrizedActionsPage.qml:139
229msgid "Confirm"
234msgid "Confirm"
230msgstr "Potwierdź"
235msgstr "Potwierdź"
231
236
@@ -253,7 +258,7 @@ msgstr "Wyświetl hasło"
253msgid "Enter SIM PIN"
258msgid "Enter SIM PIN"
254msgstr ""
259msgstr ""
255
260
256−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
261+#: qml/Notifications/NotificationMenuItemFactory.qml:121
257msgid "Sorry, incorrect PIN"
262msgid "Sorry, incorrect PIN"
258msgstr ""
263msgstr ""
259
264
@@ -297,11 +302,11 @@ msgstr ""
297msgid "Roaming"
302msgid "Roaming"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:266
305+#: qml/Shell.qml:279
301msgid "Enter your passphrase"
306msgid "Enter your passphrase"
302msgstr ""
307msgstr ""
303
308
304−#: qml/Shell.qml:267
309+#: qml/Shell.qml:280
305msgid "Sorry, incorrect passphrase"
310msgid "Sorry, incorrect passphrase"
306msgstr ""
311msgstr ""
307
312
@@ -313,35 +318,35 @@ msgstr ""
313msgid "Sorry, incorrect passcode"
318msgid "Sorry, incorrect passcode"
314msgstr ""
319msgstr ""
315
320
316−#: qml/Shell.qml:273
321+#: qml/Shell.qml:286
317#, qt-format
322#, qt-format
318msgid "Enter your %1"
323msgid "Enter your %1"
319msgstr ""
324msgstr ""
320
325
321−#: qml/Shell.qml:274
326+#: qml/Shell.qml:287
322#, qt-format
327#, qt-format
323msgid "Sorry, incorrect %1"
328msgid "Sorry, incorrect %1"
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:310
331+#: qml/Shell.qml:323
327msgid "Sorry, incorrect passphrase."
332msgid "Sorry, incorrect passphrase."
328msgstr "Niestety, błędne hasło"
333msgstr "Niestety, błędne hasło"
329
334
330−#: qml/Shell.qml:311
335+#: qml/Shell.qml:324
331msgid "Sorry, incorrect passcode."
336msgid "Sorry, incorrect passcode."
332msgstr "Niestety, błędny kod"
337msgstr "Niestety, błędny kod"
333
338
334−#: qml/Shell.qml:312
339+#: qml/Shell.qml:325
335msgid "This will be your last attempt."
340msgid "This will be your last attempt."
336msgstr ""
341msgstr ""
337
342
338−#: qml/Shell.qml:314
343+#: qml/Shell.qml:327
339msgid ""
344msgid ""
340"If passphrase is entered incorrectly, your phone will conduct a factory "
345"If passphrase is entered incorrectly, your phone will conduct a factory "
341"reset and all personal data will be deleted."
346"reset and all personal data will be deleted."
342msgstr ""
347msgstr ""
343
348
344−#: qml/Shell.qml:315
349+#: qml/Shell.qml:328
345msgid ""
350msgid ""
346"If passcode is entered incorrectly, your phone will conduct a factory reset "
351"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"and all personal data will be deleted."
352"and all personal data will be deleted."
po/pt.po+8−4
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11−"PO-Revision-Date: 2014-08-29 10:59+0000\n"
11+"PO-Revision-Date: 2014-09-21 15:26+0000\n"
12"Last-Translator: Ivo Xavier <ivofernandes12@gmail.com>\n"
12"Last-Translator: Ivo Xavier <ivofernandes12@gmail.com>\n"
13"Language-Team: Portuguese <pt@li.org>\n"
13"Language-Team: Portuguese <pt@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-30 07:46+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-22 07:05+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20#: plugins/LightDM/Greeter.cpp:130
20#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
@@ -80,6 +80,10 @@ msgstr ""
80msgid "Power off"
80msgid "Power off"
81msgstr "Desligar"
81msgstr "Desligar"
82
82
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr "Reiniciar"
86+
83#: qml/Components/Dialogs.qml:157
87#: qml/Components/Dialogs.qml:157
84msgid "Cancel"
88msgid "Cancel"
85msgstr "Cancelar"
89msgstr "Cancelar"
po/pt_BR.po+25−29
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-08-27 19:23+0000\n"
11"PO-Revision-Date: 2014-08-27 19:23+0000\n"
12"Last-Translator: Rafael Neri <Unknown>\n"
12"Last-Translator: Rafael Neri <Unknown>\n"
13"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
13"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr "Senha: "
22msgstr "Senha: "
23
23
@@ -76,11 +76,15 @@ msgstr ""
76"Tem certeza que você gostaria \n"
76"Tem certeza que você gostaria \n"
77"de desligar?"
77"de desligar?"
78
78
79−#: qml/Components/Dialogs.qml:144
79+#: qml/Components/Dialogs.qml:147
80msgid "Power off"
80msgid "Power off"
81msgstr "Desligar"
81msgstr "Desligar"
82
82
83−#: qml/Components/Dialogs.qml:162
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
87+#: qml/Components/Dialogs.qml:157
84msgid "Cancel"
88msgid "Cancel"
85msgstr "Cancelar"
89msgstr "Cancelar"
86
90
@@ -167,7 +171,8 @@ msgstr "Ver menos"
167msgid "See all"
171msgid "See all"
168msgstr "Ver todos"
172msgstr "Ver todos"
169
173
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
171msgid "Search"
176msgid "Search"
172msgstr "Pesquisar"
177msgstr "Pesquisar"
173
178
@@ -207,11 +212,11 @@ msgstr "Enviar"
207msgid "Manage Dash"
212msgid "Manage Dash"
208msgstr "Gerencia painel"
213msgstr "Gerencia painel"
209
214
210−#: qml/Dash/ScopesOverview.qml:408
215+#: qml/Dash/ScopesOverview.qml:417
211msgid "Done"
216msgid "Done"
212msgstr "Concluído"
217msgstr "Concluído"
213
218
214−#: qml/Dash/ScopesOverview.qml:434
219+#: qml/Dash/ScopesOverview.qml:443
215msgid "Store"
220msgid "Store"
216msgstr "Loja"
221msgstr "Loja"
217
222
@@ -227,7 +232,7 @@ msgstr "Tudo"
227msgid "Swipe to unlock"
232msgid "Swipe to unlock"
228msgstr "Deslizar para desbloquear"
233msgstr "Deslizar para desbloquear"
229
234
230−#: qml/Hud/HudParametrizedActionsPage.qml:132
235+#: qml/Hud/HudParametrizedActionsPage.qml:139
231msgid "Confirm"
236msgid "Confirm"
232msgstr "Confirmar"
237msgstr "Confirmar"
233
238
@@ -255,7 +260,7 @@ msgstr "Exibir senha"
255msgid "Enter SIM PIN"
260msgid "Enter SIM PIN"
256msgstr "Digite o PIN do SIM"
261msgstr "Digite o PIN do SIM"
257
262
258−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
263+#: qml/Notifications/NotificationMenuItemFactory.qml:121
259msgid "Sorry, incorrect PIN"
264msgid "Sorry, incorrect PIN"
260msgstr "Desculpe, PIN incorreto"
265msgstr "Desculpe, PIN incorreto"
261
266
@@ -299,11 +304,11 @@ msgstr "Desbloquear SIM"
299msgid "Roaming"
304msgid "Roaming"
300msgstr "Roaming"
305msgstr "Roaming"
301
306
302−#: qml/Shell.qml:266
307+#: qml/Shell.qml:279
303msgid "Enter your passphrase"
308msgid "Enter your passphrase"
304msgstr "Digite sua senha"
309msgstr "Digite sua senha"
305
310
306−#: qml/Shell.qml:267
311+#: qml/Shell.qml:280
307msgid "Sorry, incorrect passphrase"
312msgid "Sorry, incorrect passphrase"
308msgstr "Desculpe, senha incorreta"
313msgstr "Desculpe, senha incorreta"
309
314
@@ -315,29 +320,29 @@ msgstr "Digite sua senha"
315msgid "Sorry, incorrect passcode"
320msgid "Sorry, incorrect passcode"
316msgstr "Desculpe, senha incorreta"
321msgstr "Desculpe, senha incorreta"
317
322
318−#: qml/Shell.qml:273
323+#: qml/Shell.qml:286
319#, qt-format
324#, qt-format
320msgid "Enter your %1"
325msgid "Enter your %1"
321msgstr "Digite o seu %1"
326msgstr "Digite o seu %1"
322
327
323−#: qml/Shell.qml:274
328+#: qml/Shell.qml:287
324#, qt-format
329#, qt-format
325msgid "Sorry, incorrect %1"
330msgid "Sorry, incorrect %1"
326msgstr "Desculpe, %1 incorreto"
331msgstr "Desculpe, %1 incorreto"
327
332
328−#: qml/Shell.qml:310
333+#: qml/Shell.qml:323
329msgid "Sorry, incorrect passphrase."
334msgid "Sorry, incorrect passphrase."
330msgstr "Desculpe, senha incorreta."
335msgstr "Desculpe, senha incorreta."
331
336
332−#: qml/Shell.qml:311
337+#: qml/Shell.qml:324
333msgid "Sorry, incorrect passcode."
338msgid "Sorry, incorrect passcode."
334msgstr "Desculpe, código de acesso incorreto."
339msgstr "Desculpe, código de acesso incorreto."
335
340
336−#: qml/Shell.qml:312
341+#: qml/Shell.qml:325
337msgid "This will be your last attempt."
342msgid "This will be your last attempt."
338msgstr "Esta será a sua última tentativa."
343msgstr "Esta será a sua última tentativa."
339
344
340−#: qml/Shell.qml:314
345+#: qml/Shell.qml:327
341msgid ""
346msgid ""
342"If passphrase is entered incorrectly, your phone will conduct a factory "
347"If passphrase is entered incorrectly, your phone will conduct a factory "
343"reset and all personal data will be deleted."
348"reset and all personal data will be deleted."
@@ -345,19 +350,10 @@ msgstr ""
345"Se a senha for digitada incorretamente, o telefone será restaurado aos "
350"Se a senha for digitada incorretamente, o telefone será restaurado aos "
346"padrões de fábrica e todos os dados pessoais serão apagados."
351"padrões de fábrica e todos os dados pessoais serão apagados."
347
352
348−#: qml/Shell.qml:315
353+#: qml/Shell.qml:328
349msgid ""
354msgid ""
350"If passcode is entered incorrectly, your phone will conduct a factory reset "
355"If passcode is entered incorrectly, your phone will conduct a factory reset "
351"and all personal data will be deleted."
356"and all personal data will be deleted."
352msgstr ""
357msgstr ""
353"Se o código de acesso for digitado incorretamente, o telefone será "
358"Se o código de acesso for digitado incorretamente, o telefone será "
354"restaurado aos padrões de fábrica e todos os dados pessoais serão apagados."
359"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 ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11−"PO-Revision-Date: 2014-08-31 09:24+0000\n"
11+"PO-Revision-Date: 2014-09-20 11:45+0000\n"
12"Last-Translator: Meriuță Cornel <meriutacornel@neacornel.eu>\n"
12"Last-Translator: Meriuță Cornel <meriutacornel@neacornel.eu>\n"
13"Language-Team: Romanian <ro@li.org>\n"
13"Language-Team: Romanian <ro@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-09-01 07:33+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-21 06:25+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20#: plugins/LightDM/Greeter.cpp:130
20#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
@@ -80,6 +80,10 @@ msgstr ""
80msgid "Power off"
80msgid "Power off"
81msgstr "Oprire"
81msgstr "Oprire"
82
82
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr "Repornire"
86+
83#: qml/Components/Dialogs.qml:157
87#: qml/Components/Dialogs.qml:157
84msgid "Cancel"
88msgid "Cancel"
85msgstr "Anulează"
89msgstr "Anulează"
po/ru.po+7−3
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-08-29 08:06+0000\n"
11"PO-Revision-Date: 2014-08-29 08:06+0000\n"
12"Last-Translator: Jay ZDLin <Unknown>\n"
12"Last-Translator: Jay ZDLin <Unknown>\n"
13"Language-Team: Russian <ru@li.org>\n"
13"Language-Team: Russian <ru@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-30 07:46+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20#: plugins/LightDM/Greeter.cpp:130
20#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
@@ -78,6 +78,10 @@ msgstr "Отключить питание?"
78msgid "Power off"
78msgid "Power off"
79msgstr "Отключить"
79msgstr "Отключить"
80
80
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
81#: qml/Components/Dialogs.qml:157
85#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr "Отменить"
87msgstr "Отменить"
po/shn.po+25−20
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2013-10-07 11:46+0000\n"
11"PO-Revision-Date: 2013-10-07 11:46+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Shan <shn@li.org>\n"
13"Language-Team: Shan <shn@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -161,7 +165,8 @@ msgstr ""
161msgid "See all"
165msgid "See all"
162msgstr ""
166msgstr ""
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr ""
171msgstr ""
167
172
@@ -201,11 +206,11 @@ msgstr ""
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr ""
215msgstr ""
211
216
@@ -221,7 +226,7 @@ msgstr ""
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr ""
227msgstr ""
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr ""
231msgstr ""
227
232
@@ -249,7 +254,7 @@ msgstr ""
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr ""
293msgid "Roaming"
298msgid "Roaming"
294msgstr ""
299msgstr ""
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,35 +314,35 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
po/si.po+25−20
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2013-06-26 22:36+0000\n"
11"PO-Revision-Date: 2013-06-26 22:36+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Sinhalese <si@li.org>\n"
13"Language-Team: Sinhalese <si@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -161,7 +165,8 @@ msgstr ""
161msgid "See all"
165msgid "See all"
162msgstr ""
166msgstr ""
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr ""
171msgstr ""
167
172
@@ -201,11 +206,11 @@ msgstr ""
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr ""
215msgstr ""
211
216
@@ -221,7 +226,7 @@ msgstr ""
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr ""
227msgstr ""
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr ""
231msgstr ""
227
232
@@ -249,7 +254,7 @@ msgstr ""
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr ""
293msgid "Roaming"
298msgid "Roaming"
294msgstr ""
299msgstr ""
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,35 +314,35 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
po/sl.po+7−3
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-08-28 06:43+0000\n"
11"PO-Revision-Date: 2014-08-28 06:43+0000\n"
12"Last-Translator: Damir Jerovšek <Unknown>\n"
12"Last-Translator: Damir Jerovšek <Unknown>\n"
13"Language-Team: Slovenian <sl@li.org>\n"
13"Language-Team: Slovenian <sl@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-30 07:46+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20#: plugins/LightDM/Greeter.cpp:130
20#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
@@ -80,6 +80,10 @@ msgstr ""
80msgid "Power off"
80msgid "Power off"
81msgstr "Izklopi"
81msgstr "Izklopi"
82
82
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
83#: qml/Components/Dialogs.qml:157
87#: qml/Components/Dialogs.qml:157
84msgid "Cancel"
88msgid "Cancel"
85msgstr "Prekliči"
89msgstr "Prekliči"
po/sq.po+25−20
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-01-15 13:51+0000\n"
11"PO-Revision-Date: 2014-01-15 13:51+0000\n"
12"Last-Translator: Besmir Zanaj <besmirzanaj@gmail.com>\n"
12"Last-Translator: Besmir Zanaj <besmirzanaj@gmail.com>\n"
13"Language-Team: Albanian <sq@li.org>\n"
13"Language-Team: Albanian <sq@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:33+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -162,7 +166,8 @@ msgstr ""
162msgid "See all"
166msgid "See all"
163msgstr ""
167msgstr ""
164
168
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
166msgid "Search"
171msgid "Search"
167msgstr ""
172msgstr ""
168
173
@@ -202,11 +207,11 @@ msgstr ""
202msgid "Manage Dash"
207msgid "Manage Dash"
203msgstr ""
208msgstr ""
204
209
205−#: qml/Dash/ScopesOverview.qml:408
210+#: qml/Dash/ScopesOverview.qml:417
206msgid "Done"
211msgid "Done"
207msgstr ""
212msgstr ""
208
213
209−#: qml/Dash/ScopesOverview.qml:434
214+#: qml/Dash/ScopesOverview.qml:443
210msgid "Store"
215msgid "Store"
211msgstr ""
216msgstr ""
212
217
@@ -222,7 +227,7 @@ msgstr ""
222msgid "Swipe to unlock"
227msgid "Swipe to unlock"
223msgstr ""
228msgstr ""
224
229
225−#: qml/Hud/HudParametrizedActionsPage.qml:132
230+#: qml/Hud/HudParametrizedActionsPage.qml:139
226msgid "Confirm"
231msgid "Confirm"
227msgstr ""
232msgstr ""
228
233
@@ -250,7 +255,7 @@ msgstr ""
250msgid "Enter SIM PIN"
255msgid "Enter SIM PIN"
251msgstr ""
256msgstr ""
252
257
253−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
258+#: qml/Notifications/NotificationMenuItemFactory.qml:121
254msgid "Sorry, incorrect PIN"
259msgid "Sorry, incorrect PIN"
255msgstr ""
260msgstr ""
256
261
@@ -294,11 +299,11 @@ msgstr ""
294msgid "Roaming"
299msgid "Roaming"
295msgstr ""
300msgstr ""
296
301
297−#: qml/Shell.qml:266
302+#: qml/Shell.qml:279
298msgid "Enter your passphrase"
303msgid "Enter your passphrase"
299msgstr ""
304msgstr ""
300
305
301−#: qml/Shell.qml:267
306+#: qml/Shell.qml:280
302msgid "Sorry, incorrect passphrase"
307msgid "Sorry, incorrect passphrase"
303msgstr ""
308msgstr ""
304
309
@@ -310,35 +315,35 @@ msgstr ""
310msgid "Sorry, incorrect passcode"
315msgid "Sorry, incorrect passcode"
311msgstr ""
316msgstr ""
312
317
313−#: qml/Shell.qml:273
318+#: qml/Shell.qml:286
314#, qt-format
319#, qt-format
315msgid "Enter your %1"
320msgid "Enter your %1"
316msgstr ""
321msgstr ""
317
322
318−#: qml/Shell.qml:274
323+#: qml/Shell.qml:287
319#, qt-format
324#, qt-format
320msgid "Sorry, incorrect %1"
325msgid "Sorry, incorrect %1"
321msgstr ""
326msgstr ""
322
327
323−#: qml/Shell.qml:310
328+#: qml/Shell.qml:323
324msgid "Sorry, incorrect passphrase."
329msgid "Sorry, incorrect passphrase."
325msgstr ""
330msgstr ""
326
331
327−#: qml/Shell.qml:311
332+#: qml/Shell.qml:324
328msgid "Sorry, incorrect passcode."
333msgid "Sorry, incorrect passcode."
329msgstr ""
334msgstr ""
330
335
331−#: qml/Shell.qml:312
336+#: qml/Shell.qml:325
332msgid "This will be your last attempt."
337msgid "This will be your last attempt."
333msgstr ""
338msgstr ""
334
339
335−#: qml/Shell.qml:314
340+#: qml/Shell.qml:327
336msgid ""
341msgid ""
337"If passphrase is entered incorrectly, your phone will conduct a factory "
342"If passphrase is entered incorrectly, your phone will conduct a factory "
338"reset and all personal data will be deleted."
343"reset and all personal data will be deleted."
339msgstr ""
344msgstr ""
340
345
341−#: qml/Shell.qml:315
346+#: qml/Shell.qml:328
342msgid ""
347msgid ""
343"If passcode is entered incorrectly, your phone will conduct a factory reset "
348"If passcode is entered incorrectly, your phone will conduct a factory reset "
344"and all personal data will be deleted."
349"and all personal data will be deleted."
po/sr.po+7−3
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-08-30 11:46+0000\n"
11"PO-Revision-Date: 2014-08-30 11:46+0000\n"
12"Last-Translator: Данило Шеган <Unknown>\n"
12"Last-Translator: Данило Шеган <Unknown>\n"
13"Language-Team: Serbian <sr@li.org>\n"
13"Language-Team: Serbian <sr@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-31 07:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17176)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20#: plugins/LightDM/Greeter.cpp:130
20#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
@@ -80,6 +80,10 @@ msgstr ""
80msgid "Power off"
80msgid "Power off"
81msgstr "Искључи"
81msgstr "Искључи"
82
82
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr ""
86+
83#: qml/Components/Dialogs.qml:157
87#: qml/Components/Dialogs.qml:157
84msgid "Cancel"
88msgid "Cancel"
85msgstr "Откажи"
89msgstr "Откажи"
po/sv.po+60−52
@@ -7,18 +7,18 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11−"PO-Revision-Date: 2014-08-14 18:22+0000\n"
11+"PO-Revision-Date: 2014-09-08 15:57+0000\n"
12−"Last-Translator: Erik Simmesgård <Unknown>\n"
12+"Last-Translator: Josef Andersson <Unknown>\n"
13"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
13"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19"Language: sv\n"
19"Language: sv\n"
20
20
21−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
23msgstr "Lösenord: "
23msgstr "Lösenord: "
24
24
@@ -33,53 +33,59 @@ msgstr "Släpp genväg"
33
33
34#: qml/Components/Dialogs.qml:70
34#: qml/Components/Dialogs.qml:70
35msgid "Log out"
35msgid "Log out"
36−msgstr ""
36+msgstr "Logga ut"
37
37
38#: qml/Components/Dialogs.qml:71
38#: qml/Components/Dialogs.qml:71
39msgid "Are you sure you want to log out?"
39msgid "Are you sure you want to log out?"
40−msgstr ""
40+msgstr "Är du säker på att du vill logga ut?"
41
41
42#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
42#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
43#: qml/Components/Dialogs.qml:122
43#: qml/Components/Dialogs.qml:122
44msgid "No"
44msgid "No"
45−msgstr ""
45+msgstr "Nej"
46
46
47#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
47#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
48#: qml/Components/Dialogs.qml:129
48#: qml/Components/Dialogs.qml:129
49msgid "Yes"
49msgid "Yes"
50−msgstr ""
50+msgstr "Ja"
51
51
52#: qml/Components/Dialogs.qml:94
52#: qml/Components/Dialogs.qml:94
53msgid "Shut down"
53msgid "Shut down"
54−msgstr ""
54+msgstr "Stäng av"
55
55
56#: qml/Components/Dialogs.qml:95
56#: qml/Components/Dialogs.qml:95
57msgid "Are you sure you want to shut down?"
57msgid "Are you sure you want to shut down?"
58−msgstr ""
58+msgstr "Är du säker på att du vill stänga av?"
59
59
60#: qml/Components/Dialogs.qml:119
60#: qml/Components/Dialogs.qml:119
61msgid "Reboot"
61msgid "Reboot"
62−msgstr ""
62+msgstr "Starta om"
63
63
64#: qml/Components/Dialogs.qml:120
64#: qml/Components/Dialogs.qml:120
65msgid "Are you sure you want to reboot?"
65msgid "Are you sure you want to reboot?"
66−msgstr ""
66+msgstr "Är du säker på att du vill starta om?"
67
67
68#: qml/Components/Dialogs.qml:144
68#: qml/Components/Dialogs.qml:144
69msgid "Power"
69msgid "Power"
70−msgstr ""
70+msgstr "Ström"
71
71
72#: qml/Components/Dialogs.qml:145
72#: qml/Components/Dialogs.qml:145
73msgid ""
73msgid ""
74"Are you sure you would like\n"
74"Are you sure you would like\n"
75"to power off?"
75"to power off?"
76msgstr ""
76msgstr ""
77+"Är du säker på att du vill \n"
78+"stänga av?"
77
79
78−#: qml/Components/Dialogs.qml:144
80+#: qml/Components/Dialogs.qml:147
79msgid "Power off"
81msgid "Power off"
82+msgstr "Stäng av"
83+
84+#: qml/Components/Dialogs.qml:157
85+msgid "Restart"
80msgstr ""
86msgstr ""
81
87
82−#: qml/Components/Dialogs.qml:162
88+#: qml/Components/Dialogs.qml:157
83msgid "Cancel"
89msgid "Cancel"
84msgstr "Avbryt"
90msgstr "Avbryt"
85
91
@@ -137,7 +143,7 @@ msgstr "Var god vänta"
137
143
138#: qml/Components/Lockscreen.qml:172
144#: qml/Components/Lockscreen.qml:172
139msgid "Too many incorrect attempts"
145msgid "Too many incorrect attempts"
140−msgstr ""
146+msgstr "För många felaktiga försök"
141
147
142#: qml/Components/Lockscreen.qml:206
148#: qml/Components/Lockscreen.qml:206
143msgid "Emergency Call"
149msgid "Emergency Call"
@@ -164,21 +170,22 @@ msgstr "Visa mindre"
164msgid "See all"
170msgid "See all"
165msgstr "Visa alla"
171msgstr "Visa alla"
166
172
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
168msgid "Search"
175msgid "Search"
169msgstr "Sök"
176msgstr "Sök"
170
177
171#: qml/Dash/PageHeader.qml:270
178#: qml/Dash/PageHeader.qml:270
172msgid "Settings"
179msgid "Settings"
173−msgstr ""
180+msgstr "Inställningar"
174
181
175#: qml/Dash/PageHeader.qml:279
182#: qml/Dash/PageHeader.qml:279
176msgid "Remove from Favorites"
183msgid "Remove from Favorites"
177−msgstr ""
184+msgstr "Ta bort från Favoriter"
178
185
179#: qml/Dash/PageHeader.qml:279
186#: qml/Dash/PageHeader.qml:279
180msgid "Add to Favorites"
187msgid "Add to Favorites"
181−msgstr ""
188+msgstr "Lägg till Favoriter"
182
189
183#: qml/Dash/Previews/PreviewActionCombo.qml:34
190#: qml/Dash/Previews/PreviewActionCombo.qml:34
184msgid "More..."
191msgid "More..."
@@ -202,15 +209,15 @@ msgstr "Skicka"
202
209
203#: qml/Dash/ScopesOverview.qml:201
210#: qml/Dash/ScopesOverview.qml:201
204msgid "Manage Dash"
211msgid "Manage Dash"
205−msgstr ""
212+msgstr "Hantera Dash"
206
213
207−#: qml/Dash/ScopesOverview.qml:408
214+#: qml/Dash/ScopesOverview.qml:417
208msgid "Done"
215msgid "Done"
209−msgstr ""
216+msgstr "Klar"
210
217
211−#: qml/Dash/ScopesOverview.qml:434
218+#: qml/Dash/ScopesOverview.qml:443
212msgid "Store"
219msgid "Store"
213−msgstr ""
220+msgstr "Butik"
214
221
215#: qml/Dash/ScopesOverviewTab.qml:36
222#: qml/Dash/ScopesOverviewTab.qml:36
216msgid "Favorites"
223msgid "Favorites"
@@ -218,13 +225,13 @@ msgstr "Favoriter"
218
225
219#: qml/Dash/ScopesOverviewTab.qml:54
226#: qml/Dash/ScopesOverviewTab.qml:54
220msgid "All"
227msgid "All"
221−msgstr ""
228+msgstr "Alla"
222
229
223#: qml/Greeter/Greeter.qml:157
230#: qml/Greeter/Greeter.qml:157
224msgid "Swipe to unlock"
231msgid "Swipe to unlock"
225msgstr "Svep för att låsa upp"
232msgstr "Svep för att låsa upp"
226
233
227−#: qml/Hud/HudParametrizedActionsPage.qml:132
234+#: qml/Hud/HudParametrizedActionsPage.qml:139
228msgid "Confirm"
235msgid "Confirm"
229msgstr "Bekräfta"
236msgstr "Bekräfta"
230
237
@@ -250,11 +257,11 @@ msgstr "Visa lösenord"
250
257
251#: qml/Notifications/NotificationMenuItemFactory.qml:120
258#: qml/Notifications/NotificationMenuItemFactory.qml:120
252msgid "Enter SIM PIN"
259msgid "Enter SIM PIN"
253−msgstr ""
260+msgstr "Ange SIM PIN-kod"
254
261
255−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
262+#: qml/Notifications/NotificationMenuItemFactory.qml:121
256msgid "Sorry, incorrect PIN"
263msgid "Sorry, incorrect PIN"
257−msgstr ""
264+msgstr "Felaktig PIN"
258
265
259#: qml/Panel/ActiveCallHint.qml:77
266#: qml/Panel/ActiveCallHint.qml:77
260msgid "Tap to return to call..."
267msgid "Tap to return to call..."
@@ -296,55 +303,56 @@ msgstr "Lås upp SIM-kort"
296msgid "Roaming"
303msgid "Roaming"
297msgstr "Roaming"
304msgstr "Roaming"
298
305
299−#: qml/Shell.qml:266
306+#: qml/Shell.qml:279
300msgid "Enter your passphrase"
307msgid "Enter your passphrase"
301−msgstr ""
308+msgstr "Ange din lösenfras"
302
309
303−#: qml/Shell.qml:267
310+#: qml/Shell.qml:280
304msgid "Sorry, incorrect passphrase"
311msgid "Sorry, incorrect passphrase"
305−msgstr ""
312+msgstr "Felaktig lösenfras"
306
313
307#: qml/Shell.qml:282
314#: qml/Shell.qml:282
308msgid "Enter your passcode"
315msgid "Enter your passcode"
309−msgstr ""
316+msgstr "Ange din lösenkod"
310
317
311#: qml/Shell.qml:283
318#: qml/Shell.qml:283
312msgid "Sorry, incorrect passcode"
319msgid "Sorry, incorrect passcode"
313−msgstr ""
320+msgstr "Felaktig lösenkod"
314
321
315−#: qml/Shell.qml:273
322+#: qml/Shell.qml:286
316#, qt-format
323#, qt-format
317msgid "Enter your %1"
324msgid "Enter your %1"
318msgstr "Skriv in din %1"
325msgstr "Skriv in din %1"
319
326
320−#: qml/Shell.qml:274
327+#: qml/Shell.qml:287
321#, qt-format
328#, qt-format
322msgid "Sorry, incorrect %1"
329msgid "Sorry, incorrect %1"
323−msgstr ""
330+msgstr "Felaktig %1"
324
331
325−#: qml/Shell.qml:310
332+#: qml/Shell.qml:323
326msgid "Sorry, incorrect passphrase."
333msgid "Sorry, incorrect passphrase."
327−msgstr ""
334+msgstr "Felaktig lösenfras."
328
335
329−#: qml/Shell.qml:311
336+#: qml/Shell.qml:324
330msgid "Sorry, incorrect passcode."
337msgid "Sorry, incorrect passcode."
331−msgstr ""
338+msgstr "Felaktig lösenkod."
332
339
333−#: qml/Shell.qml:312
340+#: qml/Shell.qml:325
334msgid "This will be your last attempt."
341msgid "This will be your last attempt."
335−msgstr ""
342+msgstr "Detta är ditt sista försök."
336
343
337−#: qml/Shell.qml:314
344+#: qml/Shell.qml:327
338msgid ""
345msgid ""
339"If passphrase is entered incorrectly, your phone will conduct a factory "
346"If passphrase is entered incorrectly, your phone will conduct a factory "
340"reset and all personal data will be deleted."
347"reset and all personal data will be deleted."
341msgstr ""
348msgstr ""
349+"Om lösenfrasen anges inkorrekt kommer telefonen att fabrikåterställas och "
350+"all personlig data kommer att tas bort."
342
351
343−#: qml/Shell.qml:315
352+#: qml/Shell.qml:328
344msgid ""
353msgid ""
345"If passcode is entered incorrectly, your phone will conduct a factory reset "
354"If passcode is entered incorrectly, your phone will conduct a factory reset "
346"and all personal data will be deleted."
355"and all personal data will be deleted."
347msgstr ""
356msgstr ""
348−
357+"Om lösenkoden anges felaktigt kommer telefonen att fabrikåterställas och all "
349−#~ msgid "Restart"
358+"personlig data kommer att tas bort."
350−#~ msgstr "Starta om"
po/sw.po+25−20
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-01-14 19:28+0000\n"
11"PO-Revision-Date: 2014-01-14 19:28+0000\n"
12"Last-Translator: Damas <Unknown>\n"
12"Last-Translator: Damas <Unknown>\n"
13"Language-Team: Swahili <sw@li.org>\n"
13"Language-Team: Swahili <sw@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -161,7 +165,8 @@ msgstr ""
161msgid "See all"
165msgid "See all"
162msgstr ""
166msgstr ""
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr "Tafuta"
171msgstr "Tafuta"
167
172
@@ -201,11 +206,11 @@ msgstr "Tuma"
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr ""
215msgstr ""
211
216
@@ -221,7 +226,7 @@ msgstr ""
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr ""
227msgstr ""
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr "Thibitisha"
231msgstr "Thibitisha"
227
232
@@ -249,7 +254,7 @@ msgstr ""
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr ""
293msgid "Roaming"
298msgid "Roaming"
294msgstr ""
299msgstr ""
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,35 +314,35 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
po/ta.po+25−20
@@ -7,18 +7,18 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2013-10-24 11:36+0000\n"
11"PO-Revision-Date: 2013-10-24 11:36+0000\n"
12"Last-Translator: Arun Kumar - அருண் குமார் <thangam.arunx@gmail.com>\n"
12"Last-Translator: Arun Kumar - அருண் குமார் <thangam.arunx@gmail.com>\n"
13"Language-Team: Ubuntu Tamil Team/Free Tamil Computing/Thamizha\n"
13"Language-Team: Ubuntu Tamil Team/Free Tamil Computing/Thamizha\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19"Language: ta\n"
19"Language: ta\n"
20
20
21−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
22msgid "Password: "
22msgid "Password: "
23msgstr ""
23msgstr ""
24
24
@@ -75,11 +75,15 @@ msgid ""
75"to power off?"
75"to power off?"
76msgstr ""
76msgstr ""
77
77
78−#: qml/Components/Dialogs.qml:144
78+#: qml/Components/Dialogs.qml:147
79msgid "Power off"
79msgid "Power off"
80msgstr ""
80msgstr ""
81
81
82−#: qml/Components/Dialogs.qml:162
82+#: qml/Components/Dialogs.qml:157
83+msgid "Restart"
84+msgstr ""
85+
86+#: qml/Components/Dialogs.qml:157
83msgid "Cancel"
87msgid "Cancel"
84msgstr ""
88msgstr ""
85
89
@@ -164,7 +168,8 @@ msgstr ""
164msgid "See all"
168msgid "See all"
165msgstr ""
169msgstr ""
166
170
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
168msgid "Search"
173msgid "Search"
169msgstr "தெடு"
174msgstr "தெடு"
170
175
@@ -204,11 +209,11 @@ msgstr "அனுப்பு"
204msgid "Manage Dash"
209msgid "Manage Dash"
205msgstr ""
210msgstr ""
206
211
207−#: qml/Dash/ScopesOverview.qml:408
212+#: qml/Dash/ScopesOverview.qml:417
208msgid "Done"
213msgid "Done"
209msgstr ""
214msgstr ""
210
215
211−#: qml/Dash/ScopesOverview.qml:434
216+#: qml/Dash/ScopesOverview.qml:443
212msgid "Store"
217msgid "Store"
213msgstr ""
218msgstr ""
214
219
@@ -224,7 +229,7 @@ msgstr ""
224msgid "Swipe to unlock"
229msgid "Swipe to unlock"
225msgstr ""
230msgstr ""
226
231
227−#: qml/Hud/HudParametrizedActionsPage.qml:132
232+#: qml/Hud/HudParametrizedActionsPage.qml:139
228msgid "Confirm"
233msgid "Confirm"
229msgstr "உறுதிப்படுத்து"
234msgstr "உறுதிப்படுத்து"
230
235
@@ -252,7 +257,7 @@ msgstr ""
252msgid "Enter SIM PIN"
257msgid "Enter SIM PIN"
253msgstr ""
258msgstr ""
254
259
255−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
260+#: qml/Notifications/NotificationMenuItemFactory.qml:121
256msgid "Sorry, incorrect PIN"
261msgid "Sorry, incorrect PIN"
257msgstr ""
262msgstr ""
258
263
@@ -296,11 +301,11 @@ msgstr ""
296msgid "Roaming"
301msgid "Roaming"
297msgstr ""
302msgstr ""
298
303
299−#: qml/Shell.qml:266
304+#: qml/Shell.qml:279
300msgid "Enter your passphrase"
305msgid "Enter your passphrase"
301msgstr ""
306msgstr ""
302
307
303−#: qml/Shell.qml:267
308+#: qml/Shell.qml:280
304msgid "Sorry, incorrect passphrase"
309msgid "Sorry, incorrect passphrase"
305msgstr ""
310msgstr ""
306
311
@@ -312,35 +317,35 @@ msgstr ""
312msgid "Sorry, incorrect passcode"
317msgid "Sorry, incorrect passcode"
313msgstr ""
318msgstr ""
314
319
315−#: qml/Shell.qml:273
320+#: qml/Shell.qml:286
316#, qt-format
321#, qt-format
317msgid "Enter your %1"
322msgid "Enter your %1"
318msgstr ""
323msgstr ""
319
324
320−#: qml/Shell.qml:274
325+#: qml/Shell.qml:287
321#, qt-format
326#, qt-format
322msgid "Sorry, incorrect %1"
327msgid "Sorry, incorrect %1"
323msgstr ""
328msgstr ""
324
329
325−#: qml/Shell.qml:310
330+#: qml/Shell.qml:323
326msgid "Sorry, incorrect passphrase."
331msgid "Sorry, incorrect passphrase."
327msgstr ""
332msgstr ""
328
333
329−#: qml/Shell.qml:311
334+#: qml/Shell.qml:324
330msgid "Sorry, incorrect passcode."
335msgid "Sorry, incorrect passcode."
331msgstr ""
336msgstr ""
332
337
333−#: qml/Shell.qml:312
338+#: qml/Shell.qml:325
334msgid "This will be your last attempt."
339msgid "This will be your last attempt."
335msgstr ""
340msgstr ""
336
341
337−#: qml/Shell.qml:314
342+#: qml/Shell.qml:327
338msgid ""
343msgid ""
339"If passphrase is entered incorrectly, your phone will conduct a factory "
344"If passphrase is entered incorrectly, your phone will conduct a factory "
340"reset and all personal data will be deleted."
345"reset and all personal data will be deleted."
341msgstr ""
346msgstr ""
342
347
343−#: qml/Shell.qml:315
348+#: qml/Shell.qml:328
344msgid ""
349msgid ""
345"If passcode is entered incorrectly, your phone will conduct a factory reset "
350"If passcode is entered incorrectly, your phone will conduct a factory reset "
346"and all personal data will be deleted."
351"and all personal data will be deleted."
po/te.po+25−20
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-07-19 10:04+0000\n"
11"PO-Revision-Date: 2014-07-19 10:04+0000\n"
12"Last-Translator: Praveen Illa <mail2ipn@gmail.com>\n"
12"Last-Translator: Praveen Illa <mail2ipn@gmail.com>\n"
13"Language-Team: Telugu <te@li.org>\n"
13"Language-Team: Telugu <te@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -161,7 +165,8 @@ msgstr ""
161msgid "See all"
165msgid "See all"
162msgstr ""
166msgstr ""
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr "వెతుకు"
171msgstr "వెతుకు"
167
172
@@ -201,11 +206,11 @@ msgstr "పంపు"
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr ""
215msgstr ""
211
216
@@ -221,7 +226,7 @@ msgstr ""
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr "తాళంతీయుటకు గీకండి"
227msgstr "తాళంతీయుటకు గీకండి"
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr "నిర్ధారించండి"
231msgstr "నిర్ధారించండి"
227
232
@@ -249,7 +254,7 @@ msgstr "సంకేతపదాన్ని చూపించు"
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr ""
293msgid "Roaming"
298msgid "Roaming"
294msgstr ""
299msgstr ""
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,35 +314,35 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
po/tr.po+51−42
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-07-16 17:58+0000\n"
11"PO-Revision-Date: 2014-07-16 17:58+0000\n"
12"Last-Translator: Volkan Gezer <Unknown>\n"
12"Last-Translator: Volkan Gezer <Unknown>\n"
13"Language-Team: Turkish <tr@li.org>\n"
13"Language-Team: Turkish <tr@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -41,16 +41,16 @@ msgstr ""
41#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
41#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
42#: qml/Components/Dialogs.qml:122
42#: qml/Components/Dialogs.qml:122
43msgid "No"
43msgid "No"
44−msgstr ""
44+msgstr "Hayır"
45
45
46#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
46#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
47#: qml/Components/Dialogs.qml:129
47#: qml/Components/Dialogs.qml:129
48msgid "Yes"
48msgid "Yes"
49−msgstr ""
49+msgstr "Evet"
50
50
51#: qml/Components/Dialogs.qml:94
51#: qml/Components/Dialogs.qml:94
52msgid "Shut down"
52msgid "Shut down"
53−msgstr ""
53+msgstr "Bilgisayarı Kapat"
54
54
55#: qml/Components/Dialogs.qml:95
55#: qml/Components/Dialogs.qml:95
56msgid "Are you sure you want to shut down?"
56msgid "Are you sure you want to shut down?"
@@ -58,11 +58,11 @@ msgstr ""
58
58
59#: qml/Components/Dialogs.qml:119
59#: qml/Components/Dialogs.qml:119
60msgid "Reboot"
60msgid "Reboot"
61−msgstr ""
61+msgstr "Yeniden başlat"
62
62
63#: qml/Components/Dialogs.qml:120
63#: qml/Components/Dialogs.qml:120
64msgid "Are you sure you want to reboot?"
64msgid "Are you sure you want to reboot?"
65−msgstr ""
65+msgstr "Bilgisayarı yeniden başlatmak istediğinize emin misiniz?"
66
66
67#: qml/Components/Dialogs.qml:144
67#: qml/Components/Dialogs.qml:144
68msgid "Power"
68msgid "Power"
@@ -72,13 +72,17 @@ msgstr ""
72msgid ""
72msgid ""
73"Are you sure you would like\n"
73"Are you sure you would like\n"
74"to power off?"
74"to power off?"
75−msgstr ""
75+msgstr "Bilgisayarı kapatmak istediğinize emin misiniz?"
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -137,7 +141,7 @@ msgstr ""
137
141
138#: qml/Components/Lockscreen.qml:172
142#: qml/Components/Lockscreen.qml:172
139msgid "Too many incorrect attempts"
143msgid "Too many incorrect attempts"
140−msgstr ""
144+msgstr "Çok fazla hatalı deneme yaptınız"
141
145
142#: qml/Components/Lockscreen.qml:206
146#: qml/Components/Lockscreen.qml:206
143msgid "Emergency Call"
147msgid "Emergency Call"
@@ -162,9 +166,10 @@ msgstr "Daha azını gör"
162
166
163#: qml/Dash/GenericScopeView.qml:361
167#: qml/Dash/GenericScopeView.qml:361
164msgid "See all"
168msgid "See all"
165−msgstr ""
169+msgstr "Tümünü gör"
166
170
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
168msgid "Search"
173msgid "Search"
169msgstr "Ara"
174msgstr "Ara"
170
175
@@ -178,11 +183,11 @@ msgstr ""
178
183
179#: qml/Dash/PageHeader.qml:279
184#: qml/Dash/PageHeader.qml:279
180msgid "Add to Favorites"
185msgid "Add to Favorites"
181−msgstr ""
186+msgstr "Yer İmlerine Ekle"
182
187
183#: qml/Dash/Previews/PreviewActionCombo.qml:34
188#: qml/Dash/Previews/PreviewActionCombo.qml:34
184msgid "More..."
189msgid "More..."
185−msgstr "Daha fazlası..."
190+msgstr "Daha Fazla..."
186
191
187#: qml/Dash/Previews/PreviewActionCombo.qml:34
192#: qml/Dash/Previews/PreviewActionCombo.qml:34
188msgid "Less..."
193msgid "Less..."
@@ -204,13 +209,13 @@ msgstr "Gönder"
204msgid "Manage Dash"
209msgid "Manage Dash"
205msgstr ""
210msgstr ""
206
211
207−#: qml/Dash/ScopesOverview.qml:408
212+#: qml/Dash/ScopesOverview.qml:417
208msgid "Done"
213msgid "Done"
209−msgstr ""
214+msgstr "Bitti"
210
215
211−#: qml/Dash/ScopesOverview.qml:434
216+#: qml/Dash/ScopesOverview.qml:443
212msgid "Store"
217msgid "Store"
213−msgstr ""
218+msgstr "Mağaza"
214
219
215#: qml/Dash/ScopesOverviewTab.qml:36
220#: qml/Dash/ScopesOverviewTab.qml:36
216msgid "Favorites"
221msgid "Favorites"
@@ -224,7 +229,7 @@ msgstr ""
224msgid "Swipe to unlock"
229msgid "Swipe to unlock"
225msgstr "Açmak için kaydırın"
230msgstr "Açmak için kaydırın"
226
231
227−#: qml/Hud/HudParametrizedActionsPage.qml:132
232+#: qml/Hud/HudParametrizedActionsPage.qml:139
228msgid "Confirm"
233msgid "Confirm"
229msgstr "Onayla"
234msgstr "Onayla"
230
235
@@ -252,9 +257,9 @@ msgstr "Parolayı göster"
252msgid "Enter SIM PIN"
257msgid "Enter SIM PIN"
253msgstr ""
258msgstr ""
254
259
255−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
260+#: qml/Notifications/NotificationMenuItemFactory.qml:121
256msgid "Sorry, incorrect PIN"
261msgid "Sorry, incorrect PIN"
257−msgstr ""
262+msgstr "Üzgünüm, hatalı PIN"
258
263
259#: qml/Panel/ActiveCallHint.qml:77
264#: qml/Panel/ActiveCallHint.qml:77
260msgid "Tap to return to call..."
265msgid "Tap to return to call..."
@@ -290,58 +295,62 @@ msgstr "Başarısız, yeniden denemek için dokunun"
290
295
291#: qml/Panel/Indicators/ModemInfoItem.qml:105
296#: qml/Panel/Indicators/ModemInfoItem.qml:105
292msgid "Unlock SIM"
297msgid "Unlock SIM"
293−msgstr ""
298+msgstr "SIM kilidini aç"
294
299
295#: qml/Panel/Indicators/RoamingIndication.qml:27
300#: qml/Panel/Indicators/RoamingIndication.qml:27
296msgid "Roaming"
301msgid "Roaming"
297msgstr ""
302msgstr ""
298
303
299−#: qml/Shell.qml:266
304+#: qml/Shell.qml:279
300msgid "Enter your passphrase"
305msgid "Enter your passphrase"
301−msgstr ""
306+msgstr "Parolanızı girin"
302
307
303−#: qml/Shell.qml:267
308+#: qml/Shell.qml:280
304msgid "Sorry, incorrect passphrase"
309msgid "Sorry, incorrect passphrase"
305−msgstr ""
310+msgstr "Üzgünüm, hatalı parola"
306
311
307#: qml/Shell.qml:282
312#: qml/Shell.qml:282
308msgid "Enter your passcode"
313msgid "Enter your passcode"
309−msgstr ""
314+msgstr "Parolanızı girin"
310
315
311#: qml/Shell.qml:283
316#: qml/Shell.qml:283
312msgid "Sorry, incorrect passcode"
317msgid "Sorry, incorrect passcode"
313−msgstr ""
318+msgstr "Üzgünüm, hatalı parola"
314
319
315−#: qml/Shell.qml:273
320+#: qml/Shell.qml:286
316#, qt-format
321#, qt-format
317msgid "Enter your %1"
322msgid "Enter your %1"
318msgstr ""
323msgstr ""
319
324
320−#: qml/Shell.qml:274
325+#: qml/Shell.qml:287
321#, qt-format
326#, qt-format
322msgid "Sorry, incorrect %1"
327msgid "Sorry, incorrect %1"
323−msgstr ""
328+msgstr "Üzgünüm, hatalı %1"
324
329
325−#: qml/Shell.qml:310
330+#: qml/Shell.qml:323
326msgid "Sorry, incorrect passphrase."
331msgid "Sorry, incorrect passphrase."
327−msgstr ""
332+msgstr "Üzgünüm, hatalı parola."
328
333
329−#: qml/Shell.qml:311
334+#: qml/Shell.qml:324
330msgid "Sorry, incorrect passcode."
335msgid "Sorry, incorrect passcode."
331−msgstr ""
336+msgstr "Üzgünüm, hatalı parola."
332
337
333−#: qml/Shell.qml:312
338+#: qml/Shell.qml:325
334msgid "This will be your last attempt."
339msgid "This will be your last attempt."
335−msgstr ""
340+msgstr "Bu son denemeniz olacak."
336
341
337−#: qml/Shell.qml:314
342+#: qml/Shell.qml:327
338msgid ""
343msgid ""
339"If passphrase is entered incorrectly, your phone will conduct a factory "
344"If passphrase is entered incorrectly, your phone will conduct a factory "
340"reset and all personal data will be deleted."
345"reset and all personal data will be deleted."
341msgstr ""
346msgstr ""
347+"Eğer hatalı parola girilirse, telefonunuz fabrika ayarlarına dönecek ve tüm "
348+"kişisel verileriniz silinecek."
342
349
343−#: qml/Shell.qml:315
350+#: qml/Shell.qml:328
344msgid ""
351msgid ""
345"If passcode is entered incorrectly, your phone will conduct a factory reset "
352"If passcode is entered incorrectly, your phone will conduct a factory reset "
346"and all personal data will be deleted."
353"and all personal data will be deleted."
347msgstr ""
354msgstr ""
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 ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-07-29 04:06+0000\n"
11"PO-Revision-Date: 2014-07-29 04:06+0000\n"
12"Last-Translator: Gheyret T.Kenji <Unknown>\n"
12"Last-Translator: Gheyret T.Kenji <Unknown>\n"
13"Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
13"Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -163,7 +167,8 @@ msgstr "ئازراق كۆرۈش"
163msgid "See all"
167msgid "See all"
164msgstr "ھەممىنى كۆرۈش…"
168msgstr "ھەممىنى كۆرۈش…"
165
169
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
167msgid "Search"
172msgid "Search"
168msgstr "ئىزدە"
173msgstr "ئىزدە"
169
174
@@ -203,11 +208,11 @@ msgstr "ئەۋەت"
203msgid "Manage Dash"
208msgid "Manage Dash"
204msgstr ""
209msgstr ""
205
210
206−#: qml/Dash/ScopesOverview.qml:408
211+#: qml/Dash/ScopesOverview.qml:417
207msgid "Done"
212msgid "Done"
208msgstr ""
213msgstr ""
209
214
210−#: qml/Dash/ScopesOverview.qml:434
215+#: qml/Dash/ScopesOverview.qml:443
211msgid "Store"
216msgid "Store"
212msgstr ""
217msgstr ""
213
218
@@ -223,7 +228,7 @@ msgstr ""
223msgid "Swipe to unlock"
228msgid "Swipe to unlock"
224msgstr "سىيرىسىڭىز قۇلۇپسىزلىنىدۇ"
229msgstr "سىيرىسىڭىز قۇلۇپسىزلىنىدۇ"
225
230
226−#: qml/Hud/HudParametrizedActionsPage.qml:132
231+#: qml/Hud/HudParametrizedActionsPage.qml:139
227msgid "Confirm"
232msgid "Confirm"
228msgstr "جەزملە"
233msgstr "جەزملە"
229
234
@@ -251,7 +256,7 @@ msgstr "ئىم كۆرسەت"
251msgid "Enter SIM PIN"
256msgid "Enter SIM PIN"
252msgstr ""
257msgstr ""
253
258
254−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
259+#: qml/Notifications/NotificationMenuItemFactory.qml:121
255msgid "Sorry, incorrect PIN"
260msgid "Sorry, incorrect PIN"
256msgstr ""
261msgstr ""
257
262
@@ -295,11 +300,11 @@ msgstr ""
295msgid "Roaming"
300msgid "Roaming"
296msgstr ""
301msgstr ""
297
302
298−#: qml/Shell.qml:266
303+#: qml/Shell.qml:279
299msgid "Enter your passphrase"
304msgid "Enter your passphrase"
300msgstr ""
305msgstr ""
301
306
302−#: qml/Shell.qml:267
307+#: qml/Shell.qml:280
303msgid "Sorry, incorrect passphrase"
308msgid "Sorry, incorrect passphrase"
304msgstr ""
309msgstr ""
305
310
@@ -311,35 +316,35 @@ msgstr ""
311msgid "Sorry, incorrect passcode"
316msgid "Sorry, incorrect passcode"
312msgstr ""
317msgstr ""
313
318
314−#: qml/Shell.qml:273
319+#: qml/Shell.qml:286
315#, qt-format
320#, qt-format
316msgid "Enter your %1"
321msgid "Enter your %1"
317msgstr ""
322msgstr ""
318
323
319−#: qml/Shell.qml:274
324+#: qml/Shell.qml:287
320#, qt-format
325#, qt-format
321msgid "Sorry, incorrect %1"
326msgid "Sorry, incorrect %1"
322msgstr ""
327msgstr ""
323
328
324−#: qml/Shell.qml:310
329+#: qml/Shell.qml:323
325msgid "Sorry, incorrect passphrase."
330msgid "Sorry, incorrect passphrase."
326msgstr ""
331msgstr ""
327
332
328−#: qml/Shell.qml:311
333+#: qml/Shell.qml:324
329msgid "Sorry, incorrect passcode."
334msgid "Sorry, incorrect passcode."
330msgstr ""
335msgstr ""
331
336
332−#: qml/Shell.qml:312
337+#: qml/Shell.qml:325
333msgid "This will be your last attempt."
338msgid "This will be your last attempt."
334msgstr ""
339msgstr ""
335
340
336−#: qml/Shell.qml:314
341+#: qml/Shell.qml:327
337msgid ""
342msgid ""
338"If passphrase is entered incorrectly, your phone will conduct a factory "
343"If passphrase is entered incorrectly, your phone will conduct a factory "
339"reset and all personal data will be deleted."
344"reset and all personal data will be deleted."
340msgstr ""
345msgstr ""
341
346
342−#: qml/Shell.qml:315
347+#: qml/Shell.qml:328
343msgid ""
348msgid ""
344"If passcode is entered incorrectly, your phone will conduct a factory reset "
349"If passcode is entered incorrectly, your phone will conduct a factory reset "
345"and all personal data will be deleted."
350"and all personal data will be deleted."
po/uk.po+41−43
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-08-26 19:06+0000\n"
11"PO-Revision-Date: 2014-08-26 19:06+0000\n"
12"Last-Translator: Yuri Chornoivan <yurchor@gmail.com>\n"
12"Last-Translator: Yuri Chornoivan <yurchor@gmail.com>\n"
13"Language-Team: Ukrainian <uk@li.org>\n"
13"Language-Team: Ukrainian <uk@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr "Пароль: "
22msgstr "Пароль: "
23
23
@@ -32,53 +32,59 @@ msgstr "Розблокувати кнопку"
32
32
33#: qml/Components/Dialogs.qml:70
33#: qml/Components/Dialogs.qml:70
34msgid "Log out"
34msgid "Log out"
35−msgstr ""
35+msgstr "Вийти"
36
36
37#: qml/Components/Dialogs.qml:71
37#: qml/Components/Dialogs.qml:71
38msgid "Are you sure you want to log out?"
38msgid "Are you sure you want to log out?"
39−msgstr ""
39+msgstr "Ви справді хочете вийти?"
40
40
41#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
41#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
42#: qml/Components/Dialogs.qml:122
42#: qml/Components/Dialogs.qml:122
43msgid "No"
43msgid "No"
44−msgstr ""
44+msgstr "Ні"
45
45
46#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
46#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
47#: qml/Components/Dialogs.qml:129
47#: qml/Components/Dialogs.qml:129
48msgid "Yes"
48msgid "Yes"
49−msgstr ""
49+msgstr "Так"
50
50
51#: qml/Components/Dialogs.qml:94
51#: qml/Components/Dialogs.qml:94
52msgid "Shut down"
52msgid "Shut down"
53−msgstr ""
53+msgstr "Вимкнути"
54
54
55#: qml/Components/Dialogs.qml:95
55#: qml/Components/Dialogs.qml:95
56msgid "Are you sure you want to shut down?"
56msgid "Are you sure you want to shut down?"
57−msgstr ""
57+msgstr "Ви справді хочете вимкнути пристрій?"
58
58
59#: qml/Components/Dialogs.qml:119
59#: qml/Components/Dialogs.qml:119
60msgid "Reboot"
60msgid "Reboot"
61−msgstr ""
61+msgstr "Перезавантажити"
62
62
63#: qml/Components/Dialogs.qml:120
63#: qml/Components/Dialogs.qml:120
64msgid "Are you sure you want to reboot?"
64msgid "Are you sure you want to reboot?"
65−msgstr ""
65+msgstr "Ви справді хочете перезавантажити пристрій?"
66
66
67#: qml/Components/Dialogs.qml:144
67#: qml/Components/Dialogs.qml:144
68msgid "Power"
68msgid "Power"
69−msgstr ""
69+msgstr "Живлення"
70
70
71#: qml/Components/Dialogs.qml:145
71#: qml/Components/Dialogs.qml:145
72msgid ""
72msgid ""
73"Are you sure you would like\n"
73"Are you sure you would like\n"
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76+"Ви справді хочете вимкнути\n"
77+"живлення?"
76
78
77−#: qml/Components/Dialogs.qml:144
79+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
80msgid "Power off"
79msgstr "Вимкнути"
81msgstr "Вимкнути"
80
82
81−#: qml/Components/Dialogs.qml:162
83+#: qml/Components/Dialogs.qml:157
84+msgid "Restart"
85+msgstr "Перезапуск"
86+
87+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
88msgid "Cancel"
83msgstr "Скасувати"
89msgstr "Скасувати"
84
90
@@ -166,21 +172,22 @@ msgstr "Стисліше"
166msgid "See all"
172msgid "See all"
167msgstr "Детальніше"
173msgstr "Детальніше"
168
174
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
170msgid "Search"
177msgid "Search"
171msgstr "Пошук"
178msgstr "Пошук"
172
179
173#: qml/Dash/PageHeader.qml:270
180#: qml/Dash/PageHeader.qml:270
174msgid "Settings"
181msgid "Settings"
175−msgstr ""
182+msgstr "Параметри"
176
183
177#: qml/Dash/PageHeader.qml:279
184#: qml/Dash/PageHeader.qml:279
178msgid "Remove from Favorites"
185msgid "Remove from Favorites"
179−msgstr ""
186+msgstr "Вилучити з вибраного"
180
187
181#: qml/Dash/PageHeader.qml:279
188#: qml/Dash/PageHeader.qml:279
182msgid "Add to Favorites"
189msgid "Add to Favorites"
183−msgstr ""
190+msgstr "Додати до вибраного"
184
191
185#: qml/Dash/Previews/PreviewActionCombo.qml:34
192#: qml/Dash/Previews/PreviewActionCombo.qml:34
186msgid "More..."
193msgid "More..."
@@ -206,11 +213,11 @@ msgstr "Надіслати"
206msgid "Manage Dash"
213msgid "Manage Dash"
207msgstr "Керування панеллю"
214msgstr "Керування панеллю"
208
215
209−#: qml/Dash/ScopesOverview.qml:408
216+#: qml/Dash/ScopesOverview.qml:417
210msgid "Done"
217msgid "Done"
211msgstr "Виконано"
218msgstr "Виконано"
212
219
213−#: qml/Dash/ScopesOverview.qml:434
220+#: qml/Dash/ScopesOverview.qml:443
214msgid "Store"
221msgid "Store"
215msgstr "Крамниця"
222msgstr "Крамниця"
216
223
@@ -226,7 +233,7 @@ msgstr "Все"
226msgid "Swipe to unlock"
233msgid "Swipe to unlock"
227msgstr "Проведіть пальцем, щоб розблокувати"
234msgstr "Проведіть пальцем, щоб розблокувати"
228
235
229−#: qml/Hud/HudParametrizedActionsPage.qml:132
236+#: qml/Hud/HudParametrizedActionsPage.qml:139
230msgid "Confirm"
237msgid "Confirm"
231msgstr "Підтвердити"
238msgstr "Підтвердити"
232
239
@@ -254,7 +261,7 @@ msgstr "Показати пароль"
254msgid "Enter SIM PIN"
261msgid "Enter SIM PIN"
255msgstr "Введіть PIN-код SIM-картки"
262msgstr "Введіть PIN-код SIM-картки"
256
263
257−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
264+#: qml/Notifications/NotificationMenuItemFactory.qml:121
258msgid "Sorry, incorrect PIN"
265msgid "Sorry, incorrect PIN"
259msgstr "Вибачте, помилковий PIN-код"
266msgstr "Вибачте, помилковий PIN-код"
260
267
@@ -298,45 +305,45 @@ msgstr "Розблокувати SIM"
298msgid "Roaming"
305msgid "Roaming"
299msgstr "Роумінг"
306msgstr "Роумінг"
300
307
301−#: qml/Shell.qml:266
308+#: qml/Shell.qml:279
302msgid "Enter your passphrase"
309msgid "Enter your passphrase"
303msgstr "Введіть ваш пароль"
310msgstr "Введіть ваш пароль"
304
311
305−#: qml/Shell.qml:267
312+#: qml/Shell.qml:280
306msgid "Sorry, incorrect passphrase"
313msgid "Sorry, incorrect passphrase"
307msgstr "Вибачте, помилковий пароль"
314msgstr "Вибачте, помилковий пароль"
308
315
309#: qml/Shell.qml:282
316#: qml/Shell.qml:282
310msgid "Enter your passcode"
317msgid "Enter your passcode"
311−msgstr ""
318+msgstr "Введіть ваш код-пароль"
312
319
313#: qml/Shell.qml:283
320#: qml/Shell.qml:283
314msgid "Sorry, incorrect passcode"
321msgid "Sorry, incorrect passcode"
315−msgstr ""
322+msgstr "Вибачте, помилковий код-пароль"
316
323
317−#: qml/Shell.qml:273
324+#: qml/Shell.qml:286
318#, qt-format
325#, qt-format
319msgid "Enter your %1"
326msgid "Enter your %1"
320msgstr "Вкажіть ваш %1"
327msgstr "Вкажіть ваш %1"
321
328
322−#: qml/Shell.qml:274
329+#: qml/Shell.qml:287
323#, qt-format
330#, qt-format
324msgid "Sorry, incorrect %1"
331msgid "Sorry, incorrect %1"
325msgstr "Вибачте, помилковий %1"
332msgstr "Вибачте, помилковий %1"
326
333
327−#: qml/Shell.qml:310
334+#: qml/Shell.qml:323
328msgid "Sorry, incorrect passphrase."
335msgid "Sorry, incorrect passphrase."
329msgstr "Вибачте, помилковий пароль."
336msgstr "Вибачте, помилковий пароль."
330
337
331−#: qml/Shell.qml:311
338+#: qml/Shell.qml:324
332msgid "Sorry, incorrect passcode."
339msgid "Sorry, incorrect passcode."
333msgstr "Вибачте, помилковий код-пароль."
340msgstr "Вибачте, помилковий код-пароль."
334
341
335−#: qml/Shell.qml:312
342+#: qml/Shell.qml:325
336msgid "This will be your last attempt."
343msgid "This will be your last attempt."
337msgstr "Ця спроба буде останньою."
344msgstr "Ця спроба буде останньою."
338
345
339−#: qml/Shell.qml:314
346+#: qml/Shell.qml:327
340msgid ""
347msgid ""
341"If passphrase is entered incorrectly, your phone will conduct a factory "
348"If passphrase is entered incorrectly, your phone will conduct a factory "
342"reset and all personal data will be deleted."
349"reset and all personal data will be deleted."
@@ -344,19 +351,10 @@ msgstr ""
344"Якщо пароль буде вказано неправильно, телефон повернеться до початкового "
351"Якщо пароль буде вказано неправильно, телефон повернеться до початкового "
345"стану, усі особисті дані буде вилучено."
352"стану, усі особисті дані буде вилучено."
346
353
347−#: qml/Shell.qml:315
354+#: qml/Shell.qml:328
348msgid ""
355msgid ""
349"If passcode is entered incorrectly, your phone will conduct a factory reset "
356"If passcode is entered incorrectly, your phone will conduct a factory reset "
350"and all personal data will be deleted."
357"and all personal data will be deleted."
351msgstr ""
358msgstr ""
352"Якщо код-пароль буде вказано неправильно, телефон повернеться до початкового "
359"Якщо код-пароль буде вказано неправильно, телефон повернеться до початкового "
353"стану, усі особисті дані буде вилучено."
360"стану, усі особисті дані буде вилучено."
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 ""
8msgstr ""
8msgstr ""
9"Project-Id-Version: unity8\n"
9"Project-Id-Version: unity8\n"
10"Report-Msgid-Bugs-To: \n"
10"Report-Msgid-Bugs-To: \n"
11−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -21,12 +21,12 @@ msgstr ""
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
24+#: plugins/Unity/Launcher/launcheritem.cpp:44
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:74
26msgid "Pin shortcut"
26msgid "Pin shortcut"
27msgstr ""
27msgstr ""
28
28
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
29+#: plugins/Unity/Launcher/launcheritem.cpp:74
30msgid "Unpin shortcut"
30msgid "Unpin shortcut"
31msgstr ""
31msgstr ""
32
32
@@ -79,6 +79,10 @@ msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81#: qml/Components/Dialogs.qml:157
81#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:167
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -153,36 +157,36 @@ msgstr ""
153msgid "Hello"
157msgid "Hello"
154msgstr ""
158msgstr ""
155
159
156−#: qml/Dash/GenericScopeView.qml:361
160+#: qml/Dash/GenericScopeView.qml:364 qml/Dash/GenericScopeView.qml:483
157msgid "See less"
161msgid "See less"
158msgstr ""
162msgstr ""
159
163
160−#: qml/Dash/GenericScopeView.qml:361
164+#: qml/Dash/GenericScopeView.qml:364
161msgid "See all"
165msgid "See all"
162msgstr ""
166msgstr ""
163
167
164−#: qml/Dash/GenericScopeView.qml:424 qml/Dash/PageHeader.qml:260
168+#: qml/Dash/GenericScopeView.qml:427 qml/Dash/PageHeader.qml:258
165#: qml/Panel/SearchIndicator.qml:27
169#: qml/Panel/SearchIndicator.qml:27
166msgid "Search"
170msgid "Search"
167msgstr ""
171msgstr ""
168
172
169−#: qml/Dash/PageHeader.qml:270
173+#: qml/Dash/PageHeader.qml:268
170msgid "Settings"
174msgid "Settings"
171msgstr ""
175msgstr ""
172
176
173−#: qml/Dash/PageHeader.qml:279
177+#: qml/Dash/PageHeader.qml:275
174msgid "Remove from Favorites"
178msgid "Remove from Favorites"
175msgstr ""
179msgstr ""
176
180
177−#: qml/Dash/PageHeader.qml:279
181+#: qml/Dash/PageHeader.qml:275
178msgid "Add to Favorites"
182msgid "Add to Favorites"
179msgstr ""
183msgstr ""
180
184
181−#: qml/Dash/Previews/PreviewActionCombo.qml:34
185+#: qml/Dash/Previews/PreviewActionCombo.qml:35
182msgid "More..."
186msgid "More..."
183msgstr ""
187msgstr ""
184
188
185−#: qml/Dash/Previews/PreviewActionCombo.qml:34
189+#: qml/Dash/Previews/PreviewActionCombo.qml:35
186msgid "Less..."
190msgid "Less..."
187msgstr ""
191msgstr ""
188
192
@@ -198,15 +202,15 @@ msgstr ""
198msgid "Send"
202msgid "Send"
199msgstr ""
203msgstr ""
200
204
201−#: qml/Dash/ScopesOverview.qml:201
205+#: qml/Dash/ScopesOverview.qml:206
202msgid "Manage Dash"
206msgid "Manage Dash"
203msgstr ""
207msgstr ""
204
208
205−#: qml/Dash/ScopesOverview.qml:417
209+#: qml/Dash/ScopesOverview.qml:428
206msgid "Done"
210msgid "Done"
207msgstr ""
211msgstr ""
208
212
209−#: qml/Dash/ScopesOverview.qml:443
213+#: qml/Dash/ScopesOverview.qml:454
210msgid "Store"
214msgid "Store"
211msgstr ""
215msgstr ""
212
216
@@ -242,15 +246,15 @@ msgstr ""
242msgid "Speaking..."
246msgid "Speaking..."
243msgstr ""
247msgstr ""
244
248
245−#: qml/Notifications/NotificationMenuItemFactory.qml:105
249+#: qml/Notifications/NotificationMenuItemFactory.qml:108
246msgid "Show password"
250msgid "Show password"
247msgstr ""
251msgstr ""
248
252
249−#: qml/Notifications/NotificationMenuItemFactory.qml:120
253+#: qml/Notifications/NotificationMenuItemFactory.qml:124
250msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
251msgstr ""
255msgstr ""
252
256
253−#: qml/Notifications/NotificationMenuItemFactory.qml:121
257+#: qml/Notifications/NotificationMenuItemFactory.qml:125
254msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
255msgstr ""
259msgstr ""
256
260
@@ -294,51 +298,51 @@ msgstr ""
294msgid "Roaming"
298msgid "Roaming"
295msgstr ""
299msgstr ""
296
300
297−#: qml/Shell.qml:279
301+#: qml/Shell.qml:292
298msgid "Enter your passphrase"
302msgid "Enter your passphrase"
299msgstr ""
303msgstr ""
300
304
301−#: qml/Shell.qml:280
305+#: qml/Shell.qml:293
302msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
303msgstr ""
307msgstr ""
304
308
305−#: qml/Shell.qml:282
309+#: qml/Shell.qml:295
306msgid "Enter your passcode"
310msgid "Enter your passcode"
307msgstr ""
311msgstr ""
308
312
309−#: qml/Shell.qml:283
313+#: qml/Shell.qml:296
310msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
311msgstr ""
315msgstr ""
312
316
313−#: qml/Shell.qml:286
317+#: qml/Shell.qml:299
314#, qt-format
318#, qt-format
315msgid "Enter your %1"
319msgid "Enter your %1"
316msgstr ""
320msgstr ""
317
321
318−#: qml/Shell.qml:287
322+#: qml/Shell.qml:300
319#, qt-format
323#, qt-format
320msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
321msgstr ""
325msgstr ""
322
326
323−#: qml/Shell.qml:323
327+#: qml/Shell.qml:335
324msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
325msgstr ""
329msgstr ""
326
330
327−#: qml/Shell.qml:324
331+#: qml/Shell.qml:336
328msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
329msgstr ""
333msgstr ""
330
334
331−#: qml/Shell.qml:325
335+#: qml/Shell.qml:337
332msgid "This will be your last attempt."
336msgid "This will be your last attempt."
333msgstr ""
337msgstr ""
334
338
335−#: qml/Shell.qml:327
339+#: qml/Shell.qml:339
336msgid ""
340msgid ""
337"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
338"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
339msgstr ""
343msgstr ""
340
344
341−#: qml/Shell.qml:328
345+#: qml/Shell.qml:340
342msgid ""
346msgid ""
343"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
344"and all personal data will be deleted."
348"and all personal data will be deleted."
po/vi.po+25−20
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-01-15 01:19+0000\n"
11"PO-Revision-Date: 2014-01-15 01:19+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Vietnamese <vi@li.org>\n"
13"Language-Team: Vietnamese <vi@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -161,7 +165,8 @@ msgstr ""
161msgid "See all"
165msgid "See all"
162msgstr ""
166msgstr ""
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr ""
171msgstr ""
167
172
@@ -201,11 +206,11 @@ msgstr ""
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr ""
215msgstr ""
211
216
@@ -221,7 +226,7 @@ msgstr ""
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr ""
227msgstr ""
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr ""
231msgstr ""
227
232
@@ -249,7 +254,7 @@ msgstr ""
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr ""
293msgid "Roaming"
298msgid "Roaming"
294msgstr ""
299msgstr ""
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,35 +314,35 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
po/xh.po+25−20
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2013-09-28 13:20+0000\n"
11"PO-Revision-Date: 2013-09-28 13:20+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Xhosa <xh@li.org>\n"
13"Language-Team: Xhosa <xh@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -161,7 +165,8 @@ msgstr ""
161msgid "See all"
165msgid "See all"
162msgstr ""
166msgstr ""
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr ""
171msgstr ""
167
172
@@ -201,11 +206,11 @@ msgstr ""
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr ""
215msgstr ""
211
216
@@ -221,7 +226,7 @@ msgstr ""
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr ""
227msgstr ""
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr ""
231msgstr ""
227
232
@@ -249,7 +254,7 @@ msgstr ""
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr ""
293msgid "Roaming"
298msgid "Roaming"
294msgstr ""
299msgstr ""
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,35 +314,35 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
po/zh_CN.po+25−26
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-08-12 14:09+0000\n"
11"PO-Revision-Date: 2014-08-12 14:09+0000\n"
12"Last-Translator: Anthony Wong <anthony.wong@ubuntu.com>\n"
12"Last-Translator: Anthony Wong <anthony.wong@ubuntu.com>\n"
13"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
13"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr "关机"
79msgstr "关机"
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr "取消"
87msgstr "取消"
84
88
@@ -161,7 +165,8 @@ msgstr "显示更少"
161msgid "See all"
165msgid "See all"
162msgstr "查看全部"
166msgstr "查看全部"
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr "搜索"
171msgstr "搜索"
167
172
@@ -201,11 +206,11 @@ msgstr "发送"
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr "管理 Dash"
207msgstr "管理 Dash"
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr "完成"
211msgstr "完成"
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr "商店"
215msgstr "商店"
211
216
@@ -221,7 +226,7 @@ msgstr "所有"
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr "滑动解锁"
227msgstr "滑动解锁"
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr "确认"
231msgstr "确认"
227
232
@@ -249,7 +254,7 @@ msgstr "显示密码"
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr "解开 SIM"
293msgid "Roaming"
298msgid "Roaming"
294msgstr "漫游"
299msgstr "漫游"
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,42 +314,36 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
344msgstr ""
349msgstr ""
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 ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-08-10 11:45+0000\n"
11"PO-Revision-Date: 2014-08-10 11:45+0000\n"
12"Last-Translator: Daniel Cheung <daniel.2345@hotmail.com>\n"
12"Last-Translator: Daniel Cheung <daniel.2345@hotmail.com>\n"
13"Language-Team: Chinese (Hong Kong) <zh_HK@li.org>\n"
13"Language-Team: Chinese (Hong Kong) <zh_HK@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr ""
22msgstr ""
23
23
@@ -74,11 +74,15 @@ msgid ""
74"to power off?"
74"to power off?"
75msgstr ""
75msgstr ""
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79msgstr ""
79msgstr ""
80
80
81−#: qml/Components/Dialogs.qml:162
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
83+msgstr ""
84+
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr ""
87msgstr ""
84
88
@@ -161,7 +165,8 @@ msgstr "縮減查看"
161msgid "See all"
165msgid "See all"
162msgstr "查看全部"
166msgstr "查看全部"
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr "搜尋"
171msgstr "搜尋"
167
172
@@ -201,11 +206,11 @@ msgstr "傳送"
201msgid "Manage Dash"
206msgid "Manage Dash"
202msgstr ""
207msgstr ""
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206msgstr ""
211msgstr ""
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210msgstr ""
215msgstr ""
211
216
@@ -221,7 +226,7 @@ msgstr ""
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr "滑動解除鎖定"
227msgstr "滑動解除鎖定"
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr "確認"
231msgstr "確認"
227
232
@@ -249,7 +254,7 @@ msgstr "顯示密碼"
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250msgstr ""
255msgstr ""
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254msgstr ""
259msgstr ""
255
260
@@ -293,11 +298,11 @@ msgstr ""
293msgid "Roaming"
298msgid "Roaming"
294msgstr ""
299msgstr ""
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298msgstr ""
303msgstr ""
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302msgstr ""
307msgstr ""
303
308
@@ -309,35 +314,35 @@ msgstr ""
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310msgstr ""
315msgstr ""
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr ""
320msgstr ""
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320msgstr ""
325msgstr ""
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324msgstr ""
329msgstr ""
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328msgstr ""
333msgstr ""
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr ""
337msgstr ""
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338msgstr ""
343msgstr ""
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
po/zh_TW.po+57−52
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-09-18 20:12+0800\n"
11"PO-Revision-Date: 2014-07-26 16:21+0000\n"
11"PO-Revision-Date: 2014-07-26 16:21+0000\n"
12"Last-Translator: Cheng-Chia Tseng <pswo10680@gmail.com>\n"
12"Last-Translator: Cheng-Chia Tseng <pswo10680@gmail.com>\n"
13"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
13"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
17+"X-Launchpad-Export-Date: 2014-09-20 06:34+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
18+"X-Generator: Launchpad (build 17196)\n"
19
19
20−#: plugins/LightDM/Greeter.cpp:129
20+#: plugins/LightDM/Greeter.cpp:130
21msgid "Password: "
21msgid "Password: "
22msgstr "密碼: "
22msgstr "密碼: "
23
23
@@ -32,53 +32,57 @@ msgstr "取消捷徑釘選"
32
32
33#: qml/Components/Dialogs.qml:70
33#: qml/Components/Dialogs.qml:70
34msgid "Log out"
34msgid "Log out"
35−msgstr ""
35+msgstr "登出"
36
36
37#: qml/Components/Dialogs.qml:71
37#: qml/Components/Dialogs.qml:71
38msgid "Are you sure you want to log out?"
38msgid "Are you sure you want to log out?"
39−msgstr ""
39+msgstr "確定要登出?"
40
40
41#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
41#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
42#: qml/Components/Dialogs.qml:122
42#: qml/Components/Dialogs.qml:122
43msgid "No"
43msgid "No"
44−msgstr ""
44+msgstr "否"
45
45
46#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
46#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
47#: qml/Components/Dialogs.qml:129
47#: qml/Components/Dialogs.qml:129
48msgid "Yes"
48msgid "Yes"
49−msgstr ""
49+msgstr "是"
50
50
51#: qml/Components/Dialogs.qml:94
51#: qml/Components/Dialogs.qml:94
52msgid "Shut down"
52msgid "Shut down"
53−msgstr ""
53+msgstr "關機"
54
54
55#: qml/Components/Dialogs.qml:95
55#: qml/Components/Dialogs.qml:95
56msgid "Are you sure you want to shut down?"
56msgid "Are you sure you want to shut down?"
57−msgstr ""
57+msgstr "確定要關機?"
58
58
59#: qml/Components/Dialogs.qml:119
59#: qml/Components/Dialogs.qml:119
60msgid "Reboot"
60msgid "Reboot"
61−msgstr ""
61+msgstr "重新開機"
62
62
63#: qml/Components/Dialogs.qml:120
63#: qml/Components/Dialogs.qml:120
64msgid "Are you sure you want to reboot?"
64msgid "Are you sure you want to reboot?"
65−msgstr ""
65+msgstr "確定要重新開機?"
66
66
67#: qml/Components/Dialogs.qml:144
67#: qml/Components/Dialogs.qml:144
68msgid "Power"
68msgid "Power"
69−msgstr ""
69+msgstr "關閉電源"
70
70
71#: qml/Components/Dialogs.qml:145
71#: qml/Components/Dialogs.qml:145
72msgid ""
72msgid ""
73"Are you sure you would like\n"
73"Are you sure you would like\n"
74"to power off?"
74"to power off?"
75−msgstr ""
75+msgstr "確定要關閉電源?"
76
76
77−#: qml/Components/Dialogs.qml:144
77+#: qml/Components/Dialogs.qml:147
78msgid "Power off"
78msgid "Power off"
79+msgstr "關閉電源"
80+
81+#: qml/Components/Dialogs.qml:157
82+msgid "Restart"
79msgstr ""
83msgstr ""
80
84
81−#: qml/Components/Dialogs.qml:162
85+#: qml/Components/Dialogs.qml:157
82msgid "Cancel"
86msgid "Cancel"
83msgstr "取消"
87msgstr "取消"
84
88
@@ -134,7 +138,7 @@ msgstr "請稍候"
134
138
135#: qml/Components/Lockscreen.qml:172
139#: qml/Components/Lockscreen.qml:172
136msgid "Too many incorrect attempts"
140msgid "Too many incorrect attempts"
137−msgstr ""
141+msgstr "錯得太多次"
138
142
139#: qml/Components/Lockscreen.qml:206
143#: qml/Components/Lockscreen.qml:206
140msgid "Emergency Call"
144msgid "Emergency Call"
@@ -161,21 +165,22 @@ msgstr "縮減查看"
161msgid "See all"
165msgid "See all"
162msgstr "查看全部"
166msgstr "查看全部"
163
167
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
165msgid "Search"
170msgid "Search"
166msgstr "搜尋"
171msgstr "搜尋"
167
172
168#: qml/Dash/PageHeader.qml:270
173#: qml/Dash/PageHeader.qml:270
169msgid "Settings"
174msgid "Settings"
170−msgstr ""
175+msgstr "設定"
171
176
172#: qml/Dash/PageHeader.qml:279
177#: qml/Dash/PageHeader.qml:279
173msgid "Remove from Favorites"
178msgid "Remove from Favorites"
174−msgstr ""
179+msgstr "自「最愛」移除"
175
180
176#: qml/Dash/PageHeader.qml:279
181#: qml/Dash/PageHeader.qml:279
177msgid "Add to Favorites"
182msgid "Add to Favorites"
178−msgstr ""
183+msgstr "加入到「最愛」"
179
184
180#: qml/Dash/Previews/PreviewActionCombo.qml:34
185#: qml/Dash/Previews/PreviewActionCombo.qml:34
181msgid "More..."
186msgid "More..."
@@ -199,29 +204,29 @@ msgstr "發送"
199
204
200#: qml/Dash/ScopesOverview.qml:201
205#: qml/Dash/ScopesOverview.qml:201
201msgid "Manage Dash"
206msgid "Manage Dash"
202−msgstr ""
207+msgstr "管理 Dash"
203
208
204−#: qml/Dash/ScopesOverview.qml:408
209+#: qml/Dash/ScopesOverview.qml:417
205msgid "Done"
210msgid "Done"
206−msgstr ""
211+msgstr "完成"
207
212
208−#: qml/Dash/ScopesOverview.qml:434
213+#: qml/Dash/ScopesOverview.qml:443
209msgid "Store"
214msgid "Store"
210−msgstr ""
215+msgstr "商城"
211
216
212#: qml/Dash/ScopesOverviewTab.qml:36
217#: qml/Dash/ScopesOverviewTab.qml:36
213msgid "Favorites"
218msgid "Favorites"
214−msgstr ""
219+msgstr "最愛"
215
220
216#: qml/Dash/ScopesOverviewTab.qml:54
221#: qml/Dash/ScopesOverviewTab.qml:54
217msgid "All"
222msgid "All"
218−msgstr ""
223+msgstr "全部"
219
224
220#: qml/Greeter/Greeter.qml:157
225#: qml/Greeter/Greeter.qml:157
221msgid "Swipe to unlock"
226msgid "Swipe to unlock"
222msgstr "滑開解除鎖定"
227msgstr "滑開解除鎖定"
223
228
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
229+#: qml/Hud/HudParametrizedActionsPage.qml:139
225msgid "Confirm"
230msgid "Confirm"
226msgstr "確認"
231msgstr "確認"
227
232
@@ -247,11 +252,11 @@ msgstr "顯示密碼"
247
252
248#: qml/Notifications/NotificationMenuItemFactory.qml:120
253#: qml/Notifications/NotificationMenuItemFactory.qml:120
249msgid "Enter SIM PIN"
254msgid "Enter SIM PIN"
250−msgstr ""
255+msgstr "輸入 SIM 卡 PIN 碼"
251
256
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257+#: qml/Notifications/NotificationMenuItemFactory.qml:121
253msgid "Sorry, incorrect PIN"
258msgid "Sorry, incorrect PIN"
254−msgstr ""
259+msgstr "抱歉,PIN 碼不對"
255
260
256#: qml/Panel/ActiveCallHint.qml:77
261#: qml/Panel/ActiveCallHint.qml:77
257msgid "Tap to return to call..."
262msgid "Tap to return to call..."
@@ -287,58 +292,58 @@ msgstr "失敗,輕觸可重試"
287
292
288#: qml/Panel/Indicators/ModemInfoItem.qml:105
293#: qml/Panel/Indicators/ModemInfoItem.qml:105
289msgid "Unlock SIM"
294msgid "Unlock SIM"
290−msgstr ""
295+msgstr "為 SIM 卡解鎖"
291
296
292#: qml/Panel/Indicators/RoamingIndication.qml:27
297#: qml/Panel/Indicators/RoamingIndication.qml:27
293msgid "Roaming"
298msgid "Roaming"
294−msgstr ""
299+msgstr "漫遊"
295
300
296−#: qml/Shell.qml:266
301+#: qml/Shell.qml:279
297msgid "Enter your passphrase"
302msgid "Enter your passphrase"
298−msgstr ""
303+msgstr "輸入密語"
299
304
300−#: qml/Shell.qml:267
305+#: qml/Shell.qml:280
301msgid "Sorry, incorrect passphrase"
306msgid "Sorry, incorrect passphrase"
302−msgstr ""
307+msgstr "抱歉,密語不對"
303
308
304#: qml/Shell.qml:282
309#: qml/Shell.qml:282
305msgid "Enter your passcode"
310msgid "Enter your passcode"
306−msgstr ""
311+msgstr "輸入密碼"
307
312
308#: qml/Shell.qml:283
313#: qml/Shell.qml:283
309msgid "Sorry, incorrect passcode"
314msgid "Sorry, incorrect passcode"
310−msgstr ""
315+msgstr "抱歉,密碼不對"
311
316
312−#: qml/Shell.qml:273
317+#: qml/Shell.qml:286
313#, qt-format
318#, qt-format
314msgid "Enter your %1"
319msgid "Enter your %1"
315msgstr "輸入您的 %1"
320msgstr "輸入您的 %1"
316
321
317−#: qml/Shell.qml:274
322+#: qml/Shell.qml:287
318#, qt-format
323#, qt-format
319msgid "Sorry, incorrect %1"
324msgid "Sorry, incorrect %1"
320−msgstr ""
325+msgstr "抱歉,%1不對"
321
326
322−#: qml/Shell.qml:310
327+#: qml/Shell.qml:323
323msgid "Sorry, incorrect passphrase."
328msgid "Sorry, incorrect passphrase."
324−msgstr ""
329+msgstr "抱歉,密語不對"
325
330
326−#: qml/Shell.qml:311
331+#: qml/Shell.qml:324
327msgid "Sorry, incorrect passcode."
332msgid "Sorry, incorrect passcode."
328−msgstr ""
333+msgstr "抱歉,密碼不對。"
329
334
330−#: qml/Shell.qml:312
335+#: qml/Shell.qml:325
331msgid "This will be your last attempt."
336msgid "This will be your last attempt."
332msgstr "這將會是您最後一次嘗試的機會。"
337msgstr "這將會是您最後一次嘗試的機會。"
333
338
334−#: qml/Shell.qml:314
339+#: qml/Shell.qml:327
335msgid ""
340msgid ""
336"If passphrase is entered incorrectly, your phone will conduct a factory "
341"If passphrase is entered incorrectly, your phone will conduct a factory "
337"reset and all personal data will be deleted."
342"reset and all personal data will be deleted."
338−msgstr ""
343+msgstr "如輸入的密語不對,本電話會進行重設,所有個人資料都會刪除。"
339
344
340−#: qml/Shell.qml:315
345+#: qml/Shell.qml:328
341msgid ""
346msgid ""
342"If passcode is entered incorrectly, your phone will conduct a factory reset "
347"If passcode is entered incorrectly, your phone will conduct a factory reset "
343"and all personal data will be deleted."
348"and all personal data will be deleted."
344−msgstr ""
349+msgstr "如輸入的密碼不對,本電話會進行重設,所有個人資料都會刪除。"
qml/Components/Background.qml+1−1
@@ -78,7 +78,7 @@ Loader {
78 Image {
78 Image {
79 objectName: "image"
79 objectName: "image"
80
80
81− source: width > 0 && height > 0 && root.style
81+ source: width > 0 && height > 0 && root.style || ""
82
82
83 sourceSize.width: width
83 sourceSize.width: width
84 sourceSize.height: height
84 sourceSize.height: height
qml/Components/Dialogs.qml+10
@@ -153,6 +153,16 @@ Item {
153 }
153 }
154 color: UbuntuColors.red
154 color: UbuntuColors.red
155 }
155 }
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+ }
156 Button {
166 Button {
157 text: i18n.tr("Cancel")
167 text: i18n.tr("Cancel")
158 onClicked: {
168 onClicked: {
qml/Dash/CardCarousel.qml+1−1
@@ -49,7 +49,7 @@ DashRenderer {
49 objectName: "carouselDelegate" + index
49 objectName: "carouselDelegate" + index
50
50
51 function clicked() { cardCarousel.clicked(index, model.result, loader.item, model) }
51 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) }
53
53
54 sourceComponent: cardTool.cardComponent
54 sourceComponent: cardTool.cardComponent
55 onLoaded: {
55 onLoaded: {
qml/Dash/CardGrid.qml+1−1
@@ -74,7 +74,7 @@ DashRenderer {
74 Connections {
74 Connections {
75 target: loader.item
75 target: loader.item
76 onClicked: root.clicked(index, result, loader.item, model)
76 onClicked: root.clicked(index, result, loader.item, model)
77− onPressAndHold: root.pressAndHold(index, model)
77+ onPressAndHold: root.pressAndHold(index, result, model)
78 }
78 }
79 }
79 }
80 }
80 }
qml/Dash/CardHorizontalList.qml+1−1
@@ -55,7 +55,7 @@ DashRenderer {
55 Connections {
55 Connections {
56 target: loader.item
56 target: loader.item
57 onClicked: root.clicked(index, result, loader.item, model)
57 onClicked: root.clicked(index, result, loader.item, model)
58− onPressAndHold: root.pressAndHold(index, model)
58+ onPressAndHold: root.pressAndHold(index, result, model)
59 }
59 }
60 }
60 }
61 }
61 }
qml/Dash/CardTool.qml+7−10
@@ -169,19 +169,16 @@ Item {
169
169
170 Item {
170 Item {
171 id: attributesModel
171 id: attributesModel
172− property int numOfAttributes: 0
172+ property int numOfAttributes: {
173− property var model: []
174− property bool hasAttributes: {
175 var attributes = components["attributes"];
173 var attributes = components["attributes"];
176− var hasAttributesFlag = (attributes != undefined) && attributes["field"];
174+ if ((attributes != undefined) && attributes["field"]) {
177−
178− if (hasAttributesFlag) {
179 if (attributes["max-count"]) {
175 if (attributes["max-count"]) {
180− numOfAttributes = attributes["max-count"];
176+ return attributes["max-count"];
181 }
177 }
182 }
178 }
183− return hasAttributesFlag
179+ return 0;
184 }
180 }
181+ property var model: []
185
182
186 onNumOfAttributesChanged: {
183 onNumOfAttributesChanged: {
187 model = []
184 model = []
@@ -195,8 +192,8 @@ Item {
195 id: cardLoader
192 id: cardLoader
196 property var fields: ["art", "mascot", "title", "subtitle", "summary", "attributes"]
193 property var fields: ["art", "mascot", "title", "subtitle", "summary", "attributes"]
197 property var maxData: {
194 property var maxData: {
198− "art": Qt.resolvedUrl("graphics/checkers.png"),
195+ "art": Qt.resolvedUrl("graphics/pixel.png"),
199− "mascot": Qt.resolvedUrl("graphics/checkers.png"),
196+ "mascot": Qt.resolvedUrl("graphics/pixel.png"),
200 "title": "—\n—",
197 "title": "—\n—",
201 "subtitle": "—",
198 "subtitle": "—",
202 "summary": "—\n—\n—\n—\n—",
199 "summary": "—\n—\n—\n—\n—",
qml/Dash/CardVerticalJournal.qml+1−1
@@ -62,7 +62,7 @@ DashRenderer {
62 Connections {
62 Connections {
63 target: loader.item
63 target: loader.item
64 onClicked: root.clicked(index, result, loader.item, model)
64 onClicked: root.clicked(index, result, loader.item, model)
65− onPressAndHold: root.pressAndHold(index, model)
65+ onPressAndHold: root.pressAndHold(index, result, model)
66 }
66 }
67 }
67 }
68 }
68 }
qml/Dash/Dash.qml+12−1
@@ -34,7 +34,17 @@ Showable {
34 DashCommunicatorService {
34 DashCommunicatorService {
35 objectName: "dashCommunicatorService"
35 objectName: "dashCommunicatorService"
36 onSetCurrentScopeRequested: {
36 onSetCurrentScopeRequested: {
37+ if (!isSwipe || !window.active || overviewController.progress != 0) {
38+ if (overviewController.progress != 0 && window.active) animate = false;
37− dash.setCurrentScope(scopeId, animate, reset)
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+ }
38 }
48 }
39 }
49 }
40
50
@@ -344,6 +354,7 @@ Showable {
344 enabled: !dashContent.subPageShown &&
354 enabled: !dashContent.subPageShown &&
345 dashContent.currentScope &&
355 dashContent.currentScope &&
346 dashContent.currentScope.searchQuery == "" &&
356 dashContent.currentScope.searchQuery == "" &&
357+ !scopeItem.subPageShown &&
347 (overviewController.progress == 0 || dragging)
358 (overviewController.progress == 0 || dragging)
348
359
349 readonly property real fullMovement: units.gu(20)
360 readonly property real fullMovement: units.gu(20)
qml/Dash/DashApplication.qml+2−8
@@ -19,17 +19,11 @@ import Ubuntu.Components 1.0
19import Ubuntu.Thumbnailer 0.1 // Register support for image://thumbnailer/ and image://albumart/
19import Ubuntu.Thumbnailer 0.1 // Register support for image://thumbnailer/ and image://albumart/
20
20
21MainView {
21MainView {
22− width: units.gu(40)
22+ width: applicationArguments.hasGeometry() ? applicationArguments.width() : units.gu(40)
23− height: units.gu(71)
23+ height: applicationArguments.hasGeometry() ? applicationArguments.height() : units.gu(68)
24
24
25 useDeprecatedToolbar: false
25 useDeprecatedToolbar: false
26
26
27− Binding {
28− target: i18n
29− property: "domain"
30− value: "unity8"
31− }
32−
33 Dash {
27 Dash {
34 anchors.fill: parent
28 anchors.fill: parent
35 }
29 }
qml/Dash/DashNavigation.qml+2−3
@@ -37,9 +37,8 @@ Item {
37 // FIXME this is only here for highlight purposes (see Background.qml, too)
37 // FIXME this is only here for highlight purposes (see Background.qml, too)
38 readonly property var background: backgroundItem
38 readonly property var background: backgroundItem
39
39
40+ visible: height != 0
40− visible: navigationButton.currentNavigation || altNavigationButton.currentNavigation
41+ height: navigationButton.currentNavigation || altNavigationButton.currentNavigation ? units.gu(5) : 0
41−
42− height: visible ? units.gu(5) : 0
43
42
44 QtObject {
43 QtObject {
45 id: d
44 id: d
qml/Dash/DashRenderer.qml+3−2
@@ -40,13 +40,14 @@ Item {
40
40
41 /// Emitted when the user clicked on an item
41 /// Emitted when the user clicked on an item
42 /// @param index is the index of the clicked item
42 /// @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
44 /// @param item item that has been clicked
44 /// @param item item that has been clicked
45 /// @param itemModel model of the item
45 /// @param itemModel model of the item
46 signal clicked(int index, var result, var item, var itemModel)
46 signal clicked(int index, var result, var item, var itemModel)
47
47
48 /// Emitted when the user pressed and held on an item
48 /// Emitted when the user pressed and held on an item
49 /// @param index is the index of the held item
49 /// @param index is the index of the held item
50+ /// @param result result model of the clicked item, used for activation
50 /// @param itemModel model of the item
51 /// @param itemModel model of the item
51− signal pressAndHold(int index, var itemModel)
52+ signal pressAndHold(int index, var result, var itemModel)
52}
53}
qml/Dash/GenericScopeView.qml+86−37
@@ -25,7 +25,7 @@ import "../Components/ListItems" as ListItems
25FocusScope {
25FocusScope {
26 id: scopeView
26 id: scopeView
27
27
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
29 property var scope: null
29 property var scope: null
30 property SortFilterProxyModel categories: categoryFilter
30 property SortFilterProxyModel categories: categoryFilter
31 property bool isCurrent: false
31 property bool isCurrent: false
@@ -47,6 +47,10 @@ FocusScope {
47
47
48 signal backClicked()
48 signal backClicked()
49
49
50+ onScopeChanged: {
51+ floatingSeeLess.companionBase = null;
52+ }
53+
50 function positionAtBeginning() {
54 function positionAtBeginning() {
51 categoryView.positionAtBeginning()
55 categoryView.positionAtBeginning()
52 }
56 }
@@ -66,13 +70,17 @@ FocusScope {
66 // so it's not implemented
70 // so it's not implemented
67 scope.activate(result)
71 scope.activate(result)
68 } else {
72 } else {
73+ if (scope.preview(result)) {
69− openPreview(index, resultsModel, limitedCategoryItemCount);
74+ openPreview(index, resultsModel, limitedCategoryItemCount);
75+ }
70 }
76 }
71 }
77 }
72
78
73− function itemPressedAndHeld(index, itemModel, resultsModel, limitedCategoryItemCount) {
79+ function itemPressedAndHeld(index, result, itemModel, resultsModel, limitedCategoryItemCount) {
74 if (itemModel.uri.indexOf("scope://") !== 0) {
80 if (itemModel.uri.indexOf("scope://") !== 0) {
81+ if (scope.preview(result)) {
75− openPreview(index, resultsModel, limitedCategoryItemCount);
82+ openPreview(index, resultsModel, limitedCategoryItemCount);
83+ }
76 }
84 }
77 }
85 }
78
86
@@ -142,6 +150,7 @@ FocusScope {
142 objectName: "categoryListView"
150 objectName: "categoryListView"
143
151
144 x: subPageLoader.open ? -width : 0
152 x: subPageLoader.open ? -width : 0
153+ visible: x != -width
145 Behavior on x { UbuntuNumberAnimation { } }
154 Behavior on x { UbuntuNumberAnimation { } }
146 width: parent.width
155 width: parent.width
147 height: floatingSeeLess.visible ? parent.height - floatingSeeLess.height + floatingSeeLess.yOffset
156 height: floatingSeeLess.visible ? parent.height - floatingSeeLess.height + floatingSeeLess.yOffset
@@ -151,13 +160,55 @@ FocusScope {
151 model: scopeView.categories
160 model: scopeView.categories
152 forceNoClip: subPageLoader.open
161 forceNoClip: subPageLoader.open
153 pixelAligned: true
162 pixelAligned: true
154− interactive: !navigationShown
155
163
156− property Item expandedCategoryItem: null
164+ property string expandedCategoryId: ""
165+ property int runMaximizeAfterSizeChanges: 0
157
166
158 readonly property bool pageHeaderTotallyVisible: scopeView.showPageHeader &&
167 readonly property bool pageHeaderTotallyVisible: scopeView.showPageHeader &&
159 ((headerItemShownHeight == 0 && categoryView.contentY <= categoryView.originY) || (headerItemShownHeight == pageHeaderLoader.item.height))
168 ((headerItemShownHeight == 0 && categoryView.contentY <= categoryView.originY) || (headerItemShownHeight == pageHeaderLoader.item.height))
160
169
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+
161 delegate: ListItems.Base {
212 delegate: ListItems.Base {
162 id: baseItem
213 id: baseItem
163 objectName: "dashCategory" + category
214 objectName: "dashCategory" + category
@@ -195,7 +246,7 @@ FocusScope {
195 // This can happen with the VJ that doesn't know how height it will be on creation
246 // This can happen with the VJ that doesn't know how height it will be on creation
196 // so doesn't set expandable until a bit too late for onLoaded
247 // so doesn't set expandable until a bit too late for onLoaded
197 if (expandable) {
248 if (expandable) {
198− var shouldExpand = baseItem === categoryView.expandedCategoryItem;
249+ var shouldExpand = baseItem.category === categoryView.expandedCategoryId;
199 baseItem.expand(shouldExpand, false /*animate*/);
250 baseItem.expand(shouldExpand, false /*animate*/);
200 }
251 }
201 }
252 }
@@ -216,9 +267,23 @@ FocusScope {
216 id: heightBehaviour
267 id: heightBehaviour
217 enabled: false
268 enabled: false
218 animation: UbuntuNumberAnimation {
269 animation: UbuntuNumberAnimation {
270+ duration: UbuntuAnimation.FastDuration
219 onRunningChanged: {
271 onRunningChanged: {
220 if (!running) {
272 if (!running) {
221 heightBehaviour.enabled = false
273 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+ }
222 }
287 }
223 }
288 }
224 }
289 }
@@ -246,7 +311,7 @@ FocusScope {
246 item.objectName = Qt.binding(function() { return categoryId })
311 item.objectName = Qt.binding(function() { return categoryId })
247 item.scopeStyle = scopeView.scopeStyle;
312 item.scopeStyle = scopeView.scopeStyle;
248 if (baseItem.expandable) {
313 if (baseItem.expandable) {
249− var shouldExpand = baseItem === categoryView.expandedCategoryItem;
314+ var shouldExpand = baseItem.category === categoryView.expandedCategoryId;
250 baseItem.expand(shouldExpand, false /*animate*/);
315 baseItem.expand(shouldExpand, false /*animate*/);
251 }
316 }
252 updateDelegateCreationRange();
317 updateDelegateCreationRange();
@@ -270,7 +335,7 @@ FocusScope {
270 }
335 }
271
336
272 onPressAndHold: {
337 onPressAndHold: {
273− scopeView.itemPressedAndHeld(index, itemModel, target.model, categoryItemCount());
338+ scopeView.itemPressedAndHeld(index, result, itemModel, target.model, categoryItemCount());
274 }
339 }
275
340
276 function categoryItemCount() {
341 function categoryItemCount() {
@@ -283,27 +348,6 @@ FocusScope {
283 }
348 }
284 Connections {
349 Connections {
285 target: categoryView
350 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− }
307 onOriginYChanged: rendererLoader.updateDelegateCreationRange();
351 onOriginYChanged: rendererLoader.updateDelegateCreationRange();
308 onContentYChanged: rendererLoader.updateDelegateCreationRange();
352 onContentYChanged: rendererLoader.updateDelegateCreationRange();
309 onHeightChanged: rendererLoader.updateDelegateCreationRange();
353 onHeightChanged: rendererLoader.updateDelegateCreationRange();
@@ -350,13 +394,15 @@ FocusScope {
350 left: parent.left
394 left: parent.left
351 right: parent.right
395 right: parent.right
352 }
396 }
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
354
399
355 onClicked: {
400 onClicked: {
356− if (categoryView.expandedCategoryItem !== baseItem) {
401+ if (categoryView.expandedCategoryId !== baseItem.category) {
357− categoryView.expandedCategoryItem = baseItem;
402+ categoryView.expandedCategoryId = baseItem.category;
403+ floatingSeeLess.companionBase = baseItem;
358 } else {
404 } else {
359− categoryView.expandedCategoryItem = null;
405+ categoryView.expandedCategoryId = "";
360 }
406 }
361 }
407 }
362
408
@@ -370,7 +416,6 @@ FocusScope {
370 fontSize: "small"
416 fontSize: "small"
371 font.weight: Font.Bold
417 font.weight: Font.Bold
372 color: scopeStyle ? scopeStyle.foreground : Theme.palette.normal.baseText
418 color: scopeStyle ? scopeStyle.foreground : Theme.palette.normal.baseText
373− visible: baseItem.expandable && !baseItem.headerLink
374 }
419 }
375 }
420 }
376
421
@@ -456,7 +501,7 @@ FocusScope {
456 objectName: "floatingSeeLess"
501 objectName: "floatingSeeLess"
457
502
458 property Item companionTo: companionBase ? companionBase.seeAllButton : null
503 property Item companionTo: companionBase ? companionBase.seeAllButton : null
459− property Item companionBase: categoryView.expandedCategoryItem
504+ property Item companionBase: null
460 property bool showBecausePosition: false
505 property bool showBecausePosition: false
461 property real yOffset: 0
506 property real yOffset: 0
462
507
@@ -468,7 +513,7 @@ FocusScope {
468 height: seeLessLabel.font.pixelSize + units.gu(4)
513 height: seeLessLabel.font.pixelSize + units.gu(4)
469 visible: companionTo && showBecausePosition
514 visible: companionTo && showBecausePosition
470
515
471− onClicked: categoryView.expandedCategoryItem = null;
516+ onClicked: categoryView.expandedCategoryId = "";
472
517
473 function updateVisibility() {
518 function updateVisibility() {
474 var companionPos = companionTo.mapToItem(floatingSeeLess, 0, 0);
519 var companionPos = companionTo.mapToItem(floatingSeeLess, 0, 0);
@@ -477,6 +522,10 @@ FocusScope {
477 var posToBase = floatingSeeLess.mapToItem(companionBase, 0, -yOffset).y;
522 var posToBase = floatingSeeLess.mapToItem(companionBase, 0, -yOffset).y;
478 yOffset = Math.max(0, companionBase.item.collapsedHeight - posToBase);
523 yOffset = Math.max(0, companionBase.item.collapsedHeight - posToBase);
479 yOffset = Math.min(yOffset, height);
524 yOffset = Math.min(yOffset, height);
525+
526+ if (!showBecausePosition && categoryView.expandedCategoryId === "") {
527+ companionBase = null;
528+ }
480 }
529 }
481
530
482 Label {
531 Label {
qml/Dash/PageHeader.qml+23−17
@@ -37,7 +37,7 @@ Item {
37 property ListModel searchHistory: SearchHistoryModel
37 property ListModel searchHistory: SearchHistoryModel
38 property alias searchQuery: searchTextField.text
38 property alias searchQuery: searchTextField.text
39 property alias searchHint: searchTextField.placeholderText
39 property alias searchHint: searchTextField.placeholderText
40− property alias showSignatureLine: bottomBorder.visible
40+ property bool showSignatureLine: true
41
41
42 property alias bottomItem: bottomContainer.children
42 property alias bottomItem: bottomContainer.children
43 property int paginationCount: 0
43 property int paginationCount: 0
@@ -64,9 +64,12 @@ Item {
64 }
64 }
65 }
65 }
66
66
67− function closePopup() {
67+ function closePopup(keepFocus) {
68 if (headerContainer.popover != null) {
68 if (headerContainer.popover != null) {
69+ headerContainer.popover.unfocusOnDestruction = !keepFocus;
69 PopupUtils.close(headerContainer.popover);
70 PopupUtils.close(headerContainer.popover);
71+ } else if (!keepFocus) {
72+ unfocus();
70 }
73 }
71 }
74 }
72
75
@@ -74,11 +77,8 @@ Item {
74 if (searchHistory) {
77 if (searchHistory) {
75 searchHistory.addQuery(searchTextField.text);
78 searchHistory.addQuery(searchTextField.text);
76 }
79 }
77− if (!keepFocus) {
78− unfocus();
79− }
80 searchTextField.text = "";
80 searchTextField.text = "";
81− closePopup();
81+ closePopup(keepFocus);
82 }
82 }
83
83
84 function unfocus() {
84 function unfocus() {
@@ -102,7 +102,7 @@ Item {
102 }
102 }
103
103
104 function refreshLogo() {
104 function refreshLogo() {
105− if (scopeStyle ? scopeStyle.headerLogo != "" : false) {
105+ if (root.scopeStyle ? root.scopeStyle.headerLogo != "" : false) {
106 header.contents = imageComponent.createObject();
106 header.contents = imageComponent.createObject();
107 } else if (header.contents) {
107 } else if (header.contents) {
108 header.contents.destroy();
108 header.contents.destroy();
@@ -119,11 +119,10 @@ Item {
119 anchors { fill: parent; margins: units.gu(1); bottomMargin: units.gu(3) + bottomContainer.height }
119 anchors { fill: parent; margins: units.gu(1); bottomMargin: units.gu(3) + bottomContainer.height }
120 visible: headerContainer.showSearch
120 visible: headerContainer.showSearch
121 onPressed: {
121 onPressed: {
122− closePopup();
122+ closePopup(/* keepFocus */false);
123 if (!searchTextField.text) {
123 if (!searchTextField.text) {
124 headerContainer.showSearch = false;
124 headerContainer.showSearch = false;
125 }
125 }
126− searchTextField.focus = false;
127 mouse.accepted = false;
126 mouse.accepted = false;
128 }
127 }
129 }
128 }
@@ -133,7 +132,7 @@ Item {
133 objectName: "headerContainer"
132 objectName: "headerContainer"
134 clip: contentY < height
133 clip: contentY < height
135 anchors { left: parent.left; top: parent.top; right: parent.right }
134 anchors { left: parent.left; top: parent.top; right: parent.right }
136− height: units.gu(6.5)
135+ height: units.gu(7)
137 contentHeight: headersColumn.height
136 contentHeight: headersColumn.height
138 interactive: false
137 interactive: false
139 contentY: showSearch ? 0 : height
138 contentY: showSearch ? 0 : height
@@ -228,7 +227,7 @@ Item {
228
227
229 onTextChanged: {
228 onTextChanged: {
230 if (text != "") {
229 if (text != "") {
231− closePopup();
230+ closePopup(/* keepFocus */true);
232 }
231 }
233 }
232 }
234 }
233 }
@@ -288,7 +287,7 @@ Item {
288 id: imageComponent
287 id: imageComponent
289
288
290 Item {
289 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) }
292 clip: true
291 clip: true
293 Image {
292 Image {
294 objectName: "titleImage"
293 objectName: "titleImage"
@@ -310,8 +309,13 @@ Item {
310 id: popover
309 id: popover
311 autoClose: false
310 autoClose: false
312
311
312+ property bool unfocusOnDestruction: false
313+
313 Component.onDestruction: {
314 Component.onDestruction: {
314 headerContainer.popover = null;
315 headerContainer.popover = null;
316+ if (unfocusOnDestruction) {
317+ root.unfocus();
318+ }
315 }
319 }
316
320
317 Column {
321 Column {
@@ -332,8 +336,7 @@ Item {
332 onClicked: {
336 onClicked: {
333 searchHistory.addQuery(text);
337 searchHistory.addQuery(text);
334 searchTextField.text = text;
338 searchTextField.text = text;
335− closePopup();
339+ closePopup(/* keepFocus */false);
336− unfocus();
337 }
340 }
338 }
341 }
339 }
342 }
@@ -343,6 +346,7 @@ Item {
343
346
344 Rectangle {
347 Rectangle {
345 id: bottomBorder
348 id: bottomBorder
349+ visible: showSignatureLine
346 anchors {
350 anchors {
347 top: headerContainer.bottom
351 top: headerContainer.bottom
348 left: parent.left
352 left: parent.left
@@ -350,7 +354,7 @@ Item {
350 bottom: bottomContainer.top
354 bottom: bottomContainer.top
351 }
355 }
352
356
353− color: scopeStyle ? scopeStyle.headerDividerColor : "#e0e0e0"
357+ color: root.scopeStyle ? root.scopeStyle.headerDividerColor : "#e0e0e0"
354
358
355 Rectangle {
359 Rectangle {
356 anchors {
360 anchors {
@@ -404,8 +408,10 @@ Item {
404 Qt.lighter(Qt.rgba(bottomItem.background.topColor.r,
408 Qt.lighter(Qt.rgba(bottomItem.background.topColor.r,
405 bottomItem.background.topColor.g,
409 bottomItem.background.topColor.g,
406 bottomItem.background.topColor.b, 1.0), 1.2);
410 bottomItem.background.topColor.b, 1.0), 1.2);
407− } else if (!bottomItem && scopeStyle) {
411+ } else if (!bottomItem && root.scopeStyle) {
408− Qt.lighter(Qt.rgba(scopeStyle.background.r, scopeStyle.background.g, scopeStyle.background.b, 1.0), 1.2);
412+ Qt.lighter(Qt.rgba(root.scopeStyle.background.r,
413+ root.scopeStyle.background.g,
414+ root.scopeStyle.background.b, 1.0), 1.2);
409 } else "#CCFFFFFF"
415 } else "#CCFFFFFF"
410 }
416 }
411 }
417 }
qml/Dash/PreviewListView.qml+2−2
@@ -44,7 +44,7 @@ Item {
44 id: header
44 id: header
45 objectName: "pageHeader"
45 objectName: "pageHeader"
46 width: parent.width
46 width: parent.width
47− title: scope ? scope.name : ""
47+ title: root.scope ? root.scope.name : ""
48 showBackButton: true
48 showBackButton: true
49 searchEntryEnabled: false
49 searchEntryEnabled: false
50 scopeStyle: root.scopeStyle
50 scopeStyle: root.scopeStyle
@@ -78,7 +78,7 @@ Item {
78 if (previewListView.currentItem && previewListView.currentItem.previewData !== undefined) {
78 if (previewListView.currentItem && previewListView.currentItem.previewData !== undefined) {
79 previewListView.currentItem.previewData.cancelAction();
79 previewListView.currentItem.previewData.cancelAction();
80 }
80 }
81− scope.cancelActivation();
81+ root.scope.cancelActivation();
82 model = undefined;
82 model = undefined;
83 }
83 }
84 }
84 }
qml/Dash/Previews/PreviewPayments.qml+8
@@ -49,6 +49,7 @@ PreviewWidget {
49
49
50 Payments {
50 Payments {
51 id: paymentClient
51 id: paymentClient
52+ objectName: "paymentClient"
52
53
53 property var source: widgetData["source"]
54 property var source: widgetData["source"]
54
55
@@ -59,8 +60,15 @@ PreviewWidget {
59 root.triggered(widgetId, "purchaseCompleted", source);
60 root.triggered(widgetId, "purchaseCompleted", source);
60 }
61 }
61 onPurchaseError: {
62 onPurchaseError: {
63+ paymentButton.opacity = 1;
62 root.triggered(widgetId, "purchaseError", source);
64 root.triggered(widgetId, "purchaseError", source);
63 }
65 }
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+ }
64 }
72 }
65 }
73 }
66
74
qml/Dash/ScopesOverview.qml+7−1
@@ -203,7 +203,7 @@ Item {
203 }
203 }
204 width: parent.width
204 width: parent.width
205 clip: true
205 clip: true
206− title: i18n.tr("Manage Dash")
206+ title: i18n.tr("Manage Scopes")
207 scopeStyle: overviewScopeStyle
207 scopeStyle: overviewScopeStyle
208 showSignatureLine: false
208 showSignatureLine: false
209 searchEntryEnabled: true
209 searchEntryEnabled: true
@@ -386,6 +386,7 @@ Item {
386
386
387 Rectangle {
387 Rectangle {
388 id: bottomBar
388 id: bottomBar
389+ objectName: "bottomBar"
389 color: "black"
390 color: "black"
390 height: units.gu(8)
391 height: units.gu(8)
391 width: parent.width
392 width: parent.width
@@ -400,6 +401,11 @@ Item {
400 }
401 }
401 }
402 }
402
403
404+ MouseArea {
405+ // Just eat any other press since this parent is black opaque
406+ anchors.fill: parent
407+ }
408+
403 AbstractButton {
409 AbstractButton {
404 objectName: "scopesOverviewDoneButton"
410 objectName: "scopesOverviewDoneButton"
405 width: Math.max(label.width + units.gu(2), units.gu(10))
411 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 {
243 onDraggingChanged: {
243 onDraggingChanged: {
244 if (!dragging) {
244 if (!dragging) {
245 if (distance > panel.width / 2) {
245 if (distance > panel.width / 2) {
246+ root.switchToNextState("visible")
246 if (distance > minimizeDistance) {
247 if (distance > minimizeDistance) {
247 root.dash();
248 root.dash();
248− } else {
249− root.switchToNextState("visible")
250 }
249 }
251 } else {
250 } else {
252 root.switchToNextState("")
251 root.switchToNextState("")
qml/Launcher/LauncherDelegate.qml+4−2
@@ -21,7 +21,8 @@ Item {
21 id: root
21 id: root
22
22
23 property string iconName
23 property string iconName
24− property int count: -1
24+ property int count: 0
25+ property bool countVisible: false
25 property int progress: -1
26 property int progress: -1
26 property bool itemFocused: false
27 property bool itemFocused: false
27 property real maxAngle: 0
28 property real maxAngle: 0
@@ -80,11 +81,12 @@ Item {
80 width: Math.min(root.itemWidth, Math.max(units.gu(2), countLabel.implicitWidth + units.gu(1)))
81 width: Math.min(root.itemWidth, Math.max(units.gu(2), countLabel.implicitWidth + units.gu(1)))
81 height: units.gu(2)
82 height: units.gu(2)
82 color: UbuntuColors.orange
83 color: UbuntuColors.orange
83− visible: root.count > 0
84+ visible: root.countVisible
84 borderSource: "none"
85 borderSource: "none"
85
86
86 Label {
87 Label {
87 id: countLabel
88 id: countLabel
89+ objectName: "countLabel"
88 text: root.count
90 text: root.count
89 anchors.centerIn: parent
91 anchors.centerIn: parent
90 // FIXME: verticalCenter seems to be off wee bit and QML doesn't have a centerLine
92 // 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 {
156 height: itemHeight
156 height: itemHeight
157 iconName: model.icon
157 iconName: model.icon
158 count: model.count
158 count: model.count
159+ countVisible: model.countVisible
159 progress: model.progress
160 progress: model.progress
160 clipCorner: model.pinned
161 clipCorner: model.pinned
161 itemFocused: model.focused
162 itemFocused: model.focused
qml/Notifications/Notification.qml+133−47
@@ -39,19 +39,17 @@ Item {
39 property bool fullscreen: false
39 property bool fullscreen: false
40 property int maxHeight
40 property int maxHeight
41 property int margins
41 property int margins
42− property Gradient greenGradient : Gradient {
42+ readonly property color red: "#fc4949"
43− GradientStop { position: 0.0; color: "#3fb24f" }
43+ readonly property color green: "#3fb24f"
44− GradientStop { position: 1.0; color: "#3fb24f" }
44+ readonly property color sdLightGrey: "#eaeaea"
45− }
45+ readonly property color sdDarkGrey: "#dddddd"
46− property Gradient darkgreyGradient: Gradient {
46+ readonly property color sdFontColor: "#5d5d5d"
47− GradientStop { position: 0.0; color: "#4d4745" }
47+ readonly property real contentSpacing: units.gu(2)
48− GradientStop { position: 1.0; color: "#4d4745" }
49− }
50
48
51 objectName: "background"
49 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
53
51
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)
55 opacity: 1 // FIXME: 1 because of LP: #1354406 workaround, has to be 0 really
53 opacity: 1 // FIXME: 1 because of LP: #1354406 workaround, has to be 0 really
56
54
57 state: {
55 state: {
@@ -84,7 +82,7 @@ Item {
84
82
85 // FIXME: using onCompleted because of LP: #1354406 workaround, has to be onOpacityChanged really
83 // FIXME: using onCompleted because of LP: #1354406 workaround, has to be onOpacityChanged really
86 Component.onCompleted: {
84 Component.onCompleted: {
87− if (opacity == 1.0 && hints["suppress-sound"] != "true" && sound.source) {
85+ if (opacity == 1.0 && hints["suppress-sound"] != "true" && sound.source != "") {
88 sound.play();
86 sound.play();
89 }
87 }
90 }
88 }
@@ -107,7 +105,7 @@ Item {
107 states:[
105 states:[
108 State {
106 State {
109 name: "contracted"
107 name: "contracted"
110− PropertyChanges {target: notification; height: units.gu(8)}
108+ PropertyChanges {target: notification; height: units.gu(10)}
111 },
109 },
112 State {
110 State {
113 name: "expanded"
111 name: "expanded"
@@ -131,6 +129,7 @@ Item {
131 color: parent.color
129 color: parent.color
132 opacity: parent.opacity
130 opacity: parent.opacity
133 radius: "medium"
131 radius: "medium"
132+ borderSource: "none"
134 }
133 }
135
134
136 Rectangle {
135 Rectangle {
@@ -199,50 +198,41 @@ Item {
199 }
198 }
200
199
201 Column {
200 Column {
202− id: contentColumn
201+ id: outterColumn
203− objectName: "contentColumn"
204
202
205 anchors {
203 anchors {
206 left: parent.left
204 left: parent.left
207 right: parent.right
205 right: parent.right
208 top: parent.top
206 top: parent.top
209− margins: fullscreen ? 0 : spacing
207+ margins: 0
208+ topMargin: fullscreen ? 0 : units.gu(2)
210 }
209 }
211
210
212− spacing: units.gu(1)
211+ spacing: units.gu(2)
213
212
214 Row {
213 Row {
215 id: topRow
214 id: topRow
216
215
217− spacing: contentColumn.spacing
216+ spacing: contentSpacing
218 anchors {
217 anchors {
219 left: parent.left
218 left: parent.left
220 right: parent.right
219 right: parent.right
220+ margins: contentSpacing
221 }
221 }
222
222
223 ShapedIcon {
223 ShapedIcon {
224 id: icon
224 id: icon
225
225
226 objectName: "icon"
226 objectName: "icon"
227− width: units.gu(6)
227+ width: type == Notification.Ephemeral && !bodyLabel.visible ? units.gu(3) : units.gu(6)
228− height: units.gu(6)
228+ height: width
229 shaped: notification.hints["x-canonical-non-shaped-icon"] == "true" ? false : true
229 shaped: notification.hints["x-canonical-non-shaped-icon"] == "true" ? false : true
230 visible: iconSource !== undefined && iconSource != ""
230 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+ }
242
232
243 Column {
233 Column {
244 id: labelColumn
234 id: labelColumn
245− width: parent.width - x
235+ width: secondaryIcon.visible ? parent.width - x - units.gu(4.5) : parent.width - x
246
236
247 anchors.verticalCenter: (icon.visible && !bodyLabel.visible) ? icon.verticalCenter : undefined
237 anchors.verticalCenter: (icon.visible && !bodyLabel.visible) ? icon.verticalCenter : undefined
248
238
@@ -255,8 +245,7 @@ Item {
255 right: parent.right
245 right: parent.right
256 }
246 }
257 fontSize: "medium"
247 fontSize: "medium"
258− font.bold: true
259− color: Theme.palette.selected.backgroundText
248+ color: type == Notification.SnapDecision ? sdFontColor : Theme.palette.selected.backgroundText
260 elide: Text.ElideRight
249 elide: Text.ElideRight
261 textFormat: Text.PlainText
250 textFormat: Text.PlainText
262 }
251 }
@@ -271,14 +260,27 @@ Item {
271 }
260 }
272 visible: body != ""
261 visible: body != ""
273 fontSize: "small"
262 fontSize: "small"
274− color: Theme.palette.selected.backgroundText
263+ color: type == Notification.SnapDecision ? sdFontColor : Theme.palette.selected.backgroundText
275− opacity: 0.6
276 wrapMode: Text.WordWrap
264 wrapMode: Text.WordWrap
277− maximumLineCount: 10
265+ maximumLineCount: type == Notification.SnapDecision ? 12 : 2
278 elide: Text.ElideRight
266 elide: Text.ElideRight
279 textFormat: Text.PlainText
267 textFormat: Text.PlainText
280 }
268 }
281 }
269 }
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
282 }
284 }
283
285
284 Column {
286 Column {
@@ -321,6 +323,74 @@ Item {
321 }
323 }
322 }
324 }
323
325
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+
324 Row {
394 Row {
325 id: buttonRow
395 id: buttonRow
326
396
@@ -328,9 +398,10 @@ Item {
328 anchors {
398 anchors {
329 left: parent.left
399 left: parent.left
330 right: parent.right
400 right: parent.right
401+ margins: contentSpacing
331 }
402 }
332− visible: notification.type == Notification.SnapDecision && actionRepeater.count > 0
403+ visible: notification.type == Notification.SnapDecision && actionRepeater.count > 0 && !oneOverTwoCase.visible
333− spacing: units.gu(1)
404+ spacing: units.gu(2)
334 layoutDirection: Qt.RightToLeft
405 layoutDirection: Qt.RightToLeft
335
406
336 Repeater {
407 Repeater {
@@ -347,10 +418,19 @@ Item {
347 id: actionButton
418 id: actionButton
348
419
349 Button {
420 Button {
350− objectName: "button" + index
421+ objectName: "notify_button" + index
351− width: buttonRow.width / 2 - spacing
422+ width: buttonRow.width / 2 - spacing*2
352 text: loader.actionLabel
423 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+ }
354 onClicked: notification.notification.invokeAction(loader.actionId)
434 onClicked: notification.notification.invokeAction(loader.actionId)
355 }
435 }
356 }
436 }
@@ -362,10 +442,16 @@ Item {
362 ComboButton {
442 ComboButton {
363 id: comboButton
443 id: comboButton
364
444
365− objectName: "button2"
445+ objectName: "notify_button2"
366 width: parent.width
446 width: parent.width
447+ anchors {
448+ left: parent.left
449+ right: parent.right
450+ margins: contentSpacing
451+ }
452+
367− visible: notification.type == Notification.SnapDecision && actionRepeater.count > 3
453+ visible: notification.type == Notification.SnapDecision && actionRepeater.count > 3 && !oneOverTwoCase.visible
368− gradient: darkgreyGradient
454+ color: sdDarkGrey
369 onClicked: notification.notification.invokeAction(comboRepeater.itemAt(2).actionId)
455 onClicked: notification.notification.invokeAction(comboRepeater.itemAt(2).actionId)
370 expanded: false
456 expanded: false
371 expandedHeight: (comboRepeater.count - 2) * units.gu(4) + units.gu(.5)
457 expandedHeight: (comboRepeater.count - 2) * units.gu(4) + units.gu(.5)
@@ -399,7 +485,7 @@ Item {
399 MouseArea {
485 MouseArea {
400 id: comboInputArea
486 id: comboInputArea
401
487
402− objectName: "button" + index
488+ objectName: "notify_button" + index
403 width: comboButton.width
489 width: comboButton.width
404 height: comboIcon.height + units.gu(2)
490 height: comboIcon.height + units.gu(2)
405
491
@@ -421,7 +507,7 @@ Item {
421 }
507 }
422 width: units.gu(2)
508 width: units.gu(2)
423 height: units.gu(2)
509 height: units.gu(2)
424− color: "white"
510+ color: sdFontColor
425 name: splitLabel[2]
511 name: splitLabel[2]
426 }
512 }
427
513
@@ -434,7 +520,7 @@ Item {
434 verticalCenter: comboIcon.verticalCenter
520 verticalCenter: comboIcon.verticalCenter
435 }
521 }
436 fontSize: "small"
522 fontSize: "small"
437− color: "white"
523+ color: sdFontColor
438 text: splitLabel[3]
524 text: splitLabel[3]
439 }
525 }
440 }
526 }
qml/Notifications/NotificationMenuItemFactory.qml+4
@@ -55,6 +55,7 @@ Loader {
55 anchors {
55 anchors {
56 left: parent.left
56 left: parent.left
57 right: parent.right
57 right: parent.right
58+ margins: spacing
58 }
59 }
59
60
60 Component.onCompleted: {
61 Component.onCompleted: {
@@ -65,6 +66,7 @@ Loader {
65
66
66 Label {
67 Label {
67 text: menuData.label
68 text: menuData.label
69+ color: notification.sdFontColor
68 }
70 }
69
71
70 TextField {
72 TextField {
@@ -98,11 +100,13 @@ Loader {
98 id: checkBox
100 id: checkBox
99
101
100 checked: false
102 checked: false
103+ activeFocusOnPress: false
101 }
104 }
102
105
103 Label {
106 Label {
104 anchors.verticalCenter: checkBox.verticalCenter
107 anchors.verticalCenter: checkBox.verticalCenter
105 text: i18n.tr("Show password")
108 text: i18n.tr("Show password")
109+ color: notification.sdFontColor
106 }
110 }
107 }
111 }
108 }
112 }
qml/Notifications/Notifications.qml+1−1
@@ -33,7 +33,7 @@ ListView {
33 id: snapDecisionProxyModel
33 id: snapDecisionProxyModel
34
34
35 model: notificationList.model
35 model: notificationList.model
36− filterRole: UnityNotifications.ModelInterface.RoleType
36+ filterRole: UnityNotifications.ModelInterface != undefined ? UnityNotifications.ModelInterface.RoleType : 0
37 filterRegExp: RegExp(UnityNotifications.Notification.SnapDecision)
37 filterRegExp: RegExp(UnityNotifications.Notification.SnapDecision)
38 }
38 }
39
39
qml/Panel/Indicators/IndicatorsLight.qml+4−7
@@ -27,12 +27,9 @@ QtObject {
27 Component.onDestruction: Lights.state = Lights.Off
27 Component.onDestruction: Lights.state = Lights.Off
28
28
29 // QtObject does not have children
29 // QtObject does not have children
30− property var _connections: Connections {
30+ property var _binding: Binding {
31− id: powerConnection
32−
33− target: Powerd
31+ target: Lights
34− onDisplayPowerStateChange: {
32+ property: "state"
35− Lights.state = (status === Powerd.Off) ? Lights.On : Lights.Off
33+ value: (Powerd.status === Powerd.Off) ? Lights.On : Lights.Off
36− }
37 }
34 }
38}
35}
qml/Shell.qml+42−21
@@ -15,6 +15,7 @@
15 */
15 */
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18+import QtQuick.Window 2.0
18import AccountsService 0.1
19import AccountsService 0.1
19import GSettings 1.0
20import GSettings 1.0
20import Unity.Application 0.1
21import Unity.Application 0.1
@@ -22,6 +23,7 @@ import Ubuntu.Components 0.1
22import Ubuntu.Components.Popups 1.0
23import Ubuntu.Components.Popups 1.0
23import Ubuntu.Gestures 0.1
24import Ubuntu.Gestures 0.1
24import Ubuntu.SystemImage 0.1
25import Ubuntu.SystemImage 0.1
26+import Ubuntu.Telephony 0.1 as Telephony
25import Unity.Connectivity 0.1
27import Unity.Connectivity 0.1
26import Unity.Launcher 0.1
28import Unity.Launcher 0.1
27import Utils 0.1
29import Utils 0.1
@@ -60,6 +62,22 @@ Item {
60 property int failedLoginsDelayAttempts: 7 // number of failed logins
62 property int failedLoginsDelayAttempts: 7 // number of failed logins
61 property int failedLoginsDelaySeconds: 5 * 60 // seconds of forced waiting
63 property int failedLoginsDelaySeconds: 5 * 60 // seconds of forced waiting
62
64
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+
63 function activateApplication(appId) {
81 function activateApplication(appId) {
64 if (ApplicationManager.findApplication(appId)) {
82 if (ApplicationManager.findApplication(appId)) {
65 ApplicationManager.requestFocusApplication(appId);
83 ApplicationManager.requestFocusApplication(appId);
@@ -84,6 +102,12 @@ Item {
84
102
85 Component.onCompleted: {
103 Component.onCompleted: {
86 Theme.name = "Ubuntu.Components.Themes.SuruGradient"
104 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+ }
87 }
111 }
88
112
89 GSettings {
113 GSettings {
@@ -146,6 +170,7 @@ Item {
146 lockscreen.show();
170 lockscreen.show();
147 }
171 }
148 greeter.hide();
172 greeter.hide();
173+ launcher.hide();
149 }
174 }
150
175
151 onFocusedApplicationIdChanged: {
176 onFocusedApplicationIdChanged: {
@@ -164,6 +189,7 @@ Item {
164 // for an emergency call or accepted an incoming call.
189 // for an emergency call or accepted an incoming call.
165 setFakeActiveForApp(appId)
190 setFakeActiveForApp(appId)
166 }
191 }
192+ launcher.hide();
167 }
193 }
168 }
194 }
169
195
@@ -204,6 +230,11 @@ Item {
204 property: "inverseProgress"
230 property: "inverseProgress"
205 value: launcher.progress
231 value: launcher.progress
206 }
232 }
233+ Binding {
234+ target: applicationsDisplayLoader.item
235+ property: "orientation"
236+ value: shell.orientation
237+ }
207 }
238 }
208 }
239 }
209
240
@@ -457,18 +488,9 @@ Item {
457 id: powerConnection
488 id: powerConnection
458 target: Powerd
489 target: Powerd
459
490
460− onDisplayPowerStateChange: {
491+ onStatusChanged: {
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) {
492+ if (Powerd.status === Powerd.Off && !callManager.hasCalls && !edgeDemo.running) {
464− greeter.showNow();
493+ 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;
472 }
494 }
473 }
495 }
474 }
496 }
@@ -542,9 +564,13 @@ Item {
542 available: edgeDemo.launcherEnabled && (!shell.locked || AccountsService.enableLauncherWhileLocked) && greeter.fakeActiveForApp === ""
564 available: edgeDemo.launcherEnabled && (!shell.locked || AccountsService.enableLauncherWhileLocked) && greeter.fakeActiveForApp === ""
543
565
544 onShowDashHome: showHome()
566 onShowDashHome: showHome()
567+ onDash: {
568+ if (ApplicationManager.focusedApplicationId != "unity8-dash") {
545− onDash: showDash()
569+ showDash()
570+ }
571+ }
546 onDashSwipeChanged: {
572 onDashSwipeChanged: {
547− if (dashSwipe && ApplicationManager.focusedApplicationId !== "unity8-dash") {
573+ if (dashSwipe) {
548 dash.setCurrentScope("clickscope", false, true)
574 dash.setCurrentScope("clickscope", false, true)
549 }
575 }
550 }
576 }
@@ -568,7 +594,7 @@ Item {
568 visible: notifications.useModal && !greeter.shown && (notifications.state == "narrow")
594 visible: notifications.useModal && !greeter.shown && (notifications.state == "narrow")
569 color: "#000000"
595 color: "#000000"
570 anchors.fill: parent
596 anchors.fill: parent
571− opacity: 0.5
597+ opacity: 0.9
572
598
573 MouseArea {
599 MouseArea {
574 anchors.fill: parent
600 anchors.fill: parent
@@ -601,12 +627,6 @@ Item {
601 }
627 }
602 }
628 }
603
629
604− Binding {
605− target: i18n
606− property: "domain"
607− value: "unity8"
608− }
609−
610 Dialogs {
630 Dialogs {
611 id: dialogs
631 id: dialogs
612 anchors.fill: parent
632 anchors.fill: parent
@@ -637,6 +657,7 @@ Item {
637 EdgeDemo {
657 EdgeDemo {
638 id: edgeDemo
658 id: edgeDemo
639 z: alphaDisclaimerLabel.z + 10
659 z: alphaDisclaimerLabel.z + 10
660+ paused: Powerd.status === Powerd.Off // Saves power
640 greeter: greeter
661 greeter: greeter
641 launcher: launcher
662 launcher: launcher
642 indicators: panel.indicators
663 indicators: panel.indicators
qml/Stages/ApplicationWindow.qml+5−2
@@ -27,6 +27,7 @@ Item {
27
27
28 // to be set from outside
28 // to be set from outside
29 property QtObject application
29 property QtObject application
30+ property int orientation
30
31
31 QtObject {
32 QtObject {
32 id: d
33 id: d
@@ -55,7 +56,8 @@ Item {
55 property bool surfaceInitialized: false
56 property bool surfaceInitialized: false
56
57
57 function forceSurfaceActiveFocusIfReady() {
58 function forceSurfaceActiveFocusIfReady() {
58− if (sessionContainer.surface.focus &&
59+ if (sessionContainer.surface !== null &&
60+ sessionContainer.surface.focus &&
59 sessionContainer.surface.parent === sessionContainer.surfaceContainer &&
61 sessionContainer.surface.parent === sessionContainer.surfaceContainer &&
60 sessionContainer.surface.enabled) {
62 sessionContainer.surface.enabled) {
61 sessionContainer.surface.forceActiveFocus();
63 sessionContainer.surface.forceActiveFocus();
@@ -110,14 +112,15 @@ Item {
110 id: sessionContainer
112 id: sessionContainer
111 session: application ? application.session : null
113 session: application ? application.session : null
112 anchors.fill: parent
114 anchors.fill: parent
115+ orientation: root.orientation
113
116
114 onSurfaceChanged: {
117 onSurfaceChanged: {
115 if (sessionContainer.surface) {
118 if (sessionContainer.surface) {
116 surfaceInitTimer.start();
119 surfaceInitTimer.start();
120+ d.forceSurfaceActiveFocusIfReady();
117 } else {
121 } else {
118 d.surfaceInitialized = false;
122 d.surfaceInitialized = false;
119 }
123 }
120− d.forceSurfaceActiveFocusIfReady();
121 }
124 }
122 }
125 }
123
126
qml/Stages/PhoneStage.qml+15−1
@@ -18,6 +18,7 @@ import QtQuick 2.0
18import Ubuntu.Components 0.1
18import Ubuntu.Components 0.1
19import Ubuntu.Gestures 0.1
19import Ubuntu.Gestures 0.1
20import Unity.Application 0.1
20import Unity.Application 0.1
21+import Unity.Session 0.1
21import Utils 0.1
22import Utils 0.1
22import "../Components"
23import "../Components"
23
24
@@ -30,6 +31,7 @@ Rectangle {
30 property bool interactive
31 property bool interactive
31 property bool spreadEnabled: true // If false, animations and right edge will be disabled
32 property bool spreadEnabled: true // If false, animations and right edge will be disabled
32 property real inverseProgress: 0 // This is the progress for left edge drags, in pixels.
33 property real inverseProgress: 0 // This is the progress for left edge drags, in pixels.
34+ property int orientation: Qt.PortraitOrientation
33
35
34 color: "black"
36 color: "black"
35
37
@@ -44,6 +46,9 @@ Rectangle {
44 }
46 }
45
47
46 onInverseProgressChanged: {
48 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)
47 if (inverseProgress == 0 && priv.oldInverseProgress > 0) {
52 if (inverseProgress == 0 && priv.oldInverseProgress > 0) {
48 // left edge drag released. Minimum distance is given by design.
53 // left edge drag released. Minimum distance is given by design.
49 if (priv.oldInverseProgress > units.gu(22)) {
54 if (priv.oldInverseProgress > units.gu(22)) {
@@ -92,6 +97,7 @@ Rectangle {
92 property var focusedAppDelegate: null
97 property var focusedAppDelegate: null
93
98
94 property real oldInverseProgress: 0
99 property real oldInverseProgress: 0
100+ property bool animateX: true
95
101
96 onFocusedAppIdChanged: focusedAppDelegate = spreadRepeater.itemAt(0);
102 onFocusedAppIdChanged: focusedAppDelegate = spreadRepeater.itemAt(0);
97
103
@@ -311,7 +317,8 @@ Rectangle {
311 Behavior on x {
317 Behavior on x {
312 enabled: root.spreadEnabled &&
318 enabled: root.spreadEnabled &&
313 !spreadView.active &&
319 !spreadView.active &&
314− !snapAnimation.running
320+ !snapAnimation.running &&
321+ priv.animateX
315 UbuntuNumberAnimation {
322 UbuntuNumberAnimation {
316 duration: UbuntuAnimation.FastDuration
323 duration: UbuntuAnimation.FastDuration
317 onRunningChanged: {
324 onRunningChanged: {
@@ -367,6 +374,13 @@ Rectangle {
367 progress: appDelegate.progress - spreadView.positionMarker1
374 progress: appDelegate.progress - spreadView.positionMarker1
368 }
375 }
369
376
377+ Binding {
378+ target: appDelegate
379+ property: "orientation"
380+ when: appDelegate.interactive
381+ value: root.orientation
382+ }
383+
370 onClicked: {
384 onClicked: {
371 if (spreadView.phase == 2) {
385 if (spreadView.phase == 2) {
372 if (ApplicationManager.focusedApplicationId == ApplicationManager.get(index).appId) {
386 if (ApplicationManager.focusedApplicationId == ApplicationManager.get(index).appId) {
qml/Stages/SessionContainer.qml+7
@@ -24,12 +24,14 @@ Item {
24 readonly property var childSessions: session ? session.childSessions : null
24 readonly property var childSessions: session ? session.childSessions : null
25 readonly property alias surface: _surfaceContainer.surface
25 readonly property alias surface: _surfaceContainer.surface
26 property bool interactive: true
26 property bool interactive: true
27+ property int orientation
27
28
28 readonly property alias surfaceContainer: _surfaceContainer
29 readonly property alias surfaceContainer: _surfaceContainer
29 SurfaceContainer {
30 SurfaceContainer {
30 id: _surfaceContainer
31 id: _surfaceContainer
31 anchors.fill: parent
32 anchors.fill: parent
32 surface: session ? session.surface : null
33 surface: session ? session.surface : null
34+ orientation: root.orientation
33 }
35 }
34
36
35 Binding {
37 Binding {
@@ -74,6 +76,11 @@ Item {
74 target: item; when: item
76 target: item; when: item
75 property: "height"; value: root.height
77 property: "height"; value: root.height
76 }
78 }
79+
80+ Binding {
81+ target: item; when: item
82+ property: "orientation"; value: root.orientation
83+ }
77 }
84 }
78 }
85 }
79
86
qml/Stages/SpreadDelegate.qml+3
@@ -36,6 +36,7 @@ Item {
36 property alias swipeToCloseEnabled: dragArea.enabled
36 property alias swipeToCloseEnabled: dragArea.enabled
37 property bool closeable
37 property bool closeable
38 property alias application: appWindow.application
38 property alias application: appWindow.application
39+ property int orientation
39
40
40 Item {
41 Item {
41 objectName: "appWindowWithShadow"
42 objectName: "appWindowWithShadow"
@@ -56,12 +57,14 @@ Item {
56
57
57 ApplicationWindow {
58 ApplicationWindow {
58 id: appWindow
59 id: appWindow
60+ objectName: application ? "appWindow_" + application.appId : "appWindow_null"
59 anchors {
61 anchors {
60 fill: parent
62 fill: parent
61 topMargin: appWindow.fullscreen ? 0 : maximizedAppTopMargin
63 topMargin: appWindow.fullscreen ? 0 : maximizedAppTopMargin
62 }
64 }
63
65
64 interactive: root.interactive
66 interactive: root.interactive
67+ orientation: root.orientation
65 }
68 }
66 }
69 }
67
70
qml/Stages/SurfaceContainer.qml+5
@@ -22,6 +22,7 @@ Item {
22 objectName: "surfaceContainer"
22 objectName: "surfaceContainer"
23 property Item surface: null
23 property Item surface: null
24 property bool hadSurface: false
24 property bool hadSurface: false
25+ property int orientation
25
26
26 onSurfaceChanged: {
27 onSurfaceChanged: {
27 if (surface) {
28 if (surface) {
@@ -34,6 +35,10 @@ Item {
34 target: surface
35 target: surface
35 property: "anchors.fill"; value: root
36 property: "anchors.fill"; value: root
36 }
37 }
38+ Binding {
39+ target: surface
40+ property: "orientation"; value: root.orientation
41+ }
37
42
38 states: [
43 states: [
39 State {
44 State {
qml/Stages/TabletStage.qml+13
@@ -34,8 +34,12 @@ Rectangle {
34 property real maximizedAppTopMargin
34 property real maximizedAppTopMargin
35 property bool interactive
35 property bool interactive
36 property real inverseProgress: 0 // This is the progress for left edge drags, in pixels.
36 property real inverseProgress: 0 // This is the progress for left edge drags, in pixels.
37+ property int orientation: Qt.PortraitOrientation
37
38
38 onInverseProgressChanged: {
39 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)
39 if (inverseProgress == 0 && priv.oldInverseProgress > 0) {
43 if (inverseProgress == 0 && priv.oldInverseProgress > 0) {
40 // left edge drag released. Minimum distance is given by design.
44 // left edge drag released. Minimum distance is given by design.
41 if (priv.oldInverseProgress > units.gu(22)) {
45 if (priv.oldInverseProgress > units.gu(22)) {
@@ -193,6 +197,8 @@ Rectangle {
193 property int draggedDelegateCount: 0
197 property int draggedDelegateCount: 0
194 property int closingIndex: -1
198 property int closingIndex: -1
195
199
200+ property bool animateX: true
201+
196 property bool sideStageDragging: sideStageDragHandle.dragging
202 property bool sideStageDragging: sideStageDragHandle.dragging
197 property real sideStageDragProgress: sideStageDragHandle.progress
203 property real sideStageDragProgress: sideStageDragHandle.progress
198
204
@@ -530,6 +536,13 @@ Rectangle {
530 return progress;
536 return progress;
531 }
537 }
532
538
539+ Binding {
540+ target: spreadTile
541+ property: "orientation"
542+ when: spreadTile.interactive
543+ value: root.orientation
544+ }
545+
533 onClicked: {
546 onClicked: {
534 if (spreadView.phase == 2) {
547 if (spreadView.phase == 2) {
535 spreadView.snapTo(index);
548 spreadView.snapTo(index);
qml/Stages/TransformedTabletSpreadDelegate.qml+2−1
@@ -138,7 +138,8 @@ SpreadDelegate {
138 enabled: !spreadView.active &&
138 enabled: !spreadView.active &&
139 !snapAnimation.running &&
139 !snapAnimation.running &&
140 model.appId !== "unity8-dash" &&
140 model.appId !== "unity8-dash" &&
141− !spreadView.sideStageDragging
141+ !spreadView.sideStageDragging &&
142+ spreadView.animateX
142 UbuntuNumberAnimation {
143 UbuntuNumberAnimation {
143 duration: UbuntuAnimation.FastDuration
144 duration: UbuntuAnimation.FastDuration
144 }
145 }
run_on_device.sh+43−41
@@ -4,8 +4,8 @@ USER=phablet
4USER_ID=32011
4USER_ID=32011
5PACKAGE=unity8
5PACKAGE=unity8
6BINARY=unity8
6BINARY=unity8
7−TARGET_IP=${TARGET_IP-127.0.0.1}
7+TARGET_IP=127.0.0.1
8−TARGET_SSH_PORT=${TARGET_SSH_PORT-2222}
8+TARGET_SSH_PORT=2222
9TARGET_DEBUG_PORT=3768
9TARGET_DEBUG_PORT=3768
10RUN_OPTIONS=-qmljsdebugger=port:$TARGET_DEBUG_PORT
10RUN_OPTIONS=-qmljsdebugger=port:$TARGET_DEBUG_PORT
11SETUP=false
11SETUP=false
@@ -14,18 +14,23 @@ PINLOCK=false
14KEYLOCK=false
14KEYLOCK=false
15NUM_JOBS='$(( `grep -c ^processor /proc/cpuinfo` + 1 ))'
15NUM_JOBS='$(( `grep -c ^processor /proc/cpuinfo` + 1 ))'
16FLIPPED=false
16FLIPPED=false
17−CHROOT_PREFIX="/data/ubuntu"
18SSH_WAS_STARTED=0
17SSH_WAS_STARTED=0
19SSH_STARTED=0
18SSH_STARTED=0
19+PASSWORD=""
20+PASSFILE=""
20
21
21usage() {
22usage() {
22− echo "usage: run_on_device [OPTIONS]\n"
23+ echo "usage: run_on_device -a SUDO_PASSWORD [OPTIONS]"
24+ echo
23− echo "Script to setup a build environment for the shell and sync build and run it on the device\n"
25+ echo "Script to setup a build environment for the shell and sync build and run it on the device"
26+ echo
24 echo "OPTIONS:"
27 echo "OPTIONS:"
28+ echo " -a, --password The sudo password to use"
25− echo " -s, --setup Setup the build environment"
29+ echo " -s, --setup Setup the build environment"
30+ echo " -g, --gdb Run with gdb"
26− echo " -p, --pinlock Enable a PIN lock screen when running"
31+ echo " -p, --pinlock Enable a PIN lock screen when running"
27− echo " -k, --keylock Enable a Keyboard lock screen when running"
32+ echo " -k, --keylock Enable a Keyboard lock screen when running"
28− echo ""
33+ echo
29 echo "IMPORTANT:"
34 echo "IMPORTANT:"
30 echo " * Make sure to have networking setup on the device beforehand."
35 echo " * Make sure to have networking setup on the device beforehand."
31 echo " * Execute that script from a directory containing unity8 code."
36 echo " * Execute that script from a directory containing unity8 code."
@@ -34,7 +39,7 @@ usage() {
34
39
35start_ssh() {
40start_ssh() {
36 if [ $SSH_STARTED -eq 0 ]; then
41 if [ $SSH_STARTED -eq 0 ]; then
37− exec_with_adb initctl start ssh
42+ adb_sudo initctl start ssh
38 SSH_STARTED=1
43 SSH_STARTED=1
39 fi
44 fi
40}
45}
@@ -44,25 +49,13 @@ exec_with_ssh() {
44 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -t $USER@$TARGET_IP -p $TARGET_SSH_PORT sudo -u $USER -i bash -ic \"$@\"
49 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -t $USER@$TARGET_IP -p $TARGET_SSH_PORT sudo -u $USER -i bash -ic \"$@\"
45}
50}
46
51
47−exec_with_adb() {
52+adb_sudo() {
48− if $FLIPPED; then
53+ adb shell "SUDO_ASKPASS=${PASSFILE} sudo --askpass $@"
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
58}
54}
59
55
60install_ssh_key() {
56install_ssh_key() {
61− ssh-keygen -R $TARGET_IP
62− HOME_DIR="${CHROOT_PREFIX}/home/phablet"
57+ HOME_DIR="/home/phablet"
63 adb push ~/.ssh/id_rsa.pub $HOME_DIR/.ssh/authorized_keys
58 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
66 adb shell chmod 700 $HOME_DIR/.ssh
59 adb shell chmod 700 $HOME_DIR/.ssh
67 adb shell chmod 600 $HOME_DIR/.ssh/authorized_keys
60 adb shell chmod 600 $HOME_DIR/.ssh/authorized_keys
68}
61}
@@ -73,8 +66,14 @@ setup_adb_forwarding() {
73}
66}
74
67
75install_dependencies() {
68install_dependencies() {
76− exec_with_adb apt-get update
69+ phablet-config writable-image --remotepassword ${PASSWORD} -p build-essential \
77− exec_with_adb apt-get -y --force-yes install build-essential rsync bzr ccache gdb ninja-build devscripts equivs unity-plugin-scopes
70+ -p rsync \
71+ -p bzr \
72+ -p ccache \
73+ -p gdb \
74+ -p ninja-build \
75+ -p devscripts \
76+ -p equivs
78}
77}
79
78
80sync_code() {
79sync_code() {
@@ -108,12 +107,13 @@ run() {
108 exec_with_ssh "start unity8"
107 exec_with_ssh "start unity8"
109}
108}
110
109
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" "$@"`
112
111
113# FIXME: giving incorrect arguments does not call usage and exit
112# FIXME: giving incorrect arguments does not call usage and exit
114while [ $# -gt 0 ]
113while [ $# -gt 0 ]
115do
114do
116 case "$1" in
115 case "$1" in
116+ -a|--password) PASSWORD=$2;;
117 -s|--setup) SETUP=true;;
117 -s|--setup) SETUP=true;;
118 -g|--gdb) GDB=true;;
118 -g|--gdb) GDB=true;;
119 -p|--pinlock) PINLOCK=true;;
119 -p|--pinlock) PINLOCK=true;;
@@ -124,21 +124,21 @@ do
124 shift
124 shift
125done
125done
126
126
127+if [ -z "${PASSWORD}" ]; then
128+ echo "ERROR: You need to provide a sudo password..."
129+ echo
130+ usage
131+fi
127
132
128−adb_root
133+PASSFILE=$( adb shell "FILE=\`mktemp\`
129−[ "${TARGET_IP}" = "127.0.0.1" ] && setup_adb_forwarding
134+ echo \"#!/bin/sh\" > \$FILE
135+ echo \"echo \\\"${PASSWORD}\\\"\" >> \$FILE
136+ chmod +x \$FILE
137+ echo \$FILE" | tr -d '\r' )
130
138
131−if [ "`adb shell 'grep -q Ubuntu /etc/lsb-release 2> /dev/null && echo -n FLIPPED'`" = "FLIPPED" ]; then
139+setup_adb_forwarding
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
140
140
141−status_output=$(exec_with_adb initctl status ssh)
141+status_output=$(adb_sudo initctl status ssh)
142if [[ $status_output == "ssh start/running, process "* ]]; then
142if [[ $status_output == "ssh start/running, process "* ]]; then
143 SSH_WAS_STARTED=1
143 SSH_WAS_STARTED=1
144fi
144fi
@@ -158,6 +158,8 @@ else
158 run
158 run
159fi
159fi
160
160
161+adb shell "rm ${PASSFILE}"
162+
161if [ $SSH_WAS_STARTED -eq 0 ]; then
163if [ $SSH_WAS_STARTED -eq 0 ]; then
162− exec_with_adb initctl stop ssh
164+ adb_sudo initctl stop ssh
163fi
165fi
src/Dash/CMakeLists.txt+1
@@ -1,5 +1,6 @@
1set(DASH_SRCS
1set(DASH_SRCS
2 main.cpp
2 main.cpp
3+ ../ApplicationArguments.h
3 ../MouseTouchAdaptor.cpp
4 ../MouseTouchAdaptor.cpp
4 ../CachingNetworkManagerFactory.cpp
5 ../CachingNetworkManagerFactory.cpp
5)
6)
src/Dash/main.cpp+17−2
@@ -28,6 +28,7 @@
28
28
29#include <paths.h>
29#include <paths.h>
30#include "../MouseTouchAdaptor.h"
30#include "../MouseTouchAdaptor.h"
31+#include "../ApplicationArguments.h"
31#include "../CachingNetworkManagerFactory.h"
32#include "../CachingNetworkManagerFactory.h"
32
33
33int main(int argc, const char *argv[])
34int main(int argc, const char *argv[])
@@ -42,7 +43,11 @@ int main(int argc, const char *argv[])
42 "Allow the mouse to provide touch input");
43 "Allow the mouse to provide touch input");
43 parser.addOption(mousetouchOption);
44 parser.addOption(mousetouchOption);
44
45
46+ QCommandLineOption windowGeometryOption(QStringList() << "windowgeometry",
47+ "Specify the window geometry as [<width>x<height>]", "windowgeometry", "1");
48+ parser.addOption(windowGeometryOption);
49+
45− // FIXME Remove once we drop the need of the hint
50+ // FIXME Remove once we drop the need of the hint
46 QCommandLineOption desktopFileHintOption("desktop_file_hint",
51 QCommandLineOption desktopFileHintOption("desktop_file_hint",
47 "The desktop_file_hint option for QtMir", "hint_file");
52 "The desktop_file_hint option for QtMir", "hint_file");
48 parser.addOption(desktopFileHintOption);
53 parser.addOption(desktopFileHintOption);
@@ -52,6 +57,14 @@ int main(int argc, const char *argv[])
52 parser.setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions);
57 parser.setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions);
53 parser.process(*application);
58 parser.process(*application);
54
59
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+
55 if (getenv("QT_LOAD_TESTABILITY")) {
68 if (getenv("QT_LOAD_TESTABILITY")) {
56 QLibrary testLib(QLatin1String("qttestability"));
69 QLibrary testLib(QLatin1String("qttestability"));
57 if (testLib.load()) {
70 if (testLib.load()) {
@@ -68,10 +81,12 @@ int main(int argc, const char *argv[])
68 }
81 }
69
82
70 bindtextdomain("unity8", translationDirectory().toUtf8().data());
83 bindtextdomain("unity8", translationDirectory().toUtf8().data());
84+ textdomain("unity8");
71
85
72 QQuickView* view = new QQuickView();
86 QQuickView* view = new QQuickView();
73 view->setResizeMode(QQuickView::SizeRootObjectToView);
87 view->setResizeMode(QQuickView::SizeRootObjectToView);
74− view->setTitle("Unity Dash");
88+ view->setTitle("Scopes");
89+ view->rootContext()->setContextProperty("applicationArguments", &qmlArgs);
75
90
76 // You will need this if you want to interact with touch-only components using a mouse
91 // You will need this if you want to interact with touch-only components using a mouse
77 // Needed only when manually testing on a desktop.
92 // Needed only when manually testing on a desktop.
src/main.cpp+1
@@ -108,6 +108,7 @@ Load the testability driver");
108 }
108 }
109
109
110 bindtextdomain("unity8", translationDirectory().toUtf8().data());
110 bindtextdomain("unity8", translationDirectory().toUtf8().data());
111+ textdomain("unity8");
111
112
112 QQuickView* view = new QQuickView();
113 QQuickView* view = new QQuickView();
113 view->setResizeMode(QQuickView::SizeRootObjectToView);
114 view->setResizeMode(QQuickView::SizeRootObjectToView);
tests/autopilot/unity8/application_lifecycle/tests/test_application_lifecycle.py+4−2
@@ -97,7 +97,8 @@ class ApplicationLifecycleTests(tests.ApplicationLifeCycleTestCase):
97 self.assertThat(greeter.created, Eventually(Equals(True)))
97 self.assertThat(greeter.created, Eventually(Equals(True)))
98
98
99 application_name = self.launch_fake_app()
99 application_name = self.launch_fake_app()
100− self.assertThat(greeter.created, Eventually(Equals(False)))
100+ greeter.wait_swiped_away()
101+ process_helpers.unlock_unity()
101 self.assert_current_focused_application(application_name)
102 self.assert_current_focused_application(application_name)
102
103
103 def test_greeter_hides_on_app_focus(self):
104 def test_greeter_hides_on_app_focus(self):
@@ -113,7 +114,8 @@ class ApplicationLifecycleTests(tests.ApplicationLifeCycleTestCase):
113 self.assertThat(greeter.created, Eventually(Equals(True)))
114 self.assertThat(greeter.created, Eventually(Equals(True)))
114
115
115 self.launch_upstart_application(application_name)
116 self.launch_upstart_application(application_name)
116− self.assertThat(greeter.created, Eventually(Equals(False)))
117+ greeter.wait_swiped_away()
118+ process_helpers.unlock_unity()
117 self.assert_current_focused_application(application_name)
119 self.assert_current_focused_application(application_name)
118
120
119 def test_click_dash_icon_must_unfocus_application(self):
121 def test_click_dash_icon_must_unfocus_application(self):
tests/autopilot/unity8/process_helpers.py+12−17
@@ -20,6 +20,7 @@
20import logging
20import logging
21import subprocess
21import subprocess
22import sys
22import sys
23+import dbus
23
24
24# This has to work in both python 3 (ap 1.5) and py2 (ap legacy 1.4.1) so we
25# This has to work in both python 3 (ap 1.5) and py2 (ap legacy 1.4.1) so we
25# pick the correct location in each case. Remove the py2 branch once we no
26# 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):
82 if greeter.created is False:
83 if greeter.created is False:
83 raise RuntimeWarning("Greeter appears to be already unlocked.")
84 raise RuntimeWarning("Greeter appears to be already unlocked.")
84
85
85− # Because of potential input jerkiness under heavy load,
86+ bus = dbus.SessionBus()
86− # retry unlocking the greeter two times.
87+ dbus_proxy = bus.get_object("com.canonical.UnityGreeter", "/")
87− # https://bugs.launchpad.net/ubuntu/+bug/1260113
88−
89− retries = 3
90− while retries > 0:
91− try:
88+ try:
92− greeter.swipe()
89+ dbus_proxy.HideGreeter()
93− except AssertionError:
90+ except dbus.DBusException:
94− retries -= 1
95− if retries == 0:
96− raise
97− logger.info("Failed to unlock greeter, trying again...")
91+ logger.info("Failed to unlock greeter")
92+ raise
98− else:
93+ else:
94+ greeter.created.wait_for(False)
99− logger.info("Greeter unlocked, continuing.")
95+ logger.info("Greeter unlocked, continuing.")
100− break
101
96
102
97
103def lock_unity(unity_proxy_obj=None):
98def lock_unity(unity_proxy_obj=None):
@@ -198,7 +193,7 @@ def get_job_status(name):
198 ], universal_newlines=True)
193 ], universal_newlines=True)
199 except subprocess.CalledProcessError as error:
194 except subprocess.CalledProcessError as error:
200 raise JobError(
195 raise JobError(
201− "Unable to get {}'s status: {}".format(name, error)
196+ "Unable to get {}'s status: {}".format(name, error)
202 )
197 )
203
198
204
199
tests/autopilot/unity8/shell/emulators/greeter.py+4−1
@@ -25,6 +25,9 @@ from unity8.shell.emulators import UnityEmulatorBase
25class Greeter(UnityEmulatorBase):
25class Greeter(UnityEmulatorBase):
26 """An emulator that understands the greeter screen."""
26 """An emulator that understands the greeter screen."""
27
27
28+ def wait_swiped_away(self):
29+ self.showProgress.wait_for(0)
30+
28 def swipe(self):
31 def swipe(self):
29 """Swipe the greeter screen away."""
32 """Swipe the greeter screen away."""
30 self.created.wait_for(True)
33 self.created.wait_for(True)
@@ -37,7 +40,7 @@ class Greeter(UnityEmulatorBase):
37 stop_y = start_y
40 stop_y = start_y
38 self.pointing_device.drag(start_x, start_y, stop_x, stop_y)
41 self.pointing_device.drag(start_x, start_y, stop_x, stop_y)
39
42
40− self.showProgress.wait_for(0)
43+ self.wait_swiped_away()
41
44
42 def get_prompt(self):
45 def get_prompt(self):
43 return self.select_single(
46 return self.select_single(
tests/autopilot/unity8/shell/tests/__init__.py+4−21
@@ -432,12 +432,6 @@ class DashBaseTestCase(AutopilotTestCase):
432 binary_path = get_binary_path('unity8-dash')
432 binary_path = get_binary_path('unity8-dash')
433 dash_proxy = self.launch_dash(binary_path, self.environment)
433 dash_proxy = self.launch_dash(binary_path, self.environment)
434
434
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−
441 self.dash_app = dash_helpers.DashApp(dash_proxy)
435 self.dash_app = dash_helpers.DashApp(dash_proxy)
442 self.dash = self.dash_app.dash
436 self.dash = self.dash_app.dash
443 self.wait_for_dash()
437 self.wait_for_dash()
@@ -470,18 +464,7 @@ class DashBaseTestCase(AutopilotTestCase):
470 simulate_device_fixture = self.useFixture(
464 simulate_device_fixture = self.useFixture(
471 toolkit_fixtures.SimulateDevice(
465 toolkit_fixtures.SimulateDevice(
472 self.app_width, self.app_height, self.grid_unit_px))
466 self.app_width, self.app_height, self.grid_unit_px))
473− self.app_width = simulate_device_fixture.app_width
467+ self.environment['GRID_UNIT_PX'] = simulate_device_fixture.grid_unit_px
474− self.app_height = simulate_device_fixture.app_height
468+ self.environment['ARGS'] = '-windowgeometry {0}x{1}'\
475−
469+ .format(simulate_device_fixture.app_width,
476− def resize_window(self):
470+ simulate_device_fixture.app_height)
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))))
tests/autopilot/unity8/shell/tests/test_lock_screen.py+8−9
@@ -20,7 +20,6 @@
20
20
21from __future__ import absolute_import
21from __future__ import absolute_import
22
22
23−from unity8.process_helpers import unlock_unity
24from unity8.shell import with_lightdm_mock
23from unity8.shell import with_lightdm_mock
25from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
24from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
26
25
@@ -45,11 +44,11 @@ class TestLockscreen(UnityTestCase):
45 @with_lightdm_mock("single-pin")
44 @with_lightdm_mock("single-pin")
46 def test_can_unlock_pin_screen(self):
45 def test_can_unlock_pin_screen(self):
47 """Must be able to unlock the PIN entry lock screen."""
46 """Must be able to unlock the PIN entry lock screen."""
48− unity_proxy = self.launch_unity()
47+ self.launch_unity()
49 greeter = self.main_window.get_greeter()
48 greeter = self.main_window.get_greeter()
50
49
51 if greeter.narrowMode:
50 if greeter.narrowMode:
52− unlock_unity(unity_proxy)
51+ greeter.swipe()
53 lockscreen = self._wait_for_lockscreen()
52 lockscreen = self._wait_for_lockscreen()
54 self.main_window.enter_pin_code("1234")
53 self.main_window.enter_pin_code("1234")
55 self.assertThat(lockscreen.shown, Eventually(Equals(False)))
54 self.assertThat(lockscreen.shown, Eventually(Equals(False)))
@@ -60,11 +59,11 @@ class TestLockscreen(UnityTestCase):
60 @with_lightdm_mock("single-passphrase")
59 @with_lightdm_mock("single-passphrase")
61 def test_can_unlock_passphrase_screen(self):
60 def test_can_unlock_passphrase_screen(self):
62 """Must be able to unlock the passphrase entry screen."""
61 """Must be able to unlock the passphrase entry screen."""
63− unity_proxy = self.launch_unity()
62+ self.launch_unity()
64 greeter = self.main_window.get_greeter()
63 greeter = self.main_window.get_greeter()
65
64
66 if greeter.narrowMode:
65 if greeter.narrowMode:
67− unlock_unity(unity_proxy)
66+ greeter.swipe()
68 lockscreen = self._wait_for_lockscreen()
67 lockscreen = self._wait_for_lockscreen()
69 self._enter_pin_passphrase("password")
68 self._enter_pin_passphrase("password")
70 self.assertThat(lockscreen.shown, Eventually(Equals(False)))
69 self.assertThat(lockscreen.shown, Eventually(Equals(False)))
@@ -75,11 +74,11 @@ class TestLockscreen(UnityTestCase):
75 @with_lightdm_mock("single-pin")
74 @with_lightdm_mock("single-pin")
76 def test_pin_screen_wrong_code(self):
75 def test_pin_screen_wrong_code(self):
77 """Entering the wrong pin code must not dismiss the lock screen."""
76 """Entering the wrong pin code must not dismiss the lock screen."""
78− unity_proxy = self.launch_unity()
77+ self.launch_unity()
79 greeter = self.main_window.get_greeter()
78 greeter = self.main_window.get_greeter()
80
79
81 if greeter.narrowMode:
80 if greeter.narrowMode:
82− unlock_unity(unity_proxy)
81+ greeter.swipe()
83 lockscreen = self._wait_for_lockscreen()
82 lockscreen = self._wait_for_lockscreen()
84 self.main_window.enter_pin_code("4321")
83 self.main_window.enter_pin_code("4321")
85 pinentryField = self.main_window.get_pinentryField()
84 pinentryField = self.main_window.get_pinentryField()
@@ -94,11 +93,11 @@ class TestLockscreen(UnityTestCase):
94 @with_lightdm_mock("single-passphrase")
93 @with_lightdm_mock("single-passphrase")
95 def test_passphrase_screen_wrong_password(self):
94 def test_passphrase_screen_wrong_password(self):
96 """Entering the wrong password must not dismiss the lock screen."""
95 """Entering the wrong password must not dismiss the lock screen."""
97− unity_proxy = self.launch_unity()
96+ self.launch_unity()
98 greeter = self.main_window.get_greeter()
97 greeter = self.main_window.get_greeter()
99
98
100 if greeter.narrowMode:
99 if greeter.narrowMode:
101− unlock_unity(unity_proxy)
100+ greeter.swipe()
102 lockscreen = self._wait_for_lockscreen()
101 lockscreen = self._wait_for_lockscreen()
103 self._enter_pin_passphrase("foobar")
102 self._enter_pin_passphrase("foobar")
104 pinentryField = self.main_window.get_pinentryField()
103 pinentryField = self.main_window.get_pinentryField()
tests/autopilot/unity8/shell/tests/test_notifications.py+61−97
@@ -135,10 +135,7 @@ class InteractiveNotificationBase(NotificationsBase):
135 actions = [("action_id", "dummy")]
135 actions = [("action_id", "dummy")]
136 hints = [
136 hints = [
137 ("x-canonical-switch-to-application", "true"),
137 ("x-canonical-switch-to-application", "true"),
138− (
139− "x-canonical-secondary-icon",
138+ ("x-canonical-secondary-icon","dialer")
140− self._get_icon_path('applicationIcons/dialer-app.png')
141− )
142 ]
139 ]
143
140
144 self._create_interactive_notification(
141 self._create_interactive_notification(
@@ -170,20 +167,19 @@ class InteractiveNotificationBase(NotificationsBase):
170 body = "Frank Zappa\n+44 (0)7736 027340"
167 body = "Frank Zappa\n+44 (0)7736 027340"
171 icon_path = self._get_icon_path('avatars/anna_olsson.png')
168 icon_path = self._get_icon_path('avatars/anna_olsson.png')
172 hints = [
169 hints = [
173− (
174− "x-canonical-secondary-icon",
170+ ("x-canonical-secondary-icon", "incoming-call"),
175− self._get_icon_path('applicationIcons/dialer-app.png')
176− ),
177 ("x-canonical-snap-decisions", "true"),
171 ("x-canonical-snap-decisions", "true"),
172+ ("x-canonical-private-affirmative-tint", "true"),
173+ ("x-canonical-private-rejection-tint", "true"),
178 ]
174 ]
179
175
180 actions = [
176 actions = [
181 ('action_accept', 'Hold + Answer'),
177 ('action_accept', 'Hold + Answer'),
182 ('action_decline_1', 'End + Answer'),
178 ('action_decline_1', 'End + Answer'),
183 ('action_decline_2', 'Decline'),
179 ('action_decline_2', 'Decline'),
184− ('action_decline_3', 'messages:I missed your call - can you call me now?'),
180+ ('action_decline_3', 'message:I missed your call - can you call me now?'),
185− ('action_decline_4', 'messages:I\'m running late. I\'m on my way.'),
181+ ('action_decline_4', 'message:I\'m running late. I\'m on my way.'),
186− ('action_decline_5', 'messages:I\'m busy at the moment. I\'ll call later.'),
182+ ('action_decline_5', 'message:I\'m busy at the moment. I\'ll call later.'),
187 ('action_decline_6', 'edit:Custom'),
183 ('action_decline_6', 'edit:Custom'),
188 ]
184 ]
189
185
@@ -204,13 +200,53 @@ class InteractiveNotificationBase(NotificationsBase):
204 notification.pointing_device.click_object(
200 notification.pointing_device.click_object(
205 notification.select_single(objectName="combobutton_dropdown"))
201 notification.select_single(objectName="combobutton_dropdown"))
206 self.assertThat(
202 self.assertThat(
207− notification.select_single(objectName="button2").expanded,
203+ notification.select_single(objectName="notify_button2").expanded,
208 Eventually(Equals(True)))
204 Eventually(Equals(True)))
209 time.sleep(2)
205 time.sleep(2)
210 notification.pointing_device.click_object(
206 notification.pointing_device.click_object(
211− notification.select_single(objectName="button4"))
207+ notification.select_single(objectName="notify_button4"))
212 self.assert_notification_action_id_was_called("action_decline_4")
208 self.assert_notification_action_id_was_called("action_decline_4")
213
209
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+
214 def test_modal_sd_without_greeter(self):
250 def test_modal_sd_without_greeter(self):
215 """Snap-decision should block input to shell without greeter."""
251 """Snap-decision should block input to shell without greeter."""
216 unity_proxy = self.launch_unity()
252 unity_proxy = self.launch_unity()
@@ -222,6 +258,8 @@ class InteractiveNotificationBase(NotificationsBase):
222 hints = [
258 hints = [
223 ("x-canonical-snap-decisions", "true"),
259 ("x-canonical-snap-decisions", "true"),
224 ("x-canonical-non-shaped-icon", "true"),
260 ("x-canonical-non-shaped-icon", "true"),
261+ ("x-canonical-private-affirmative-tint", "true"),
262+ ("x-canonical-private-rejection-tint", "true"),
225 ]
263 ]
226
264
227 actions = [
265 actions = [
@@ -253,7 +291,7 @@ class InteractiveNotificationBase(NotificationsBase):
253 self._assert_notification(
291 self._assert_notification(
254 notification, summary, body, True, False, 1.0)
292 notification, summary, body, True, False, 1.0)
255 notification.pointing_device.click_object(
293 notification.pointing_device.click_object(
256− notification.select_single(objectName="button0"))
294+ notification.select_single(objectName="notify_button0"))
257 self.assert_notification_action_id_was_called("action_accept")
295 self.assert_notification_action_id_was_called("action_accept")
258
296
259 def test_modal_sd_with_greeter(self):
297 def test_modal_sd_with_greeter(self):
@@ -266,6 +304,8 @@ class InteractiveNotificationBase(NotificationsBase):
266 hints = [
304 hints = [
267 ("x-canonical-snap-decisions", "true"),
305 ("x-canonical-snap-decisions", "true"),
268 ("x-canonical-non-shaped-icon", "true"),
306 ("x-canonical-non-shaped-icon", "true"),
307+ ("x-canonical-private-affirmative-tint", "true"),
308+ ("x-canonical-private-rejection-tint", "true"),
269 ]
309 ]
270
310
271 actions = [
311 actions = [
@@ -296,7 +336,7 @@ class InteractiveNotificationBase(NotificationsBase):
296 self._assert_notification(
336 self._assert_notification(
297 notification, summary, body, True, False, 1.0)
337 notification, summary, body, True, False, 1.0)
298 notification.pointing_device.click_object(
338 notification.pointing_device.click_object(
299− notification.select_single(objectName="button0"))
339+ notification.select_single(objectName="notify_button0"))
300 self.assert_notification_action_id_was_called("action_accept")
340 self.assert_notification_action_id_was_called("action_accept")
301
341
302 def _create_interactive_notification(
342 def _create_interactive_notification(
@@ -438,10 +478,7 @@ class EphemeralNotificationsTests(NotificationsBase):
438 "join me and Anna?"
478 "join me and Anna?"
439 icon_path = self._get_icon_path('avatars/anna_olsson.png')
479 icon_path = self._get_icon_path('avatars/anna_olsson.png')
440 hints = [
480 hints = [
441− (
442− "x-canonical-secondary-icon",
481+ ("x-canonical-secondary-icon", "message")
443− self._get_icon_path('applicationIcons/dialer-app.png')
444− )
445 ]
482 ]
446
483
447 notification = shell.create_ephemeral_notification(
484 notification = shell.create_ephemeral_notification(
@@ -474,17 +511,13 @@ class EphemeralNotificationsTests(NotificationsBase):
474 notify_list = self._get_notifications_list()
511 notify_list = self._get_notifications_list()
475
512
476 summary = "Upload of image completed"
513 summary = "Upload of image completed"
477− hints = [
478− (
479− "x-canonical-secondary-icon",
480− self._get_icon_path('applicationIcons/facebook.png')
514+ icon_path = self._get_icon_path('applicationIcons/facebook.png')
481− )
515+ hints=[]
482− ]
483
516
484 notification = shell.create_ephemeral_notification(
517 notification = shell.create_ephemeral_notification(
485 summary,
518 summary,
486 None,
519 None,
487− None,
520+ icon_path,
488 hints,
521 hints,
489 "NORMAL",
522 "NORMAL",
490 )
523 )
@@ -497,8 +530,8 @@ class EphemeralNotificationsTests(NotificationsBase):
497 notification(),
530 notification(),
498 summary,
531 summary,
499 None,
532 None,
500− False,
501 True,
533 True,
534+ False,
502 1.0
535 1.0
503 )
536 )
504
537
@@ -683,7 +716,7 @@ class EphemeralNotificationsTests(NotificationsBase):
683 body = 'This bubble uses the icon-title-body layout with a ' \
716 body = 'This bubble uses the icon-title-body layout with a ' \
684 'secondary icon.'
717 'secondary icon.'
685 icon_path = self._get_icon_path('avatars/anna_olsson.png')
718 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'
687
720
688 notification = shell.create_ephemeral_notification(
721 notification = shell.create_ephemeral_notification(
689 summary,
722 summary,
@@ -718,72 +751,3 @@ class EphemeralNotificationsTests(NotificationsBase):
718 self.assertThat(get_notification, Eventually(NotEquals(None)))
751 self.assertThat(get_notification, Eventually(NotEquals(None)))
719 self._assert_notification(
752 self._assert_notification(
720 get_notification(), summary, body, False, False, 1.0)
753 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)
63DeeModel *hud_client_query_get_results_model(HudClientQuery *cquery)
63DeeModel *hud_client_query_get_results_model(HudClientQuery *cquery)
64{
64{
65 Q_ASSERT(cquery == HudClientStub::m_query);
65 Q_ASSERT(cquery == HudClientStub::m_query);
66+ Q_UNUSED(cquery);
66 if (!resultsModel) {
67 if (!resultsModel) {
67 resultsModel = dee_sequence_model_new();
68 resultsModel = dee_sequence_model_new();
68 dee_model_set_schema_full(resultsModel, results_model_schema, G_N_ELEMENTS(results_model_schema));
69 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
113{
114{
114 Q_ASSERT(cquery == HudClientStub::m_query);
115 Q_ASSERT(cquery == HudClientStub::m_query);
115 Q_UNUSED(timestamp);
116 Q_UNUSED(timestamp);
117+ Q_UNUSED(cquery);
116 HudClientStub::m_lastExecutedToolbarItem = item;
118 HudClientStub::m_lastExecutedToolbarItem = item;
117}
119}
118
120
119void hud_client_query_set_query(HudClientQuery *cquery, const char *query)
121void hud_client_query_set_query(HudClientQuery *cquery, const char *query)
120{
122{
121 Q_ASSERT(cquery == HudClientStub::m_query);
123 Q_ASSERT(cquery == HudClientStub::m_query);
124+ Q_UNUSED(cquery);
122 HudClientStub::m_lastSetQuery = QString::fromUtf8(query);
125 HudClientStub::m_lastSetQuery = QString::fromUtf8(query);
123}
126}
124
127
125void hud_client_query_execute_command(HudClientQuery *cquery, GVariant *command_key, guint timestamp)
128void hud_client_query_execute_command(HudClientQuery *cquery, GVariant *command_key, guint timestamp)
126{
129{
127 Q_ASSERT(cquery == HudClientStub::m_query);
130 Q_ASSERT(cquery == HudClientStub::m_query);
131+ Q_UNUSED(cquery);
128 Q_UNUSED(timestamp);
132 Q_UNUSED(timestamp);
129 for (uint i = 0; i < dee_model_get_n_rows(resultsModel); ++i) {
133 for (uint i = 0; i < dee_model_get_n_rows(resultsModel); ++i) {
130 DeeModelIter *iter = dee_model_get_iter_at_row(resultsModel, i);
134 DeeModelIter *iter = dee_model_get_iter_at_row(resultsModel, i);
@@ -144,6 +148,7 @@ void hud_client_query_execute_command(HudClientQuery *cquery, GVariant *command_
144HudClientParam *hud_client_query_execute_param_command(HudClientQuery *cquery, GVariant *command_key, guint timestamp)
148HudClientParam *hud_client_query_execute_param_command(HudClientQuery *cquery, GVariant *command_key, guint timestamp)
145{
149{
146 Q_ASSERT(cquery == HudClientStub::m_query);
150 Q_ASSERT(cquery == HudClientStub::m_query);
151+ Q_UNUSED(cquery);
147 Q_UNUSED(timestamp);
152 Q_UNUSED(timestamp);
148 for (uint i = 0; i < dee_model_get_n_rows(resultsModel); ++i) {
153 for (uint i = 0; i < dee_model_get_n_rows(resultsModel); ++i) {
149 DeeModelIter *iter = dee_model_get_iter_at_row(resultsModel, i);
154 DeeModelIter *iter = dee_model_get_iter_at_row(resultsModel, i);
@@ -165,12 +170,14 @@ HudClientParam *hud_client_query_execute_param_command(HudClientQuery *cquery, G
165void hud_client_query_voice_query(HudClientQuery *cquery)
170void hud_client_query_voice_query(HudClientQuery *cquery)
166{
171{
167 Q_ASSERT(cquery == HudClientStub::m_query);
172 Q_ASSERT(cquery == HudClientStub::m_query);
173+ Q_UNUSED(cquery);
168 // TODO We are not testing voice queries yet
174 // TODO We are not testing voice queries yet
169}
175}
170
176
171gboolean hud_client_query_toolbar_item_active(HudClientQuery *cquery, HudClientQueryToolbarItems item)
177gboolean hud_client_query_toolbar_item_active(HudClientQuery *cquery, HudClientQueryToolbarItems item)
172{
178{
173 Q_ASSERT(cquery == HudClientStub::m_query);
179 Q_ASSERT(cquery == HudClientStub::m_query);
180+ Q_UNUSED(cquery);
174 if (item == HUD_CLIENT_QUERY_TOOLBAR_HELP)
181 if (item == HUD_CLIENT_QUERY_TOOLBAR_HELP)
175 return HudClientStub::m_helpToolbarItemEnabled;
182 return HudClientStub::m_helpToolbarItemEnabled;
176
183
@@ -218,7 +225,7 @@ GActionGroup *hud_client_param_get_actions(HudClientParam *param)
218 if (!parametrizedActionGroup) {
225 if (!parametrizedActionGroup) {
219 GSimpleActionGroup *actionGroup = g_simple_action_group_new();
226 GSimpleActionGroup *actionGroup = g_simple_action_group_new();
220 GSimpleAction *action = g_simple_action_new("costAction", G_VARIANT_TYPE_DOUBLE);
227 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));
222
229
223 g_signal_connect (action, "activate", G_CALLBACK (on_signal_activated), nullptr);
230 g_signal_connect (action, "activate", G_CALLBACK (on_signal_activated), nullptr);
224
231
tests/mocks/Powerd/Powerd.cpp+15−1
@@ -19,6 +19,20 @@
19#include "Powerd.h"
19#include "Powerd.h"
20
20
21Powerd::Powerd(QObject* parent)
21Powerd::Powerd(QObject* parent)
22− : QObject(parent)
22+ : QObject(parent),
23+ m_status(Powerd::Status::On)
23{
24{
24}
25}
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
26 Q_OBJECT
26 Q_OBJECT
27 Q_ENUMS(Status)
27 Q_ENUMS(Status)
28 Q_ENUMS(DisplayStateChangeReason)
28 Q_ENUMS(DisplayStateChangeReason)
29+ Q_PROPERTY(Status status READ status WRITE setStatus NOTIFY statusChanged) // write only exists for tests
29
30
30public:
31public:
31 enum DisplayStateChangeReason {
32 enum DisplayStateChangeReason {
@@ -42,8 +43,14 @@ public:
42
43
43 explicit Powerd(QObject *parent = 0);
44 explicit Powerd(QObject *parent = 0);
44
45
46+ Status status() const;
47+ void setStatus(Status status);
48+
45Q_SIGNALS:
49Q_SIGNALS:
46− void displayPowerStateChange(int status, int reason);
50+ void statusChanged(DisplayStateChangeReason reason);
51+
52+private:
53+ Status m_status;
47};
54};
48
55
49#endif
56#endif
tests/mocks/Powerd/Powerd.qmltypes+3−3
@@ -30,10 +30,10 @@ Module {
30 "On": 1
30 "On": 1
31 }
31 }
32 }
32 }
33+ Property { name: "status"; type: "Status" }
33 Signal {
34 Signal {
34− name: "displayPowerStateChange"
35+ name: "statusChanged"
35− Parameter { name: "status"; type: "int" }
36− Parameter { name: "reason"; type: "int" }
36+ Parameter { name: "reason"; type: "DisplayStateChangeReason" }
37 }
37 }
38 }
38 }
39}
39}
tests/mocks/QtMultimedia/audio.cpp+1−1
@@ -77,7 +77,7 @@ void Audio::pause()
77
77
78void Audio::play()
78void Audio::play()
79{
79{
80− if (m_playbackState != PlayingState && m_source.isValid()) {
80+ if (m_playbackState != PlayingState) {
81 m_playbackState = PlayingState;
81 m_playbackState = PlayingState;
82 Q_EMIT playbackStateChanged(m_playbackState);
82 Q_EMIT playbackStateChanged(m_playbackState);
83
83
tests/mocks/Ubuntu/Payments/MockPayments.cpp+12−7
@@ -77,13 +77,18 @@ void MockPayments::setStoreItemId(const QString &store_item_id)
77
77
78void MockPayments::start()
78void MockPayments::start()
79{
79{
80− if (!m_store_item_id.isEmpty()) {
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 {
87 Q_EMIT purchaseError("No item ID supplied.");
81 Q_EMIT purchaseError("No item ID supplied.");
88 }
82 }
89}
83}
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:
41 void setPrice(const double price);
41 void setPrice(const double price);
42 void setStoreItemId(const QString& store_item_id);
42 void setStoreItemId(const QString& store_item_id);
43 Q_INVOKABLE void start();
43 Q_INVOKABLE void start();
44+ Q_INVOKABLE void process(); // only available for testing
44
45
45Q_SIGNALS:
46Q_SIGNALS:
46 void currencyChanged(const QString& currency);
47 void currencyChanged(const QString& currency);
@@ -50,6 +51,7 @@ Q_SIGNALS:
50
51
51 void purchaseError(const QString &error);
52 void purchaseError(const QString &error);
52 void purchaseCompleted();
53 void purchaseCompleted();
54+ void purchaseCancelled();
53
55
54private:
56private:
55 QString m_currency;
57 QString m_currency;
tests/mocks/Unity/Application/MirSurfaceItem.cpp+14
@@ -39,6 +39,7 @@ MirSurfaceItem::MirSurfaceItem(const QString& name,
39 , m_type(type)
39 , m_type(type)
40 , m_state(state)
40 , m_state(state)
41 , m_live(true)
41 , m_live(true)
42+ , m_orientation(Qt::PortraitOrientation)
42 , m_qmlItem(nullptr)
43 , m_qmlItem(nullptr)
43 , m_screenshotUrl(screenshot)
44 , m_screenshotUrl(screenshot)
44{
45{
@@ -108,6 +109,19 @@ void MirSurfaceItem::release()
108 }
109 }
109}
110}
110
111
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+
111void MirSurfaceItem::setSession(Session* session)
125void MirSurfaceItem::setSession(Session* session)
112{
126{
113 m_session = session;
127 m_session = session;
tests/mocks/Unity/Application/MirSurfaceItem.h+7
@@ -34,6 +34,7 @@ class MirSurfaceItem : public QQuickItem
34 Q_PROPERTY(State state READ state NOTIFY stateChanged)
34 Q_PROPERTY(State state READ state NOTIFY stateChanged)
35 Q_PROPERTY(QString name READ name CONSTANT)
35 Q_PROPERTY(QString name READ name CONSTANT)
36 Q_PROPERTY(bool live READ live NOTIFY liveChanged)
36 Q_PROPERTY(bool live READ live NOTIFY liveChanged)
37+ Q_PROPERTY(Qt::ScreenOrientation orientation READ orientation WRITE setOrientation NOTIFY orientationChanged DESIGNABLE false)
37
38
38public:
39public:
39 enum Type {
40 enum Type {
@@ -64,6 +65,9 @@ public:
64 State state() const { return m_state; }
65 State state() const { return m_state; }
65 QString name() const { return m_name; }
66 QString name() const { return m_name; }
66 bool live() const { return m_live; }
67 bool live() const { return m_live; }
68+ Qt::ScreenOrientation orientation() const { return m_orientation; }
69+
70+ void setOrientation(const Qt::ScreenOrientation orientation);
67
71
68 void setSession(Session* item);
72 void setSession(Session* item);
69 void setScreenshot(const QUrl& screenshot);
73 void setScreenshot(const QUrl& screenshot);
@@ -76,6 +80,7 @@ Q_SIGNALS:
76 void typeChanged(Type);
80 void typeChanged(Type);
77 void stateChanged(State);
81 void stateChanged(State);
78 void liveChanged(bool live);
82 void liveChanged(bool live);
83+ void orientationChanged();
79
84
80 void inputMethodRequested();
85 void inputMethodRequested();
81 void inputMethodDismissed();
86 void inputMethodDismissed();
@@ -104,6 +109,7 @@ private:
104 const Type m_type;
109 const Type m_type;
105 State m_state;
110 State m_state;
106 bool m_live;
111 bool m_live;
112+ Qt::ScreenOrientation m_orientation;
107
113
108 QQmlComponent *m_qmlContentComponent;
114 QQmlComponent *m_qmlContentComponent;
109 QQuickItem *m_qmlItem;
115 QQuickItem *m_qmlItem;
@@ -114,5 +120,6 @@ private:
114
120
115Q_DECLARE_METATYPE(MirSurfaceItem*)
121Q_DECLARE_METATYPE(MirSurfaceItem*)
116Q_DECLARE_METATYPE(QList<MirSurfaceItem*>)
122Q_DECLARE_METATYPE(QList<MirSurfaceItem*>)
123+Q_DECLARE_METATYPE(Qt::ScreenOrientation)
117
124
118#endif // MIRSURFACEITEM_H
125#endif // MIRSURFACEITEM_H
tests/mocks/Unity/Application/MirSurfaceItem.qml+12−2
@@ -21,12 +21,22 @@ Rectangle {
21 id: root
21 id: root
22 color: "pink"
22 color: "pink"
23
23
24− anchors.fill: parent
25−
26 implicitWidth: units.gu(40)
24 implicitWidth: units.gu(40)
27 implicitHeight: units.gu(70)
25 implicitHeight: units.gu(70)
28
26
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+
29 property alias screenshotSource: screenshotImage.source
38 property alias screenshotSource: screenshotImage.source
39+ property int orientation: Qt.PortraitOrientation
30
40
31 property bool wantInputMethod: false
41 property bool wantInputMethod: false
32
42
tests/mocks/Unity/DashCommunicator/dashcommunicatorservice.cpp+2−2
@@ -27,7 +27,7 @@ DashCommunicatorService::~DashCommunicatorService()
27
27
28}
28}
29
29
30−void DashCommunicatorService::mockSetCurrentScope(const QString &scopeId, bool animate, bool reset)
30+void DashCommunicatorService::mockSetCurrentScope(const QString &scopeId, bool animate, bool isSwipe)
31{
31{
32− Q_EMIT setCurrentScopeRequested(scopeId, animate, reset);
32+ Q_EMIT setCurrentScopeRequested(scopeId, animate, isSwipe);
33}
33}
tests/mocks/Unity/DashCommunicator/dashcommunicatorservice.h+2−2
@@ -27,10 +27,10 @@ public:
27 ~DashCommunicatorService();
27 ~DashCommunicatorService();
28
28
29Q_SIGNALS:
29Q_SIGNALS:
30− void setCurrentScopeRequested(const QString &scopeId, bool animate, bool reset);
30+ void setCurrentScopeRequested(const QString &scopeId, bool animate, bool isSwipe);
31
31
32public Q_SLOTS:
32public Q_SLOTS:
33− void mockSetCurrentScope(const QString &scopeId, bool animate, bool reset);
33+ void mockSetCurrentScope(const QString &scopeId, bool animate, bool isSwipe);
34};
34};
35
35
36#endif // DBUSUNITYSESSIONSERVICE_H
36#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)
2
2
3include_directories(
3include_directories(
4 ${CMAKE_CURRENT_SOURCE_DIR}
4 ${CMAKE_CURRENT_SOURCE_DIR}
tests/mocks/Unity/Launcher/MockLauncherItem.cpp+14
@@ -35,6 +35,7 @@ MockLauncherItem::MockLauncherItem(const QString &appId, const QString& desktopF
35 m_recent(false),
35 m_recent(false),
36 m_progress(-1),
36 m_progress(-1),
37 m_count(0),
37 m_count(0),
38+ m_countVisible(false),
38 m_focused(false),
39 m_focused(false),
39 m_quickList(new MockQuickListModel(this))
40 m_quickList(new MockQuickListModel(this))
40{
41{
@@ -131,6 +132,19 @@ void MockLauncherItem::setCount(int count)
131 }
132 }
132}
133}
133
134
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+
134bool MockLauncherItem::focused() const
148bool MockLauncherItem::focused() const
135{
149{
136 return m_focused;
150 return m_focused;
tests/mocks/Unity/Launcher/MockLauncherItem.h+18−17
@@ -32,32 +32,30 @@ class MockLauncherItem: public LauncherItemInterface
32public:
32public:
33 MockLauncherItem(const QString &appId, const QString& desktopFile, const QString& name, const QString& icon, QObject* parent = 0);
33 MockLauncherItem(const QString &appId, const QString& desktopFile, const QString& name, const QString& icon, QObject* parent = 0);
34
34
35− QString appId() const;
35+ QString appId() const override;
36 QString desktopFile() const;
36 QString desktopFile() const;
37− QString name() const;
37+ QString name() const override;
38− QString icon() const;
38+ QString icon() const override;
39
39
40− bool pinned() const;
40+ bool pinned() const override;
41− void setPinned(bool pinned);
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;
42
47
43− bool running() const;
48+ unity::shell::launcher::QuickListModelInterface *quickList() const;
44− void setRunning(bool running);
45
49
46− bool recent() const;
50+private:
51+ void setPinned(bool pinned);
52+ void setRunning(bool running);
47 void setRecent(bool recent);
53 void setRecent(bool recent);
48−
49− int progress() const;
50 void setProgress(int progress);
54 void setProgress(int progress);
51−
52− int count() const;
53 void setCount(int count);
55 void setCount(int count);
54−
56+ void setCountVisible(bool countVisible);
55− bool focused() const;
56 void setFocused(bool focused);
57 void setFocused(bool focused);
57
58
58− unity::shell::launcher::QuickListModelInterface *quickList() const;
59−
60−private:
61 QString m_appId;
59 QString m_appId;
62 QString m_desktopFile;
60 QString m_desktopFile;
63 QString m_name;
61 QString m_name;
@@ -67,8 +65,11 @@ private:
67 bool m_recent;
65 bool m_recent;
68 int m_progress;
66 int m_progress;
69 int m_count;
67 int m_count;
68+ bool m_countVisible;
70 bool m_focused;
69 bool m_focused;
71 MockQuickListModel *m_quickList;
70 MockQuickListModel *m_quickList;
71+
72+ friend class MockLauncherModel;
72};
73};
73
74
74#endif // MOCKLAUNCHERITEM_H
75#endif // MOCKLAUNCHERITEM_H
tests/mocks/Unity/Launcher/MockLauncherModel.cpp+10
@@ -33,26 +33,32 @@ MockLauncherModel::MockLauncherModel(QObject* parent): LauncherModelInterface(pa
33 m_list.append(item);
33 m_list.append(item);
34 item = new MockLauncherItem("gallery-app", "/usr/share/applications/gallery-app.desktop", "Gallery", "gallery", this);
34 item = new MockLauncherItem("gallery-app", "/usr/share/applications/gallery-app.desktop", "Gallery", "gallery", this);
35 item->setProgress(50);
35 item->setProgress(50);
36+ item->setCountVisible(true);
36 m_list.append(item);
37 m_list.append(item);
37 item = new MockLauncherItem("facebook-webapp", "/usr/share/applications/facebook-webapp.desktop", "Facebook", "facebook", this);
38 item = new MockLauncherItem("facebook-webapp", "/usr/share/applications/facebook-webapp.desktop", "Facebook", "facebook", this);
38 item->setProgress(150);
39 item->setProgress(150);
39 m_list.append(item);
40 m_list.append(item);
40 item = new MockLauncherItem("webbrowser-app", "/usr/share/applications/webbrowser-app.desktop", "Browser", "browser", this);
41 item = new MockLauncherItem("webbrowser-app", "/usr/share/applications/webbrowser-app.desktop", "Browser", "browser", this);
41 item->setCount(1);
42 item->setCount(1);
43+ item->setCountVisible(true);
42 m_list.append(item);
44 m_list.append(item);
43 item = new MockLauncherItem("twitter-webapp", "/usr/share/applications/twitter-webapp.desktop", "Twitter", "twitter", this);
45 item = new MockLauncherItem("twitter-webapp", "/usr/share/applications/twitter-webapp.desktop", "Twitter", "twitter", this);
44 item->setCount(12);
46 item->setCount(12);
47+ item->setCountVisible(true);
45 item->setPinned(true);
48 item->setPinned(true);
46 m_list.append(item);
49 m_list.append(item);
47 item = new MockLauncherItem("gmail-webapp", "/usr/share/applications/gmail-webapp.desktop", "GMail", "gmail", this);
50 item = new MockLauncherItem("gmail-webapp", "/usr/share/applications/gmail-webapp.desktop", "GMail", "gmail", this);
48 item->setCount(123);
51 item->setCount(123);
52+ item->setCountVisible(true);
49 m_list.append(item);
53 m_list.append(item);
50 item = new MockLauncherItem("ubuntu-weather-app", "/usr/share/applications/ubuntu-weather-app.desktop", "Weather", "weather", this);
54 item = new MockLauncherItem("ubuntu-weather-app", "/usr/share/applications/ubuntu-weather-app.desktop", "Weather", "weather", this);
51 item->setCount(1234567890);
55 item->setCount(1234567890);
56+ item->setCountVisible(true);
52 m_list.append(item);
57 m_list.append(item);
53 item = new MockLauncherItem("notes-app", "/usr/share/applications/notes-app.desktop", "Notepad", "notepad", this);
58 item = new MockLauncherItem("notes-app", "/usr/share/applications/notes-app.desktop", "Notepad", "notepad", this);
54 item->setProgress(50);
59 item->setProgress(50);
55 item->setCount(5);
60 item->setCount(5);
61+ item->setCountVisible(true);
56 item->setFocused(true);
62 item->setFocused(true);
57 item->setPinned(true);
63 item->setPinned(true);
58 m_list.append(item);
64 m_list.append(item);
@@ -76,6 +82,8 @@ QVariant MockLauncherModel::data(const QModelIndex& index, int role) const
76 LauncherItemInterface *item = m_list.at(index.row());
82 LauncherItemInterface *item = m_list.at(index.row());
77 switch(role)
83 switch(role)
78 {
84 {
85+ case RoleAppId:
86+ return item->appId();
79 case RoleName:
87 case RoleName:
80 return item->name();
88 return item->name();
81 case RoleIcon:
89 case RoleIcon:
@@ -90,6 +98,8 @@ QVariant MockLauncherModel::data(const QModelIndex& index, int role) const
90 return item->progress();
98 return item->progress();
91 case RoleCount:
99 case RoleCount:
92 return item->count();
100 return item->count();
101+ case RoleCountVisible:
102+ return item->countVisible();
93 case RoleFocused:
103 case RoleFocused:
94 return item->focused();
104 return item->focused();
95 }
105 }
tests/mocks/Unity/fake_categories.cpp+95−136
@@ -29,25 +29,12 @@ Categories::Categories(int category_count, QObject* parent)
29
29
30int Categories::rowCount(const QModelIndex& /*parent*/) const
30int Categories::rowCount(const QModelIndex& /*parent*/) const
31{
31{
32− return m_category_count + m_specialCategories.count();
32+ return m_category_count;
33}
33}
34
34
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*/)
36{
36{
37− CategoryData catData;
37+ qFatal("Using un-implemented Categories::addSpecialCategory");
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− }
51}
38}
52
39
53bool Categories::overrideCategoryJson(QString const& /* categoryId */, QString const& /* json */)
40bool Categories::overrideCategoryJson(QString const& /* categoryId */, QString const& /* json */)
@@ -55,23 +42,6 @@ bool Categories::overrideCategoryJson(QString const& /* categoryId */, QString c
55 qFatal("Using un-implemented Categories::overrideCategoryJson");
42 qFatal("Using un-implemented Categories::overrideCategoryJson");
56}
43}
57
44
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−
75QVariant
45QVariant
76Categories::data(const QModelIndex& index, int role) const
46Categories::data(const QModelIndex& index, int role) const
77{
47{
@@ -79,115 +49,74 @@ Categories::data(const QModelIndex& index, int role) const
79 return QVariant();
49 return QVariant();
80 }
50 }
81
51
82− ResultsModel *resultsModel = m_resultsModels[index.row()];
52+ ResultsModel *resultsModel = resultModel(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) {
53+ switch (role) {
90− case RoleCategoryId:
54+ case RoleCategoryId:
91− return catData.categoryId;
55+ return QString("%1").arg(index.row());
92− case RoleName:
56+ case RoleName:
93− return catData.name;
57+ return QString("Category %1").arg(index.row());
94− case RoleIcon:
58+ case RoleIcon:
95− return catData.icon;
59+ return "gtk-apply";
96− case RoleRawRendererTemplate:
60+ case RoleRawRendererTemplate:
97− return catData.rawTemplate;
61+ qFatal("Using un-implemented RoleRawRendererTemplate Categories role");
62+ return QVariant();
98− case RoleRenderer:
63+ case RoleRenderer:
99− {
64+ {
100− QVariantMap map;
65+ QVariantMap map;
101− if (index.row() % 2 == 0) {
66+ if (index.row() % 2 == 0) {
102− map["category-layout"] = "grid";
67+ map["category-layout"] = "grid";
103− } else {
68+ } else {
104− map["category-layout"] = "carousel";
69+ map["category-layout"] = "carousel";
105− map["overlay"] = true;
106− }
107− map["card-size"] = "small";
108− return map;
109 }
70 }
110− case RoleComponents:
71+ if (index.row() == 18) {
111− {
72+ map["category-layout"] = "horizontal-list";
112− QVariantMap map, artMap, attributeMap;
73+ }
113− artMap["aspect-ratio"] = "1.0";
74+ if (index.row() == 19) {
114− artMap["field"] = "art";
75+ map["category-layout"] = "grid";
115− map["art"] = artMap;
76+ map["collapsed-rows"] = 0;
116− map["title"] = "HOLA";
77+ }
117− attributeMap["field"] = "attribute";
78+ map["card-size"] = "small";
118− map["attributes"] = attributeMap;
79+
119− return map;
80+ map["category-layout"] = m_layouts.value(index.row(), map["category-layout"].toString());
81+
82+ if (map["category-layout"] == "carousel") {
83+ map["overlay"] = true;
120 }
84 }
121− case RoleHeaderLink:
85+
122− return QString();
123− case RoleResults:
124− return QVariant();
86+ return map;
125− case RoleCount:
126− return catData.countObject->property("count");
127− default:
128− qFatal("Using un-implemented Categories role");
129− return QVariant();
130 }
87 }
131− } else {
88+ case RoleComponents:
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− {
89+ {
144− QVariantMap map;
90+ QVariantMap map, artMap, attributeMap;
145− if (index.row() % 2 == 0) {
91+ if (index.row() % 2 != 0) {
146− map["category-layout"] = "grid";
92+ artMap["aspect-ratio"] = QString("1.%1").arg(index.row());
147− } else {
93+ } else {
148− map["category-layout"] = "carousel";
94+ artMap["aspect-ratio"] = "1.0";
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;
161 }
95 }
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";
96+ artMap["field"] = "art";
171− map["art"] = artMap;
97+ map["art"] = artMap;
172− map["title"] = "HOLA";
98+ map["title"] = "HOLA";
173− map["subtitle"] = "HOLA";
99+ map["subtitle"] = "HOLA";
174− attributeMap["field"] = "attribute";
100+ attributeMap["field"] = "attribute";
175− map["attributes"] = attributeMap;
101+ map["attributes"] = attributeMap;
176− return map;
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");
177 }
109 }
178− case RoleHeaderLink:
110+ res = m_headerLinks.value(index.row(), res);
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();
111+ return res;
190 }
112 }
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();
191 }
120 }
192}
121}
193
122
@@ -196,3 +125,33 @@ Categories::data(int row, int role) const
196{
125{
197 return data(index(row, 0), role);
126 return data(index(row, 0), role);
198}
127}
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:
39
39
40 Q_INVOKABLE QVariant data(int row, int role) const;
40 Q_INVOKABLE QVariant data(int row, int role) const;
41
41
42−private Q_SLOTS:
42+ // For testing purposes
43− void countChanged();
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);
44
47
45private:
48private:
46 mutable QHash<int, ResultsModel*> m_resultsModels;
49 mutable QHash<int, ResultsModel*> m_resultsModels;
50+ QHash<int, QString> m_layouts;
51+ QHash<int, QString> m_headerLinks;
47 int m_category_count;
52 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;
58};
53};
59
54
60#endif // FAKE_CATEGORIES_H
55#endif // FAKE_CATEGORIES_H
tests/mocks/Unity/fake_resultsmodel.cpp+9
@@ -44,6 +44,15 @@ void ResultsModel::setCategoryId(QString const& /*id*/)
44 qFatal("Calling un-implemented ResultsModel::setCategoryId");
44 qFatal("Calling un-implemented ResultsModel::setCategoryId");
45}
45}
46
46
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+
47int ResultsModel::rowCount(const QModelIndex& parent) const
56int ResultsModel::rowCount(const QModelIndex& parent) const
48{
57{
49 Q_UNUSED(parent);
58 Q_UNUSED(parent);
tests/mocks/Unity/fake_resultsmodel.h+3
@@ -41,6 +41,9 @@ public:
41 /* setters */
41 /* setters */
42 void setCategoryId(QString const& id) override;
42 void setCategoryId(QString const& id) override;
43
43
44+ // For testing purposes
45+ Q_INVOKABLE void setResultCount(int result_count);
46+
44private:
47private:
45 int m_result_count;
48 int m_result_count;
46 int m_categoryId;
49 int m_categoryId;
tests/mocks/Unity/fake_scope.cpp+27−5
@@ -24,11 +24,11 @@
24#include "fake_scopes.h"
24#include "fake_scopes.h"
25#include "fake_settingsmodel.h"
25#include "fake_settingsmodel.h"
26
26
27−Scope::Scope(Scopes* parent) : Scope(QString(), QString(), false, parent)
27+Scope::Scope(Scopes* parent) : Scope("MockScope5", "Mock Scope", false, parent)
28{
28{
29}
29}
30
30
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)
32 : unity::shell::scopes::ScopeInterface(parent)
32 : unity::shell::scopes::ScopeInterface(parent)
33 , m_id(id)
33 , m_id(id)
34 , m_name(name)
34 , m_name(name)
@@ -41,6 +41,7 @@ Scope::Scope(QString const& id, QString const& name, bool favorite, Scopes* pare
41 , m_categories(new Categories(categories, this))
41 , m_categories(new Categories(categories, this))
42 , m_openScope(nullptr)
42 , m_openScope(nullptr)
43 , m_settings(new SettingsModel(this))
43 , m_settings(new SettingsModel(this))
44+ , m_returnNullPreview(returnNullPreview)
44{
45{
45}
46}
46
47
@@ -145,6 +146,23 @@ void Scope::setFavorite(const bool favorite)
145 Q_EMIT favoriteChanged();
146 Q_EMIT favoriteChanged();
146 }
147 }
147}
148}
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+
148void Scope::setSearchInProgress(const bool inProg)
166void Scope::setSearchInProgress(const bool inProg)
149{
167{
150 if (inProg != m_searching) {
168 if (inProg != m_searching) {
@@ -175,9 +193,13 @@ PreviewStack* Scope::preview(QVariant const& result)
175{
193{
176 Q_UNUSED(result);
194 Q_UNUSED(result);
177
195
196+ if (m_returnNullPreview) {
197+ return nullptr;
198+ } else {
178− // This probably leaks, do we don't care
199+ // This probably leaks, do we don't care
179− // it's a test after all
200+ // it's a test after all
180− return new PreviewStack;
201+ return new PreviewStack;
202+ }
181}
203}
182
204
183void Scope::cancelActivation()
205void Scope::cancelActivation()
tests/mocks/Unity/fake_scope.h+5−1
@@ -32,7 +32,7 @@ class Scope : public unity::shell::scopes::ScopeInterface
32
32
33public:
33public:
34 Scope(Scopes* parent = 0);
34 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);
36
36
37 /* getters */
37 /* getters */
38 QString id() const override;
38 QString id() const override;
@@ -56,6 +56,8 @@ public:
56 void setFormFactor(const QString& form_factor) override;
56 void setFormFactor(const QString& form_factor) override;
57 void setActive(const bool) override;
57 void setActive(const bool) override;
58 void setFavorite(const bool) override;
58 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
59 Q_INVOKABLE void setSearchInProgress(const bool inProg); // This is not invokable in the Interface, here for testing benefits
61 Q_INVOKABLE void setSearchInProgress(const bool inProg); // This is not invokable in the Interface, here for testing benefits
60
62
61 Q_INVOKABLE void activate(QVariant const& result) override;
63 Q_INVOKABLE void activate(QVariant const& result) override;
@@ -97,6 +99,8 @@ protected:
97 unity::shell::scopes::CategoriesInterface* m_categories;
99 unity::shell::scopes::CategoriesInterface* m_categories;
98 unity::shell::scopes::ScopeInterface* m_openScope;
100 unity::shell::scopes::ScopeInterface* m_openScope;
99 unity::shell::scopes::SettingsModelInterface* m_settings;
101 unity::shell::scopes::SettingsModelInterface* m_settings;
102+
103+ bool m_returnNullPreview;
100};
104};
101
105
102#endif // FAKE_SCOPE_H
106#endif // FAKE_SCOPE_H
tests/mocks/Unity/fake_scopes.cpp+1
@@ -59,6 +59,7 @@ void Scopes::updateScopes()
59 addScope(new Scope("MockScope7", "MS7", false, this));
59 addScope(new Scope("MockScope7", "MS7", false, this));
60 addScope(new Scope("MockScope8", "MS8", false, this));
60 addScope(new Scope("MockScope8", "MS8", false, this));
61 addScope(new Scope("MockScope9", "MS9", false, this));
61 addScope(new Scope("MockScope9", "MS9", false, this));
62+ addScope(new Scope("NullPreviewScope", "NPS", false, this, 1, true));
62 m_scopesOverview = new ScopesOverview(this);
63 m_scopesOverview = new ScopesOverview(this);
63
64
64 if (!m_loaded) {
65 if (!m_loaded) {
tests/plugins/Dash/cardcreator/1.res+2−2
@@ -40,8 +40,8 @@ Item {
40 width = root.fixedArtShapeSize.width;
40 width = root.fixedArtShapeSize.width;
41 height = root.fixedArtShapeSize.height;
41 height = root.fixedArtShapeSize.height;
42 } else {
42 } else {
43− width = Qt.binding(function() { return !visible ? 0 : image.width });
43+ width = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.width });
44− height = Qt.binding(function() { return !visible ? 0 : image.height });
44+ height = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.height });
45 }
45 }
46 }
46 }
47 image: Image {
47 image: Image {
tests/plugins/Dash/cardcreator/2.res+2−2
@@ -94,7 +94,7 @@ Image {
94 wrapMode: Text.Wrap;
94 wrapMode: Text.Wrap;
95 maximumLineCount: 2;
95 maximumLineCount: 2;
96 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
96 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");
98 visible: showHeader ;
98 visible: showHeader ;
99 text: root.title;
99 text: root.title;
100 font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
100 font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
@@ -112,7 +112,7 @@ Image {
112 elide: Text.ElideRight;
112 elide: Text.ElideRight;
113 fontSize: "small";
113 fontSize: "small";
114 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
114 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");
116 visible: titleLabel.visible && titleLabel.text;
116 visible: titleLabel.visible && titleLabel.text;
117 text: cardData && cardData["subtitle"] || "";
117 text: cardData && cardData["subtitle"] || "";
118 font.weight: Font.Light;
118 font.weight: Font.Light;
tests/plugins/Dash/cardcreator/3.res+3−3
@@ -40,9 +40,9 @@ Item {
40 width = root.fixedArtShapeSize.width;
40 width = root.fixedArtShapeSize.width;
41 height = root.fixedArtShapeSize.height;
41 height = root.fixedArtShapeSize.height;
42 } else {
42 } else {
43− width = Qt.binding(function() { return !visible ? 0 : image.width });
43+ width = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.width });
44− height = Qt.binding(function() { return !visible ? 0 : image.height });
44+ height = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.height });
45− }
45+ }
46 }
46 }
47 image: Image {
47 image: Image {
48 objectName: "artImage";
48 objectName: "artImage";
tests/plugins/Dash/cardcreator/5.res+5−5
@@ -40,9 +40,9 @@ Item {
40 width = root.fixedArtShapeSize.width;
40 width = root.fixedArtShapeSize.width;
41 height = root.fixedArtShapeSize.height;
41 height = root.fixedArtShapeSize.height;
42 } else {
42 } else {
43− width = Qt.binding(function() { return !visible ? 0 : image.width });
43+ width = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.width });
44− height = Qt.binding(function() { return !visible ? 0 : image.height });
44+ height = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.height });
45− }
45+ }
46 }
46 }
47 image: Image {
47 image: Image {
48 objectName: "artImage";
48 objectName: "artImage";
@@ -114,7 +114,7 @@ Label {
114 wrapMode: Text.Wrap;
114 wrapMode: Text.Wrap;
115 maximumLineCount: 2;
115 maximumLineCount: 2;
116 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
116 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");
118 visible: showHeader && overlayLoader.active;
118 visible: showHeader && overlayLoader.active;
119 text: root.title;
119 text: root.title;
120 font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
120 font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
@@ -133,7 +133,7 @@ Label {
133 elide: Text.ElideRight;
133 elide: Text.ElideRight;
134 fontSize: "small";
134 fontSize: "small";
135 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
135 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");
137 visible: titleLabel.visible && titleLabel.text;
137 visible: titleLabel.visible && titleLabel.text;
138 text: cardData && cardData["subtitle"] || "";
138 text: cardData && cardData["subtitle"] || "";
139 font.weight: Font.Light;
139 font.weight: Font.Light;
tests/plugins/Dash/cardcreator/6.res+3−3
@@ -70,7 +70,7 @@ Item {
70 wrapMode: Text.Wrap;
70 wrapMode: Text.Wrap;
71 maximumLineCount: 2;
71 maximumLineCount: 2;
72 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
72 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");
74 visible: showHeader ;
74 visible: showHeader ;
75 text: root.title;
75 text: root.title;
76 font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
76 font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
@@ -88,7 +88,7 @@ Item {
88 elide: Text.ElideRight;
88 elide: Text.ElideRight;
89 fontSize: "small";
89 fontSize: "small";
90 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
90 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");
92 visible: titleLabel.visible && titleLabel.text;
92 visible: titleLabel.visible && titleLabel.text;
93 text: cardData && cardData["subtitle"] || "";
93 text: cardData && cardData["subtitle"] || "";
94 font.weight: Font.Light;
94 font.weight: Font.Light;
@@ -103,7 +103,7 @@ Item {
103 rightMargin: units.gu(1);
103 rightMargin: units.gu(1);
104 }
104 }
105 source: cardData && cardData["emblem"] || "";
105 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");
107 width: height;
107 width: height;
108 height: source != "" ? titleLabel.font.pixelSize : 0;
108 height: source != "" ? titleLabel.font.pixelSize : 0;
109 }
109 }
tests/plugins/Dash/cardcreator/7.res+3−3
@@ -95,7 +95,7 @@ Image {
95 wrapMode: Text.Wrap;
95 wrapMode: Text.Wrap;
96 maximumLineCount: 2;
96 maximumLineCount: 2;
97 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
97 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");
99 visible: showHeader ;
99 visible: showHeader ;
100 text: root.title;
100 text: root.title;
101 font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
101 font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
@@ -113,7 +113,7 @@ Image {
113 elide: Text.ElideRight;
113 elide: Text.ElideRight;
114 fontSize: "small";
114 fontSize: "small";
115 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
115 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");
117 visible: titleLabel.visible && titleLabel.text;
117 visible: titleLabel.visible && titleLabel.text;
118 text: cardData && cardData["subtitle"] || "";
118 text: cardData && cardData["subtitle"] || "";
119 font.weight: Font.Light;
119 font.weight: Font.Light;
@@ -127,7 +127,7 @@ Image {
127 rightMargin: units.gu(1);
127 rightMargin: units.gu(1);
128 top: subtitleLabel.bottom;
128 top: subtitleLabel.bottom;
129 }
129 }
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");
131 fontScale: root.fontScale;
131 fontScale: root.fontScale;
132 model: cardData && cardData["attributes"];
132 model: cardData && cardData["attributes"];
133 }
133 }
tests/plugins/Unity/Launcher/CMakeLists.txt+9−24
@@ -1,12 +1,11 @@
1pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
1pkg_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)
3pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=3)
3pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=3)
4
4
5include_directories(
5include_directories(
6 ${CMAKE_CURRENT_BINARY_DIR}
6 ${CMAKE_CURRENT_BINARY_DIR}
7 ${CMAKE_SOURCE_DIR}/plugins/AccountsService
7 ${CMAKE_SOURCE_DIR}/plugins/AccountsService
8 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher
8 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher
9− ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/backend
10 ${GSETTINGS_QT_INCLUDE_DIRS}
9 ${GSETTINGS_QT_INCLUDE_DIRS}
11 )
10 )
12
11
@@ -14,35 +13,21 @@ add_definitions(-DSM_BUSNAME=sessionBus)
14add_definitions(-DSRCDIR="${CMAKE_CURRENT_SOURCE_DIR}")
13add_definitions(-DSRCDIR="${CMAKE_CURRENT_SOURCE_DIR}")
15add_definitions(-DLAUNCHER_TESTING)
14add_definitions(-DLAUNCHER_TESTING)
16
15
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−
32### LauncherModelTest
16### LauncherModelTest
33−set(testModelCommand ${CMAKE_CURRENT_BINARY_DIR}/launchermodeltestExec
17+set(testModelCommand dbus-test-runner --task ${CMAKE_CURRENT_BINARY_DIR}/launchermodeltestExec
34− -o ${CMAKE_BINARY_DIR}/launchermodeltest.xml,xunitxml
18+ --parameter -o --parameter ${CMAKE_BINARY_DIR}/launchermodeltest.xml,xunitxml
35− -o -,txt)
19+ --parameter -o --parameter -,txt)
36add_test(NAME launchermodeltest COMMAND ${testModelCommand})
20add_test(NAME launchermodeltest COMMAND ${testModelCommand})
37add_custom_target(launchermodeltest ${testModelCommand})
21add_custom_target(launchermodeltest ${testModelCommand})
38add_executable(launchermodeltestExec
22add_executable(launchermodeltestExec
39 launchermodeltest.cpp
23 launchermodeltest.cpp
24+ gsettings.cpp
40 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/launchermodel.cpp
25 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/launchermodel.cpp
41 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/launcheritem.cpp
26 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/launcheritem.cpp
42 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/quicklistmodel.cpp
27 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/quicklistmodel.cpp
43− ${CMAKE_SOURCE_DIR}/plugins/AccountsService/AccountsServiceDBusAdaptor.cpp
28+ ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/dbusinterface.cpp
44− ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/backend/launcherbackend.cpp
29+ ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/desktopfilehandler.cpp
45− ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/common/quicklistentry.cpp
30+ ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/quicklistentry.cpp
46 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherItemInterface.h
31 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherItemInterface.h
47 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherModelInterface.h
32 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherModelInterface.h
48 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/QuickListModelInterface.h
33 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/QuickListModelInterface.h
@@ -50,7 +35,7 @@ add_executable(launchermodeltestExec
50 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
35 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
51 )
36 )
52target_link_libraries(launchermodeltestExec ${GSETTINGS_QT_LDFLAGS})
37target_link_libraries(launchermodeltestExec ${GSETTINGS_QT_LDFLAGS})
53−qt5_use_modules(launchermodeltestExec Test Core DBus)
38+qt5_use_modules(launchermodeltestExec Test Core DBus Xml Gui)
54
39
55# copy .desktop files into build directory for shadow builds
40# copy .desktop files into build directory for shadow builds
56file(GLOB DESKTOP_FILES *.desktop)
41file(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 @@
23
23
24#include "launcheritem.h"
24#include "launcheritem.h"
25#include "launchermodel.h"
25#include "launchermodel.h"
26+#include "dbusinterface.h"
26
27
27#include <QtTest>
28#include <QtTest>
29+#include <QDBusInterface>
30+#include <QDBusReply>
31+#include <QDomDocument>
28
32
29// This is a mock, specifically to test the LauncherModel
33// This is a mock, specifically to test the LauncherModel
30class MockApp: public unity::shell::application::ApplicationInfoInterface
34class MockApp: public unity::shell::application::ApplicationInfoInterface
@@ -287,10 +291,86 @@ private Q_SLOTS:
287 QCOMPARE(launcherModel->getUrlForAppId(QString()), QString());
291 QCOMPARE(launcherModel->getUrlForAppId(QString()), QString());
288 QCOMPARE(launcherModel->getUrlForAppId(""), QString());
292 QCOMPARE(launcherModel->getUrlForAppId(""), QString());
289 QCOMPARE(launcherModel->getUrlForAppId("no-name"), QString("application:///no-name.desktop"));
293 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"));
291 QCOMPARE(launcherModel->getUrlForAppId("com.test.good_application"), QString("appid://com.test.good/application/current-user-version"));
295 QCOMPARE(launcherModel->getUrlForAppId("com.test.good_application"), QString("appid://com.test.good/application/current-user-version"));
292 QCOMPARE(launcherModel->getUrlForAppId("com.test.good_application_1.2.3"), QString("appid://com.test.good/application/current-user-version"));
296 QCOMPARE(launcherModel->getUrlForAppId("com.test.good_application_1.2.3"), QString("appid://com.test.good/application/current-user-version"));
293 }
297 }
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+ }
294};
374};
295
375
296QTEST_GUILESS_MAIN(LauncherModelTest)
376QTEST_GUILESS_MAIN(LauncherModelTest)
tests/plugins/Utils/CMakeLists.txt−1
@@ -11,7 +11,6 @@ macro(run_tests)
11 -o ${CMAKE_BINARY_DIR}/${_test}.xml,xunitxml
11 -o ${CMAKE_BINARY_DIR}/${_test}.xml,xunitxml
12 -o -,txt)
12 -o -,txt)
13 add_test(NAME ${_test} COMMAND ${testCommand})
13 add_test(NAME ${_test} COMMAND ${testCommand})
14− set_tests_properties(${_test} PROPERTIES ENVIRONMENT "LC_ALL=C")
15 add_custom_target(${_test} env "LC_ALL=C" ${testCommand})
14 add_custom_target(${_test} env "LC_ALL=C" ${testCommand})
16 add_executable(${_test}Exec ${_test}.cpp modeltest.cpp)
15 add_executable(${_test}Exec ${_test}.cpp modeltest.cpp)
17 qt5_use_modules(${_test}Exec Test Core Qml)
16 qt5_use_modules(${_test}Exec Test Core Qml)
tests/qmltests/Dash/Previews/tst_PreviewPayments.qml+88−9
@@ -33,6 +33,10 @@ Rectangle {
33 "source": { "price" : 0.99, "currency": "USD", "store_item_id": "com.example.invalid" }
33 "source": { "price" : 0.99, "currency": "USD", "store_item_id": "com.example.invalid" }
34 }
34 }
35
35
36+ property var jsonPurchaseCancel: {
37+ "source": { "price" : 0.99, "currency": "USD", "store_item_id": "com.example.cancel" }
38+ }
39+
36 SignalSpy {
40 SignalSpy {
37 id: spy
41 id: spy
38 target: previewPayments
42 target: previewPayments
@@ -48,19 +52,28 @@ Rectangle {
48 UT.UnityTestCase {
52 UT.UnityTestCase {
49 name: "PreviewPaymentsTest"
53 name: "PreviewPaymentsTest"
50 when: windowShown
54 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+ }
51
62
52 function cleanup()
63 function cleanup()
53 {
64 {
65+ paymentClient = null;
66+ previewPayments.widgetData = null;
54 spy.clear();
67 spy.clear();
55− var button = findChild(root, "paymentButton");
68+ var button = findChild(previewPayments, "paymentButton");
56 button.opacity = 1;
69 button.opacity = 1;
57 }
70 }
58
71
59 function test_purchase_text_display() {
72 function test_purchase_text_display() {
60 previewPayments.widgetData = jsonPurchase;
73 previewPayments.widgetData = jsonPurchase;
61
74
62− var button = findChild(root, "paymentButton");
75+ var button = findChild(previewPayments, "paymentButton");
63− verify(button != null, "Button not found.");
76+ verify(button, "Button not found.");
64 compare(button.text, "0.99USD");
77 compare(button.text, "0.99USD");
65 }
78 }
66
79
@@ -68,11 +81,12 @@ Rectangle {
68 // Exercise the purchaseCompleted signal here.
81 // Exercise the purchaseCompleted signal here.
69 previewPayments.widgetData = jsonPurchase;
82 previewPayments.widgetData = jsonPurchase;
70
83
71− var button = findChild(root, "paymentButton");
84+ var button = findChild(previewPayments, "paymentButton");
72− verify(button != null, "Button not found.");
85+ verify(button, "Button not found.");
73
86
74 mouseClick(button, button.width / 2, button.height / 2);
87 mouseClick(button, button.width / 2, button.height / 2);
75
88
89+ paymentClient.process();
76 spy.wait();
90 spy.wait();
77
91
78 var args = spy.signalArguments[0];
92 var args = spy.signalArguments[0];
@@ -85,8 +99,8 @@ Rectangle {
85 // Make sure the progress bar is shown.
99 // Make sure the progress bar is shown.
86 previewPayments.widgetData = jsonPurchase;
100 previewPayments.widgetData = jsonPurchase;
87
101
88− var button = findChild(root, "paymentButton");
102+ var button = findChild(previewPayments, "paymentButton");
89− var progress = findChild(root, "loadingBar");
103+ var progress = findChild(previewPayments, "loadingBar");
90
104
91 tryCompare(progress, "visible", false);
105 tryCompare(progress, "visible", false);
92 tryCompare(progress, "opacity", 0);
106 tryCompare(progress, "opacity", 0);
@@ -95,6 +109,7 @@ Rectangle {
95
109
96 mouseClick(button, button.width / 2, button.height / 2);
110 mouseClick(button, button.width / 2, button.height / 2);
97
111
112+ paymentClient.process();
98 spy.wait();
113 spy.wait();
99
114
100 tryCompare(progress, "visible", true);
115 tryCompare(progress, "visible", true);
@@ -103,16 +118,45 @@ Rectangle {
103 tryCompare(button, "opacity", 0);
118 tryCompare(button, "opacity", 0);
104 }
119 }
105
120
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+
106 function test_purchase_error() {
149 function test_purchase_error() {
107 // The mock Payments triggers an error when com.example.invalid is
150 // The mock Payments triggers an error when com.example.invalid is
108 // passed to it as store_item_id. Exercise it here
151 // passed to it as store_item_id. Exercise it here
109 previewPayments.widgetData = jsonPurchaseError;
152 previewPayments.widgetData = jsonPurchaseError;
110
153
111− var button = findChild(root, "paymentButton");
154+ var button = findChild(previewPayments, "paymentButton");
112− verify(button != null, "Button not found.");
155+ verify(button, "Button not found.");
113
156
114 mouseClick(button, button.width / 2, button.height / 2);
157 mouseClick(button, button.width / 2, button.height / 2);
115
158
159+ paymentClient.process();
116 spy.wait();
160 spy.wait();
117
161
118 var args = spy.signalArguments[0];
162 var args = spy.signalArguments[0];
@@ -120,5 +164,40 @@ Rectangle {
120 compare(args[1], "purchaseError");
164 compare(args[1], "purchaseError");
121 compare(args[2], jsonPurchaseError["source"]);
165 compare(args[2], jsonPurchaseError["source"]);
122 }
166 }
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+ }
123 }
202 }
124}
203}
tests/qmltests/Dash/tst_Card.qml+3−3
@@ -29,9 +29,9 @@ Rectangle {
29
29
30 property string cardData: '
30 property string cardData: '
31 {
31 {
32− "art": "../../../tests/qmltests/Dash/artwork/music-player-design.png",
32+ "art": "'+Qt.resolvedUrl("artwork/music-player-design.png").toString()+'",
33− "mascot": "../../../tests/qmltests/Dash/artwork/avatar.png",
33+ "mascot": "'+Qt.resolvedUrl("artwork/avatar.png").toString()+'",
34− "emblem": "../../../tests/qmltests/Dash/artwork/emblem.png",
34+ "emblem": "'+Qt.resolvedUrl("artwork/emblem.png").toString()+'",
35 "title": "foo",
35 "title": "foo",
36 "subtitle": "bar",
36 "subtitle": "bar",
37 "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.",
37 "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 {
189 var scopesOverviewAllView = findChild(dash, "scopesOverviewRepeaterChild1");
189 var scopesOverviewAllView = findChild(dash, "scopesOverviewRepeaterChild1");
190 tryCompare(scopesOverviewAllView, "enabled", true);
190 tryCompare(scopesOverviewAllView, "enabled", true);
191
191
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+
192 // Click on a temp scope
200 // Click on a temp scope
193 var tempScopeCard = findChild(scopesOverviewAllView, "delegate1");
201 var tempScopeCard = findChild(scopesOverviewAllView, "delegate1");
194 mouseClick(tempScopeCard, 0, 0);
202 mouseClick(tempScopeCard, 0, 0);
@@ -198,7 +206,6 @@ Item {
198 compare(overviewDragHandle.enabled, false);
206 compare(overviewDragHandle.enabled, false);
199
207
200 // Check temp scope is there
208 // Check temp scope is there
201− var scopesOverviewTempScopeItem = findChild(dash, "scopesOverviewTempScopeItem");
202 tryCompareFunction( function() { return scopesOverviewTempScopeItem.scope != null; }, true);
209 tryCompareFunction( function() { return scopesOverviewTempScopeItem.scope != null; }, true);
203 tryCompare(scopesOverviewTempScopeItem, "enabled", true);
210 tryCompare(scopesOverviewTempScopeItem, "enabled", true);
204
211
@@ -328,7 +335,7 @@ Item {
328 mouseFlick(dash, startX, startY, stopX, stopY);
335 mouseFlick(dash, startX, startY, stopX, stopY);
329 compare(dashContentList.currentIndex, 2, "Could not flick to scope id 2");
336 compare(dashContentList.currentIndex, 2, "Could not flick to scope id 2");
330 var dashCommunicatorService = findInvisibleChild(dash, "dashCommunicatorService");
337 var dashCommunicatorService = findInvisibleChild(dash, "dashCommunicatorService");
331− dashCommunicatorService.mockSetCurrentScope("clickscope", true, true);
338+ dashCommunicatorService.mockSetCurrentScope("clickscope", true, false);
332 tryCompare(dashContentList, "currentIndex", 1)
339 tryCompare(dashContentList, "currentIndex", 1)
333 }
340 }
334
341
tests/qmltests/Dash/tst_GenericScopeView.qml+129−1
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright 2013 Canonical Ltd.
2+ * Copyright 2014 Canonical Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -43,6 +43,10 @@ Item {
43 onLoadedChanged: if (loaded) genericScopeView.scope = scopes.getScope(2);
43 onLoadedChanged: if (loaded) genericScopeView.scope = scopes.getScope(2);
44 }
44 }
45
45
46+ MockScope {
47+ id: mockScope
48+ }
49+
46 SignalSpy {
50 SignalSpy {
47 id: spy
51 id: spy
48 }
52 }
@@ -92,6 +96,17 @@ Item {
92 return findChild(genericScopeView, category);
96 return findChild(genericScopeView, category);
93 }
97 }
94
98
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+
95 function test_isActive() {
110 function test_isActive() {
96 tryCompare(genericScopeView.scope, "isActive", false)
111 tryCompare(genericScopeView.scope, "isActive", false)
97 genericScopeView.isCurrent = true
112 genericScopeView.isCurrent = true
@@ -280,6 +295,7 @@ Item {
280 mouseClick(tile, tile.width / 2, tile.height / 2);
295 mouseClick(tile, tile.width / 2, tile.height / 2);
281 tryCompare(testCase.subPageLoader, "open", true);
296 tryCompare(testCase.subPageLoader, "open", true);
282 tryCompare(testCase.subPageLoader, "x", 0);
297 tryCompare(testCase.subPageLoader, "x", 0);
298+ tryCompare(findChild(genericScopeView, "categoryListView"), "visible", false);
283 }
299 }
284
300
285 function closePreview() {
301 function closePreview() {
@@ -288,6 +304,9 @@ Item {
288
304
289 tryCompare(testCase.subPageLoader, "open", false);
305 tryCompare(testCase.subPageLoader, "open", false);
290 tryCompare(testCase.subPageLoader, "visible", false);
306 tryCompare(testCase.subPageLoader, "visible", false);
307+ var categoryListView = findChild(genericScopeView, "categoryListView");
308+ tryCompare(categoryListView, "visible", true);
309+ tryCompare(categoryListView, "x", 0);
291 }
310 }
292
311
293 function test_previewOpenClose() {
312 function test_previewOpenClose() {
@@ -301,6 +320,34 @@ Item {
301 closePreview();
320 closePreview();
302 }
321 }
303
322
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+
304 function test_showPreviewCarousel() {
351 function test_showPreviewCarousel() {
305 var category = scrollToCategory("dashCategory1");
352 var category = scrollToCategory("dashCategory1");
306
353
@@ -426,6 +473,87 @@ Item {
426 compare(image.source, data.logo, "Title image has the wrong source");
473 compare(image.source, data.logo, "Title image has the wrong source");
427 }
474 }
428
475
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+
429 function test_favorite_data() {
557 function test_favorite_data() {
430 return [
558 return [
431 { tag: "People", id: "MockScope1", favorite: true },
559 { tag: "People", id: "MockScope1", favorite: true },
tests/qmltests/Dash/tst_PreviewListView.qml+29−1
@@ -16,6 +16,7 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19+import Ubuntu.Components 1.1
19import "../../../qml/Dash"
20import "../../../qml/Dash"
20import Unity.Test 0.1 as UT
21import Unity.Test 0.1 as UT
21import Unity 0.2 as Unity
22import Unity 0.2 as Unity
@@ -39,7 +40,9 @@ Rectangle {
39 id: listView
40 id: listView
40 anchors.fill: parent
41 anchors.fill: parent
41 scope: mockScope
42 scope: mockScope
42− scopeStyle: ScopeStyle { }
43+ scopeStyle: ScopeStyle {
44+ style: mockScope.customizations
45+ }
43 }
46 }
44
47
45 UT.UnityTestCase {
48 UT.UnityTestCase {
@@ -83,5 +86,30 @@ Rectangle {
83 mouseClick(listView, listView.width / 2, listView.height / 2);
86 mouseClick(listView, listView.width / 2, listView.height / 2);
84 clickedSpy.wait();
87 clickedSpy.wait();
85 }
88 }
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+ }
86 }
114 }
87}
115}
tests/qmltests/Launcher/tst_Launcher.qml+3−1
@@ -194,7 +194,9 @@ Item {
194 var launcherListView = findChild(launcher, "launcherListView");
194 var launcherListView = findChild(launcher, "launcherListView");
195 for (var i = 0; i < launcherListView.count; ++i) {
195 for (var i = 0; i < launcherListView.count; ++i) {
196 var delegate = findChild(launcherListView, "launcherDelegate" + i)
196 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)
198 }
200 }
199 }
201 }
200
202
tests/qmltests/Notifications/tst_Notifications.qml+60−18
@@ -64,7 +64,7 @@ Row {
64 function addSnapDecisionNotification() {
64 function addSnapDecisionNotification() {
65 var n = {
65 var n = {
66 type: Notification.SnapDecision,
66 type: Notification.SnapDecision,
67− hints: {"x-canonical-private-button-tint": "true"},
67+ hints: {"x-canonical-private-affirmative-tint": "true"},
68 summary: "Tom Ato",
68 summary: "Tom Ato",
69 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.",
69 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.",
70 icon: "../graphics/avatars/funky.png",
70 icon: "../graphics/avatars/funky.png",
@@ -79,6 +79,22 @@ Row {
79 mockModel.append(n)
79 mockModel.append(n)
80 }
80 }
81
81
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+
82 function addEphemeralNotification() {
98 function addEphemeralNotification() {
83 var n = {
99 var n = {
84 type: Notification.Ephemeral,
100 type: Notification.Ephemeral,
@@ -181,6 +197,12 @@ Row {
181 onClicked: addSnapDecisionNotification()
197 onClicked: addSnapDecisionNotification()
182 }
198 }
183
199
200+ Button {
201+ width: parent.width
202+ text: "add a 2over1 snap-decision"
203+ onClicked: add2over1SnapDecisionNotification()
204+ }
205+
184 Button {
206 Button {
185 width: parent.width
207 width: parent.width
186 text: "add an ephemeral"
208 text: "add an ephemeral"
@@ -229,7 +251,7 @@ Row {
229 {
251 {
230 tag: "Snap Decision with secondary icon and button-tint",
252 tag: "Snap Decision with secondary icon and button-tint",
231 type: Notification.SnapDecision,
253 type: Notification.SnapDecision,
232− hints: {"x-canonical-private-button-tint": "true"},
254+ hints: {"x-canonical-private-affirmative-tint": "true"},
233 summary: "Tom Ato",
255 summary: "Tom Ato",
234 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.",
256 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.",
235 icon: "../graphics/avatars/funky.png",
257 icon: "../graphics/avatars/funky.png",
@@ -249,10 +271,31 @@ Row {
249 buttonTinted: true,
271 buttonTinted: true,
250 hasSound: false
272 hasSound: false
251 },
273 },
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+ },
252 {
295 {
253 tag: "Ephemeral notification - icon-summary layout",
296 tag: "Ephemeral notification - icon-summary layout",
254 type: Notification.Ephemeral,
297 type: Notification.Ephemeral,
255− hints: {"x-canonical-private-button-tint": "false"},
298+ hints: {"x-canonical-private-affirmative-tint": "false"},
256 summary: "Photo upload completed",
299 summary: "Photo upload completed",
257 body: "",
300 body: "",
258 icon: "",
301 icon: "",
@@ -271,7 +314,7 @@ Row {
271 {
314 {
272 tag: "Ephemeral notification - check suppression of secondary icon for icon-summary layout",
315 tag: "Ephemeral notification - check suppression of secondary icon for icon-summary layout",
273 type: Notification.Ephemeral,
316 type: Notification.Ephemeral,
274− hints: {"x-canonical-private-button-tint": "false",
317+ hints: {"x-canonical-private-affirmative-tint": "false",
275 "sound-file": "dummy.ogg",
318 "sound-file": "dummy.ogg",
276 "suppress-sound": "true"},
319 "suppress-sound": "true"},
277 summary: "New comment successfully published",
320 summary: "New comment successfully published",
@@ -293,7 +336,7 @@ Row {
293 {
336 {
294 tag: "Interactive notification",
337 tag: "Interactive notification",
295 type: Notification.Interactive,
338 type: Notification.Interactive,
296− hints: {"x-canonical-private-button-tint": "false",
339+ hints: {"x-canonical-private-affirmative-tint": "false",
297 "sound-file": "dummy.ogg"},
340 "sound-file": "dummy.ogg"},
298 summary: "Interactive notification",
341 summary: "Interactive notification",
299 body: "This is a notification that can be clicked",
342 body: "This is a notification that can be clicked",
@@ -313,7 +356,7 @@ Row {
313 {
356 {
314 tag: "Snap Decision without secondary icon and no button-tint",
357 tag: "Snap Decision without secondary icon and no button-tint",
315 type: Notification.SnapDecision,
358 type: Notification.SnapDecision,
316− hints: {"x-canonical-private-button-tint": "false",
359+ hints: {"x-canonical-private-affirmative-tint": "false",
317 "sound-file": "dummy.ogg"},
360 "sound-file": "dummy.ogg"},
318 summary: "Bro Coly",
361 summary: "Bro Coly",
319 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.",
362 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 {
334 {
377 {
335 tag: "Ephemeral notification",
378 tag: "Ephemeral notification",
336 type: Notification.Ephemeral,
379 type: Notification.Ephemeral,
337− hints: {"x-canonical-private-button-tint": "false",
380+ hints: {"x-canonical-private-affirmative-tint": "false",
338 "sound-file": "dummy.ogg"},
381 "sound-file": "dummy.ogg"},
339 summary: "Cole Raby",
382 summary: "Cole Raby",
340 body: "I did not expect it to be that late.",
383 body: "I did not expect it to be that late.",
@@ -354,9 +397,8 @@ Row {
354 {
397 {
355 tag: "Ephemeral notification with non-shaped icon",
398 tag: "Ephemeral notification with non-shaped icon",
356 type: Notification.Ephemeral,
399 type: Notification.Ephemeral,
357− hints: {"x-canonical-private-button-tint": "false",
400+ hints: {"x-canonical-private-affirmative-tint": "false",
358− "x-canonical-non-shaped-icon": "true",
401+ "x-canonical-non-shaped-icon": "true"},
359− "sound-file": "dummy.ogg"},
360 summary: "Contacts",
402 summary: "Contacts",
361 body: "Synchronised contacts-database with cloud-storage.",
403 body: "Synchronised contacts-database with cloud-storage.",
362 icon: "../graphics/applicationIcons/contacts-app.png",
404 icon: "../graphics/applicationIcons/contacts-app.png",
@@ -370,7 +412,7 @@ Row {
370 secondaryIconVisible: false,
412 secondaryIconVisible: false,
371 buttonRowVisible: false,
413 buttonRowVisible: false,
372 buttonTinted: false,
414 buttonTinted: false,
373− hasSound: true
415+ hasSound: false
374 }
416 }
375 ]
417 ]
376 }
418 }
@@ -434,11 +476,11 @@ Row {
434 compare(buttonRow.visible, data.buttonRowVisible, "button visibility is incorrect")
476 compare(buttonRow.visible, data.buttonRowVisible, "button visibility is incorrect")
435
477
436 var audioItem = findInvisibleChild(notification, "sound")
478 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")
438
480
439 if(data.buttonRowVisible) {
481 if(data.buttonRowVisible) {
440− var buttonCancel = findChild(buttonRow, "button1")
482+ var buttonCancel = findChild(buttonRow, "notify_button1")
441− var buttonAccept = findChild(buttonRow, "button0")
483+ var buttonAccept = findChild(buttonRow, "notify_button0")
442
484
443 // only test the left/cancel-button if two actions have been passed in
485 // only test the left/cancel-button if two actions have been passed in
444 if (data.actions.length == 2) {
486 if (data.actions.length == 2) {
@@ -448,7 +490,7 @@ Row {
448 }
490 }
449
491
450 // check the tinting of the positive/right button
492 // 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")
452
494
453 // click the positive/right button
495 // click the positive/right button
454 tryCompareFunction(function() { mouseClick(buttonAccept, buttonAccept.width / 2, buttonAccept.height / 2); return actionSpy.signalArguments.length > 0; }, true);
496 tryCompareFunction(function() { mouseClick(buttonAccept, buttonAccept.width / 2, buttonAccept.height / 2); return actionSpy.signalArguments.length > 0; }, true);
@@ -458,19 +500,19 @@ Row {
458
500
459 // check if there's a ComboButton created due to more actions being passed
501 // check if there's a ComboButton created due to more actions being passed
460 if (data.actions.length > 2) {
502 if (data.actions.length > 2) {
461− var comboButton = findChild(notification, "button2")
503+ var comboButton = findChild(notification, "notify_button2")
462 tryCompareFunction(function() { return comboButton.expanded == false; }, true);
504 tryCompareFunction(function() { return comboButton.expanded == false; }, true);
463
505
464 // click to expand
506 // click to expand
465 tryCompareFunction(function() { mouseClick(comboButton, comboButton.width - comboButton.__styleInstance.dropDownWidth / 2, comboButton.height / 2); return comboButton.expanded == true; }, true);
507 tryCompareFunction(function() { mouseClick(comboButton, comboButton.width - comboButton.__styleInstance.dropDownWidth / 2, comboButton.height / 2); return comboButton.expanded == true; }, true);
466
508
467 // try clicking on choices in expanded comboList
509 // try clicking on choices in expanded comboList
468− var choiceButton1 = findChild(notification, "button3")
510+ var choiceButton1 = findChild(notification, "notify_button3")
469 tryCompareFunction(function() { mouseClick(choiceButton1, choiceButton1.width / 2, choiceButton1.height / 2); return actionSpy.signalArguments.length > 0; }, true);
511 tryCompareFunction(function() { mouseClick(choiceButton1, choiceButton1.width / 2, choiceButton1.height / 2); return actionSpy.signalArguments.length > 0; }, true);
470 compare(actionSpy.signalArguments[0][0], data.actions[3]["id"], "got wrong id choice action 1")
512 compare(actionSpy.signalArguments[0][0], data.actions[3]["id"], "got wrong id choice action 1")
471 actionSpy.clear()
513 actionSpy.clear()
472
514
473− var choiceButton2 = findChild(notification, "button4")
515+ var choiceButton2 = findChild(notification, "notify_button4")
474 tryCompareFunction(function() { mouseClick(choiceButton2, choiceButton2.width / 2, choiceButton2.height / 2); return actionSpy.signalArguments.length > 0; }, true);
516 tryCompareFunction(function() { mouseClick(choiceButton2, choiceButton2.width / 2, choiceButton2.height / 2); return actionSpy.signalArguments.length > 0; }, true);
475 compare(actionSpy.signalArguments[0][0], data.actions[4]["id"], "got wrong id choice action 2")
517 compare(actionSpy.signalArguments[0][0], data.actions[4]["id"], "got wrong id choice action 2")
476 actionSpy.clear()
518 actionSpy.clear()
tests/qmltests/Stages/RecursingChildSessionControl.qml+1−1
@@ -93,7 +93,7 @@ ColumnLayout {
93 onCheckedChanged: {
93 onCheckedChanged: {
94 if (checked) {
94 if (checked) {
95 root.session.createSurface();
95 root.session.createSurface();
96− } else if (root.session.surface) {
96+ } else if (root.session && root.session.surface) {
97 ApplicationTest.removeSurface(root.session.surface);
97 ApplicationTest.removeSurface(root.session.surface);
98 }
98 }
99 }
99 }
tests/qmltests/Stages/tst_ApplicationWindow.qml+30−12
@@ -50,22 +50,18 @@ Rectangle {
50 ApplicationWindow {
50 ApplicationWindow {
51 anchors.fill: parent
51 anchors.fill: parent
52 application: fakeApplication
52 application: fakeApplication
53+ orientation: Qt.PortraitOrientation
53 }
54 }
54 }
55 }
55− FocusScope {
56+ Loader {
56− id: appFocus
57+ id: applicationWindowLoader
57 anchors {
58 anchors {
58 top: parent.top
59 top: parent.top
59 bottom: parent.bottom
60 bottom: parent.bottom
60 left: parent.left
61 left: parent.left
61 }
62 }
62 width: units.gu(40)
63 width: units.gu(40)
63−
64− Loader {
65− id: applicationWindowLoader
66− anchors.fill: parent
67− sourceComponent: applicationWindowComponent
64+ sourceComponent: applicationWindowComponent
68− }
69 }
65 }
70
66
71 Rectangle {
67 Rectangle {
@@ -73,7 +69,7 @@ Rectangle {
73 anchors {
69 anchors {
74 top: parent.top
70 top: parent.top
75 bottom: parent.bottom
71 bottom: parent.bottom
76− left: appFocus.right
72+ left: applicationWindowLoader.right
77 right: parent.right
73 right: parent.right
78 }
74 }
79
75
@@ -147,6 +143,24 @@ Rectangle {
147 }
143 }
148 }
144 }
149
145
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+
150 }
164 }
151 }
165 }
152
166
@@ -384,15 +398,19 @@ Rectangle {
384 verify(stateGroup.state === "void");
398 verify(stateGroup.state === "void");
385 }
399 }
386
400
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
389 function test_forceActiveFocusFollowsInterative() {
401 function test_forceActiveFocusFollowsInterative() {
390 fakeApplication.createSession();
402 fakeApplication.createSession();
391 applicationWindowLoader.item.interactive = false;
403 applicationWindowLoader.item.interactive = false;
392 applicationWindowLoader.item.interactive = true;
404 applicationWindowLoader.item.interactive = true;
393 fakeSession.createSurface();
405 fakeSession.createSurface();
394
406
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);
396 }
414 }
397 }
415 }
398}
416}
tests/qmltests/Stages/tst_PhoneStage.qml+58
@@ -31,6 +31,8 @@ Item {
31 anchors { fill: parent; rightMargin: units.gu(30) }
31 anchors { fill: parent; rightMargin: units.gu(30) }
32 dragAreaWidth: units.gu(2)
32 dragAreaWidth: units.gu(2)
33 maximizedAppTopMargin: units.gu(3) + units.dp(2)
33 maximizedAppTopMargin: units.gu(3) + units.dp(2)
34+ interactive: true
35+ orientation: Qt.PortraitOrientation
34 }
36 }
35
37
36 Binding {
38 Binding {
@@ -67,6 +69,21 @@ Item {
67 ApplicationManager.get(appList.selectedAppIndex).setState(ApplicationInfoInterface.Stopped);
69 ApplicationManager.get(appList.selectedAppIndex).setState(ApplicationInfoInterface.Stopped);
68 }
70 }
69 }
71 }
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+ }
70 }
87 }
71 ListView {
88 ListView {
72 id: appList
89 id: appList
@@ -256,6 +273,46 @@ Item {
256 compare(ApplicationManager.focusedApplicationId, selectedApp.appId);
273 compare(ApplicationManager.focusedApplicationId, selectedApp.appId);
257 }
274 }
258
275
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+
259 function cleanup() {
316 function cleanup() {
260 while (ApplicationManager.count > 1) {
317 while (ApplicationManager.count > 1) {
261 var oldCount = ApplicationManager.count;
318 var oldCount = ApplicationManager.count;
@@ -263,6 +320,7 @@ Item {
263 ApplicationManager.stopApplication(ApplicationManager.get(closingIndex).appId)
320 ApplicationManager.stopApplication(ApplicationManager.get(closingIndex).appId)
264 tryCompare(ApplicationManager, "count", oldCount - 1)
321 tryCompare(ApplicationManager, "count", oldCount - 1)
265 }
322 }
323+ phoneStage.orientation = Qt.PortraitOrientation;
266 }
324 }
267 }
325 }
268}
326}
tests/qmltests/Stages/tst_SessionContainer.qml+63
@@ -41,6 +41,7 @@ Rectangle {
41 SessionContainer {
41 SessionContainer {
42 id: sessionContainer
42 id: sessionContainer
43 anchors.fill: parent
43 anchors.fill: parent
44+ orientation: Qt.PortraitOrientation
44 }
45 }
45 }
46 }
46
47
@@ -112,6 +113,24 @@ Rectangle {
112 session: sessionContainerLoader.item ? sessionContainerLoader.item.session : null
113 session: sessionContainerLoader.item ? sessionContainerLoader.item.session : null
113 }
114 }
114 }
115 }
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+ }
115 }
134 }
116 }
135 }
117
136
@@ -263,5 +282,49 @@ Rectangle {
263 // wait for animation to end
282 // wait for animation to end
264 tryCompareFunction(function() { return isContainerAnimating(childContainer); }, false);
283 tryCompareFunction(function() { return isContainerAnimating(childContainer); }, false);
265 }
284 }
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+ }
266 }
329 }
267}
330}
tests/qmltests/tst_Shell.qml+117−35
@@ -21,6 +21,8 @@ import QtQuick 2.0
21import QtTest 1.0
21import QtTest 1.0
22import GSettings 1.0
22import GSettings 1.0
23import LightDM 0.1 as LightDM
23import LightDM 0.1 as LightDM
24+import Ubuntu.Components 1.1
25+import Ubuntu.Telephony 0.1 as Telephony
24import Unity.Application 0.1
26import Unity.Application 0.1
25import Unity.Connectivity 0.1
27import Unity.Connectivity 0.1
26import Unity.Test 0.1 as UT
28import Unity.Test 0.1 as UT
@@ -28,10 +30,9 @@ import Powerd 0.1
28
30
29import "../../qml"
31import "../../qml"
30
32
31−Item {
33+Row {
32 id: root
34 id: root
33− width: shell.width
35+ spacing: 0
34− height: shell.height
35
36
36 QtObject {
37 QtObject {
37 id: applicationArguments
38 id: applicationArguments
@@ -49,13 +50,52 @@ Item {
49 }
50 }
50 }
51 }
51
52
52− Shell {
53+ Loader {
53− id: shell
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+ }
54 }
73 }
55
74
56− Component {
75+ Rectangle {
57− id: shellComponent
76+ color: "white"
58− Shell {}
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+ }
59 }
99 }
60
100
61 SignalSpy {
101 SignalSpy {
@@ -74,11 +114,19 @@ Item {
74 signalName: "unlockingAllModems"
114 signalName: "unlockingAllModems"
75 }
115 }
76
116
117+ Telephony.CallEntry {
118+ id: phoneCall
119+ phoneNumber: "+447812221111"
120+ }
121+
77 UT.UnityTestCase {
122 UT.UnityTestCase {
123+ id: testCase
78 name: "Shell"
124 name: "Shell"
79 when: windowShown
125 when: windowShown
80
126
127+ property Item shell: shellLoader.status === Loader.Ready ? shellLoader.item : null
128+
81− function initTestCase() {
129+ function init() {
82 swipeAwayGreeter();
130 swipeAwayGreeter();
83
131
84 sessionSpy.target = findChild(shell, "greeter")
132 sessionSpy.target = findChild(shell, "greeter")
@@ -86,17 +134,30 @@ Item {
86 }
134 }
87
135
88 function cleanup() {
136 function cleanup() {
89− // If a test invoked the greeter, make sure we swipe it away again
137+ shellLoader.itemDestroyed = false;
90− var greeter = findChild(shell, "greeter");
138+
91− if (greeter.shown) {
139+ shellLoader.active = false;
92− swipeAwayGreeter();
140+
93− }
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);
94
150
95 // kill all (fake) running apps
151 // kill all (fake) running apps
96 killApps(ApplicationManager);
152 killApps(ApplicationManager);
97
153
98− waitForUIToSettle();
154+ unlockAllModemsSpy.clear()
99− hideIndicators();
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);
100 }
161 }
101
162
102 function killApps() {
163 function killApps() {
@@ -109,10 +170,11 @@ Item {
109
170
110 function test_leftEdgeDrag_data() {
171 function test_leftEdgeDrag_data() {
111 return [
172 return [
112− {tag: "without launcher", 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},
113− {tag: "with launcher", revealLauncher: true, swipeLength: units.gu(27), appHides: true},
174+ {tag: "with launcher", revealLauncher: true, swipeLength: units.gu(27), appHides: true, focusedApp: "dialer-app", launcherHides: true},
114− {tag: "small swipe", revealLauncher: false, swipeLength: units.gu(25), appHides: false},
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},
115− {tag: "long swipe", revealLauncher: false, swipeLength: units.gu(27), appHides: true}
177+ {tag: "long swipe", revealLauncher: false, swipeLength: units.gu(27), appHides: true, focusedApp: "unity8-dash", launcherHides: false}
116 ];
178 ];
117 }
179 }
118
180
@@ -120,16 +182,22 @@ Item {
120 dragLauncherIntoView();
182 dragLauncherIntoView();
121 tapOnAppIconInLauncher();
183 tapOnAppIconInLauncher();
122 waitUntilApplicationWindowIsFullyVisible();
184 waitUntilApplicationWindowIsFullyVisible();
185+ ApplicationManager.focusApplication(data.focusedApp)
186+ waitUntilApplicationWindowIsFullyVisible();
123
187
124 if (data.revealLauncher) {
188 if (data.revealLauncher) {
125 dragLauncherIntoView();
189 dragLauncherIntoView();
126 }
190 }
127
191
128 swipeFromLeftEdge(data.swipeLength);
192 swipeFromLeftEdge(data.swipeLength);
129− if (data.appHides)
193+ if (data.appHides) {
130 waitUntilDashIsFocused();
194 waitUntilDashIsFocused();
131− else
195+ } else {
132 waitUntilApplicationWindowIsFullyVisible();
196 waitUntilApplicationWindowIsFullyVisible();
197+ }
198+
199+ var launcher = findChild(shell, "launcherPanel");
200+ tryCompare(launcher, "x", data.launcherHides ? -launcher.width : 0)
133 }
201 }
134
202
135 function test_suspend() {
203 function test_suspend() {
@@ -146,21 +214,22 @@ Item {
146 verify(mainApp);
214 verify(mainApp);
147 tryCompare(mainApp, "state", ApplicationInfoInterface.Running);
215 tryCompare(mainApp, "state", ApplicationInfoInterface.Running);
148
216
149− // Try to suspend while proximity is engaged...
217+ // Suspend while call is active...
218+ callManager.foregroundCall = phoneCall;
150− Powerd.displayPowerStateChange(Powerd.Off, Powerd.Proximity);
219+ Powerd.status = Powerd.Off;
151 tryCompare(greeter, "showProgress", 0);
220 tryCompare(greeter, "showProgress", 0);
152
221
153− // Now really suspend
222+ // Now try again after ending call
154− print("suspending")
223+ callManager.foregroundCall = null;
224+ Powerd.status = Powerd.On;
155− Powerd.displayPowerStateChange(Powerd.Off, 0);
225+ Powerd.status = Powerd.Off;
156− print("done suspending")
157 tryCompare(greeter, "showProgress", 1);
226 tryCompare(greeter, "showProgress", 1);
158
227
159 tryCompare(ApplicationManager, "suspended", true);
228 tryCompare(ApplicationManager, "suspended", true);
160 compare(mainApp.state, ApplicationInfoInterface.Suspended);
229 compare(mainApp.state, ApplicationInfoInterface.Suspended);
161
230
162 // And wake up
231 // And wake up
163− Powerd.displayPowerStateChange(Powerd.On, 0);
232+ Powerd.status = Powerd.On;
164 tryCompare(greeter, "showProgress", 1);
233 tryCompare(greeter, "showProgress", 1);
165
234
166 // Swipe away greeter to focus app
235 // Swipe away greeter to focus app
@@ -234,10 +303,27 @@ Item {
234 tryCompare(item, "visible", false);
303 tryCompare(item, "visible", false);
235 }
304 }
236
305
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+
237 function test_surfaceLosesFocusWhilePanelIsOpen() {
324 function test_surfaceLosesFocusWhilePanelIsOpen() {
238 var app = ApplicationManager.startApplication("dialer-app");
325 var app = ApplicationManager.startApplication("dialer-app");
239− // wait until the app is fully loaded (ie, real surface replaces splash screen)
326+ waitUntilAppWindowIsFullyLoaded(app);
240− tryCompareFunction(function() { return app.session !== null && app.session.surface !== null }, true);
241
327
242 tryCompare(app.session.surface, "focus", true);
328 tryCompare(app.session.surface, "focus", true);
243
329
@@ -458,13 +544,9 @@ Item {
458 }
544 }
459
545
460 function test_unlockAllModemsOnBoot() {
546 function test_unlockAllModemsOnBoot() {
461− unlockAllModemsSpy.clear()
462− // actually create an object so we notice the onCompleted signal
463− var greeter = shellComponent.createObject(root)
464 // TODO reenable when service ready (LP: #1361074)
547 // TODO reenable when service ready (LP: #1361074)
465 expectFail("", "Unlock on boot temporarily disabled");
548 expectFail("", "Unlock on boot temporarily disabled");
466 tryCompare(unlockAllModemsSpy, "count", 1)
549 tryCompare(unlockAllModemsSpy, "count", 1)
467− greeter.destroy()
468 }
550 }
469 }
551 }
470}
552}
tools/registry-tracker.cpp+6
@@ -119,6 +119,12 @@ void RegistryTracker::runRegistry()
119 QString registry_ini = QString(REGISTRY_CONFIG).arg(m_mw_config.fileName()).arg(scopeInstallDir).arg(scopeRunnerBin);
119 QString registry_ini = QString(REGISTRY_CONFIG).arg(m_mw_config.fileName()).arg(scopeInstallDir).arg(scopeRunnerBin);
120 QString mw_ini = QString(MW_CONFIG).arg(m_endpoints_dir.path());
120 QString mw_ini = QString(MW_CONFIG).arg(m_endpoints_dir.path());
121
121
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+
122 m_runtime_config.write(runtime_ini.toUtf8());
128 m_runtime_config.write(runtime_ini.toUtf8());
123 m_registry_config.write(registry_ini.toUtf8());
129 m_registry_config.write(registry_ini.toUtf8());
124 m_mw_config.write(mw_ini.toUtf8());
130 m_mw_config.write(mw_ini.toUtf8());
tools/scopetool.cpp+3
@@ -44,6 +44,9 @@ int main(int argc, char *argv[])
44 setenv("QML_FORCE_THREADED_RENDERER", "1", 1);
44 setenv("QML_FORCE_THREADED_RENDERER", "1", 1);
45 setenv("QML_FIXED_ANIMATION_STEP", "1", 1);
45 setenv("QML_FIXED_ANIMATION_STEP", "1", 1);
46
46
47+ // ignore favorites in unity-scopes-shell plugin
48+ setenv("UNITY_SCOPES_NO_FAVORITES", "1", 1);
49+
47 QGuiApplication::setApplicationName("Unity Scope Tool");
50 QGuiApplication::setApplicationName("Unity Scope Tool");
48 QGuiApplication *application;
51 QGuiApplication *application;
49 application = new QGuiApplication(argc, argv);
52 application = new QGuiApplication(argc, argv);
tools/unlock-device+4−5
@@ -19,13 +19,12 @@ done
19
19
20eval "$WAIT_COMMAND"
20eval "$WAIT_COMMAND"
21
21
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
23# to finish coming up (it's hard to tell when the greeter is actually rendered)
23# to finish coming up (it's hard to tell when the greeter is actually rendered)
24−sleep 20
24+sleep 30
25
25
26+# We need to go through sudo to get a proper environment for dbus set up
26−GDBUS_CMD="gdbus call --session --dest com.canonical.UnityGreeter --object-path / --method com.canonical.UnityGreeter.HideGreeter && echo Greeter unlocked"
27+UNLOCK_OUTPUT=$(adb shell "gdbus call --session --dest com.canonical.UnityGreeter --object-path / --method com.canonical.UnityGreeter.HideGreeter && echo Greeter unlocked" 2>&1)
27−
28−UNLOCK_OUTPUT=$(adb shell "if [ \"\$(id -u)\" = 0 ]; then sudo -u phablet -i $GDBUS_CMD; else $GDBUS_CMD; fi" 2>&1)
29if echo "$UNLOCK_OUTPUT" | grep 'Greeter unlocked' >/dev/null; then
28if echo "$UNLOCK_OUTPUT" | grep 'Greeter unlocked' >/dev/null; then
30 echo "I: Unlock passed"
29 echo "I: Unlock passed"
31 exit 0
30 exit 0