on xenial help sign in
Merged trunk.
928655fAllan LeSage
.bzrignore+1−4
@@ -3,8 +3,5 @@
3# QtCreator project files
3# QtCreator project files
4/*.user
4/*.user
5# Eclipse project files
5# Eclipse project files
6−/.project
7−/.cproject
8−/.settings
6+.settings
9−/.pydevproject
10message.txt
7message.txt
Applications/Application.qmldeleted−54
@@ -1,54 +0,0 @@
1−/*
2− * Copyright (C) 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 General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import "applications.js" as ApplicationsModel
19−import Unity.Application 0.1
20−
21−/* This class is temporary. It is meant to be API compatible with qthybris' Application
22− class.
23− This class can be removed as soon as qthybris' Application is instantiable from QML
24− and its 'desktopFile' property becomes writable.
25− This also requires qthybris to be easily compilable on the desktop.
26−*/
27−QtObject {
28− id: application
29−
30− property string desktopFile
31− property string name
32− property string comment
33− property string icon
34− property string exec
35− property string stage
36− property bool fullscreen
37−
38− onDesktopFileChanged: {
39− var applicationData = ApplicationsModel.__availableApplications[desktopFile];
40− if (applicationData) {
41− application.name = applicationData.name;
42− application.icon = applicationData.icon;
43− application.exec = applicationData.exec;
44− application.stage = applicationData.stage ? applicationData.stage : ApplicationInfo.MainStage;
45− application.fullscreen = applicationData.fullscreen ? applicationData.fullscreen : false;
46− } else {
47− application.name = "";
48− application.icon = "";
49− application.exec = "";
50− application.stage = "";
51− application.fullscreen = false;
52− }
53− }
54−}
Applications/applications.jsdeleted−115
@@ -1,115 +0,0 @@
1−/*
2− * Copyright (C) 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 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−// mimic qtubuntu's Application.Stage enum
18−var MainStage = 0;
19−var SideStage = 1;
20−
21−var __availableApplications = {
22− '/usr/share/applications/phone-app.desktop': {
23− 'name': i18n.tr("Phone"),
24− 'icon': 'phone-app',
25− 'exec': '/usr/bin/phone-app',
26− 'stage': SideStage
27− },
28− '/usr/share/applications/camera-app.desktop': {
29− 'name': i18n.tr("Camera"),
30− 'icon': 'camera',
31− 'fullscreen': true,
32− 'exec': '/usr/bin/camera-app --fullscreen'
33− },
34− '/usr/share/applications/gallery-app.desktop': {
35− 'name': i18n.tr("Gallery"),
36− 'icon': 'gallery',
37− 'exec': '/usr/bin/gallery-app'
38− },
39− '/usr/share/applications/facebook-webapp.desktop': {
40− 'name': i18n.tr("Facebook"),
41− 'icon': 'facebook',
42− 'exec': '/usr/bin/webbrowser-app --chromeless http://m.facebook.com',
43− 'stage': SideStage
44− },
45− '/usr/share/applications/webbrowser-app.desktop': {
46− 'name': i18n.tr("Browser"),
47− 'icon': 'browser',
48− 'exec': '/usr/bin/webbrowser-app'
49− },
50− '/usr/share/applications/twitter-webapp.desktop': {
51− 'name': i18n.tr("Twitter"),
52− 'icon': 'twitter',
53− 'exec': '/usr/bin/webbrowser-app --chromeless http://www.twitter.com',
54− 'stage': SideStage
55− },
56− '/usr/share/applications/gmail-webapp.desktop': {
57− 'name': i18n.tr("GMail"),
58− 'icon': 'gmail',
59− 'exec': '/usr/bin/webbrowser-app --chromeless http://m.gmail.com'
60− },
61− '/usr/share/applications/ubuntu-weather-app.desktop': {
62− 'name': i18n.tr("Weather"),
63− 'icon': 'weather',
64− 'exec': '/usr/bin/qmlscene /usr/share/ubuntu-weather-app/ubuntu-weather-app.qml',
65− 'stage': SideStage
66− },
67− '/usr/share/applications/notes-app.desktop': {
68− 'name': i18n.tr("Notepad"),
69− 'icon': 'notepad',
70− 'exec': '/usr/bin/qmlscene /usr/share/notes-app/NotesApp.qml',
71− 'stage': SideStage
72− },
73− '/usr/share/applications/calendar-app.desktop': {
74− 'name': i18n.tr("Calendar"),
75− 'icon': 'calendar',
76− 'exec': '/usr/bin/qmlscene /usr/share/calendar-app/calendar.qml',
77− 'stage': SideStage
78− },
79− '/usr/share/applications/mediaplayer-app.desktop': {
80− 'name': i18n.tr("Media Player"),
81− 'icon': 'mediaplayer-app',
82− 'fullscreen': true,
83− 'exec': '/usr/bin/mediaplayer-app'
84− },
85− '/usr/share/applications/evernote.desktop': {
86− 'name': i18n.tr("Evernote"),
87− 'icon': 'evernote',
88− 'exec': ''
89− },
90− '/usr/share/applications/map.desktop': {
91− 'name': i18n.tr("Map"),
92− 'icon': 'map',
93− 'exec': ''
94− },
95− '/usr/share/applications/pinterest.desktop': {
96− 'name': i18n.tr("Pinterest"),
97− 'icon': 'pinterest',
98− 'exec': ''
99− },
100− '/usr/share/applications/soundcloud.desktop': {
101− 'name': i18n.tr("SoundCloud"),
102− 'icon': 'soundcloud',
103− 'exec': ''
104− },
105− '/usr/share/applications/wikipedia.desktop': {
106− 'name': i18n.tr("Wikipedia"),
107− 'icon': 'wikipedia',
108− 'exec': ''
109− },
110− '/usr/share/applications/youtube.desktop': {
111− 'name': i18n.tr("YouTube"),
112− 'icon': 'youtube',
113− 'exec': ''
114− },
115−}
CMakeLists.txt+11−73
@@ -69,17 +69,6 @@ if(SHELL_PLUGINDIR STREQUAL "")
69 message(FATAL_ERROR "Could not determine plugin import dir.")
69 message(FATAL_ERROR "Could not determine plugin import dir.")
70endif()
70endif()
71
71
72−configure_file(paths.h.in ${CMAKE_CURRENT_BINARY_DIR}/paths.h @ONLY)
73−
74−pkg_check_modules(UNITY-MIR REQUIRED unity-mir)
75−
76−include_directories(
77− ${CMAKE_CURRENT_BINARY_DIR}
78− ${CMAKE_CURRENT_SOURCE_DIR}
79− ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
80− ${UNITY-MIR_INCLUDE_DIRS}
81− )
82−
83set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
72set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
84
73
85set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fno-permissive -pedantic -Wall -Wextra")
74set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fno-permissive -pedantic -Wall -Wextra")
@@ -108,73 +97,22 @@ declare_autopilot_test(shell unity8.shell ${CMAKE_SOURCE_DIR}/tests/autopilot/)
108
97
109set(SHELL_APP unity8)
98set(SHELL_APP unity8)
110
99
111−set(shell_app_HDRS
100+include_directories(
112− )
101+ ${CMAKE_SOURCE_DIR}/include
113−
102+ ${CMAKE_BINARY_DIR}/include
114−add_executable(${SHELL_APP}
115− ${shellapplication_MOC_SRCS}
116− ApplicationArguments.h
117− main.cpp
118− MouseTouchAdaptor.cpp
119− )
120−
121−qt5_use_modules(${SHELL_APP} Qml Quick Test)
122−pkg_check_modules(XCB REQUIRED xcb)
123−
124−if (NOT "${XCB_INCLUDE_DIRS}" STREQUAL "")
125− set_target_properties(${SHELL_APP} PROPERTIES INCLUDE_DIRECTORIES ${XCB_INCLUDE_DIRS})
126−endif()
127−
128−target_link_libraries(${SHELL_APP}
129− ${Qt5Qml_LIBRARIES}
130− ${Qt5Quick_LIBRARIES}
131− ${XCB_LDFLAGS}
132− ${CMAKE_DL_LIBS}
133− )
134−
135−# install binaries
136−install(TARGETS ${SHELL_APP}
137− RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
138− )
139−
140−# install top level qml and js files
141−file(GLOB QML_JS_FILES *.qml *.js)
142−
143−install(FILES ${QML_JS_FILES}
144− DESTINATION ${SHELL_APP_DIR}
145− )
103+)
146
104
147# add subdirectories to build
105# add subdirectories to build
106+add_subdirectory(include)
107+add_subdirectory(src)
108+add_subdirectory(qml)
148add_subdirectory(tests)
109add_subdirectory(tests)
149add_subdirectory(plugins)
110add_subdirectory(plugins)
150−add_subdirectory(src)
151
111
152−# install subdirectories
112+#
153−set(QML_DIRS
113+# Data files
154− Applications
114+#
155− Bottombar
115+add_subdirectory(data)
156− Components
157− Dash
158− graphics
159− Greeter
160− Hud
161− Panel
162− Launcher
163− SideStage
164− Notifications
165− )
166−
167−install(DIRECTORY ${QML_DIRS}
168− DESTINATION ${SHELL_APP_DIR}
169− )
170−
171−# generate desktop file
172−configure_file(${SHELL_APP}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${SHELL_APP}.desktop @ONLY)
173−
174−# install desktop file
175−install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SHELL_APP}.desktop
176− DESTINATION ${CMAKE_INSTALL_DATADIR}/applications
177− )
178
116
179#
117#
180# Translation
118# Translation
CODING+2−2
@@ -1,7 +1,7 @@
1Building Unity 8
1Building Unity 8
2================
2================
3
3
4−Only Ubuntu 13.10 (saucy) is supported as a developement environment.
4+Only Ubuntu 14.04 (trusty) is supported as a developement environment.
5
5
6download source
6download source
7---------------
7---------------
@@ -68,7 +68,7 @@ Notes
68
68
69Running Unity 8 on devices
69Running Unity 8 on devices
70==========================
70==========================
71−- Ubuntu Touch builds are currently only available in 13.10 flavour
71+- Ubuntu Touch builds are currently only available in 14.04 flavour
72- supported hardware should match one of those listed here
72- supported hardware should match one of those listed here
73 https://wiki.ubuntu.com/Touch/Devices#Running_fine
73 https://wiki.ubuntu.com/Touch/Devices#Running_fine
74- follow the Ubuntu Touch install instructions for your chosen device
74- follow the Ubuntu Touch install instructions for your chosen device
Notifications/Notification.qmldeleted−295
@@ -1,295 +0,0 @@
1−/*
2− * Copyright (C) 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 General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−import Unity.Notifications 1.0
20−import QMenuModel 0.1
21−import Utils 0.1
22−
23−UbuntuShape {
24− id: notification
25−
26− property alias iconSource: icon.fileSource
27− property alias secondaryIconSource: secondaryIcon.source
28− property alias summary: summaryLabel.text
29− property alias body: bodyLabel.text
30− property var actions
31− property var notificationId
32− property var type
33− property var hints
34− property var notification
35−
36− objectName: "background"
37− implicitHeight: type != Notification.PlaceHolder ? contentColumn.height + contentColumn.spacing * 2 : 0
38− color: Qt.rgba(0.132, 0.117, 0.109, 0.97)
39− opacity: 0
40− radius: "medium"
41−
42− clip: true
43− visible: type != Notification.PlaceHolder
44−
45− UnityMenuModelPaths {
46− id: paths
47−
48− source: hints["x-canonical-private-menu-model"]
49−
50− busNameHint: "busName"
51− actionsHint: "actions"
52− menuObjectPathHint: "menuPath"
53− }
54−
55− UnityMenuModel {
56− id: unityMenuModel
57−
58− busName: paths.busName
59− actions: paths.actions
60− menuObjectPath: paths.menuObjectPath
61− }
62−
63− Behavior on implicitHeight {
64− id: heightBehavior
65−
66− enabled: false
67− UbuntuNumberAnimation {
68− duration: UbuntuAnimation.SnapDuration
69− }
70− }
71−
72− // delay enabling height behavior until the add transition is complete
73− onOpacityChanged: if (opacity == 1) heightBehavior.enabled = true
74−
75− MouseArea {
76− id: interactiveArea
77−
78− anchors.fill: contentColumn
79− objectName: "interactiveArea"
80− enabled: notification.type == Notification.Interactive
81− onClicked: notification.notification.invokeAction(actionRepeater.itemAt(0).actionId)
82− }
83−
84− Column {
85− id: contentColumn
86−
87− anchors {
88− left: parent.left
89− right: parent.right
90− top: parent.top
91− margins: spacing
92− }
93−
94− spacing: units.gu(1)
95−
96− Row {
97− id: topRow
98−
99− spacing: contentColumn.spacing
100− anchors {
101− left: parent.left
102− right: parent.right
103− }
104−
105− ShapedIcon {
106− id: icon
107−
108− objectName: "icon"
109− width: units.gu(6)
110− height: units.gu(6)
111− shaped: notification.hints["x-canonical-non-shaped-icon"] == "true" ? false : true
112− visible: iconSource !== undefined && iconSource != ""
113− }
114−
115− Image {
116− id: secondaryIcon
117−
118− objectName: "secondaryIcon"
119− width: units.gu(2)
120− height: units.gu(2)
121− visible: source !== undefined && source != ""
122− fillMode: Image.PreserveAspectCrop
123− }
124−
125− Column {
126− id: labelColumn
127− width: parent.width - x
128−
129− anchors.verticalCenter: (icon.visible && !bodyLabel.visible) ? icon.verticalCenter : undefined
130−
131− Label {
132− id: summaryLabel
133−
134− objectName: "summaryLabel"
135− anchors {
136− left: parent.left
137− right: parent.right
138− }
139− fontSize: "medium"
140− font.bold: true
141− color: Theme.palette.selected.backgroundText
142− elide: Text.ElideRight
143− }
144−
145− Label {
146− id: bodyLabel
147−
148− objectName: "bodyLabel"
149− anchors {
150− left: parent.left
151− right: parent.right
152− }
153− visible: body != ""
154− fontSize: "small"
155− color: Theme.palette.selected.backgroundText
156− opacity: 0.6
157− wrapMode: Text.WordWrap
158− maximumLineCount: 10
159− elide: Text.ElideRight
160− }
161− }
162− }
163−
164− Column {
165− objectName: "dialogListView"
166− spacing: units.gu(2)
167−
168− visible: count > 0
169−
170− anchors.left: parent.left; anchors.right: parent.right
171−
172− Repeater {
173− model: unityMenuModel
174−
175− NotificationMenuItemFactory {
176− anchors.left: parent.left; anchors.right: parent.right
177−
178− menuModel: unityMenuModel
179− menuData: model
180− menuIndex: index
181− }
182− }
183− }
184−
185− Item {
186− id: buttonRow
187−
188− objectName: "buttonRow"
189− anchors {
190− left: parent.left
191− right: parent.right
192− }
193− visible: notification.type == Notification.SnapDecision && actionRepeater.count > 0
194− height: units.gu(5)
195−
196− property real buttonWidth: (width - contentColumn.spacing) / 2
197− property bool expanded
198−
199− Button {
200− id: leftButton
201−
202− objectName: "button1"
203− width: parent.expanded ? parent.width : parent.buttonWidth
204− anchors {
205− top: parent.top
206− bottom: parent.bottom
207− }
208− text: notification.type == Notification.SnapDecision && actionRepeater.count >= 2 ? actionRepeater.itemAt(1).actionLabel : ""
209− gradient: UbuntuColors.greyGradient
210− onClicked: {
211− if (actionRepeater.count > 2) {
212− buttonRow.expanded = !buttonRow.expanded
213− } else {
214− notification.notification.invokeAction(actionRepeater.itemAt(1).actionId)
215− }
216− }
217−
218− Behavior on width {
219− UbuntuNumberAnimation {
220− duration: UbuntuAnimation.SnapDuration
221− }
222− }
223− }
224−
225− Button {
226− id: rightButton
227−
228− objectName: "button0"
229− anchors {
230− left: leftButton.right
231− leftMargin: contentColumn.spacing
232− right: parent.right
233− }
234− text: notification.type == Notification.SnapDecision && actionRepeater.count >= 1 ? actionRepeater.itemAt(0).actionLabel : ""
235− anchors {
236− top: parent.top
237− bottom: parent.bottom
238− }
239− gradient: notification.hints["x-canonical-private-button-tint"] == "true" ? UbuntuColors.orangeGradient : UbuntuColors.greyGradient
240− visible: width > 0
241− onClicked: notification.notification.invokeAction(actionRepeater.itemAt(0).actionId)
242− }
243− }
244−
245− Column {
246− objectName: "buttonColumn"
247− spacing: contentColumn.spacing
248− anchors {
249− left: parent.left
250− right: parent.right
251− }
252−
253− // calculate initial position before Column takes over
254− y: buttonRow.y + buttonRow.height + contentColumn.spacing
255−
256− visible: notification.type == Notification.SnapDecision
257− height: buttonRow.expanded ? implicitHeight : 0
258−
259− Repeater {
260− id: actionRepeater
261−
262− model: notification.actions
263− delegate: Loader {
264− id: loader
265−
266− property string actionId: id
267− property string actionLabel: label
268−
269− anchors {
270− left: parent.left
271− right: parent.right
272− }
273−
274− Component {
275− id: actionButton
276−
277− Button {
278− objectName: "button" + index
279− anchors {
280− left: parent.left
281− right: parent.right
282− }
283−
284− text: loader.actionLabel
285− height: units.gu(5)
286− gradient: UbuntuColors.greyGradient
287− onClicked: notification.notification.invokeAction(loader.actionId)
288− }
289− }
290− sourceComponent: (index == 0 || index == 1) ? undefined : actionButton
291− }
292− }
293− }
294− }
295−}
data/CMakeLists.txtnew file+7
@@ -0,0 +1,7 @@
1+# generate desktop file
2+configure_file(${SHELL_APP}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${SHELL_APP}.desktop @ONLY)
3+
4+# install desktop file
5+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SHELL_APP}.desktop
6+ DESTINATION ${CMAKE_INSTALL_DATADIR}/applications
7+ )
data/unity8.conf+1
@@ -5,6 +5,7 @@ start on ((xsession SESSION=ubuntu-touch) or (xsession SESSION=ubuntu-touch-surf
5stop on desktop-end
5stop on desktop-end
6
6
7respawn
7respawn
8+expect stop
8
9
9pre-start script
10pre-start script
10 if [ -n "$MIR_SOCKET" ]; then
11 if [ -n "$MIR_SOCKET" ]; then
unity8.desktop.in → data/unity8.desktop.inrenamed

The content is the same.

data/unity8.overridenew file+1
@@ -0,0 +1 @@
1+kill timeout 30
debian/changelog+225−2
@@ -1,8 +1,231 @@
1−unity8 (7.84-0ubuntu1) UNRELEASED; urgency=low
1+unity8 (7.84+14.04.20131212-0ubuntu1) trusty; urgency=low
2
2
3+ [ Michał Sawicz ]
4+ * Add PyDev project files for autopilot tests. Also tweak .bzrignore
5+ to not ignore generic Eclipse project definitions.
6+ * Retry unlocking the greeter three times.
7+ * Reduce code duplication and clean up CMakeLists and includes in
8+ indicator tests.
9+
10+ [ Nick Dedekind ]
11+ * Replaced indicator page dynamic menuSelected binding with Connection
12+ to listview selectedIndex property. (LP: #1243146)
13+ * Indicators close when menu items are activated. (LP: #1238182)
14+ * Fixed up connections for changes to model data. (LP: #1253810)
15+
16+ [ Albert Astals ]
17+ * dashItemSelected -> showDashHome Because we are not using the index
18+ at all in the upper layers.
19+ * Fix filtering colllapsing/expanding again Also the delegate creation
20+ range stuff flows up->down not down->up so rearrange the bindings.
21+
22+ [ Ubuntu daily release ]
23+ * Automatic snapshot from revision 590
24+
25+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 12 Dec 2013 21:41:19 +0000
26+
27+unity8 (7.84+14.04.20131206.1-0ubuntu1) trusty; urgency=low
28+
29+ [ Michal Hruby ]
30+ * Ensure DashContent's ListView's currentItem is set if the model is
31+ not empty.
32+
33+ [ Michał Sawicz ]
34+ * Don't generate build-deps .deb twice and allow overriding
35+ QML2_IMPORT_PATH in ./run.
36+
37+ [ Albert Astals ]
38+ * Remove unused Applications/ folder .
39+ * Implement an 'interface' for Dash Renderers.
40+ * Use deelistmodel's conversion method Instead of a copy of the code .
41+ * Remove icons we don't use .
42+ * Do not start apps or go to dash on demo If you are pulling the
43+ launcher out while in demo mode it doesn't make sense to let you
44+ start applications. Besides it locks you out because it starts the
45+ app and the demo is still not finished so you can't really use any
46+ of the edges to escape Bug #1233696. (LP: #1233696)
47+ * Add a test for the carousel showing the preview when being clicked .
48+ * Fix collapsing of categories not working and the
49+ expansion/collapsing animation +test.
50+
51+ [ Timo Jyrinki ]
52+ * Depend on either Qt 5.2 or libqt5v8-5-private-dev.
53+ * qtdeclarative5-private-dev 5.0.2-6ubuntu5 now depends directly on Qt
54+ V8 private headers. The remaining "qtdeclarative5-private-dev"
55+ dependency is enough now both when compiling against 5.0.2 or 5.2.
56+
57+ [ Pete Woods ]
58+ * Handle optional parameterized action properties. (LP: #1256258)
59+
60+ [ Andrea Cimitan ]
61+ * Implement an 'interface' for Dash Renderers.
62+
63+ [ Michael Zanetti ]
64+ * Added music preview.
65+ * rename some parameters from desktopFile to appId as scopes are now
66+ changed to give us the appId.
67+ * unhardcode launcher's search paths for .desktop files.
68+ * Enable teasing of the phone greeter even though we have a
69+ lockscreen.
70+ * check if variant is valid to avoid asserting in debug mode when the
71+ connection to AccountsService doesn't work for some reason .
72+
73+ [ Michael Terry ]
74+ * Add the DBus greeter API from the desktop greeter into the unity8
75+ greeter.
76+
77+ [ Daniel d'Andrada ]
78+ * Dash: disable close mode when you click outside app thumbnails To
79+ leave the termination mode you can now just mouse/touch press
80+ anywhere outside the running applications' thumbnails The other way,
81+ which still works, is long-pressing a thumbnail once more. (LP:
82+ #1193414)
83+
84+ [ Ubuntu daily release ]
85+ * Automatic snapshot from revision 579
86+
87+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Fri, 06 Dec 2013 13:15:57 +0000
88+
89+unity8 (7.84+14.04.20131128.2-0ubuntu1) trusty; urgency=low
90+
91+ [ Michal Hruby ]
3 * Depend on the separate scopes plugin
92 * Depend on the separate scopes plugin
93+ * Move the BottomBar* DBus communicator to the Utils plugin.
94+
95+ [ Michał Sawicz ]
96+ * Wait for DashHome to be available in tst_Shell. (LP: #1254898)
97+ * Use plugindir from unity-shell-api.pc.
98+ * Expect stop in upstart job and raise in case of surfaceflinger. (LP:
99+ #1239876)
100+
101+ [ Albert Astals ]
102+ * Fix time test in Qt 5.2 Make factors an array instead of a
103+ object/dict Objects/dicts are unordered by definition, it happened
104+ that Qt 5.0 gave them in the orrder we wanted, but with Qt 5.2 is
105+ failing, and we don't even need the "key", so array works as well
106+ :).
107+ * Test that the dash hswipe is disabled while the inner stuff is
108+ moving .
109+ * Skip restMaximizeVisibleAreaMoveUpAndShowHeader, it's causing too
110+ many failed runs And we are confident it's failing because of the
111+ suboptimal scenegraph run in 5.0.x.
112+ * Make Dash::test_show_scope_on_load more robust If we are testing
113+ showScopeOnLoaded make sure we force a scope reload after we set it,
114+ otherwise it may just happen that the scope has already been loaded
115+ and the expectaction that we'll change the list to it is just wrong.
116+ * Dash renderer signals: No need to pass the model up and down Whoever
117+ is listening to the signal has access to the item that emits the
118+ signal and has the model right there accessible if needs it.
119+ * LVWPH: Fix header going bad when setContentHeight ends up moving the
120+ viewport How to reproduce the bug easily without the patch: * In the
121+ Dash Home, search for london * Scroll to the bottom * Start moving
122+ to the apps scope very slowly * At around 3/4 of the move you'll see
123+ the header in the home scope went to a bad position * Go back to the
124+ Dash Home. (LP: #1237942, #1246351)
125+ * Remove unused AppInfo and VideoInfo files .
126+ * Kill unused ApplicationsFilterGrid.qml .
127+ * Unify ScopeView and GenericScopeView .
128+ * Fix header getting lost as per bug 1245824. (LP: #1245824)
129+ * Remove unused Time.js and its test .
130+ * Do not include the QtQml megaheader Include only qqml.h which is
131+ what we need in these files.
132+ * Don't do stuff if our parent context is gone We'll be gone soon too
133+ (and crash probably) so don't do anything. This looks a bit like a
134+ workaround, wait for 5.2 better painting/dispatching loop to see if
135+ this is not needed anymore, we find a better way to do it, or we
136+ decide this is fine.
137+
138+ [ Lars Uebernickel ]
139+ * Allow setting different indicator positions for different profiles.
140+
141+ [ Mirco Müller ]
142+ * Added checkbox for toggling between echo-modes of password-
143+ entryfields in ext. snap-decisions.
144+ * Fixes bug #1200569. (LP: #1200569)
145+
146+ [ Andrea Cimitan ]
147+ * Switch to application scope when a dash swipe is taking place and an
148+ app is on foreground. (LP: #1231996)
149+ * Shifts wallpaper rendering for greeter lockscreen to be inline with
150+ shell. (LP: #1231731)
151+ * Dinamically load the Carousel/Filtergrid with more than 6 items.
152+ (LP: #1226288, #1234105)
153+ * Removes Math.js and its usage. Use SDK ones.
154+
155+ [ Gerry Boland ]
156+ * DragHandle: javascript argument name clashes with local variable.
157+ Yes it works, but is a little unsafe.
158+
159+ [ Nick Dedekind ]
160+ * Added UnityMenuModel submenu row removal awareness in
161+ UnityMenuModelStack.
162+ * Round indicator widget icon/label width up to closest gu for
163+ alignment. (LP: #1236267)
164+ * Indicator re-select by dragging from top when fully opened. (LP:
165+ #1213164)
166+ * Fixed a race condition causing search history popup to show up when
167+ it shouldn't. (LP: #1249369)
168+
169+ [ Christopher Lee ]
170+ * Unity8 tests now make use of the helper functions (added in the pre-
171+ req branch) so that the helper functions are tested as part of daily
172+ business.
173+
174+ [ Daniel d'Andrada ]
175+ * Improve DirectionalDragArea Removed Rejected status, simplifying
176+ state machine. Added compositionTime property. Multi-finger
177+ scenarios are better handled now. Refactored TimeSource in
178+ Ubuntu.Gestures plugin. Added an easy way to debug
179+ DirectionalDragArea by having switchable debug prints. Updated tests
180+ to also simulate the passage of time. Use touch point scene
181+ coordinates for gesture recognition so that moving the.
182+ DirectionalDragArea (as in a hinting DragHandle) won't affect it.
183+ (LP: #1228336)
184+ * Add right-edge drag hinting to Greeter To match with the existing
185+ teasing animation when you tap on the right half of the Greeter.
186+ Also has the side benefit of making the code look a bit nicer.
187+ * Refactor Ubuntu.Gesture tests to share common logic Take the common
188+ part out of tst_DirectionalDragArea and put it into a separate base
189+ class, GestureTest, so that it can be shared with other, future,
190+ tests. In CMakeLists.txt, create a macro out of DirectionalDragArea
191+ build script to be used by future tests with similar requirements
192+ and structure. Also add the "m_" prefix to member variables.
193+ * Remove dead code from Utils plugin They are not being used anywhere.
194+
195+ [ Michael Terry ]
196+ * Make EdgeDemoOverlay test more reliable by testing for what we
197+ really care about, not an indirect indicator of it. (LP: #1248232)
198+ * Explicitly set MIR_SOCKET for other upstart jobs, rather than
199+ relying on the default socket, since that won't work once we move to
200+ a nested Mir.
201+
202+ [ Michael Zanetti ]
203+ * don't add margins to RunningApplicationTile's label. (LP: #1245482)
204+ * allow SIM PIN entry to have a variable pin length (by adding a done-
205+ button). (LP: #1240561)
206+ * fix launcher wording for pinning actions. (LP: #1240891)
207+ * fix preview background positioning don't explicitly take originY
208+ into account as it's already in there implicitly. make sure we don't
209+ split the openeffect in a place where it can be covered by the
210+ header.
211+ * fix album artwork containing / in the name. (LP: #1237829)
212+ * small launcher tweaks fix fakeDragItem's initial position to match
213+ with real item. remove UbuntuShape's border glow. .
214+ * drop all references to LighDM from the Lockscreen This should make
215+ it generic enough to allow reusing it for SIM PIN entry .
216+
217+ [ Omer Akram ]
218+ * make the non working code in the screen unlocker helper work.
219+
220+ [ Nicolas d'Offay ]
221+ * Pushed up the z order of the clock in GreeterContent. (LP: #1233146)
222+ * Search history is now persistent across all scopes and remains in
223+ QML. (LP: #1226221)
224+
225+ [ Ubuntu daily release ]
226+ * Automatic snapshot from revision 556
4
227
5− -- Michal Hruby <michal.hruby@canonical.com> Wed, 13 Nov 2013 12:43:39 +0000
228+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 28 Nov 2013 18:09:17 +0000
6
229
7unity8 (7.83+14.04.20131106-0ubuntu1) trusty; urgency=low
230unity8 (7.83+14.04.20131106-0ubuntu1) trusty; urgency=low
8
231
debian/control+2−2
@@ -16,7 +16,6 @@ Build-Depends: cmake,
16 libnih-dev,
16 libnih-dev,
17 libpulse-dev,
17 libpulse-dev,
18 libqmenumodel-dev (>= 0.2.7),
18 libqmenumodel-dev (>= 0.2.7),
19− libqt5v8-5-private-dev,
20 libunity-api-dev (>= 7.80.4),
19 libunity-api-dev (>= 7.80.4),
21 libunity-mir-dev,
20 libunity-mir-dev,
22 libunity-scopes-json-def-phone,
21 libunity-scopes-json-def-phone,
@@ -34,6 +33,7 @@ Build-Depends: cmake,
34 qtbase5-private-dev,
33 qtbase5-private-dev,
35 qtdeclarative5-dev,
34 qtdeclarative5-dev,
36 qtdeclarative5-dev-tools,
35 qtdeclarative5-dev-tools,
36+ qtdeclarative5-qtmultimedia-plugin,
37 qtdeclarative5-private-dev,
37 qtdeclarative5-private-dev,
38 qtdeclarative5-qtquick2-plugin,
38 qtdeclarative5-qtquick2-plugin,
39 qtdeclarative5-test-plugin,
39 qtdeclarative5-test-plugin,
@@ -63,7 +63,7 @@ Package: unity8
63Architecture: any
63Architecture: any
64Provides: indicator-renderer,
64Provides: indicator-renderer,
65Depends: gsettings-desktop-schemas,
65Depends: gsettings-desktop-schemas,
66− libunity-mir1,
66+ libunity-mir1 (>= 0.2),
67 qmenumodel-qml (>= 0.2.7),
67 qmenumodel-qml (>= 0.2.7),
68 qtdeclarative5-dee-plugin,
68 qtdeclarative5-dee-plugin,
69 qtdeclarative5-gsettings1.0,
69 qtdeclarative5-gsettings1.0,
debian/unity8-autopilot.install+1
@@ -1 +1,2 @@
1usr/lib/python*/*/unity*
1usr/lib/python*/*/unity*
2+data/unity8.override usr/share/upstart/sessions
debian/unity8-private.install+1−1
@@ -1,7 +1,7 @@
1usr/lib/*/unity8/qml/AccountsService
1usr/lib/*/unity8/qml/AccountsService
2usr/lib/*/unity8/qml/HudClient
2usr/lib/*/unity8/qml/HudClient
3usr/lib/*/unity8/qml/LightDM
3usr/lib/*/unity8/qml/LightDM
4−usr/lib/*/unity8/qml/ListViewWithPageHeader
4+usr/lib/*/unity8/qml/DashViews
5usr/lib/*/unity8/qml/Powerd
5usr/lib/*/unity8/qml/Powerd
6usr/lib/*/unity8/qml/SessionBroadcast
6usr/lib/*/unity8/qml/SessionBroadcast
7usr/lib/*/unity8/qml/Ubuntu
7usr/lib/*/unity8/qml/Ubuntu
debian/unity8.install−1
@@ -1,7 +1,6 @@
1usr/bin/unity8
1usr/bin/unity8
2usr/share/applications/unity8.desktop
2usr/share/applications/unity8.desktop
3usr/share/locale
3usr/share/locale
4−usr/share/unity8/Applications
5usr/share/unity8/Bottombar
4usr/share/unity8/Bottombar
6usr/share/unity8/Components
5usr/share/unity8/Components
7usr/share/unity8/Dash
6usr/share/unity8/Dash
include/CMakeLists.txtnew file+1
@@ -0,0 +1 @@
1+configure_file(paths.h.in ${CMAKE_CURRENT_BINARY_DIR}/paths.h @ONLY)
paths.h.in → include/paths.h.inrenamed+42−3
@@ -23,6 +23,8 @@
23// Qt
23// Qt
24#include <QtCore/QCoreApplication>
24#include <QtCore/QCoreApplication>
25#include <QtCore/QDir>
25#include <QtCore/QDir>
26+#include <QtGui/QIcon>
27+#include <QtQml/QQmlEngine>
26#include <QStandardPaths>
28#include <QStandardPaths>
27
29
28inline bool isRunningInstalled() {
30inline bool isRunningInstalled() {
@@ -39,11 +41,11 @@ inline QString translationDirectory() {
39 }
41 }
40}
42}
41
43
42−inline QString shellAppDirectory() {
44+inline QString qmlDirectory() {
43 if (isRunningInstalled()) {
45 if (isRunningInstalled()) {
44 return QString("@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/");
46 return QString("@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/");
45 } else {
47 } else {
46− return QString("@CMAKE_SOURCE_DIR@/");
48+ return QString("@CMAKE_SOURCE_DIR@/qml/");
47 }
49 }
48}
50}
49
51
@@ -77,7 +79,7 @@ inline QStringList shellDataDirs() {
77 }
79 }
78 else {
80 else {
79 // append so by default we use xdg files.
81 // append so by default we use xdg files.
80− dirs.append(shellAppDirectory());
82+ dirs.append(qmlDirectory());
81 }
83 }
82 return dirs;
84 return dirs;
83}
85}
@@ -86,4 +88,41 @@ inline QString sourceDirectory() {
86 return QString("@CMAKE_SOURCE_DIR@/");
88 return QString("@CMAKE_SOURCE_DIR@/");
87}
89}
88
90
91+inline void prependImportPaths(QQmlEngine *engine, const QStringList &paths)
92+{
93+ QStringList importPathList = engine->importPathList();
94+ for (int i = paths.count() -1; i >= 0; i--) {
95+ // don't duplicate
96+ const QString& path = paths[i];
97+ QStringList::iterator iter = qFind(importPathList.begin(), importPathList.end(), path);
98+ if (iter == importPathList.end()) {
99+ engine->addImportPath(path);
100+ }
101+ }
102+}
103+
104+/* When you append and import path to the list of import paths it will be the *last*
105+ place where Qt will search for QML modules.
106+ The usual QQmlEngine::addImportPath() actually prepends the given path.*/
107+inline void appendImportPaths(QQmlEngine *engine, const QStringList &paths)
108+{
109+ QStringList importPathList = engine->importPathList();
110+ Q_FOREACH(const QString& path, paths) {
111+ // don't duplicate
112+ QStringList::iterator iter = qFind(importPathList.begin(), importPathList.end(), path);
113+ if (iter == importPathList.end()) {
114+ importPathList.append(path);
115+ }
116+ }
117+ engine->setImportPathList(importPathList);
118+}
119+
120+inline void resolveIconTheme() {
121+ const char *ubuntuIconTheme = getenv("UBUNTU_ICON_THEME");
122+ if (ubuntuIconTheme == NULL) {
123+ ubuntuIconTheme = "ubuntu-mobile";
124+ }
125+ QIcon::setThemeName(ubuntuIconTheme);
126+}
127+
89#endif
128#endif
plugins/CMakeLists.txt+1−1
@@ -1,7 +1,7 @@
1add_subdirectory(AccountsService)
1add_subdirectory(AccountsService)
2add_subdirectory(HudClient)
2add_subdirectory(HudClient)
3add_subdirectory(LightDM)
3add_subdirectory(LightDM)
4−add_subdirectory(ListViewWithPageHeader)
4+add_subdirectory(DashViews)
5add_subdirectory(Powerd)
5add_subdirectory(Powerd)
6add_subdirectory(SessionBroadcast)
6add_subdirectory(SessionBroadcast)
7add_subdirectory(Ubuntu)
7add_subdirectory(Ubuntu)
plugins/ListViewWithPageHeader/CMakeLists.txt → plugins/DashViews/CMakeLists.txtrenamed+6−5
@@ -24,19 +24,20 @@ remove_definitions(-DQT_NO_KEYWORDS)
24set(QMLPLUGIN_SRC
24set(QMLPLUGIN_SRC
25 plugin.cpp
25 plugin.cpp
26 listviewwithpageheader.cpp
26 listviewwithpageheader.cpp
27+ verticaljournal.cpp
27 )
28 )
28
29
29−add_library(ListViewWithPageHeader-qml MODULE
30+add_library(DashViews-qml MODULE
30 ${QMLPLUGIN_SRC}
31 ${QMLPLUGIN_SRC}
31 )
32 )
32
33
33−target_link_libraries(ListViewWithPageHeader-qml
34+target_link_libraries(DashViews-qml
34 ${Qt5Gui_LIBRARIES}
35 ${Qt5Gui_LIBRARIES}
35 ${Qt5Quick_LIBRARIES}
36 ${Qt5Quick_LIBRARIES}
36 )
37 )
37
38
38−qt5_use_modules(ListViewWithPageHeader-qml Qml Quick)
39+qt5_use_modules(DashViews-qml Qml Quick)
39
40
40# export the qmldir qmltypes and plugin files
41# export the qmldir qmltypes and plugin files
41−export_qmlfiles(ListViewWithPageHeader ListViewWithPageHeader)
42+export_qmlfiles(DashViews DashViews)
42−export_qmlplugin(ListViewWithPageHeader 0.1 ListViewWithPageHeader TARGETS ListViewWithPageHeader-qml)
43+export_qmlplugin(DashViews 0.1 DashViews TARGETS DashViews-qml)
plugins/ListViewWithPageHeader/listviewwithpageheader.cpp → plugins/DashViews/listviewwithpageheader.cpprenamed

The content is the same.

plugins/ListViewWithPageHeader/listviewwithpageheader.h → plugins/DashViews/listviewwithpageheader.hrenamed

The content is the same.

plugins/ListViewWithPageHeader/plugin.cpp → plugins/DashViews/plugin.cpprenamed+4−2
@@ -18,12 +18,14 @@
18#include "plugin.h"
18#include "plugin.h"
19
19
20#include "listviewwithpageheader.h"
20#include "listviewwithpageheader.h"
21+#include "verticaljournal.h"
21
22
22#include <QAbstractItemModel>
23#include <QAbstractItemModel>
23
24
24−void ListViewWithPageHeaderPlugin::registerTypes(const char *uri)
25+void DashViewsPlugin::registerTypes(const char *uri)
25{
26{
26− Q_ASSERT(uri == QLatin1String("ListViewWithPageHeader"));
27+ Q_ASSERT(uri == QLatin1String("DashViews"));
27 qmlRegisterType<QAbstractItemModel>();
28 qmlRegisterType<QAbstractItemModel>();
28 qmlRegisterType<ListViewWithPageHeader>(uri, 0, 1, "ListViewWithPageHeader");
29 qmlRegisterType<ListViewWithPageHeader>(uri, 0, 1, "ListViewWithPageHeader");
30+ qmlRegisterType<VerticalJournal>(uri, 0, 1, "VerticalJournal");
29}
31}
plugins/ListViewWithPageHeader/plugin.h → plugins/DashViews/plugin.hrenamed+3−3
@@ -15,13 +15,13 @@
15 *
15 *
16 */
16 */
17
17
18−#ifndef LISTVIEWWITHPAGEHEADER_PLUGIN_H
18+#ifndef DASHVIEWS_PLUGIN_H
19−#define LISTVIEWWITHPAGEHEADER_PLUGIN_H
19+#define DASHVIEWS_PLUGIN_H
20
20
21#include <QtQml/QQmlEngine>
21#include <QtQml/QQmlEngine>
22#include <QtQml/QQmlExtensionPlugin>
22#include <QtQml/QQmlExtensionPlugin>
23
23
24−class ListViewWithPageHeaderPlugin : public QQmlExtensionPlugin
24+class DashViewsPlugin : public QQmlExtensionPlugin
25{
25{
26 Q_OBJECT
26 Q_OBJECT
27 Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
27 Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
plugins/DashViews/qmldirnew file+3
@@ -0,0 +1,3 @@
1+module DashViews
2+plugin DashViews-qml
3+typeinfo plugin.qmltypes
plugins/DashViews/verticaljournal.cppnew file+609
@@ -0,0 +1,609 @@
1+/*
2+ * Copyright (C) 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 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 implementation is centered around m_columnVisibleItems
19+ * that holds a vector of lists. There's a list for each of the
20+ * columns the view has. In the list the items of the column are
21+ * ordered as they appear topdown in the view. m_indexColumnMap is
22+ * used when re-building the list up since given a position
23+ * in the middle of the list and the need to create the previous does
24+ * not give us enough information to know in which column we have
25+ * to position the item so that when we reach the item the view is
26+ * correctly layouted at 0 for all the columns
27+ */
28+#include "verticaljournal.h"
29+
30+#include <qqmlengine.h>
31+#pragma GCC diagnostic push
32+#pragma GCC diagnostic ignored "-pedantic"
33+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
34+#include <private/qquickvisualdatamodel_p.h>
35+#else
36+#include <private/qqmldelegatemodel_p.h>
37+#include <qqmlinfo.h>
38+#endif
39+#include <private/qquickitem_p.h>
40+#pragma GCC diagnostic pop
41+
42+static const qreal bufferRatio = 0.5;
43+
44+VerticalJournal::VerticalJournal()
45+ : m_delegateModel(nullptr)
46+ , m_asyncRequestedIndex(-1)
47+ , m_columnWidth(0)
48+ , m_columnSpacing(0)
49+ , m_rowSpacing(0)
50+ , m_delegateCreationBegin(0)
51+ , m_delegateCreationEnd(0)
52+ , m_delegateCreationBeginValid(false)
53+ , m_delegateCreationEndValid(false)
54+ , m_needsRelayout(false)
55+ , m_delegateValidated(false)
56+ , m_implicitHeightDirty(false)
57+{
58+ connect(this, SIGNAL(widthChanged()), this, SLOT(relayout()));
59+ connect(this, SIGNAL(heightChanged()), this, SLOT(onHeightChanged()));
60+}
61+
62+QAbstractItemModel *VerticalJournal::model() const
63+{
64+ return m_delegateModel ? m_delegateModel->model().value<QAbstractItemModel *>() : nullptr;
65+}
66+
67+void VerticalJournal::setModel(QAbstractItemModel *model)
68+{
69+ if (model != this->model()) {
70+ if (!m_delegateModel) {
71+ createDelegateModel();
72+ } else {
73+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
74+ disconnect(m_delegateModel, SIGNAL(modelUpdated(QQuickChangeSet,bool)), this, SLOT(onModelUpdated(QQuickChangeSet,bool)));
75+ }
76+ m_delegateModel->setModel(QVariant::fromValue<QAbstractItemModel *>(model));
77+ connect(m_delegateModel, SIGNAL(modelUpdated(QQuickChangeSet,bool)), this, SLOT(onModelUpdated(QQuickChangeSet,bool)));
78+#else
79+ disconnect(m_delegateModel, SIGNAL(modelUpdated(QQmlChangeSet,bool)), this, SLOT(onModelUpdated(QQmlChangeSet,bool)));
80+ }
81+ m_delegateModel->setModel(QVariant::fromValue<QAbstractItemModel *>(model));
82+ connect(m_delegateModel, SIGNAL(modelUpdated(QQmlChangeSet,bool)), this, SLOT(onModelUpdated(QQmlChangeSet,bool)));
83+#endif
84+
85+ cleanupExistingItems();
86+
87+ Q_EMIT modelChanged();
88+ polish();
89+ }
90+}
91+
92+QQmlComponent *VerticalJournal::delegate() const
93+{
94+ return m_delegateModel ? m_delegateModel->delegate() : nullptr;
95+}
96+
97+void VerticalJournal::setDelegate(QQmlComponent *delegate)
98+{
99+ if (delegate != this->delegate()) {
100+ if (!m_delegateModel) {
101+ createDelegateModel();
102+ }
103+
104+ cleanupExistingItems();
105+
106+ m_delegateModel->setDelegate(delegate);
107+
108+ Q_EMIT delegateChanged();
109+ m_delegateValidated = false;
110+ polish();
111+ }
112+}
113+
114+qreal VerticalJournal::columnWidth() const
115+{
116+ return m_columnWidth;
117+}
118+
119+void VerticalJournal::setColumnWidth(qreal columnWidth)
120+{
121+ if (columnWidth != m_columnWidth) {
122+ m_columnWidth = columnWidth;
123+ Q_EMIT columnWidthChanged();
124+
125+ if (isComponentComplete()) {
126+ Q_FOREACH(const auto &column, m_columnVisibleItems) {
127+ Q_FOREACH(const ViewItem &item, column) {
128+ item.m_item->setWidth(columnWidth);
129+ }
130+ }
131+ relayout();
132+ }
133+ }
134+}
135+
136+qreal VerticalJournal::columnSpacing() const
137+{
138+ return m_columnSpacing;
139+}
140+
141+void VerticalJournal::setColumnSpacing(qreal columnSpacing)
142+{
143+ if (columnSpacing != m_columnSpacing) {
144+ m_columnSpacing = columnSpacing;
145+ Q_EMIT columnSpacingChanged();
146+
147+ if (isComponentComplete()) {
148+ relayout();
149+ }
150+ }
151+}
152+
153+qreal VerticalJournal::rowSpacing() const
154+{
155+ return m_rowSpacing;
156+}
157+
158+void VerticalJournal::setRowSpacing(qreal rowSpacing)
159+{
160+ if (rowSpacing != m_rowSpacing) {
161+ m_rowSpacing = rowSpacing;
162+ Q_EMIT rowSpacingChanged();
163+
164+ if (isComponentComplete()) {
165+ relayout();
166+ }
167+ }
168+}
169+
170+qreal VerticalJournal::delegateCreationBegin() const
171+{
172+ return m_delegateCreationBegin;
173+}
174+
175+void VerticalJournal::setDelegateCreationBegin(qreal begin)
176+{
177+ m_delegateCreationBeginValid = true;
178+ if (m_delegateCreationBegin == begin)
179+ return;
180+ m_delegateCreationBegin = begin;
181+ if (isComponentComplete()) {
182+ polish();
183+ }
184+ emit delegateCreationBeginChanged();
185+}
186+
187+void VerticalJournal::resetDelegateCreationBegin()
188+{
189+ m_delegateCreationBeginValid = false;
190+ if (m_delegateCreationBegin == 0)
191+ return;
192+ m_delegateCreationBegin = 0;
193+ if (isComponentComplete()) {
194+ polish();
195+ }
196+ emit delegateCreationBeginChanged();
197+}
198+
199+qreal VerticalJournal::delegateCreationEnd() const
200+{
201+ return m_delegateCreationEnd;
202+}
203+
204+void VerticalJournal::setDelegateCreationEnd(qreal end)
205+{
206+ m_delegateCreationEndValid = true;
207+ if (m_delegateCreationEnd == end)
208+ return;
209+ m_delegateCreationEnd = end;
210+ if (isComponentComplete()) {
211+ polish();
212+ }
213+ emit delegateCreationEndChanged();
214+}
215+
216+void VerticalJournal::resetDelegateCreationEnd()
217+{
218+ m_delegateCreationEndValid = false;
219+ if (m_delegateCreationEnd == 0)
220+ return;
221+ m_delegateCreationEnd = 0;
222+ if (isComponentComplete()) {
223+ polish();
224+ }
225+ emit delegateCreationEndChanged();
226+}
227+
228+void VerticalJournal::createDelegateModel()
229+{
230+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
231+ m_delegateModel = new QQuickVisualDataModel(qmlContext(this), this);
232+ connect(m_delegateModel, SIGNAL(createdItem(int,QQuickItem*)), this, SLOT(itemCreated(int,QQuickItem*)));
233+#else
234+ m_delegateModel = new QQmlDelegateModel(qmlContext(this), this);
235+ connect(m_delegateModel, SIGNAL(createdItem(int,QObject*)), this, SLOT(itemCreated(int,QObject*)));
236+#endif
237+ if (isComponentComplete())
238+ m_delegateModel->componentComplete();
239+}
240+
241+void VerticalJournal::refill()
242+{
243+ if (!isComponentComplete()) {
244+ return;
245+ }
246+
247+ const bool delegateRangesValid = m_delegateCreationBeginValid && m_delegateCreationEndValid;
248+ const qreal from = delegateRangesValid ? m_delegateCreationBegin : 0;
249+ const qreal to = delegateRangesValid ? m_delegateCreationEnd : from + height();
250+ const qreal buffer = (to - from) * bufferRatio;
251+ const qreal bufferFrom = from - buffer;
252+ const qreal bufferTo = to + buffer;
253+
254+ bool added = addVisibleItems(from, to, false);
255+ bool removed = removeNonVisibleItems(bufferFrom, bufferTo);
256+ added |= addVisibleItems(bufferFrom, bufferTo, true);
257+
258+ if (added || removed) {
259+ m_implicitHeightDirty = true;
260+ }
261+}
262+
263+void VerticalJournal::findBottomModelIndexToAdd(int *modelIndex, qreal *yPos)
264+{
265+ *modelIndex = 0;
266+ *yPos = std::numeric_limits<qreal>::max();
267+
268+ Q_FOREACH(const auto &column, m_columnVisibleItems) {
269+ if (!column.isEmpty()) {
270+ const ViewItem &item = column.last();
271+ *yPos = qMin(*yPos, item.y() + item.height() + m_rowSpacing);
272+ *modelIndex = qMax(*modelIndex, item.m_modelIndex + 1);
273+ } else {
274+ *yPos = 0;
275+ }
276+ }
277+}
278+
279+void VerticalJournal::findTopModelIndexToAdd(int *modelIndex, qreal *yPos)
280+{
281+ *modelIndex = INT_MAX;
282+ *yPos = std::numeric_limits<qreal>::lowest();
283+ int columnToAddTo = -1;
284+
285+ // Find the topmost free column
286+ for (int i = 0; i < m_columnVisibleItems.count(); ++i) {
287+ const auto &column = m_columnVisibleItems[i];
288+ if (!column.isEmpty()) {
289+ const ViewItem &item = column.first();
290+ const auto itemTopPos = item.y() - m_rowSpacing;
291+ if (itemTopPos > *yPos) {
292+ *yPos = itemTopPos;
293+ *modelIndex = item.m_modelIndex - 1;
294+ columnToAddTo = i;
295+ }
296+ }
297+ }
298+
299+ if (*modelIndex > 0) {
300+ Q_ASSERT(m_indexColumnMap.contains(*modelIndex));
301+ while (m_indexColumnMap[*modelIndex] != columnToAddTo) {
302+ // We found out that we have to add to columnToAddTo
303+ // and thought that we had to add *modelIndex, but history tells
304+ // it is not correct, so find up from *modelIndex until we found the index
305+ // that has to end up in columnToAddTo
306+ *modelIndex = *modelIndex - 1;
307+ Q_ASSERT(m_indexColumnMap.contains(*modelIndex));
308+ }
309+ }
310+}
311+
312+bool VerticalJournal::addVisibleItems(qreal fillFrom, qreal fillTo, bool asynchronous)
313+{
314+ if (!delegate())
315+ return false;
316+
317+ if (m_delegateModel->count() == 0)
318+ return false;
319+
320+ int modelIndex;
321+ qreal yPos;
322+ findBottomModelIndexToAdd(&modelIndex, &yPos);
323+ bool changed = false;
324+ while (modelIndex < m_delegateModel->count() && yPos <= fillTo) {
325+ if (!createItem(modelIndex, asynchronous))
326+ break;
327+
328+ changed = true;
329+ findBottomModelIndexToAdd(&modelIndex, &yPos);
330+ }
331+
332+ findTopModelIndexToAdd(&modelIndex, &yPos);
333+ while (modelIndex >= 0 && yPos > fillFrom) {
334+ if (!createItem(modelIndex, asynchronous))
335+ break;
336+
337+ changed = true;
338+ findTopModelIndexToAdd(&modelIndex, &yPos);
339+ }
340+
341+ return changed;
342+}
343+
344+bool VerticalJournal::removeNonVisibleItems(qreal bufferFrom, qreal bufferTo)
345+{
346+ bool changed = false;
347+
348+ for (int i = 0; i < m_columnVisibleItems.count(); ++i) {
349+ QList<ViewItem> &column = m_columnVisibleItems[i];
350+ while (!column.isEmpty() && column.first().y() + column.first().height() < bufferFrom) {
351+ releaseItem(column.takeFirst());
352+ changed = true;
353+ }
354+
355+ while (!column.isEmpty() && column.last().y() > bufferTo) {
356+ releaseItem(column.takeLast());
357+ changed = true;
358+ }
359+ }
360+
361+ return changed;
362+}
363+
364+QQuickItem *VerticalJournal::createItem(int modelIndex, bool asynchronous)
365+{
366+ if (asynchronous && m_asyncRequestedIndex != -1)
367+ return nullptr;
368+
369+ m_asyncRequestedIndex = -1;
370+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
371+ QQuickItem *item = m_delegateModel->item(modelIndex, asynchronous);
372+#else
373+ QObject* object = m_delegateModel->object(modelIndex, asynchronous);
374+ QQuickItem *item = qmlobject_cast<QQuickItem*>(object);
375+#endif
376+ if (!item) {
377+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
378+ m_asyncRequestedIndex = modelIndex;
379+#else
380+ if (object) {
381+ m_delegateModel->release(object);
382+ if (!m_delegateValidated) {
383+ m_delegateValidated = true;
384+ QObject* delegateObj = delegate();
385+ qmlInfo(delegateObj ? delegateObj : this) << "Delegate must be of Item type";
386+ }
387+ } else {
388+ m_asyncRequestedIndex = modelIndex;
389+ }
390+#endif
391+ return nullptr;
392+ } else {
393+ if (item->width() != m_columnWidth) {
394+ qWarning() << "Item" << modelIndex << "width is not the one that the columnWidth mandates, resetting it";
395+ item->setWidth(m_columnWidth);
396+ }
397+ positionItem(modelIndex, item);
398+ return item;
399+ }
400+}
401+
402+void VerticalJournal::positionItem(int modelIndex, QQuickItem *item)
403+{
404+ // Check if we add it to the bottom of existing column items
405+ const QList<ViewItem> &firstColumn = m_columnVisibleItems[0];
406+ qreal columnToAddY = !firstColumn.isEmpty() ? firstColumn.last().y() + firstColumn.last().height() : -m_rowSpacing;
407+ int columnToAddTo = 0;
408+ for (int i = 1; i < m_columnVisibleItems.count(); ++i) {
409+ const QList<ViewItem> &column = m_columnVisibleItems[i];
410+ const qreal iY = !column.isEmpty() ? column.last().y() + column.last().height() : -m_rowSpacing;
411+ if (iY < columnToAddY) {
412+ columnToAddTo = i;
413+ columnToAddY = iY;
414+ }
415+ }
416+
417+ const QList<ViewItem> &columnToAdd = m_columnVisibleItems[columnToAddTo];
418+ if (columnToAdd.isEmpty() || columnToAdd.last().m_modelIndex < modelIndex) {
419+ item->setX(columnToAddTo * (m_columnWidth + m_columnSpacing));
420+ item->setY(columnToAddY + m_rowSpacing);
421+
422+ m_columnVisibleItems[columnToAddTo] << ViewItem(item, modelIndex);
423+ m_indexColumnMap[modelIndex] = columnToAddTo;
424+ } else {
425+ Q_ASSERT(m_indexColumnMap.contains(modelIndex));
426+ columnToAddTo = m_indexColumnMap[modelIndex];
427+ columnToAddY = m_columnVisibleItems[columnToAddTo].first().y();
428+
429+ item->setX(columnToAddTo * (m_columnWidth + m_columnSpacing));
430+ item->setY(columnToAddY - m_rowSpacing - item->height());
431+
432+ m_columnVisibleItems[columnToAddTo].prepend(ViewItem(item, modelIndex));
433+ }
434+}
435+
436+void VerticalJournal::cleanupExistingItems()
437+{
438+ // Cleanup the existing items
439+ for (int i = 0; i < m_columnVisibleItems.count(); ++i) {
440+ QList<ViewItem> &column = m_columnVisibleItems[i];
441+ Q_FOREACH(const ViewItem &item, column)
442+ releaseItem(item);
443+ column.clear();
444+ }
445+ m_indexColumnMap.clear();
446+}
447+
448+void VerticalJournal::releaseItem(const ViewItem &item)
449+{
450+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
451+ QQuickVisualModel::ReleaseFlags flags = m_delegateModel->release(item.m_item);
452+ if (flags & QQuickVisualModel::Destroyed) {
453+#else
454+ QQmlDelegateModel::ReleaseFlags flags = m_delegateModel->release(item.m_item);
455+ if (flags & QQmlDelegateModel::Destroyed) {
456+#endif
457+ item.m_item->setParentItem(nullptr);
458+ }
459+}
460+
461+void VerticalJournal::calculateImplicitHeight()
462+{
463+ m_implicitHeightDirty = false;
464+
465+ int lastModelIndex = -1;
466+ qreal bottomMostY = 0;
467+ Q_FOREACH(const auto &column, m_columnVisibleItems) {
468+ if (!column.isEmpty()) {
469+ const ViewItem &item = column.last();
470+ lastModelIndex = qMax(lastModelIndex, item.m_modelIndex);
471+ bottomMostY = qMax(bottomMostY, item.y() + item.height());
472+ }
473+ }
474+ if (lastModelIndex >= 0) {
475+ const double averageHeight = bottomMostY / (lastModelIndex + 1);
476+ setImplicitHeight(bottomMostY + averageHeight * (model()->rowCount() - lastModelIndex - 1));
477+ } else {
478+ setImplicitHeight(0);
479+ }
480+}
481+
482+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
483+void VerticalJournal::itemCreated(int modelIndex, QQuickItem *item)
484+{
485+#else
486+void VerticalJournal::itemCreated(int modelIndex, QObject *object)
487+{
488+ QQuickItem *item = qmlobject_cast<QQuickItem*>(object);
489+ if (!item) {
490+ qWarning() << "VerticalJournal::itemCreated got a non item for index" << modelIndex;
491+ return;
492+ }
493+#endif
494+ item->setParentItem(this);
495+ if (modelIndex == m_asyncRequestedIndex) {
496+ createItem(modelIndex, false);
497+ m_implicitHeightDirty = true;
498+ polish();
499+ }
500+}
501+
502+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
503+void VerticalJournal::onModelUpdated(const QQuickChangeSet &changeSet, bool reset)
504+#else
505+void VerticalJournal::onModelUpdated(const QQmlChangeSet &changeSet, bool reset)
506+#endif
507+{
508+ if (reset) {
509+ cleanupExistingItems();
510+ } else {
511+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
512+ Q_FOREACH(const QQuickChangeSet::Remove &remove, changeSet.removes()) {
513+#else
514+ Q_FOREACH(const QQmlChangeSet::Remove &remove, changeSet.removes()) {
515+#endif
516+ for (int i = remove.count - 1; i >= 0; --i) {
517+ const int indexToRemove = remove.index + i;
518+ // Since we only support removing from the end, indexToRemove
519+ // must refer to the last item of one of the columns.
520+ bool found = false;
521+ for (int i = 0; !found && i < m_columnVisibleItems.count(); ++i) {
522+ QList<ViewItem> &column = m_columnVisibleItems[i];
523+ if (!column.isEmpty() && column.last().m_modelIndex == indexToRemove) {
524+ releaseItem(column.takeLast());
525+ found = true;
526+ }
527+ }
528+ Q_ASSERT(found);
529+ }
530+ }
531+ }
532+ polish();
533+}
534+
535+
536+void VerticalJournal::relayout()
537+{
538+ m_needsRelayout = true;
539+ polish();
540+}
541+
542+void VerticalJournal::onHeightChanged()
543+{
544+ polish();
545+}
546+
547+void VerticalJournal::updatePolish()
548+{
549+ if (!model())
550+ return;
551+
552+ if (m_needsRelayout) {
553+ m_implicitHeightDirty = true;
554+
555+ QList<ViewItem> allItems;
556+ Q_FOREACH(const auto &column, m_columnVisibleItems)
557+ allItems << column;
558+
559+ qSort(allItems);
560+
561+ const int nColumns = qMax(1., floor((double)(width() + m_columnSpacing) / (m_columnWidth + m_columnSpacing)));
562+ m_columnVisibleItems.resize(nColumns);
563+ m_indexColumnMap.clear();
564+ for (int i = 0; i < nColumns; ++i)
565+ m_columnVisibleItems[i].clear();
566+
567+ // If the first of allItems doesn't contain index 0 we need to drop them
568+ // all since we can't consistently relayout without the first item being there
569+
570+ if (!allItems.isEmpty()) {
571+ if (allItems.first().m_modelIndex == 0) {
572+ Q_FOREACH(const ViewItem &item, allItems)
573+ positionItem(item.m_modelIndex, item.m_item);
574+ } else {
575+ Q_FOREACH(const ViewItem &item, allItems)
576+ releaseItem(item);
577+ }
578+ }
579+
580+ m_needsRelayout = false;
581+ }
582+
583+ refill();
584+
585+ const bool delegateRangesValid = m_delegateCreationBeginValid && m_delegateCreationEndValid;
586+ const qreal from = delegateRangesValid ? m_delegateCreationBegin : 0;
587+ const qreal to = delegateRangesValid ? m_delegateCreationEnd : from + height();
588+ Q_FOREACH(const auto &column, m_columnVisibleItems) {
589+ Q_FOREACH(const ViewItem &item, column) {
590+ QQuickItemPrivate::get(item.m_item)->setCulled(item.y() + item.height() <= from || item.y() >= to);
591+ }
592+ }
593+
594+ if (m_implicitHeightDirty) {
595+ calculateImplicitHeight();
596+ }
597+}
598+
599+void VerticalJournal::componentComplete()
600+{
601+ if (m_delegateModel)
602+ m_delegateModel->componentComplete();
603+
604+ QQuickItem::componentComplete();
605+
606+ m_needsRelayout = true;
607+
608+ polish();
609+}
plugins/DashViews/verticaljournal.hnew file+182
@@ -0,0 +1,182 @@
1+/*
2+ * Copyright (C) 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 General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef VERTICALJOURNAL_H
18+#define VERTICALJOURNAL_H
19+
20+#include <QQuickItem>
21+
22+class QAbstractItemModel;
23+class QQmlComponent;
24+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
25+class QQuickChangeSet;
26+class QQuickVisualDataModel;
27+#else
28+class QQmlChangeSet;
29+class QQmlDelegateModel;
30+#endif
31+
32+ /** A vertical journal is a view that creates delegates
33+ * based on a model and layouts them in columns following
34+ * a top-left most position rule.
35+ *
36+ * The number of columns is calculated using the width of
37+ * the view itself, the columnWidth (i.e. the width of each individual delegate)
38+ * and the columnSpacing between columns.
39+ *
40+ * All delegates are forced to columnWidth if they don't have it.
41+ *
42+ * The first nColumns items are layouted at row 0 from column 0
43+ * to column nColumns-1 in order. After that every new item
44+ * is positioned in the column which provides the free topmost
45+ * position as possible. If more than one column tie in providing
46+ * the topmost free position the leftmost column will be used.
47+ *
48+ * Example:
49+ *
50+ * +-----+ +-----+ +-----+
51+ * | | | 2 | | |
52+ * | | | | | |
53+ * | 1 | +-----+ | 3 |
54+ * | | +-----+ | |
55+ * | | | | +-----+
56+ * +-----+ | 4 | +-----+
57+ * +-----+ | | | 5 |
58+ * | 6 | +-----+ | |
59+ * | | +-----+
60+ * +-----+
61+ *
62+ */
63+ class VerticalJournal : public QQuickItem
64+{
65+ Q_OBJECT
66+
67+ Q_PROPERTY(QAbstractItemModel *model READ model WRITE setModel NOTIFY modelChanged)
68+ Q_PROPERTY(QQmlComponent *delegate READ delegate WRITE setDelegate NOTIFY delegateChanged)
69+ Q_PROPERTY(qreal columnWidth READ columnWidth WRITE setColumnWidth NOTIFY columnWidthChanged)
70+ Q_PROPERTY(qreal columnSpacing READ columnSpacing WRITE setColumnSpacing NOTIFY columnSpacingChanged)
71+ Q_PROPERTY(qreal rowSpacing READ rowSpacing WRITE setRowSpacing NOTIFY rowSpacingChanged)
72+ Q_PROPERTY(qreal delegateCreationBegin READ delegateCreationBegin
73+ WRITE setDelegateCreationBegin
74+ NOTIFY delegateCreationBeginChanged
75+ RESET resetDelegateCreationBegin)
76+ Q_PROPERTY(qreal delegateCreationEnd READ delegateCreationEnd
77+ WRITE setDelegateCreationEnd
78+ NOTIFY delegateCreationEndChanged
79+ RESET resetDelegateCreationEnd)
80+
81+friend class VerticalJournalTest;
82+
83+public:
84+ VerticalJournal();
85+
86+ QAbstractItemModel *model() const;
87+ void setModel(QAbstractItemModel *model);
88+
89+ QQmlComponent *delegate() const;
90+ void setDelegate(QQmlComponent *delegate);
91+
92+ qreal columnWidth() const;
93+ void setColumnWidth(qreal columnWidth);
94+
95+ qreal columnSpacing() const;
96+ void setColumnSpacing(qreal columnSpacing);
97+
98+ qreal rowSpacing() const;
99+ void setRowSpacing(qreal rowSpacing);
100+
101+ qreal delegateCreationBegin() const;
102+ void setDelegateCreationBegin(qreal);
103+ void resetDelegateCreationBegin();
104+
105+ qreal delegateCreationEnd() const;
106+ void setDelegateCreationEnd(qreal);
107+ void resetDelegateCreationEnd();
108+
109+Q_SIGNALS:
110+ void modelChanged();
111+ void delegateChanged();
112+ void columnWidthChanged();
113+ void columnSpacingChanged();
114+ void rowSpacingChanged();
115+ void delegateCreationBeginChanged();
116+ void delegateCreationEndChanged();
117+
118+protected:
119+ void updatePolish();
120+ void componentComplete();
121+
122+private Q_SLOTS:
123+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
124+ void itemCreated(int modelIndex, QQuickItem *item);
125+ void onModelUpdated(const QQuickChangeSet &changeSet, bool reset);
126+#else
127+ void itemCreated(int modelIndex, QObject *object);
128+ void onModelUpdated(const QQmlChangeSet &changeSet, bool reset);
129+#endif
130+ void relayout();
131+ void onHeightChanged();
132+
133+private:
134+ class ViewItem
135+ {
136+ public:
137+ ViewItem(QQuickItem *item, int modelIndex) : m_item(item), m_modelIndex(modelIndex) {}
138+ qreal x() const { return m_item->x(); }
139+ qreal y() const { return m_item->y(); }
140+ qreal height() const { return m_item->height(); }
141+ bool operator<(const ViewItem &v) const { return m_modelIndex < v.m_modelIndex; }
142+
143+ QQuickItem *m_item;
144+ int m_modelIndex;
145+ };
146+
147+ void createDelegateModel();
148+ void refill();
149+ void findBottomModelIndexToAdd(int *modelIndex, qreal *yPos);
150+ void findTopModelIndexToAdd(int *modelIndex, qreal *yPos);
151+ bool addVisibleItems(qreal fillFrom, qreal fillTo, bool asynchronous);
152+ bool removeNonVisibleItems(qreal bufferFrom, qreal bufferTo);
153+ QQuickItem *createItem(int modelIndex, bool asynchronous);
154+ void positionItem(int modelIndex, QQuickItem *item);
155+ void cleanupExistingItems();
156+ void releaseItem(const ViewItem &item);
157+ void calculateImplicitHeight();
158+
159+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
160+ QQuickVisualDataModel *m_delegateModel;
161+#else
162+ QQmlDelegateModel *m_delegateModel;
163+#endif
164+
165+ // Index we are waiting because we requested it asynchronously
166+ int m_asyncRequestedIndex;
167+
168+ QVector<QList<ViewItem>> m_columnVisibleItems;
169+ QHash<int, int> m_indexColumnMap;
170+ int m_columnWidth;
171+ int m_columnSpacing;
172+ int m_rowSpacing;
173+ qreal m_delegateCreationBegin;
174+ qreal m_delegateCreationEnd;
175+ bool m_delegateCreationBeginValid;
176+ bool m_delegateCreationEndValid;
177+ bool m_needsRelayout;
178+ bool m_delegateValidated;
179+ bool m_implicitHeightDirty;
180+};
181+
182+#endif
plugins/HudClient/hudclient.cpp+1−16
@@ -243,28 +243,13 @@ void HudClient::modelReady(bool needDisconnect)
243 }
243 }
244}
244}
245
245
246−static QVariant QVariantFromGVariant(GVariant *value)
247−{
248− // Only handle the cases we care for now
249− switch (g_variant_classify(value)) {
250− case G_VARIANT_CLASS_BOOLEAN:
251− return QVariant((bool) g_variant_get_boolean(value));
252− case G_VARIANT_CLASS_DOUBLE:
253− return QVariant(g_variant_get_double(value));
254− case G_VARIANT_CLASS_STRING:
255− return QVariant(QString::fromUtf8(g_variant_get_string(value, NULL)));
256− default:
257− return QVariant();
258− }
259−}
260−
261static void addAttribute(QVariantMap &properties, GMenuModel *menuModel, int item, const char *attribute) {
246static void addAttribute(QVariantMap &properties, GMenuModel *menuModel, int item, const char *attribute) {
262 GVariant *v = g_menu_model_get_item_attribute_value(menuModel, item, attribute, NULL);
247 GVariant *v = g_menu_model_get_item_attribute_value(menuModel, item, attribute, NULL);
263
248
264 if (v == NULL)
249 if (v == NULL)
265 return;
250 return;
266
251
267− properties.insert(attribute, QVariantFromGVariant(v));
252+ properties.insert(attribute, DeeListModel::VariantForData(v));
268 g_variant_unref(v);
253 g_variant_unref(v);
269}
254}
270
255
plugins/LightDM/CMakeLists.txt+3−1
@@ -10,6 +10,7 @@ pkg_check_modules(LIBUSERMETRICSOUTPUT REQUIRED libusermetricsoutput-1)
10include_directories(
10include_directories(
11 ${CMAKE_CURRENT_SOURCE_DIR}
11 ${CMAKE_CURRENT_SOURCE_DIR}
12 ${CMAKE_CURRENT_BINARY_DIR}
12 ${CMAKE_CURRENT_BINARY_DIR}
13+ ${CMAKE_SOURCE_DIR}/plugins/Utils
13 ${CMAKE_SOURCE_DIR}/tests/mocks/LightDM
14 ${CMAKE_SOURCE_DIR}/tests/mocks/LightDM
14 #${LIBLIGHTDM_INCLUDE_DIRS}
15 #${LIBLIGHTDM_INCLUDE_DIRS}
15 ${LIBUSERMETRICSOUTPUT_INCLUDE_DIRS}
16 ${LIBUSERMETRICSOUTPUT_INCLUDE_DIRS}
@@ -17,6 +18,7 @@ include_directories(
17
18
18set(QMLPLUGIN_SRC
19set(QMLPLUGIN_SRC
19 ../Utils/qsortfilterproxymodelqml.cpp # FIXME evaluate a more generic approach for using other plugins
20 ../Utils/qsortfilterproxymodelqml.cpp # FIXME evaluate a more generic approach for using other plugins
21+ DBusGreeterList.cpp
20 Greeter.cpp
22 Greeter.cpp
21 plugin.cpp
23 plugin.cpp
22 UsersModel.cpp
24 UsersModel.cpp
@@ -33,7 +35,7 @@ target_link_libraries(LightDM-qml
33 ${LIBUSERMETRICSOUTPUT_LDFLAGS}
35 ${LIBUSERMETRICSOUTPUT_LDFLAGS}
34 )
36 )
35
37
36−qt5_use_modules(LightDM-qml Gui Qml)
38+qt5_use_modules(LightDM-qml DBus Gui Qml)
37
39
38# export the qmldir qmltypes and plugin files
40# export the qmldir qmltypes and plugin files
39export_qmlfiles(LightDM LightDM)
41export_qmlfiles(LightDM LightDM)
plugins/LightDM/DBusGreeterList.cppnew file+77
@@ -0,0 +1,77 @@
1+/*
2+ * Copyright (C) 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 General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "DBusGreeterList.h"
18+#include "Greeter.h"
19+
20+#include <QDBusMessage>
21+#include <QStringList>
22+
23+DBusGreeterList::DBusGreeterList(Greeter *greeter, const QDBusConnection &connection, const QString &path)
24+ : QObject(greeter),
25+ m_greeter(greeter),
26+ m_connection(connection),
27+ m_path(path)
28+{
29+ connect(m_greeter, SIGNAL(authenticationUserChanged(const QString &)), this, SLOT(authenticationUserChangedHandler(const QString &)));
30+ connect(m_greeter, SIGNAL(promptlessChanged()), this, SLOT(promptlessChangedHandler()));
31+}
32+
33+QString DBusGreeterList::GetActiveEntry() const
34+{
35+ return m_greeter->authenticationUser();
36+}
37+
38+void DBusGreeterList::SetActiveEntry(const QString &entry)
39+{
40+ Q_EMIT m_greeter->requestAuthenticationUser(entry);
41+}
42+
43+bool DBusGreeterList::entryIsLocked() const
44+{
45+ return !m_greeter->promptless();
46+}
47+
48+void DBusGreeterList::authenticationUserChangedHandler(const QString &user)
49+{
50+ notifyPropertyChanged("ActiveEntry", user);
51+ Q_EMIT EntrySelected(user);
52+}
53+
54+void DBusGreeterList::promptlessChangedHandler()
55+{
56+ notifyPropertyChanged("EntryIsLocked", entryIsLocked());
57+ Q_EMIT entryIsLockedChanged();
58+}
59+
60+// Manually emit a PropertiesChanged signal over DBus, because QtDBus
61+// doesn't do it for us on Q_PROPERTIES, oddly enough.
62+void DBusGreeterList::notifyPropertyChanged(const QString& propertyName, const QVariant &value)
63+{
64+ QDBusMessage message;
65+ QVariantMap changedProps;
66+
67+ changedProps.insert(propertyName, value);
68+
69+ message = QDBusMessage::createSignal(m_path,
70+ "org.freedesktop.DBus.Properties",
71+ "PropertiesChanged");
72+ message << "com.canonical.UnityGreeter.List";
73+ message << changedProps;
74+ message << QStringList();
75+
76+ m_connection.send(message);
77+}
plugins/LightDM/DBusGreeterList.hnew file+61
@@ -0,0 +1,61 @@
1+/*
2+ * Copyright (C) 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 General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef UNITY_DBUSGREETERLIST_H
18+#define UNITY_DBUSGREETERLIST_H
19+
20+#include <QDBusConnection>
21+#include <QObject>
22+
23+class Greeter;
24+class QDBusInterface;
25+
26+/** This is an internal class used to talk with the indicators.
27+ */
28+
29+class DBusGreeterList : public QObject
30+{
31+ Q_OBJECT
32+ Q_CLASSINFO("D-Bus Interface", "com.canonical.UnityGreeter.List")
33+
34+ Q_PROPERTY(QString ActiveEntry READ GetActiveEntry WRITE SetActiveEntry NOTIFY EntrySelected) // since 14.04
35+ Q_PROPERTY(bool EntryIsLocked READ entryIsLocked NOTIFY entryIsLockedChanged) // since 14.04
36+
37+public:
38+ explicit DBusGreeterList(Greeter *greeter, const QDBusConnection &connection, const QString &path);
39+
40+ Q_SCRIPTABLE void SetActiveEntry(const QString &entry); // since 13.04
41+ Q_SCRIPTABLE QString GetActiveEntry() const; // since 13.10
42+
43+ bool entryIsLocked() const;
44+
45+Q_SIGNALS:
46+ Q_SCRIPTABLE void EntrySelected(const QString &entry); // since 13.10
47+
48+ void entryIsLockedChanged();
49+
50+private Q_SLOTS:
51+ void authenticationUserChangedHandler(const QString &user);
52+ void promptlessChangedHandler();
53+ void notifyPropertyChanged(const QString &propertyName, const QVariant &value);
54+
55+private:
56+ Greeter *m_greeter;
57+ QDBusConnection m_connection;
58+ QString m_path;
59+};
60+
61+#endif
plugins/LightDM/Greeter.cpp+1
@@ -88,6 +88,7 @@ void Greeter::authenticate(const QString &username)
88 }
88 }
89
89
90 d->m_greeter->authenticate(username);
90 d->m_greeter->authenticate(username);
91+ Q_EMIT authenticationUserChanged(username);
91}
92}
92
93
93void Greeter::respond(const QString &response)
94void Greeter::respond(const QString &response)
plugins/LightDM/Greeter.h+6−1
@@ -35,7 +35,7 @@ class Greeter : public QObject
35 Q_OBJECT
35 Q_OBJECT
36
36
37 Q_PROPERTY(bool authenticated READ isAuthenticated)
37 Q_PROPERTY(bool authenticated READ isAuthenticated)
38− Q_PROPERTY(QString authenticationUser READ authenticationUser)
38+ Q_PROPERTY(QString authenticationUser READ authenticationUser NOTIFY authenticationUserChanged)
39 Q_PROPERTY(bool promptless READ promptless NOTIFY promptlessChanged)
39 Q_PROPERTY(bool promptless READ promptless NOTIFY promptlessChanged)
40
40
41public:
41public:
@@ -54,8 +54,13 @@ Q_SIGNALS:
54 void showMessage(const QString &text, bool isError);
54 void showMessage(const QString &text, bool isError);
55 void showPrompt(const QString &text, bool isSecret);
55 void showPrompt(const QString &text, bool isSecret);
56 void authenticationComplete();
56 void authenticationComplete();
57+ void authenticationUserChanged(const QString &user);
57 void promptlessChanged();
58 void promptlessChanged();
58
59
60+ // This signal is emitted by external agents like indicators, and the UI
61+ // should switch to this user if possible.
62+ void requestAuthenticationUser(const QString &user);
63+
59private:
64private:
60 GreeterPrivate * const d_ptr;
65 GreeterPrivate * const d_ptr;
61
66
plugins/LightDM/UsersModel.h+1−1
@@ -23,7 +23,7 @@
23#ifndef UNITY_USERSMODEL_H
23#ifndef UNITY_USERSMODEL_H
24#define UNITY_USERSMODEL_H
24#define UNITY_USERSMODEL_H
25
25
26−#include "plugins/Utils/qsortfilterproxymodelqml.h"
26+#include <qsortfilterproxymodelqml.h>
27#include <QtCore/QObject>
27#include <QtCore/QObject>
28
28
29class UsersModel : public QSortFilterProxyModelQML
29class UsersModel : public QSortFilterProxyModelQML
plugins/LightDM/plugin.cpp+14−2
@@ -18,20 +18,32 @@
18 */
18 */
19
19
20#include "plugin.h"
20#include "plugin.h"
21+#include "DBusGreeterList.h"
21#include "Greeter.h"
22#include "Greeter.h"
22#include "UsersModel.h"
23#include "UsersModel.h"
23#include <libusermetricsoutput/ColorTheme.h>
24#include <libusermetricsoutput/ColorTheme.h>
24#include <libusermetricsoutput/UserMetrics.h>
25#include <libusermetricsoutput/UserMetrics.h>
25#include <QLightDM/UsersModel>
26#include <QLightDM/UsersModel>
26
27
27−#include <QtCore/QAbstractItemModel>
28+#include <QAbstractItemModel>
29+#include <QDBusConnection>
28#include <QtQml/qqml.h>
30#include <QtQml/qqml.h>
29
31
32+static const char* GREETER_LIST_DBUS_PATH = "/list";
33+static const char* GREETER_DBUS_SERVICE = "com.canonical.UnityGreeter";
34+
30static QObject *greeter_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
35static QObject *greeter_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
31{
36{
32 Q_UNUSED(engine)
37 Q_UNUSED(engine)
33 Q_UNUSED(scriptEngine)
38 Q_UNUSED(scriptEngine)
39+
40+ Greeter *greeter = new Greeter();
41+ QDBusConnection connection = QDBusConnection::sessionBus();
42+ DBusGreeterList *list = new DBusGreeterList(greeter, connection, GREETER_LIST_DBUS_PATH);
43+ connection.registerObject(GREETER_LIST_DBUS_PATH, list, QDBusConnection::ExportScriptableContents);
44+ connection.registerService(GREETER_DBUS_SERVICE);
45+
34− return new Greeter();
46+ return greeter;
35}
47}
36
48
37static QObject *users_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
49static QObject *users_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
plugins/ListViewWithPageHeader/qmldirdeleted−3
@@ -1,3 +0,0 @@
1−module ListViewWithPageHeader
2−plugin ListViewWithPageHeader-qml
3−typeinfo plugin.qmltypes
plugins/Ubuntu/Gestures/CMakeLists.txt+1
@@ -6,6 +6,7 @@ set(UbuntuGestureQml_SOURCES
6 AxisVelocityCalculator.cpp
6 AxisVelocityCalculator.cpp
7 Direction.cpp
7 Direction.cpp
8 DirectionalDragArea.cpp
8 DirectionalDragArea.cpp
9+ PressedOutsideNotifier.cpp
9 TimeSource.cpp
10 TimeSource.cpp
10)
11)
11
12
plugins/Ubuntu/Gestures/PressedOutsideNotifier.cppnew file+119
@@ -0,0 +1,119 @@
1+/*
2+ * Copyright (C) 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 General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "PressedOutsideNotifier.h"
18+
19+#include <QMouseEvent>
20+
21+PressedOutsideNotifier::PressedOutsideNotifier(QQuickItem *parent)
22+ : QQuickItem(parent)
23+{
24+ connect(this, &QQuickItem::enabledChanged,
25+ this, &PressedOutsideNotifier::setupOrTearDownEventFiltering);
26+
27+ m_signalEmissionTimer.setSingleShot(true);
28+ m_signalEmissionTimer.setInterval(0); // times out on the next iteration of the event loop
29+ connect(&m_signalEmissionTimer, &QTimer::timeout,
30+ this, &PressedOutsideNotifier::pressedOutside);
31+}
32+
33+bool PressedOutsideNotifier::eventFilter(QObject *watched, QEvent *event)
34+{
35+ Q_UNUSED(watched);
36+ Q_ASSERT(watched == m_filteredWindow);
37+
38+ // We are already going to emit pressedOutside() anyway, thus no need
39+ // for new checks.
40+ // This case takes place when a QTouchEvent comes in and isn't handled by any item,
41+ // causing QQuickWindow to synthesize a QMouseEvent out of it, which would
42+ // be filtered by us as well and count as a second press, which is wrong.
43+ if (m_signalEmissionTimer.isActive()) {
44+ return false;
45+ }
46+
47+ switch (event->type()) {
48+ case QEvent::MouseButtonPress: {
49+ QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
50+ QPointF p = mapFromScene(mouseEvent->windowPos());
51+ if (!contains(p)) {
52+ m_signalEmissionTimer.start();
53+ }
54+ break;
55+ }
56+ case QEvent::TouchBegin:
57+ processFilteredTouchBegin(static_cast<QTouchEvent*>(event));
58+ default:
59+ break;
60+ }
61+
62+ // let the event be handled further
63+ return false;
64+}
65+
66+void PressedOutsideNotifier::itemChange(ItemChange change, const ItemChangeData &value)
67+{
68+ if (change == QQuickItem::ItemSceneChange) {
69+ setupOrTearDownEventFiltering();
70+ }
71+
72+ QQuickItem::itemChange(change, value);
73+}
74+
75+void PressedOutsideNotifier::setupOrTearDownEventFiltering()
76+{
77+ if (isEnabled() && window()) {
78+ setupEventFiltering();
79+ } else if (m_filteredWindow) {
80+ tearDownEventFiltering();
81+ }
82+}
83+
84+void PressedOutsideNotifier::setupEventFiltering()
85+{
86+ QQuickWindow *currentWindow = window();
87+ Q_ASSERT(currentWindow != nullptr);
88+
89+ if (currentWindow == m_filteredWindow)
90+ return;
91+
92+ if (m_filteredWindow) {
93+ m_filteredWindow->removeEventFilter(this);
94+ }
95+
96+ currentWindow->installEventFilter(this);
97+ m_filteredWindow = currentWindow;
98+}
99+
100+void PressedOutsideNotifier::tearDownEventFiltering()
101+{
102+ m_filteredWindow->removeEventFilter(this);
103+ m_filteredWindow.clear();
104+}
105+
106+void PressedOutsideNotifier::processFilteredTouchBegin(QTouchEvent *event)
107+{
108+ const QList<QTouchEvent::TouchPoint> &touchPoints = event->touchPoints();
109+ for (int i = 0; i < touchPoints.count(); ++i) {
110+ const QTouchEvent::TouchPoint &touchPoint = touchPoints.at(i);
111+ if (touchPoint.state() == Qt::TouchPointPressed) {
112+ QPointF p = mapFromScene(touchPoint.pos());
113+ if (!contains(p)) {
114+ m_signalEmissionTimer.start();
115+ return;
116+ }
117+ }
118+ }
119+}
plugins/Ubuntu/Gestures/PressedOutsideNotifier.hnew file+62
@@ -0,0 +1,62 @@
1+/*
2+ * Copyright (C) 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 General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef PRESSED_OUTSIDE_NOTIFIER_H
18+#define PRESSED_OUTSIDE_NOTIFIER_H
19+
20+#include <QQuickItem>
21+
22+#include <QQuickWindow>
23+#include <QPointer>
24+#include <QTimer>
25+
26+#include "UbuntuGesturesGlobal.h"
27+
28+/*
29+ Notifies when a point, mouse or touch, is pressed outside its area.
30+
31+ Only enable it while needed.
32+ */
33+class UBUNTUGESTURES_EXPORT PressedOutsideNotifier : public QQuickItem {
34+ Q_OBJECT
35+
36+public:
37+ PressedOutsideNotifier(QQuickItem * parent = nullptr);
38+
39+ // From QObject
40+ bool eventFilter(QObject *watched, QEvent *event) override;
41+
42+Q_SIGNALS:
43+ void pressedOutside();
44+
45+protected:
46+ void itemChange(ItemChange change, const ItemChangeData &value) override;
47+
48+private Q_SLOTS:
49+ void setupOrTearDownEventFiltering();
50+
51+private:
52+ void setupEventFiltering();
53+ void tearDownEventFiltering();
54+ void processFilteredTouchBegin(QTouchEvent *event);
55+
56+ QPointer<QQuickWindow> m_filteredWindow;
57+
58+ // Emits pressedOutside() signal on timeout
59+ QTimer m_signalEmissionTimer;
60+};
61+
62+#endif // PRESSED_OUTSIDE_NOTIFIER_H
plugins/Ubuntu/Gestures/plugin.cpp+2
@@ -18,6 +18,7 @@
18#include "AxisVelocityCalculator.h"
18#include "AxisVelocityCalculator.h"
19#include "Direction.h"
19#include "Direction.h"
20#include "DirectionalDragArea.h"
20#include "DirectionalDragArea.h"
21+#include "PressedOutsideNotifier.h"
21
22
22#include <qqml.h>
23#include <qqml.h>
23
24
@@ -32,4 +33,5 @@ void UbuntuGestureQmlPlugin::registerTypes(const char *uri)
32 qmlRegisterSingletonType<Direction>(uri, 0, 1, "Direction", directionSingleton);
33 qmlRegisterSingletonType<Direction>(uri, 0, 1, "Direction", directionSingleton);
33 qmlRegisterType<DirectionalDragArea>(uri, 0, 1, "DirectionalDragArea");
34 qmlRegisterType<DirectionalDragArea>(uri, 0, 1, "DirectionalDragArea");
34 qmlRegisterType<AxisVelocityCalculator>(uri, 0, 1, "AxisVelocityCalculator");
35 qmlRegisterType<AxisVelocityCalculator>(uri, 0, 1, "AxisVelocityCalculator");
36+ qmlRegisterType<PressedOutsideNotifier>(uri, 0, 1, "PressedOutsideNotifier");
35}
37}
plugins/Unity/Indicators/CMakeLists.txt−1
@@ -36,7 +36,6 @@ set(IndicatorsQML_SOURCES
36 unitymenumodelcache.cpp
36 unitymenumodelcache.cpp
37 unitymenumodelstack.cpp
37 unitymenumodelstack.cpp
38 visibleindicatorsmodel.cpp
38 visibleindicatorsmodel.cpp
39− timeformatter.cpp
40)
39)
41add_definitions(-DUNITYINDICATORS_LIBRARY)
40add_definitions(-DUNITYINDICATORS_LIBRARY)
42
41
plugins/Unity/Indicators/Messaging/qml/MessageMenuItemFactory.qml+85−60
@@ -24,124 +24,145 @@ import Unity.Indicators 0.1 as Indicators
24import QMenuModel 0.1 as QMenuModel
24import QMenuModel 0.1 as QMenuModel
25
25
26Indicators.BaseMenuItem {
26Indicators.BaseMenuItem {
27− id: menuItem
27+ id: messageFactoryItem
28− property var actionsDescription: menu ? menu.ext.xCanonicalMessageActions : undefined
28+ property var menuModel: null
29+ property QtObject menuData: null
30+ property int menuIndex: -1
29
31
30− implicitHeight: contents.status == Loader.Ready ? contents.item.implicitHeight : 0
32+ property var extendedData: menuData && menuData.ext || undefined
33+ property var actionsDescription: getExtendedProperty(extendedData, "xCanonicalMessageActions", undefined)
31
34
32− property var model: null
35+ onMenuModelChanged: {
36+ loadAttributes();
37+ }
38+ onMenuIndexChanged: {
39+ loadAttributes();
40+ }
33
41
34− Loader {
42+ function loadAttributes() {
35− id: contents
43+ if (!menuModel || menuIndex == undefined) return;
36− anchors.fill: parent
37
44
38− sourceComponent: loadMessage(actionsDescription);
45+ menuModel.loadExtendedAttributes(menuIndex, {'x-canonical-time': 'int64',
46+ 'x-canonical-text': 'string',
47+ 'x-canonical-message-actions': 'variant',
48+ 'icon': 'icon',
49+ 'x-canonical-app-icon': 'icon'});
50+ }
39
51
40− // Binding all properties for the item, to make sure that any change in the
52+ function getExtendedProperty(object, propertyName, defaultValue) {
41− // property will be propagated to the contents.item at any time
53+ if (object && object.hasOwnProperty(propertyName)) {
42− Binding {
54+ return object[propertyName];
43− target: contents.item
44− property: "menuSelected"
45− value: menuSelected
46− when: (contents.status == Loader.Ready)
47 }
55 }
56+ return defaultValue;
57+ }
48
58
49− Binding {
50− target: contents.item
51− property: "menu"
52− value: menu
53− when: (contents.status == Loader.Ready)
59+ implicitHeight: contents.status == Loader.Ready ? contents.item.implicitHeight : 0
54− }
55
60
56− Connections {
61+ Loader {
57− target: contents.item ? contents.item : null
62+ id: contents
58− onSelectMenu: selectMenu()
63+ anchors.fill: parent
59− onDeselectMenu: deselectMenu()
64+
60− }
65+ sourceComponent: loadMessage(actionsDescription);
61
66
62 Component {
67 Component {
63 id: simpleTextMessage
68 id: simpleTextMessage
64 SimpleTextMessage {
69 SimpleTextMessage {
65 // text
70 // text
66− title: menu && menu.label ? menu.label : ""
71+ title: menuData && menuData.label || ""
67− time: menu ? menu.ext.xCanonicalTime : 0
72+ time: getExtendedProperty(extendedData, "xCanonicalTime", 0)
68− message: menu && menu.ext.xCanonicalText ? menu.ext.xCanonicalText : ""
73+ message: getExtendedProperty(extendedData, "xCanonicalText", "")
69 // icons
74 // icons
70− avatar: menu && menu.ext.icon !== undefined ? menu.ext.icon : "qrc:/indicators/artwork/messaging/default_contact.png"
75+ avatar: getExtendedProperty(extendedData, "icon", "qrc:/indicators/artwork/messaging/default_contact.png")
71− appIcon: menu && menu.ext.xCanonicalAppIcon !== undefined ? menu.ext.xCanonicalAppIcon : "qrc:/indicators/artwork/messaging/default_app.svg"
76+ appIcon: getExtendedProperty(extendedData, "xCanonicalAppIcon", "qrc:/indicators/artwork/messaging/default_app.svg")
72
77
73 onActivateApp: {
78 onActivateApp: {
74− menuItem.model.activate(modelIndex, true);
79+ menuModel.activate(menuIndex, true);
80+ shell.hideIndicatorMenu(UbuntuAnimation.FastDuration);
75 }
81 }
76 onDismiss: {
82 onDismiss: {
77− menuItem.model.activate(modelIndex, false);
83+ menuModel.activate(menuIndex, false);
78 }
84 }
85+
86+ menuSelected: messageFactoryItem.menuSelected
87+ onSelectMenu: messageFactoryItem.selectMenu()
88+ onDeselectMenu: messageFactoryItem.deselectMenu()
79 }
89 }
80 }
90 }
81 Component {
91 Component {
82 id: textMessage
92 id: textMessage
83 TextMessage {
93 TextMessage {
94+ property var replyActionDescription: actionsDescription && actionsDescription.length > 0 ? actionsDescription[0] : undefined
95+
84 property var replyAction: QMenuModel.UnityMenuAction {
96 property var replyAction: QMenuModel.UnityMenuAction {
85− model: menuItem.model
97+ model: menuModel
86− index: modelIndex
98+ index: menuIndex
87− name: menu && actionsDescription[0].name ? actionsDescription[0].name : ""
99+ name: getExtendedProperty(replyActionDescription, "name", "")
88 }
100 }
89
101
90 // text
102 // text
91− title: menu && menu.label ? menu.label : ""
103+ title: menuData && menuData.label || ""
92− time: menu ? menu.ext.xCanonicalTime : 0
104+ time: getExtendedProperty(extendedData, "xCanonicalTime", 0)
93− message: menu && menu.ext.xCanonicalText ? menu.ext.xCanonicalText : ""
105+ message: getExtendedProperty(extendedData, "xCanonicalText", "")
94− replyButtonText: actionsDescription && actionsDescription[0].label ? actionsDescription[0].label : "Send"
106+ replyButtonText: getExtendedProperty(replyActionDescription, "label", "Send")
95 // icons
107 // icons
96− avatar: menu && menu.ext.icon !== undefined ? menu.ext.icon : "qrc:/indicators/artwork/messaging/default_contact.png"
108+ avatar: getExtendedProperty(extendedData, "icon", "qrc:/indicators/artwork/messaging/default_contact.png")
97− appIcon: menu && menu.ext.xCanonicalAppIcon !== undefined ? menu.ext.xCanonicalAppIcon : "qrc:/indicators/artwork/messaging/default_app.svg"
109+ appIcon: getExtendedProperty(extendedData, "xCanonicalAppIcon", "qrc:/indicators/artwork/messaging/default_app.svg")
98 // actions
110 // actions
99 replyEnabled: replyAction.valid && replyAction.enabled
111 replyEnabled: replyAction.valid && replyAction.enabled
100
112
101 onActivateApp: {
113 onActivateApp: {
102− menuItem.model.activate(modelIndex, true);
114+ menuModel.activate(menuIndex, true);
115+ shell.hideIndicatorMenu(UbuntuAnimation.FastDuration);
103 }
116 }
104 onDismiss: {
117 onDismiss: {
105− menuItem.model.activate(modelIndex, false);
118+ menuModel.activate(menuIndex, false);
106 }
119 }
107 onReply: {
120 onReply: {
108 replyAction.activate(value);
121 replyAction.activate(value);
109 }
122 }
123+
124+ menuSelected: messageFactoryItem.menuSelected
125+ onSelectMenu: messageFactoryItem.selectMenu()
126+ onDeselectMenu: messageFactoryItem.deselectMenu()
110 }
127 }
111 }
128 }
112 Component {
129 Component {
113 id: snapDecision
130 id: snapDecision
114 SnapDecision {
131 SnapDecision {
132+ property var activateActionDescription: actionsDescription && actionsDescription.length > 0 ? actionsDescription[0] : undefined
133+ property var replyActionDescription: actionsDescription && actionsDescription.length > 1 ? actionsDescription[1] : undefined
134+
115 property var activateAction: QMenuModel.UnityMenuAction {
135 property var activateAction: QMenuModel.UnityMenuAction {
116− model: menuItem.model
136+ model: menuModel
117− index: modelIndex
137+ index: menuIndex
118− name: menu && actionsDescription[0].name ? actionsDescription[0].name : ""
138+ name: getExtendedProperty(activateActionDescription, "name", "")
119 }
139 }
120 property var replyAction: QMenuModel.UnityMenuAction {
140 property var replyAction: QMenuModel.UnityMenuAction {
121− model: menuItem.model
141+ model: menuModel
122− index: modelIndex
142+ index: menuIndex
123− name: menu && actionsDescription[1].name ? actionsDescription[1].name : ""
143+ name: getExtendedProperty(replyActionDescription, "name", "")
124 }
144 }
125
145
126 // text
146 // text
127− title: menu && menu.label ? menu.label : ""
147+ title: menuData && menuData.label || ""
128− time: menu ? menu.ext.xCanonicalTime : ""
148+ time: getExtendedProperty(extendedData, "xCanonicalTime", 0)
129− message: menu && menu.ext.xCanonicalText ? menu.ext.xCanonicalText : ""
149+ message: getExtendedProperty(extendedData, "xCanonicalText", "")
130− actionButtonText: actionsDescription && actionsDescription[0].label ? actionsDescription[0].label : "Call back"
150+ actionButtonText: getExtendedProperty(activateActionDescription, "label", "Call back")
131− replyButtonText: actionsDescription && actionsDescription[1].label ? actionsDescription[1].label : "Send"
151+ replyButtonText: getExtendedProperty(replyActionDescription, "label", "Send")
132− replyMessages: actionsDescription && actionsDescription[1]["parameter-hint"] ? actionsDescription[1]["parameter-hint"] : ""
152+ replyMessages: getExtendedProperty(replyActionDescription, "parameter-hint", "")
133 // icons
153 // icons
134− avatar: menu && menu.ext.icon !== undefined ? menu.ext.icon : "qrc:/indicators/artwork/messaging/default_contact.png"
154+ avatar: getExtendedProperty(extendedData, "icon", "qrc:/indicators/artwork/messaging/default_contact.png")
135− appIcon: menu && menu.ext.xCanonicalAppIcon !== undefined ? menu.ext.xCanonicalAppIcon : "qrc:/indicators/artwork/messaging/default_app.svg"
155+ appIcon: getExtendedProperty(extendedData, "xCanonicalAppIcon", "qrc:/indicators/artwork/messaging/default_app.svg")
136 // actions
156 // actions
137 activateEnabled: activateAction.valid && activateAction.enabled
157 activateEnabled: activateAction.valid && activateAction.enabled
138 replyEnabled: replyAction.valid && replyAction.enabled
158 replyEnabled: replyAction.valid && replyAction.enabled
139
159
140 onActivateApp: {
160 onActivateApp: {
141− menuItem.model.activate(modelIndex, true);
161+ menuModel.activate(menuIndex, true);
162+ shell.hideIndicatorMenu(UbuntuAnimation.FastDuration);
142 }
163 }
143 onDismiss: {
164 onDismiss: {
144− menuItem.model.activate(modelIndex, false);
165+ menuModel.activate(menuIndex, false);
145 }
166 }
146 onActivate: {
167 onActivate: {
147 activateAction.activate();
168 activateAction.activate();
@@ -149,6 +170,10 @@ Indicators.BaseMenuItem {
149 onReply: {
170 onReply: {
150 replyAction.activate(value);
171 replyAction.activate(value);
151 }
172 }
173+
174+ menuSelected: messageFactoryItem.menuSelected
175+ onSelectMenu: messageFactoryItem.selectMenu()
176+ onDeselectMenu: messageFactoryItem.deselectMenu()
152 }
177 }
153 }
178 }
154 }
179 }
plugins/Unity/Indicators/Messaging/qml/SimpleTextMessage.qml+2−1
@@ -21,6 +21,7 @@
21import QtQuick 2.0
21import QtQuick 2.0
22import Ubuntu.Components 0.1
22import Ubuntu.Components 0.1
23import Unity.Indicators 0.1
23import Unity.Indicators 0.1
24+import Utils 0.1 as Utils
24
25
25HeroMessage {
26HeroMessage {
26 id: __heroMessage
27 id: __heroMessage
@@ -50,7 +51,7 @@ HeroMessage {
50 opacity: 0.0
51 opacity: 0.0
51 enabled: false
52 enabled: false
52
53
53− TimeFormatter {
54+ Utils.TimeFormatter {
54 id: timeFormatter
55 id: timeFormatter
55 time: __heroMessage.time
56 time: __heroMessage.time
56 format: "hh:mm - MMM dd"
57 format: "hh:mm - MMM dd"
plugins/Unity/Indicators/Messaging/qml/SnapDecision.qml+2−2
@@ -20,8 +20,8 @@
20
20
21import QtQuick 2.0
21import QtQuick 2.0
22import Ubuntu.Components 0.1
22import Ubuntu.Components 0.1
23−import Unity.Indicators 0.1 as Indicators
24import Unity.Indicators 0.1
23import Unity.Indicators 0.1
24+import Utils 0.1 as Utils
25
25
26HeroMessage {
26HeroMessage {
27 id: snapDecision
27 id: snapDecision
@@ -59,7 +59,7 @@ HeroMessage {
59 height: units.gu(4)
59 height: units.gu(4)
60 opacity: 0.0
60 opacity: 0.0
61
61
62− TimeFormatter {
62+ Utils.TimeFormatter {
63 id: timeFormatter
63 id: timeFormatter
64 time: snapDecision.time
64 time: snapDecision.time
65 format: "hh:mm - MMM dd"
65 format: "hh:mm - MMM dd"
plugins/Unity/Indicators/indicatorsmanager.cpp+1−1
@@ -24,7 +24,7 @@
24#include <upstart.h>
24#include <upstart.h>
25#include <nih/alloc.h>
25#include <nih/alloc.h>
26
26
27−#include "paths.h"
27+#include <paths.h>
28
28
29const QString profile = "phone";
29const QString profile = "phone";
30
30
plugins/Unity/Indicators/indicatorsmodel.cpp+4−3
@@ -21,7 +21,8 @@
21#include "indicatorsmanager.h"
21#include "indicatorsmanager.h"
22#include "indicator.h"
22#include "indicator.h"
23#include "indicators.h"
23#include "indicators.h"
24+
24−#include "paths.h"
25+#include <paths.h>
25
26
26#include <QQmlContext>
27#include <QQmlContext>
27#include <QQmlEngine>
28#include <QQmlEngine>
@@ -248,9 +249,9 @@ QVariant IndicatorsModel::data(const QModelIndex &index, int role) const
248 }
249 }
249 break;
250 break;
250 case IndicatorsModelRole::WidgetSource:
251 case IndicatorsModelRole::WidgetSource:
251− return shellAppDirectory()+"/Panel/Indicators/DefaultIndicatorWidget.qml";
252+ return qmlDirectory()+"/Panel/Indicators/DefaultIndicatorWidget.qml";
252 case IndicatorsModelRole::PageSource:
253 case IndicatorsModelRole::PageSource:
253− return shellAppDirectory()+"/Panel/Indicators/DefaultIndicatorPage.qml";
254+ return qmlDirectory()+"/Panel/Indicators/DefaultIndicatorPage.qml";
254 default:
255 default:
255 break;
256 break;
256 }
257 }
plugins/Unity/Indicators/plugin.cpp−2
@@ -33,7 +33,6 @@
33#include "unitymenumodelcache.h"
33#include "unitymenumodelcache.h"
34#include "unitymenumodelstack.h"
34#include "unitymenumodelstack.h"
35#include "visibleindicatorsmodel.h"
35#include "visibleindicatorsmodel.h"
36−#include "timeformatter.h"
37
36
38static QObject* menuModelCacheSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
37static QObject* menuModelCacheSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
39 Q_UNUSED(engine);
38 Q_UNUSED(engine);
@@ -52,7 +51,6 @@ void Indicators2Plugin::registerTypes(const char *uri)
52 qmlRegisterType<RootActionState>(uri, 0, 1, "RootActionState");
51 qmlRegisterType<RootActionState>(uri, 0, 1, "RootActionState");
53 qmlRegisterType<ModelPrinter>(uri, 0, 1, "ModelPrinter");
52 qmlRegisterType<ModelPrinter>(uri, 0, 1, "ModelPrinter");
54 qmlRegisterType<VisibleIndicatorsModel>(uri, 0, 1, "VisibleIndicatorsModel");
53 qmlRegisterType<VisibleIndicatorsModel>(uri, 0, 1, "VisibleIndicatorsModel");
55− qmlRegisterType<TimeFormatter>(uri, 0, 1, "TimeFormatter");
56
54
57 qmlRegisterSingletonType<UnityMenuModelCache>(uri, 0, 1, "UnityMenuModelCache", menuModelCacheSingleton);
55 qmlRegisterSingletonType<UnityMenuModelCache>(uri, 0, 1, "UnityMenuModelCache", menuModelCacheSingleton);
58
56
plugins/Unity/Indicators/qml/IndicatorPage.qml+18−4
@@ -140,12 +140,15 @@ IndicatorBase {
140
140
141 onLoaded: {
141 onLoaded: {
142 if (item.hasOwnProperty("menuSelected")) {
142 if (item.hasOwnProperty("menuSelected")) {
143− item.menuSelected = Qt.binding(function() { return mainMenu.selectedIndex == index; });
143+ item.menuSelected = mainMenu.selectedIndex == index;
144 item.selectMenu.connect(function() { mainMenu.selectedIndex = index; });
144 item.selectMenu.connect(function() { mainMenu.selectedIndex = index; });
145 item.deselectMenu.connect(function() { mainMenu.selectedIndex = -1; });
145 item.deselectMenu.connect(function() { mainMenu.selectedIndex = -1; });
146 }
146 }
147− if (item.hasOwnProperty("menu")) {
147+ if (item.hasOwnProperty("menuData")) {
148− item.menu = Qt.binding(function() { return model; });
148+ item.menuData = Qt.binding(function() { return model; });
149+ }
150+ if (item.hasOwnProperty("menuIndex")) {
151+ item.menuIndex = Qt.binding(function() { return modelIndex; });
149 }
152 }
150 }
153 }
151
154
@@ -154,13 +157,24 @@ IndicatorBase {
154 property: "objectName"
157 property: "objectName"
155 value: model.action
158 value: model.action
156 }
159 }
160+
161+ // TODO: Fixes lp#1243146
162+ // This is a workaround for a Qt bug. https://bugreports.qt-project.org/browse/QTBUG-34351
163+ Connections {
164+ target: mainMenu
165+ onSelectedIndexChanged: {
166+ if (loader.item && loader.item.hasOwnProperty("menuSelected")) {
167+ loader.item.menuSelected = mainMenu.selectedIndex == index;
168+ }
169+ }
170+ }
157 }
171 }
158 }
172 }
159 }
173 }
160
174
161 MenuItemFactory {
175 MenuItemFactory {
162 id: factory
176 id: factory
163− model: mainMenu.model
177+ menuModel: mainMenu.model ? mainMenu.model : null
164 }
178 }
165
179
166 Components.Label {
180 Components.Label {
plugins/Unity/Indicators/qml/MenuItemFactory.qml+138−85
@@ -22,11 +22,12 @@ import Unity.Indicators 0.1 as Indicators
22import Unity.Indicators.Network 0.1 as ICNetwork
22import Unity.Indicators.Network 0.1 as ICNetwork
23import Unity.Indicators.Messaging 0.1 as ICMessaging
23import Unity.Indicators.Messaging 0.1 as ICMessaging
24import QMenuModel 0.1 as QMenuModel
24import QMenuModel 0.1 as QMenuModel
25+import Ubuntu.Components 0.1
25
26
26Item {
27Item {
27 id: menuFactory
28 id: menuFactory
28
29
29− property var model: null
30+ property var menuModel: null
30
31
31 property var _map: {
32 property var _map: {
32 "unity.widgets.systemsettings.tablet.volumecontrol" : sliderMenu,
33 "unity.widgets.systemsettings.tablet.volumecontrol" : sliderMenu,
@@ -49,38 +50,55 @@ Item {
49 "unity.widgets.systemsettings.tablet.accesspoint" : accessPoint,
50 "unity.widgets.systemsettings.tablet.accesspoint" : accessPoint,
50 }
51 }
51
52
53+ function getExtendedProperty(object, propertyName, defaultValue) {
54+ if (object && object.hasOwnProperty(propertyName)) {
55+ return object[propertyName];
56+ }
57+ return defaultValue;
58+ }
59+
52 Component { id: divMenu; Indicators.DivMenuItem {} }
60 Component { id: divMenu; Indicators.DivMenuItem {} }
53
61
54 Component {
62 Component {
55 id: sliderMenu;
63 id: sliderMenu;
56 Indicators.SliderMenuItem {
64 Indicators.SliderMenuItem {
57− property QtObject menu: null
65+ property QtObject menuData: null
66+ property var menuModel: menuFactory.menuModel
67+ property int menuIndex: -1
68+ property var extendedData: menuData && menuData.ext || undefined
58
69
59− text: menu && menu.label ? menu.label : ""
70+ text: menuData && menuData.label || ""
60− icon: menu && menu.icon ? menu.icon : ""
71+ iconSource: menuData && menuData.icon || ""
61− minIcon: menu && menu.ext.minIcon ? menu.ext.minIcon : ""
72+ minIcon: getExtendedProperty(extendedData, "minIcon", "")
62− maxIcon: menu && menu.ext.maxIcon ? menu.ext.maxIcon : ""
73+ maxIcon: getExtendedProperty(extendedData, "maxIcon", "")
63
74
64− minimumValue: menu.ext.minValue ? menu.ext.minValue : 0.0
75+ minimumValue: getExtendedProperty(extendedData, "minValue", 0.0)
65 maximumValue: {
76 maximumValue: {
66− var maximum = menu.ext.maxValue ? menu.ext.maxValue : 1.0
77+ var maximum = getExtendedProperty(extendedData, "maxValue", 1.0);
67 if (maximum <= minimumValue) {
78 if (maximum <= minimumValue) {
68 return minimumValue + 1;
79 return minimumValue + 1;
69 }
80 }
70 return maximum;
81 return maximum;
71 }
82 }
72− value: menu ? menu.actionState : 0.0
83+ value: menuData && menuData.actionState || 0.0
73− enabled: menu ? menu.sensitive : false
84+ enabled: menuData && menuData.sensitive || false
74
85
75− Component.onCompleted: {
86+ onMenuModelChanged: {
76− model.loadExtendedAttributes(modelIndex, {'min-value': 'double',
87+ loadAttributes();
77− 'max-value': 'double',
88+ }
78− 'min-icon': 'icon',
89+ onMenuIndexChanged: {
79− 'max-icon': 'icon'});
90+ loadAttributes();
80 }
91 }
81−
82 onChangeState: {
92 onChangeState: {
83− model.changeState(modelIndex, value);
93+ menuModel.changeState(menuIndex, value);
94+ }
95+
96+ function loadAttributes() {
97+ if (!menuModel || menuIndex == undefined) return;
98+ menuModel.loadExtendedAttributes(menuIndex, {'min-value': 'double',
99+ 'max-value': 'double',
100+ 'min-icon': 'icon',
101+ 'max-icon': 'icon'});
84 }
102 }
85 }
103 }
86 }
104 }
@@ -88,50 +106,57 @@ Item {
88 Component {
106 Component {
89 id: buttonMenu;
107 id: buttonMenu;
90 Indicators.ButtonMenuItem {
108 Indicators.ButtonMenuItem {
91− property QtObject menu: null
109+ property QtObject menuData: null
110+ property var menuModel: menuFactory.menuModel
111+ property int menuIndex: -1
92
112
93− text: menu && menu.label ? menu.label : ""
113+ text: menuData && menuData.label || ""
94− enabled: menu ? menu.sensitive : false
114+ enabled: menuData && menuData.sensitive || false
95
115
96 onActivate: {
116 onActivate: {
97− model.activate(modelIndex);
117+ menuModel.activate(menuIndex);
118+ shell.hideIndicatorMenu(UbuntuAnimation.FastDuration);
98 }
119 }
99 }
120 }
100 }
121 }
101 Component {
122 Component {
102 id: sectionMenu;
123 id: sectionMenu;
103 Indicators.SectionMenuItem {
124 Indicators.SectionMenuItem {
104− property QtObject menu: null
125+ property QtObject menuData: null
126+ property var menuIndex: undefined
105
127
106− text: menu && menu.label ? menu.label : ""
128+ text: menuData && menuData.label || ""
107 }
129 }
108 }
130 }
109
131
110 Component {
132 Component {
111 id: progressMenu;
133 id: progressMenu;
112 Indicators.ProgressMenuItem {
134 Indicators.ProgressMenuItem {
113− property QtObject menu: null
135+ property QtObject menuData: null
136+ property int menuIndex: -1
114
137
115− text: menu && menu.label ? menu.label : ""
138+ text: menuData && menuData.label || ""
116− icon: menu ? menu.icon : ""
139+ iconSource: menuData && menuData.icon || ""
117− value : menu ? menu.actionState : 0.0
140+ value : menuData && menuData.actionState || 0.0
118− enabled: menu ? menu.sensitive : false
141+ enabled: menuData && menuData.sensitive || false
119 }
142 }
120 }
143 }
121
144
122 Component {
145 Component {
123 id: standardMenu;
146 id: standardMenu;
124 Indicators.StandardMenuItem {
147 Indicators.StandardMenuItem {
125− property QtObject menu: null
148+ property QtObject menuData: null
149+ property int menuIndex: -1
126
150
127− text: menu && menu.label ? menu.label : ""
151+ text: menuData && menuData.label || ""
128− icon: menu && menu.icon ? menu.icon : ""
152+ iconSource: menuData && menuData.icon || ""
153+ enabled: menuData && menuData.sensitive || false
129− checkable: menu ? (menu.isCheck || menu.isRadio) : false
154+ checkable: menuData ? (menuData.isCheck || menuData.isRadio) : false
130− checked: checkable ? menu.isToggled : false
155+ checked: checkable ? menuData.isToggled : false
131− enabled: menu ? menu.sensitive : false
132
156
133 onActivate: {
157 onActivate: {
134− model.activate(modelIndex);
158+ menuModel.activate(menuIndex);
159+ shell.hideIndicatorMenu(UbuntuAnimation.BriskDuration);
135 }
160 }
136 }
161 }
137 }
162 }
@@ -139,15 +164,17 @@ Item {
139 Component {
164 Component {
140 id: switchMenu;
165 id: switchMenu;
141 Indicators.SwitchMenuItem {
166 Indicators.SwitchMenuItem {
142− property QtObject menu: null
167+ property QtObject menuData: null
168+ property int menuIndex: -1
143
169
144− text: menu && menu.label ? menu.label : ""
170+ text: menuData && menuData.label || ""
145− icon: menu && menu.icon ? menu.icon : ""
171+ iconSource: menuData && menuData.icon || ""
172+ enabled: menuData && menuData.sensitive || false
146− checked: menu ? menu.isToggled : false
173+ checked: menuData ? menuData.isToggled : false
147− enabled: menu ? menu.sensitive : false
148
174
149 onActivate: {
175 onActivate: {
150− model.activate(modelIndex);
176+ menuModel.activate(menuIndex);
177+ shell.hideIndicatorMenu(UbuntuAnimation.BriskDuration);
151 }
178 }
152 }
179 }
153 }
180 }
@@ -155,13 +182,24 @@ Item {
155 Component {
182 Component {
156 id: wifiSection;
183 id: wifiSection;
157 Indicators.SectionMenuItem {
184 Indicators.SectionMenuItem {
158− property QtObject menu: null
185+ property QtObject menuData: null
186+ property var menuModel: menuFactory.menuModel
187+ property int menuIndex: -1
188+ property var extendedData: menuData && menuData.ext || undefined
189+
190+ text: menuData && menuData.label || ""
191+ busy: getExtendedProperty(extendedData, "xCanonicalBusyAction", false)
159
192
160− text: menu && menu.label ? menu.label : ""
193+ onMenuModelChanged: {
161− busy: menu ? menu.ext.xCanonicalBusyAction : false
194+ loadAttributes();
195+ }
196+ onMenuIndexChanged: {
197+ loadAttributes();
198+ }
162
199
163− Component.onCompleted: {
200+ function loadAttributes() {
201+ if (!menuModel || menuIndex == undefined) return;
164− model.loadExtendedAttributes(modelIndex, {'x-canonical-busy-action': 'bool'});
202+ menuModel.loadExtendedAttributes(menuIndex, {'x-canonical-busy-action': 'bool'})
165 }
203 }
166 }
204 }
167 }
205 }
@@ -169,27 +207,40 @@ Item {
169 Component {
207 Component {
170 id: accessPoint;
208 id: accessPoint;
171 ICNetwork.AccessPoint {
209 ICNetwork.AccessPoint {
172− property QtObject menu: null
210+ property QtObject menuData: null
211+ property var menuModel: menuFactory.menuModel
212+ property int menuIndex: -1
213+ property var extendedData: menuData && menuData.ext || undefined
214+
173 property var strengthAction: QMenuModel.UnityMenuAction {
215 property var strengthAction: QMenuModel.UnityMenuAction {
174− model: menuFactory.model ? menuFactory.model : null
216+ model: menuModel
175− index: modelIndex
217+ index: menuIndex
176− name: menu ? menu.ext.xCanonicalWifiApStrengthAction : ""
218+ name: getExtendedProperty(extendedData, "xCanonicalWifiApStrengthAction", "")
177 }
219 }
178
220
179− text: menu && menu.label ? menu.label : ""
221+ text: menuData && menuData.label || ""
222+ enabled: menuData && menuData.sensitive || false
180− secure: menu ? menu.ext.xCanonicalWifiApIsSecure : false
223+ secure: getExtendedProperty(extendedData, "xCanonicalWifiApIsSecure", false)
181− adHoc: menu ? menu.ext.xCanonicalWifiApIsAdhoc : false
224+ adHoc: getExtendedProperty(extendedData, "xCanonicalWifiApIsAdhoc", false)
182− checked: menu ? menu.isToggled : false
225+ checked: menuData ? menuData.isToggled : false
183 signalStrength: strengthAction.valid ? strengthAction.state : 0
226 signalStrength: strengthAction.valid ? strengthAction.state : 0
184− enabled: menu ? menu.sensitive : false
185
227
186− Component.onCompleted: {
228+ onMenuModelChanged: {
187− model.loadExtendedAttributes(modelIndex, {'x-canonical-wifi-ap-is-adhoc': 'bool',
229+ loadAttributes();
188− 'x-canonical-wifi-ap-is-secure': 'bool',
230+ }
189− 'x-canonical-wifi-ap-strength-action': 'string'});
231+ onMenuIndexChanged: {
232+ loadAttributes();
190 }
233 }
191 onActivate: {
234 onActivate: {
192− model.activate(modelIndex);
235+ menuModel.activate(menuIndex);
236+ shell.hideIndicatorMenu(UbuntuAnimation.BriskDuration);
237+ }
238+
239+ function loadAttributes() {
240+ if (!menuModel || menuIndex == undefined) return;
241+ menuModel.loadExtendedAttributes(menuIndex, {'x-canonical-wifi-ap-is-adhoc': 'bool',
242+ 'x-canonical-wifi-ap-is-secure': 'bool',
243+ 'x-canonical-wifi-ap-strength-action': 'string'});
193 }
244 }
194 }
245 }
195 }
246 }
@@ -197,37 +248,40 @@ Item {
197 Component {
248 Component {
198 id: messageItem
249 id: messageItem
199 ICMessaging.MessageMenuItemFactory {
250 ICMessaging.MessageMenuItemFactory {
200−
251+ menuModel: menuFactory.menuModel
201− property QtObject menu: null
202− model: menuFactory.model ? menuFactory.model : null
203−
204− Component.onCompleted: {
205− model.loadExtendedAttributes(modelIndex, {'x-canonical-time': 'int64',
206− 'x-canonical-text': 'string',
207− 'x-canonical-message-actions': 'variant',
208− 'icon': 'icon',
209− 'x-canonical-app-icon': 'icon'});
210− }
211 }
252 }
212 }
253 }
213
254
214 Component {
255 Component {
215 id: groupedMessage
256 id: groupedMessage
216 ICMessaging.GroupedMessage {
257 ICMessaging.GroupedMessage {
217− property QtObject menu: null
258+ property QtObject menuData: null
218−
259+ property var menuModel: menuFactory.menuModel
219− title: menu && menu.label ? menu.label : ""
260+ property int menuIndex: -1
220− count: menu && menu.actionState[0] ? menu.actionState[0] : "0"
261+ property var extendedData: menuData && menuData.ext || undefined
262+
263+ title: menuData && menuData.label || ""
221− appIcon: menu && menu.ext.icon !== undefined ? menu.ext.icon : "qrc:/indicators/artwork/messaging/default_app.svg"
264+ appIcon: getExtendedProperty(extendedData, "icon", "qrc:/indicators/artwork/messaging/default_app.svg")
222−
265+ count: menuData && menuData.actionState.length > 0 ? menuData.actionState[0] : "0"
223− Component.onCompleted: {
266+ enabled: menuData && menuData.sensitive || false
224− model.loadExtendedAttributes(modelIndex, {'icon': 'icon'});
267+
268+ onMenuModelChanged: {
269+ loadAttributes();
270+ }
271+ onMenuIndexChanged: {
272+ loadAttributes();
225 }
273 }
226 onActivateApp: {
274 onActivateApp: {
227− model.activate(modelIndex, true);
275+ menuModel.activate(menuIndex, true);
276+ shell.hideIndicatorMenu(UbuntuAnimation.FastDuration);
228 }
277 }
229 onDismiss: {
278 onDismiss: {
230− model.activate(modelIndex, false);
279+ menuModel.activate(menuIndex, false);
280+ }
281+
282+ function loadAttributes() {
283+ if (!menuModel || menuIndex == undefined) return;
284+ menuModel.loadExtendedAttributes(modelIndex, {'icon': 'icon'});
231 }
285 }
232 }
286 }
233 }
287 }
@@ -238,10 +292,9 @@ Item {
238 if (component !== undefined) {
292 if (component !== undefined) {
239 return component;
293 return component;
240 }
294 }
241− } else {
295+ }
242− if (modelData.isSeparator) {
296+ if (modelData.isSeparator) {
243− return divMenu;
297+ return divMenu;
244− }
245 }
298 }
246 return standardMenu;
299 return standardMenu;
247 }
300 }
plugins/Unity/Launcher/backend/launcherbackend.cpp+6−6
@@ -26,6 +26,7 @@
26#include <QFileInfo>
26#include <QFileInfo>
27#include <QGSettings>
27#include <QGSettings>
28#include <QDebug>
28#include <QDebug>
29+#include <QStandardPaths>
29
30
30class LauncherBackendItem
31class LauncherBackendItem
31{
32{
@@ -182,8 +183,10 @@ void LauncherBackend::syncFromAccounts()
182
183
183 if (m_accounts && !m_user.isEmpty()) {
184 if (m_accounts && !m_user.isEmpty()) {
184 QVariant variant = m_accounts->getUserProperty(m_user, "com.canonical.unity.AccountsService", "launcher-items");
185 QVariant variant = m_accounts->getUserProperty(m_user, "com.canonical.unity.AccountsService", "launcher-items");
186+ if (variant.isValid() && variant.canConvert<QDBusArgument>()) {
185− apps = qdbus_cast<QList<QVariantMap>>(variant.value<QDBusArgument>());
187+ apps = qdbus_cast<QList<QVariantMap>>(variant.value<QDBusArgument>());
186− defaults = isDefaultsItem(apps);
188+ defaults = isDefaultsItem(apps);
189+ }
187 }
190 }
188
191
189 if (m_accounts && defaults) { // Checking accounts as it'll be null when !useStorage
192 if (m_accounts && defaults) { // Checking accounts as it'll be null when !useStorage
@@ -232,10 +235,7 @@ QString LauncherBackend::findDesktopFile(const QString &appId) const
232 int dashPos = -1;
235 int dashPos = -1;
233 QString helper = appId;
236 QString helper = appId;
234
237
235− QStringList searchDirs;
238+ QStringList searchDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
236− searchDirs << QDir::homePath() + "/.local/share/applications";
237− searchDirs << "/usr/share/applications";
238−
239#ifdef LAUNCHER_TESTING
239#ifdef LAUNCHER_TESTING
240 searchDirs << "";
240 searchDirs << "";
241#endif
241#endif
plugins/Utils/CMakeLists.txt+1
@@ -16,6 +16,7 @@ set(QMLPLUGIN_SRC
16 mediaartcache.cpp
16 mediaartcache.cpp
17 qlimitproxymodelqml.cpp
17 qlimitproxymodelqml.cpp
18 qsortfilterproxymodelqml.cpp
18 qsortfilterproxymodelqml.cpp
19+ timeformatter.cpp
19 unitymenumodelpaths.cpp
20 unitymenumodelpaths.cpp
20 plugin.cpp
21 plugin.cpp
21 )
22 )
plugins/Utils/plugin.cpp+3
@@ -30,6 +30,7 @@
30#include "bottombarvisibilitycommunicatorshell.h"
30#include "bottombarvisibilitycommunicatorshell.h"
31#include "qlimitproxymodelqml.h"
31#include "qlimitproxymodelqml.h"
32#include "qsortfilterproxymodelqml.h"
32#include "qsortfilterproxymodelqml.h"
33+#include "timeformatter.h"
33#include "unitymenumodelpaths.h"
34#include "unitymenumodelpaths.h"
34
35
35static const char* BOTTOM_BAR_VISIBILITY_COMMUNICATOR_DBUS_PATH = "/BottomBarVisibilityCommunicator";
36static const char* BOTTOM_BAR_VISIBILITY_COMMUNICATOR_DBUS_PATH = "/BottomBarVisibilityCommunicator";
@@ -42,6 +43,8 @@ void UtilsPlugin::registerTypes(const char *uri)
42 qmlRegisterType<QLimitProxyModelQML>(uri, 0, 1, "LimitProxyModel");
43 qmlRegisterType<QLimitProxyModelQML>(uri, 0, 1, "LimitProxyModel");
43 qmlRegisterType<QSortFilterProxyModelQML>(uri, 0, 1, "SortFilterProxyModel");
44 qmlRegisterType<QSortFilterProxyModelQML>(uri, 0, 1, "SortFilterProxyModel");
44 qmlRegisterType<UnityMenuModelPaths>(uri, 0, 1, "UnityMenuModelPaths");
45 qmlRegisterType<UnityMenuModelPaths>(uri, 0, 1, "UnityMenuModelPaths");
46+ qmlRegisterType<TimeFormatter>(uri, 0, 1, "TimeFormatter");
47+ qmlRegisterType<GDateTimeFormatter>(uri, 0, 1, "GDateTimeFormatter");
45 qmlRegisterUncreatableType<BottomBarVisibilityCommunicatorShell>(uri, 0, 1, "BottomBarVisibilityCommunicatorShell", "Can't create BottomBarVisibilityCommunicatorShell");
48 qmlRegisterUncreatableType<BottomBarVisibilityCommunicatorShell>(uri, 0, 1, "BottomBarVisibilityCommunicatorShell", "Can't create BottomBarVisibilityCommunicatorShell");
46}
49}
47
50
plugins/Unity/Indicators/timeformatter.cpp → plugins/Utils/timeformatter.cpprenamed+30−1
@@ -167,6 +167,35 @@ void TimeFormatter::setTime(qint64 time)
167
167
168void TimeFormatter::update()
168void TimeFormatter::update()
169{
169{
170− priv->timeString = QDateTime::fromMSecsSinceEpoch(priv->time / 1000).toString(priv->format);
170+ priv->timeString = formatTime();
171 Q_EMIT timeStringChanged(priv->timeString);
171 Q_EMIT timeStringChanged(priv->timeString);
172}
172}
173+
174+QString TimeFormatter::formatTime() const
175+{
176+ return QDateTime::fromMSecsSinceEpoch(time() / 1000).toString(format());
177+}
178+
179+GDateTimeFormatter::GDateTimeFormatter(QObject* parent)
180+: TimeFormatter(parent)
181+{
182+}
183+
184+QString GDateTimeFormatter::formatTime() const
185+{
186+ gchar* time_string;
187+ GDateTime* datetime;
188+ QByteArray formatBytes = format().toUtf8();
189+
190+ datetime = g_date_time_new_from_unix_local(time());
191+ if (!datetime) {
192+ return "";
193+ }
194+
195+ time_string = g_date_time_format(datetime, formatBytes.constData());
196+ QString formattedTime(QString::fromUtf8(time_string));
197+
198+ g_free(time_string);
199+ g_date_time_unref(datetime);
200+ return formattedTime;
201+}
plugins/Unity/Indicators/timeformatter.h → plugins/Utils/timeformatter.hrenamed+15−3
@@ -19,10 +19,10 @@
19#ifndef TIME_FORMATTER_H
19#ifndef TIME_FORMATTER_H
20#define TIME_FORMATTER_H
20#define TIME_FORMATTER_H
21
21
22−#include "unityindicatorsglobal.h"
23#include <QObject>
22#include <QObject>
24
23
24+// TODO - bug #1260728
25−class UNITYINDICATORS_EXPORT TimeFormatter : public QObject
25+class TimeFormatter : public QObject
26{
26{
27 Q_OBJECT
27 Q_OBJECT
28 Q_PROPERTY(QString format READ format WRITE setFormat NOTIFY formatChanged)
28 Q_PROPERTY(QString format READ format WRITE setFormat NOTIFY formatChanged)
@@ -31,7 +31,7 @@ class UNITYINDICATORS_EXPORT TimeFormatter : public QObject
31
31
32public:
32public:
33 TimeFormatter(QObject *parent = 0);
33 TimeFormatter(QObject *parent = 0);
34− ~TimeFormatter();
34+ virtual ~TimeFormatter();
35
35
36 QString format() const;
36 QString format() const;
37 QString timeString() const;
37 QString timeString() const;
@@ -47,8 +47,20 @@ Q_SIGNALS:
47 void timeStringChanged(const QString &timeString);
47 void timeStringChanged(const QString &timeString);
48 void timeChanged(qint64 time);
48 void timeChanged(qint64 time);
49
49
50+protected:
51+ virtual QString formatTime() const;
52+
50private:
53private:
51 struct TimeFormatterPrivate *priv;
54 struct TimeFormatterPrivate *priv;
52};
55};
53
56
57+class GDateTimeFormatter : public TimeFormatter
58+{
59+public:
60+ GDateTimeFormatter(QObject *parent = 0);
61+
62+protected:
63+ virtual QString formatTime() const;
64+};
65+
54#endif
66#endif
po/ar.po+15−93
@@ -7,8 +7,8 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-11-15 12:29+0000\n"
11+"PO-Revision-Date: 2013-12-05 06:55+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"
@@ -16,76 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
17"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
18"3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
18"3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
19−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19+"X-Launchpad-Export-Date: 2013-12-06 06:30+0000\n"
20−"X-Generator: Launchpad (build 16831)\n"
20+"X-Generator: Launchpad (build 16863)\n"
21−
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr "الهاتف"
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr "الكاميرا"
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr "المعرض"
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr "فيسبوك"
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr "المتصفح"
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr "تويتر"
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr "جي ميل"
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr "الطقس"
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr "المذكرة"
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr "التقويم"
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr "مشغّل الوسائط"
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr "Evernote"
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr "الخريطة"
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr "Pinterest"
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr "SoundCloud"
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr "ويكيبيديا"
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr "يوتيوب"
89
21
90#: Components/EdgeDemoOverlay.qml:151
22#: Components/EdgeDemoOverlay.qml:151
91msgid "Skip intro"
23msgid "Skip intro"
@@ -136,20 +68,22 @@ msgstr ""
136"لقد أتقنت الآن إيماءات الحواف ويمكنك البدء باستخدام الهاتف<br><br>انقر في أي "
68"لقد أتقنت الآن إيماءات الحواف ويمكنك البدء باستخدام الهاتف<br><br>انقر في أي "
137"مكان للبدء"
69"مكان للبدء"
138
70
139−#: Components/PageHeader.qml:345
71+#: Components/PageHeader.qml:364
140msgid "Recent searches"
72msgid "Recent searches"
141msgstr "عمليات البحث الأخيرة"
73msgstr "عمليات البحث الأخيرة"
142
74
143−#. TRANSLATORS: Number of persons who rated this app
75+#: Dash/Apps/AppPreview.qml:135
76+msgid "Rate this"
77+msgstr "قيّم ذلك"
78+
144#. TRANSLATORS: Number of persons who rated this app/video/whatever
79#. TRANSLATORS: Number of persons who rated this app/video/whatever
145−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
80+#: Dash/Previews/Header.qml:93
146#, qt-format
81#, qt-format
147msgid "(%1)"
82msgid "(%1)"
148msgstr "(%1)"
83msgstr "(%1)"
149
84
150−#. TRANSLATORS: Number of persons who wrote reviews for this app
151#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
85#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
152−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
86+#: Dash/Previews/Header.qml:105
153#, qt-format
87#, qt-format
154msgid "%1 review"
88msgid "%1 review"
155msgid_plural "%1 reviews"
89msgid_plural "%1 reviews"
@@ -160,10 +94,6 @@ msgstr[3] "%1 تعليقات"
160msgstr[4] "%1 تعليقا"
94msgstr[4] "%1 تعليقا"
161msgstr[5] "%1 تعليق"
95msgstr[5] "%1 تعليق"
162
96
163−#: Dash/Apps/AppPreview.qml:135
164−msgid "Rate this"
165−msgstr "قيّم ذلك"
166−
167#: Dash/Previews/Reviews.qml:74
97#: Dash/Previews/Reviews.qml:74
168msgid "Add a review"
98msgid "Add a review"
169msgstr "أضف تعليق"
99msgstr "أضف تعليق"
@@ -180,7 +110,7 @@ msgstr "أرسل"
180msgid "Comments:"
110msgid "Comments:"
181msgstr "التعليقات:"
111msgstr "التعليقات:"
182
112
183−#: Greeter/Lockscreen.qml:146
113+#: Greeter/Lockscreen.qml:149
184msgid "Emergency Call"
114msgid "Emergency Call"
185msgstr "مكالمة طوارئ"
115msgstr "مكالمة طوارئ"
186
116
@@ -224,21 +154,13 @@ msgstr "ابحث"
224#: plugins/Unity/Launcher/launcheritem.cpp:43
154#: plugins/Unity/Launcher/launcheritem.cpp:43
225#: plugins/Unity/Launcher/launcheritem.cpp:73
155#: plugins/Unity/Launcher/launcheritem.cpp:73
226msgid "Lock to Launcher"
156msgid "Lock to Launcher"
227−msgstr ""
157+msgstr "ثبّت في الشريط"
228
158
229#: plugins/Unity/Launcher/launcheritem.cpp:73
159#: plugins/Unity/Launcher/launcheritem.cpp:73
230msgid "Unlock from Launcher"
160msgid "Unlock from Launcher"
231−msgstr ""
161+msgstr "فُك التثبيت من الشريط"
232−
233−#: plugins/Unity/scope.cpp:408
234−msgid "Sorry, there is nothing that matches your search."
235−msgstr "عذراً، لا يوجد ما يطابق بحثك."
236−
237−#: plugins/Unity/showallfilteroption.cpp:41
238−msgid "All"
239−msgstr "الكل"
240
162
241−#: Shell.qml:441
163+#: Shell.qml:439
242#, qt-format
164#, qt-format
243msgid "Please enter %1"
165msgid "Please enter %1"
244msgstr "من فضلك أدخِل %1"
166msgstr "من فضلك أدخِل %1"
po/ast.po+16−94
@@ -7,84 +7,16 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-10-03 14:02+0000\n"
11+"PO-Revision-Date: 2013-12-11 20:45+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"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-12-12 06:02+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16869)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Teléfonu"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Cámara"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galería"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Navegador"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Meteoroloxía"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Bloc de notes"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Calendariu"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Reproductor multimedia"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Map"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipedia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -136,30 +68,28 @@ msgstr ""
136"Agora domines los xestos de berbesos y pues usar el teléfonu<br><br>Toca la "
68"Agora domines los xestos de berbesos y pues usar el teléfonu<br><br>Toca la "
137"pantalla pa entamar"
69"pantalla pa entamar"
138
70
139−#: Components/PageHeader.qml:345
71+#: Components/PageHeader.qml:364
140msgid "Recent searches"
72msgid "Recent searches"
141msgstr "Busques recientes"
73msgstr "Busques recientes"
142
74
143−#. TRANSLATORS: Number of persons who rated this app
75+#: Dash/Apps/AppPreview.qml:135
76+msgid "Rate this"
77+msgstr "Valorar esto"
78+
144#. TRANSLATORS: Number of persons who rated this app/video/whatever
79#. TRANSLATORS: Number of persons who rated this app/video/whatever
145−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
80+#: Dash/Previews/Header.qml:93
146#, qt-format
81#, qt-format
147msgid "(%1)"
82msgid "(%1)"
148msgstr "(%1)"
83msgstr "(%1)"
149
84
150−#. TRANSLATORS: Number of persons who wrote reviews for this app
151#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
85#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
152−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
86+#: Dash/Previews/Header.qml:105
153#, qt-format
87#, qt-format
154msgid "%1 review"
88msgid "%1 review"
155msgid_plural "%1 reviews"
89msgid_plural "%1 reviews"
156msgstr[0] "%1 reseña"
90msgstr[0] "%1 reseña"
157msgstr[1] "%1 reseñes"
91msgstr[1] "%1 reseñes"
158
92
159−#: Dash/Apps/AppPreview.qml:135
160−msgid "Rate this"
161−msgstr "Valorar esto"
162−
163#: Dash/Previews/Reviews.qml:74
93#: Dash/Previews/Reviews.qml:74
164msgid "Add a review"
94msgid "Add a review"
165msgstr "Amestar una reseña"
95msgstr "Amestar una reseña"
@@ -176,7 +106,7 @@ msgstr "Unviar"
176msgid "Comments:"
106msgid "Comments:"
177msgstr "Comentarios:"
107msgstr "Comentarios:"
178
108
179−#: Greeter/Lockscreen.qml:146
109+#: Greeter/Lockscreen.qml:149
180msgid "Emergency Call"
110msgid "Emergency Call"
181msgstr "Llamada d'emerxencia"
111msgstr "Llamada d'emerxencia"
182
112
@@ -211,7 +141,7 @@ msgstr "Falando…"
211
141
212#: Notifications/NotificationMenuItemFactory.qml:89
142#: Notifications/NotificationMenuItemFactory.qml:89
213msgid "Show password"
143msgid "Show password"
214−msgstr ""
144+msgstr "Amosar contraseña"
215
145
216#: Panel/SearchIndicator.qml:27
146#: Panel/SearchIndicator.qml:27
217msgid "Search"
147msgid "Search"
@@ -220,21 +150,13 @@ msgstr "Guetar"
220#: plugins/Unity/Launcher/launcheritem.cpp:43
150#: plugins/Unity/Launcher/launcheritem.cpp:43
221#: plugins/Unity/Launcher/launcheritem.cpp:73
151#: plugins/Unity/Launcher/launcheritem.cpp:73
222msgid "Lock to Launcher"
152msgid "Lock to Launcher"
223−msgstr ""
153+msgstr "Caltener nel Llanzador"
224
154
225#: plugins/Unity/Launcher/launcheritem.cpp:73
155#: plugins/Unity/Launcher/launcheritem.cpp:73
226msgid "Unlock from Launcher"
156msgid "Unlock from Launcher"
227−msgstr ""
157+msgstr "Nun caltener nel llanzador"
228−
229−#: plugins/Unity/scope.cpp:408
230−msgid "Sorry, there is nothing that matches your search."
231−msgstr "Sentímoslo, nun hai res que concase cola gueta"
232−
233−#: plugins/Unity/showallfilteroption.cpp:41
234−msgid "All"
235−msgstr "Too"
236
158
237−#: Shell.qml:441
159+#: Shell.qml:439
238#, qt-format
160#, qt-format
239msgid "Please enter %1"
161msgid "Please enter %1"
240msgstr "Introduz %1"
162msgstr "Introduz %1"
po/az.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-06-26 23:48+0000\n"
11"PO-Revision-Date: 2013-06-26 23:48+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: Azerbaijani <az@li.org>\n"
13"Language-Team: Azerbaijani <az@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr "Son axtarışlar"
69msgstr "Son axtarışlar"
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "Bağışlayın, amma axtarışınıza heç bir nəticə uyğun gəlmir."
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/bg.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-06-27 00:06+0000\n"
11"PO-Revision-Date: 2013-06-27 00:06+0000\n"
12"Last-Translator: Miroslav E. Hadzhiev (Хаджиев) "
12"Last-Translator: Miroslav E. Hadzhiev (Хаджиев) "
13"<miroslav.hadzhiev@gmail.com>\n"
13"<miroslav.hadzhiev@gmail.com>\n"
@@ -16,76 +16,8 @@ msgstr ""
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"Plural-Forms: nplurals=2; plural=n != 1;\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20−"X-Generator: Launchpad (build 16831)\n"
20+"X-Generator: Launchpad (build 16856)\n"
21−
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr "Телефон"
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr "Камера"
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr "Колекция"
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr "Фейсбук"
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr "Браузър"
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr "Туитър"
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr "Е-поща от Гугъл"
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr "Метеоусловия"
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr "Бележник"
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr "Календар"
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr "Мултимедиен плеър"
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr ""
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr "Карта"
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr ""
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr ""
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr "Уикипедия"
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr "YouTube"
89
21
90#: Components/EdgeDemoOverlay.qml:151
22#: Components/EdgeDemoOverlay.qml:151
91msgid "Skip intro"
23msgid "Skip intro"
@@ -133,30 +65,28 @@ msgid ""
133"phone<br><br>Tap anywhere to start"
65"phone<br><br>Tap anywhere to start"
134msgstr ""
66msgstr ""
135
67
136−#: Components/PageHeader.qml:345
68+#: Components/PageHeader.qml:364
137msgid "Recent searches"
69msgid "Recent searches"
138msgstr "Скорошни търсения"
70msgstr "Скорошни търсения"
139
71
140−#. TRANSLATORS: Number of persons who rated this app
72+#: Dash/Apps/AppPreview.qml:135
73+msgid "Rate this"
74+msgstr ""
75+
141#. TRANSLATORS: Number of persons who rated this app/video/whatever
76#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
77+#: Dash/Previews/Header.qml:93
143#, qt-format
78#, qt-format
144msgid "(%1)"
79msgid "(%1)"
145msgstr ""
80msgstr ""
146
81
147−#. TRANSLATORS: Number of persons who wrote reviews for this app
148#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
82#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
83+#: Dash/Previews/Header.qml:105
150#, qt-format
84#, qt-format
151msgid "%1 review"
85msgid "%1 review"
152msgid_plural "%1 reviews"
86msgid_plural "%1 reviews"
153msgstr[0] ""
87msgstr[0] ""
154msgstr[1] ""
88msgstr[1] ""
155
89
156−#: Dash/Apps/AppPreview.qml:135
157−msgid "Rate this"
158−msgstr ""
159−
160#: Dash/Previews/Reviews.qml:74
90#: Dash/Previews/Reviews.qml:74
161msgid "Add a review"
91msgid "Add a review"
162msgstr ""
92msgstr ""
@@ -173,7 +103,7 @@ msgstr ""
173msgid "Comments:"
103msgid "Comments:"
174msgstr ""
104msgstr ""
175
105
176−#: Greeter/Lockscreen.qml:146
106+#: Greeter/Lockscreen.qml:149
177msgid "Emergency Call"
107msgid "Emergency Call"
178msgstr ""
108msgstr ""
179
109
@@ -223,15 +153,7 @@ msgstr ""
223msgid "Unlock from Launcher"
153msgid "Unlock from Launcher"
224msgstr ""
154msgstr ""
225
155
226−#: plugins/Unity/scope.cpp:408
227−msgid "Sorry, there is nothing that matches your search."
228−msgstr "Съжаляваме, няма нищо, което да отговаря на вашето търсене."
229−
230−#: plugins/Unity/showallfilteroption.cpp:41
231−msgid "All"
232−msgstr ""
233−
234−#: Shell.qml:441
156+#: Shell.qml:439
235#, qt-format
157#, qt-format
236msgid "Please enter %1"
158msgid "Please enter %1"
237msgstr ""
159msgstr ""
po/ca.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-09-28 07:38+0000\n"
11"PO-Revision-Date: 2013-09-28 07:38+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"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Telèfon"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Càmera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galeria"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Navegador"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "El temps"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Bloc de notes"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Calendari"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Reproductor multimèdia"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Mapa"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Viquipèdia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -138,30 +70,28 @@ msgid ""
138"phone<br><br>Tap anywhere to start"
70"phone<br><br>Tap anywhere to start"
139msgstr ""
71msgstr ""
140
72
141−#: Components/PageHeader.qml:345
73+#: Components/PageHeader.qml:364
142msgid "Recent searches"
74msgid "Recent searches"
143msgstr "Cerques recents"
75msgstr "Cerques recents"
144
76
145−#. TRANSLATORS: Number of persons who rated this app
77+#: Dash/Apps/AppPreview.qml:135
78+msgid "Rate this"
79+msgstr ""
80+
146#. TRANSLATORS: Number of persons who rated this app/video/whatever
81#. TRANSLATORS: Number of persons who rated this app/video/whatever
147−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
82+#: Dash/Previews/Header.qml:93
148#, qt-format
83#, qt-format
149msgid "(%1)"
84msgid "(%1)"
150msgstr "(%1)"
85msgstr "(%1)"
151
86
152−#. TRANSLATORS: Number of persons who wrote reviews for this app
153#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
87#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
154−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
88+#: Dash/Previews/Header.qml:105
155#, qt-format
89#, qt-format
156msgid "%1 review"
90msgid "%1 review"
157msgid_plural "%1 reviews"
91msgid_plural "%1 reviews"
158msgstr[0] "%1 ressenya"
92msgstr[0] "%1 ressenya"
159msgstr[1] "%1 ressenyes"
93msgstr[1] "%1 ressenyes"
160
94
161−#: Dash/Apps/AppPreview.qml:135
162−msgid "Rate this"
163−msgstr ""
164−
165#: Dash/Previews/Reviews.qml:74
95#: Dash/Previews/Reviews.qml:74
166msgid "Add a review"
96msgid "Add a review"
167msgstr "Afegiu una ressenya"
97msgstr "Afegiu una ressenya"
@@ -178,7 +108,7 @@ msgstr "Envia"
178msgid "Comments:"
108msgid "Comments:"
179msgstr "Comentaris:"
109msgstr "Comentaris:"
180
110
181−#: Greeter/Lockscreen.qml:146
111+#: Greeter/Lockscreen.qml:149
182msgid "Emergency Call"
112msgid "Emergency Call"
183msgstr "Trucada d'emergència"
113msgstr "Trucada d'emergència"
184
114
@@ -228,15 +158,7 @@ msgstr ""
228msgid "Unlock from Launcher"
158msgid "Unlock from Launcher"
229msgstr ""
159msgstr ""
230
160
231−#: plugins/Unity/scope.cpp:408
232−msgid "Sorry, there is nothing that matches your search."
233−msgstr "No hi ha res que coincideixi amb la cerca"
234−
235−#: plugins/Unity/showallfilteroption.cpp:41
236−msgid "All"
237−msgstr ""
238−
239−#: Shell.qml:441
161+#: Shell.qml:439
240#, qt-format
162#, qt-format
241msgid "Please enter %1"
163msgid "Please enter %1"
242msgstr "Introduïu %1"
164msgstr "Introduïu %1"
po/cs.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-10-08 08:09+0000\n"
11"PO-Revision-Date: 2013-10-08 08:09+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"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
17"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Telefon"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Fotoaparát"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galerie"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Prohlížeč"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Počasí"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Poznámkový blok"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Kalendář"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Přehrávač multimédií"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Mapa"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "Hudební Cloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipedie"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,20 +64,22 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr "Poslední vyhledávání"
69msgstr "Poslední vyhledávání"
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr "Ohodnoťte to"
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr "(%1)"
79msgstr "(%1)"
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
@@ -153,10 +87,6 @@ msgstr[0] "%1 recenze"
153msgstr[1] "%1 recenze"
87msgstr[1] "%1 recenze"
154msgstr[2] "%1 recenzí"
88msgstr[2] "%1 recenzí"
155
89
156−#: Dash/Apps/AppPreview.qml:135
157−msgid "Rate this"
158−msgstr "Ohodnoťte to"
159−
160#: Dash/Previews/Reviews.qml:74
90#: Dash/Previews/Reviews.qml:74
161msgid "Add a review"
91msgid "Add a review"
162msgstr "Přidat recenzi"
92msgstr "Přidat recenzi"
@@ -173,7 +103,7 @@ msgstr "Odeslat"
173msgid "Comments:"
103msgid "Comments:"
174msgstr "Komentáře:"
104msgstr "Komentáře:"
175
105
176−#: Greeter/Lockscreen.qml:146
106+#: Greeter/Lockscreen.qml:149
177msgid "Emergency Call"
107msgid "Emergency Call"
178msgstr "Tísňové volání"
108msgstr "Tísňové volání"
179
109
@@ -223,15 +153,7 @@ msgstr ""
223msgid "Unlock from Launcher"
153msgid "Unlock from Launcher"
224msgstr ""
154msgstr ""
225
155
226−#: plugins/Unity/scope.cpp:408
227−msgid "Sorry, there is nothing that matches your search."
228−msgstr "Je nám líto, ale nic neodpovídá zadání"
229−
230−#: plugins/Unity/showallfilteroption.cpp:41
231−msgid "All"
232−msgstr "Vše"
233−
234−#: Shell.qml:441
156+#: Shell.qml:439
235#, qt-format
157#, qt-format
236msgid "Please enter %1"
158msgid "Please enter %1"
237msgstr "Zadejte prosím %1"
159msgstr "Zadejte prosím %1"
po/de.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-10-18 12:26+0000\n"
11"PO-Revision-Date: 2013-10-18 12:26+0000\n"
12"Last-Translator: Phillip Sz <Unknown>\n"
12"Last-Translator: Phillip Sz <Unknown>\n"
13"Language-Team: German <de@li.org>\n"
13"Language-Team: German <de@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Telefon"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Kamera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galerie"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Browser"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Wetter"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Notizen"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Kalender"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Medienwiedergabe"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Karte"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipedia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -136,30 +68,28 @@ msgstr ""
136"Sie haben nun die Einführung abgeschlossen und können Ihr Gerät nun "
68"Sie haben nun die Einführung abgeschlossen und können Ihr Gerät nun "
137"verwenden<br><br>Antippen um zu starten"
69"verwenden<br><br>Antippen um zu starten"
138
70
139−#: Components/PageHeader.qml:345
71+#: Components/PageHeader.qml:364
140msgid "Recent searches"
72msgid "Recent searches"
141msgstr "Letzte Suchbegriffe"
73msgstr "Letzte Suchbegriffe"
142
74
143−#. TRANSLATORS: Number of persons who rated this app
75+#: Dash/Apps/AppPreview.qml:135
76+msgid "Rate this"
77+msgstr "Bewerten"
78+
144#. TRANSLATORS: Number of persons who rated this app/video/whatever
79#. TRANSLATORS: Number of persons who rated this app/video/whatever
145−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
80+#: Dash/Previews/Header.qml:93
146#, qt-format
81#, qt-format
147msgid "(%1)"
82msgid "(%1)"
148msgstr "(%1)"
83msgstr "(%1)"
149
84
150−#. TRANSLATORS: Number of persons who wrote reviews for this app
151#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
85#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
152−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
86+#: Dash/Previews/Header.qml:105
153#, qt-format
87#, qt-format
154msgid "%1 review"
88msgid "%1 review"
155msgid_plural "%1 reviews"
89msgid_plural "%1 reviews"
156msgstr[0] "%1 Bewertung"
90msgstr[0] "%1 Bewertung"
157msgstr[1] "%1 Bewertungen"
91msgstr[1] "%1 Bewertungen"
158
92
159−#: Dash/Apps/AppPreview.qml:135
160−msgid "Rate this"
161−msgstr "Bewerten"
162−
163#: Dash/Previews/Reviews.qml:74
93#: Dash/Previews/Reviews.qml:74
164msgid "Add a review"
94msgid "Add a review"
165msgstr "Bewertung hinzufügen"
95msgstr "Bewertung hinzufügen"
@@ -176,7 +106,7 @@ msgstr "Senden"
176msgid "Comments:"
106msgid "Comments:"
177msgstr "Kommentare:"
107msgstr "Kommentare:"
178
108
179−#: Greeter/Lockscreen.qml:146
109+#: Greeter/Lockscreen.qml:149
180msgid "Emergency Call"
110msgid "Emergency Call"
181msgstr "Notruf"
111msgstr "Notruf"
182
112
@@ -226,15 +156,7 @@ msgstr ""
226msgid "Unlock from Launcher"
156msgid "Unlock from Launcher"
227msgstr ""
157msgstr ""
228
158
229−#: plugins/Unity/scope.cpp:408
230−msgid "Sorry, there is nothing that matches your search."
231−msgstr "Entschuldigung, es wurden keine Treffer erzielt."
232−
233−#: plugins/Unity/showallfilteroption.cpp:41
234−msgid "All"
235−msgstr "Alle"
236−
237−#: Shell.qml:441
159+#: Shell.qml:439
238#, qt-format
160#, qt-format
239msgid "Please enter %1"
161msgid "Please enter %1"
240msgstr "Bitte geben Sie %1 ein"
162msgstr "Bitte geben Sie %1 ein"
po/el.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-06-27 00:53+0000\n"
11"PO-Revision-Date: 2013-06-27 00:53+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: Greek <el@li.org>\n"
13"Language-Team: Greek <el@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr "Πρόσφατες αναζητήσεις"
69msgstr "Πρόσφατες αναζητήσεις"
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "Λυπούμαστε, δεν υπάρχει τίποτα που να ταιριάζει στην αναζήτησή σας."
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/en_AU.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-09-28 07:46+0000\n"
11"PO-Revision-Date: 2013-09-28 07:46+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"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Phone"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Camera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Gallery"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Browser"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Weather"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Notepad"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Calendar"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Media Player"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Map"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipedia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr "Recent searches"
69msgstr "Recent searches"
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr "Rate this"
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr "(%1)"
79msgstr "(%1)"
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] "%1 review"
86msgstr[0] "%1 review"
153msgstr[1] "%1 reviews"
87msgstr[1] "%1 reviews"
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr "Rate this"
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr "Add a review"
91msgstr "Add a review"
@@ -172,7 +102,7 @@ msgstr "Send"
172msgid "Comments:"
102msgid "Comments:"
173msgstr "Comments:"
103msgstr "Comments:"
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr "Emergency Call"
107msgstr "Emergency Call"
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "Sorry, there is nothing that matches your search."
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr "Please enter %1"
158msgstr "Please enter %1"
po/en_GB.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-06-27 08:53+0000\n"
11"PO-Revision-Date: 2013-06-27 08:53+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: English (United Kingdom) <en_GB@li.org>\n"
13"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Phone"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Camera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Gallery"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Browser"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Weather"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Notepad"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Calendar"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Media Player"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Map"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipedia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr "Recent searches"
69msgstr "Recent searches"
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "Sorry, there is nothing that matches your search."
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr "Please enter %1"
158msgstr "Please enter %1"
po/eo.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr ""
69msgstr ""
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/es.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-11-20 08:46+0000\n"
11"PO-Revision-Date: 2013-11-20 08:46+0000\n"
12"Last-Translator: Adolfo Jayme Barrientos <fitoschido@gmail.com>\n"
12"Last-Translator: Adolfo Jayme Barrientos <fitoschido@gmail.com>\n"
13"Language-Team: Spanish <es@li.org>\n"
13"Language-Team: Spanish <es@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-21 06:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Teléfono"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Cámara"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galería"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Navegador"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Meteorología"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Bloc de notas"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Calendario"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Reproductor multimedia"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Mapa"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipedia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -136,30 +68,28 @@ msgstr ""
136"Ahora domina los gestos de bordes y puede usar el teléfono<br><br>Toque la "
68"Ahora domina los gestos de bordes y puede usar el teléfono<br><br>Toque la "
137"pantalla para comenzar"
69"pantalla para comenzar"
138
70
139−#: Components/PageHeader.qml:345
71+#: Components/PageHeader.qml:364
140msgid "Recent searches"
72msgid "Recent searches"
141msgstr "Búsquedas recientes"
73msgstr "Búsquedas recientes"
142
74
143−#. TRANSLATORS: Number of persons who rated this app
75+#: Dash/Apps/AppPreview.qml:135
76+msgid "Rate this"
77+msgstr "Valorar esto"
78+
144#. TRANSLATORS: Number of persons who rated this app/video/whatever
79#. TRANSLATORS: Number of persons who rated this app/video/whatever
145−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
80+#: Dash/Previews/Header.qml:93
146#, qt-format
81#, qt-format
147msgid "(%1)"
82msgid "(%1)"
148msgstr "(%1)"
83msgstr "(%1)"
149
84
150−#. TRANSLATORS: Number of persons who wrote reviews for this app
151#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
85#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
152−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
86+#: Dash/Previews/Header.qml:105
153#, qt-format
87#, qt-format
154msgid "%1 review"
88msgid "%1 review"
155msgid_plural "%1 reviews"
89msgid_plural "%1 reviews"
156msgstr[0] "%1 reseña"
90msgstr[0] "%1 reseña"
157msgstr[1] "%1 reseñas"
91msgstr[1] "%1 reseñas"
158
92
159−#: Dash/Apps/AppPreview.qml:135
160−msgid "Rate this"
161−msgstr "Valorar esto"
162−
163#: Dash/Previews/Reviews.qml:74
93#: Dash/Previews/Reviews.qml:74
164msgid "Add a review"
94msgid "Add a review"
165msgstr "Añadir una reseña"
95msgstr "Añadir una reseña"
@@ -176,7 +106,7 @@ msgstr "Enviar"
176msgid "Comments:"
106msgid "Comments:"
177msgstr "Comentarios:"
107msgstr "Comentarios:"
178
108
179−#: Greeter/Lockscreen.qml:146
109+#: Greeter/Lockscreen.qml:149
180msgid "Emergency Call"
110msgid "Emergency Call"
181msgstr "Llamada de emergencia"
111msgstr "Llamada de emergencia"
182
112
@@ -226,15 +156,7 @@ msgstr "Mantener en el lanzador"
226msgid "Unlock from Launcher"
156msgid "Unlock from Launcher"
227msgstr "No mantener en el lanzador"
157msgstr "No mantener en el lanzador"
228
158
229−#: plugins/Unity/scope.cpp:408
230−msgid "Sorry, there is nothing that matches your search."
231−msgstr "No hay nada que coincida con su búsqueda."
232−
233−#: plugins/Unity/showallfilteroption.cpp:41
234−msgid "All"
235−msgstr "Todo"
236−
237−#: Shell.qml:441
159+#: Shell.qml:439
238#, qt-format
160#, qt-format
239msgid "Please enter %1"
161msgid "Please enter %1"
240msgstr "Introduzca %1"
162msgstr "Introduzca %1"
po/fa.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-10-31 19:02+0000\n"
11"PO-Revision-Date: 2013-10-31 19:02+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Persian <fa@li.org>\n"
13"Language-Team: Persian <fa@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr ""
69msgstr ""
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/fi.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-11-20 08:09+0000\n"
11"PO-Revision-Date: 2013-11-20 08:09+0000\n"
12"Last-Translator: Jiri Grönroos <Unknown>\n"
12"Last-Translator: Jiri Grönroos <Unknown>\n"
13"Language-Team: Finnish <fi@li.org>\n"
13"Language-Team: Finnish <fi@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-21 06:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Puhelin"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Kamera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galleria"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Selain"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Sää"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Muistio"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Kalenteri"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Mediasoitin"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Kartta"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipedia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -134,30 +66,28 @@ msgstr ""
134"Hallitset nyt reunaeleet, joten voit aloittaa puhelimen "
66"Hallitset nyt reunaeleet, joten voit aloittaa puhelimen "
135"käytön<br><br>Napauta missä tahansa aloittaaksesi"
67"käytön<br><br>Napauta missä tahansa aloittaaksesi"
136
68
137−#: Components/PageHeader.qml:345
69+#: Components/PageHeader.qml:364
138msgid "Recent searches"
70msgid "Recent searches"
139msgstr "Viimeisimmät haut"
71msgstr "Viimeisimmät haut"
140
72
141−#. TRANSLATORS: Number of persons who rated this app
73+#: Dash/Apps/AppPreview.qml:135
74+msgid "Rate this"
75+msgstr "Arvioi tämä"
76+
142#. TRANSLATORS: Number of persons who rated this app/video/whatever
77#. TRANSLATORS: Number of persons who rated this app/video/whatever
143−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
78+#: Dash/Previews/Header.qml:93
144#, qt-format
79#, qt-format
145msgid "(%1)"
80msgid "(%1)"
146msgstr "(%1)"
81msgstr "(%1)"
147
82
148−#. TRANSLATORS: Number of persons who wrote reviews for this app
149#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
83#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
150−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
84+#: Dash/Previews/Header.qml:105
151#, qt-format
85#, qt-format
152msgid "%1 review"
86msgid "%1 review"
153msgid_plural "%1 reviews"
87msgid_plural "%1 reviews"
154msgstr[0] "%1 arvostelu"
88msgstr[0] "%1 arvostelu"
155msgstr[1] "%1 arvostelua"
89msgstr[1] "%1 arvostelua"
156
90
157−#: Dash/Apps/AppPreview.qml:135
158−msgid "Rate this"
159−msgstr "Arvioi tämä"
160−
161#: Dash/Previews/Reviews.qml:74
91#: Dash/Previews/Reviews.qml:74
162msgid "Add a review"
92msgid "Add a review"
163msgstr "Lisää arvostelu"
93msgstr "Lisää arvostelu"
@@ -174,7 +104,7 @@ msgstr "Lähetä"
174msgid "Comments:"
104msgid "Comments:"
175msgstr "Kommentit:"
105msgstr "Kommentit:"
176
106
177−#: Greeter/Lockscreen.qml:146
107+#: Greeter/Lockscreen.qml:149
178msgid "Emergency Call"
108msgid "Emergency Call"
179msgstr "Hätäpuhelu"
109msgstr "Hätäpuhelu"
180
110
@@ -224,15 +154,7 @@ msgstr "Kiinnitä käynnistimeen"
224msgid "Unlock from Launcher"
154msgid "Unlock from Launcher"
225msgstr "Poista käynnistimestä"
155msgstr "Poista käynnistimestä"
226
156
227−#: plugins/Unity/scope.cpp:408
228−msgid "Sorry, there is nothing that matches your search."
229−msgstr "Hakuun täsmääviä tuloksia ei löydy."
230−
231−#: plugins/Unity/showallfilteroption.cpp:41
232−msgid "All"
233−msgstr "Kaikki"
234−
235−#: Shell.qml:441
157+#: Shell.qml:439
236#, qt-format
158#, qt-format
237msgid "Please enter %1"
159msgid "Please enter %1"
238msgstr "Kirjoita %1"
160msgstr "Kirjoita %1"
po/fo.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-10-01 15:13+0000\n"
11"PO-Revision-Date: 2013-10-01 15:13+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"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Fartelefon"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Myndatól"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Myndasavn"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Kagi"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Veðrið"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Skriviblokkur"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Kalendari"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr ""
69msgstr ""
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "Tíanverri er tað einki sum hóskar til tína leiting."
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/fr.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-06-27 03:21+0000\n"
11"PO-Revision-Date: 2013-06-27 03:21+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: French <fr@li.org>\n"
13"Language-Team: French <fr@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr ""
69msgstr ""
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/gd.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-09-30 10:34+0000\n"
11"PO-Revision-Date: 2013-09-30 10:34+0000\n"
12"Last-Translator: Akerbeltz <fios@akerbeltz.org>\n"
12"Last-Translator: Akerbeltz <fios@akerbeltz.org>\n"
13"Language-Team: Gaelic; Scottish <gd@li.org>\n"
13"Language-Team: Gaelic; Scottish <gd@li.org>\n"
@@ -16,76 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
17"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
18"(n > 2 && n < 20) ? 2 : 3;\n"
18"(n > 2 && n < 20) ? 2 : 3;\n"
19−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20−"X-Generator: Launchpad (build 16831)\n"
20+"X-Generator: Launchpad (build 16856)\n"
21−
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr "Fòn"
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr "Camara"
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr "Gailearaidh"
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr "Facebook"
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr "Brabhsair"
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr "Twitter"
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr "GMail"
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr "An aimsir"
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr "Pada nan nòtaichean"
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr "Am mìosachan"
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr "Cluicheadair mheadhanan"
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr "Evernote"
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr "Mapa"
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr "Pinterest"
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr "SoundCloud"
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr "An Uicipeid"
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr "YouTube"
89
21
90#: Components/EdgeDemoOverlay.qml:151
22#: Components/EdgeDemoOverlay.qml:151
91msgid "Skip intro"
23msgid "Skip intro"
@@ -139,20 +71,22 @@ msgid ""
139"phone<br><br>Tap anywhere to start"
71"phone<br><br>Tap anywhere to start"
140msgstr ""
72msgstr ""
141
73
142−#: Components/PageHeader.qml:345
74+#: Components/PageHeader.qml:364
143msgid "Recent searches"
75msgid "Recent searches"
144msgstr "Na lorg thu o chionn goirid"
76msgstr "Na lorg thu o chionn goirid"
145
77
146−#. TRANSLATORS: Number of persons who rated this app
78+#: Dash/Apps/AppPreview.qml:135
79+msgid "Rate this"
80+msgstr "Rangaich seo"
81+
147#. TRANSLATORS: Number of persons who rated this app/video/whatever
82#. TRANSLATORS: Number of persons who rated this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
83+#: Dash/Previews/Header.qml:93
149#, qt-format
84#, qt-format
150msgid "(%1)"
85msgid "(%1)"
151msgstr "(%1)"
86msgstr "(%1)"
152
87
153−#. TRANSLATORS: Number of persons who wrote reviews for this app
154#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
88#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
155−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
89+#: Dash/Previews/Header.qml:105
156#, qt-format
90#, qt-format
157msgid "%1 review"
91msgid "%1 review"
158msgid_plural "%1 reviews"
92msgid_plural "%1 reviews"
@@ -161,10 +95,6 @@ msgstr[1] "%1 lèirmheas"
161msgstr[2] "%1 lèirmheasan"
95msgstr[2] "%1 lèirmheasan"
162msgstr[3] "%1 lèirmheas"
96msgstr[3] "%1 lèirmheas"
163
97
164−#: Dash/Apps/AppPreview.qml:135
165−msgid "Rate this"
166−msgstr "Rangaich seo"
167−
168#: Dash/Previews/Reviews.qml:74
98#: Dash/Previews/Reviews.qml:74
169msgid "Add a review"
99msgid "Add a review"
170msgstr "Cuir lèirmheas ris"
100msgstr "Cuir lèirmheas ris"
@@ -181,7 +111,7 @@ msgstr "Cuir"
181msgid "Comments:"
111msgid "Comments:"
182msgstr "Beachdan"
112msgstr "Beachdan"
183
113
184−#: Greeter/Lockscreen.qml:146
114+#: Greeter/Lockscreen.qml:149
185msgid "Emergency Call"
115msgid "Emergency Call"
186msgstr "Gairm èiginn"
116msgstr "Gairm èiginn"
187
117
@@ -231,15 +161,7 @@ msgstr ""
231msgid "Unlock from Launcher"
161msgid "Unlock from Launcher"
232msgstr ""
162msgstr ""
233
163
234−#: plugins/Unity/scope.cpp:408
235−msgid "Sorry, there is nothing that matches your search."
236−msgstr "Tha sinn duilich ach chan eil dad a' freagairt ris na lorg thu."
237−
238−#: plugins/Unity/showallfilteroption.cpp:41
239−msgid "All"
240−msgstr ""
241−
242−#: Shell.qml:441
164+#: Shell.qml:439
243#, qt-format
165#, qt-format
244msgid "Please enter %1"
166msgid "Please enter %1"
245msgstr "Cuir a-steach %1"
167msgstr "Cuir a-steach %1"
po/gl.po+16−94
@@ -7,84 +7,16 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-10-03 18:49+0000\n"
11+"PO-Revision-Date: 2013-12-06 17:15+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"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-12-07 06:35+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16869)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Teléfono"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Cámara"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galería"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Navegador"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "O tempo"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Bloc de notas"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Calendario"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Reprodutor multimedia"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Mapa"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipedia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -134,30 +66,28 @@ msgstr ""
134"Xa domina os xestos desde os bordos e pode comezar a usar o "
66"Xa domina os xestos desde os bordos e pode comezar a usar o "
135"móbil<br><br>Toque en calquera sitio para comezar"
67"móbil<br><br>Toque en calquera sitio para comezar"
136
68
137−#: Components/PageHeader.qml:345
69+#: Components/PageHeader.qml:364
138msgid "Recent searches"
70msgid "Recent searches"
139msgstr "Buscas recentes"
71msgstr "Buscas recentes"
140
72
141−#. TRANSLATORS: Number of persons who rated this app
73+#: Dash/Apps/AppPreview.qml:135
74+msgid "Rate this"
75+msgstr "Valore isto"
76+
142#. TRANSLATORS: Number of persons who rated this app/video/whatever
77#. TRANSLATORS: Number of persons who rated this app/video/whatever
143−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
78+#: Dash/Previews/Header.qml:93
144#, qt-format
79#, qt-format
145msgid "(%1)"
80msgid "(%1)"
146msgstr "(%1)"
81msgstr "(%1)"
147
82
148−#. TRANSLATORS: Number of persons who wrote reviews for this app
149#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
83#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
150−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
84+#: Dash/Previews/Header.qml:105
151#, qt-format
85#, qt-format
152msgid "%1 review"
86msgid "%1 review"
153msgid_plural "%1 reviews"
87msgid_plural "%1 reviews"
154msgstr[0] "%1 opinión"
88msgstr[0] "%1 opinión"
155msgstr[1] "%1 opinións"
89msgstr[1] "%1 opinións"
156
90
157−#: Dash/Apps/AppPreview.qml:135
158−msgid "Rate this"
159−msgstr "Valore isto"
160−
161#: Dash/Previews/Reviews.qml:74
91#: Dash/Previews/Reviews.qml:74
162msgid "Add a review"
92msgid "Add a review"
163msgstr "Engadir unha opinión"
93msgstr "Engadir unha opinión"
@@ -174,7 +104,7 @@ msgstr "Enviar"
174msgid "Comments:"
104msgid "Comments:"
175msgstr "Comentarios:"
105msgstr "Comentarios:"
176
106
177−#: Greeter/Lockscreen.qml:146
107+#: Greeter/Lockscreen.qml:149
178msgid "Emergency Call"
108msgid "Emergency Call"
179msgstr "Chamada de emerxencia"
109msgstr "Chamada de emerxencia"
180
110
@@ -209,7 +139,7 @@ msgstr "Falando…"
209
139
210#: Notifications/NotificationMenuItemFactory.qml:89
140#: Notifications/NotificationMenuItemFactory.qml:89
211msgid "Show password"
141msgid "Show password"
212−msgstr ""
142+msgstr "Mostrar contrasinal"
213
143
214#: Panel/SearchIndicator.qml:27
144#: Panel/SearchIndicator.qml:27
215msgid "Search"
145msgid "Search"
@@ -218,21 +148,13 @@ msgstr "Buscar"
218#: plugins/Unity/Launcher/launcheritem.cpp:43
148#: plugins/Unity/Launcher/launcheritem.cpp:43
219#: plugins/Unity/Launcher/launcheritem.cpp:73
149#: plugins/Unity/Launcher/launcheritem.cpp:73
220msgid "Lock to Launcher"
150msgid "Lock to Launcher"
221−msgstr ""
151+msgstr "Manter no Iniciador"
222
152
223#: plugins/Unity/Launcher/launcheritem.cpp:73
153#: plugins/Unity/Launcher/launcheritem.cpp:73
224msgid "Unlock from Launcher"
154msgid "Unlock from Launcher"
225−msgstr ""
155+msgstr "Non manter no Iniciador"
226−
227−#: plugins/Unity/scope.cpp:408
228−msgid "Sorry, there is nothing that matches your search."
229−msgstr "Sentímolo, non hai nada que coincida con esta busca."
230−
231−#: plugins/Unity/showallfilteroption.cpp:41
232−msgid "All"
233−msgstr "Todo"
234
156
235−#: Shell.qml:441
157+#: Shell.qml:439
236#, qt-format
158#, qt-format
237msgid "Please enter %1"
159msgid "Please enter %1"
238msgstr "Introduza %1"
160msgstr "Introduza %1"
po/he.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-11-20 08:30+0000\n"
11"PO-Revision-Date: 2013-11-20 08:30+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"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-21 06:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "טלפון"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "מצלמה"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "גלריה"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "דפדפן"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "מזג אוויר"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "פנקס רשימות"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "לוח שנה"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "נגן מדיה"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "מפה"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "ויקיפדיה"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -134,30 +66,28 @@ msgstr ""
134"עתה מכשסיימת את ההשתלמות לשימוש במחוות קצה יש לך את הכלים להשתמש "
66"עתה מכשסיימת את ההשתלמות לשימוש במחוות קצה יש לך את הכלים להשתמש "
135"בטלפון<br><br>ניתן לגעת במקום כלשהו במסך כדי להתחיל"
67"בטלפון<br><br>ניתן לגעת במקום כלשהו במסך כדי להתחיל"
136
68
137−#: Components/PageHeader.qml:345
69+#: Components/PageHeader.qml:364
138msgid "Recent searches"
70msgid "Recent searches"
139msgstr "חיפושים אחרונים"
71msgstr "חיפושים אחרונים"
140
72
141−#. TRANSLATORS: Number of persons who rated this app
73+#: Dash/Apps/AppPreview.qml:135
74+msgid "Rate this"
75+msgstr "דירוג היישום"
76+
142#. TRANSLATORS: Number of persons who rated this app/video/whatever
77#. TRANSLATORS: Number of persons who rated this app/video/whatever
143−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
78+#: Dash/Previews/Header.qml:93
144#, qt-format
79#, qt-format
145msgid "(%1)"
80msgid "(%1)"
146msgstr "(%1)"
81msgstr "(%1)"
147
82
148−#. TRANSLATORS: Number of persons who wrote reviews for this app
149#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
83#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
150−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
84+#: Dash/Previews/Header.qml:105
151#, qt-format
85#, qt-format
152msgid "%1 review"
86msgid "%1 review"
153msgid_plural "%1 reviews"
87msgid_plural "%1 reviews"
154msgstr[0] "סקירה %1"
88msgstr[0] "סקירה %1"
155msgstr[1] "%1 סקירות"
89msgstr[1] "%1 סקירות"
156
90
157−#: Dash/Apps/AppPreview.qml:135
158−msgid "Rate this"
159−msgstr "דירוג היישום"
160−
161#: Dash/Previews/Reviews.qml:74
91#: Dash/Previews/Reviews.qml:74
162msgid "Add a review"
92msgid "Add a review"
163msgstr "הוספת סקירה"
93msgstr "הוספת סקירה"
@@ -174,7 +104,7 @@ msgstr "שליחה"
174msgid "Comments:"
104msgid "Comments:"
175msgstr "הערות:"
105msgstr "הערות:"
176
106
177−#: Greeter/Lockscreen.qml:146
107+#: Greeter/Lockscreen.qml:149
178msgid "Emergency Call"
108msgid "Emergency Call"
179msgstr "שיחת חירום"
109msgstr "שיחת חירום"
180
110
@@ -224,15 +154,7 @@ msgstr "נעילה למשגר"
224msgid "Unlock from Launcher"
154msgid "Unlock from Launcher"
225msgstr "הפרדה מהמשגר"
155msgstr "הפרדה מהמשגר"
226
156
227−#: plugins/Unity/scope.cpp:408
228−msgid "Sorry, there is nothing that matches your search."
229−msgstr "שום דבר אינו תואם לחיפוש שלך, עמך הסליחה."
230−
231−#: plugins/Unity/showallfilteroption.cpp:41
232−msgid "All"
233−msgstr "הכול"
234−
235−#: Shell.qml:441
157+#: Shell.qml:439
236#, qt-format
158#, qt-format
237msgid "Please enter %1"
159msgid "Please enter %1"
238msgstr "נא להזין %1"
160msgstr "נא להזין %1"
po/hr.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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"
@@ -16,76 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20−"X-Generator: Launchpad (build 16831)\n"
20+"X-Generator: Launchpad (build 16856)\n"
21−
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr ""
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr ""
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr ""
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr ""
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr ""
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr ""
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr ""
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr ""
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr ""
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr ""
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr ""
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr ""
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr ""
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr ""
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr ""
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr ""
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr ""
89
21
90#: Components/EdgeDemoOverlay.qml:151
22#: Components/EdgeDemoOverlay.qml:151
91msgid "Skip intro"
23msgid "Skip intro"
@@ -133,30 +65,28 @@ msgid ""
133"phone<br><br>Tap anywhere to start"
65"phone<br><br>Tap anywhere to start"
134msgstr ""
66msgstr ""
135
67
136−#: Components/PageHeader.qml:345
68+#: Components/PageHeader.qml:364
137msgid "Recent searches"
69msgid "Recent searches"
138msgstr "Nedavne pretrage"
70msgstr "Nedavne pretrage"
139
71
140−#. TRANSLATORS: Number of persons who rated this app
72+#: Dash/Apps/AppPreview.qml:135
73+msgid "Rate this"
74+msgstr ""
75+
141#. TRANSLATORS: Number of persons who rated this app/video/whatever
76#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
77+#: Dash/Previews/Header.qml:93
143#, qt-format
78#, qt-format
144msgid "(%1)"
79msgid "(%1)"
145msgstr ""
80msgstr ""
146
81
147−#. TRANSLATORS: Number of persons who wrote reviews for this app
148#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
82#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
83+#: Dash/Previews/Header.qml:105
150#, qt-format
84#, qt-format
151msgid "%1 review"
85msgid "%1 review"
152msgid_plural "%1 reviews"
86msgid_plural "%1 reviews"
153msgstr[0] ""
87msgstr[0] ""
154msgstr[1] ""
88msgstr[1] ""
155
89
156−#: Dash/Apps/AppPreview.qml:135
157−msgid "Rate this"
158−msgstr ""
159−
160#: Dash/Previews/Reviews.qml:74
90#: Dash/Previews/Reviews.qml:74
161msgid "Add a review"
91msgid "Add a review"
162msgstr ""
92msgstr ""
@@ -173,7 +103,7 @@ msgstr ""
173msgid "Comments:"
103msgid "Comments:"
174msgstr ""
104msgstr ""
175
105
176−#: Greeter/Lockscreen.qml:146
106+#: Greeter/Lockscreen.qml:149
177msgid "Emergency Call"
107msgid "Emergency Call"
178msgstr ""
108msgstr ""
179
109
@@ -223,15 +153,7 @@ msgstr ""
223msgid "Unlock from Launcher"
153msgid "Unlock from Launcher"
224msgstr ""
154msgstr ""
225
155
226−#: plugins/Unity/scope.cpp:408
227−msgid "Sorry, there is nothing that matches your search."
228−msgstr "Nažalost, ne postoji ništa što odgovara vašoj pretrazi."
229−
230−#: plugins/Unity/showallfilteroption.cpp:41
231−msgid "All"
232−msgstr ""
233−
234−#: Shell.qml:441
156+#: Shell.qml:439
235#, qt-format
157#, qt-format
236msgid "Please enter %1"
158msgid "Please enter %1"
237msgstr ""
159msgstr ""
po/hu.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-06-27 04:28+0000\n"
11"PO-Revision-Date: 2013-06-27 04:28+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: Hungarian <hu@li.org>\n"
13"Language-Team: Hungarian <hu@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr "Legutóbbi keresések"
69msgstr "Legutóbbi keresések"
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "Elnézést, nincs találat a keresésre."
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/hy.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr "Վերջին որոնումներ"
69msgstr "Վերջին որոնումներ"
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "Կներերք, բայց Ձեր հարցումով ոչինչ չկար"
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/id.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr ""
69msgstr ""
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/is.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-09-18 16:22+0000\n"
11"PO-Revision-Date: 2013-09-18 16:22+0000\n"
12"Last-Translator: Andri Thorlacius <Unknown>\n"
12"Last-Translator: Andri Thorlacius <Unknown>\n"
13"Language-Team: Icelandic <is@li.org>\n"
13"Language-Team: Icelandic <is@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Sími"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Myndavél"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Myndasafn"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Vafri"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Veður"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Skrifblokk"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Dagatal"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Margmiðlunarspilari"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Kort"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipedia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -133,30 +65,28 @@ msgid ""
133"phone<br><br>Tap anywhere to start"
65"phone<br><br>Tap anywhere to start"
134msgstr ""
66msgstr ""
135
67
136−#: Components/PageHeader.qml:345
68+#: Components/PageHeader.qml:364
137msgid "Recent searches"
69msgid "Recent searches"
138msgstr "Nýlegar leitir"
70msgstr "Nýlegar leitir"
139
71
140−#. TRANSLATORS: Number of persons who rated this app
72+#: Dash/Apps/AppPreview.qml:135
73+msgid "Rate this"
74+msgstr "Gefa þessu einkunn"
75+
141#. TRANSLATORS: Number of persons who rated this app/video/whatever
76#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
77+#: Dash/Previews/Header.qml:93
143#, qt-format
78#, qt-format
144msgid "(%1)"
79msgid "(%1)"
145msgstr "(%1)"
80msgstr "(%1)"
146
81
147−#. TRANSLATORS: Number of persons who wrote reviews for this app
148#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
82#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
83+#: Dash/Previews/Header.qml:105
150#, qt-format
84#, qt-format
151msgid "%1 review"
85msgid "%1 review"
152msgid_plural "%1 reviews"
86msgid_plural "%1 reviews"
153msgstr[0] "%1 ummæli"
87msgstr[0] "%1 ummæli"
154msgstr[1] "%1 ummæli"
88msgstr[1] "%1 ummæli"
155
89
156−#: Dash/Apps/AppPreview.qml:135
157−msgid "Rate this"
158−msgstr "Gefa þessu einkunn"
159−
160#: Dash/Previews/Reviews.qml:74
90#: Dash/Previews/Reviews.qml:74
161msgid "Add a review"
91msgid "Add a review"
162msgstr "Gefa umsögn"
92msgstr "Gefa umsögn"
@@ -173,7 +103,7 @@ msgstr "Senda"
173msgid "Comments:"
103msgid "Comments:"
174msgstr "Athugasemdir:"
104msgstr "Athugasemdir:"
175
105
176−#: Greeter/Lockscreen.qml:146
106+#: Greeter/Lockscreen.qml:149
177msgid "Emergency Call"
107msgid "Emergency Call"
178msgstr "Neyðarsímtal"
108msgstr "Neyðarsímtal"
179
109
@@ -223,15 +153,7 @@ msgstr ""
223msgid "Unlock from Launcher"
153msgid "Unlock from Launcher"
224msgstr ""
154msgstr ""
225
155
226−#: plugins/Unity/scope.cpp:408
227−msgid "Sorry, there is nothing that matches your search."
228−msgstr "Því miður, það var ekkert sem passaði við leitarorðið þitt."
229−
230−#: plugins/Unity/showallfilteroption.cpp:41
231−msgid "All"
232−msgstr ""
233−
234−#: Shell.qml:441
156+#: Shell.qml:439
235#, qt-format
157#, qt-format
236msgid "Please enter %1"
158msgid "Please enter %1"
237msgstr ""
159msgstr ""
po/it.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-10-07 09:34+0000\n"
11"PO-Revision-Date: 2013-10-07 09:34+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"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Telefono"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Fotocamera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galleria"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Browser"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Meteo"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Blocco note"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Calendario"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Riproduttore multimediale"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Mappa"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipedia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -139,30 +71,28 @@ msgstr ""
139"I gesti sui bordi sono stati configurati ed è possibile iniziare a usare il "
71"I gesti sui bordi sono stati configurati ed è possibile iniziare a usare il "
140"telefono<br><br>Toccare in un punto qualunque per iniziare"
72"telefono<br><br>Toccare in un punto qualunque per iniziare"
141
73
142−#: Components/PageHeader.qml:345
74+#: Components/PageHeader.qml:364
143msgid "Recent searches"
75msgid "Recent searches"
144msgstr "Ricerche recenti"
76msgstr "Ricerche recenti"
145
77
146−#. TRANSLATORS: Number of persons who rated this app
78+#: Dash/Apps/AppPreview.qml:135
79+msgid "Rate this"
80+msgstr "Valuta"
81+
147#. TRANSLATORS: Number of persons who rated this app/video/whatever
82#. TRANSLATORS: Number of persons who rated this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
83+#: Dash/Previews/Header.qml:93
149#, qt-format
84#, qt-format
150msgid "(%1)"
85msgid "(%1)"
151msgstr "(%1)"
86msgstr "(%1)"
152
87
153−#. TRANSLATORS: Number of persons who wrote reviews for this app
154#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
88#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
155−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
89+#: Dash/Previews/Header.qml:105
156#, qt-format
90#, qt-format
157msgid "%1 review"
91msgid "%1 review"
158msgid_plural "%1 reviews"
92msgid_plural "%1 reviews"
159msgstr[0] "%1 recensione"
93msgstr[0] "%1 recensione"
160msgstr[1] "%1 recensioni"
94msgstr[1] "%1 recensioni"
161
95
162−#: Dash/Apps/AppPreview.qml:135
163−msgid "Rate this"
164−msgstr "Valuta"
165−
166#: Dash/Previews/Reviews.qml:74
96#: Dash/Previews/Reviews.qml:74
167msgid "Add a review"
97msgid "Add a review"
168msgstr "Aggiungi una recensione"
98msgstr "Aggiungi una recensione"
@@ -179,7 +109,7 @@ msgstr "Invia"
179msgid "Comments:"
109msgid "Comments:"
180msgstr "Commenti:"
110msgstr "Commenti:"
181
111
182−#: Greeter/Lockscreen.qml:146
112+#: Greeter/Lockscreen.qml:149
183msgid "Emergency Call"
113msgid "Emergency Call"
184msgstr "Chiamata di emergenza"
114msgstr "Chiamata di emergenza"
185
115
@@ -229,15 +159,7 @@ msgstr ""
229msgid "Unlock from Launcher"
159msgid "Unlock from Launcher"
230msgstr ""
160msgstr ""
231
161
232−#: plugins/Unity/scope.cpp:408
233−msgid "Sorry, there is nothing that matches your search."
234−msgstr "Nessun risultato corrispondente alla ricerca."
235−
236−#: plugins/Unity/showallfilteroption.cpp:41
237−msgid "All"
238−msgstr "Tutto"
239−
240−#: Shell.qml:441
162+#: Shell.qml:439
241#, qt-format
163#, qt-format
242msgid "Please enter %1"
164msgid "Please enter %1"
243msgstr "Inserire %1"
165msgstr "Inserire %1"
po/ja.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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: Japanese <ja@li.org>\n"
13"Language-Team: Japanese <ja@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr ""
69msgstr ""
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/km.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-11-20 07:34+0000\n"
11"PO-Revision-Date: 2013-11-20 07:34+0000\n"
12"Last-Translator: Khoem Sokhem <khoemsokhem@khmeros.info>\n"
12"Last-Translator: Khoem Sokhem <khoemsokhem@khmeros.info>\n"
13"Language-Team: Khmer <km@li.org>\n"
13"Language-Team: Khmer <km@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-21 06:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "ទូរស័ព្ទ"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "ម៉ាស៊ីន​ថ​ត"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "វិចិត្រសាល"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "កម្មវិធី​រុករក"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "អាកាសធាតុ"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Notepad"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "ប្រតិទិន"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "កម្មវិធី​ចាក់​មេឌៀ"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "ផែនទី"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "វីគីភីឌៀ"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -137,29 +69,27 @@ msgstr ""
137"និង​អាច​ចាប់ផ្ដើម​ប្រើ​ទូរស័ព្ទ​បាន<br><br>ប៉ះ​កន្លែង​ណា​មួយ​ "
69"និង​អាច​ចាប់ផ្ដើម​ប្រើ​ទូរស័ព្ទ​បាន<br><br>ប៉ះ​កន្លែង​ណា​មួយ​ "
138"ដើម្បី​ចាប់ផ្ដើម"
70"ដើម្បី​ចាប់ផ្ដើម"
139
71
140−#: Components/PageHeader.qml:345
72+#: Components/PageHeader.qml:364
141msgid "Recent searches"
73msgid "Recent searches"
142msgstr "ការ​ស្វែងរក​ថ្មី"
74msgstr "ការ​ស្វែងរក​ថ្មី"
143
75
144−#. TRANSLATORS: Number of persons who rated this app
76+#: Dash/Apps/AppPreview.qml:135
77+msgid "Rate this"
78+msgstr "វាយតម្លៃ​វា"
79+
145#. TRANSLATORS: Number of persons who rated this app/video/whatever
80#. TRANSLATORS: Number of persons who rated this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
81+#: Dash/Previews/Header.qml:93
147#, qt-format
82#, qt-format
148msgid "(%1)"
83msgid "(%1)"
149msgstr "(%1)"
84msgstr "(%1)"
150
85
151−#. TRANSLATORS: Number of persons who wrote reviews for this app
152#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
86#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
153−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
87+#: Dash/Previews/Header.qml:105
154#, qt-format
88#, qt-format
155msgid "%1 review"
89msgid "%1 review"
156msgid_plural "%1 reviews"
90msgid_plural "%1 reviews"
157msgstr[0] "ពិនិត្យ​មើល %1"
91msgstr[0] "ពិនិត្យ​មើល %1"
158
92
159−#: Dash/Apps/AppPreview.qml:135
160−msgid "Rate this"
161−msgstr "វាយតម្លៃ​វា"
162−
163#: Dash/Previews/Reviews.qml:74
93#: Dash/Previews/Reviews.qml:74
164msgid "Add a review"
94msgid "Add a review"
165msgstr "បន្ថែម​ការ​ពិនិត្យ"
95msgstr "បន្ថែម​ការ​ពិនិត្យ"
@@ -176,7 +106,7 @@ msgstr "ផ្ញើ"
176msgid "Comments:"
106msgid "Comments:"
177msgstr "មតិយោបល់៖"
107msgstr "មតិយោបល់៖"
178
108
179−#: Greeter/Lockscreen.qml:146
109+#: Greeter/Lockscreen.qml:149
180msgid "Emergency Call"
110msgid "Emergency Call"
181msgstr "ការ​ហៅ​ពេល​អាសន្ន"
111msgstr "ការ​ហៅ​ពេល​អាសន្ន"
182
112
@@ -226,15 +156,7 @@ msgstr "ចាក់​សោ​​ទៅ​កម្មវិធី​ចាប
226msgid "Unlock from Launcher"
156msgid "Unlock from Launcher"
227msgstr "ដោះសោ​ពី​កម្មវិធី​ចាប់ផ្ដើម"
157msgstr "ដោះសោ​ពី​កម្មវិធី​ចាប់ផ្ដើម"
228
158
229−#: plugins/Unity/scope.cpp:408
230−msgid "Sorry, there is nothing that matches your search."
231−msgstr "សូម​ទោស មិនមាន​ពាក្យ​ដែល​អ្នក​ស្វែងរក​ទេ​។"
232−
233−#: plugins/Unity/showallfilteroption.cpp:41
234−msgid "All"
235−msgstr "ទាំង​អស់"
236−
237−#: Shell.qml:441
159+#: Shell.qml:439
238#, qt-format
160#, qt-format
239msgid "Please enter %1"
161msgid "Please enter %1"
240msgstr "សូម​បញ្ចូល %1"
162msgstr "សូម​បញ្ចូល %1"
po/kn.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr "ಇತ್ತೀಚಿನ ಹುಡುಕಾಟಗಳು"
69msgstr "ಇತ್ತೀಚಿನ ಹುಡುಕಾಟಗಳು"
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "ಕ್ಷಮಿಸಿ ನಿಮ್ಮ ಶೋಧನೆಗೆ ಸರಿಯಾದ ಹೊಂದಾಣಿಕೆಗಳು ದೊರಕುತ್ತಿಲ್ಲ"
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/ko.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-10-10 07:04+0000\n"
11"PO-Revision-Date: 2013-10-10 07:04+0000\n"
12"Last-Translator: Kim Boram <boramism@gmail.com>\n"
12"Last-Translator: Kim Boram <boramism@gmail.com>\n"
13"Language-Team: Korean <ko@li.org>\n"
13"Language-Team: Korean <ko@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "전화"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "카메라"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "갤러리"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "페이스북"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "브라우저"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "트위터"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "지메일"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "날씨"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "메모장"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "달력"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "미디어 재생기"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "에버노트"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "지도"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "핀터레스트"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "사운드클라우드"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "위키백과"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "유튜브"
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr "최근 검색"
69msgstr "최근 검색"
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/ky.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr "Соңку издөөлөр"
69msgstr "Соңку издөөлөр"
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "Тилекке каршы, сиздин издөөңүзгө эч нерсе дал келген жок."
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/lo.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "ໂທລະສັບ"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "ກ້ອງ"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Gallery"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "ບາວເຊິ"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "ສະພາບອາກາດ"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Noetpad"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "ປະຕິທິນ"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "ເເຜນທີ່"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "ິYouTube"
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr ""
69msgstr ""
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr "(%1)"
79msgstr "(%1)"
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr "ສົ່ງ"
172msgid "Comments:"
102msgid "Comments:"
173msgstr "ຄໍ່ເຫັນ"
103msgstr "ຄໍ່ເຫັນ"
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr "ທັງໝົດ"
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr "ກະລູນາປ້ອນ %1"
158msgstr "ກະລູນາປ້ອນ %1"
po/lv.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-09-28 16:29+0000\n"
11"PO-Revision-Date: 2013-09-28 16:29+0000\n"
12"Last-Translator: Jānis-Marks Gailis <jeanmarc.gailis@gmail.com>\n"
12"Last-Translator: Jānis-Marks Gailis <jeanmarc.gailis@gmail.com>\n"
13"Language-Team: Latvian <lv@li.org>\n"
13"Language-Team: Latvian <lv@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Tālrunis"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Fotokamera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galerija"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Pārlūkprogramma"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Laikapstākļi"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Bloknots"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Kalendārs"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Mēdiju Atskaņotājs"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Karte"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Vikipēdija"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr "Nesen veiktās meklēšanas"
69msgstr "Nesen veiktās meklēšanas"
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "Diemžēl nekas neatbilst jūsu meklētajam."
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/ml.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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: STyM Alfazz <Unknown>\n"
12"Last-Translator: STyM Alfazz <Unknown>\n"
13"Language-Team: Malayalam <ml@li.org>\n"
13"Language-Team: Malayalam <ml@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-24 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "ഫോണ്‍"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "ക്യാമറ"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "ഗ്യാലറി"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "ഫേസ്ബുക്ക്"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "ബ്രൗസര്‍"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "ട്വിറ്റര്‍"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "ജിമെയില്‍"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "കാലാവസ്ഥ"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "നോട്പാഡ്"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "കലണ്ടര്‍"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "മീഡിയ പ്ലെയര്‍"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "എവര്‍നോട്ട്"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "ഭുപടം"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "പിന്‍ട്രസ്റ്റ്"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "സൗണ്ട്ക്ലൗഡ്"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "വിക്കിപീഡിയ"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "യുട്യൂബ്"
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -136,30 +68,28 @@ msgstr ""
136"നിങ്ങളിപ്പോള്‍ സ്വൈപുകളും മറ്റും പഠിച്ചിരിക്കുന്നു<br><br>തുടങ്ങാന്‍ "
68"നിങ്ങളിപ്പോള്‍ സ്വൈപുകളും മറ്റും പഠിച്ചിരിക്കുന്നു<br><br>തുടങ്ങാന്‍ "
137"എവിടെയെങ്കിലും ടാപ് ചെയ്യുക"
69"എവിടെയെങ്കിലും ടാപ് ചെയ്യുക"
138
70
139−#: Components/PageHeader.qml:345
71+#: Components/PageHeader.qml:364
140msgid "Recent searches"
72msgid "Recent searches"
141msgstr "സമീപകാല തിരയലുകള്‍"
73msgstr "സമീപകാല തിരയലുകള്‍"
142
74
143−#. TRANSLATORS: Number of persons who rated this app
75+#: Dash/Apps/AppPreview.qml:135
76+msgid "Rate this"
77+msgstr "ഇത് അവലോകനം ചെയ്യുക"
78+
144#. TRANSLATORS: Number of persons who rated this app/video/whatever
79#. TRANSLATORS: Number of persons who rated this app/video/whatever
145−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
80+#: Dash/Previews/Header.qml:93
146#, qt-format
81#, qt-format
147msgid "(%1)"
82msgid "(%1)"
148msgstr "(%1)"
83msgstr "(%1)"
149
84
150−#. TRANSLATORS: Number of persons who wrote reviews for this app
151#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
85#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
152−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
86+#: Dash/Previews/Header.qml:105
153#, qt-format
87#, qt-format
154msgid "%1 review"
88msgid "%1 review"
155msgid_plural "%1 reviews"
89msgid_plural "%1 reviews"
156msgstr[0] "%1 അവലോകനം"
90msgstr[0] "%1 അവലോകനം"
157msgstr[1] "%1 അവലോകനങ്ങള്‍"
91msgstr[1] "%1 അവലോകനങ്ങള്‍"
158
92
159−#: Dash/Apps/AppPreview.qml:135
160−msgid "Rate this"
161−msgstr "ഇത് അവലോകനം ചെയ്യുക"
162−
163#: Dash/Previews/Reviews.qml:74
93#: Dash/Previews/Reviews.qml:74
164msgid "Add a review"
94msgid "Add a review"
165msgstr "ഒരു അവലോകനം ചേര്‍ക്കുക"
95msgstr "ഒരു അവലോകനം ചേര്‍ക്കുക"
@@ -176,7 +106,7 @@ msgstr "അയയ്‌ക്കുക"
176msgid "Comments:"
106msgid "Comments:"
177msgstr "അഭിപ്രായങ്ങള്‍:"
107msgstr "അഭിപ്രായങ്ങള്‍:"
178
108
179−#: Greeter/Lockscreen.qml:146
109+#: Greeter/Lockscreen.qml:149
180msgid "Emergency Call"
110msgid "Emergency Call"
181msgstr "അടിയന്തിര വിളി"
111msgstr "അടിയന്തിര വിളി"
182
112
@@ -226,15 +156,7 @@ msgstr "വിക്ഷേപികയില്‍ സ്ഥിരപ്പെ
226msgid "Unlock from Launcher"
156msgid "Unlock from Launcher"
227msgstr "വിക്ഷേപികാ സ്ഥിരപ്പെടുത്തല്‍ ഒഴിവാക്കുക"
157msgstr "വിക്ഷേപികാ സ്ഥിരപ്പെടുത്തല്‍ ഒഴിവാക്കുക"
228
158
229−#: plugins/Unity/scope.cpp:408
230−msgid "Sorry, there is nothing that matches your search."
231−msgstr "ക്ഷമിക്കണം, താങ്കളുടെ തിരച്ചിലുമായി ഒത്തുപോകുന്ന ഒന്നും തന്നെയില്ല"
232−
233−#: plugins/Unity/showallfilteroption.cpp:41
234−msgid "All"
235−msgstr "എല്ലാം"
236−
237−#: Shell.qml:441
159+#: Shell.qml:439
238#, qt-format
160#, qt-format
239msgid "Please enter %1"
161msgid "Please enter %1"
240msgstr "ദയവായി %1 നല്‍കുക"
162msgstr "ദയവായി %1 നല്‍കുക"
po/my.po+20−98
@@ -7,84 +7,16 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-10-09 11:35+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"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-12-13 06:46+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16869)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "ဖုန်း"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "ကင်မရာ"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "ဓာတ်ပုံသိမ်းထားသည့်နေရာ"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Browser"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "ဂျီမေးလ်"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "ရာသီဥတု"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Notepad"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "ပြက္ခဒိန်"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "မီဒီယာဖွင့်စက်"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "မြေပုံ"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "ဝီကီပီဒီးယား"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr "မကြာသေးခင်က ရှာဖွေခြင်း"
69msgstr "မကြာသေးခင်က ရှာဖွေခြင်း"
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr "ဒီဟာကိုအမှတ်ပေးမည်"
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr "(%1)"
79msgstr "(%1)"
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr "ဒီဟာကိုအမှတ်ပေးမည်"
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,18 +102,18 @@ msgstr "ပို့မည်"
172msgid "Comments:"
102msgid "Comments:"
173msgstr "မှတ်ချက်များ-"
103msgstr "မှတ်ချက်များ-"
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177−msgstr ""
107+msgstr "အရေးပေါ်ခေါ်မည်"
178
108
179#: Greeter/PassphraseLockscreen.qml:59
109#: Greeter/PassphraseLockscreen.qml:59
180#, qt-format
110#, qt-format
181msgid "Hello %1"
111msgid "Hello %1"
182−msgstr ""
112+msgstr "ဟဲလို %1"
183
113
184#: Greeter/PassphraseLockscreen.qml:59
114#: Greeter/PassphraseLockscreen.qml:59
185msgid "Hello"
115msgid "Hello"
186−msgstr ""
116+msgstr "ဟဲလို"
187
117
188#: Hud/HudParametrizedActionsPage.qml:132
118#: Hud/HudParametrizedActionsPage.qml:132
189msgid "Confirm"
119msgid "Confirm"
@@ -207,7 +137,7 @@ msgstr "ပြောနေသည်"
207
137
208#: Notifications/NotificationMenuItemFactory.qml:89
138#: Notifications/NotificationMenuItemFactory.qml:89
209msgid "Show password"
139msgid "Show password"
210−msgstr ""
140+msgstr "စကားဝှက်ကိုပြ"
211
141
212#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
213msgid "Search"
143msgid "Search"
@@ -216,21 +146,13 @@ msgstr "ရှာဖွေ"
216#: plugins/Unity/Launcher/launcheritem.cpp:43
146#: plugins/Unity/Launcher/launcheritem.cpp:43
217#: plugins/Unity/Launcher/launcheritem.cpp:73
147#: plugins/Unity/Launcher/launcheritem.cpp:73
218msgid "Lock to Launcher"
148msgid "Lock to Launcher"
219−msgstr ""
149+msgstr "Launcher တွင်ထားမည်"
220
150
221#: plugins/Unity/Launcher/launcheritem.cpp:73
151#: plugins/Unity/Launcher/launcheritem.cpp:73
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223−msgstr ""
153+msgstr "Launcher မှဖြုတ်မည်"
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "ဆောရီး၊ သင်၏ရှာဖွေမူနှင့်တူညီတာဘာမှမရှိပါ။"
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236−msgstr ""
158+msgstr "%1ကိုရိုက်ထည့်ပါ"
po/nb.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-06-27 07:02+0000\n"
11"PO-Revision-Date: 2013-06-27 07:02+0000\n"
12"Last-Translator: Joakim Langvand <jlangvand@gmail.com>\n"
12"Last-Translator: Joakim Langvand <jlangvand@gmail.com>\n"
13"Language-Team: Norwegian Bokmal <nb@li.org>\n"
13"Language-Team: Norwegian Bokmal <nb@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Telefon"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Kamera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Vær"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Notisblokk"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Kalender"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr "Siste søk"
69msgstr "Siste søk"
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "Søket ga ingen treff."
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/nl.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-06-27 07:19+0000\n"
11"PO-Revision-Date: 2013-06-27 07:19+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: Dutch <nl@li.org>\n"
13"Language-Team: Dutch <nl@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr "Recente zoekopdrachten"
69msgstr "Recente zoekopdrachten"
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "Er is helaas niets dat met uw zoekopdracht overeenkomt."
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/pl.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-10-13 13:44+0000\n"
11"PO-Revision-Date: 2013-10-13 13:44+0000\n"
12"Last-Translator: GTriderXC <gtriderxc@yahoo.com>\n"
12"Last-Translator: GTriderXC <gtriderxc@yahoo.com>\n"
13"Language-Team: Polish <pl@li.org>\n"
13"Language-Team: Polish <pl@li.org>\n"
@@ -16,76 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
17"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
18"|| n%100>=20) ? 1 : 2;\n"
18"|| n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20−"X-Generator: Launchpad (build 16831)\n"
20+"X-Generator: Launchpad (build 16856)\n"
21−
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr "Telefon"
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr "Aparat"
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr "Galeria"
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr "Facebook"
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr "Internet"
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr "Twitter"
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr "GMail"
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr "Pogoda"
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr "Notatki"
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr "Kalendarz"
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr "Odtwarzacz multimediów"
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr "Evernote"
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr "Mapa"
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr "Pinterest"
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr "SoundCloud"
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr "Wikipedia"
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr "YouTube"
89
21
90#: Components/EdgeDemoOverlay.qml:151
22#: Components/EdgeDemoOverlay.qml:151
91msgid "Skip intro"
23msgid "Skip intro"
@@ -137,20 +69,22 @@ msgstr ""
137"Polecenia aktywatorów krawędzi ekranu zostały opanowane<br><br>Dotknij "
69"Polecenia aktywatorów krawędzi ekranu zostały opanowane<br><br>Dotknij "
138"gdziekolwiek aby kontynuować"
70"gdziekolwiek aby kontynuować"
139
71
140−#: Components/PageHeader.qml:345
72+#: Components/PageHeader.qml:364
141msgid "Recent searches"
73msgid "Recent searches"
142msgstr "Ostatnie wyszukiwania"
74msgstr "Ostatnie wyszukiwania"
143
75
144−#. TRANSLATORS: Number of persons who rated this app
76+#: Dash/Apps/AppPreview.qml:135
77+msgid "Rate this"
78+msgstr "Oceń to"
79+
145#. TRANSLATORS: Number of persons who rated this app/video/whatever
80#. TRANSLATORS: Number of persons who rated this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
81+#: Dash/Previews/Header.qml:93
147#, qt-format
82#, qt-format
148msgid "(%1)"
83msgid "(%1)"
149msgstr "(%1)"
84msgstr "(%1)"
150
85
151−#. TRANSLATORS: Number of persons who wrote reviews for this app
152#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
86#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
153−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
87+#: Dash/Previews/Header.qml:105
154#, qt-format
88#, qt-format
155msgid "%1 review"
89msgid "%1 review"
156msgid_plural "%1 reviews"
90msgid_plural "%1 reviews"
@@ -158,10 +92,6 @@ msgstr[0] "%1 opinia"
158msgstr[1] "%1 opinie"
92msgstr[1] "%1 opinie"
159msgstr[2] "%1 opinii"
93msgstr[2] "%1 opinii"
160
94
161−#: Dash/Apps/AppPreview.qml:135
162−msgid "Rate this"
163−msgstr "Oceń to"
164−
165#: Dash/Previews/Reviews.qml:74
95#: Dash/Previews/Reviews.qml:74
166msgid "Add a review"
96msgid "Add a review"
167msgstr "Dodaj recenzję"
97msgstr "Dodaj recenzję"
@@ -178,7 +108,7 @@ msgstr "Wyślij"
178msgid "Comments:"
108msgid "Comments:"
179msgstr "Komentarze:"
109msgstr "Komentarze:"
180
110
181−#: Greeter/Lockscreen.qml:146
111+#: Greeter/Lockscreen.qml:149
182msgid "Emergency Call"
112msgid "Emergency Call"
183msgstr "Telefon ratunkowy"
113msgstr "Telefon ratunkowy"
184
114
@@ -228,15 +158,7 @@ msgstr ""
228msgid "Unlock from Launcher"
158msgid "Unlock from Launcher"
229msgstr ""
159msgstr ""
230
160
231−#: plugins/Unity/scope.cpp:408
232−msgid "Sorry, there is nothing that matches your search."
233−msgstr "Nie znaleziono pasujących wyników."
234−
235−#: plugins/Unity/showallfilteroption.cpp:41
236−msgid "All"
237−msgstr "Wszystko"
238−
239−#: Shell.qml:441
161+#: Shell.qml:439
240#, qt-format
162#, qt-format
241msgid "Please enter %1"
163msgid "Please enter %1"
242msgstr "Wprowadź %1"
164msgstr "Wprowadź %1"
po/pt_BR.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-10-01 13:05+0000\n"
11"PO-Revision-Date: 2013-10-01 13:05+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"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Telefone"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Câmera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galeria"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Navegador"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Clima"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Bloco de notas"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Calendário"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Media Player"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Mapa"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipédia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -134,30 +66,28 @@ msgid ""
134"phone<br><br>Tap anywhere to start"
66"phone<br><br>Tap anywhere to start"
135msgstr ""
67msgstr ""
136
68
137−#: Components/PageHeader.qml:345
69+#: Components/PageHeader.qml:364
138msgid "Recent searches"
70msgid "Recent searches"
139msgstr "Pesquisas recentes"
71msgstr "Pesquisas recentes"
140
72
141−#. TRANSLATORS: Number of persons who rated this app
73+#: Dash/Apps/AppPreview.qml:135
74+msgid "Rate this"
75+msgstr "Avaliar isto"
76+
142#. TRANSLATORS: Number of persons who rated this app/video/whatever
77#. TRANSLATORS: Number of persons who rated this app/video/whatever
143−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
78+#: Dash/Previews/Header.qml:93
144#, qt-format
79#, qt-format
145msgid "(%1)"
80msgid "(%1)"
146msgstr "(%1)"
81msgstr "(%1)"
147
82
148−#. TRANSLATORS: Number of persons who wrote reviews for this app
149#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
83#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
150−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
84+#: Dash/Previews/Header.qml:105
151#, qt-format
85#, qt-format
152msgid "%1 review"
86msgid "%1 review"
153msgid_plural "%1 reviews"
87msgid_plural "%1 reviews"
154msgstr[0] "%1 análise"
88msgstr[0] "%1 análise"
155msgstr[1] "%1 análises"
89msgstr[1] "%1 análises"
156
90
157−#: Dash/Apps/AppPreview.qml:135
158−msgid "Rate this"
159−msgstr "Avaliar isto"
160−
161#: Dash/Previews/Reviews.qml:74
91#: Dash/Previews/Reviews.qml:74
162msgid "Add a review"
92msgid "Add a review"
163msgstr "Adicionar uma análise"
93msgstr "Adicionar uma análise"
@@ -174,7 +104,7 @@ msgstr "Enviar"
174msgid "Comments:"
104msgid "Comments:"
175msgstr "Comentários:"
105msgstr "Comentários:"
176
106
177−#: Greeter/Lockscreen.qml:146
107+#: Greeter/Lockscreen.qml:149
178msgid "Emergency Call"
108msgid "Emergency Call"
179msgstr "Chamada de emergência"
109msgstr "Chamada de emergência"
180
110
@@ -224,15 +154,7 @@ msgstr ""
224msgid "Unlock from Launcher"
154msgid "Unlock from Launcher"
225msgstr ""
155msgstr ""
226
156
227−#: plugins/Unity/scope.cpp:408
228−msgid "Sorry, there is nothing that matches your search."
229−msgstr "Desculpe, não há nada que corresponda à sua pesquisa."
230−
231−#: plugins/Unity/showallfilteroption.cpp:41
232−msgid "All"
233−msgstr ""
234−
235−#: Shell.qml:441
157+#: Shell.qml:439
236#, qt-format
158#, qt-format
237msgid "Please enter %1"
159msgid "Please enter %1"
238msgstr "Por favor, digite %1"
160msgstr "Por favor, digite %1"
po/ro.po+12−91
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-06-27 07:53+0000\n"
11"PO-Revision-Date: 2013-06-27 07:53+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: Romanian <ro@li.org>\n"
13"Language-Team: Romanian <ro@li.org>\n"
@@ -16,76 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
17"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
18"== 0) && (n != 0))) ? 2: 1));\n"
18"== 0) && (n != 0))) ? 2: 1));\n"
19−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20−"X-Generator: Launchpad (build 16831)\n"
20+"X-Generator: Launchpad (build 16856)\n"
21−
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr ""
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr ""
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr ""
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr ""
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr ""
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr ""
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr ""
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr ""
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr ""
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr ""
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr ""
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr ""
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr ""
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr ""
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr ""
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr ""
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr ""
89
21
90#: Components/EdgeDemoOverlay.qml:151
22#: Components/EdgeDemoOverlay.qml:151
91msgid "Skip intro"
23msgid "Skip intro"
@@ -133,30 +65,28 @@ msgid ""
133"phone<br><br>Tap anywhere to start"
65"phone<br><br>Tap anywhere to start"
134msgstr ""
66msgstr ""
135
67
136−#: Components/PageHeader.qml:345
68+#: Components/PageHeader.qml:364
137msgid "Recent searches"
69msgid "Recent searches"
138msgstr "Căutări recente"
70msgstr "Căutări recente"
139
71
140−#. TRANSLATORS: Number of persons who rated this app
72+#: Dash/Apps/AppPreview.qml:135
73+msgid "Rate this"
74+msgstr ""
75+
141#. TRANSLATORS: Number of persons who rated this app/video/whatever
76#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
77+#: Dash/Previews/Header.qml:93
143#, qt-format
78#, qt-format
144msgid "(%1)"
79msgid "(%1)"
145msgstr ""
80msgstr ""
146
81
147−#. TRANSLATORS: Number of persons who wrote reviews for this app
148#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
82#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
83+#: Dash/Previews/Header.qml:105
150#, qt-format
84#, qt-format
151msgid "%1 review"
85msgid "%1 review"
152msgid_plural "%1 reviews"
86msgid_plural "%1 reviews"
153msgstr[0] ""
87msgstr[0] ""
154msgstr[1] ""
88msgstr[1] ""
155
89
156−#: Dash/Apps/AppPreview.qml:135
157−msgid "Rate this"
158−msgstr ""
159−
160#: Dash/Previews/Reviews.qml:74
90#: Dash/Previews/Reviews.qml:74
161msgid "Add a review"
91msgid "Add a review"
162msgstr ""
92msgstr ""
@@ -173,7 +103,7 @@ msgstr ""
173msgid "Comments:"
103msgid "Comments:"
174msgstr ""
104msgstr ""
175
105
176−#: Greeter/Lockscreen.qml:146
106+#: Greeter/Lockscreen.qml:149
177msgid "Emergency Call"
107msgid "Emergency Call"
178msgstr ""
108msgstr ""
179
109
@@ -223,16 +153,7 @@ msgstr ""
223msgid "Unlock from Launcher"
153msgid "Unlock from Launcher"
224msgstr ""
154msgstr ""
225
155
226−#: plugins/Unity/scope.cpp:408
227−msgid "Sorry, there is nothing that matches your search."
228−msgstr ""
229−"Ne pare rău, nu este nimic care se potrivește căutării dumneavoastră."
230−
231−#: plugins/Unity/showallfilteroption.cpp:41
232−msgid "All"
233−msgstr ""
234−
235−#: Shell.qml:441
156+#: Shell.qml:439
236#, qt-format
157#, qt-format
237msgid "Please enter %1"
158msgid "Please enter %1"
238msgstr ""
159msgstr ""
po/ru.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-10-01 05:55+0000\n"
11"PO-Revision-Date: 2013-10-01 05:55+0000\n"
12"Last-Translator: Zonov Roman <Unknown>\n"
12"Last-Translator: Zonov Roman <Unknown>\n"
13"Language-Team: Russian <ru@li.org>\n"
13"Language-Team: Russian <ru@li.org>\n"
@@ -16,76 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20−"X-Generator: Launchpad (build 16831)\n"
20+"X-Generator: Launchpad (build 16856)\n"
21−
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr "Телефон"
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr "Камера"
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr "Галерея"
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr "Facebook"
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr "Обозреватель"
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr "Twitter"
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr "GMail"
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr "Погода"
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr "Блокнот"
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr "Календарь"
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr "Медиапроигрыватель"
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr "Evernote"
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr "Карты"
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr "Pinterest"
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr "SoundCloud"
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr "Википедия"
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr "YouTube"
89
21
90#: Components/EdgeDemoOverlay.qml:151
22#: Components/EdgeDemoOverlay.qml:151
91msgid "Skip intro"
23msgid "Skip intro"
@@ -138,29 +70,27 @@ msgid ""
138"phone<br><br>Tap anywhere to start"
70"phone<br><br>Tap anywhere to start"
139msgstr ""
71msgstr ""
140
72
141−#: Components/PageHeader.qml:345
73+#: Components/PageHeader.qml:364
142msgid "Recent searches"
74msgid "Recent searches"
143msgstr "Последние поисковые запросы"
75msgstr "Последние поисковые запросы"
144
76
145−#. TRANSLATORS: Number of persons who rated this app
77+#: Dash/Apps/AppPreview.qml:135
78+msgid "Rate this"
79+msgstr "Оцените это"
80+
146#. TRANSLATORS: Number of persons who rated this app/video/whatever
81#. TRANSLATORS: Number of persons who rated this app/video/whatever
147−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
82+#: Dash/Previews/Header.qml:93
148#, qt-format
83#, qt-format
149msgid "(%1)"
84msgid "(%1)"
150msgstr "(%1)"
85msgstr "(%1)"
151
86
152−#. TRANSLATORS: Number of persons who wrote reviews for this app
153#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
87#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
154−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
88+#: Dash/Previews/Header.qml:105
155#, qt-format
89#, qt-format
156msgid "%1 review"
90msgid "%1 review"
157msgid_plural "%1 reviews"
91msgid_plural "%1 reviews"
158msgstr[0] "%1 отзыв"
92msgstr[0] "%1 отзыв"
159
93
160−#: Dash/Apps/AppPreview.qml:135
161−msgid "Rate this"
162−msgstr "Оцените это"
163−
164#: Dash/Previews/Reviews.qml:74
94#: Dash/Previews/Reviews.qml:74
165msgid "Add a review"
95msgid "Add a review"
166msgstr "Добавьте отзыв"
96msgstr "Добавьте отзыв"
@@ -177,7 +107,7 @@ msgstr "Отправить"
177msgid "Comments:"
107msgid "Comments:"
178msgstr "Комментарии:"
108msgstr "Комментарии:"
179
109
180−#: Greeter/Lockscreen.qml:146
110+#: Greeter/Lockscreen.qml:149
181msgid "Emergency Call"
111msgid "Emergency Call"
182msgstr "Экстренный вызов"
112msgstr "Экстренный вызов"
183
113
@@ -227,15 +157,7 @@ msgstr ""
227msgid "Unlock from Launcher"
157msgid "Unlock from Launcher"
228msgstr ""
158msgstr ""
229
159
230−#: plugins/Unity/scope.cpp:408
231−msgid "Sorry, there is nothing that matches your search."
232−msgstr "Извините, поиск не дал результатов."
233−
234−#: plugins/Unity/showallfilteroption.cpp:41
235−msgid "All"
236−msgstr ""
237−
238−#: Shell.qml:441
160+#: Shell.qml:439
239#, qt-format
161#, qt-format
240msgid "Please enter %1"
162msgid "Please enter %1"
241msgstr "Пожалуйста, введите %1"
163msgstr "Пожалуйста, введите %1"
po/shn.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=(n == 1) ? 0 : 1;\n"
17"Plural-Forms: nplurals=2; plural=(n == 1) ? 0 : 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr ""
69msgstr ""
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/si.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr ""
69msgstr ""
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/sl.po+16−94
@@ -7,8 +7,8 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-10-02 10:55+0000\n"
11+"PO-Revision-Date: 2013-11-30 08:20+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"
@@ -16,76 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
17"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
18"n%100==4 ? 3 : 0);\n"
18"n%100==4 ? 3 : 0);\n"
19−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19+"X-Launchpad-Export-Date: 2013-12-01 05:47+0000\n"
20−"X-Generator: Launchpad (build 16831)\n"
20+"X-Generator: Launchpad (build 16856)\n"
21−
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr "Telefon"
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr "Fotoaparat"
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr "Galerija"
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr "Facebook"
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr "Brskalnik"
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr "Twitter"
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr "GMail"
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr "Vreme"
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr "Beležnica"
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr "Koledar"
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr "Predvajalnik predstavnosti"
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr "Evernote"
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr "Zemljevid"
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr "Pinterest"
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr "SoundCloud"
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr "Wikipedija"
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr "YouTube"
89
21
90#: Components/EdgeDemoOverlay.qml:151
22#: Components/EdgeDemoOverlay.qml:151
91msgid "Skip intro"
23msgid "Skip intro"
@@ -137,20 +69,22 @@ msgstr ""
137"Sedaj ste osvojili poteze robov ter lahko začnete uporabljati "
69"Sedaj ste osvojili poteze robov ter lahko začnete uporabljati "
138"telefon<br><br>Tapnite kjerkoli na začetek"
70"telefon<br><br>Tapnite kjerkoli na začetek"
139
71
140−#: Components/PageHeader.qml:345
72+#: Components/PageHeader.qml:364
141msgid "Recent searches"
73msgid "Recent searches"
142msgstr "Nedavna iskanja"
74msgstr "Nedavna iskanja"
143
75
144−#. TRANSLATORS: Number of persons who rated this app
76+#: Dash/Apps/AppPreview.qml:135
77+msgid "Rate this"
78+msgstr "Ocenite"
79+
145#. TRANSLATORS: Number of persons who rated this app/video/whatever
80#. TRANSLATORS: Number of persons who rated this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
81+#: Dash/Previews/Header.qml:93
147#, qt-format
82#, qt-format
148msgid "(%1)"
83msgid "(%1)"
149msgstr "(%1)"
84msgstr "(%1)"
150
85
151−#. TRANSLATORS: Number of persons who wrote reviews for this app
152#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
86#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
153−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
87+#: Dash/Previews/Header.qml:105
154#, qt-format
88#, qt-format
155msgid "%1 review"
89msgid "%1 review"
156msgid_plural "%1 reviews"
90msgid_plural "%1 reviews"
@@ -159,10 +93,6 @@ msgstr[1] "%1 ocena"
159msgstr[2] "%1 oceni"
93msgstr[2] "%1 oceni"
160msgstr[3] "%1 ocene"
94msgstr[3] "%1 ocene"
161
95
162−#: Dash/Apps/AppPreview.qml:135
163−msgid "Rate this"
164−msgstr "Ocenite"
165−
166#: Dash/Previews/Reviews.qml:74
96#: Dash/Previews/Reviews.qml:74
167msgid "Add a review"
97msgid "Add a review"
168msgstr "Dodaj oceno"
98msgstr "Dodaj oceno"
@@ -179,7 +109,7 @@ msgstr "Pošlji"
179msgid "Comments:"
109msgid "Comments:"
180msgstr "Opombe:"
110msgstr "Opombe:"
181
111
182−#: Greeter/Lockscreen.qml:146
112+#: Greeter/Lockscreen.qml:149
183msgid "Emergency Call"
113msgid "Emergency Call"
184msgstr "Klic v sili"
114msgstr "Klic v sili"
185
115
@@ -214,7 +144,7 @@ msgstr "Govorjenje ..."
214
144
215#: Notifications/NotificationMenuItemFactory.qml:89
145#: Notifications/NotificationMenuItemFactory.qml:89
216msgid "Show password"
146msgid "Show password"
217−msgstr ""
147+msgstr "Pokaži geslo"
218
148
219#: Panel/SearchIndicator.qml:27
149#: Panel/SearchIndicator.qml:27
220msgid "Search"
150msgid "Search"
@@ -223,21 +153,13 @@ msgstr "Iskanje"
223#: plugins/Unity/Launcher/launcheritem.cpp:43
153#: plugins/Unity/Launcher/launcheritem.cpp:43
224#: plugins/Unity/Launcher/launcheritem.cpp:73
154#: plugins/Unity/Launcher/launcheritem.cpp:73
225msgid "Lock to Launcher"
155msgid "Lock to Launcher"
226−msgstr ""
156+msgstr "Zakleni na zaganjalnik"
227
157
228#: plugins/Unity/Launcher/launcheritem.cpp:73
158#: plugins/Unity/Launcher/launcheritem.cpp:73
229msgid "Unlock from Launcher"
159msgid "Unlock from Launcher"
230−msgstr ""
160+msgstr "Odkleni z zaganjalnika"
231−
232−#: plugins/Unity/scope.cpp:408
233−msgid "Sorry, there is nothing that matches your search."
234−msgstr "Nič se ne ujema z vašim iskalnim nizom."
235−
236−#: plugins/Unity/showallfilteroption.cpp:41
237−msgid "All"
238−msgstr "Vse"
239
161
240−#: Shell.qml:441
162+#: Shell.qml:439
241#, qt-format
163#, qt-format
242msgid "Please enter %1"
164msgid "Please enter %1"
243msgstr "Vnesite %1"
165msgstr "Vnesite %1"
po/sr.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-06-27 09:19+0000\n"
11"PO-Revision-Date: 2013-06-27 09:19+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: Serbian <sr@li.org>\n"
13"Language-Team: Serbian <sr@li.org>\n"
@@ -16,76 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20−"X-Generator: Launchpad (build 16831)\n"
20+"X-Generator: Launchpad (build 16856)\n"
21−
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr ""
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr ""
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr ""
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr ""
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr ""
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr ""
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr ""
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr ""
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr ""
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr ""
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr ""
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr ""
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr ""
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr ""
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr ""
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr ""
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr ""
89
21
90#: Components/EdgeDemoOverlay.qml:151
22#: Components/EdgeDemoOverlay.qml:151
91msgid "Skip intro"
23msgid "Skip intro"
@@ -133,30 +65,28 @@ msgid ""
133"phone<br><br>Tap anywhere to start"
65"phone<br><br>Tap anywhere to start"
134msgstr ""
66msgstr ""
135
67
136−#: Components/PageHeader.qml:345
68+#: Components/PageHeader.qml:364
137msgid "Recent searches"
69msgid "Recent searches"
138msgstr "Скорашње претраге"
70msgstr "Скорашње претраге"
139
71
140−#. TRANSLATORS: Number of persons who rated this app
72+#: Dash/Apps/AppPreview.qml:135
73+msgid "Rate this"
74+msgstr ""
75+
141#. TRANSLATORS: Number of persons who rated this app/video/whatever
76#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
77+#: Dash/Previews/Header.qml:93
143#, qt-format
78#, qt-format
144msgid "(%1)"
79msgid "(%1)"
145msgstr ""
80msgstr ""
146
81
147−#. TRANSLATORS: Number of persons who wrote reviews for this app
148#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
82#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
83+#: Dash/Previews/Header.qml:105
150#, qt-format
84#, qt-format
151msgid "%1 review"
85msgid "%1 review"
152msgid_plural "%1 reviews"
86msgid_plural "%1 reviews"
153msgstr[0] ""
87msgstr[0] ""
154msgstr[1] ""
88msgstr[1] ""
155
89
156−#: Dash/Apps/AppPreview.qml:135
157−msgid "Rate this"
158−msgstr ""
159−
160#: Dash/Previews/Reviews.qml:74
90#: Dash/Previews/Reviews.qml:74
161msgid "Add a review"
91msgid "Add a review"
162msgstr ""
92msgstr ""
@@ -173,7 +103,7 @@ msgstr ""
173msgid "Comments:"
103msgid "Comments:"
174msgstr ""
104msgstr ""
175
105
176−#: Greeter/Lockscreen.qml:146
106+#: Greeter/Lockscreen.qml:149
177msgid "Emergency Call"
107msgid "Emergency Call"
178msgstr ""
108msgstr ""
179
109
@@ -223,15 +153,7 @@ msgstr ""
223msgid "Unlock from Launcher"
153msgid "Unlock from Launcher"
224msgstr ""
154msgstr ""
225
155
226−#: plugins/Unity/scope.cpp:408
227−msgid "Sorry, there is nothing that matches your search."
228−msgstr "Нажалост, претрага није наишла на икакво подударање."
229−
230−#: plugins/Unity/showallfilteroption.cpp:41
231−msgid "All"
232−msgstr ""
233−
234−#: Shell.qml:441
156+#: Shell.qml:439
235#, qt-format
157#, qt-format
236msgid "Please enter %1"
158msgid "Please enter %1"
237msgstr ""
159msgstr ""
po/sv.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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: Swedish <sv@li.org>\n"
13"Language-Team: Swedish <sv@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr ""
69msgstr ""
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/ta.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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: Thangamani Arun - தங்கமணி அருண் <thangam.arunx@gmail.com>\n"
12"Last-Translator: Thangamani Arun - தங்கமணி அருண் <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"
@@ -15,78 +15,10 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20"Language: ta\n"
20"Language: ta\n"
21
21
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr "தொலைபேசி"
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr "புகைப்பட கருவி"
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr "படத்தொகுப்பு"
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr "முகநுல்"
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr "உலாவி"
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr "ட்விட்டர்"
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr "ஜிமெயில்"
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr "வானிலை"
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr "குறிப்புபலகை"
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr "நாள்காட்டி"
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr "ஊடக இயக்கி"
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr "எப்போதும்குறிப்பெடு"
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr "வரைபடம்"
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr "விசைத்தட்டு"
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr "ஒலி கிளவுட்"
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr "விக்கிப்பீடியா"
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr "யூட்யுப்"
89−
90#: Components/EdgeDemoOverlay.qml:151
22#: Components/EdgeDemoOverlay.qml:151
91msgid "Skip intro"
23msgid "Skip intro"
92msgstr "அறிமுகத்தை தவிர்"
24msgstr "அறிமுகத்தை தவிர்"
@@ -138,30 +70,28 @@ msgstr ""
138"பயன்படுத்த தொடங்கவும் <br> <br>தட்டுவதன் மூலம் எங்க வேண்டுமானாலும் "
70"பயன்படுத்த தொடங்கவும் <br> <br>தட்டுவதன் மூலம் எங்க வேண்டுமானாலும் "
139"தொடங்கலாம்."
71"தொடங்கலாம்."
140
72
141−#: Components/PageHeader.qml:345
73+#: Components/PageHeader.qml:364
142msgid "Recent searches"
74msgid "Recent searches"
143msgstr "கடையாக தேடப்பட்டவைகள்"
75msgstr "கடையாக தேடப்பட்டவைகள்"
144
76
145−#. TRANSLATORS: Number of persons who rated this app
77+#: Dash/Apps/AppPreview.qml:135
78+msgid "Rate this"
79+msgstr "இதை மதிப்பிடு"
80+
146#. TRANSLATORS: Number of persons who rated this app/video/whatever
81#. TRANSLATORS: Number of persons who rated this app/video/whatever
147−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
82+#: Dash/Previews/Header.qml:93
148#, qt-format
83#, qt-format
149msgid "(%1)"
84msgid "(%1)"
150msgstr "(%1)"
85msgstr "(%1)"
151
86
152−#. TRANSLATORS: Number of persons who wrote reviews for this app
153#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
87#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
154−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
88+#: Dash/Previews/Header.qml:105
155#, qt-format
89#, qt-format
156msgid "%1 review"
90msgid "%1 review"
157msgid_plural "%1 reviews"
91msgid_plural "%1 reviews"
158msgstr[0] "%1 பரிசீலனை"
92msgstr[0] "%1 பரிசீலனை"
159msgstr[1] "%1 பரிசீலனைகள்"
93msgstr[1] "%1 பரிசீலனைகள்"
160
94
161−#: Dash/Apps/AppPreview.qml:135
162−msgid "Rate this"
163−msgstr "இதை மதிப்பிடு"
164−
165#: Dash/Previews/Reviews.qml:74
95#: Dash/Previews/Reviews.qml:74
166msgid "Add a review"
96msgid "Add a review"
167msgstr "ஒரு பரிசீலனையை சேர்"
97msgstr "ஒரு பரிசீலனையை சேர்"
@@ -178,7 +108,7 @@ msgstr "அனுப்பு"
178msgid "Comments:"
108msgid "Comments:"
179msgstr "கருத்துகள்:"
109msgstr "கருத்துகள்:"
180
110
181−#: Greeter/Lockscreen.qml:146
111+#: Greeter/Lockscreen.qml:149
182msgid "Emergency Call"
112msgid "Emergency Call"
183msgstr "அவசர அழைப்பு"
113msgstr "அவசர அழைப்பு"
184
114
@@ -228,15 +158,7 @@ msgstr ""
228msgid "Unlock from Launcher"
158msgid "Unlock from Launcher"
229msgstr ""
159msgstr ""
230
160
231−#: plugins/Unity/scope.cpp:408
232−msgid "Sorry, there is nothing that matches your search."
233−msgstr "மன்னிக்கவும், உங்களுடைய தேடலுக்கு தகுந்த பொருத்தம் கிடைக்கவில்லை."
234−
235−#: plugins/Unity/showallfilteroption.cpp:41
236−msgid "All"
237−msgstr "அனைத்தும்"
238−
239−#: Shell.qml:441
161+#: Shell.qml:439
240#, qt-format
162#, qt-format
241msgid "Please enter %1"
163msgid "Please enter %1"
242msgstr "தயவுச்செய்து %1 உள்ளிடு"
164msgstr "தயவுச்செய்து %1 உள்ளிடு"
po/te.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-06-27 09:57+0000\n"
11"PO-Revision-Date: 2013-06-27 09:57+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: Telugu <te@li.org>\n"
13"Language-Team: Telugu <te@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr ""
69msgstr ""
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/tr.po+17−95
@@ -7,84 +7,16 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-10-01 13:21+0000\n"
11+"PO-Revision-Date: 2013-12-12 16:06+0000\n"
12−"Last-Translator: Volkan Gezer <Unknown>\n"
12+"Last-Translator: Arda Ünlü <aarda.uunlu@gmail.com>\n"
13"Language-Team: Turkish <tr@li.org>\n"
13"Language-Team: Turkish <tr@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-12-13 06:46+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16869)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Telefon"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Kamera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galeri"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Tarayıcı"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Hava Durumu"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Not Defteri"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Takvim"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Ortam Oynatıcı"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Harita"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Vikipedi"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -133,30 +65,28 @@ msgid ""
133"phone<br><br>Tap anywhere to start"
65"phone<br><br>Tap anywhere to start"
134msgstr ""
66msgstr ""
135
67
136−#: Components/PageHeader.qml:345
68+#: Components/PageHeader.qml:364
137msgid "Recent searches"
69msgid "Recent searches"
138msgstr "Son Arananlar"
70msgstr "Son Arananlar"
139
71
140−#. TRANSLATORS: Number of persons who rated this app
72+#: Dash/Apps/AppPreview.qml:135
73+msgid "Rate this"
74+msgstr "Oyla"
75+
141#. TRANSLATORS: Number of persons who rated this app/video/whatever
76#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
77+#: Dash/Previews/Header.qml:93
143#, qt-format
78#, qt-format
144msgid "(%1)"
79msgid "(%1)"
145msgstr "(%1)"
80msgstr "(%1)"
146
81
147−#. TRANSLATORS: Number of persons who wrote reviews for this app
148#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
82#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
83+#: Dash/Previews/Header.qml:105
150#, qt-format
84#, qt-format
151msgid "%1 review"
85msgid "%1 review"
152msgid_plural "%1 reviews"
86msgid_plural "%1 reviews"
153msgstr[0] "%1 inceleme"
87msgstr[0] "%1 inceleme"
154msgstr[1] "%1 inceleme"
88msgstr[1] "%1 inceleme"
155
89
156−#: Dash/Apps/AppPreview.qml:135
157−msgid "Rate this"
158−msgstr "Oyla"
159−
160#: Dash/Previews/Reviews.qml:74
90#: Dash/Previews/Reviews.qml:74
161msgid "Add a review"
91msgid "Add a review"
162msgstr "Bir inceleme ekle"
92msgstr "Bir inceleme ekle"
@@ -173,7 +103,7 @@ msgstr "Gönder"
173msgid "Comments:"
103msgid "Comments:"
174msgstr "Yorumlar:"
104msgstr "Yorumlar:"
175
105
176−#: Greeter/Lockscreen.qml:146
106+#: Greeter/Lockscreen.qml:149
177msgid "Emergency Call"
107msgid "Emergency Call"
178msgstr "Acil Arama"
108msgstr "Acil Arama"
179
109
@@ -208,7 +138,7 @@ msgstr "Konuşuyor..."
208
138
209#: Notifications/NotificationMenuItemFactory.qml:89
139#: Notifications/NotificationMenuItemFactory.qml:89
210msgid "Show password"
140msgid "Show password"
211−msgstr ""
141+msgstr "Parolayı göster"
212
142
213#: Panel/SearchIndicator.qml:27
143#: Panel/SearchIndicator.qml:27
214msgid "Search"
144msgid "Search"
@@ -217,21 +147,13 @@ msgstr "Ara"
217#: plugins/Unity/Launcher/launcheritem.cpp:43
147#: plugins/Unity/Launcher/launcheritem.cpp:43
218#: plugins/Unity/Launcher/launcheritem.cpp:73
148#: plugins/Unity/Launcher/launcheritem.cpp:73
219msgid "Lock to Launcher"
149msgid "Lock to Launcher"
220−msgstr ""
150+msgstr "Başlatıcıya Sabitle"
221
151
222#: plugins/Unity/Launcher/launcheritem.cpp:73
152#: plugins/Unity/Launcher/launcheritem.cpp:73
223msgid "Unlock from Launcher"
153msgid "Unlock from Launcher"
224−msgstr ""
154+msgstr "Başlatıcıdan Ayır"
225−
226−#: plugins/Unity/scope.cpp:408
227−msgid "Sorry, there is nothing that matches your search."
228−msgstr "Üzgünüz, aramanızla eşleşen hiçbir şey yok."
229−
230−#: plugins/Unity/showallfilteroption.cpp:41
231−msgid "All"
232−msgstr ""
233
155
234−#: Shell.qml:441
156+#: Shell.qml:439
235#, qt-format
157#, qt-format
236msgid "Please enter %1"
158msgid "Please enter %1"
237msgstr "Lütfen %1 girin"
159msgstr "Lütfen %1 girin"
po/ug.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-10-09 22:38+0000\n"
11"PO-Revision-Date: 2013-10-09 22:38+0000\n"
12"Last-Translator: Gheyret T.Kenji <Unknown>\n"
12"Last-Translator: Gheyret T.Kenji <Unknown>\n"
13"Language-Team: Uyghur <ug@li.org>\n"
13"Language-Team: Uyghur <ug@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "تېلېفون"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "كامېرا"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "فېيىسبۇك(Facebook)"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "توركۆرگۈ"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "تىۋىتتېر(Twitter)"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "ھاۋا رايى"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "خاتىرە دەپتەر(Notepad)"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "يىلنامە"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "ۋاسىتە قويغۇ"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "خەرىتە"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "ۋىكىپېدىيە"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,29 +64,27 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr "يېقىنقى ئىزدەشلەر"
69msgstr "يېقىنقى ئىزدەشلەر"
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr "(%1)"
79msgstr "(%1)"
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] "%1 باھا"
86msgstr[0] "%1 باھا"
153
87
154−#: Dash/Apps/AppPreview.qml:135
155−msgid "Rate this"
156−msgstr ""
157−
158#: Dash/Previews/Reviews.qml:74
88#: Dash/Previews/Reviews.qml:74
159msgid "Add a review"
89msgid "Add a review"
160msgstr ""
90msgstr ""
@@ -171,7 +101,7 @@ msgstr "ئەۋەت"
171msgid "Comments:"
101msgid "Comments:"
172msgstr "ئىنكاس:"
102msgstr "ئىنكاس:"
173
103
174−#: Greeter/Lockscreen.qml:146
104+#: Greeter/Lockscreen.qml:149
175msgid "Emergency Call"
105msgid "Emergency Call"
176msgstr ""
106msgstr ""
177
107
@@ -221,15 +151,7 @@ msgstr ""
221msgid "Unlock from Launcher"
151msgid "Unlock from Launcher"
222msgstr ""
152msgstr ""
223
153
224−#: plugins/Unity/scope.cpp:408
225−msgid "Sorry, there is nothing that matches your search."
226−msgstr "كەچۈرۈڭ، ئىزدىگىنىڭىزگە ماس نەتىجە تېپىلمىدى."
227−
228−#: plugins/Unity/showallfilteroption.cpp:41
229−msgid "All"
230−msgstr "ھەممىسى"
231−
232−#: Shell.qml:441
154+#: Shell.qml:439
233#, qt-format
155#, qt-format
234msgid "Please enter %1"
156msgid "Please enter %1"
235msgstr "%1 نى كىرگۈزۈڭ"
157msgstr "%1 نى كىرگۈزۈڭ"
po/uk.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-11-23 12:37+0000\n"
11"PO-Revision-Date: 2013-11-23 12:37+0000\n"
12"Last-Translator: Ignat Kizenko <Unknown>\n"
12"Last-Translator: Ignat Kizenko <Unknown>\n"
13"Language-Team: Ukrainian <uk@li.org>\n"
13"Language-Team: Ukrainian <uk@li.org>\n"
@@ -16,76 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-11-24 05:50+0000\n"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20−"X-Generator: Launchpad (build 16831)\n"
20+"X-Generator: Launchpad (build 16856)\n"
21−
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr "Телефон"
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr "Фотоапарат"
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr "Галерея"
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr "Facebook"
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr "Навігатор"
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr "Twitter"
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr "GMail"
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr "Погода"
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr "Блокнот"
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr "Календар"
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr "Програвач"
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr "Evernote"
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr "Карта"
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr "Pinterest"
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr "SoundCloud"
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr "Вікіпедія"
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr "YouTube"
89
21
90#: Components/EdgeDemoOverlay.qml:151
22#: Components/EdgeDemoOverlay.qml:151
91msgid "Skip intro"
23msgid "Skip intro"
@@ -138,20 +70,22 @@ msgstr ""
138"Тепер жести налаштовано, ви можете почати користуватися "
70"Тепер жести налаштовано, ви можете почати користуватися "
139"телефоном.<br><br>Натисніть у довільному місці екрана."
71"телефоном.<br><br>Натисніть у довільному місці екрана."
140
72
141−#: Components/PageHeader.qml:345
73+#: Components/PageHeader.qml:364
142msgid "Recent searches"
74msgid "Recent searches"
143msgstr "Нещодавні пошуки"
75msgstr "Нещодавні пошуки"
144
76
145−#. TRANSLATORS: Number of persons who rated this app
77+#: Dash/Apps/AppPreview.qml:135
78+msgid "Rate this"
79+msgstr "Оцінити"
80+
146#. TRANSLATORS: Number of persons who rated this app/video/whatever
81#. TRANSLATORS: Number of persons who rated this app/video/whatever
147−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
82+#: Dash/Previews/Header.qml:93
148#, qt-format
83#, qt-format
149msgid "(%1)"
84msgid "(%1)"
150msgstr "(%1)"
85msgstr "(%1)"
151
86
152−#. TRANSLATORS: Number of persons who wrote reviews for this app
153#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
87#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
154−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
88+#: Dash/Previews/Header.qml:105
155#, qt-format
89#, qt-format
156msgid "%1 review"
90msgid "%1 review"
157msgid_plural "%1 reviews"
91msgid_plural "%1 reviews"
@@ -159,10 +93,6 @@ msgstr[0] "%1 рецензія"
159msgstr[1] "%1 рецензії"
93msgstr[1] "%1 рецензії"
160msgstr[2] "%1 рецензій"
94msgstr[2] "%1 рецензій"
161
95
162−#: Dash/Apps/AppPreview.qml:135
163−msgid "Rate this"
164−msgstr "Оцінити"
165−
166#: Dash/Previews/Reviews.qml:74
96#: Dash/Previews/Reviews.qml:74
167msgid "Add a review"
97msgid "Add a review"
168msgstr "Додати рецензію"
98msgstr "Додати рецензію"
@@ -179,7 +109,7 @@ msgstr "Надіслати"
179msgid "Comments:"
109msgid "Comments:"
180msgstr "Коментарі:"
110msgstr "Коментарі:"
181
111
182−#: Greeter/Lockscreen.qml:146
112+#: Greeter/Lockscreen.qml:149
183msgid "Emergency Call"
113msgid "Emergency Call"
184msgstr "Терміновий виклик"
114msgstr "Терміновий виклик"
185
115
@@ -229,15 +159,7 @@ msgstr "Зафіксувати на панелі запуску"
229msgid "Unlock from Launcher"
159msgid "Unlock from Launcher"
230msgstr "Від’єднати від панелі запуску"
160msgstr "Від’єднати від панелі запуску"
231
161
232−#: plugins/Unity/scope.cpp:408
233−msgid "Sorry, there is nothing that matches your search."
234−msgstr "Вибачте, для вказаних вами ключових слів нічого не знайдено."
235−
236−#: plugins/Unity/showallfilteroption.cpp:41
237−msgid "All"
238−msgstr "Усе"
239−
240−#: Shell.qml:441
162+#: Shell.qml:439
241#, qt-format
163#, qt-format
242msgid "Please enter %1"
164msgid "Please enter %1"
243msgstr "Будь ласка, введіть %1"
165msgstr "Будь ласка, введіть %1"
po/unity8.pot+10−88
@@ -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: 2013-11-12 16:10+0100\n"
11+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,74 +18,6 @@ msgstr ""
18"Content-Transfer-Encoding: 8bit\n"
18"Content-Transfer-Encoding: 8bit\n"
19"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
19"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
20
20
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88−
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr ""
23msgstr ""
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr ""
69msgstr ""
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/xh.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr ""
69msgstr ""
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/zh_CN.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-10-09 13:51+0000\n"
11"PO-Revision-Date: 2013-10-09 13:51+0000\n"
12"Last-Translator: Aron Xu <Unknown>\n"
12"Last-Translator: Aron Xu <Unknown>\n"
13"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
13"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "电话"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "相机"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "相册"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "浏览器"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "天气"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "记事本"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "日历"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "媒体播放器"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "印象笔记"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "地图"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "维基百科"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr "近期搜索"
69msgstr "近期搜索"
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "对不起,没有找到您想要的结果。"
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
po/zh_TW.po+12−90
@@ -7,7 +7,7 @@ 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: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11"PO-Revision-Date: 2013-06-27 10:24+0000\n"
11"PO-Revision-Date: 2013-06-27 10:24+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: Chinese (Traditional) <zh_TW@li.org>\n"
13"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88
20
89#: Components/EdgeDemoOverlay.qml:151
21#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
134
66
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
136msgid "Recent searches"
68msgid "Recent searches"
137msgstr "最近搜尋"
69msgstr "最近搜尋"
138
70
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
75#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
142#, qt-format
77#, qt-format
143msgid "(%1)"
78msgid "(%1)"
144msgstr ""
79msgstr ""
145
80
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
81#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
149#, qt-format
83#, qt-format
150msgid "%1 review"
84msgid "%1 review"
151msgid_plural "%1 reviews"
85msgid_plural "%1 reviews"
152msgstr[0] ""
86msgstr[0] ""
153msgstr[1] ""
87msgstr[1] ""
154
88
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
159#: Dash/Previews/Reviews.qml:74
89#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
90msgid "Add a review"
161msgstr ""
91msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172msgid "Comments:"
102msgid "Comments:"
173msgstr ""
103msgstr ""
174
104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -222,15 +152,7 @@ msgstr ""
222msgid "Unlock from Launcher"
152msgid "Unlock from Launcher"
223msgstr ""
153msgstr ""
224
154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "很抱歉,找不到符合您想搜尋的結果。"
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234#, qt-format
156#, qt-format
235msgid "Please enter %1"
157msgid "Please enter %1"
236msgstr ""
158msgstr ""
Bottombar/Bottombar.qml → qml/Bottombar/Bottombar.qmlrenamed

The content is the same.

Bottombar/HudButton.qml → qml/Bottombar/HudButton.qmlrenamed

The content is the same.

Bottombar/graphics/hud@20.png → qml/Bottombar/graphics/hud@20.pngrenamed

Binary file not shown.

Bottombar/graphics/hud_invoke_button_active@20.png → qml/Bottombar/graphics/hud_invoke_button_active@20.pngrenamed

Binary file not shown.

qml/CMakeLists.txtnew file+22
@@ -0,0 +1,22 @@
1+file(GLOB QML_JS_FILES *.qml *.js)
2+
3+install(FILES ${QML_JS_FILES}
4+ DESTINATION ${SHELL_APP_DIR}
5+ )
6+
7+set(QML_DIRS
8+ Bottombar
9+ Components
10+ Dash
11+ graphics
12+ Greeter
13+ Hud
14+ Panel
15+ Launcher
16+ SideStage
17+ Notifications
18+ )
19+
20+install(DIRECTORY ${QML_DIRS}
21+ DESTINATION ${SHELL_APP_DIR}
22+ )
Components/AnimationControllerWithSignals.qml → qml/Components/AnimationControllerWithSignals.qmlrenamed

The content is the same.

Components/ApplicationManagerWrapper.qml → qml/Components/ApplicationManagerWrapper.qmlrenamed

The content is the same.

Components/ApplicationScreenshot.qml → qml/Components/ApplicationScreenshot.qmlrenamed

The content is the same.

Components/ApplicationsModelStageFiltered.qml → qml/Components/ApplicationsModelStageFiltered.qmlrenamed

The content is the same.

Components/BaseCarouselDelegate.qml → qml/Components/BaseCarouselDelegate.qmlrenamed

The content is the same.

Components/Carousel.qml → qml/Components/Carousel.qmlrenamed+2−3
@@ -63,6 +63,7 @@ Item {
63 signal pressAndHold(int index, real itemY)
63 signal pressAndHold(int index, real itemY)
64
64
65 implicitHeight: listView.tileHeight * selectedItemScaleFactor
65 implicitHeight: listView.tileHeight * selectedItemScaleFactor
66+ opacity: listView.highlightIndex === -1 ? 1 : 0.6
66
67
67 /* Basic idea behind the carousel effect is to move the items of the delegates (compacting /stuffing them).
68 /* Basic idea behind the carousel effect is to move the items of the delegates (compacting /stuffing them).
68 One drawback is, that more delegates have to be drawn than usually. As some items are moved from the
69 One drawback is, that more delegates have to be drawn than usually. As some items are moved from the
@@ -75,11 +76,11 @@ Item {
75 ListView {
76 ListView {
76 id: listView
77 id: listView
77
78
79+ property int highlightIndex: -1
78 property real minimumTileWidth: 0
80 property real minimumTileWidth: 0
79 property real newContentX: disabledNewContentX
81 property real newContentX: disabledNewContentX
80 property real pathItemCount: referenceWidth / referenceTileWidth
82 property real pathItemCount: referenceWidth / referenceTileWidth
81 property real tileAspectRatio: 1
83 property real tileAspectRatio: 1
82− property int highlightIndex: -1
83
84
84 /* The positioning and scaling of the items in the carousel is based on the variable
85 /* The positioning and scaling of the items in the carousel is based on the variable
85 'continuousIndex', a continuous real variable between [0, 'carousel.model.count'],
86 'continuousIndex', a continuous real variable between [0, 'carousel.model.count'],
@@ -293,7 +294,6 @@ Item {
293 scale: itemScale * explicitScaleFactor
294 scale: itemScale * explicitScaleFactor
294 sourceComponent: itemComponent
295 sourceComponent: itemComponent
295 z: cachedTiles - Math.abs(index - listView.selectedIndex)
296 z: cachedTiles - Math.abs(index - listView.selectedIndex)
296− opacity: highlightIndex == -1 ? 1 : (highlightIndex == index ? 0.6 : 0.2)
297
297
298 transform: Translate {
298 transform: Translate {
299 x: xTransform
299 x: xTransform
@@ -333,7 +333,6 @@ Item {
333 onPressAndHold: {
333 onPressAndHold: {
334 listView.itemPressAndHold(index, item)
334 listView.itemPressAndHold(index, item)
335 }
335 }
336−
337 }
336 }
338 }
337 }
339 }
338 }
Components/Circle.qml → qml/Components/Circle.qmlrenamed

The content is the same.

Components/DragHandle.qml → qml/Components/DragHandle.qmlrenamed

The content is the same.

Components/DraggingArea.qml → qml/Components/DraggingArea.qmlrenamed

The content is the same.

Components/EdgeDemo.qml → qml/Components/EdgeDemo.qmlrenamed+1
@@ -31,6 +31,7 @@ Item {
31 property bool dashEnabled: true
31 property bool dashEnabled: true
32 property bool panelEnabled: true
32 property bool panelEnabled: true
33 property bool panelContentEnabled: true
33 property bool panelContentEnabled: true
34+ property bool running: !launcherEnabled || !dashEnabled || !panelEnabled || !panelContentEnabled
34
35
35 property bool paused: false
36 property bool paused: false
36
37
Components/EdgeDemoOverlay.qml → qml/Components/EdgeDemoOverlay.qmlrenamed

The content is the same.

Components/EdgeDragArea.qml → qml/Components/EdgeDragArea.qmlrenamed

The content is the same.

Components/EdgeDragEvaluator.qml → qml/Components/EdgeDragEvaluator.qmlrenamed

The content is the same.

Components/FilterGrid.qml → qml/Components/FilterGrid.qmlrenamed+2−1
@@ -41,11 +41,12 @@ Item {
41
41
42 /* Maximum number of rows to be show when filter=true. */
42 /* Maximum number of rows to be show when filter=true. */
43 property int collapsedRowCount: 2
43 property int collapsedRowCount: 2
44+ property int uncollapsedRowCount: Math.ceil(model.count / columns)
44 readonly property int collapsedHeight: {
45 readonly property int collapsedHeight: {
45 return iconTileGrid.contentHeightForRows(Math.min(collapsedRowCount, Math.ceil(model.count / columns)))
46 return iconTileGrid.contentHeightForRows(Math.min(collapsedRowCount, Math.ceil(model.count / columns)))
46 }
47 }
47 readonly property int uncollapsedHeight: {
48 readonly property int uncollapsedHeight: {
48− return iconTileGrid.contentHeightForRows(Math.ceil(model.count / columns))
49+ return iconTileGrid.contentHeightForRows(uncollapsedRowCount)
49 }
50 }
50
51
51 property alias minimumHorizontalSpacing: iconTileGrid.minimumHorizontalSpacing
52 property alias minimumHorizontalSpacing: iconTileGrid.minimumHorizontalSpacing
Components/LazyImage.qml → qml/Components/LazyImage.qmlrenamed

The content is the same.

Components/ListItems/Base.qml → qml/Components/ListItems/Base.qmlrenamed

The content is the same.

Components/ListItems/Header.qml → qml/Components/ListItems/Header.qmlrenamed

The content is the same.

Components/ListItems/Highlight.qml → qml/Components/ListItems/Highlight.qmlrenamed

The content is the same.

Components/ListItems/ThinDivider.qml → qml/Components/ListItems/ThinDivider.qmlrenamed

The content is the same.

Components/ListItems/VerticalThinDivider.qml → qml/Components/ListItems/VerticalThinDivider.qmlrenamed

The content is the same.

Components/ListItems/graphics/ListItemDividerHorizontal@18.png → qml/Components/ListItems/graphics/ListItemDividerHorizontal@18.pngrenamed

Binary file not shown.

Components/ListItems/graphics/ListItemDividerVertical@18.png → qml/Components/ListItems/graphics/ListItemDividerVertical@18.pngrenamed

Binary file not shown.

Components/OpenEffect.qml → qml/Components/OpenEffect.qmlrenamed

The content is the same.

Components/PageHeader.qml → qml/Components/PageHeader.qmlrenamed

The content is the same.

Components/PinPadButton.qml → qml/Components/PinPadButton.qmlrenamed

The content is the same.

Components/RatingStars.qml → qml/Components/RatingStars.qmlrenamed

The content is the same.

Components/ResponsiveFlowView.qml → qml/Components/ResponsiveFlowView.qmlrenamed

The content is the same.

Components/ResponsiveGridView.qml → qml/Components/ResponsiveGridView.qmlrenamed

The content is the same.

Components/Revealer.qml → qml/Components/Revealer.qmlrenamed

The content is the same.

Components/SearchHistoryModel.qml → qml/Components/SearchHistoryModel.qmlrenamed

The content is the same.

Components/Showable.qml → qml/Components/Showable.qmlrenamed

The content is the same.

Components/Stage.qml → qml/Components/Stage.qmlrenamed

The content is the same.

Components/StandardAnimation.qml → qml/Components/StandardAnimation.qmlrenamed

The content is the same.

Components/Tile.qml → qml/Components/Tile.qmlrenamed

The content is the same.

Components/TileStyle.qml → qml/Components/TileStyle.qmlrenamed

The content is the same.

Components/UbuntuShapeForItem.qml → qml/Components/UbuntuShapeForItem.qmlrenamed

The content is the same.

Components/VolumeControl.qml → qml/Components/VolumeControl.qmlrenamed

The content is the same.

Components/WrongPasswordAnimation.qml → qml/Components/WrongPasswordAnimation.qmlrenamed

The content is the same.

Components/carousel.js → qml/Components/carousel.jsrenamed

The content is the same.

Components/graphics/PageHeaderBaseDivider@18.png → qml/Components/graphics/PageHeaderBaseDivider@18.pngrenamed

Binary file not shown.

Components/graphics/PageHeaderBaseDivider@18.sci → qml/Components/graphics/PageHeaderBaseDivider@18.scirenamed

The content is the same.

Components/graphics/close@20.png → qml/Components/graphics/close@20.pngrenamed

Binary file not shown.

Components/graphics/icon_star_off@20.png → qml/Components/graphics/icon_star_off@20.pngrenamed

Binary file not shown.

Components/graphics/icon_star_on@20.png → qml/Components/graphics/icon_star_on@20.pngrenamed

Binary file not shown.

Components/graphics/non-selected@18.png → qml/Components/graphics/non-selected@18.pngrenamed

Binary file not shown.

Components/graphics/non-selected@18.sci → qml/Components/graphics/non-selected@18.scirenamed

The content is the same.

Dash/Apps/AppPreview.qml → qml/Dash/Apps/AppPreview.qmlrenamed

The content is the same.

Dash/Apps/CloseIcon.qml → qml/Dash/Apps/CloseIcon.qmlrenamed

The content is the same.

Dash/Apps/DashPluginFilterGrid.qml → qml/Dash/Apps/DashPluginFilterGrid.qmlrenamed

The content is the same.

Dash/Apps/FrequentlyUsedAppsModel.qml → qml/Dash/Apps/FrequentlyUsedAppsModel.qmlrenamed

The content is the same.

Dash/Apps/RunningApplicationTile.qml → qml/Dash/Apps/RunningApplicationTile.qmlrenamed

The content is the same.

Dash/Apps/RunningApplicationsGrid.qml → qml/Dash/Apps/RunningApplicationsGrid.qmlrenamed+17
@@ -17,6 +17,8 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import "../../Components"
18import "../../Components"
19
19
20+import Ubuntu.Gestures 0.1
21+
20ResponsiveFlowView {
22ResponsiveFlowView {
21 id: root
23 id: root
22 clip: true
24 clip: true
@@ -100,4 +102,19 @@ ResponsiveFlowView {
100 move: Transition {
102 move: Transition {
101 NumberAnimation { properties: "x,y"; duration: 400; easing.type: Easing.OutCubic }
103 NumberAnimation { properties: "x,y"; duration: 400; easing.type: Easing.OutCubic }
102 }
104 }
105+
106+ MouseArea {
107+ anchors.fill: parent
108+ z: -1 // behind all RunningApplicationTiles
109+ enabled: root.terminationModeEnabled
110+ onPressed: { root.terminationModeEnabled = false; }
111+ }
112+
113+ PressedOutsideNotifier {
114+ anchors.fill: parent
115+ enabled: root.terminationModeEnabled
116+ onPressedOutside: {
117+ root.terminationModeEnabled = false;
118+ }
119+ }
103}
120}
Dash/Apps/graphics/close_btn@9.png → qml/Dash/Apps/graphics/close_btn@9.pngrenamed

Binary file not shown.

Dash/Dash.qml → qml/Dash/Dash.qmlrenamed

The content is the same.

Dash/DashApps.qml → qml/Dash/DashApps.qmlrenamed−1
@@ -19,7 +19,6 @@ import Ubuntu.Components 0.1
19import Utils 0.1
19import Utils 0.1
20import "../Components"
20import "../Components"
21import "../Components/ListItems"
21import "../Components/ListItems"
22−import "../Applications"
23import "Apps"
22import "Apps"
24
23
25GenericScopeView {
24GenericScopeView {
Dash/DashBar.qml → qml/Dash/DashBar.qmlrenamed

The content is the same.

qml/Dash/DashCarousel.qmlnew file+47
@@ -0,0 +1,47 @@
1+/*
2+ * Copyright (C) 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 General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+import Ubuntu.Components 0.1
19+import "../Components"
20+
21+DashRenderer {
22+ id: dashCarousel
23+
24+ property alias cacheBuffer: carousel.cacheBuffer
25+ property alias itemComponent: carousel.itemComponent
26+ property alias minimumTileWidth: carousel.minimumTileWidth
27+ property alias selectedItemScaleFactor: carousel.selectedItemScaleFactor
28+ property alias tileAspectRatio: carousel.tileAspectRatio
29+
30+ currentItem: carousel.currentItem
31+ height: carousel.implicitHeight + units.gu(6)
32+ verticalSpacing: units.gu(3)
33+
34+ Carousel {
35+ id: carousel
36+ anchors.fill: parent
37+ tileAspectRatio: 198 / 288
38+ minimumTileWidth: units.gu(13)
39+ selectedItemScaleFactor: 1.14
40+ cacheBuffer: 1404 // 18px * 13gu * 6
41+ model: dashCarousel.model
42+ highlightIndex: dashCarousel.highlightIndex
43+
44+ onClicked: dashCarousel.clicked(index, itemY)
45+ onPressAndHold: dashCarousel.pressAndHold(index, itemY)
46+ }
47+}
Dash/DashContent.qml → qml/Dash/DashContent.qmlrenamed+8−2
@@ -105,8 +105,14 @@ Item {
105
105
106 // If the number of items is less than the current index, then need to reset to another item.
106 // If the number of items is less than the current index, then need to reset to another item.
107 onCountChanged: {
107 onCountChanged: {
108+ if (count > 0) {
108− if (currentIndex >= count)
109+ if (currentIndex >= count) {
109− dashContent.setCurrentScopeAtIndex(count-1, true, true)
110+ dashContent.setCurrentScopeAtIndex(count-1, true, true)
111+ } else if (currentIndex < 0) {
112+ // setting currentIndex directly, cause we don't want to loose set_current_index
113+ dashContent.currentIndex = 0
114+ }
115+ }
110 }
116 }
111
117
112 delegate:
118 delegate:
qml/Dash/DashFilterGrid.qmlnew file+65
@@ -0,0 +1,65 @@
1+/*
2+ * Copyright (C) 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 General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+import "../Components"
19+import ".."
20+
21+DashRenderer {
22+ id: dashFilterGrid
23+
24+ property alias cellWidth: filterGrid.cellWidth
25+ property alias cellHeight: filterGrid.cellHeight
26+ property alias delegate: filterGrid.delegate
27+ property alias delegateWidth: filterGrid.delegateWidth
28+ property alias delegateHeight: filterGrid.delegateHeight
29+ property alias maximumNumberOfColumns: filterGrid.maximumNumberOfColumns
30+ property alias minimumHorizontalSpacing: filterGrid.minimumHorizontalSpacing
31+
32+ collapsedHeight: filterGrid.collapsedHeight
33+ collapsedRowCount: filterGrid.collapsedRowCount
34+ columns: filterGrid.columns
35+ rows: filter ? filterGrid.collapsedRowCount : filterGrid.uncollapsedRowCount
36+ currentItem: filterGrid.currentItem
37+ expandable: filterGrid.expandable
38+ height: filterGrid.height
39+ margins: filterGrid.margins
40+ uncollapsedHeight: filterGrid.uncollapsedHeight
41+ verticalSpacing: filterGrid.verticalSpacing
42+
43+ function startFilterAnimation(filter) {
44+ filterGrid.startFilterAnimation(filter)
45+ }
46+
47+ FilterGrid {
48+ id: filterGrid
49+ width: dashFilterGrid.width
50+ minimumHorizontalSpacing: units.gu(0.5)
51+ delegateWidth: units.gu(11)
52+ delegateHeight: units.gu(9.5)
53+ verticalSpacing: units.gu(2)
54+ model: dashFilterGrid.model
55+ filter: dashFilterGrid.filter
56+ highlightIndex: dashFilterGrid.highlightIndex
57+ delegateCreationBegin: dashFilterGrid.delegateCreationBegin
58+ delegateCreationEnd: dashFilterGrid.delegateCreationEnd
59+
60+ onFilterChanged: {
61+ dashFilterGrid.filter = filter
62+ filter = Qt.binding(function() { return dashFilterGrid.filter })
63+ }
64+ }
65+}
Dash/DashHome.qml → qml/Dash/DashHome.qmlrenamed

The content is the same.

Dash/DashPreview.qml → qml/Dash/DashPreview.qmlrenamed+1
@@ -25,6 +25,7 @@ Item {
25 property alias showProcessingAction: waitingForActionMouseArea.enabled
25 property alias showProcessingAction: waitingForActionMouseArea.enabled
26
26
27 property real previewWidthRatio: 0.5
27 property real previewWidthRatio: 0.5
28+ property bool isCurrent: false
28
29
29 property Component previewImages
30 property Component previewImages
30 property Component header
31 property Component header
Dash/DashPreviewPlaceholder.qml → qml/Dash/DashPreviewPlaceholder.qmlrenamed

The content is the same.

qml/Dash/DashRenderer.qmlnew file+65
@@ -0,0 +1,65 @@
1+/*
2+ * Copyright (C) 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 General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+
19+Item {
20+ // Can the item be expanded?
21+ property bool expandable: false
22+
23+ // In case it can be expanded, should we filter it
24+ property bool filter: true
25+
26+ property int collapsedRowCount: 1
27+
28+ property int collapsedHeight: height
29+
30+ property int columns: 1
31+
32+ property int rows: 1
33+
34+ // Index of the highlighted item
35+ property int highlightIndex: -1
36+
37+ property int margins: 0
38+
39+ property int uncollapsedHeight: height
40+
41+ property var delegateCreationBegin: undefined
42+
43+ property var delegateCreationEnd: undefined
44+
45+ property real verticalSpacing: 0
46+
47+ // The current item of the renderer
48+ property var currentItem
49+
50+ // The model to renderer
51+ property var model
52+
53+ /// Emitted when the user clicked on an item
54+ /// @param index is the index of the clicked item
55+ /// @param itemY is y of the clicked delegate
56+ signal clicked(int index, real itemY)
57+
58+ /// Emitted when the user pressed and held on an item
59+ /// @param index is the index of the held item
60+ /// @param itemY is y of the held delegate
61+ signal pressAndHold(int index, real itemY)
62+
63+ function startFilterAnimation(filter) {
64+ }
65+}
Dash/Generic/FlatTileStyle.qml → qml/Dash/Generic/FlatTileStyle.qmlrenamed

The content is the same.

Dash/Generic/GenericCarousel.qml → qml/Dash/Generic/GenericCarousel.qmlrenamed+3−7
@@ -17,22 +17,18 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import Ubuntu.Components 0.1
18import Ubuntu.Components 0.1
19import "../../Components"
19import "../../Components"
20+import ".."
20
21
21−Carousel {
22+DashCarousel {
22 id: genericCarousel
23 id: genericCarousel
23−
24− tileAspectRatio: 198 / 288
25− minimumTileWidth: units.gu(13)
26 itemComponent: carouselDelegateGeneric
24 itemComponent: carouselDelegateGeneric
27− selectedItemScaleFactor: 1.14
28− cacheBuffer: 1404 // 18px * 13gu * 6
29− height: implicitHeight + units.gu(6)
30
25
31 Component {
26 Component {
32 id: carouselDelegateGeneric
27 id: carouselDelegateGeneric
33
28
34 BaseCarouselDelegate {
29 BaseCarouselDelegate {
35 id: item
30 id: item
31+ objectName: "carouselDelegate"
36
32
37 UbuntuShape {
33 UbuntuShape {
38 anchors.fill: parent
34 anchors.fill: parent
Dash/Generic/GenericCarouselLoader.qml → qml/Dash/Generic/GenericCarouselLoader.qmlrenamed

The content is the same.

Dash/Generic/GenericFilterGrid.qml → qml/Dash/Generic/GenericFilterGrid.qmlrenamed+13−19
@@ -15,38 +15,32 @@
15 */
15 */
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18+import Ubuntu.Components 0.1
18import "../../Components"
19import "../../Components"
20+import ".."
19
21
20−FilterGrid {
22+DashFilterGrid {
21− id: filtergrid
23+ id: genericFilterGrid
24+
25+ property int iconWidth: units.gu(8)
26+ property int iconHeight: units.gu(7.5)
22
27
23 minimumHorizontalSpacing: units.gu(0.5)
28 minimumHorizontalSpacing: units.gu(0.5)
24 delegateWidth: units.gu(11)
29 delegateWidth: units.gu(11)
25 delegateHeight: units.gu(9.5)
30 delegateHeight: units.gu(9.5)
26 verticalSpacing: units.gu(2)
31 verticalSpacing: units.gu(2)
27
32
28− property int iconWidth: units.gu(8)
29− property int iconHeight: units.gu(7.5)
30−
31− signal clicked(int index, real itemY)
32− signal pressAndHold(int index, real itemY)
33−
34 delegate: Tile {
33 delegate: Tile {
35 id: tile
34 id: tile
36 objectName: "delegate" + index
35 objectName: "delegate" + index
37− width: filtergrid.cellWidth
36+ width: genericFilterGrid.cellWidth
38− height: filtergrid.cellHeight
37+ height: genericFilterGrid.cellHeight
39 text: model.title
38 text: model.title
40− imageWidth: filtergrid.iconWidth
39+ imageWidth: genericFilterGrid.iconWidth
41− imageHeight: filtergrid.iconHeight
40+ imageHeight: genericFilterGrid.iconHeight
42 source: model.icon
41 source: model.icon
43
42
44− onClicked: {
45− filtergrid.clicked(index, tile.y)
43+ onClicked: genericFilterGrid.clicked(index, tile.y)
46− }
47−
48− onPressAndHold: {
49− filtergrid.pressAndHold(index, tile.y)
44+ onPressAndHold: genericFilterGrid.pressAndHold(index, tile.y)
50− }
51 }
45 }
52}
46}
Dash/Generic/GenericFilterGridPotrait.qml → qml/Dash/Generic/GenericFilterGridPotrait.qmlrenamed+1−3
@@ -15,16 +15,14 @@
15 */
15 */
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18+import Ubuntu.Components 0.1
18import "../../Components"
19import "../../Components"
19
20
20GenericFilterGrid {
21GenericFilterGrid {
21− id: filtergrid
22−
23 minimumHorizontalSpacing: units.gu(0.5)
22 minimumHorizontalSpacing: units.gu(0.5)
24 delegateWidth: units.gu(11)
23 delegateWidth: units.gu(11)
25 delegateHeight: units.gu(18)
24 delegateHeight: units.gu(18)
26 verticalSpacing: units.gu(2)
25 verticalSpacing: units.gu(2)
27−
28 iconWidth: (width / columns) * 0.8
26 iconWidth: (width / columns) * 0.8
29 iconHeight: iconWidth * 16 / 11
27 iconHeight: iconWidth * 16 / 11
30}
28}
Dash/Generic/GenericPreview.qml → qml/Dash/Generic/GenericPreview.qmlrenamed

The content is the same.

Dash/Generic/WeatherFilterGrid.qml → qml/Dash/Generic/WeatherFilterGrid.qmlrenamed

The content is the same.

Dash/GenericScopeView.qml → qml/Dash/GenericScopeView.qmlrenamed+39−28
@@ -46,8 +46,8 @@ FocusScope {
46 }
46 }
47 }
47 }
48
48
49− function activateApp(desktopFilePath) {
49+ function activateApp(appId) {
50− shell.activateApplication(desktopFilePath);
50+ shell.activateApplication(appId);
51 }
51 }
52
52
53 Binding {
53 Binding {
@@ -126,6 +126,7 @@ FocusScope {
126
126
127 delegate: ListItems.Base {
127 delegate: ListItems.Base {
128 id: baseItem
128 id: baseItem
129+ objectName: "dashCategory" + category
129 highlightWhenPressed: false
130 highlightWhenPressed: false
130
131
131 readonly property bool expandable: rendererLoader.item ? rendererLoader.item.expandable : false
132 readonly property bool expandable: rendererLoader.item ? rendererLoader.item.expandable : false
@@ -140,7 +141,7 @@ FocusScope {
140 right: parent.right
141 right: parent.right
141 }
142 }
142
143
143− source: getRenderer(model.renderer, model.contentType, model.rendererHint)
144+ source: getRenderer(model.renderer, model.contentType, model.rendererHint, results)
144
145
145 onLoaded: {
146 onLoaded: {
146 if (item.enableHeightBehavior !== undefined && item.enableHeightBehaviorOnNextCreation !== undefined) {
147 if (item.enableHeightBehavior !== undefined && item.enableHeightBehaviorOnNextCreation !== undefined) {
@@ -191,8 +192,8 @@ FocusScope {
191 } else {
192 } else {
192 previewListView.open = true
193 previewListView.open = true
193
194
194− scopeView.scope.preview( item.uri, item.icon, item.category, 0, item.mimetype, item.title,
195+ scopeView.scope.preview(item.uri, item.icon, item.category, 0, item.mimetype, item.title,
195− item.comment, item.dndUri, item.metadata)
196+ item.comment, item.dndUri, item.metadata)
196 }
197 }
197 }
198 }
198 onPressAndHold: {
199 onPressAndHold: {
@@ -205,7 +206,7 @@ FocusScope {
205 previewListView.open = true
206 previewListView.open = true
206
207
207 var item = target.model.get(index)
208 var item = target.model.get(index)
208− scopeView.scope.preview( item.uri, item.icon, item.category, 0, item.mimetype, item.title,
209+ scopeView.scope.preview(item.uri, item.icon, item.category, 0, item.mimetype, item.title,
209 item.comment, item.dndUri, item.metadata)
210 item.comment, item.dndUri, item.metadata)
210 }
211 }
211 }
212 }
@@ -271,6 +272,7 @@ FocusScope {
271
272
272 sectionProperty: "name"
273 sectionProperty: "name"
273 sectionDelegate: ListItems.Header {
274 sectionDelegate: ListItems.Header {
275+ objectName: "dashSectionHeader" + delegate.category
274 property var delegate: categoryView.item(delegateIndex)
276 property var delegate: categoryView.item(delegateIndex)
275 width: categoryView.width
277 width: categoryView.width
276 text: section
278 text: section
@@ -303,16 +305,21 @@ FocusScope {
303 }
305 }
304 }
306 }
305
307
306− function getRenderer(rendererId, contentType, rendererHint) {
308+ function getRenderer(rendererId, contentType, rendererHint, results) {
307 if (rendererId == "default") {
309 if (rendererId == "default") {
308 rendererId = getDefaultRendererId(contentType);
310 rendererId = getDefaultRendererId(contentType);
309 }
311 }
312+ if (rendererId == "carousel") {
313+ // Selectively disable carousel, 6 is fixed for now, should change on the form factor
314+ if (results.count <= 6)
315+ rendererId = "grid"
316+ }
310 switch (rendererId) {
317 switch (rendererId) {
311 case "carousel": {
318 case "carousel": {
312 switch (contentType) {
319 switch (contentType) {
313− case "music": return "Music/MusicCarouselLoader.qml";
320+ case "music": return "Music/MusicCarousel.qml";
314− case "video": return "Video/VideoCarouselLoader.qml";
321+ case "video": return "Video/VideoCarousel.qml";
315− default: return "Generic/GenericCarouselLoader.qml";
322+ default: return "Generic/GenericCarousel.qml";
316 }
323 }
317 }
324 }
318 case "grid": {
325 case "grid": {
@@ -442,27 +449,30 @@ FocusScope {
442 scopeView.scope.preview(item.uri, item.icon, item.category, 0, item.mimetype, item.title, item.comment, item.dndUri, item.metadata)
449 scopeView.scope.preview(item.uri, item.icon, item.category, 0, item.mimetype, item.title, item.comment, item.dndUri, item.metadata)
443 }
450 }
444
451
452+ // Adjust contentY in case we need to change to it to show the next row
453+ if (categoryDelegate.rows > 1) {
445− var itemY = categoryView.contentItem.mapFromItem(categoryDelegate.currentItem).y;
454+ var itemY = categoryView.contentItem.mapFromItem(categoryDelegate.currentItem).y;
446
455
447− // Find new contentY and effect.postionPx
456+ // Find new contentY and effect.postionPx
448− var newContentY = itemY - effect.positionPx - categoryDelegate.verticalSpacing;
457+ var newContentY = itemY - effect.positionPx - categoryDelegate.verticalSpacing;
449
458
450− // Make sure the item is not covered by a header. Move the effect split down if necessary
459+ // Make sure the item is not covered by a header. Move the effect split down if necessary
451− var headerHeight = pageHeader.height + categoryView.stickyHeaderHeight;
460+ var headerHeight = pageHeader.height + categoryView.stickyHeaderHeight;
452− var effectAdjust = Math.max(effect.positionPx, headerHeight);
461+ var effectAdjust = Math.max(effect.positionPx, headerHeight);
453
462
454− // Make sure we don't overscroll the listview. If yes, adjust effect position
463+ // Make sure we don't overscroll the listview. If yes, adjust effect position
455− if (newContentY < 0) {
464+ if (newContentY < 0) {
456− effectAdjust += newContentY;
465+ effectAdjust += newContentY;
457− newContentY = 0;
466+ newContentY = 0;
458− }
467+ }
459− if (newContentY > Math.max(0, categoryView.contentHeight - categoryView.height)) {
468+ if (newContentY > Math.max(0, categoryView.contentHeight - categoryView.height)) {
460− effectAdjust += -(categoryView.contentHeight - categoryView.height) + newContentY
469+ effectAdjust += -(categoryView.contentHeight - categoryView.height) + newContentY
461− newContentY = categoryView.contentHeight - categoryView.height;
470+ newContentY = categoryView.contentHeight - categoryView.height;
462− }
471+ }
463
472
464− effect.positionPx = effectAdjust;
473+ effect.positionPx = effectAdjust;
465− categoryView.contentY = newContentY;
474+ categoryView.contentY = newContentY;
475+ }
466 }
476 }
467
477
468 property bool open: false
478 property bool open: false
@@ -527,6 +537,7 @@ FocusScope {
527 onLoaded: {
537 onLoaded: {
528 if (previewListView.onScreen && previewData !== undefined) {
538 if (previewListView.onScreen && previewData !== undefined) {
529 item.previewData = Qt.binding(function() { return previewData })
539 item.previewData = Qt.binding(function() { return previewData })
540+ item.isCurrent = Qt.binding(function() { return ListView.isCurrentItem })
530 }
541 }
531 }
542 }
532
543
@@ -539,7 +550,7 @@ FocusScope {
539 }
550 }
540
551
541 function closePreviewSpinner() {
552 function closePreviewSpinner() {
542− if(item) {
553+ if (item) {
543 item.showProcessingAction = false;
554 item.showProcessingAction = false;
544 }
555 }
545 }
556 }
Dash/Movie/MoviePreview.qml → qml/Dash/Movie/MoviePreview.qmlrenamed

The content is the same.

Dash/Music/CarouselDelegateMusic.qml → qml/Dash/Music/CarouselDelegateMusic.qmlrenamed

The content is the same.

Dash/Music/MusicCarousel.qml → qml/Dash/Music/MusicCarousel.qmlrenamed+2−2
@@ -16,15 +16,15 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import "../../Components"
18import "../../Components"
19+import ".."
19
20
20−Carousel {
21+DashCarousel {
21 id: musicCarousel
22 id: musicCarousel
22 tileAspectRatio: 1
23 tileAspectRatio: 1
23 minimumTileWidth: units.gu(13)
24 minimumTileWidth: units.gu(13)
24 itemComponent: carouselDelegateMusic
25 itemComponent: carouselDelegateMusic
25 selectedItemScaleFactor: 1.2
26 selectedItemScaleFactor: 1.2
26 cacheBuffer: 1404 // 18px * 13gu * 6
27 cacheBuffer: 1404 // 18px * 13gu * 6
27− height: implicitHeight + units.gu(6)
28
28
29 Component {
29 Component {
30 id: carouselDelegateMusic
30 id: carouselDelegateMusic
Dash/Music/MusicCarouselLoader.qml → qml/Dash/Music/MusicCarouselLoader.qmlrenamed

The content is the same.

Dash/Music/MusicFilterGrid.qml → qml/Dash/Music/MusicFilterGrid.qmlrenamed+7−13
@@ -19,22 +19,21 @@ import "../../Components"
19import "../Generic"
19import "../Generic"
20
20
21GenericFilterGrid {
21GenericFilterGrid {
22− id: filtergrid
22+ id: musicFilterGrid
23
23
24 delegateWidth: units.gu(11)
24 delegateWidth: units.gu(11)
25 delegateHeight: units.gu(16)
25 delegateHeight: units.gu(16)
26−
27 iconWidth: units.gu(11)
26 iconWidth: units.gu(11)
28 iconHeight: units.gu(11)
27 iconHeight: units.gu(11)
29
28
30 delegate: Tile {
29 delegate: Tile {
31 id: tile
30 id: tile
32 objectName: "delegate" + index
31 objectName: "delegate" + index
33− width: filtergrid.cellWidth
32+ width: musicFilterGrid.cellWidth
34− height: filtergrid.cellHeight
33+ height: musicFilterGrid.cellHeight
35 text: model.comment
34 text: model.comment
36− imageWidth: filtergrid.iconWidth
35+ imageWidth: musicFilterGrid.iconWidth
37− imageHeight: filtergrid.iconHeight
36+ imageHeight: musicFilterGrid.iconHeight
38 source: model.icon
37 source: model.icon
39 maximumLineCount: 2
38 maximumLineCount: 2
40 horizontalAlignment: Text.AlignLeft
39 horizontalAlignment: Text.AlignLeft
@@ -43,12 +42,7 @@ GenericFilterGrid {
43 artist: model.title
42 artist: model.title
44 }
43 }
45
44
46− onClicked: {
47− filtergrid.clicked(index, tile.y)
45+ onClicked: musicFilterGrid.clicked(index, tile.y)
48− }
49−
50− onPressAndHold: {
51− filtergrid.pressAndHold(index, tile.y)
46+ onPressAndHold: musicFilterGrid.pressAndHold(index, tile.y)
52− }
53 }
47 }
54}
48}
qml/Dash/Music/MusicPreview.qmlnew file+203
@@ -0,0 +1,203 @@
1+/*
2+ * Copyright (C) 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 General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+import QtMultimedia 5.0
19+import Ubuntu.Components 0.1
20+import Ubuntu.Components.ListItems 0.1
21+import ".."
22+import "../Generic"
23+import "../../Components"
24+import "../Previews"
25+
26+GenericPreview {
27+ id: root
28+
29+ previewImages: previewImageComponent
30+ header: headerComponent
31+ description: descriptionComponent
32+
33+ Component {
34+ id: previewImageComponent
35+ LazyImage {
36+ height: units.gu(22)
37+ scaleTo: "height"
38+ source: previewData ? previewData.image : ""
39+ initialHeight: height
40+ initialWidth: height
41+ }
42+ }
43+
44+ Component {
45+ id: headerComponent
46+ Header {
47+ title: previewData.title
48+ subtitle: previewData.subtitle
49+ }
50+ }
51+
52+ Component {
53+ id: descriptionComponent
54+
55+ Item {
56+ height: childrenRect.height
57+ Audio {
58+ id: audioPlayer
59+ objectName: "audioPlayer"
60+ property real progress: audioPlayer.position / audioPlayer.duration
61+
62+ property Item playingItem
63+
64+ Component.onDestruction: {
65+ audioPlayer.stop();
66+ }
67+
68+ onErrorStringChanged: console.warn("Audio player error:", errorString)
69+
70+ }
71+
72+ Connections {
73+ target: root
74+ onIsCurrentChanged: {
75+ if (!root.isCurrent) {
76+ audioPlayer.stop();
77+ }
78+ }
79+ }
80+
81+ Column {
82+ anchors { left: parent.left; right: parent.right }
83+ visible: trackRepeater.count > 0
84+
85+ ThinDivider {
86+ objectName: "topDivider"
87+ anchors { left: parent.left; right: parent.right }
88+ }
89+
90+ Repeater {
91+ id: trackRepeater
92+ objectName: "trackRepeater"
93+
94+ model: previewData.tracks
95+
96+ delegate: Item {
97+ id: trackItem
98+ objectName: "trackItem" + index
99+ anchors { left: parent.left; right: parent.right }
100+ height: units.gu(5)
101+ property bool isPlayingItem: audioPlayer.playingItem == trackItem
102+
103+ function play() {
104+ audioPlayer.stop();
105+ // Make sure we change the source, even if two items point to the same uri location
106+ audioPlayer.source = "";
107+ audioPlayer.source = model.uri;
108+ audioPlayer.playingItem = trackItem;
109+ audioPlayer.play();
110+ }
111+
112+ Row {
113+ id: trackRow
114+ width: parent.width
115+ spacing: units.gu(1)
116+ property int column1Width: units.gu(3)
117+ property int column2Width: width - (2 * spacing) - column1Width - column3Width
118+ property int column3Width: units.gu(4)
119+ anchors.verticalCenter: parent.verticalCenter
120+
121+ Button {
122+ objectName: "playButton"
123+ width: trackRow.column1Width
124+ height: width
125+ iconSource: audioPlayer.playbackState == Audio.PlayingState && trackItem.isPlayingItem ? "image://theme/media-playback-pause" : "image://theme/media-playback-start"
126+
127+ // Can't be "transparent" or "#00xxxxxx" as the button optimizes away the surrounding shape
128+ // FIXME when this is resolved: https://bugs.launchpad.net/ubuntu-ui-toolkit/+bug/1251685
129+ color: "#01000000"
130+
131+ onClicked: {
132+ if (trackItem.isPlayingItem) {
133+ if (audioPlayer.playbackState == Audio.PlayingState) {
134+ audioPlayer.pause();
135+ } else if (audioPlayer.playbackState == Audio.PausedState){
136+ audioPlayer.play();
137+ }
138+ } else {
139+ trackItem.play();
140+ }
141+ }
142+ }
143+
144+ Label {
145+ objectName: "trackTitleLabel"
146+ fontSize: "small"
147+ opacity: 0.9
148+ color: "white"
149+ horizontalAlignment: Text.AlignLeft
150+ anchors.verticalCenter: parent.verticalCenter
151+ width: parent.column2Width
152+ text: title
153+ style: Text.Raised
154+ styleColor: "black"
155+ elide: Text.ElideRight
156+
157+ UbuntuShape {
158+ id: progressBarFill
159+ objectName: "progressBarFill"
160+ color: UbuntuColors.orange
161+ anchors.left: progressBarImage.left
162+ anchors.right: progressBarImage.right
163+ anchors.verticalCenter: progressBarImage.verticalCenter
164+ height: units.dp(2)
165+ anchors.margins: units.dp(2)
166+ anchors.rightMargin: maxWidth - (maxWidth * audioPlayer.progress) + units.dp(2)
167+ visible: progressBarImage.visible
168+ property int maxWidth: progressBarImage.width - units.dp(4)
169+ }
170+
171+ Image {
172+ id: progressBarImage
173+ anchors { left: parent.left; top: parent.bottom; right: parent.right }
174+ height: units.dp(6)
175+ visible: audioPlayer.playbackState != Audio.StoppedState && trackItem.isPlayingItem && model.length.length > 0
176+ source: "graphics/music_progress_bg.png"
177+ }
178+ }
179+
180+ Label {
181+ id: valueLabel
182+ objectName: "timeLabel"
183+ fontSize: "small"
184+ opacity: 0.9
185+ color: "white"
186+ anchors.verticalCenter: parent.verticalCenter
187+ horizontalAlignment: Text.AlignRight
188+ width: parent.column3Width
189+ text: length
190+ style: Text.Raised
191+ styleColor: "black"
192+ }
193+ }
194+
195+ ThinDivider {
196+ anchors { left: parent.left; bottom: parent.bottom; right: parent.right }
197+ }
198+ }
199+ }
200+ }
201+ }
202+ }
203+}
Dash/Music/MusicTileStyle.qml → qml/Dash/Music/MusicTileStyle.qmlrenamed

The content is the same.

qml/Dash/Music/graphics/music_progress_bg.pngnew file

Binary file not shown.

Dash/PreviewDelegateMapper.qml → qml/Dash/PreviewDelegateMapper.qmlrenamed+1
@@ -23,6 +23,7 @@ QtObject {
23 property var previewDelegateMapping: {"preview-generic": genericPreview,
23 property var previewDelegateMapping: {"preview-generic": genericPreview,
24 "preview-application": appPreview,
24 "preview-application": appPreview,
25 "preview-movie": "Movie/MoviePreview.qml",
25 "preview-movie": "Movie/MoviePreview.qml",
26+ "preview-music": "Music/MusicPreview.qml",
26 }
27 }
27 }
28 }
28
29
Dash/Previews/Header.qml → qml/Dash/Previews/Header.qmlrenamed

The content is the same.

Dash/Previews/Reviews.qml → qml/Dash/Previews/Reviews.qmlrenamed

The content is the same.

Dash/ScopeDelegateMapper.qml → qml/Dash/ScopeDelegateMapper.qmlrenamed

The content is the same.

Dash/ScopeListView.qml → qml/Dash/ScopeListView.qmlrenamed+1−1
@@ -15,7 +15,7 @@
15 */
15 */
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18−import ListViewWithPageHeader 0.1
18+import DashViews 0.1
19
19
20ListViewWithPageHeader {
20ListViewWithPageHeader {
21 maximumFlickVelocity: height * 10
21 maximumFlickVelocity: height * 10
Dash/SearchableResultModel.qml → qml/Dash/SearchableResultModel.qmlrenamed

The content is the same.

Dash/Video/CarouselDelegateVideo.qml → qml/Dash/Video/CarouselDelegateVideo.qmlrenamed

The content is the same.

Dash/Video/VideoCarousel.qml → qml/Dash/Video/VideoCarousel.qmlrenamed+2−2
@@ -16,15 +16,15 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import "../../Components"
18import "../../Components"
19+import ".."
19
20
20−Carousel {
21+DashCarousel {
21 id: videosCarousel
22 id: videosCarousel
22 tileAspectRatio: 198 / 288
23 tileAspectRatio: 198 / 288
23 minimumTileWidth: units.gu(13)
24 minimumTileWidth: units.gu(13)
24 itemComponent: carouselDelegateVideo
25 itemComponent: carouselDelegateVideo
25 selectedItemScaleFactor: 1.14
26 selectedItemScaleFactor: 1.14
26 cacheBuffer: 1404 // 18px * 13gu * 6
27 cacheBuffer: 1404 // 18px * 13gu * 6
27− height: implicitHeight + units.gu(6)
28
28
29 Component {
29 Component {
30 id: carouselDelegateVideo
30 id: carouselDelegateVideo
Dash/Video/VideoCarouselLoader.qml → qml/Dash/Video/VideoCarouselLoader.qmlrenamed

The content is the same.

Dash/Video/VideoFilterGrid.qml → qml/Dash/Video/VideoFilterGrid.qmlrenamed+8−13
@@ -15,38 +15,33 @@
15 */
15 */
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18+import Ubuntu.Components 0.1
18import "../../Components"
19import "../../Components"
19import "../Generic"
20import "../Generic"
20
21
21GenericFilterGrid {
22GenericFilterGrid {
22− id: filtergrid
23+ id: videoFilterGrid
23
24
24 delegateWidth: units.gu(11)
25 delegateWidth: units.gu(11)
25 delegateHeight: units.gu(15)
26 delegateHeight: units.gu(15)
26−
27 iconWidth: units.gu(11)
27 iconWidth: units.gu(11)
28 iconHeight: units.gu(11)
28 iconHeight: units.gu(11)
29
29
30 delegate: Tile {
30 delegate: Tile {
31 id: tile
31 id: tile
32 objectName: "delegate" + index
32 objectName: "delegate" + index
33− width: filtergrid.cellWidth
33+ width: videoFilterGrid.cellWidth
34− height: filtergrid.cellHeight
34+ height: videoFilterGrid.cellHeight
35 text: model.title
35 text: model.title
36− imageWidth: filtergrid.iconWidth
36+ imageWidth: videoFilterGrid.iconWidth
37− imageHeight: filtergrid.iconHeight
37+ imageHeight: videoFilterGrid.iconHeight
38 source: model.icon
38 source: model.icon
39 maximumLineCount: 2
39 maximumLineCount: 2
40 horizontalAlignment: Text.AlignLeft
40 horizontalAlignment: Text.AlignLeft
41
41
42 style: VideoTileStyle {}
42 style: VideoTileStyle {}
43
43
44− onClicked: {
45− filtergrid.clicked(index, tile.y)
44+ onClicked: videoFilterGrid.clicked(index, tile.y)
46− }
47−
48− onPressAndHold: {
49− filtergrid.pressAndHold(index, tile.y)
45+ onPressAndHold: videoFilterGrid.pressAndHold(index, tile.y)
50− }
51 }
46 }
52}
47}
Dash/Video/VideoTileStyle.qml → qml/Dash/Video/VideoTileStyle.qmlrenamed

The content is the same.

Dash/Video/graphics/icon_button_amazon@20.png → qml/Dash/Video/graphics/icon_button_amazon@20.pngrenamed

Binary file not shown.

Dash/Video/graphics/icon_button_u1@20.png → qml/Dash/Video/graphics/icon_button_u1@20.pngrenamed

Binary file not shown.

Dash/Video/graphics/movie_icon_holder@27.png → qml/Dash/Video/graphics/movie_icon_holder@27.pngrenamed

Binary file not shown.

Dash/graphics/header_handlearrow2@20.png → qml/Dash/graphics/header_handlearrow2@20.pngrenamed

Binary file not shown.

Dash/graphics/header_handlearrow@20.png → qml/Dash/graphics/header_handlearrow@20.pngrenamed

Binary file not shown.

Dash/graphics/icon_clear@20.png → qml/Dash/graphics/icon_clear@20.pngrenamed

Binary file not shown.

Dash/graphics/icon_listview_clear@20.png → qml/Dash/graphics/icon_listview_clear@20.pngrenamed

Binary file not shown.

Dash/graphics/icon_search_active@20.png → qml/Dash/graphics/icon_search_active@20.pngrenamed

Binary file not shown.

Dash/graphics/icon_search_inactive@20.png → qml/Dash/graphics/icon_search_inactive@20.pngrenamed

Binary file not shown.

Dash/graphics/phone/screenshots/angrybirds@12.png → qml/Dash/graphics/phone/screenshots/angrybirds@12.pngrenamed

Binary file not shown.

Dash/graphics/phone/screenshots/browser@12.png → qml/Dash/graphics/phone/screenshots/browser@12.pngrenamed

Binary file not shown.

Dash/graphics/phone/screenshots/camera@12.png → qml/Dash/graphics/phone/screenshots/camera@12.pngrenamed

Binary file not shown.

Dash/graphics/phone/screenshots/facebook@12.png → qml/Dash/graphics/phone/screenshots/facebook@12.pngrenamed

Binary file not shown.

Dash/graphics/phone/screenshots/gallery@12.png → qml/Dash/graphics/phone/screenshots/gallery@12.pngrenamed

Binary file not shown.

Dash/graphics/phone/screenshots/map@12.png → qml/Dash/graphics/phone/screenshots/map@12.pngrenamed

Binary file not shown.

Dash/graphics/phone/screenshots/music@12.png → qml/Dash/graphics/phone/screenshots/music@12.pngrenamed

Binary file not shown.

Dash/graphics/phone/screenshots/phone@12.png → qml/Dash/graphics/phone/screenshots/phone@12.pngrenamed

Binary file not shown.

Dash/graphics/phone/screenshots/settings@12.png → qml/Dash/graphics/phone/screenshots/settings@12.pngrenamed

Binary file not shown.

Dash/graphics/phone/screenshots/twitter@12.png → qml/Dash/graphics/phone/screenshots/twitter@12.pngrenamed

Binary file not shown.

Dash/graphics/play_button@18.png → qml/Dash/graphics/play_button@18.pngrenamed

Binary file not shown.

Dash/graphics/play_button_active@18.png → qml/Dash/graphics/play_button_active@18.pngrenamed

Binary file not shown.

Dash/graphics/play_button_active_big@20.png → qml/Dash/graphics/play_button_active_big@20.pngrenamed

Binary file not shown.

Dash/graphics/play_button_big@20.png → qml/Dash/graphics/play_button_big@20.pngrenamed

Binary file not shown.

Dash/graphics/tablet/icon_close_preview@20.png → qml/Dash/graphics/tablet/icon_close_preview@20.pngrenamed

Binary file not shown.

Dash/graphics/tooltip_arrow@27.png → qml/Dash/graphics/tooltip_arrow@27.pngrenamed

Binary file not shown.

Greeter/Clock.qml → qml/Greeter/Clock.qmlrenamed

The content is the same.

Greeter/Dot.qml → qml/Greeter/Dot.qmlrenamed

The content is the same.

Greeter/Gradient.js → qml/Greeter/Gradient.jsrenamed

The content is the same.

Greeter/Greeter.qml → qml/Greeter/Greeter.qmlrenamed+1−1
@@ -51,7 +51,7 @@ Showable {
51 signal unlocked(int uid)
51 signal unlocked(int uid)
52
52
53 onRightTeaserPressedChanged: {
53 onRightTeaserPressedChanged: {
54− if (rightTeaserPressed && !locked && x == 0) {
54+ if (rightTeaserPressed && (!locked || narrowMode) && x == 0) {
55 teasingTimer.start();
55 teasingTimer.start();
56 }
56 }
57 }
57 }
Greeter/GreeterContent.qml → qml/Greeter/GreeterContent.qmlrenamed

The content is the same.

Greeter/Infographics.qml → qml/Greeter/Infographics.qmlrenamed

The content is the same.

Greeter/Lockscreen.qml → qml/Greeter/Lockscreen.qmlrenamed+2−2
@@ -30,9 +30,9 @@ Showable {
30 // In case the Lockscreen can show a greeter message, this is the username
30 // In case the Lockscreen can show a greeter message, this is the username
31 property string username: ""
31 property string username: ""
32
32
33− // As the numeric PIN pad doesn't have a OK button by design, we need to auto-confirm on a certain length.
33+ // Set this to a value greater 0 to enable auto-confirm behavior for the lockscreen.
34 // This is ignored by the alphaNumeric lockscreen as that one is confirmed with pressing enter on the OSK.
34 // This is ignored by the alphaNumeric lockscreen as that one is confirmed with pressing enter on the OSK.
35− property int pinLength: 4
35+ property int pinLength: -1
36
36
37 property url background: ""
37 property url background: ""
38
38
Greeter/LoginList.qml → qml/Greeter/LoginList.qmlrenamed+11
@@ -289,5 +289,16 @@ Item {
289 }
289 }
290 passwordInput.text = "";
290 passwordInput.text = "";
291 }
291 }
292+
293+ onRequestAuthenticationUser: {
294+ // Find index for requested user, if it exists
295+ for (var i = 0; i < userList.model.count; i++) {
296+ if (user == userList.model.data(i, LightDM.UserRoles.NameRole)) {
297+ moveTimer.start();
298+ userList.currentIndex = i;
299+ return;
300+ }
301+ }
302+ }
292 }
303 }
293}
304}
Greeter/ObjectPositioner.qml → qml/Greeter/ObjectPositioner.qmlrenamed

The content is the same.

Greeter/PassphraseLockscreen.qml → qml/Greeter/PassphraseLockscreen.qmlrenamed

The content is the same.

Greeter/PinLockscreen.qml → qml/Greeter/PinLockscreen.qmlrenamed

The content is the same.

Greeter/graphics/dot_empty.png → qml/Greeter/graphics/dot_empty.pngrenamed

Binary file not shown.

Greeter/graphics/dot_filled.png → qml/Greeter/graphics/dot_filled.pngrenamed

Binary file not shown.

Greeter/graphics/dot_pointer.png → qml/Greeter/graphics/dot_pointer.pngrenamed

Binary file not shown.

Greeter/graphics/icon_arrow.png → qml/Greeter/graphics/icon_arrow.pngrenamed

Binary file not shown.

Greeter/graphics/infographic_circle_back.png → qml/Greeter/graphics/infographic_circle_back.pngrenamed

Binary file not shown.

Hud/Hud.qml → qml/Hud/Hud.qmlrenamed

The content is the same.

Hud/HudParametrizedActionsPage.qml → qml/Hud/HudParametrizedActionsPage.qmlrenamed

The content is the same.

Hud/Result.qml → qml/Hud/Result.qmlrenamed

The content is the same.

Hud/ResultList.qml → qml/Hud/ResultList.qmlrenamed

The content is the same.

Hud/SearchBar.qml → qml/Hud/SearchBar.qmlrenamed

The content is the same.

Hud/ShowingAnimation.qml → qml/Hud/ShowingAnimation.qmlrenamed

The content is the same.

Hud/SliderLabel.qml → qml/Hud/SliderLabel.qmlrenamed+4−2
@@ -36,10 +36,12 @@ Item {
36 label.text = sliderData["label"]
36 label.text = sliderData["label"]
37 slider.minimumValue = sliderData["min"]
37 slider.minimumValue = sliderData["min"]
38 slider.maximumValue = sliderData["max"]
38 slider.maximumValue = sliderData["max"]
39+ if("live" in sliderData)
39− slider.live = sliderData["live"]
40+ slider.live = sliderData["live"]
40 // SDK Slider does not support step yet
41 // SDK Slider does not support step yet
41// slider.step = sliderData["step"]
42// slider.step = sliderData["step"]
43+ if("value" in sliderData)
42− slider.value = sliderData["value"]
44+ slider.value = sliderData["value"]
43 action = sliderData["action"]
45 action = sliderData["action"]
44 }
46 }
45
47
Hud/SoundAmplitudeDelegate.qml → qml/Hud/SoundAmplitudeDelegate.qmlrenamed

The content is the same.

Hud/SoundAmplitudeVisual.qml → qml/Hud/SoundAmplitudeVisual.qmlrenamed

The content is the same.

Hud/ToolBar.qml → qml/Hud/ToolBar.qmlrenamed

The content is the same.

Hud/ToolBarIcon.qml → qml/Hud/ToolBarIcon.qmlrenamed

The content is the same.

Hud/graphics/divider@20.png → qml/Hud/graphics/divider@20.pngrenamed

Binary file not shown.

Hud/graphics/divider@20.sci → qml/Hud/graphics/divider@20.scirenamed

The content is the same.

Hud/graphics/dropshadow_right@20.png → qml/Hud/graphics/dropshadow_right@20.pngrenamed

Binary file not shown.

Hud/graphics/help@20.png → qml/Hud/graphics/help@20.pngrenamed

Binary file not shown.

Hud/graphics/hud_bg@20.png → qml/Hud/graphics/hud_bg@20.pngrenamed

Binary file not shown.

Hud/graphics/hud_handlearrow@20.png → qml/Hud/graphics/hud_handlearrow@20.pngrenamed

Binary file not shown.

Hud/graphics/hud_handlebar@20.png → qml/Hud/graphics/hud_handlebar@20.pngrenamed

Binary file not shown.

Hud/graphics/icon_arrow@20.png → qml/Hud/graphics/icon_arrow@20.pngrenamed

Binary file not shown.

Hud/graphics/icon_clear@20.png → qml/Hud/graphics/icon_clear@20.pngrenamed

Binary file not shown.

Hud/graphics/icon_search@20.png → qml/Hud/graphics/icon_search@20.pngrenamed

Binary file not shown.

Hud/graphics/microphone@20.png → qml/Hud/graphics/microphone@20.pngrenamed

Binary file not shown.

Hud/graphics/popup_triangle@20.png → qml/Hud/graphics/popup_triangle@20.pngrenamed

Binary file not shown.

Hud/graphics/settings@20.png → qml/Hud/graphics/settings@20.pngrenamed

Binary file not shown.

Hud/graphics/undo@20.png → qml/Hud/graphics/undo@20.pngrenamed

Binary file not shown.

Hud/graphics/view-fullscreen@20.png → qml/Hud/graphics/view-fullscreen@20.pngrenamed

Binary file not shown.

Launcher/FoldingLauncherDelegate.qml → qml/Launcher/FoldingLauncherDelegate.qmlrenamed

The content is the same.

Launcher/Launcher.qml → qml/Launcher/Launcher.qmlrenamed+3−3
@@ -41,7 +41,7 @@ Item {
41 signal dash()
41 signal dash()
42
42
43 // emitted when the dash icon in the launcher has been tapped
43 // emitted when the dash icon in the launcher has been tapped
44− signal dashItemSelected()
44+ signal showDashHome()
45
45
46 onStateChanged: {
46 onStateChanged: {
47 if (state == "") {
47 if (state == "") {
@@ -161,9 +161,9 @@ Item {
161 root.state = ""
161 root.state = ""
162 launcherApplicationSelected(appId)
162 launcherApplicationSelected(appId)
163 }
163 }
164− onDashItemSelected: {
164+ onShowDashHome: {
165 root.state = ""
165 root.state = ""
166− root.dashItemSelected(index)
166+ root.showDashHome();
167 }
167 }
168
168
169 onPreventHidingChanged: {
169 onPreventHidingChanged: {
Launcher/LauncherDelegate.qml → qml/Launcher/LauncherDelegate.qmlrenamed

The content is the same.

Launcher/LauncherPanel.qml → qml/Launcher/LauncherPanel.qmlrenamed+2−2
@@ -36,7 +36,7 @@ Item {
36 property int highlightIndex: -1
36 property int highlightIndex: -1
37
37
38 signal applicationSelected(string appId)
38 signal applicationSelected(string appId)
39− signal dashItemSelected(int index)
39+ signal showDashHome()
40
40
41 BorderImage {
41 BorderImage {
42 id: background
42 id: background
@@ -57,7 +57,7 @@ Item {
57 id: dashItem
57 id: dashItem
58 width: parent.width
58 width: parent.width
59 height: units.gu(7)
59 height: units.gu(7)
60− onClicked: root.dashItemSelected(0)
60+ onClicked: root.showDashHome()
61 z: 1
61 z: 1
62 Image {
62 Image {
63 objectName: "dashItem"
63 objectName: "dashItem"
Launcher/graphics/focused_app_arrow@30.png → qml/Launcher/graphics/focused_app_arrow@30.pngrenamed

Binary file not shown.

Launcher/graphics/highlight@18.png → qml/Launcher/graphics/highlight@18.pngrenamed

Binary file not shown.

Launcher/graphics/home@18.png → qml/Launcher/graphics/home@18.pngrenamed

Binary file not shown.

Launcher/graphics/launcher_bg@30.png → qml/Launcher/graphics/launcher_bg@30.pngrenamed

Binary file not shown.

Launcher/graphics/launcher_bg@30.sci → qml/Launcher/graphics/launcher_bg@30.scirenamed

The content is the same.

Launcher/graphics/non-selected@18.png → qml/Launcher/graphics/non-selected@18.pngrenamed

Binary file not shown.

Launcher/graphics/non-selected@18.sci → qml/Launcher/graphics/non-selected@18.scirenamed

The content is the same.

Launcher/graphics/notification@30.png → qml/Launcher/graphics/notification@30.pngrenamed

Binary file not shown.

Launcher/graphics/notification@30.sci → qml/Launcher/graphics/notification@30.scirenamed

The content is the same.

Launcher/graphics/progressbar-fill@30.png → qml/Launcher/graphics/progressbar-fill@30.pngrenamed

Binary file not shown.

Launcher/graphics/progressbar-fill@30.sci → qml/Launcher/graphics/progressbar-fill@30.scirenamed

The content is the same.

Launcher/graphics/progressbar-trough@30.png → qml/Launcher/graphics/progressbar-trough@30.pngrenamed

Binary file not shown.

Launcher/graphics/progressbar-trough@30.sci → qml/Launcher/graphics/progressbar-trough@30.scirenamed

The content is the same.

Launcher/graphics/quicklist_tooltip@30.png → qml/Launcher/graphics/quicklist_tooltip@30.pngrenamed

Binary file not shown.

Launcher/graphics/selected@18.png → qml/Launcher/graphics/selected@18.pngrenamed

Binary file not shown.

Launcher/graphics/selected@18.sci → qml/Launcher/graphics/selected@18.scirenamed

The content is the same.

Launcher/graphics/triangle@18.png → qml/Launcher/graphics/triangle@18.pngrenamed

Binary file not shown.

qml/Notifications/Notification.qmlnew file+325
@@ -0,0 +1,325 @@
1+/*
2+ * Copyright (C) 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 General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+import Ubuntu.Components 0.1
19+import Unity.Notifications 1.0
20+import QMenuModel 0.1
21+import Utils 0.1
22+
23+Item {
24+ id: notification
25+
26+ property alias iconSource: icon.fileSource
27+ property alias secondaryIconSource: secondaryIcon.source
28+ property alias summary: summaryLabel.text
29+ property alias body: bodyLabel.text
30+ property var actions
31+ property var notificationId
32+ property var type
33+ property var hints
34+ property var notification
35+ property color color
36+ property bool fullscreen
37+
38+ fullscreen: false
39+ objectName: "background"
40+ implicitHeight: type != Notification.PlaceHolder ? (fullscreen ? notificationList.fullHeight : contentColumn.height + contentColumn.spacing * 4) : 0
41+
42+ color: Qt.rgba(0.132, 0.117, 0.109, 0.97)
43+ opacity: 0
44+
45+ clip: fullscreen ? false : true
46+ visible: type != Notification.PlaceHolder
47+
48+ UbuntuShape {
49+ id: shapedBack
50+
51+ visible: !fullscreen
52+ anchors.fill: parent
53+ anchors.margins: notificationList.margin
54+ color: parent.color
55+ opacity: parent.opacity
56+ radius: "medium"
57+ }
58+
59+ Rectangle {
60+ id: nonShapedBack
61+
62+ visible: fullscreen
63+ anchors.fill: parent
64+ color: parent.color
65+ opacity: parent.opacity
66+ }
67+
68+ Item {
69+ id: contents
70+ anchors.fill: fullscreen ? nonShapedBack : shapedBack
71+
72+ UnityMenuModelPaths {
73+ id: paths
74+
75+ source: hints["x-canonical-private-menu-model"]
76+
77+ busNameHint: "busName"
78+ actionsHint: "actions"
79+ menuObjectPathHint: "menuPath"
80+ }
81+
82+ UnityMenuModel {
83+ id: unityMenuModel
84+
85+ busName: paths.busName
86+ actions: paths.actions
87+ menuObjectPath: paths.menuObjectPath
88+ }
89+
90+ Behavior on implicitHeight {
91+ id: heightBehavior
92+
93+ enabled: false
94+ UbuntuNumberAnimation {
95+ duration: UbuntuAnimation.SnapDuration
96+ }
97+ }
98+
99+ // delay enabling height behavior until the add transition is complete
100+ onOpacityChanged: if (opacity == 1) heightBehavior.enabled = true
101+
102+ MouseArea {
103+ id: interactiveArea
104+
105+ anchors.fill: contentColumn
106+ objectName: "interactiveArea"
107+ enabled: notification.type == Notification.Interactive
108+ onClicked: notification.notification.invokeAction(actionRepeater.itemAt(0).actionId)
109+ }
110+
111+ Column {
112+ id: contentColumn
113+
114+ anchors {
115+ left: parent.left
116+ right: parent.right
117+ top: parent.top
118+ margins: fullscreen ? 0 : spacing
119+ }
120+
121+ spacing: units.gu(1)
122+
123+ Row {
124+ id: topRow
125+
126+ spacing: contentColumn.spacing
127+ anchors {
128+ left: parent.left
129+ right: parent.right
130+ }
131+
132+ ShapedIcon {
133+ id: icon
134+
135+ objectName: "icon"
136+ width: units.gu(6)
137+ height: units.gu(6)
138+ shaped: notification.hints["x-canonical-non-shaped-icon"] == "true" ? false : true
139+ visible: iconSource !== undefined && iconSource != ""
140+ }
141+
142+ Image {
143+ id: secondaryIcon
144+
145+ objectName: "secondaryIcon"
146+ width: units.gu(2)
147+ height: units.gu(2)
148+ visible: source !== undefined && source != ""
149+ fillMode: Image.PreserveAspectCrop
150+ }
151+
152+ Column {
153+ id: labelColumn
154+ width: parent.width - x
155+
156+ anchors.verticalCenter: (icon.visible && !bodyLabel.visible) ? icon.verticalCenter : undefined
157+
158+ Label {
159+ id: summaryLabel
160+
161+ objectName: "summaryLabel"
162+ anchors {
163+ left: parent.left
164+ right: parent.right
165+ }
166+ fontSize: "medium"
167+ font.bold: true
168+ color: Theme.palette.selected.backgroundText
169+ elide: Text.ElideRight
170+ }
171+
172+ Label {
173+ id: bodyLabel
174+
175+ objectName: "bodyLabel"
176+ anchors {
177+ left: parent.left
178+ right: parent.right
179+ }
180+ visible: body != ""
181+ fontSize: "small"
182+ color: Theme.palette.selected.backgroundText
183+ opacity: 0.6
184+ wrapMode: Text.WordWrap
185+ maximumLineCount: 10
186+ elide: Text.ElideRight
187+ }
188+ }
189+ }
190+
191+ Column {
192+ objectName: "dialogListView"
193+ spacing: units.gu(2)
194+
195+ visible: count > 0
196+
197+ anchors.left: parent.left; anchors.right: parent.right
198+ anchors.top: fullscreen ? parent.top : undefined
199+ anchors.bottom: fullscreen ? parent.bottom : undefined
200+
201+ Repeater {
202+ model: unityMenuModel
203+
204+ NotificationMenuItemFactory {
205+ anchors.left: parent.left; anchors.right: parent.right
206+
207+ menuModel: unityMenuModel
208+ menuData: model
209+ menuIndex: index
210+ }
211+ }
212+ }
213+
214+ Item {
215+ id: buttonRow
216+
217+ objectName: "buttonRow"
218+ anchors {
219+ left: parent.left
220+ right: parent.right
221+ }
222+ visible: notification.type == Notification.SnapDecision && actionRepeater.count > 0
223+ height: units.gu(5)
224+
225+ property real buttonWidth: (width - contentColumn.spacing) / 2
226+ property bool expanded
227+
228+ Button {
229+ id: leftButton
230+
231+ objectName: "button1"
232+ width: parent.expanded ? parent.width : parent.buttonWidth
233+ anchors {
234+ top: parent.top
235+ bottom: parent.bottom
236+ }
237+ text: notification.type == Notification.SnapDecision && actionRepeater.count >= 2 ? actionRepeater.itemAt(1).actionLabel : ""
238+ gradient: UbuntuColors.greyGradient
239+ onClicked: {
240+ if (actionRepeater.count > 2) {
241+ buttonRow.expanded = !buttonRow.expanded
242+ } else {
243+ notification.notification.invokeAction(actionRepeater.itemAt(1).actionId)
244+ }
245+ }
246+
247+ Behavior on width {
248+ UbuntuNumberAnimation {
249+ duration: UbuntuAnimation.SnapDuration
250+ }
251+ }
252+ }
253+
254+ Button {
255+ id: rightButton
256+
257+ objectName: "button0"
258+ anchors {
259+ left: leftButton.right
260+ leftMargin: contentColumn.spacing
261+ right: parent.right
262+ }
263+ text: notification.type == Notification.SnapDecision && actionRepeater.count >= 1 ? actionRepeater.itemAt(0).actionLabel : ""
264+ anchors {
265+ top: parent.top
266+ bottom: parent.bottom
267+ }
268+ gradient: notification.hints["x-canonical-private-button-tint"] == "true" ? UbuntuColors.orangeGradient : UbuntuColors.greyGradient
269+ visible: width > 0
270+ onClicked: notification.notification.invokeAction(actionRepeater.itemAt(0).actionId)
271+ }
272+ }
273+
274+ Column {
275+ objectName: "buttonColumn"
276+ spacing: contentColumn.spacing
277+ anchors {
278+ left: parent.left
279+ right: parent.right
280+ }
281+
282+ // calculate initial position before Column takes over
283+ y: buttonRow.y + buttonRow.height + contentColumn.spacing
284+
285+ visible: notification.type == Notification.SnapDecision && buttonRow.expanded
286+ height: buttonRow.expanded ? implicitHeight : 0
287+
288+ Repeater {
289+ id: actionRepeater
290+
291+ model: notification.actions
292+ delegate: Loader {
293+ id: loader
294+
295+ property string actionId: id
296+ property string actionLabel: label
297+
298+ anchors {
299+ left: parent.left
300+ right: parent.right
301+ }
302+
303+ Component {
304+ id: actionButton
305+
306+ Button {
307+ objectName: "button" + index
308+ anchors {
309+ left: parent.left
310+ right: parent.right
311+ }
312+
313+ text: loader.actionLabel
314+ height: units.gu(5)
315+ gradient: UbuntuColors.greyGradient
316+ onClicked: notification.notification.invokeAction(loader.actionId)
317+ }
318+ }
319+ sourceComponent: (index == 0 || index == 1) ? undefined : actionButton
320+ }
321+ }
322+ }
323+ }
324+ }
325+}
Notifications/NotificationMenuItemFactory.qml → qml/Notifications/NotificationMenuItemFactory.qmlrenamed+9−2
@@ -28,7 +28,6 @@ Loader {
28 property QtObject menuModel: null
28 property QtObject menuModel: null
29 property QtObject menuData: null
29 property QtObject menuData: null
30 property int menuIndex
30 property int menuIndex
31− property var notification
32
31
33 property var _map: {
32 property var _map: {
34 "com.canonical.snapdecision.textfield": textfield,
33 "com.canonical.snapdecision.textfield": textfield,
@@ -44,6 +43,10 @@ Loader {
44 }
43 }
45 }
44 }
46
45
46+ Component.onCompleted: {
47+ notification.fullscreen = menuData.type == "com.canonical.snapdecision.pinlock"
48+ }
49+
47 Component {
50 Component {
48 id: textfield
51 id: textfield
49
52
@@ -94,8 +97,12 @@ Loader {
94
97
95 Component {
98 Component {
96 id: pinLock
99 id: pinLock
97− PinLockscreen {
100+
101+ Lockscreen {
98 anchors.left: parent.left; anchors.right: parent.right
102 anchors.left: parent.left; anchors.right: parent.right
103+ height: notificationList.fullHeight
104+ placeholderText: i18n.tr("Please enter SIM PIN")
105+ background: shell.background
99
106
100 onEntered: {
107 onEntered: {
101 menuModel.changeState(menuIndex, passphrase);
108 menuModel.changeState(menuIndex, passphrase);
Notifications/Notifications.qml → qml/Notifications/Notifications.qmlrenamed+3−1
@@ -24,7 +24,9 @@ ListView {
24 objectName: "notificationList"
24 objectName: "notificationList"
25 interactive: false
25 interactive: false
26
26
27− spacing: units.gu(.5)
27+ property real margin
28+ property real fullHeight
29+
28 delegate: Notification {
30 delegate: Notification {
29 objectName: "notification" + index
31 objectName: "notification" + index
30 anchors {
32 anchors {
Notifications/ShapedIcon.qml → qml/Notifications/ShapedIcon.qmlrenamed

The content is the same.

Panel/IndicatorItem.qml → qml/Panel/IndicatorItem.qmlrenamed

The content is the same.

Panel/IndicatorRow.qml → qml/Panel/IndicatorRow.qmlrenamed

The content is the same.

Panel/Indicators.qml → qml/Panel/Indicators.qmlrenamed

The content is the same.

Panel/Indicators/DefaultIndicatorPage.qml → qml/Panel/Indicators/DefaultIndicatorPage.qmlrenamed

The content is the same.

Panel/Indicators/DefaultIndicatorWidget.qml → qml/Panel/Indicators/DefaultIndicatorWidget.qmlrenamed

The content is the same.

Panel/Indicators/client/IndicatorsClient.qml → qml/Panel/Indicators/client/IndicatorsClient.qmlrenamed

The content is the same.

Panel/Indicators/client/IndicatorsList.qml → qml/Panel/Indicators/client/IndicatorsList.qmlrenamed

The content is the same.

Panel/Indicators/client/IndicatorsPage.qml → qml/Panel/Indicators/client/IndicatorsPage.qmlrenamed

The content is the same.

Panel/Indicators/client/IndicatorsTree.qml → qml/Panel/Indicators/client/IndicatorsTree.qmlrenamed

The content is the same.

Panel/MenuContent.qml → qml/Panel/MenuContent.qmlrenamed

The content is the same.

Panel/Panel.qml → qml/Panel/Panel.qmlrenamed+22
@@ -31,6 +31,28 @@ Item {
31
31
32 signal searchClicked
32 signal searchClicked
33
33
34+ function hideIndicatorMenu(delay) {
35+ if (delay !== undefined) {
36+ hideTimer.interval = delay;
37+ hideTimer.start();
38+ } else {
39+ indicatorsMenu.hide();
40+ }
41+ }
42+
43+ Timer {
44+ id: hideTimer
45+ running: false
46+ onTriggered: {
47+ indicatorsMenu.hide();
48+ }
49+ }
50+
51+ Connections {
52+ target: indicatorsMenu
53+ onShown: hideTimer.stop()
54+ }
55+
34 PanelBackground {
56 PanelBackground {
35 id: panelBackground
57 id: panelBackground
36 anchors {
58 anchors {
Panel/PanelBackground.qml → qml/Panel/PanelBackground.qmlrenamed

The content is the same.

Panel/PanelSeparatorLine.qml → qml/Panel/PanelSeparatorLine.qmlrenamed

The content is the same.

Panel/SearchIndicator.qml → qml/Panel/SearchIndicator.qmlrenamed

The content is the same.

Panel/graphics/Battery@18.png → qml/Panel/graphics/Battery@18.pngrenamed

Binary file not shown.

Panel/graphics/Bluetooth@18.png → qml/Panel/graphics/Bluetooth@18.pngrenamed

Binary file not shown.

Panel/graphics/Clock@18.png → qml/Panel/graphics/Clock@18.pngrenamed

Binary file not shown.

Panel/graphics/Location@18.png → qml/Panel/graphics/Location@18.pngrenamed

Binary file not shown.

Panel/graphics/Messages@18.png → qml/Panel/graphics/Messages@18.pngrenamed

Binary file not shown.

Panel/graphics/Network@18.png → qml/Panel/graphics/Network@18.pngrenamed

Binary file not shown.

Panel/graphics/Sound@18.png → qml/Panel/graphics/Sound@18.pngrenamed

Binary file not shown.

Panel/graphics/Sync@18.png → qml/Panel/graphics/Sync@18.pngrenamed

Binary file not shown.

Panel/graphics/System@18.png → qml/Panel/graphics/System@18.pngrenamed

Binary file not shown.

Panel/graphics/Time@18.png → qml/Panel/graphics/Time@18.pngrenamed

Binary file not shown.

Panel/graphics/VerticalDivider@18.png → qml/Panel/graphics/VerticalDivider@18.pngrenamed

Binary file not shown.

Panel/graphics/handle@12.png → qml/Panel/graphics/handle@12.pngrenamed

Binary file not shown.

Panel/graphics/handle@12.sci → qml/Panel/graphics/handle@12.scirenamed

The content is the same.

Panel/graphics/rectangular_dropshadow@30.png → qml/Panel/graphics/rectangular_dropshadow@30.pngrenamed

Binary file not shown.

Panel/graphics/rectangular_dropshadow@30.sci → qml/Panel/graphics/rectangular_dropshadow@30.scirenamed

The content is the same.

Panel/graphics/search@12.png → qml/Panel/graphics/search@12.pngrenamed

Binary file not shown.

Panel/graphics/time_and_date@18.png → qml/Panel/graphics/time_and_date@18.pngrenamed

Binary file not shown.

Shell.qml → qml/Shell.qmlrenamed+24−10
@@ -44,7 +44,7 @@ FocusScope {
44 height: tablet ? units.gu(100) : applicationArguments.hasGeometry() ? applicationArguments.height() : units.gu(71)
44 height: tablet ? units.gu(100) : applicationArguments.hasGeometry() ? applicationArguments.height() : units.gu(71)
45
45
46 property real edgeSize: units.gu(2)
46 property real edgeSize: units.gu(2)
47− property url defaultBackground: shell.width >= units.gu(60) ? "graphics/tablet_background.jpg" : "graphics/phone_background.jpg"
47+ property url defaultBackground: Qt.resolvedUrl(shell.width >= units.gu(60) ? "graphics/tablet_background.jpg" : "graphics/phone_background.jpg")
48 property url background
48 property url background
49 readonly property real panelHeight: panel.panelHeight
49 readonly property real panelHeight: panel.panelHeight
50
50
@@ -96,21 +96,21 @@ FocusScope {
96 }
96 }
97 }
97 }
98
98
99− function activateApplication(desktopFile, argument) {
99+ function activateApplication(appId, argument) {
100 if (applicationManager) {
100 if (applicationManager) {
101 // For newly started applications, as it takes them time to draw their first frame
101 // For newly started applications, as it takes them time to draw their first frame
102 // we add a delay before we hide the animation screenshots to compensate.
102 // we add a delay before we hide the animation screenshots to compensate.
103− var addDelay = !applicationManager.getApplicationFromDesktopFile(desktopFile);
103+ var addDelay = !applicationManager.getApplicationFromDesktopFile(appId);
104
104
105 var application;
105 var application;
106− application = applicationManager.activateApplication(desktopFile, argument);
106+ application = applicationManager.activateApplication(appId, argument);
107 if (application == null) {
107 if (application == null) {
108 return;
108 return;
109 }
109 }
110 if (application.stage == ApplicationInfo.MainStage || !sideStage.enabled) {
110 if (application.stage == ApplicationInfo.MainStage || !sideStage.enabled) {
111− mainStage.activateApplication(desktopFile, addDelay);
111+ mainStage.activateApplication(appId, addDelay);
112 } else {
112 } else {
113− sideStage.activateApplication(desktopFile, addDelay);
113+ sideStage.activateApplication(appId, addDelay);
114 }
114 }
115 stages.show();
115 stages.show();
116 }
116 }
@@ -413,6 +413,7 @@ FocusScope {
413 width: parent.width
413 width: parent.width
414 height: parent.height - panel.panelHeight
414 height: parent.height - panel.panelHeight
415 background: shell.background
415 background: shell.background
416+ pinLength: 4
416
417
417 onEntered: LightDM.Greeter.respond(passphrase);
418 onEntered: LightDM.Greeter.respond(passphrase);
418 onCancel: greeter.show()
419 onCancel: greeter.show()
@@ -576,6 +577,10 @@ FocusScope {
576 stages.hide()
577 stages.hide()
577 }
578 }
578
579
580+ function hideIndicatorMenu(delay) {
581+ panel.hideIndicatorMenu(delay);
582+ }
583+
579 Item {
584 Item {
580 id: overlay
585 id: overlay
581
586
@@ -667,7 +672,12 @@ FocusScope {
667 dragAreaWidth: shell.edgeSize
672 dragAreaWidth: shell.edgeSize
668 available: (!greeter.shown || greeter.narrowMode) && edgeDemo.launcherEnabled
673 available: (!greeter.shown || greeter.narrowMode) && edgeDemo.launcherEnabled
669
674
675+ onShowDashHome: {
676+ if (edgeDemo.running)
677+ return;
678+
670− onDashItemSelected: showHome()
679+ showHome()
680+ }
671 onDash: {
681 onDash: {
672 if (stages.shown) {
682 if (stages.shown) {
673 stages.hide();
683 stages.hide();
@@ -676,6 +686,9 @@ FocusScope {
676 }
686 }
677 onDashSwipeChanged: if (dashSwipe && stages.shown) dash.setCurrentScope("applications.scope", false, true)
687 onDashSwipeChanged: if (dashSwipe && stages.shown) dash.setCurrentScope("applications.scope", false, true)
678 onLauncherApplicationSelected:{
688 onLauncherApplicationSelected:{
689+ if (edgeDemo.running)
690+ return;
691+
679 greeter.hide()
692 greeter.hide()
680 shell.activateApplication(appId)
693 shell.activateApplication(appId)
681 }
694 }
@@ -692,13 +705,14 @@ FocusScope {
692 id: notifications
705 id: notifications
693
706
694 model: NotificationBackend.Model
707 model: NotificationBackend.Model
708+ margin: units.gu(1)
709+ fullHeight: parent.height - panel.panelHeight
710+
695 anchors {
711 anchors {
696 top: parent.top
712 top: parent.top
697 right: parent.right
713 right: parent.right
698 bottom: parent.bottom
714 bottom: parent.bottom
699− leftMargin: units.gu(1)
700− rightMargin: units.gu(1)
701− topMargin: panel.panelHeight + units.gu(1)
715+ topMargin: panel.panelHeight
702 }
716 }
703 states: [
717 states: [
704 State {
718 State {
SideStage/SideStage.qml → qml/SideStage/SideStage.qmlrenamed

The content is the same.

SideStage/SidestageHandle.qml → qml/SideStage/SidestageHandle.qmlrenamed

The content is the same.

SideStage/graphics/sidestage_handle@20.png → qml/SideStage/graphics/sidestage_handle@20.pngrenamed

Binary file not shown.

SideStage/graphics/sidestage_handle@20.sci → qml/SideStage/graphics/sidestage_handle@20.scirenamed

The content is the same.

graphics/12_10_background_wide@12.png → qml/graphics/12_10_background_wide@12.pngrenamed

Binary file not shown.

graphics/applicationIcons/angrybirds@18.png → qml/graphics/applicationIcons/angrybirds@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/browser@18.png → qml/graphics/applicationIcons/browser@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/calendar@18.png → qml/graphics/applicationIcons/calendar@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/camera@18.png → qml/graphics/applicationIcons/camera@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/contacts-app@18.png → qml/graphics/applicationIcons/contacts-app@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/dash@18.png → qml/graphics/applicationIcons/dash@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/evernote@18.png → qml/graphics/applicationIcons/evernote@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/facebook@18.png → qml/graphics/applicationIcons/facebook@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/gallery@18.png → qml/graphics/applicationIcons/gallery@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/gmail@18.png → qml/graphics/applicationIcons/gmail@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/map@18.png → qml/graphics/applicationIcons/map@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/media-player@18.png → qml/graphics/applicationIcons/media-player@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/messages-app@18.png → qml/graphics/applicationIcons/messages-app@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/music@18.png → qml/graphics/applicationIcons/music@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/notepad@18.png → qml/graphics/applicationIcons/notepad@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/phone-app@18.png → qml/graphics/applicationIcons/phone-app@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/pinterest@18.png → qml/graphics/applicationIcons/pinterest@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/ski_safari@18.png → qml/graphics/applicationIcons/ski_safari@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/skype@18.png → qml/graphics/applicationIcons/skype@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/soundcloud@18.png → qml/graphics/applicationIcons/soundcloud@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/system-settings@18.png → qml/graphics/applicationIcons/system-settings@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/twitter@18.png → qml/graphics/applicationIcons/twitter@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/weather@18.png → qml/graphics/applicationIcons/weather@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/wikipedia@18.png → qml/graphics/applicationIcons/wikipedia@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/youtube@18.png → qml/graphics/applicationIcons/youtube@18.pngrenamed

Binary file not shown.

graphics/avatars/amanda@12.png → qml/graphics/avatars/amanda@12.pngrenamed

Binary file not shown.

graphics/avatars/anna_olsson@12.png → qml/graphics/avatars/anna_olsson@12.pngrenamed

Binary file not shown.

graphics/avatars/funky@12.png → qml/graphics/avatars/funky@12.pngrenamed

Binary file not shown.

graphics/clock@18.png → qml/graphics/clock@18.pngrenamed

Binary file not shown.

graphics/phone_background.jpg → qml/graphics/phone_background.jpgrenamed

Binary file not shown.

graphics/tablet_background.jpg → qml/graphics/tablet_background.jpgrenamed

Binary file not shown.

run+7−6
@@ -1,6 +1,9 @@
1#!/bin/sh
1#!/bin/sh
2
2
3+. /etc/environment
4+export QML2_IMPORT_PATH
5+
3−QML_PHONE_SHELL_PATH=./builddir/unity8
6+QML_PHONE_SHELL_PATH=./builddir/src/unity8
4GDB=false
7GDB=false
5FAKE=false
8FAKE=false
6PINLOCK=false
9PINLOCK=false
@@ -40,19 +43,17 @@ do
40done
43done
41
44
42if $FAKE; then
45if $FAKE; then
43− export QML2_IMPORT_PATH=$PWD/builddir/tests/mocks:$PWD/builddir/plugins:$PWD/builddir/modules
46+ export QML2_IMPORT_PATH=$QML2_IMPORT_PATH:$PWD/builddir/tests/mocks:$PWD/builddir/plugins:$PWD/builddir/modules
44 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/builddir/tests/mocks/libusermetrics:$PWD/builddir/tests/mocks/LightDM/single
47 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/builddir/tests/mocks/libusermetrics:$PWD/builddir/tests/mocks/LightDM/single
45−else
46− export QML2_IMPORT_PATH=`pkg-config --variable=plugindir unity-shell-api`
47fi
48fi
48
49
49if $PINLOCK; then
50if $PINLOCK; then
50− export QML2_IMPORT_PATH=$PWD/builddir/tests/mocks:$PWD/builddir/plugins:$PWD/builddir/modules
51+ export QML2_IMPORT_PATH=$QML2_IMPORT_PATH:$PWD/builddir/tests/mocks:$PWD/builddir/plugins:$PWD/builddir/modules
51 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/builddir/tests/mocks/libusermetrics:$PWD/builddir/tests/mocks/LightDM/single-pin
52 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/builddir/tests/mocks/libusermetrics:$PWD/builddir/tests/mocks/LightDM/single-pin
52fi
53fi
53
54
54if $KEYLOCK; then
55if $KEYLOCK; then
55− export QML2_IMPORT_PATH=$PWD/builddir/tests/mocks:$PWD/builddir/plugins:$PWD/builddir/modules
56+ export QML2_IMPORT_PATH=$QML2_IMPORT_PATH:$PWD/builddir/tests/mocks:$PWD/builddir/plugins:$PWD/builddir/modules
56 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/builddir/tests/mocks/libusermetrics:$PWD/builddir/tests/mocks/LightDM/single-passphrase
57 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/builddir/tests/mocks/libusermetrics:$PWD/builddir/tests/mocks/LightDM/single-passphrase
57fi
58fi
58
59
run_on_device−1
@@ -88,7 +88,6 @@ sync_code() {
88}
88}
89
89
90build() {
90build() {
91− exec_with_ssh "[ $CODE_DIR/debian/control -nt unity8-build-deps*deb ] && $SUDO mk-build-deps --tool=\\\"apt-get -y --no-install-recommends\\\" --build-dep --install $CODE_DIR/debian/control"
92 exec_with_ssh PATH=/usr/lib/ccache:$PATH "cd $CODE_DIR/ && PATH=/usr/lib/ccache:$PATH ./build"
91 exec_with_ssh PATH=/usr/lib/ccache:$PATH "cd $CODE_DIR/ && PATH=/usr/lib/ccache:$PATH ./build"
93}
92}
94
93
runtests.sh+1−13
@@ -26,19 +26,7 @@
26# floating point operations and xml writing is natively supported.
26# floating point operations and xml writing is natively supported.
27
27
28
28
29−if test -e Shell.qml; then
29+SRCDIR=`dirname "$(readlink -f "$0")"`
30− echo In-source build detected.
31− SRCDIR=`pwd`
32−elif test -e ../Shell.qml; then
33− echo Out-of-source build detected. Found source dir at ..
34− SRCDIR=`pwd`/..
35−else
36− echo Out-of-source build detected. Source dir not found at ..
37− echo Only in-source builds or out-of-source builds with source dir at .. are supported.
38− exit 1
39−fi
40−
41−cd $SRCDIR
42
30
43file_list=""
31file_list=""
44
32
ApplicationArguments.h → src/ApplicationArguments.hrenamed

The content is the same.

src/CMakeLists.txt+27
@@ -1 +1,28 @@
1+pkg_check_modules(UNITY-MIR REQUIRED unity-mir)
2+
3+include_directories(
4+ ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
5+ ${UNITY-MIR_INCLUDE_DIRS}
6+)
7+
8+add_executable(${SHELL_APP}
9+ ApplicationArguments.h
10+ main.cpp
11+ MouseTouchAdaptor.cpp
12+ )
13+
14+qt5_use_modules(${SHELL_APP} Gui Qml Quick Test)
15+pkg_check_modules(XCB REQUIRED xcb)
16+
17+if (NOT "${XCB_INCLUDE_DIRS}" STREQUAL "")
18+ set_target_properties(${SHELL_APP} PROPERTIES INCLUDE_DIRECTORIES ${XCB_INCLUDE_DIRS})
19+
20+ target_link_libraries(${SHELL_APP} ${XCB_LDFLAGS})
21+endif()
22+
23+# install binaries
24+install(TARGETS ${SHELL_APP}
25+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
26+ )
27+
1add_subdirectory(Panel)
28add_subdirectory(Panel)
MouseTouchAdaptor.cpp → src/MouseTouchAdaptor.cpprenamed

The content is the same.

MouseTouchAdaptor.h → src/MouseTouchAdaptor.hrenamed

The content is the same.

src/Panel/Indicators/client/CMakeLists.txt−4
@@ -14,10 +14,6 @@ add_executable(${INDICATORS_CLIENT_APP}
14 ${INDICATORS_CLIENT_HEADERS}
14 ${INDICATORS_CLIENT_HEADERS}
15)
15)
16
16
17−include_directories(
18− ${CMAKE_BINARY_DIR}
19−)
20−
21qt5_use_modules(${INDICATORS_CLIENT_APP} Core Widgets Quick)
17qt5_use_modules(${INDICATORS_CLIENT_APP} Core Widgets Quick)
22set_target_properties(${INDICATORS_CLIENT_APP} PROPERTIES COMPILE_FLAGS -fPIC)
18set_target_properties(${INDICATORS_CLIENT_APP} PROPERTIES COMPILE_FLAGS -fPIC)
23
19
src/Panel/Indicators/client/indicatorsclient.cpp+3−37
@@ -19,48 +19,14 @@
19 */
19 */
20
20
21#include "indicatorsclient.h"
21#include "indicatorsclient.h"
22+
22−#include "paths.h"
23+#include <paths.h>
23
24
24#include <QQuickView>
25#include <QQuickView>
25#include <QQmlContext>
26#include <QQmlContext>
26#include <QQmlEngine>
27#include <QQmlEngine>
27#include <QDebug>
28#include <QDebug>
28
29
29−namespace {
30−
31−void prependImportPaths(QQmlEngine *engine, const QStringList &paths)
32−{
33− QStringList importPathList = engine->importPathList();
34− for (int i = paths.count()-1; i >= 0; i--) {
35− importPathList.prepend(paths[i]);
36− }
37− engine->setImportPathList(importPathList);
38−}
39−
40−/* When you append and import path to the list of import paths it will be the *last*
41− place where Qt will search for QML modules.
42− The usual QQmlEngine::addImportPath() actually prepends the given path.*/
43−void appendImportPaths(QQmlEngine *engine, const QStringList &paths)
44−{
45− QStringList importPathList = engine->importPathList();
46− Q_FOREACH(const QString& path, paths) {
47− // don't duplicate
48− QStringList::iterator iter = qFind(importPathList.begin(), importPathList.end(), path);
49− if (iter == importPathList.end()) {
50− importPathList.append(path);
51− }
52− }
53− engine->setImportPathList(importPathList);
54−}
55−
56−void resolveIconTheme() {
57− QString ubuntuIconTheme = getenv("UBUNTU_ICON_THEME");
58− if (ubuntuIconTheme.isEmpty()) {
59− QIcon::setThemeName("ubuntu-mobile");
60− }
61−}
62−} // namespace
63−
64IndicatorsClient::IndicatorsClient(int &argc, char **argv)
30IndicatorsClient::IndicatorsClient(int &argc, char **argv)
65 : QObject(0),
31 : QObject(0),
66 m_view(0)
32 m_view(0)
@@ -71,7 +37,7 @@ IndicatorsClient::IndicatorsClient(int &argc, char **argv)
71 QStringList args = m_application->arguments();
37 QStringList args = m_application->arguments();
72
38
73 m_view = new QQuickView;
39 m_view = new QQuickView;
74− m_view->engine()->setBaseUrl(QUrl::fromLocalFile(::shellAppDirectory()+"Panel/Indicators/client/"));
40+ m_view->engine()->setBaseUrl(QUrl::fromLocalFile(::qmlDirectory()+"Panel/Indicators/client/"));
75 prependImportPaths(m_view->engine(), ::overrideImportPaths());
41 prependImportPaths(m_view->engine(), ::overrideImportPaths());
76 appendImportPaths(m_view->engine(), ::fallbackImportPaths());
42 appendImportPaths(m_view->engine(), ::fallbackImportPaths());
77
43
main.cpp → src/main.cpprenamed+9−43
@@ -19,7 +19,6 @@
19
19
20// Qt
20// Qt
21#include <QtQuick/QQuickView>
21#include <QtQuick/QQuickView>
22−#include <QtGui/QIcon>
23#include <QtGui/QGuiApplication>
22#include <QtGui/QGuiApplication>
24#include <QtQml/QQmlEngine>
23#include <QtQml/QQmlEngine>
25#include <QtQml/QQmlContext>
24#include <QtQml/QQmlContext>
@@ -28,53 +27,15 @@
28#include <QDebug>
27#include <QDebug>
29#include <libintl.h>
28#include <libintl.h>
30#include <dlfcn.h>
29#include <dlfcn.h>
30+#include <csignal>
31
31
32// local
32// local
33−#include "paths.h"
33+#include <paths.h>
34#include "MouseTouchAdaptor.h"
34#include "MouseTouchAdaptor.h"
35#include "ApplicationArguments.h"
35#include "ApplicationArguments.h"
36
36
37#include <unity-mir/qmirserver.h>
37#include <unity-mir/qmirserver.h>
38
38
39−namespace {
40−
41−void prependImportPaths(QQmlEngine *engine, const QStringList &paths)
42−{
43− QStringList importPathList = engine->importPathList();
44− for (int i = paths.count() -1; i >= 0; i--) {
45− // don't duplicate
46− const QString& path = paths[i];
47− QStringList::iterator iter = qFind(importPathList.begin(), importPathList.end(), path);
48− if (iter == importPathList.end()) {
49− engine->addImportPath(path);
50− }
51− }
52−}
53−
54−/* When you append and import path to the list of import paths it will be the *last*
55− place where Qt will search for QML modules.
56− The usual QQmlEngine::addImportPath() actually prepends the given path.*/
57−void appendImportPaths(QQmlEngine *engine, const QStringList &paths)
58−{
59− QStringList importPathList = engine->importPathList();
60− Q_FOREACH(const QString& path, paths) {
61− // don't duplicate
62− QStringList::iterator iter = qFind(importPathList.begin(), importPathList.end(), path);
63− if (iter == importPathList.end()) {
64− importPathList.append(path);
65− }
66− }
67− engine->setImportPathList(importPathList);
68−}
69−
70−void resolveIconTheme() {
71− const char *ubuntuIconTheme = getenv("UBUNTU_ICON_THEME");
72− if (ubuntuIconTheme == NULL) {
73− ubuntuIconTheme = "ubuntu-mobile";
74− }
75− QIcon::setThemeName(ubuntuIconTheme);
76−}
77−} // namespace {
78
39
79int startShell(int argc, const char** argv, void* server)
40int startShell(int argc, const char** argv, void* server)
80{
41{
@@ -125,7 +86,7 @@ int startShell(int argc, const char** argv, void* server)
125 QQuickView* view = new QQuickView();
86 QQuickView* view = new QQuickView();
126 view->setResizeMode(QQuickView::SizeRootObjectToView);
87 view->setResizeMode(QQuickView::SizeRootObjectToView);
127 view->setTitle("Qml Phone Shell");
88 view->setTitle("Qml Phone Shell");
128− view->engine()->setBaseUrl(QUrl::fromLocalFile(::shellAppDirectory()));
89+ view->engine()->setBaseUrl(QUrl::fromLocalFile(::qmlDirectory()));
129 view->rootContext()->setContextProperty("applicationArguments", &qmlArgs);
90 view->rootContext()->setContextProperty("applicationArguments", &qmlArgs);
130 if (args.contains(QLatin1String("-frameless"))) {
91 if (args.contains(QLatin1String("-frameless"))) {
131 view->setFlags(Qt::FramelessWindowHint);
92 view->setFlags(Qt::FramelessWindowHint);
@@ -148,7 +109,7 @@ int startShell(int argc, const char** argv, void* server)
148 nativeInterface->setProperty("ubuntuSessionType", 1);
109 nativeInterface->setProperty("ubuntuSessionType", 1);
149 view->setProperty("role", 2); // INDICATOR_ACTOR_ROLE
110 view->setProperty("role", 2); // INDICATOR_ACTOR_ROLE
150
111
151− QUrl source("Shell.qml");
112+ QUrl source(::qmlDirectory()+"Shell.qml");
152 prependImportPaths(view->engine(), ::overrideImportPaths());
113 prependImportPaths(view->engine(), ::overrideImportPaths());
153 appendImportPaths(view->engine(), ::fallbackImportPaths());
114 appendImportPaths(view->engine(), ::fallbackImportPaths());
154
115
@@ -218,6 +179,11 @@ int main(int argc, const char *argv[])
218
179
219 return runWithClient(mirServer, startShell);
180 return runWithClient(mirServer, startShell);
220 } else {
181 } else {
182+ if (qgetenv("UPSTART_JOB") == "unity8") {
183+ // Emit SIGSTOP as expected by upstart, under Mir it's unity-mir that will raise it.
184+ // see http://upstart.ubuntu.com/cookbook/#expect-stop
185+ raise(SIGSTOP);
186+ }
221 return startShell(argc, argv, nullptr);
187 return startShell(argc, argv, nullptr);
222 }
188 }
223}
189}
tests/autopilot/.projectnew file+17
@@ -0,0 +1,17 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<projectDescription>
3+ <name>Unity8 Autopilot</name>
4+ <comment></comment>
5+ <projects>
6+ </projects>
7+ <buildSpec>
8+ <buildCommand>
9+ <name>org.python.pydev.PyDevBuilder</name>
10+ <arguments>
11+ </arguments>
12+ </buildCommand>
13+ </buildSpec>
14+ <natures>
15+ <nature>org.python.pydev.pythonNature</nature>
16+ </natures>
17+</projectDescription>
tests/autopilot/.pydevprojectnew file+8
@@ -0,0 +1,8 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<?eclipse-pydev version="1.0"?><pydev_project>
3+<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
4+<path>/Unity8 Autopilot</path>
5+</pydev_pathproperty>
6+<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property>
7+<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
8+</pydev_project>
tests/autopilot/unity8/application_lifecycle/tests/test_application_lifecycle.py+7−6
@@ -21,6 +21,7 @@
21
21
22from __future__ import absolute_import
22from __future__ import absolute_import
23
23
24+from unity8.process_helpers import unlock_unity
24from unity8.shell import disable_qml_mocking
25from unity8.shell import disable_qml_mocking
25from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
26from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
26
27
@@ -78,8 +79,8 @@ class ApplicationLifecycleTests(UnityTestCase):
78 @disable_qml_mocking
79 @disable_qml_mocking
79 def test_can_launch_application(self):
80 def test_can_launch_application(self):
80 """Must be able to launch an application."""
81 """Must be able to launch an application."""
81− self.launch_unity()
82+ unity_proxy = self.launch_unity()
82− self.main_window.get_greeter().swipe()
83+ unlock_unity(unity_proxy)
83
84
84 app = self._launch_app("messaging-app")
85 app = self._launch_app("messaging-app")
85
86
@@ -92,8 +93,8 @@ class ApplicationLifecycleTests(UnityTestCase):
92 @disable_qml_mocking
93 @disable_qml_mocking
93 def test_can_launch_multiple_applications(self):
94 def test_can_launch_multiple_applications(self):
94 """A second application launched must be focused."""
95 """A second application launched must be focused."""
95− self.launch_unity()
96+ unity_proxy = self.launch_unity()
96− self.main_window.get_greeter().swipe()
97+ unlock_unity(unity_proxy)
97
98
98 self._launch_app("messaging-app")
99 self._launch_app("messaging-app")
99 self.assertThat(
100 self.assertThat(
@@ -113,8 +114,8 @@ class ApplicationLifecycleTests(UnityTestCase):
113 brought back to the focused state.
114 brought back to the focused state.
114
115
115 """
116 """
116− self.launch_unity()
117+ unity_proxy = self.launch_unity()
117− self.main_window.get_greeter().swipe()
118+ unlock_unity(unity_proxy)
118
119
119 self._launch_app("messaging-app")
120 self._launch_app("messaging-app")
120 self.assertThat(
121 self.assertThat(
tests/autopilot/unity8/process_helpers.py+17−1
@@ -69,7 +69,23 @@ def unlock_unity(unity_proxy_obj=None):
69 greeter = main_window.get_greeter()
69 greeter = main_window.get_greeter()
70 if greeter.created == False:
70 if greeter.created == False:
71 raise RuntimeWarning("Greeter appears to be already unlocked.")
71 raise RuntimeWarning("Greeter appears to be already unlocked.")
72+
73+ # Because of potential input jerkiness under heavy load,
74+ # retry unlocking the greeter two times.
75+ # https://bugs.launchpad.net/ubuntu/+bug/1260113
76+
77+ retries = 3
78+ while retries > 0:
79+ try:
72− greeter.swipe()
80+ greeter.swipe()
81+ except AssertionError:
82+ retries -= 1
83+ if retries == 0:
84+ raise
85+ logger.info("Failed to unlock greeter, trying again...")
86+ else:
87+ logger.info("Greeter unlocked, continuing.")
88+ break
73
89
74
90
75def restart_unity_with_testability(*args):
91def restart_unity_with_testability(*args):
tests/autopilot/unity8/shell/tests/test_lock_screen.py+9−8
@@ -20,6 +20,7 @@
20
20
21from __future__ import absolute_import
21from __future__ import absolute_import
22
22
23+from unity8.process_helpers import unlock_unity
23from unity8.shell import with_lightdm_mock
24from unity8.shell import with_lightdm_mock
24from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
25from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
25
26
@@ -40,11 +41,11 @@ class TestLockscreen(UnityTestCase):
40 @with_lightdm_mock("single-pin")
41 @with_lightdm_mock("single-pin")
41 def test_can_unlock_pin_screen(self):
42 def test_can_unlock_pin_screen(self):
42 """Must be able to unlock the PIN entry lock screen."""
43 """Must be able to unlock the PIN entry lock screen."""
43− self.launch_unity()
44+ unity_proxy = self.launch_unity()
44 greeter = self.main_window.get_greeter()
45 greeter = self.main_window.get_greeter()
45
46
46 if greeter.narrowMode:
47 if greeter.narrowMode:
47− greeter.swipe()
48+ unlock_unity(unity_proxy)
48 lockscreen = self._wait_for_lockscreen()
49 lockscreen = self._wait_for_lockscreen()
49 self._enter_pincode("1234")
50 self._enter_pincode("1234")
50 self.assertThat(lockscreen.shown, Eventually(Equals(False)))
51 self.assertThat(lockscreen.shown, Eventually(Equals(False)))
@@ -55,11 +56,11 @@ class TestLockscreen(UnityTestCase):
55 @with_lightdm_mock("single-passphrase")
56 @with_lightdm_mock("single-passphrase")
56 def test_can_unlock_passphrase_screen(self):
57 def test_can_unlock_passphrase_screen(self):
57 """Must be able to unlock the passphrase entry screen."""
58 """Must be able to unlock the passphrase entry screen."""
58− self.launch_unity()
59+ unity_proxy = self.launch_unity()
59 greeter = self.main_window.get_greeter()
60 greeter = self.main_window.get_greeter()
60
61
61 if greeter.narrowMode:
62 if greeter.narrowMode:
62− greeter.swipe()
63+ unlock_unity(unity_proxy)
63 lockscreen = self._wait_for_lockscreen()
64 lockscreen = self._wait_for_lockscreen()
64 self._enter_pin_passphrase("password")
65 self._enter_pin_passphrase("password")
65 self.assertThat(lockscreen.shown, Eventually(Equals(False)))
66 self.assertThat(lockscreen.shown, Eventually(Equals(False)))
@@ -70,11 +71,11 @@ class TestLockscreen(UnityTestCase):
70 @with_lightdm_mock("single-pin")
71 @with_lightdm_mock("single-pin")
71 def test_pin_screen_wrong_code(self):
72 def test_pin_screen_wrong_code(self):
72 """Entering the wrong pin code must not dismiss the lock screen."""
73 """Entering the wrong pin code must not dismiss the lock screen."""
73− self.launch_unity()
74+ unity_proxy = self.launch_unity()
74 greeter = self.main_window.get_greeter()
75 greeter = self.main_window.get_greeter()
75
76
76 if greeter.narrowMode:
77 if greeter.narrowMode:
77− greeter.swipe()
78+ unlock_unity(unity_proxy)
78 lockscreen = self._wait_for_lockscreen()
79 lockscreen = self._wait_for_lockscreen()
79 self._enter_pincode("4321")
80 self._enter_pincode("4321")
80 pinentryField = self.main_window.get_pinentryField()
81 pinentryField = self.main_window.get_pinentryField()
@@ -89,11 +90,11 @@ class TestLockscreen(UnityTestCase):
89 @with_lightdm_mock("single-passphrase")
90 @with_lightdm_mock("single-passphrase")
90 def test_passphrase_screen_wrong_password(self):
91 def test_passphrase_screen_wrong_password(self):
91 """Entering the wrong password must not dismiss the lock screen."""
92 """Entering the wrong password must not dismiss the lock screen."""
92− self.launch_unity()
93+ unity_proxy = self.launch_unity()
93 greeter = self.main_window.get_greeter()
94 greeter = self.main_window.get_greeter()
94
95
95 if greeter.narrowMode:
96 if greeter.narrowMode:
96− greeter.swipe()
97+ unlock_unity(unity_proxy)
97 lockscreen = self._wait_for_lockscreen()
98 lockscreen = self._wait_for_lockscreen()
98 self._enter_pin_passphrase("foobar")
99 self._enter_pin_passphrase("foobar")
99 pinentryField = self.main_window.get_pinentryField()
100 pinentryField = self.main_window.get_pinentryField()
tests/autopilot/unity8/shell/tests/test_notifications.py+1−1
@@ -65,7 +65,7 @@ class NotificationsBase(UnityTestCase):
65 def _get_notifications_list(self):
65 def _get_notifications_list(self):
66 main_view = self.main_window.get_qml_view()
66 main_view = self.main_window.get_qml_view()
67 return main_view.select_single(
67 return main_view.select_single(
68− "QQuickListView",
68+ "Notifications",
69 objectName='notificationList'
69 objectName='notificationList'
70 )
70 )
71
71
tests/autopilot/unity8/shell/tests/test_upstart.pynew file+99
@@ -0,0 +1,99 @@
1+# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2+#
3+# Unity Autopilot Test Suite
4+# Copyright (C) 2013 Canonical
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, either version 3 of the License, or
9+# (at your option) any later version.
10+#
11+# This program is distributed in the hope that it will be useful,
12+# but WITHOUT ANY WARRANTY; without even the implied warranty of
13+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+# GNU General Public License for more details.
15+#
16+# You should have received a copy of the GNU General Public License
17+# along with this program. If not, see <http://www.gnu.org/licenses/>.
18+#
19+
20+"""Tests for upstart integration."""
21+
22+import os
23+import signal
24+import subprocess
25+import time
26+
27+from testtools.matchers._basic import Equals
28+from autopilot.matchers import Eventually
29+from autopilot.introspection import get_proxy_object_for_existing_process
30+
31+from unity8 import get_binary_path
32+from unity8.shell.emulators import UnityEmulatorBase
33+from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
34+
35+import logging
36+
37+logger = logging.getLogger(__name__)
38+
39+
40+class UpstartIntegrationTests(UnityTestCase):
41+
42+ scenarios = _get_device_emulation_scenarios()
43+
44+ def _get_status(self):
45+ pid, status = os.waitpid(self.process.pid, os.WUNTRACED | os.WCONTINUED | os.WNOHANG)
46+ logger.debug("Got status: {0}; stopped: {1}; continued: {2}"\
47+ .format(status, os.WIFSTOPPED(status), os.WIFCONTINUED(status)))
48+ return status
49+
50+ def _launch_unity(self):
51+ self.patch_environment("QT_LOAD_TESTABILITY", "1")
52+ self.process = subprocess.Popen([get_binary_path()] + self.unity_geometry_args)
53+ def ensure_stopped():
54+ self.process.terminate()
55+ for i in xrange(10):
56+ try:
57+ self._get_status()
58+ except OSError:
59+ break
60+ else:
61+ time.sleep(1)
62+ try:
63+ self._get_status()
64+ except OSError:
65+ pass
66+ else:
67+ self.process.kill()
68+
69+ self.process.wait()
70+
71+ self.addCleanup(ensure_stopped)
72+
73+ def _set_proxy(self):
74+ super(UpstartIntegrationTests, self)._set_proxy(get_proxy_object_for_existing_process(
75+ pid=self.process.pid,
76+ emulator_base=UnityEmulatorBase,
77+ ))
78+
79+ def test_no_sigstop(self):
80+ self.patch_environment("UPSTART_JOB", "foo")
81+ self._launch_unity()
82+ self._set_proxy()
83+
84+ logger.debug("Unity started, waiting for it to be ready.")
85+ self.assertUnityReady()
86+ logger.debug("Unity loaded and ready.")
87+
88+ def test_expect_sigstop(self):
89+ self.patch_environment("UPSTART_JOB", "unity8")
90+ self._launch_unity()
91+ self.assertThat(lambda: os.WIFSTOPPED(self._get_status()), Eventually(Equals(True)), "Unity8 should raise SIGSTOP when ready")
92+
93+ self.process.send_signal(signal.SIGCONT)
94+ self.assertThat(lambda: os.WIFCONTINUED(self._get_status()), Eventually(Equals(True)), "Unity8 should have resumed")
95+
96+ logger.debug("Unity started, waiting for it to be ready.")
97+ self._set_proxy()
98+ self.assertUnityReady()
99+ logger.debug("Unity loaded and ready.")
tests/mocks/CMakeLists.txt+1
@@ -7,6 +7,7 @@ add_subdirectory(Powerd)
7add_subdirectory(QMenuModel)
7add_subdirectory(QMenuModel)
8add_subdirectory(Ubuntu)
8add_subdirectory(Ubuntu)
9add_subdirectory(Unity)
9add_subdirectory(Unity)
10+add_subdirectory(QtMultimedia)
10
11
11install(
12install(
12 DIRECTORY data
13 DIRECTORY data
tests/mocks/LightDM/CMakeLists.txt+3−1
@@ -13,10 +13,12 @@ add_subdirectory(single-passphrase)
13include_directories(
13include_directories(
14 ${CMAKE_CURRENT_SOURCE_DIR}
14 ${CMAKE_CURRENT_SOURCE_DIR}
15 ${CMAKE_CURRENT_BINARY_DIR}
15 ${CMAKE_CURRENT_BINARY_DIR}
16+ ${CMAKE_SOURCE_DIR}/plugins/Utils
16 ${CMAKE_SOURCE_DIR}/tests/mocks/libusermetrics
17 ${CMAKE_SOURCE_DIR}/tests/mocks/libusermetrics
17)
18)
18
19
19set(QMLPLUGIN_SRC
20set(QMLPLUGIN_SRC
21+ ${CMAKE_SOURCE_DIR}/plugins/LightDM/DBusGreeterList.cpp
20 ${CMAKE_SOURCE_DIR}/plugins/LightDM/Greeter.cpp
22 ${CMAKE_SOURCE_DIR}/plugins/LightDM/Greeter.cpp
21 ${CMAKE_SOURCE_DIR}/plugins/LightDM/plugin.cpp
23 ${CMAKE_SOURCE_DIR}/plugins/LightDM/plugin.cpp
22 ${CMAKE_SOURCE_DIR}/plugins/LightDM/UsersModel.cpp
24 ${CMAKE_SOURCE_DIR}/plugins/LightDM/UsersModel.cpp
@@ -39,7 +41,7 @@ target_link_libraries(MockLightDM-qml
39 -lusermetricsoutput
41 -lusermetricsoutput
40 )
42 )
41
43
42−qt5_use_modules(MockLightDM-qml Gui Qml)
44+qt5_use_modules(MockLightDM-qml DBus Gui Qml)
43
45
44# copy qmldir file into build directory for shadow builds
46# copy qmldir file into build directory for shadow builds
45file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
47file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
tests/mocks/LightDM/demo/CMakeLists.txt−1
@@ -1,4 +1,3 @@
1−include(FindPkgConfig)
2pkg_check_modules(LIBUSERMETRICSOUTPUT REQUIRED libusermetricsoutput-1)
1pkg_check_modules(LIBUSERMETRICSOUTPUT REQUIRED libusermetricsoutput-1)
3
2
4set(LibLightDM_SOURCES
3set(LibLightDM_SOURCES
tests/mocks/QtMultimedia/CMakeLists.txtnew file+19
@@ -0,0 +1,19 @@
1+add_library(QtMultimedia-qml MODULE
2+ plugin.cpp
3+ audio.cpp
4+ )
5+
6+qt5_use_modules(QtMultimedia-qml Qml)
7+
8+# copy qmldir file into build directory for shadow builds
9+file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
10+ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
11+ )
12+
13+install(TARGETS QtMultimedia-qml
14+ DESTINATION ${SHELL_INSTALL_QML}/mocks/QtMultimedia
15+ )
16+
17+install(FILES qmldir
18+ DESTINATION ${SHELL_INSTALL_QML}/mocks/QtMultimedia
19+ )
tests/mocks/QtMultimedia/audio.cppnew file+107
@@ -0,0 +1,107 @@
1+/*
2+ * Copyright (C) 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 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+ * Author: Michael Zanetti <michael.zanetti@canonical.com>
17+ */
18+
19+#include "audio.h"
20+
21+Audio::Audio(QObject* parent):
22+ QObject(parent),
23+ m_playbackState(StoppedState)
24+{
25+ qsrand(time(NULL));
26+ m_timer.setInterval(1000);
27+ connect(&m_timer, SIGNAL(timeout()), SLOT(timerEvent()));
28+}
29+
30+QUrl Audio::source() const
31+{
32+ return m_source;
33+}
34+
35+void Audio::setSource(const QUrl &source)
36+{
37+ if (m_source != source) {
38+ m_source = source;
39+ Q_EMIT sourceChanged(source);
40+
41+ m_position = 0;
42+ Q_EMIT positionChanged(m_position);
43+
44+ m_duration = (qrand() % 20000) + 10000;
45+ Q_EMIT durationChanged(m_duration);
46+ }
47+}
48+
49+Audio::PlaybackState Audio::playbackState() const
50+{
51+ return m_playbackState;
52+}
53+
54+int Audio::position() const
55+{
56+ return m_position;
57+}
58+
59+int Audio::duration() const
60+{
61+ return m_duration;
62+}
63+
64+QString Audio::errorString() const
65+{
66+ return QString();
67+}
68+
69+void Audio::pause()
70+{
71+ if (m_playbackState == PlayingState) {
72+ m_playbackState = PausedState;
73+ Q_EMIT playbackStateChanged(m_playbackState);
74+ m_timer.stop();
75+ }
76+}
77+
78+void Audio::play()
79+{
80+ if (m_playbackState != PlayingState && m_source.isValid()) {
81+ m_playbackState = PlayingState;
82+ Q_EMIT playbackStateChanged(m_playbackState);
83+
84+ m_timer.start();
85+ }
86+}
87+
88+void Audio::stop()
89+{
90+ if (m_playbackState != StoppedState) {
91+ m_playbackState = StoppedState;
92+ Q_EMIT playbackStateChanged(m_playbackState);
93+ m_timer.stop();
94+ m_position = 0;
95+ Q_EMIT positionChanged(m_position);
96+ }
97+}
98+
99+void Audio::timerEvent()
100+{
101+ if (m_position + 1000 < m_duration) {
102+ m_position += 1000;
103+ Q_EMIT positionChanged(m_position);
104+ } else {
105+ stop();
106+ }
107+}
tests/mocks/QtMultimedia/audio.hnew file+78
@@ -0,0 +1,78 @@
1+/*
2+ * Copyright (C) 2012,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 General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Authors: Michael Zanetti <michael.zanetti@canonical.com>
17+ */
18+
19+#ifndef MOCK_AUDIO_H
20+#define MOCK_AUDIO_H
21+
22+#include <QObject>
23+#include <QUrl>
24+#include <QTimer>
25+
26+class Audio: public QObject
27+{
28+ Q_OBJECT
29+ Q_ENUMS(PlaybackState)
30+ Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
31+ Q_PROPERTY(PlaybackState playbackState READ playbackState NOTIFY playbackStateChanged)
32+ Q_PROPERTY(int position READ position NOTIFY positionChanged)
33+ Q_PROPERTY(int duration READ duration NOTIFY durationChanged)
34+ Q_PROPERTY(QString errorString READ errorString NOTIFY errorStringChanged)
35+public:
36+ enum PlaybackState {
37+ PlayingState,
38+ PausedState,
39+ StoppedState
40+ };
41+
42+ explicit Audio(QObject *parent = 0);
43+
44+ QUrl source() const;
45+ void setSource(const QUrl &source);
46+
47+ PlaybackState playbackState() const;
48+
49+ int position() const;
50+
51+ int duration() const;
52+
53+ QString errorString() const;
54+
55+public Q_SLOTS:
56+ void pause();
57+ void play();
58+ void stop();
59+
60+Q_SIGNALS:
61+ void sourceChanged(const QUrl &source);
62+ void playbackStateChanged(PlaybackState playbackState);
63+ void positionChanged(int position);
64+ void durationChanged(int duration);
65+ void errorStringChanged(const QString &errorString);
66+
67+private Q_SLOTS:
68+ void timerEvent();
69+
70+private:
71+ QUrl m_source;
72+ PlaybackState m_playbackState;
73+ QTimer m_timer;
74+ int m_position;
75+ int m_duration;
76+};
77+
78+#endif
tests/mocks/QtMultimedia/plugin.cppnew file+28
@@ -0,0 +1,28 @@
1+/*
2+ * Copyright (C) 2012,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 General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Authors: Michael Zanetti <michael.zanetti@canonical.com>
17+ */
18+
19+#include "plugin.h"
20+#include "audio.h"
21+
22+#include <QtQml/qqml.h>
23+
24+void MockQtMultimediaPlugin::registerTypes(const char *uri)
25+{
26+ Q_ASSERT(uri == QLatin1String("QtMultimedia"));
27+ qmlRegisterType<Audio>(uri, 5, 0, "Audio");
28+}
tests/mocks/QtMultimedia/plugin.hnew file+34
@@ -0,0 +1,34 @@
1+/*
2+ * Copyright (C) 2012,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 General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Authors: Michael Zanetti <michael.zanetti@canonical.com>
17+ */
18+
19+#ifndef MOCK_QTMULTIMEDIA_PLUGIN_H
20+#define MOCK_QTMULTIMEDIA_PLUGIN_H
21+
22+#include <QtQml/QQmlEngine>
23+#include <QtQml/QQmlExtensionPlugin>
24+
25+class MockQtMultimediaPlugin : public QQmlExtensionPlugin
26+{
27+ Q_OBJECT
28+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
29+
30+public:
31+ void registerTypes(const char *uri);
32+};
33+
34+#endif
tests/mocks/QtMultimedia/qmldirnew file+2
@@ -0,0 +1,2 @@
1+module QtMultimedia
2+plugin QtMultimedia-qml
tests/mocks/Unity/Application/ApplicationManager.cpp+4−3
@@ -16,7 +16,8 @@
16
16
17#include "ApplicationManager.h"
17#include "ApplicationManager.h"
18#include "ApplicationInfo.h"
18#include "ApplicationInfo.h"
19+
19−#include "paths.h"
20+#include <paths.h>
20
21
21#include <QDir>
22#include <QDir>
22#include <QGuiApplication>
23#include <QGuiApplication>
@@ -273,7 +274,7 @@ void ApplicationManager::generateQmlStrings(ApplicationInfo *application)
273 " smooth: true\n"
274 " smooth: true\n"
274 " fillMode: Image.PreserveAspectCrop\n"
275 " fillMode: Image.PreserveAspectCrop\n"
275 "}").arg(topMargin)
276 "}").arg(topMargin)
276− .arg(shellAppDirectory())
277+ .arg(qmlDirectory())
277 .arg(application->icon().toString());
278 .arg(application->icon().toString());
278 application->setWindowQml(windowQml);
279 application->setWindowQml(windowQml);
279
280
@@ -284,7 +285,7 @@ void ApplicationManager::generateQmlStrings(ApplicationInfo *application)
284 " source: \"file://%1/Dash/graphics/phone/screenshots/%2.png\"\n"
285 " source: \"file://%1/Dash/graphics/phone/screenshots/%2.png\"\n"
285 " smooth: true\n"
286 " smooth: true\n"
286 " fillMode: Image.PreserveAspectCrop\n"
287 " fillMode: Image.PreserveAspectCrop\n"
287− "}").arg(shellAppDirectory())
288+ "}").arg(qmlDirectory())
288 .arg(application->icon().toString());
289 .arg(application->icon().toString());
289 application->setImageQml(imageQml);
290 application->setImageQml(imageQml);
290}
291}
tests/mocks/Unity/Application/CMakeLists.txt−1
@@ -1,4 +1,3 @@
1−include(FindPkgConfig)
2pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application)
1pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application)
3
2
4set(FakeUnityApplicationQml_SOURCES
3set(FakeUnityApplicationQml_SOURCES
tests/mocks/Unity/Launcher/CMakeLists.txt−1
@@ -1,4 +1,3 @@
1−include(FindPkgConfig)
2pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=3)
1pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=3)
3
2
4add_definitions(-DTOP_SRCDIR="${CMAKE_SOURCE_DIR}")
3add_definitions(-DTOP_SRCDIR="${CMAKE_SOURCE_DIR}")
tests/mocks/Unity/fake_scope.cpp+3−3
@@ -16,7 +16,7 @@
16
16
17#include "fake_scope.h"
17#include "fake_scope.h"
18#include "fake_preview.h"
18#include "fake_preview.h"
19−#include "paths.h"
19+#include <paths.h>
20
20
21#include <dee.h>
21#include <dee.h>
22
22
@@ -204,7 +204,7 @@ DeeModel* create_categories_model(unsigned category_count) {
204 std::to_string(i).c_str(),
204 std::to_string(i).c_str(),
205 ("Category "+std::to_string(i)).c_str(),
205 ("Category "+std::to_string(i)).c_str(),
206 "gtk-apply",
206 "gtk-apply",
207− "grid",
207+ i % 2 == 0 ? "grid" : "carousel",
208 hints);
208 hints);
209 }
209 }
210 return category_model;
210 return category_model;
@@ -236,7 +236,7 @@ DeeModel* create_results_model(unsigned category_count, unsigned result_count) {
236
236
237 dee_model_append(results_model,
237 dee_model_append(results_model,
238 ("uri://result."+std::to_string(i)).c_str(),
238 ("uri://result."+std::to_string(i)).c_str(),
239− (shellAppDirectory() + "graphics/applicationIcons/dash.png").toLatin1().data(),
239+ (qmlDirectory() + "graphics/applicationIcons/dash.png").toLatin1().data(),
240 category,
240 category,
241 0,
241 0,
242 "application/x-desktop",
242 "application/x-desktop",
tests/mocks/libusermetrics/CMakeLists.txt+4
@@ -8,6 +8,10 @@ add_library(MockUserMetrics SHARED ${mock_SOURCES})
8
8
9qt5_use_modules(MockUserMetrics Gui)
9qt5_use_modules(MockUserMetrics Gui)
10
10
11+include_directories(
12+ ${CMAKE_SOURCE_DIR}/plugins/Utils
13+)
14+
11set_target_properties(MockUserMetrics PROPERTIES
15set_target_properties(MockUserMetrics PROPERTIES
12 OUTPUT_NAME usermetricsoutput
16 OUTPUT_NAME usermetricsoutput
13 VERSION 1)
17 VERSION 1)
tests/mocks/libusermetrics/UserMetrics.cpp+1−1
@@ -17,7 +17,7 @@
17 */
17 */
18
18
19#include "UserMetrics.h"
19#include "UserMetrics.h"
20−#include "plugins/Utils/qvariantlistmodel.h"
20+#include <qvariantlistmodel.h>
21
21
22#include <QtCore/QDir>
22#include <QtCore/QDir>
23#include <QtCore/QString>
23#include <QtCore/QString>
tests/plugins/AccountsService/CMakeLists.txt+6−1
@@ -1,6 +1,11 @@
1+if(DEFINED ENV{DEB_BUILD_MULTIARCH})
2+ set(QDBUSXML2CPP_EXECUTABLE "/usr/lib/$ENV{DEB_BUILD_MULTIARCH}/qt5/bin/qdbusxml2cpp")
3+else()
4+ FIND_PROGRAM(QDBUSXML2CPP_EXECUTABLE qdbusxml2cpp)
5+endif()
1macro(make_dbus_class NAME INTERFACE)
6macro(make_dbus_class NAME INTERFACE)
2 if(${CMAKE_CURRENT_SOURCE_DIR}/interfaces.xml IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/${NAME}Adaptor.h)
7 if(${CMAKE_CURRENT_SOURCE_DIR}/interfaces.xml IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/${NAME}Adaptor.h)
3− execute_process(COMMAND qdbusxml2cpp -c ${NAME}Adaptor -a ${CMAKE_CURRENT_BINARY_DIR}/${NAME}Adaptor ${CMAKE_CURRENT_SOURCE_DIR}/interfaces.xml ${INTERFACE})
8+ execute_process(COMMAND ${QDBUSXML2CPP_EXECUTABLE} -c ${NAME}Adaptor -a ${CMAKE_CURRENT_BINARY_DIR}/${NAME}Adaptor ${CMAKE_CURRENT_SOURCE_DIR}/interfaces.xml ${INTERFACE})
4 endif()
9 endif()
5endmacro(make_dbus_class)
10endmacro(make_dbus_class)
6
11
tests/plugins/CMakeLists.txt+2−1
@@ -1,5 +1,6 @@
1add_subdirectory(AccountsService)
1add_subdirectory(AccountsService)
2−add_subdirectory(ListViewWithPageHeader)
2+add_subdirectory(LightDM)
3+add_subdirectory(DashViews)
3add_subdirectory(Ubuntu)
4add_subdirectory(Ubuntu)
4add_subdirectory(Unity)
5add_subdirectory(Unity)
5add_subdirectory(Utils)
6add_subdirectory(Utils)
tests/plugins/ListViewWithPageHeader/CMakeLists.txt → tests/plugins/DashViews/CMakeLists.txtrenamed+16−5
@@ -16,30 +16,40 @@ include_directories(
16 ${Qt5Quick_INCLUDE_DIRS}
16 ${Qt5Quick_INCLUDE_DIRS}
17 ${Qt5Quick_PRIVATE_INCLUDE_DIRS}
17 ${Qt5Quick_PRIVATE_INCLUDE_DIRS}
18 ${Qt5V8_PRIVATE_INCLUDE_DIR}
18 ${Qt5V8_PRIVATE_INCLUDE_DIR}
19− ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/ListViewWithPageHeader
19+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews
20 ${CMAKE_CURRENT_BINARY_DIR}
20 ${CMAKE_CURRENT_BINARY_DIR}
21 )
21 )
22
22
23remove_definitions(-DQT_NO_KEYWORDS)
23remove_definitions(-DQT_NO_KEYWORDS)
24
24
25−add_definitions(-DLISTVIEWWITHPAGEHEADER_FOLDER="${CMAKE_CURRENT_SOURCE_DIR}")
25+add_definitions(-DDASHVIEWSTEST_FOLDER="${CMAKE_CURRENT_SOURCE_DIR}")
26add_definitions(-DBUILT_PLUGINS_DIR="${CMAKE_BINARY_DIR}/plugins")
26add_definitions(-DBUILT_PLUGINS_DIR="${CMAKE_BINARY_DIR}/plugins")
27
27
28−add_executable(listviewwithpageheadertestExec listviewwithpageheadertest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/ListViewWithPageHeader/listviewwithpageheader.cpp)
28+add_executable(listviewwithpageheadertestExec listviewwithpageheadertest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews/listviewwithpageheader.cpp)
29qt5_use_modules(listviewwithpageheadertestExec Test Core Qml)
29qt5_use_modules(listviewwithpageheadertestExec Test Core Qml)
30target_link_libraries(listviewwithpageheadertestExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
30target_link_libraries(listviewwithpageheadertestExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
31add_custom_target(testlistviewwithpageheader ${CMAKE_CURRENT_BINARY_DIR}/listviewwithpageheadertestExec -o ${CMAKE_BINARY_DIR}/testlistviewwithpageheader.xml,xunitxml -o -,txt)
31add_custom_target(testlistviewwithpageheader ${CMAKE_CURRENT_BINARY_DIR}/listviewwithpageheadertestExec -o ${CMAKE_BINARY_DIR}/testlistviewwithpageheader.xml,xunitxml -o -,txt)
32
32
33−add_executable(listviewwithpageheadertestsectionExec listviewwithpageheadertestsection.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/ListViewWithPageHeader/listviewwithpageheader.cpp)
33+add_executable(listviewwithpageheadertestsectionExec listviewwithpageheadertestsection.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews/listviewwithpageheader.cpp)
34qt5_use_modules(listviewwithpageheadertestsectionExec Test Core Qml)
34qt5_use_modules(listviewwithpageheadertestsectionExec Test Core Qml)
35target_link_libraries(listviewwithpageheadertestsectionExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
35target_link_libraries(listviewwithpageheadertestsectionExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
36add_custom_target(testlistviewwithpageheadersection ${CMAKE_CURRENT_BINARY_DIR}/listviewwithpageheadertestsectionExec -o ${CMAKE_BINARY_DIR}/testlistviewwithpageheadersection.xml,xunitxml -o -,txt)
36add_custom_target(testlistviewwithpageheadersection ${CMAKE_CURRENT_BINARY_DIR}/listviewwithpageheadertestsectionExec -o ${CMAKE_BINARY_DIR}/testlistviewwithpageheadersection.xml,xunitxml -o -,txt)
37
37
38−add_executable(listviewwithpageheadertestsectionexternalmodelExec listviewwithpageheadertestsectionexternalmodel.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/ListViewWithPageHeader/listviewwithpageheader.cpp)
38+add_executable(listviewwithpageheadertestsectionexternalmodelExec listviewwithpageheadertestsectionexternalmodel.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews/listviewwithpageheader.cpp)
39qt5_use_modules(listviewwithpageheadertestsectionexternalmodelExec Test Core Qml)
39qt5_use_modules(listviewwithpageheadertestsectionexternalmodelExec Test Core Qml)
40target_link_libraries(listviewwithpageheadertestsectionexternalmodelExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
40target_link_libraries(listviewwithpageheadertestsectionexternalmodelExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
41add_custom_target(testlistviewwithpageheadersectionexternalmodel ${CMAKE_CURRENT_BINARY_DIR}/listviewwithpageheadertestsectionexternalmodelExec -o ${CMAKE_BINARY_DIR}/testlistviewwithpageheadersectionexternalmodel.xml,xunitxml -o -,txt)
41add_custom_target(testlistviewwithpageheadersectionexternalmodel ${CMAKE_CURRENT_BINARY_DIR}/listviewwithpageheadertestsectionexternalmodelExec -o ${CMAKE_BINARY_DIR}/testlistviewwithpageheadersectionexternalmodel.xml,xunitxml -o -,txt)
42
42
43+add_executable(verticaljournaltestExec verticaljournaltest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews/verticaljournal.cpp)
44+qt5_use_modules(verticaljournaltestExec Test Core Qml)
45+target_link_libraries(verticaljournaltestExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
46+add_custom_target(testVerticalJournal ${CMAKE_CURRENT_BINARY_DIR}/verticaljournaltestExec -o ${CMAKE_BINARY_DIR}/testVerticalJournal.xml,xunitxml -o -,txt)
47+
48+add_executable(verticaljournaltryExec verticaljournaltry.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews/verticaljournal.cpp)
49+qt5_use_modules(verticaljournaltryExec Test Core Qml)
50+target_link_libraries(verticaljournaltryExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
51+add_custom_target(tryVerticalJournal ${CMAKE_CURRENT_BINARY_DIR}/verticaljournaltryExec -o ${CMAKE_BINARY_DIR}/testVerticalJournal.xml,xunitxml -o -,txt)
52+
43set(qmltest_DEFAULT_NO_ADD_TEST TRUE)
53set(qmltest_DEFAULT_NO_ADD_TEST TRUE)
44add_qml_test(. listviewwithpageheaderqml IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins)
54add_qml_test(. listviewwithpageheaderqml IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins)
45
55
@@ -47,3 +57,4 @@ add_dependencies(qmluitests testlistviewwithpageheader)
47add_dependencies(qmluitests testlistviewwithpageheadersection)
57add_dependencies(qmluitests testlistviewwithpageheadersection)
48add_dependencies(qmluitests testlistviewwithpageheadersectionexternalmodel)
58add_dependencies(qmluitests testlistviewwithpageheadersectionexternalmodel)
49add_dependencies(qmluitests testlistviewwithpageheaderqml)
59add_dependencies(qmluitests testlistviewwithpageheaderqml)
60+add_dependencies(qmluitests testVerticalJournal)
tests/plugins/ListViewWithPageHeader/listviewwithpageheadertest.cpp → tests/plugins/DashViews/listviewwithpageheadertest.cpprenamed+1−1
@@ -118,7 +118,7 @@ private Q_SLOTS:
118 {
118 {
119 view = new QQuickView();
119 view = new QQuickView();
120 view->engine()->addImportPath(BUILT_PLUGINS_DIR);
120 view->engine()->addImportPath(BUILT_PLUGINS_DIR);
121− view->setSource(QUrl::fromLocalFile(LISTVIEWWITHPAGEHEADER_FOLDER "/test.qml"));
121+ view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/listviewwithpageheadertest.qml"));
122 lvwph = dynamic_cast<ListViewWithPageHeader*>(view->rootObject()->findChild<QQuickFlickable*>());
122 lvwph = dynamic_cast<ListViewWithPageHeader*>(view->rootObject()->findChild<QQuickFlickable*>());
123#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
123#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
124 model = view->rootObject()->findChild<QQuickListModel*>();
124 model = view->rootObject()->findChild<QQuickListModel*>();
tests/plugins/ListViewWithPageHeader/test.qml → tests/plugins/DashViews/listviewwithpageheadertest.qmlrenamed+1−1
@@ -15,7 +15,7 @@
15 */
15 */
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18−import ListViewWithPageHeader 0.1
18+import DashViews 0.1
19
19
20Rectangle {
20Rectangle {
21 width: 300
21 width: 300
tests/plugins/ListViewWithPageHeader/listviewwithpageheadertestsection.cpp → tests/plugins/DashViews/listviewwithpageheadertestsection.cpprenamed+1−1
@@ -133,7 +133,7 @@ private Q_SLOTS:
133 {
133 {
134 view = new QQuickView();
134 view = new QQuickView();
135 view->engine()->addImportPath(BUILT_PLUGINS_DIR);
135 view->engine()->addImportPath(BUILT_PLUGINS_DIR);
136− view->setSource(QUrl::fromLocalFile(LISTVIEWWITHPAGEHEADER_FOLDER "/test_section.qml"));
136+ view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/listviewwithpageheadertestsection.qml"));
137 lvwph = dynamic_cast<ListViewWithPageHeader*>(view->rootObject()->findChild<QQuickFlickable*>());
137 lvwph = dynamic_cast<ListViewWithPageHeader*>(view->rootObject()->findChild<QQuickFlickable*>());
138#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
138#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
139 model = view->rootObject()->findChild<QQuickListModel*>();
139 model = view->rootObject()->findChild<QQuickListModel*>();
tests/plugins/ListViewWithPageHeader/test_section.qml → tests/plugins/DashViews/listviewwithpageheadertestsection.qmlrenamed+1−1
@@ -15,7 +15,7 @@
15 */
15 */
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18−import ListViewWithPageHeader 0.1
18+import DashViews 0.1
19
19
20Rectangle {
20Rectangle {
21 width: 300
21 width: 300
tests/plugins/ListViewWithPageHeader/listviewwithpageheadertestsectionexternalmodel.cpp → tests/plugins/DashViews/listviewwithpageheadertestsectionexternalmodel.cpprenamed+1−1
@@ -173,7 +173,7 @@ private Q_SLOTS:
173 {
173 {
174 view = new QQuickView();
174 view = new QQuickView();
175 view->engine()->addImportPath(BUILT_PLUGINS_DIR);
175 view->engine()->addImportPath(BUILT_PLUGINS_DIR);
176− view->setSource(QUrl::fromLocalFile(LISTVIEWWITHPAGEHEADER_FOLDER "/test_sectionexternalmodel.qml"));
176+ view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/listviewwithpageheadertestsectionexternalmodel.qml"));
177 lvwph = dynamic_cast<ListViewWithPageHeader*>(view->rootObject()->findChild<QQuickFlickable*>());
177 lvwph = dynamic_cast<ListViewWithPageHeader*>(view->rootObject()->findChild<QQuickFlickable*>());
178 QVERIFY(lvwph);
178 QVERIFY(lvwph);
179 view->show();
179 view->show();
tests/plugins/ListViewWithPageHeader/test_sectionexternalmodel.qml → tests/plugins/DashViews/listviewwithpageheadertestsectionexternalmodel.qmlrenamed+1−1
@@ -15,7 +15,7 @@
15 */
15 */
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18−import ListViewWithPageHeader 0.1
18+import DashViews 0.1
19
19
20Rectangle {
20Rectangle {
21 width: 300
21 width: 300
tests/plugins/ListViewWithPageHeader/tst_listviewwithpageheaderqml.qml → tests/plugins/DashViews/tst_listviewwithpageheaderqml.qmlrenamed+1−1
@@ -16,7 +16,7 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19−import ListViewWithPageHeader 0.1
19+import DashViews 0.1
20
20
21Rectangle {
21Rectangle {
22 width: 300
22 width: 300
tests/plugins/DashViews/verticaljournaltest.cppnew file+438
@@ -0,0 +1,438 @@
1+/*
2+ * Copyright (C) 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 General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include <QQuickView>
18+#include <QtTestGui>
19+#include <QDebug>
20+#include <QGuiApplication>
21+#include <QQuickView>
22+#include <QtQml/qqml.h>
23+#include <QStringListModel>
24+#include <QQmlContext>
25+#include <QQmlEngine>
26+#pragma GCC diagnostic push
27+#pragma GCC diagnostic ignored "-pedantic"
28+#include <private/qquickitem_p.h>
29+#pragma GCC diagnostic pop
30+
31+#include "verticaljournal.h"
32+
33+class QHeightModel : public QAbstractListModel {
34+public:
35+ QHash<int, QByteArray> roleNames() const
36+ {
37+ QHash<int, QByteArray> roles;
38+ roles.insert(Qt::DisplayRole, "modelHeight");
39+ return roles;
40+ }
41+
42+ int rowCount(const QModelIndex & /*parent*/) const
43+ {
44+ return m_list.count();
45+ }
46+
47+ QVariant data(const QModelIndex &index, int /*role*/) const
48+ {
49+ return m_list[index.row()];
50+ }
51+
52+ QStringList stringList() const
53+ {
54+ return m_list;
55+ }
56+
57+ void setStringList(const QStringList &list)
58+ {
59+ beginResetModel();
60+ m_list = list;
61+ endResetModel();
62+ }
63+
64+ void addString(const QString& string)
65+ {
66+ beginInsertRows(QModelIndex(), m_list.count(), m_list.count());
67+ m_list << string;
68+ endInsertRows();
69+ }
70+
71+ void removeLast()
72+ {
73+ beginRemoveRows(QModelIndex(), m_list.count() - 1, m_list.count() - 1);
74+ m_list.takeLast();
75+ endRemoveRows();
76+ }
77+
78+private:
79+ QStringList m_list;
80+};
81+
82+class VerticalJournalTest : public QObject
83+{
84+ Q_OBJECT
85+
86+private:
87+ void verifyItem(const VerticalJournal::ViewItem &item, int modelIndex, qreal x, qreal y, bool visible)
88+ {
89+ QTRY_COMPARE(item.m_modelIndex, modelIndex);
90+ QTRY_COMPARE(item.x(), x);
91+ QTRY_COMPARE(item.y(), y);
92+ QTRY_COMPARE(item.height(), model->stringList()[modelIndex].toDouble());
93+ QTRY_COMPARE(QQuickItemPrivate::get(item.m_item)->culled, !visible);
94+ }
95+
96+ void checkInitialPositions()
97+ {
98+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
99+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 5);
100+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 7);
101+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 6);
102+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
103+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 160, 0, true);
104+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, true);
105+ verifyItem(vj->m_columnVisibleItems[1][1], 3, 160, 60, true);
106+ verifyItem(vj->m_columnVisibleItems[1][2], 4, 160, 80, true);
107+ verifyItem(vj->m_columnVisibleItems[0][1], 5, 0, 110, true);
108+ verifyItem(vj->m_columnVisibleItems[1][3], 6, 160, 130, true);
109+ verifyItem(vj->m_columnVisibleItems[2][1], 7, 320, 135, true);
110+ verifyItem(vj->m_columnVisibleItems[0][2], 8, 0, 190, true);
111+ verifyItem(vj->m_columnVisibleItems[2][2], 9, 320, 255, true);
112+ verifyItem(vj->m_columnVisibleItems[2][3], 10, 320, 285, true);
113+ verifyItem(vj->m_columnVisibleItems[2][4], 11, 320, 315, true);
114+ verifyItem(vj->m_columnVisibleItems[1][4], 12, 160, 340, true);
115+ verifyItem(vj->m_columnVisibleItems[0][3], 13, 0, 360, true);
116+ verifyItem(vj->m_columnVisibleItems[2][5], 14, 320, 390, true);
117+ verifyItem(vj->m_columnVisibleItems[1][5], 15, 160, 430, false);
118+ verifyItem(vj->m_columnVisibleItems[0][4], 16, 0, 570, false);
119+ verifyItem(vj->m_columnVisibleItems[1][6], 17, 160, 570, false);
120+ QCOMPARE(vj->implicitHeight(), 970. + 2. * 970. / 18.);
121+ }
122+
123+private Q_SLOTS:
124+ void init()
125+ {
126+ view = new QQuickView();
127+ view->setResizeMode(QQuickView::SizeRootObjectToView);
128+ view->engine()->addImportPath(BUILT_PLUGINS_DIR);
129+
130+ model = new QHeightModel();
131+ QStringList heightList;
132+ heightList << "100" << "50" << "125" << "10" << "40" << "70" << "200" << "110" << "160" << "20" << "20" << "65" << "80" << "200" << "300" << "130" << "400" << "300" << "500" << "10";
133+ model->setStringList(heightList);
134+
135+ view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/verticaljournaltest.qml"));
136+
137+ view->show();
138+ view->resize(470, 400);
139+ QTest::qWaitForWindowExposed(view);
140+
141+ vj = dynamic_cast<VerticalJournal*>(view->rootObject()->findChild<QObject*>("vj"));
142+ vj->setModel(model);
143+
144+ checkInitialPositions();
145+ }
146+
147+ void cleanup()
148+ {
149+ delete view;
150+ delete model;
151+ }
152+
153+ void testWidthResize()
154+ {
155+ view->resize(629, 400);
156+ QTRY_COMPARE(vj->width(), 629.);
157+
158+ // This is exactly the same block as above as nothing changed, just white space on the right
159+ checkInitialPositions();
160+
161+ view->resize(630, 400);
162+
163+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 4);
164+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 4);
165+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 7);
166+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 4);
167+ QTRY_COMPARE(vj->m_columnVisibleItems[3].count(), 5);
168+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
169+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 160, 0, true);
170+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, true);
171+ verifyItem(vj->m_columnVisibleItems[3][0], 3, 480, 0, true);
172+ verifyItem(vj->m_columnVisibleItems[3][1], 4, 480, 20, true);
173+ verifyItem(vj->m_columnVisibleItems[1][1], 5, 160, 60, true);
174+ verifyItem(vj->m_columnVisibleItems[3][2], 6, 480, 70, true);
175+ verifyItem(vj->m_columnVisibleItems[0][1], 7, 0, 110, true);
176+ verifyItem(vj->m_columnVisibleItems[2][1], 8, 320, 135, true);
177+ verifyItem(vj->m_columnVisibleItems[1][2], 9, 160, 140, true);
178+ verifyItem(vj->m_columnVisibleItems[1][3], 10, 160, 170, true);
179+ verifyItem(vj->m_columnVisibleItems[1][4], 11, 160, 200, true);
180+ verifyItem(vj->m_columnVisibleItems[0][2], 12, 0, 230, true);
181+ verifyItem(vj->m_columnVisibleItems[1][5], 13, 160, 275, true);
182+ verifyItem(vj->m_columnVisibleItems[3][3], 14, 480, 280, true);
183+ verifyItem(vj->m_columnVisibleItems[2][2], 15, 320, 305, true);
184+ verifyItem(vj->m_columnVisibleItems[0][3], 16, 0, 320, true);
185+ verifyItem(vj->m_columnVisibleItems[2][3], 17, 320, 445, false);
186+ verifyItem(vj->m_columnVisibleItems[1][6], 18, 160, 485, false);
187+ verifyItem(vj->m_columnVisibleItems[3][4], 19, 480, 590, false);
188+ QTRY_COMPARE(vj->implicitHeight(), 985.);
189+
190+ view->resize(470, 400);
191+
192+ // This is exactly the same block as the first again
193+ checkInitialPositions();
194+ }
195+
196+ void testColumnSpacing()
197+ {
198+ vj->setColumnSpacing(11);
199+
200+ QTRY_COMPARE(vj->m_needsRelayout, false);
201+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 2);
202+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 7);
203+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 7);
204+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
205+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 161, 0, true);
206+ verifyItem(vj->m_columnVisibleItems[1][1], 2, 161, 60, true);
207+ verifyItem(vj->m_columnVisibleItems[0][1], 3, 0, 110, true);
208+ verifyItem(vj->m_columnVisibleItems[0][2], 4, 0, 130, true);
209+ verifyItem(vj->m_columnVisibleItems[0][3], 5, 0, 180, true);
210+ verifyItem(vj->m_columnVisibleItems[1][2], 6, 161, 195, true);
211+ verifyItem(vj->m_columnVisibleItems[0][4], 7, 0, 260, true);
212+ verifyItem(vj->m_columnVisibleItems[0][5], 8, 0, 380, true);
213+ verifyItem(vj->m_columnVisibleItems[1][3], 9, 161, 405, false);
214+ verifyItem(vj->m_columnVisibleItems[1][4], 10, 161, 435, false);
215+ verifyItem(vj->m_columnVisibleItems[1][5], 11, 161, 465, false);
216+ verifyItem(vj->m_columnVisibleItems[1][6], 12, 161, 540, false);
217+ verifyItem(vj->m_columnVisibleItems[0][6], 13, 0, 550, false);
218+ QCOMPARE(vj->implicitHeight(), 750. + 6. * 750. / 14.);
219+
220+ vj->setColumnSpacing(10);
221+ QTRY_COMPARE(vj->m_needsRelayout, false);
222+
223+ // This is exactly the same block as the first again
224+ checkInitialPositions();
225+ }
226+
227+ void testRowSpacing()
228+ {
229+ vj->setRowSpacing(11);
230+
231+ QTRY_COMPARE(vj->m_needsRelayout, false);
232+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
233+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 5);
234+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 7);
235+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 6);
236+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
237+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 160, 0, true);
238+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, true);
239+ verifyItem(vj->m_columnVisibleItems[1][1], 3, 160, 61, true);
240+ verifyItem(vj->m_columnVisibleItems[1][2], 4, 160, 82, true);
241+ verifyItem(vj->m_columnVisibleItems[0][1], 5, 0, 111, true);
242+ verifyItem(vj->m_columnVisibleItems[1][3], 6, 160, 133, true);
243+ verifyItem(vj->m_columnVisibleItems[2][1], 7, 320, 136, true);
244+ verifyItem(vj->m_columnVisibleItems[0][2], 8, 0, 192, true);
245+ verifyItem(vj->m_columnVisibleItems[2][2], 9, 320, 257, true);
246+ verifyItem(vj->m_columnVisibleItems[2][3], 10, 320, 288, true);
247+ verifyItem(vj->m_columnVisibleItems[2][4], 11, 320, 319, true);
248+ verifyItem(vj->m_columnVisibleItems[1][4], 12, 160, 344, true);
249+ verifyItem(vj->m_columnVisibleItems[0][3], 13, 0, 363, true);
250+ verifyItem(vj->m_columnVisibleItems[2][5], 14, 320, 395, true);
251+ verifyItem(vj->m_columnVisibleItems[1][5], 15, 160, 435, false);
252+ verifyItem(vj->m_columnVisibleItems[0][4], 16, 0, 574, false);
253+ verifyItem(vj->m_columnVisibleItems[1][6], 17, 160, 576, false);
254+ QCOMPARE(vj->implicitHeight(), 974. + 2. * 974. / 18.);
255+
256+ vj->setRowSpacing(10);
257+ QTRY_COMPARE(vj->m_needsRelayout, false);
258+
259+ // This is exactly the same block as the first again
260+ checkInitialPositions();
261+ }
262+
263+ void testDelegateCreationRanges()
264+ {
265+ vj->setDelegateCreationBegin(200);
266+ vj->setDelegateCreationEnd(view->height());
267+
268+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
269+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 4);
270+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 4);
271+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 6);
272+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, false);
273+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, false);
274+ verifyItem(vj->m_columnVisibleItems[1][0], 4, 160, 80, false);
275+ verifyItem(vj->m_columnVisibleItems[0][1], 5, 0, 110, false);
276+ verifyItem(vj->m_columnVisibleItems[1][1], 6, 160, 130, true);
277+ verifyItem(vj->m_columnVisibleItems[2][1], 7, 320, 135, true);
278+ verifyItem(vj->m_columnVisibleItems[0][2], 8, 0, 190, true);
279+ verifyItem(vj->m_columnVisibleItems[2][2], 9, 320, 255, true);
280+ verifyItem(vj->m_columnVisibleItems[2][3], 10, 320, 285, true);
281+ verifyItem(vj->m_columnVisibleItems[2][4], 11, 320, 315, true);
282+ verifyItem(vj->m_columnVisibleItems[1][2], 12, 160, 340, true);
283+ verifyItem(vj->m_columnVisibleItems[0][3], 13, 0, 360, true);
284+ verifyItem(vj->m_columnVisibleItems[2][5], 14, 320, 390, true);
285+ verifyItem(vj->m_columnVisibleItems[1][3], 15, 160, 430, false);
286+ QCOMPARE(vj->implicitHeight(), 690. + 4. * 690. / 16.);
287+
288+ vj->resetDelegateCreationBegin();
289+ vj->resetDelegateCreationEnd();
290+
291+ // This is exactly the same block as the first again
292+ checkInitialPositions();
293+ }
294+
295+
296+ void testColumnWidthChange()
297+ {
298+ vj->setColumnWidth(200);
299+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 2);
300+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 7);
301+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 7);
302+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
303+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 210, 0, true);
304+ verifyItem(vj->m_columnVisibleItems[1][1], 2, 210, 60, true);
305+ verifyItem(vj->m_columnVisibleItems[0][1], 3, 0, 110, true);
306+ verifyItem(vj->m_columnVisibleItems[0][2], 4, 0, 130, true);
307+ verifyItem(vj->m_columnVisibleItems[0][3], 5, 0, 180, true);
308+ verifyItem(vj->m_columnVisibleItems[1][2], 6, 210, 195, true);
309+ verifyItem(vj->m_columnVisibleItems[0][4], 7, 0, 260, true);
310+ verifyItem(vj->m_columnVisibleItems[0][5], 8, 0, 380, true);
311+ verifyItem(vj->m_columnVisibleItems[1][3], 9, 210, 405, false);
312+ verifyItem(vj->m_columnVisibleItems[1][4], 10, 210, 435, false);
313+ verifyItem(vj->m_columnVisibleItems[1][5], 11, 210, 465, false);
314+ verifyItem(vj->m_columnVisibleItems[1][6], 12, 210, 540, false);
315+ verifyItem(vj->m_columnVisibleItems[0][6], 13, 0, 550, false);
316+ QCOMPARE(vj->implicitHeight(), 750. + 6. * 750. / 14.);
317+
318+ vj->setColumnWidth(150);
319+
320+ // This is exactly the same block as the first again
321+ checkInitialPositions();
322+ }
323+
324+ void testChangeModel()
325+ {
326+ QHeightModel *model2 = new QHeightModel();
327+ QStringList list2;
328+ list2 << "100" << "50" << "25" << "25" << "50" << "50";
329+ model2->setStringList(list2);
330+ vj->setModel(model2);
331+ delete model;
332+ model = model2;
333+
334+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
335+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 1);
336+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 2);
337+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 3);
338+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
339+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 160, 0, true);
340+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, true);
341+ verifyItem(vj->m_columnVisibleItems[2][1], 3, 320, 35, true);
342+ verifyItem(vj->m_columnVisibleItems[1][1], 4, 160, 60, true);
343+ verifyItem(vj->m_columnVisibleItems[2][2], 5, 320, 70, true);
344+ }
345+
346+ void testModelReset()
347+ {
348+ QStringList heightList;
349+ heightList << "100" << "50" << "50" << "30";
350+ model->setStringList(heightList);
351+
352+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
353+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 1);
354+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 2);
355+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 1);
356+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
357+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 160, 0, true);
358+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, true);
359+ verifyItem(vj->m_columnVisibleItems[1][1], 3, 160, 60, true);
360+ }
361+
362+ void testModelAppendRemoveLast()
363+ {
364+ QHeightModel *model2 = new QHeightModel();
365+ QStringList list2;
366+ list2 << "100" << "50" << "25" << "25" << "50" << "50";
367+ model2->setStringList(list2);
368+ vj->setModel(model2);
369+ delete model;
370+ model = model2;
371+
372+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
373+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 1);
374+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 2);
375+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 3);
376+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
377+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 160, 0, true);
378+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, true);
379+ verifyItem(vj->m_columnVisibleItems[2][1], 3, 320, 35, true);
380+ verifyItem(vj->m_columnVisibleItems[1][1], 4, 160, 60, true);
381+ verifyItem(vj->m_columnVisibleItems[2][2], 5, 320, 70, true);
382+
383+ model2->addString("75");
384+
385+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
386+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 2);
387+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 2);
388+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 3);
389+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
390+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 160, 0, true);
391+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, true);
392+ verifyItem(vj->m_columnVisibleItems[2][1], 3, 320, 35, true);
393+ verifyItem(vj->m_columnVisibleItems[1][1], 4, 160, 60, true);
394+ verifyItem(vj->m_columnVisibleItems[2][2], 5, 320, 70, true);
395+ verifyItem(vj->m_columnVisibleItems[0][1], 6, 0, 110, true);
396+
397+ model2->addString("50");
398+ model2->addString("50");
399+
400+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
401+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 2);
402+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 3);
403+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 4);
404+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
405+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 160, 0, true);
406+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, true);
407+ verifyItem(vj->m_columnVisibleItems[2][1], 3, 320, 35, true);
408+ verifyItem(vj->m_columnVisibleItems[1][1], 4, 160, 60, true);
409+ verifyItem(vj->m_columnVisibleItems[2][2], 5, 320, 70, true);
410+ verifyItem(vj->m_columnVisibleItems[0][1], 6, 0, 110, true);
411+ verifyItem(vj->m_columnVisibleItems[1][2], 7, 160, 120, true);
412+ verifyItem(vj->m_columnVisibleItems[2][3], 8, 320, 130, true);
413+
414+ model2->removeLast();
415+
416+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
417+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 2);
418+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 3);
419+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 3);
420+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
421+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 160, 0, true);
422+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, true);
423+ verifyItem(vj->m_columnVisibleItems[2][1], 3, 320, 35, true);
424+ verifyItem(vj->m_columnVisibleItems[1][1], 4, 160, 60, true);
425+ verifyItem(vj->m_columnVisibleItems[2][2], 5, 320, 70, true);
426+ verifyItem(vj->m_columnVisibleItems[0][1], 6, 0, 110, true);
427+ verifyItem(vj->m_columnVisibleItems[1][2], 7, 160, 120, true);
428+ }
429+
430+private:
431+ QQuickView *view;
432+ VerticalJournal *vj;
433+ QHeightModel *model;
434+};
435+
436+QTEST_MAIN(VerticalJournalTest)
437+
438+#include "verticaljournaltest.moc"
tests/plugins/DashViews/verticaljournaltest.qmlnew file+44
@@ -0,0 +1,44 @@
1+/*
2+ * Copyright (C) 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 General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.1
18+import DashViews 0.1
19+
20+Item {
21+
22+ VerticalJournal {
23+ id: vj
24+ objectName: "vj"
25+ anchors.fill: parent
26+ columnWidth: 150
27+ columnSpacing: 10
28+ rowSpacing: 10
29+
30+ delegate: Rectangle {
31+ property real randomValue: Math.random()
32+ width: 150
33+ color: randomValue < 0.3 ? "green" : randomValue < 0.6 ? "blue" : "red";
34+ height: modelHeight
35+ border.width: 3
36+
37+ Text {
38+ text: index + "\ny: " + parent.y + "\nheight: " + parent.height
39+ x: 10
40+ y: 10
41+ }
42+ }
43+ }
44+}
tests/plugins/DashViews/verticaljournaltry.cppnew file+90
@@ -0,0 +1,90 @@
1+/*
2+ * Copyright (C) 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 General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include <QQuickView>
18+#include <QDebug>
19+#include <QGuiApplication>
20+#include <QQuickView>
21+#include <QtQml/qqml.h>
22+#include <QStringListModel>
23+#include <QQmlContext>
24+#include <QQmlEngine>
25+#include <QGuiApplication>
26+
27+#include "verticaljournal.h"
28+
29+class QHeightModel : public QStringListModel {
30+ Q_OBJECT
31+public:
32+ QHash<int, QByteArray> roleNames() const
33+ {
34+ QHash<int, QByteArray> roles;
35+ roles.insert(Qt::DisplayRole, "modelHeight");
36+ return roles;
37+ }
38+
39+public slots:
40+ void add(int height)
41+ {
42+ if (height <= 0) {
43+ height = 50 + 50. * qrand() / RAND_MAX ;
44+ }
45+ QStringList sl = stringList();
46+ sl << QString::number(height);
47+ setStringList(sl);
48+ }
49+
50+ void remove()
51+ {
52+ QStringList sl = stringList();
53+ if (!sl.isEmpty()) {
54+ sl.removeLast();
55+ setStringList(sl);
56+ }
57+ }
58+};
59+
60+int main(int argc, char *argv[])
61+{
62+ QGuiApplication a(argc, argv);
63+
64+ QQuickView *view = new QQuickView();
65+ view->setResizeMode(QQuickView::SizeRootObjectToView);
66+ view->engine()->addImportPath(BUILT_PLUGINS_DIR);
67+
68+ QHeightModel model;
69+ QStringList heightList;
70+ heightList << "100" << "50" << "125";
71+ model.setStringList(heightList);
72+
73+ QStringListModel listModel;
74+ listModel.setStringList(QStringList() << QString());
75+
76+ view->rootContext()->setContextProperty("listModel", &listModel);
77+ view->rootContext()->setContextProperty("vjModel", &model);
78+
79+ view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/verticaljournaltry.qml"));
80+
81+ view->show();
82+ view->resize(530, 400);
83+
84+ QObject::connect(view->rootObject(), SIGNAL(add(int)), &model, SLOT(add(int)));
85+ QObject::connect(view->rootObject(), SIGNAL(remove()), &model, SLOT(remove()));
86+
87+ return a.exec();
88+}
89+
90+#include "verticaljournaltry.moc"
tests/plugins/DashViews/verticaljournaltry.qmlnew file+100
@@ -0,0 +1,100 @@
1+/*
2+ * Copyright (C) 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 General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.1
18+import DashViews 0.1
19+
20+Item {
21+ id: root
22+ signal add(int height)
23+ signal remove()
24+
25+ ListViewWithPageHeader {
26+ id: lvwph
27+ model: listModel
28+ height: parent.height
29+ width: parent.width - controls.width
30+
31+ delegate: VerticalJournal {
32+ id: vj
33+ model: vjModel
34+ columnWidth: 100
35+ columnSpacing: 10
36+ rowSpacing: 10
37+ width: parent.width
38+ height: implicitHeight > 100 ? implicitHeight : 100
39+ delegateCreationBegin: lvwph.contentY
40+ delegateCreationEnd: lvwph.contentY + lvwph.height
41+
42+ delegate: Rectangle {
43+ width: 100
44+ color: "red";
45+ height: modelHeight
46+ border.width: 3
47+
48+ Text {
49+ text: index + "\ny: " + parent.y + "\nheight: " + parent.height
50+ x: 10
51+ y: 10
52+ }
53+ }
54+ }
55+ }
56+
57+ Rectangle {
58+ id: controls
59+ height: parent.height
60+ width: 100
61+ anchors.right: parent.right
62+ color: "gray"
63+ opacity: 0.4
64+
65+ Rectangle {
66+ id: addButton
67+ height: 50
68+ width: parent.width
69+ color: "blue"
70+ Text {
71+ text: "Add"
72+ anchors.centerIn: parent
73+ }
74+ MouseArea {
75+ anchors.fill: parent
76+ onClicked: root.add(addField.text)
77+ }
78+ }
79+ TextInput {
80+ id: addField
81+ anchors.top: addButton.bottom
82+ height: 30
83+ width: parent.width
84+ }
85+ Rectangle {
86+ anchors.top: addField.bottom
87+ height: 50
88+ width: parent.width
89+ color: "red"
90+ Text {
91+ text: "Remove"
92+ anchors.centerIn: parent
93+ }
94+ MouseArea {
95+ anchors.fill: parent
96+ onClicked: root.remove()
97+ }
98+ }
99+ }
100+}
tests/plugins/LightDM/CMakeLists.txtnew file+24
@@ -0,0 +1,24 @@
1+add_executable(test-lightdm-dbus
2+ dbus.cpp
3+ ${CMAKE_SOURCE_DIR}/plugins/LightDM/Greeter.cpp
4+ )
5+qt5_use_modules(test-lightdm-dbus Core DBus Quick Test)
6+
7+include_directories(
8+ ${CMAKE_CURRENT_BINARY_DIR}
9+ ${CMAKE_SOURCE_DIR}/plugins/LightDM
10+ ${CMAKE_SOURCE_DIR}/tests/mocks/LightDM
11+ ${LIBLIGHTDM_INCLUDE_DIRS}
12+ )
13+
14+target_link_libraries(test-lightdm-dbus
15+ -L${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full
16+ -llightdm-qt5-2
17+ )
18+
19+add_definitions(-DCURRENT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
20+
21+add_custom_target(testLightDMDBus dbus-launch env QML2_IMPORT_PATH=${CMAKE_BINARY_DIR}/tests/mocks LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full ${CMAKE_CURRENT_BINARY_DIR}/test-lightdm-dbus)
22+add_dependencies(testLightDMDBus test-lightdm-dbus)
23+
24+add_dependencies(qmluitests testLightDMDBus)
tests/plugins/LightDM/dbus.cppnew file+166
@@ -0,0 +1,166 @@
1+/*
2+ * Copyright (C) 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 General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "Greeter.h"
18+
19+#include <QDBusInterface>
20+#include <QDBusReply>
21+#include <QSignalSpy>
22+#include <QQuickItem>
23+#include <QQuickView>
24+#include <QtTestGui>
25+
26+class GreeterDBusTest : public QObject
27+{
28+ Q_OBJECT
29+
30+Q_SIGNALS:
31+ void PropertiesChangedRelay(const QString &interface, const QVariantMap &changed, const QStringList &invalidated);
32+
33+private Q_SLOTS:
34+
35+ void initTestCase()
36+ {
37+ // Qt doesn't like us connecting to PropertiesChanged using normal
38+ // SIGNAL method, because QtDBus doesn't know about PropertiesChanged.
39+ // So we connect the hard way for the benefit of any tests that want
40+ // to watch.
41+ QDBusConnection::sessionBus().connect(
42+ "com.canonical.UnityGreeter",
43+ "/list",
44+ "org.freedesktop.DBus.Properties",
45+ "PropertiesChanged",
46+ this,
47+ SIGNAL(PropertiesChangedRelay(const QString&, const QVariantMap&, const QStringList&)));
48+ }
49+
50+ void init()
51+ {
52+ view = new QQuickView();
53+ view->setSource(QUrl::fromLocalFile(CURRENT_SOURCE_DIR "/greeter.qml"));
54+ greeter = dynamic_cast<Greeter*>(view->rootObject()->property("greeter").value<QObject*>());
55+ QVERIFY(greeter);
56+ QVERIFY(greeter->authenticationUser() == "");
57+ view->show();
58+ QTest::qWaitForWindowExposed(view);
59+
60+ dbusList = new QDBusInterface("com.canonical.UnityGreeter",
61+ "/list",
62+ "com.canonical.UnityGreeter.List",
63+ QDBusConnection::sessionBus(), view);
64+ QVERIFY(dbusList->isValid());
65+ }
66+
67+ void cleanup()
68+ {
69+ delete view;
70+ }
71+
72+ void testGetActiveEntry()
73+ {
74+ greeter->authenticate("has-password");
75+
76+ QDBusReply<QString> reply = dbusList->call("GetActiveEntry");
77+ QVERIFY(reply.isValid());
78+ QVERIFY(reply.value() == "has-password");
79+ }
80+
81+ void testSetActiveEntry()
82+ {
83+ QSignalSpy spy(greeter, SIGNAL(requestAuthenticationUser(QString)));
84+ QDBusReply<void> reply = dbusList->call("SetActiveEntry", "has-password");
85+ QVERIFY(reply.isValid());
86+ spy.wait();
87+
88+ QCOMPARE(spy.count(), 1);
89+ QList<QVariant> arguments = spy.takeFirst();
90+ QVERIFY(arguments.at(0).toString() == "has-password");
91+ }
92+
93+ void testEntrySelectedSignal()
94+ {
95+ QSignalSpy spy(dbusList, SIGNAL(EntrySelected(QString)));
96+ greeter->authenticate("has-password");
97+ spy.wait();
98+
99+ QCOMPARE(spy.count(), 1);
100+ QList<QVariant> arguments = spy.takeFirst();
101+ QVERIFY(arguments.at(0).toString() == "has-password");
102+ }
103+
104+ void testActiveEntryGet()
105+ {
106+ greeter->authenticate("has-password");
107+ QVERIFY(dbusList->property("ActiveEntry").toString() == "has-password");
108+ }
109+
110+ void testActiveEntrySet()
111+ {
112+ QSignalSpy spy(greeter, SIGNAL(requestAuthenticationUser(QString)));
113+ QVERIFY(dbusList->setProperty("ActiveEntry", "has-password"));
114+ spy.wait();
115+
116+ QCOMPARE(spy.count(), 1);
117+ QList<QVariant> arguments = spy.takeFirst();
118+ QVERIFY(arguments.at(0).toString() == "has-password");
119+ }
120+
121+ void testActiveEntryChanged()
122+ {
123+ QSignalSpy spy(this, SIGNAL(PropertiesChangedRelay(QString, QVariantMap, QStringList)));
124+ greeter->authenticate("has-password");
125+ spy.wait();
126+
127+ QCOMPARE(spy.count(), 1);
128+ QList<QVariant> arguments = spy.takeFirst();
129+ QVERIFY(arguments.at(0).toString() == "com.canonical.UnityGreeter.List");
130+ QVERIFY(arguments.at(1).toMap().contains("ActiveEntry"));
131+ QVERIFY(arguments.at(1).toMap()["ActiveEntry"] == "has-password");
132+ }
133+
134+ void testEntryIsLockedGet()
135+ {
136+ QVERIFY(dbusList->property("EntryIsLocked").toBool());
137+
138+ greeter->authenticate("no-password");
139+ QVERIFY(!dbusList->property("EntryIsLocked").toBool());
140+
141+ greeter->authenticate("has-password");
142+ QVERIFY(dbusList->property("EntryIsLocked").toBool());
143+ }
144+
145+ void testEntryIsLockedChanged()
146+ {
147+ QSignalSpy spy(this, SIGNAL(PropertiesChangedRelay(QString, QVariantMap, QStringList)));
148+ greeter->authenticate("no-password");
149+ spy.wait();
150+
151+ QCOMPARE(spy.count(), 2); // once for locked, once for user; first will be locked mode
152+ QList<QVariant> arguments = spy.takeFirst();
153+ QVERIFY(arguments.at(0).toString() == "com.canonical.UnityGreeter.List");
154+ QVERIFY(arguments.at(1).toMap().contains("EntryIsLocked"));
155+ QVERIFY(arguments.at(1).toMap()["EntryIsLocked"] == false);
156+ }
157+
158+private:
159+ QQuickView *view;
160+ Greeter *greeter;
161+ QDBusInterface *dbusList;
162+};
163+
164+QTEST_MAIN(GreeterDBusTest)
165+
166+#include "dbus.moc"
tests/plugins/LightDM/greeter.qmlnew file+22
@@ -0,0 +1,22 @@
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 General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+import LightDM 0.1 as LightDM
19+
20+Item {
21+ property var greeter: LightDM.Greeter
22+}
tests/plugins/Ubuntu/Gestures/CMakeLists.txt+2
@@ -3,6 +3,7 @@ include(QmlTest)
3include_directories(
3include_directories(
4 ${CMAKE_SOURCE_DIR}/plugins/Ubuntu/Gestures
4 ${CMAKE_SOURCE_DIR}/plugins/Ubuntu/Gestures
5 ${CMAKE_CURRENT_BINARY_DIR}
5 ${CMAKE_CURRENT_BINARY_DIR}
6+ ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
6 )
7 )
7
8
8file(GLOB qmlFiles *.qml)
9file(GLOB qmlFiles *.qml)
@@ -45,5 +46,6 @@ macro(add_gesture_test CLASSNAME)
45endmacro(add_gesture_test)
46endmacro(add_gesture_test)
46
47
47add_gesture_ui_test(DirectionalDragArea)
48add_gesture_ui_test(DirectionalDragArea)
49+add_gesture_ui_test(PressedOutsideNotifier)
48add_gesture_test(Damper)
50add_gesture_test(Damper)
49add_gesture_test(AxisVelocityCalculator)
51add_gesture_test(AxisVelocityCalculator)
tests/plugins/Ubuntu/Gestures/tst_PressedOutsideNotifier.cppnew file+150
@@ -0,0 +1,150 @@
1+/*
2+ * Copyright (C) 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 General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "GestureTest.h"
18+
19+#include <PressedOutsideNotifier.h>
20+
21+#include <QQuickItem>
22+#include <QQuickView>
23+#include <QtTest>
24+
25+class tst_PressedOutsideNotifier: public GestureTest
26+{
27+ Q_OBJECT
28+public:
29+ tst_PressedOutsideNotifier();
30+private Q_SLOTS:
31+ void init(); // called right before each and every test function is executed
32+
33+ void touchOutsideAreaTriggersSignal();
34+ void touchInsideAreaHasNoEffect();
35+ void mousePressOutsideAreaTriggersSignal();
36+ void mousePresssInsideAreaHasNoEffect();
37+ void nothingHappensWhileDisabled();
38+
39+private:
40+ QQuickItem *m_blueRect;
41+ PressedOutsideNotifier *m_notifier;
42+};
43+
44+tst_PressedOutsideNotifier::tst_PressedOutsideNotifier()
45+ : GestureTest(QStringLiteral("tst_PressedOutsideNotifier.qml"))
46+{
47+}
48+
49+void tst_PressedOutsideNotifier::init()
50+{
51+ GestureTest::init();
52+
53+ m_blueRect = m_view->rootObject()->findChild<QQuickItem*>("blueRect");
54+ Q_ASSERT(m_blueRect != nullptr);
55+
56+ m_notifier =
57+ m_view->rootObject()->findChild<PressedOutsideNotifier*>("pressedOutsideNotifier");
58+ Q_ASSERT(m_notifier != nullptr);
59+}
60+
61+void tst_PressedOutsideNotifier::touchOutsideAreaTriggersSignal()
62+{
63+ // half-way towards the top-left corner of the blueRect.
64+ // Therefore, still outside it.
65+ QPoint touch0 = QPoint(m_blueRect->x() * 0.5, m_blueRect->y() * 0.5);
66+
67+ QSignalSpy pressedOutsideSpy(m_notifier, SIGNAL(pressedOutside()));
68+
69+ QTest::touchEvent(m_view, m_device)
70+ .press(0, touch0);
71+
72+ qApp->processEvents();
73+
74+ QCOMPARE(pressedOutsideSpy.count(), 1);
75+
76+ QTest::touchEvent(m_view, m_device)
77+ .release(0, touch0);
78+}
79+
80+void tst_PressedOutsideNotifier::touchInsideAreaHasNoEffect()
81+{
82+ QPoint touch0 = QPoint(m_blueRect->x() + m_blueRect->width()*0.5,
83+ m_blueRect->y() + m_blueRect->height()*0.5);
84+
85+ QSignalSpy pressedOutsideSpy(m_notifier, SIGNAL(pressedOutside()));
86+
87+ QTest::touchEvent(m_view, m_device)
88+ .press(0, touch0);
89+
90+ qApp->processEvents();
91+
92+ QCOMPARE(pressedOutsideSpy.count(), 0);
93+
94+ QTest::touchEvent(m_view, m_device)
95+ .release(0, touch0);
96+}
97+
98+void tst_PressedOutsideNotifier::mousePressOutsideAreaTriggersSignal()
99+{
100+ QPoint mousePos= QPoint(m_blueRect->x() * 0.5, m_blueRect->y() * 0.5);
101+
102+ QSignalSpy pressedOutsideSpy(m_notifier, SIGNAL(pressedOutside()));
103+
104+ QTest::mousePress(m_view, Qt::LeftButton, 0 /*modifiers*/, mousePos);
105+
106+ qApp->processEvents();
107+
108+ QCOMPARE(pressedOutsideSpy.count(), 1);
109+
110+ QTest::mouseRelease(m_view, Qt::LeftButton, 0 /*modifiers*/, mousePos);
111+}
112+
113+void tst_PressedOutsideNotifier::mousePresssInsideAreaHasNoEffect()
114+{
115+ QPoint mousePos = QPoint(m_blueRect->x() + m_blueRect->width()*0.5,
116+ m_blueRect->y() + m_blueRect->height()*0.5);
117+
118+ QSignalSpy pressedOutsideSpy(m_notifier, SIGNAL(pressedOutside()));
119+
120+ QTest::mousePress(m_view, Qt::LeftButton, 0 /*modifiers*/, mousePos);
121+
122+ qApp->processEvents();
123+
124+ QCOMPARE(pressedOutsideSpy.count(), 0);
125+
126+ QTest::mouseRelease(m_view, Qt::LeftButton, 0 /*modifiers*/, mousePos);
127+}
128+
129+void tst_PressedOutsideNotifier::nothingHappensWhileDisabled()
130+{
131+ QPoint touch0 = QPoint(m_blueRect->x() * 0.5, m_blueRect->y() * 0.5);
132+
133+ QSignalSpy pressedOutsideSpy(m_notifier, SIGNAL(pressedOutside()));
134+
135+ m_notifier->setEnabled(false);
136+
137+ QTest::touchEvent(m_view, m_device)
138+ .press(0, touch0);
139+
140+ qApp->processEvents();
141+
142+ QCOMPARE(pressedOutsideSpy.count(), 0);
143+
144+ QTest::touchEvent(m_view, m_device)
145+ .release(0, touch0);
146+}
147+
148+QTEST_MAIN(tst_PressedOutsideNotifier)
149+
150+#include "tst_PressedOutsideNotifier.moc"
tests/plugins/Ubuntu/Gestures/tst_PressedOutsideNotifier.qmlnew file+62
@@ -0,0 +1,62 @@
1+/*
2+ * Copyright (C) 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 General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+import Ubuntu.Components 0.1
19+import Ubuntu.Gestures 0.1
20+
21+/*
22+ NB: If you change positions or sizes here make sure
23+ tst_PressedOutsideNotifier.cpp is updated accordingly
24+ */
25+
26+Rectangle {
27+ width: units.gu(60)
28+ height: units.gu(60)
29+ color: "white"
30+
31+ Rectangle {
32+ id: blueRect
33+ objectName: "blueRect"
34+ color: "blue"
35+ x: units.gu(20)
36+ y: units.gu(20)
37+ width: units.gu(20)
38+ height: units.gu(20)
39+
40+ Timer {
41+ id: resetColorTimer
42+ interval: 300
43+ repeat: false
44+ onTriggered: {
45+ blueRect.color = "blue";
46+ }
47+ }
48+
49+ function blinkRed() {
50+ blueRect.color = "red";
51+ resetColorTimer.start();
52+ }
53+
54+ PressedOutsideNotifier {
55+ objectName: "pressedOutsideNotifier"
56+ anchors.fill: parent
57+ onPressedOutside: {
58+ blueRect.blinkRed();
59+ }
60+ }
61+ }
62+}
tests/plugins/Unity/Indicators/CMakeLists.txt−1
@@ -40,4 +40,3 @@ indicator_test(indicatorsmodeltest ADDITIONAL_LIBS IndicatorsQml)
40indicator_test(menucontentactivatortest ADDITIONAL_CPPS ${INDICATORS_DIR}/menucontentactivator.cpp)
40indicator_test(menucontentactivatortest ADDITIONAL_CPPS ${INDICATORS_DIR}/menucontentactivator.cpp)
41indicator_test(unitymenumodelstacktest ADDITIONAL_CPPS ${TEST_DIR}/mocks/QMenuModel/unitymenumodel.cpp ${INDICATORS_DIR}/unitymenumodelstack.cpp)
41indicator_test(unitymenumodelstacktest ADDITIONAL_CPPS ${TEST_DIR}/mocks/QMenuModel/unitymenumodel.cpp ${INDICATORS_DIR}/unitymenumodelstack.cpp)
42indicator_test(rootactionstatetest ADDITIONAL_LIBS IndicatorsQml)
42indicator_test(rootactionstatetest ADDITIONAL_LIBS IndicatorsQml)
43−indicator_test(timeformattertest ADDITIONAL_LIBS IndicatorsQml)
tests/plugins/Unity/Indicators/indicatorsmanagertest.cpp+2−1
@@ -18,7 +18,8 @@
18 */
18 */
19
19
20#include "indicatorsmanager.h"
20#include "indicatorsmanager.h"
21+
21−#include "paths.h"
22+#include <paths.h>
22
23
23#include <QtTest>
24#include <QtTest>
24#include <QDebug>
25#include <QDebug>
tests/plugins/Unity/Indicators/indicatorsmodeltest.cpp+2−1
@@ -19,7 +19,8 @@
19
19
20#include "indicatorsmodel.h"
20#include "indicatorsmodel.h"
21#include "indicators.h"
21#include "indicators.h"
22+
22−#include "paths.h"
23+#include <paths.h>
23
24
24#include <QtTest>
25#include <QtTest>
25#include <QDebug>
26#include <QDebug>
tests/plugins/Unity/Indicators/menucontentactivatortest.cpp−1
@@ -18,7 +18,6 @@
18 */
18 */
19
19
20#include "menucontentactivator.h"
20#include "menucontentactivator.h"
21−#include "paths.h"
22
21
23#include <QtTest>
22#include <QtTest>
24#include <QDebug>
23#include <QDebug>
tests/plugins/Unity/Indicators/unitymenumodelstacktest.cpp−1
@@ -18,7 +18,6 @@
18 */
18 */
19
19
20#include "indicatorsmanager.h"
20#include "indicatorsmanager.h"
21−#include "paths.h"
22#include "unitymenumodelstack.h"
21#include "unitymenumodelstack.h"
23
22
24#include <QtTest>
23#include <QtTest>
tests/plugins/Utils/CMakeLists.txt+1
@@ -24,4 +24,5 @@ endmacro(run_tests)
24run_tests(
24run_tests(
25 qlimitproxymodeltest
25 qlimitproxymodeltest
26 qsortfilterproxymodeltest
26 qsortfilterproxymodeltest
27+ timeformattertest
27 )
28 )
tests/plugins/Unity/Indicators/timeformattertest.cpp → tests/plugins/Utils/timeformattertest.cpprenamed+13
@@ -48,6 +48,19 @@ private Q_SLOTS:
48
48
49 QCOMPARE(formatter.timeString(), time.toString(format));
49 QCOMPARE(formatter.timeString(), time.toString(format));
50 }
50 }
51+
52+ void testFormatStrF()
53+ {
54+ const QString format = "%d-%m-%Y %I:%M%p";
55+
56+ QDateTime time = QDateTime::currentDateTime();
57+
58+ GDateTimeFormatter formatter;
59+ formatter.setTime(time.toMSecsSinceEpoch() / 1000); // strftime in seconds since epoc
60+ formatter.setFormat(format);
61+
62+ QCOMPARE(formatter.timeString(), time.toString("dd-MM-yyyy hh:mmAP"));
63+ }
51};
64};
52
65
53QTEST_GUILESS_MAIN(TimeFormatterTest)
66QTEST_GUILESS_MAIN(TimeFormatterTest)
tests/qmltests/CMakeLists.txt+4−1
@@ -46,9 +46,12 @@ add_qml_test(Dash GenericPreview)
46add_qml_test(Dash GenericScopeView IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
46add_qml_test(Dash GenericScopeView IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
47add_qml_test(Dash FilterGrids IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins ${CMAKE_CURRENT_SOURCE_DIR}/plugins
47add_qml_test(Dash FilterGrids IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins ${CMAKE_CURRENT_SOURCE_DIR}/plugins
48 ${CMAKE_BINARY_DIR}/tests/mocks)
48 ${CMAKE_BINARY_DIR}/tests/mocks)
49−add_qml_test(Dash/Apps RunningApplicationsGrid IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
49+add_qml_test(Dash/Apps RunningApplicationsGrid IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS}
50+ ${CMAKE_BINARY_DIR}/tests/mocks
51+ ${CMAKE_BINARY_DIR}/plugins)
50add_qml_test(Dash/Apps AppPreview IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
52add_qml_test(Dash/Apps AppPreview IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
51add_qml_test(Dash/Movie MoviePreview IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
53add_qml_test(Dash/Movie MoviePreview IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
54+add_qml_test(Dash/Music MusicPreview IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
52add_qml_test(Greeter Lockscreen IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS}
55add_qml_test(Greeter Lockscreen IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS}
53 PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full")
56 PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full")
54add_qml_test(Greeter Tablet IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS}
57add_qml_test(Greeter Tablet IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS}
tests/qmltests/Components/CMakeLists.txt+1
@@ -3,6 +3,7 @@
3include_directories(
3include_directories(
4 ${CMAKE_SOURCE_DIR}/plugins/Ubuntu/Gestures
4 ${CMAKE_SOURCE_DIR}/plugins/Ubuntu/Gestures
5 ${CMAKE_CURRENT_BINARY_DIR}
5 ${CMAKE_CURRENT_BINARY_DIR}
6+ ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
6 )
7 )
7
8
8set(testCommand
9set(testCommand
tests/qmltests/Components/RevealingRectangle.qml+1−1
@@ -16,7 +16,7 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import Ubuntu.Components 0.1
18import Ubuntu.Components 0.1
19−import "../../../Components"
19+import "../../../qml/Components"
20
20
21Item {
21Item {
22 id: revealingRectangle
22 id: revealingRectangle
tests/qmltests/Components/tst_AnimationControllerWithSignals.qml+1−1
@@ -16,7 +16,7 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19−import "../../../Components"
19+import "../../../qml/Components"
20
20
21TestCase {
21TestCase {
22 id: testCase
22 id: testCase
tests/qmltests/Components/tst_Carousel.qml+1−1
@@ -16,7 +16,7 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19−import "../../../Components/carousel.js" as Carousel
19+import "../../../qml/Components/carousel.js" as Carousel
20
20
21TestCase {
21TestCase {
22 id: root
22 id: root
tests/qmltests/Components/tst_DragHandle.qml+1−1
@@ -15,7 +15,7 @@
15 */
15 */
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18−import "../../../Components"
18+import "../../../qml/Components"
19import "tst_DragHandle"
19import "tst_DragHandle"
20import Ubuntu.Components 0.1
20import Ubuntu.Components 0.1
21import Ubuntu.Gestures 0.1
21import Ubuntu.Gestures 0.1
tests/qmltests/Components/tst_DragHandle/HorizontalShowable.qml+1−1
@@ -15,7 +15,7 @@
15 */
15 */
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18−import "../../../../Components"
18+import "../../../../qml/Components"
19import Ubuntu.Components 0.1
19import Ubuntu.Components 0.1
20import Ubuntu.Gestures 0.1
20import Ubuntu.Gestures 0.1
21
21
tests/qmltests/Components/tst_DragHandle/VerticalShowable.qml+1−1
@@ -15,7 +15,7 @@
15 */
15 */
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18−import "../../../../Components"
18+import "../../../../qml/Components"
19import Ubuntu.Components 0.1
19import Ubuntu.Components 0.1
20import Ubuntu.Gestures 0.1
20import Ubuntu.Gestures 0.1
21
21
tests/qmltests/Components/tst_DraggingArea.qml+1−1
@@ -16,7 +16,7 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19−import "../../../Components"
19+import "../../../qml/Components"
20
20
21/*
21/*
22 There will be a green rectangle in the center of the
22 There will be a green rectangle in the center of the
tests/qmltests/Components/tst_EdgeDemoOverlay.qml+1−1
@@ -17,7 +17,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import Unity.Test 0.1 as UT
19import Unity.Test 0.1 as UT
20−import "../../../Components"
20+import "../../../qml/Components"
21
21
22Item {
22Item {
23 id: root
23 id: root
tests/qmltests/Components/tst_FilterGrid.qml+1−1
@@ -16,7 +16,7 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19−import "../../../Components"
19+import "../../../qml/Components"
20import Ubuntu.Components.ListItems 0.1 as ListItem
20import Ubuntu.Components.ListItems 0.1 as ListItem
21import Ubuntu.Components 0.1
21import Ubuntu.Components 0.1
22import Unity.Test 0.1 as UT
22import Unity.Test 0.1 as UT
tests/qmltests/Components/tst_LazyImage.qml+1−1
@@ -16,7 +16,7 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19−import "../../../Components"
19+import "../../../qml/Components"
20import Ubuntu.Components 0.1
20import Ubuntu.Components 0.1
21import Unity.Test 0.1 as UT
21import Unity.Test 0.1 as UT
22import "tst_LazyImage"
22import "tst_LazyImage"
tests/qmltests/Components/tst_LazyImage/ImageControls.qml+1−1
@@ -16,7 +16,7 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import Ubuntu.Components 0.1
18import Ubuntu.Components 0.1
19−import "../../../../Components"
19+import "../../../../qml/Components"
20
20
21Row {
21Row {
22 property LazyImage image
22 property LazyImage image
tests/qmltests/Components/tst_OpenEffect.qml+1−1
@@ -16,7 +16,7 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19−import "../../../Components"
19+import "../../../qml/Components"
20
20
21TestCase {
21TestCase {
22 name: "OpenEffectTest"
22 name: "OpenEffectTest"
tests/qmltests/Components/tst_PageHeader.qml+1−1
@@ -17,7 +17,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import ".."
19import ".."
20−import "../../../Components"
20+import "../../../qml/Components"
21import Ubuntu.Components 0.1
21import Ubuntu.Components 0.1
22import Unity 0.1
22import Unity 0.1
23import Unity.Test 0.1 as UT
23import Unity.Test 0.1 as UT
tests/qmltests/Components/tst_RatingStars.qml+1−1
@@ -16,7 +16,7 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19−import "../../../Components"
19+import "../../../qml/Components"
20
20
21TestCase {
21TestCase {
22 name: "RatingStars"
22 name: "RatingStars"
tests/qmltests/Components/tst_ResponsiveFlowView.qml+1−1
@@ -17,7 +17,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import ".."
19import ".."
20−import "../../../Components"
20+import "../../../qml/Components"
21import Ubuntu.Components.ListItems 0.1 as ListItem
21import Ubuntu.Components.ListItems 0.1 as ListItem
22import Ubuntu.Components 0.1
22import Ubuntu.Components 0.1
23import Unity.Test 0.1 as UT
23import Unity.Test 0.1 as UT
tests/qmltests/Components/tst_ResponsiveGridView.qml+1−1
@@ -17,7 +17,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import ".."
19import ".."
20−import "../../../Components"
20+import "../../../qml/Components"
21import Ubuntu.Components.ListItems 0.1 as ListItem
21import Ubuntu.Components.ListItems 0.1 as ListItem
22import Ubuntu.Components 0.1
22import Ubuntu.Components 0.1
23import Unity.Test 0.1 as UT
23import Unity.Test 0.1 as UT
tests/qmltests/Components/tst_Showable.qml+1−1
@@ -19,7 +19,7 @@ import QtTest 1.0
19import Ubuntu.Components 0.1
19import Ubuntu.Components 0.1
20import Unity.Test 0.1 as UT
20import Unity.Test 0.1 as UT
21import ".."
21import ".."
22−import "../../../Components"
22+import "../../../qml/Components"
23
23
24/*
24/*
25 There will be 3 stacked rectangles, red, green & blue. Initially they
25 There will be 3 stacked rectangles, red, green & blue. Initially they
tests/qmltests/Components/tst_Stage.qml+1−1
@@ -17,7 +17,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import ".."
19import ".."
20−import "../../../Components"
20+import "../../../qml/Components"
21import Unity.Application 0.1
21import Unity.Application 0.1
22import Ubuntu.Components 0.1
22import Ubuntu.Components 0.1
23import Unity.Test 0.1 as UT
23import Unity.Test 0.1 as UT
tests/qmltests/Components/tst_Tile.qml+1−1
@@ -17,7 +17,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import ".."
19import ".."
20−import "../../../Components"
20+import "../../../qml/Components"
21import Ubuntu.Components 0.1
21import Ubuntu.Components 0.1
22import Unity.Test 0.1 as UT
22import Unity.Test 0.1 as UT
23
23
tests/qmltests/Dash/Apps/tst_AppPreview.qml+1−1
@@ -17,7 +17,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import Ubuntu.Components 0.1
19import Ubuntu.Components 0.1
20−import "../../../../Dash/Apps"
20+import "../../../../qml/Dash/Apps"
21import Unity.Test 0.1 as UT
21import Unity.Test 0.1 as UT
22
22
23Item {
23Item {
tests/qmltests/Dash/Apps/tst_RunningApplicationsGrid.qml+21−1
@@ -16,7 +16,7 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19−import "../../../../Dash/Apps"
19+import "../../../../qml/Dash/Apps"
20import Unity.Test 0.1 as UT
20import Unity.Test 0.1 as UT
21
21
22Item {
22Item {
@@ -239,5 +239,25 @@ Item {
239 return findChild(runningApplicationsGrid, "runningAppTile Calendar")
239 return findChild(runningApplicationsGrid, "runningAppTile Calendar")
240 != undefined
240 != undefined
241 }
241 }
242+
243+ // While in termination mode, if you click outside any of the tiles, the
244+ // termination mode is disabled (i.e. we switch back to activation mode).
245+ function test_clickOutsideTilesDisablesTerminationMode() {
246+ runningApplicationsGrid.terminationModeEnabled = true
247+
248+ var calendarTile = findChild(runningApplicationsGrid, "runningAppTile Calendar")
249+ verify(calendarTile != undefined)
250+
251+ verify(runningApplicationsGrid.terminationModeEnabled);
252+
253+ // Click on the bottom right corner of the grid, where there's no
254+ // RunningApplicationTile lying around
255+ mouseClick(runningApplicationsGrid,
256+ runningApplicationsGrid.width - 1, runningApplicationsGrid.height - 1);
257+
258+ wait(0) // spin event loop to ensure that any pending signal emission went through
259+
260+ verify(!runningApplicationsGrid.terminationModeEnabled);
261+ }
242 }
262 }
243}
263}
tests/qmltests/Dash/Movie/tst_MoviePreview.qml+1−1
@@ -16,7 +16,7 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19−import "../../../../Dash/Movie"
19+import "../../../../qml/Dash/Movie"
20import Unity.Test 0.1 as UT
20import Unity.Test 0.1 as UT
21
21
22Item {
22Item {
tests/qmltests/Dash/Music/tst_MusicPreview.qmlnew file+174
@@ -0,0 +1,174 @@
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 General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+import QtTest 1.0
19+import "../../../../qml/Dash/Music"
20+import Unity.Test 0.1 as UT
21+import QtMultimedia 5.0
22+
23+Rectangle {
24+ id: root
25+ width: units.gu(60)
26+ height: units.gu(80)
27+ color: "lightgrey"
28+
29+ MusicPreview {
30+ id: musicPreview
31+ anchors.fill: parent
32+ isCurrent: true
33+
34+ previewData: QtObject {
35+ property string rendererName: "preview-music"
36+ property string title: "Music Preview"
37+ property string subtitle: "Subtitle"
38+ property string description: "This is the description"
39+ property string image: "../../tests/qmltests/Components/tst_LazyImage/square.png"
40+ property var actions: [
41+ { id: 123, displayName: "Play"},
42+ { id: 456, displayName: "Show in folder"}
43+ ]
44+ property var tracks: tracksModel2
45+ }
46+ }
47+
48+ ListModel {
49+ id: tracksModel0
50+ }
51+ ListModel {
52+ id: tracksModel1
53+ ListElement { uri: "../../tests/qmltests/Dash/Music/data/testsound1.ogg"; trackNo: 1; title: "Some track name"; length: "0:30"}
54+ }
55+ ListModel {
56+ id: tracksModel2
57+ ListElement { uri: "../../tests/qmltests/Dash/Music/data/testsound1.ogg"; trackNo: 1; title: "Some track name"; length: "0:30"}
58+ ListElement { uri: "../../tests/qmltests/Dash/Music/data/testsound1.ogg"; trackNo: 2; title: "Some track name"; length: "0:30"}
59+ ListElement { uri: "../../tests/qmltests/Dash/Music/data/testsound2.ogg"; trackNo: 3; title: "Some other track name"; length: "1:23"}
60+ ListElement { uri: "../../tests/qmltests/Dash/Music/data/testsound3.ogg"; trackNo: 4; title: "And another one"; length: "123:45"}
61+ }
62+
63+ UT.UnityTestCase {
64+ name: "MusicPreviewTest"
65+ when: windowShown
66+
67+ function init() {
68+ waitForRendering(musicPreview);
69+ }
70+
71+ function test_tracks_data() {
72+ return [
73+ {tag: "0 tracks", tracksModel: tracksModel0, dividerVisible: false},
74+ {tag: "1 track", tracksModel: tracksModel1, dividerVisible: true},
75+ {tag: "4 track", tracksModel: tracksModel2, dividerVisible: true}
76+ ];
77+ }
78+
79+ function test_tracks(data) {
80+ musicPreview.previewData.tracks = data.tracksModel;
81+ waitForRendering(musicPreview);
82+
83+ var trackRepeater = findChild(musicPreview, "trackRepeater");
84+ compare(trackRepeater.count, data.tracksModel.count)
85+
86+ var topDivider = findChild(musicPreview, "topDivider");
87+ compare(topDivider.visible, data.dividerVisible);
88+
89+ for (var i = 0; i < data.tracksModel.count; ++i) {
90+ var trackItem = findChild(musicPreview, "trackItem" + i);
91+ var titleLabel = findChild(trackItem, "trackTitleLabel");
92+ compare(titleLabel.text, data.tracksModel.get(i).title)
93+ var timeLabel = findChild(trackItem, "timeLabel");
94+ compare(timeLabel.text, data.tracksModel.get(i).length)
95+ }
96+ }
97+
98+ function checkPlayerUri(index) {
99+ var modelFilename = musicPreview.previewData.tracks.get(index).uri.replace(/^.*[\\\/]/, '');
100+ var playerFilename = findInvisibleChild(musicPreview, "audioPlayer").source.toString().replace(/^.*[\\\/]/, '');
101+
102+ compare(modelFilename, playerFilename, "Player source is not set correctly.");
103+ }
104+
105+ function test_playback() {
106+ musicPreview.previewData.tracks = tracksModel2;
107+ waitForRendering(musicPreview);
108+
109+ var track0Item = findChild(musicPreview, "trackItem0");
110+ var track1Item = findChild(musicPreview, "trackItem1");
111+ var track2Item = findChild(musicPreview, "trackItem2");
112+
113+ var track0ProgressBar = findChild(track0Item, "progressBarFill");
114+ var track1ProgressBar = findChild(track1Item, "progressBarFill");
115+ var track2ProgressBar = findChild(track2Item, "progressBarFill");
116+
117+ var track0PlayButton = findChild(track0Item, "playButton");
118+ var track1PlayButton = findChild(track1Item, "playButton");
119+ var track2PlayButton = findChild(track2Item, "playButton");
120+
121+ var audioPlayer = findInvisibleChild(musicPreview, "audioPlayer");
122+
123+ // All progress bars must be hidden in the beginning
124+ compare(track0ProgressBar.visible, false);
125+ compare(track1ProgressBar.visible, false);
126+ compare(track2ProgressBar.visible, false);
127+
128+ // Playing track 0 should make progress bar 0 visible
129+ mouseClick(track0PlayButton, track0PlayButton.width / 2, track0PlayButton.height / 2);
130+
131+ tryCompare(audioPlayer, "playbackState", Audio.PlayingState);
132+ checkPlayerUri(0);
133+
134+ tryCompare(track0ProgressBar, "visible", true);
135+ tryCompare(track1ProgressBar, "visible", false);
136+ tryCompare(track2ProgressBar, "visible", false);
137+
138+ // Clicking the button again should pause it. The progress bar should stay visible
139+ mouseClick(track0PlayButton, track0PlayButton.width / 2, track0PlayButton.height / 2);
140+ tryCompare(audioPlayer, "playbackState", Audio.PausedState);
141+ checkPlayerUri(0);
142+ tryCompare(track0ProgressBar, "visible", true);
143+
144+ // Continue playback
145+ mouseClick(track0PlayButton, track0PlayButton.width / 2, track0PlayButton.height / 2);
146+ tryCompare(audioPlayer, "playbackState", Audio.PlayingState);
147+ checkPlayerUri(0);
148+
149+ // Playing track 1 should make progress bar 1 visible and hide progress bar 0 again
150+ mouseClick(track1PlayButton, track1PlayButton.width / 2, track1PlayButton.height / 2);
151+
152+ tryCompare(audioPlayer, "playbackState", Audio.PlayingState);
153+ checkPlayerUri(1);
154+
155+ tryCompare(track0ProgressBar, "visible", false);
156+ tryCompare(track1ProgressBar, "visible", true);
157+ tryCompare(track2ProgressBar, "visible", false);
158+
159+ // Playing track 2 should make progress bar 1 visible and hide progress bar 0 again
160+ mouseClick(track2PlayButton, track2PlayButton.width / 2, track2PlayButton.height / 2);
161+
162+ tryCompare(audioPlayer, "playbackState", Audio.PlayingState);
163+ checkPlayerUri(2);
164+
165+ tryCompare(track0ProgressBar, "visible", false);
166+ tryCompare(track1ProgressBar, "visible", false);
167+ tryCompare(track2ProgressBar, "visible", true);
168+
169+ // Switching away from this preview should make all players shut up!
170+ musicPreview.isCurrent = false
171+ tryCompare(audioPlayer, "playbackState", Audio.StoppedState);
172+ }
173+ }
174+}
tests/qmltests/Dash/qml/FakeScopeView.qml+1−1
@@ -17,7 +17,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import Unity 0.1
18import Unity 0.1
19
19
20−import "../../../../Dash"
20+import "../../../../qml/Dash"
21
21
22GenericScopeView {
22GenericScopeView {
23 id: fakeScopeView
23 id: fakeScopeView
tests/qmltests/Dash/tst_Dash.qml+6−6
@@ -16,7 +16,7 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19−import "../../../Dash"
19+import "../../../qml/Dash"
20import Ubuntu.Components 0.1
20import Ubuntu.Components 0.1
21import Unity.Test 0.1 as UT
21import Unity.Test 0.1 as UT
22
22
@@ -36,12 +36,12 @@ Item {
36 ScopeDelegateMapper {
36 ScopeDelegateMapper {
37 id: scopeDelegateMapper
37 id: scopeDelegateMapper
38 scopeDelegateMapping: {
38 scopeDelegateMapping: {
39− "MockScope1": "../tests/qmltests/Dash/qml/fake_scopeView1.qml",
39+ "MockScope1": Qt.resolvedUrl("qml/fake_scopeView1.qml"),
40− "MockScope2": "../tests/qmltests/Dash/qml/fake_scopeView2.qml",
40+ "MockScope2": Qt.resolvedUrl("qml/fake_scopeView2.qml"),
41− "home.scope": "../tests/qmltests/Dash/qml/fake_scopeView3.qml",
41+ "home.scope": Qt.resolvedUrl("qml/fake_scopeView3.qml"),
42− "applications.scope": "../tests/qmltests/Dash/qml/fake_scopeView4.qml"
42+ "applications.scope": Qt.resolvedUrl("qml/fake_scopeView4.qml")
43 }
43 }
44− genericScope: "../tests/qmltests/Dash/qml/fake_generic_scopeView.qml"
44+ genericScope: Qt.resolvedUrl("qml/fake_generic_scopeView.qml")
45 }
45 }
46
46
47 UT.UnityTestCase {
47 UT.UnityTestCase {
tests/qmltests/Dash/tst_DashBar.qml+1−1
@@ -18,7 +18,7 @@ import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import Unity 0.1
19import Unity 0.1
20import ".."
20import ".."
21−import "../../../Dash"
21+import "../../../qml/Dash"
22import Ubuntu.Components 0.1
22import Ubuntu.Components 0.1
23import Unity.Test 0.1 as UT
23import Unity.Test 0.1 as UT
24
24
tests/qmltests/Dash/tst_DashContent.qml+33−6
@@ -16,7 +16,7 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19−import "../../../Dash"
19+import "../../../qml/Dash"
20import Ubuntu.Components 0.1
20import Ubuntu.Components 0.1
21import Unity 0.1
21import Unity 0.1
22import Unity.Test 0.1 as UT
22import Unity.Test 0.1 as UT
@@ -64,12 +64,12 @@ Item {
64 ScopeDelegateMapper {
64 ScopeDelegateMapper {
65 id: scopeDelegateMapper
65 id: scopeDelegateMapper
66 scopeDelegateMapping: {
66 scopeDelegateMapping: {
67− "MockScope1": "../tests/qmltests/Dash/qml/fake_scopeView1.qml",
67+ "MockScope1": Qt.resolvedUrl("qml/fake_scopeView1.qml"),
68− "MockScope2": "../tests/qmltests/Dash/qml/fake_scopeView2.qml",
68+ "MockScope2": Qt.resolvedUrl("qml/fake_scopeView2.qml"),
69− "home.scope": "../tests/qmltests/Dash/qml/fake_scopeView3.qml",
69+ "home.scope": Qt.resolvedUrl("qml/fake_scopeView3.qml"),
70− "applications.scope": "../tests/qmltests/Dash/qml/fake_scopeView4.qml"
70+ "applications.scope": Qt.resolvedUrl("qml/fake_scopeView4.qml")
71 }
71 }
72− genericScope: "../tests/qmltests/Dash/qml/fake_generic_scopeView.qml"
72+ genericScope: Qt.resolvedUrl("qml/fake_generic_scopeView.qml")
73 }
73 }
74
74
75 function clear_scope_status() {
75 function clear_scope_status() {
@@ -127,6 +127,33 @@ Item {
127 scopesModel.clear();
127 scopesModel.clear();
128 // wait for dash to empty scopes.
128 // wait for dash to empty scopes.
129 tryCompare(dashContentList, "count", 0);
129 tryCompare(dashContentList, "count", 0);
130+ // this is the default state for empty model
131+ dashContentList.currentIndex = -1;
132+ }
133+
134+ function test_current_index() {
135+ var dashContentList = findChild(dashContent, "dashContentList");
136+ verify(dashContentList != undefined)
137+
138+ compare(dashContentList.count, 0, "DashContent should have 0 items when it starts");
139+ compare(dashContentList.currentIndex, -1, "DashContent's currentIndex should be -1 while there have been no items in the model");
140+
141+ tryCompare(scopeLoadedSpy, "count", 5);
142+
143+ verify(dashContentList.currentIndex >= 0);
144+ }
145+
146+ function test_current_index_after_reset() {
147+ var dashContentList = findChild(dashContent, "dashContentList");
148+ verify(dashContentList != undefined)
149+
150+ compare(dashContentList.count, 0, "DashContent should have 0 items when it starts");
151+ // pretend we're running after a model reset
152+ dashContentList.currentIndex = 27;
153+
154+ tryCompare(scopeLoadedSpy, "count", 5);
155+
156+ verify(dashContentList.currentIndex >= 0 && dashContentList.currentIndex < 5);
130 }
157 }
131
158
132 function test_movement_started_signal() {
159 function test_movement_started_signal() {
tests/qmltests/Dash/tst_DashPreview.qml+1−1
@@ -17,7 +17,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import ".."
19import ".."
20−import "../../../Dash"
20+import "../../../qml/Dash"
21import Ubuntu.Components 0.1
21import Ubuntu.Components 0.1
22import Unity.Test 0.1 as UT
22import Unity.Test 0.1 as UT
23
23
tests/qmltests/Dash/tst_FilterGrids.qml+3−3
@@ -16,7 +16,7 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19−import "../../../Dash/Video"
19+import "../../../qml/Dash/Video"
20import Ubuntu.Components.ListItems 0.1 as ListItem
20import Ubuntu.Components.ListItems 0.1 as ListItem
21import Ubuntu.Components 0.1
21import Ubuntu.Components 0.1
22import Unity.Test 0.1 as UT
22import Unity.Test 0.1 as UT
@@ -46,7 +46,7 @@ Rectangle {
46 Button {
46 Button {
47 anchors {left: parent.left; right: parent.right; margins: units.gu(1) }
47 anchors {left: parent.left; right: parent.right; margins: units.gu(1) }
48 text: testCase.test_clicked_signal_data()[index].tag
48 text: testCase.test_clicked_signal_data()[index].tag
49− onClicked: gridLoader.source = "../../../Dash/" + testCase.test_clicked_signal_data()[index].component
49+ onClicked: gridLoader.source = "../../../qml/Dash/" + testCase.test_clicked_signal_data()[index].component
50 }
50 }
51 }
51 }
52 }
52 }
@@ -114,7 +114,7 @@ Rectangle {
114
114
115 function test_clicked_signal(data) {
115 function test_clicked_signal(data) {
116 gridLoader.source = "";
116 gridLoader.source = "";
117− gridLoader.source = "../../../Dash/" + data.component;
117+ gridLoader.source = "../../../qml/Dash/" + data.component;
118
118
119 // Wait until the FilterGrid is loaded by the loader
119 // Wait until the FilterGrid is loaded by the loader
120 tryCompare(gridLoader, "status", Loader.Ready);
120 tryCompare(gridLoader, "status", Loader.Ready);
tests/qmltests/Dash/tst_GenericPreview.qml+1−1
@@ -16,7 +16,7 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19−import "../../../Dash/Generic"
19+import "../../../qml/Dash/Generic"
20import Unity.Test 0.1 as UT
20import Unity.Test 0.1 as UT
21
21
22Item {
22Item {
tests/qmltests/Dash/tst_GenericScopeView.qml+98−4
@@ -18,7 +18,8 @@ import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import Unity 0.1
19import Unity 0.1
20import ".."
20import ".."
21−import "../../../Dash"
21+import "../../../qml/Dash"
22+import "../../../qml/Components"
22import Ubuntu.Components 0.1
23import Ubuntu.Components 0.1
23import Unity.Test 0.1 as UT
24import Unity.Test 0.1 as UT
24
25
@@ -43,6 +44,7 @@ Item {
43 GenericScopeView {
44 GenericScopeView {
44 id: genericScopeView
45 id: genericScopeView
45 anchors.fill: parent
46 anchors.fill: parent
47+ searchHistory: SearchHistoryModel {}
46
48
47 UT.UnityTestCase {
49 UT.UnityTestCase {
48 name: "GenericScopeView"
50 name: "GenericScopeView"
@@ -77,14 +79,14 @@ Item {
77 var categoryListView = findChild(genericScopeView, "categoryListView");
79 var categoryListView = findChild(genericScopeView, "categoryListView");
78 categoryListView.positionAtBeginning();
80 categoryListView.positionAtBeginning();
79
81
80− var tile = findChild(genericScopeView, "delegate0");
82+ var tile = findChild(findChild(genericScopeView, "0"), "delegate0");
81 mouseClick(tile, tile.width / 2, tile.height / 2);
83 mouseClick(tile, tile.width / 2, tile.height / 2);
82 var openEffect = findChild(genericScopeView, "openEffect");
84 var openEffect = findChild(genericScopeView, "openEffect");
83 tryCompare(openEffect, "gap", 1);
85 tryCompare(openEffect, "gap", 1);
84 }
86 }
85
87
86 function checkArrowPosition(index) {
88 function checkArrowPosition(index) {
87− var tile = findChild(genericScopeView, "delegate" + index);
89+ var tile = findChild(findChild(genericScopeView, "0"), "delegate" + index);
88 var tileCenter = tile.x + tile.width/2;
90 var tileCenter = tile.x + tile.width/2;
89 var pointerArrow = findChild(genericScopeView, "pointerArrow");
91 var pointerArrow = findChild(genericScopeView, "pointerArrow");
90 var pointerArrowCenter = pointerArrow.x + pointerArrow.width/2;
92 var pointerArrowCenter = pointerArrow.x + pointerArrow.width/2;
@@ -139,7 +141,7 @@ Item {
139 categoryListView.flick(0, -units.gu(80));
141 categoryListView.flick(0, -units.gu(80));
140 tryCompare(categoryListView.flicking, false);
142 tryCompare(categoryListView.flicking, false);
141
143
142− var tile = findChild(genericScopeView, "delegate0");
144+ var tile = findChild(findChild(genericScopeView, "0"), "delegate0");
143 mouseClick(tile, tile.width / 2, tile.height - 1);
145 mouseClick(tile, tile.width / 2, tile.height - 1);
144 var openEffect = findChild(genericScopeView, "openEffect");
146 var openEffect = findChild(genericScopeView, "openEffect");
145 tryCompare(openEffect, "gap", 1);
147 tryCompare(openEffect, "gap", 1);
@@ -186,8 +188,18 @@ Item {
186 true);
188 true);
187 tryCompare(nextPreviewItem, "progress", 1);
189 tryCompare(nextPreviewItem, "progress", 1);
188 waitForRendering(nextPreviewItem);
190 waitForRendering(nextPreviewItem);
191+ tryCompareFunction(function() {return nextPreviewItem.item !== null}, true);
189
192
190 checkArrowPosition(i);
193 checkArrowPosition(i);
194+
195+ // Make sure only the new one has isCurrent set to true
196+ compare(nextPreviewItem.item.isCurrent, true);
197+
198+ if (currentPreviewItem.item !== undefined && currentPreviewItem.item !== null) {
199+ compare(currentPreviewItem.item.isCurrent, false);
200+ }
201+
202+ currentPreviewItem = nextPreviewItem;
191 }
203 }
192 closePreview();
204 closePreview();
193 }
205 }
@@ -212,6 +224,88 @@ Item {
212 genericScopeView.scope = scopes.get(0)
224 genericScopeView.scope = scopes.get(0)
213 tryCompare(genericScopeView.scope, "searchQuery", "")
225 tryCompare(genericScopeView.scope, "searchQuery", "")
214 }
226 }
227+
228+ function test_filter_expand_collapse() {
229+ // wait for the item to be there
230+ tryCompareFunction(function() { return findChild(genericScopeView, "dashSectionHeader0") != undefined; }, true);
231+
232+ var header = findChild(genericScopeView, "dashSectionHeader0")
233+ var category = findChild(genericScopeView, "dashCategory0")
234+
235+ waitForRendering(header);
236+ verify(category.expandable);
237+ verify(category.filtered);
238+
239+ var initialHeight = category.height;
240+ var middleHeight;
241+ mouseClick(header, header.width / 2, header.height / 2);
242+ tryCompareFunction(function() { middleHeight = category.height; return category.height > initialHeight; }, true);
243+ tryCompare(category, "filtered", false);
244+ verify(category.height > middleHeight);
245+
246+ mouseClick(header, header.width / 2, header.height / 2);
247+ verify(category.expandable);
248+ tryCompare(category, "filtered", true);
249+ }
250+
251+ function test_showPreviewCarousel() {
252+ tryCompareFunction(function() { return findChild(genericScopeView, "carouselDelegate") != undefined; }, true);
253+ var tile = findChild(genericScopeView, "carouselDelegate");
254+ mouseClick(tile, tile.width / 2, tile.height / 2);
255+ var openEffect = findChild(genericScopeView, "openEffect");
256+ tryCompare(openEffect, "gap", 1);
257+
258+ // check for it opening successfully
259+ var previewListView = findChild(genericScopeView, "previewListView");
260+ var currentPreviewItem = findChild(genericScopeView, "previewLoader0");
261+ tryCompareFunction(function() {
262+ var parts = currentPreviewItem.source.toString().split("/");
263+ var name = parts[parts.length - 1];
264+ return name == "DashPreviewPlaceholder.qml";
265+ },
266+ true);
267+ tryCompareFunction(function() {
268+ var parts = currentPreviewItem.source.toString().split("/");
269+ var name = parts[parts.length - 1];
270+ return name == "GenericPreview.qml";
271+ },
272+ true);
273+ tryCompare(currentPreviewItem, "progress", 1);
274+ tryCompare(previewListView, "open", true);
275+
276+ closePreview();
277+ tryCompare(previewListView, "open", false);
278+ }
279+
280+ function test_filter_expand_expand() {
281+ // wait for the item to be there
282+ tryCompareFunction(function() { return findChild(genericScopeView, "dashSectionHeader2") != undefined; }, true);
283+
284+ var categoryListView = findChild(genericScopeView, "categoryListView");
285+ categoryListView.contentY = categoryListView.height;
286+
287+ var header2 = findChild(genericScopeView, "dashSectionHeader2")
288+ var category2 = findChild(genericScopeView, "dashCategory2")
289+ var category2FilterGrid = category2.children[0].children[0].children[0];
290+ verify(UT.Util.isInstanceOf(category2FilterGrid, "FilterGrid"));
291+
292+ waitForRendering(header2);
293+ verify(category2.expandable);
294+ verify(category2.filtered);
295+
296+ mouseClick(header2, header2.width / 2, header2.height / 2);
297+ tryCompare(category2, "filtered", false);
298+ tryCompare(category2FilterGrid, "filter", false);
299+
300+ categoryListView.positionAtBeginning();
301+
302+ var header0 = findChild(genericScopeView, "dashSectionHeader0")
303+ var category0 = findChild(genericScopeView, "dashCategory0")
304+ mouseClick(header0, header0.width / 2, header0.height / 2);
305+ tryCompare(category0, "filtered", false);
306+ tryCompare(category2, "filtered", true);
307+ tryCompare(category2FilterGrid, "filter", true);
308+ }
215 }
309 }
216 }
310 }
217}
311}
tests/qmltests/Greeter/tst_Clock.qml+1−1
@@ -17,7 +17,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import ".."
19import ".."
20−import "../../../Greeter"
20+import "../../../qml/Greeter"
21import Ubuntu.Components 0.1
21import Ubuntu.Components 0.1
22import QMenuModel 0.1
22import QMenuModel 0.1
23import Unity.Test 0.1 as UT
23import Unity.Test 0.1 as UT
tests/qmltests/Greeter/tst_Infographics.qml+1−1
@@ -17,7 +17,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import ".."
19import ".."
20−import "../../../Greeter"
20+import "../../../qml/Greeter"
21import Ubuntu.Components 0.1
21import Ubuntu.Components 0.1
22import Unity.Test 0.1 as UT
22import Unity.Test 0.1 as UT
23import LightDM 0.1 as LightDM
23import LightDM 0.1 as LightDM
tests/qmltests/Greeter/tst_Lockscreen.qml+1−1
@@ -17,7 +17,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import ".."
19import ".."
20−import "../../../Greeter"
20+import "../../../qml/Greeter"
21import Ubuntu.Components 0.1
21import Ubuntu.Components 0.1
22import LightDM 0.1 as LightDM
22import LightDM 0.1 as LightDM
23import Unity.Test 0.1 as UT
23import Unity.Test 0.1 as UT
tests/qmltests/Greeter/tst_Phone.qml+4−4
@@ -17,7 +17,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import ".."
19import ".."
20−import "../../../Greeter"
20+import "../../../qml/Greeter"
21import AccountsService 0.1
21import AccountsService 0.1
22import LightDM 0.1 as LightDM
22import LightDM 0.1 as LightDM
23import Ubuntu.Components 0.1
23import Ubuntu.Components 0.1
@@ -33,7 +33,7 @@ Item {
33 height: parent.height
33 height: parent.height
34 x: 0; y: 0
34 x: 0; y: 0
35
35
36− defaultBackground: "../../../graphics/phone_background.jpg"
36+ defaultBackground: Qt.resolvedUrl("../../../qml/graphics/phone_background.jpg")
37
37
38 property int minX: 0
38 property int minX: 0
39
39
@@ -103,7 +103,7 @@ Item {
103 mouseClick(greeter, greeter.width - units.gu(5), greeter.height - units.gu(1));
103 mouseClick(greeter, greeter.width - units.gu(5), greeter.height - units.gu(1));
104 greeter.minX = 0; // This is needed because the transition actually makes x jump once before animating
104 greeter.minX = 0; // This is needed because the transition actually makes x jump once before animating
105
105
106− if (!data.locked && !data.moved) {
106+ if (!data.moved) {
107 // Check if it has been moved over by 2 GUs. Give it a 2 pixel grace area
107 // Check if it has been moved over by 2 GUs. Give it a 2 pixel grace area
108 // because animation duration and teaseTimer are the same duration and
108 // because animation duration and teaseTimer are the same duration and
109 // might cause slight offsets
109 // might cause slight offsets
@@ -135,7 +135,7 @@ Item {
135
135
136 function test_background_data() {
136 function test_background_data() {
137 return [
137 return [
138− {tag: "set", accounts: "../tests/data/unity/backgrounds/blue.png", expected: "blue.png"},
138+ {tag: "set", accounts: Qt.resolvedUrl("../../data/unity/backgrounds/blue.png"), expected: "blue.png"},
139 {tag: "unset", accounts: "", expected: "background.jpg"},
139 {tag: "unset", accounts: "", expected: "background.jpg"},
140 {tag: "invalid", accounts: "invalid", expected: "background.jpg"},
140 {tag: "invalid", accounts: "invalid", expected: "background.jpg"},
141 ]
141 ]
tests/qmltests/Greeter/tst_Tablet.qml+12−1
@@ -17,7 +17,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import ".."
19import ".."
20−import "../../../Greeter"
20+import "../../../qml/Greeter"
21import Ubuntu.Components 0.1
21import Ubuntu.Components 0.1
22import LightDM 0.1 as LightDM
22import LightDM 0.1 as LightDM
23import Unity.Test 0.1 as UT
23import Unity.Test 0.1 as UT
@@ -324,5 +324,16 @@ Item {
324 tryCompare(greeter, "rightTeaserPressed", false)
324 tryCompare(greeter, "rightTeaserPressed", false)
325 }
325 }
326
326
327+ function test_dbus_set_active_entry() {
328+ select_user("no-password") // to guarantee a selected signal
329+ selectionSpy.clear()
330+ LightDM.Greeter.requestAuthenticationUser("has-password")
331+
332+ selectionSpy.wait()
333+ tryCompare(selectionSpy, "count", 1)
334+
335+ var userlist = findChild(greeter, "userList")
336+ compare(greeter.model.data(userlist.currentIndex, LightDM.UserRoles.NameRole), "has-password")
337+ }
327 }
338 }
328}
339}
tests/qmltests/Hud/tst_Hud.qml+1−1
@@ -17,7 +17,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import ".."
19import ".."
20−import "../../../Hud"
20+import "../../../qml/Hud"
21import HudClient 0.1
21import HudClient 0.1
22import Unity.Test 0.1 as UT
22import Unity.Test 0.1 as UT
23
23
tests/qmltests/Hud/tst_Result.qml+1−1
@@ -17,7 +17,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import ".."
19import ".."
20−import "../../../Hud"
20+import "../../../qml/Hud"
21import Unity.Test 0.1 as UT
21import Unity.Test 0.1 as UT
22
22
23Rectangle {
23Rectangle {
tests/qmltests/Launcher/tst_Launcher.qml+7−7
@@ -18,7 +18,7 @@ import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import Unity.Test 0.1 as UT
19import Unity.Test 0.1 as UT
20import ".."
20import ".."
21−import "../../../Launcher"
21+import "../../../qml/Launcher"
22import Unity.Launcher 0.1
22import Unity.Launcher 0.1
23
23
24/* Nothing is shown at first. If you drag from left edge you will bring up the
24/* Nothing is shown at first. If you drag from left edge you will bring up the
@@ -41,9 +41,9 @@ Item {
41 lastSelectedApplication = appId
41 lastSelectedApplication = appId
42 }
42 }
43
43
44− property int dashItemSelected_count: 0
44+ property int showDashHome_count: 0
45− onDashItemSelected: {
45+ onShowDashHome: {
46− dashItemSelected_count++;
46+ showDashHome_count++;
47 }
47 }
48
48
49 property int maxPanelX: 0
49 property int maxPanelX: 0
@@ -138,9 +138,9 @@ Item {
138 }
138 }
139
139
140 /* If I click on the dash icon on the launcher
140 /* If I click on the dash icon on the launcher
141− Launcher::dashItemSelected signal should be emitted */
141+ Launcher::showDashHome signal should be emitted */
142 function test_clickingOnDashIconCausesSignalEmission() {
142 function test_clickingOnDashIconCausesSignalEmission() {
143− launcher.dashItemSelected_count = 0
143+ launcher.showDashHome_count = 0
144
144
145 revealer.dragLauncherIntoView()
145 revealer.dragLauncherIntoView()
146
146
@@ -149,7 +149,7 @@ Item {
149
149
150 mouseClick(dashIcon, dashIcon.width/2, dashIcon.height/2)
150 mouseClick(dashIcon, dashIcon.width/2, dashIcon.height/2)
151
151
152− tryCompare(launcher, "dashItemSelected_count", 1)
152+ tryCompare(launcher, "showDashHome_count", 1)
153
153
154 // Tapping on the dash icon also dismisses the launcher
154 // Tapping on the dash icon also dismisses the launcher
155 revealer.waitUntilLauncherDisappears()
155 revealer.waitUntilLauncherDisappears()
tests/qmltests/Notifications/tst_Notifications.qml+4−5
@@ -17,7 +17,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import ".."
19import ".."
20−import "../../../Notifications"
20+import "../../../qml/Notifications"
21import Ubuntu.Components 0.1
21import Ubuntu.Components 0.1
22import Unity.Test 0.1
22import Unity.Test 0.1
23import Unity.Notifications 1.0
23import Unity.Notifications 1.0
@@ -140,8 +140,10 @@ Row {
140 Notifications {
140 Notifications {
141 id: notifications
141 id: notifications
142
142
143+ margin: units.gu(1)
144+ fullHeight: parent.height
145+
143 anchors.fill: parent
146 anchors.fill: parent
144− anchors.margins: units.gu(1)
145 model: mockModel
147 model: mockModel
146 }
148 }
147 }
149 }
@@ -401,9 +403,6 @@ Row {
401 actionSpy.wait()
403 actionSpy.wait()
402 compare(actionSpy.signalArguments[0][0], data.actions[0]["id"], "got wrong id for interactive action")
404 compare(actionSpy.signalArguments[0][0], data.actions[0]["id"], "got wrong id for interactive action")
403 compare(clickThroughSpy.count, 0, "click on interactive notification fell through")
405 compare(clickThroughSpy.count, 0, "click on interactive notification fell through")
404− } else {
405− mouseClick(notification, notification.width / 2, notification.height / 2)
406− clickThroughSpy.wait()
407 }
406 }
408
407
409 compare(secondaryIcon.visible, data.secondaryIconVisible, "secondary-icon visibility is incorrect")
408 compare(secondaryIcon.visible, data.secondaryIconVisible, "secondary-icon visibility is incorrect")
tests/qmltests/Panel/Indicators/tst_DefaultIndicatorWidget.qml+1−1
@@ -18,7 +18,7 @@ import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import Unity.Test 0.1 as UT
19import Unity.Test 0.1 as UT
20import QMenuModel 0.1
20import QMenuModel 0.1
21−import "../../../../Panel/Indicators"
21+import "../../../../qml/Panel/Indicators"
22
22
23Item {
23Item {
24 id: testView
24 id: testView
tests/qmltests/Panel/tst_IndicatorItem.qml+1−1
@@ -17,7 +17,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import ".."
19import ".."
20−import "../../../Panel"
20+import "../../../qml/Panel"
21import Ubuntu.Components 0.1
21import Ubuntu.Components 0.1
22import Unity.Test 0.1 as UT
22import Unity.Test 0.1 as UT
23
23
tests/qmltests/Panel/tst_IndicatorRow.qml+1−1
@@ -18,7 +18,7 @@ import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import Unity.Test 0.1 as UT
19import Unity.Test 0.1 as UT
20import ".."
20import ".."
21−import "../../../Panel"
21+import "../../../qml/Panel"
22import Unity.Indicators 0.1 as Indicators
22import Unity.Indicators 0.1 as Indicators
23
23
24/*
24/*
tests/qmltests/Panel/tst_Indicators.qml+2−2
@@ -18,8 +18,8 @@ import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import Unity.Test 0.1 as UT
19import Unity.Test 0.1 as UT
20import ".."
20import ".."
21−import "../../../Panel"
21+import "../../../qml/Panel"
22−import "../../../Components"
22+import "../../../qml/Components"
23
23
24/*
24/*
25 This tests the Indicators component by using a fake model to stage data in the indicators
25 This tests the Indicators component by using a fake model to stage data in the indicators
tests/qmltests/Panel/tst_MenuContent.qml+1−1
@@ -18,7 +18,7 @@ import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import Unity.Test 0.1 as UT
19import Unity.Test 0.1 as UT
20import ".."
20import ".."
21−import "../../../Panel"
21+import "../../../qml/Panel"
22import Unity.Indicators 0.1 as Indicators
22import Unity.Indicators 0.1 as Indicators
23
23
24Item {
24Item {
tests/qmltests/Panel/tst_Panel.qml+15−1
@@ -18,7 +18,7 @@ import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import Unity.Test 0.1 as UT
19import Unity.Test 0.1 as UT
20import ".."
20import ".."
21−import "../../../Panel"
21+import "../../../qml/Panel"
22
22
23/*
23/*
24 This tests the Panel component using a fake model to stage data in the indicators
24 This tests the Panel component using a fake model to stage data in the indicators
@@ -264,5 +264,19 @@ Item {
264
264
265 compare(indicatorRow.currentItem, indicatorItemFirst, "First indicator should still be the current item");
265 compare(indicatorRow.currentItem, indicatorItemFirst, "First indicator should still be the current item");
266 }
266 }
267+
268+ function test_hideIndicatorMenu_data() {
269+ return [ {tag: "no-delay", delay: undefined },
270+ {tag: "delayed", delay: 200 }
271+ ];
272+ }
273+
274+ function test_hideIndicatorMenu(data) {
275+ panel.indicators.show();
276+ compare(panel.indicators.shown, true);
277+
278+ panel.hideIndicatorMenu(data.delay);
279+ tryCompare(panel.indicators, "shown", false);
280+ }
267 }
281 }
268}
282}
tests/qmltests/Panel/tst_SearchIndicator.qml+1−1
@@ -17,7 +17,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import ".."
19import ".."
20−import "../../../Panel"
20+import "../../../qml/Panel"
21import Ubuntu.Components 0.1
21import Ubuntu.Components 0.1
22import Unity.Test 0.1 as UT
22import Unity.Test 0.1 as UT
23
23
tests/qmltests/SideStage/tst_SideStage.qml+1−1
@@ -18,7 +18,7 @@ import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import Unity.Test 0.1 as UT
19import Unity.Test 0.1 as UT
20import ".."
20import ".."
21−import "../../../SideStage"
21+import "../../../qml/SideStage"
22import Ubuntu.Components 0.1
22import Ubuntu.Components 0.1
23
23
24UT.UnityTestCase {
24UT.UnityTestCase {
tests/qmltests/tst_Shell.qml+3−3
@@ -24,7 +24,7 @@ import Unity.Application 0.1
24import Unity.Test 0.1 as UT
24import Unity.Test 0.1 as UT
25import Powerd 0.1
25import Powerd 0.1
26
26
27−import "../.."
27+import "../../qml"
28
28
29Item {
29Item {
30 width: shell.width
30 width: shell.width
@@ -469,8 +469,8 @@ Item {
469
469
470 function test_background_data() {
470 function test_background_data() {
471 return [
471 return [
472− {tag: "red", url: "tests/data/unity/backgrounds/red.png", expectedUrl: "tests/data/unity/backgrounds/red.png"},
472+ {tag: "red", url: Qt.resolvedUrl("../data/unity/backgrounds/red.png"), expectedUrl: "tests/data/unity/backgrounds/red.png"},
473− {tag: "blue", url: "tests/data/unity/backgrounds/blue.png", expectedUrl: "tests/data/unity/backgrounds/blue.png"},
473+ {tag: "blue", url: Qt.resolvedUrl("../data/unity/backgrounds/blue.png"), expectedUrl: "tests/data/unity/backgrounds/blue.png"},
474 {tag: "invalid", url: "invalid", expectedUrl: shell.defaultBackground},
474 {tag: "invalid", url: "invalid", expectedUrl: shell.defaultBackground},
475 {tag: "empty", url: "", expectedUrl: shell.defaultBackground}
475 {tag: "empty", url: "", expectedUrl: shell.defaultBackground}
476 ]
476 ]
tests/uqmlscene/CMakeLists.txt+6−1
@@ -1,12 +1,17 @@
1add_executable(uqmlscene
1add_executable(uqmlscene
2 ${shellapplication_MOC_SRCS}
2 ${shellapplication_MOC_SRCS}
3 main.cpp
3 main.cpp
4− ../../MouseTouchAdaptor.cpp
4+ ${CMAKE_SOURCE_DIR}/src/MouseTouchAdaptor.cpp
5 )
5 )
6
6
7qt5_use_modules(uqmlscene Qml Quick Test)
7qt5_use_modules(uqmlscene Qml Quick Test)
8pkg_check_modules(XCB REQUIRED xcb)
8pkg_check_modules(XCB REQUIRED xcb)
9
9
10+include_directories(
11+ ${CMAKE_SOURCE_DIR}/src
12+ ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
13+)
14+
10if (NOT "${XCB_INCLUDE_DIRS}" STREQUAL "")
15if (NOT "${XCB_INCLUDE_DIRS}" STREQUAL "")
11 set_target_properties(uqmlscene PROPERTIES INCLUDE_DIRECTORIES ${XCB_INCLUDE_DIRS})
16 set_target_properties(uqmlscene PROPERTIES INCLUDE_DIRECTORIES ${XCB_INCLUDE_DIRS})
12endif()
17endif()
tests/uqmlscene/main.cpp+1−1
@@ -63,7 +63,7 @@
63#include <QtCore/QTranslator>
63#include <QtCore/QTranslator>
64#include <QtCore/QLibraryInfo>
64#include <QtCore/QLibraryInfo>
65
65
66−#include "../../MouseTouchAdaptor.h"
66+#include <MouseTouchAdaptor.h>
67
67
68#ifdef QML_RUNTIME_TESTING
68#ifdef QML_RUNTIME_TESTING
69class RenderStatistics
69class RenderStatistics
tests/utils/modules/Unity/Test/CMakeLists.txt+4
@@ -1,5 +1,9 @@
1add_definitions(-DQT_NO_KEYWORDS)
1add_definitions(-DQT_NO_KEYWORDS)
2
2
3+include_directories(
4+ ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
5+)
6+
3set(UnityTestQML_SOURCES
7set(UnityTestQML_SOURCES
4 testutil.cpp
8 testutil.cpp
5 plugin.cpp
9 plugin.cpp