on xenial help sign in
merged with trunk
969e211Nick Dedekind
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−}
Bottombar/Bottombar.qml+4−4
@@ -16,10 +16,10 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import "../Components"
18import "../Components"
19−import "../Components/Math.js" as MathLocal
19+import Utils 0.1
20−import Unity 0.1
21import Unity.Application 0.1
20import Unity.Application 0.1
22import Ubuntu.Gestures 0.1
21import Ubuntu.Gestures 0.1
22+import Ubuntu.Components 0.1
23
23
24Item {
24Item {
25 id: bottombar
25 id: bottombar
@@ -82,7 +82,7 @@ Item {
82
82
83 readonly property bool centeredHud: parent.width < units.gu(68) // Nexus 7 has 67 gu width
83 readonly property bool centeredHud: parent.width < units.gu(68) // Nexus 7 has 67 gu width
84
84
85− x: centeredHud ? parent.width / 2 - width / 2 : MathLocal.clamp(dragArea.touchStartX - (width / 2), 0, bottombar.width - width)
85+ x: centeredHud ? parent.width / 2 - width / 2 : MathUtils.clamp(dragArea.touchStartX - (width / 2), 0, bottombar.width - width)
86 y: bottombar.height - bottomEdgeButtonCenterDistance - (height / 2) - bottomMargin
86 y: bottombar.height - bottomEdgeButtonCenterDistance - (height / 2) - bottomMargin
87 z: 1
87 z: 1
88 visible: opacity != 0
88 visible: opacity != 0
@@ -136,7 +136,7 @@ Item {
136 readonly property real distanceFromThreshold: (-distance) - distanceThreshold // distance is negative
136 readonly property real distanceFromThreshold: (-distance) - distanceThreshold // distance is negative
137 readonly property real revealDistance: units.gu(2)
137 readonly property real revealDistance: units.gu(2)
138 readonly property real commitDistance: units.gu(6)
138 readonly property real commitDistance: units.gu(6)
139− readonly property real commitProgress: MathLocal.clamp(distanceFromThreshold / commitDistance, 0, 1)
139+ readonly property real commitProgress: MathUtils.clamp(distanceFromThreshold / commitDistance, 0, 1)
140
140
141 onStatusChanged: {
141 onStatusChanged: {
142 if (status === DirectionalDragArea.WaitingForTouch) {
142 if (status === DirectionalDragArea.WaitingForTouch) {
CMakeLists.txt+10−2
@@ -58,7 +58,16 @@ find_package(Qt5DBus)
58include(GNUInstallDirs)
58include(GNUInstallDirs)
59
59
60set(SHELL_APP_DIR ${CMAKE_INSTALL_DATADIR}/unity8)
60set(SHELL_APP_DIR ${CMAKE_INSTALL_DATADIR}/unity8)
61−set(SHELL_PRIVATE_LIBDIR ${CMAKE_INSTALL_LIBDIR}/unity8)
61+
62+execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=plugindir_suffix unity-shell-api OUTPUT_VARIABLE SHELL_INSTALL_QML OUTPUT_STRIP_TRAILING_WHITESPACE)
63+if(SHELL_INSTALL_QML STREQUAL "")
64+ message(FATAL_ERROR "Could not determine plugin installation dir.")
65+endif()
66+
67+execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=plugindir unity-shell-api OUTPUT_VARIABLE SHELL_PLUGINDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
68+if(SHELL_PLUGINDIR STREQUAL "")
69+ message(FATAL_ERROR "Could not determine plugin import dir.")
70+endif()
62
71
63configure_file(paths.h.in ${CMAKE_CURRENT_BINARY_DIR}/paths.h @ONLY)
72configure_file(paths.h.in ${CMAKE_CURRENT_BINARY_DIR}/paths.h @ONLY)
64
73
@@ -142,7 +151,6 @@ add_subdirectory(src)
142
151
143# install subdirectories
152# install subdirectories
144set(QML_DIRS
153set(QML_DIRS
145− Applications
146 Bottombar
154 Bottombar
147 Components
155 Components
148 Dash
156 Dash
Components/Carousel.qml+31−15
@@ -45,20 +45,25 @@ Item {
45 property int drawBuffer: width / pathItemCount // an "ok" value - but values used from the listView cause loops
45 property int drawBuffer: width / pathItemCount // an "ok" value - but values used from the listView cause loops
46 /// The selected item can be shown in a different size controlled by selectedItemScaleFactor
46 /// The selected item can be shown in a different size controlled by selectedItemScaleFactor
47 property real selectedItemScaleFactor: 1.1
47 property real selectedItemScaleFactor: 1.1
48+ /// The index of the item that should be highlighted
49+ property alias highlightIndex: listView.highlightIndex
50+ /// exposes the delegate of the currentItem
51+ readonly property alias currentItem: listView.currentItem
52+ /// exposes the distance to the next row (only one row in carousel, so it's the topMargins)
53+ readonly property alias verticalSpacing: listView.verticalMargin
48
54
49 /// Emitted when the user clicked on an item
55 /// Emitted when the user clicked on an item
50 /// @param index is the index of the clicked item
56 /// @param index is the index of the clicked item
51− /// @param delegateItem is the clicked component/delegate itself
52 /// @param itemY is y of the clicked delegate
57 /// @param itemY is y of the clicked delegate
53− signal clicked(int index, var delegateItem, real itemY)
58+ signal clicked(int index, real itemY)
54
59
55 /// Emitted when the user pressed and held on an item
60 /// Emitted when the user pressed and held on an item
56 /// @param index is the index of the held item
61 /// @param index is the index of the held item
57− /// @param delegateItem is the held component/delegate itself
58 /// @param itemY is y of the held delegate
62 /// @param itemY is y of the held delegate
59− signal pressAndHold(int index, var delegateItem, real itemY)
63+ signal pressAndHold(int index, real itemY)
60
64
61 implicitHeight: listView.tileHeight * selectedItemScaleFactor
65 implicitHeight: listView.tileHeight * selectedItemScaleFactor
66+ opacity: listView.highlightIndex === -1 ? 1 : 0.6
62
67
63 /* 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).
64 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
@@ -71,8 +76,9 @@ Item {
71 ListView {
76 ListView {
72 id: listView
77 id: listView
73
78
79+ property int highlightIndex: -1
74 property real minimumTileWidth: 0
80 property real minimumTileWidth: 0
75− property real newContentX: -1
81+ property real newContentX: disabledNewContentX
76 property real pathItemCount: referenceWidth / referenceTileWidth
82 property real pathItemCount: referenceWidth / referenceTileWidth
77 property real tileAspectRatio: 1
83 property real tileAspectRatio: 1
78
84
@@ -100,6 +106,7 @@ Item {
100 readonly property real kMiddleIndex: (realWidth / 2) / tileWidth - 0.5
106 readonly property real kMiddleIndex: (realWidth / 2) / tileWidth - 0.5
101 readonly property real kXBeginningEnd: 1 / tileWidth + kMiddleIndex / gapToMiddlePhase
107 readonly property real kXBeginningEnd: 1 / tileWidth + kMiddleIndex / gapToMiddlePhase
102 readonly property real maximumItemTranslation: (listView.tileWidth * 3) / listView.scaleFactor
108 readonly property real maximumItemTranslation: (listView.tileWidth * 3) / listView.scaleFactor
109+ readonly property real disabledNewContentX: -carousel.drawBuffer - 1
103 readonly property real realContentWidth: contentWidth - 2 * carousel.drawBuffer
110 readonly property real realContentWidth: contentWidth - 2 * carousel.drawBuffer
104 readonly property real realContentX: contentX + carousel.drawBuffer
111 readonly property real realContentX: contentX + carousel.drawBuffer
105 readonly property real realPathItemCount: Math.min(realWidth / tileWidth, pathItemCount)
112 readonly property real realPathItemCount: Math.min(realWidth / tileWidth, pathItemCount)
@@ -135,13 +142,14 @@ Item {
135 height: listView.tileHeight
142 height: listView.tileHeight
136 }
143 }
137
144
138− boundsBehavior: Flickable.StopAtBounds
145+ boundsBehavior: Flickable.DragOverBounds
139 cacheBuffer: carousel.cacheBuffer
146 cacheBuffer: carousel.cacheBuffer
140 flickDeceleration: Math.max(1500 * Math.pow(realWidth / referenceWidth, 1.5), 1500) // 1500 is platform default
147 flickDeceleration: Math.max(1500 * Math.pow(realWidth / referenceWidth, 1.5), 1500) // 1500 is platform default
141 maximumFlickVelocity: Math.max(2500 * Math.pow(realWidth / referenceWidth, 1.5), 2500) // 2500 is platform default
148 maximumFlickVelocity: Math.max(2500 * Math.pow(realWidth / referenceWidth, 1.5), 2500) // 2500 is platform default
142 orientation: ListView.Horizontal
149 orientation: ListView.Horizontal
143
150
144 function itemClicked(index, delegateItem) {
151 function itemClicked(index, delegateItem) {
152+ listView.currentIndex = index
145 var x = CarouselJS.getXFromContinuousIndex(index,
153 var x = CarouselJS.getXFromContinuousIndex(index,
146 realWidth,
154 realWidth,
147 realContentWidth,
155 realContentWidth,
@@ -150,11 +158,11 @@ Item {
150 gapToEndPhase,
158 gapToEndPhase,
151 carousel.drawBuffer)
159 carousel.drawBuffer)
152
160
153− if (Math.abs(x - contentX) < 1) {
161+ if (Math.abs(x - contentX) < 1 && delegateItem !== undefined) {
154 /* We're clicking the selected item and
162 /* We're clicking the selected item and
155 we're in the neighbourhood of radius 1 pixel from it.
163 we're in the neighbourhood of radius 1 pixel from it.
156 Let's emit the clicked signal. */
164 Let's emit the clicked signal. */
157− carousel.clicked(index, delegateItem, delegateItem.y)
165+ carousel.clicked(index, delegateItem.y)
158 return
166 return
159 }
167 }
160
168
@@ -174,11 +182,11 @@ Item {
174 gapToEndPhase,
182 gapToEndPhase,
175 carousel.drawBuffer);
183 carousel.drawBuffer);
176
184
177− if (Math.abs(x - contentX) < 1) {
185+ if (Math.abs(x - contentX) < 1 && delegateItem !== undefined) {
178 /* We're pressAndHold the selected item and
186 /* We're pressAndHold the selected item and
179 we're in the neighbourhood of radius 1 pixel from it.
187 we're in the neighbourhood of radius 1 pixel from it.
180 Let's emit the pressAndHold signal. */
188 Let's emit the pressAndHold signal. */
181− carousel.pressAndHold(index, delegateItem, delegateItem.y);
189+ carousel.pressAndHold(index, delegateItem.y);
182 return;
190 return;
183 }
191 }
184
192
@@ -189,10 +197,16 @@ Item {
189 newContentXAnimation.start();
197 newContentXAnimation.start();
190 }
198 }
191
199
200+ onHighlightIndexChanged: {
201+ if (highlightIndex != -1) {
202+ itemClicked(highlightIndex)
203+ }
204+ }
205+
192 onMovementStarted: {
206 onMovementStarted: {
193 stepAnimation.stop()
207 stepAnimation.stop()
194 newContentXAnimation.stop()
208 newContentXAnimation.stop()
195− newContentX = -1
209+ newContentX = disabledNewContentX
196 }
210 }
197 onMovementEnded: {
211 onMovementEnded: {
198 if (realContentX > 0 && realContentX < realContentWidth - realWidth)
212 if (realContentX > 0 && realContentX < realContentWidth - realWidth)
@@ -228,7 +242,7 @@ Item {
228 easing.type: Easing.InOutQuad
242 easing.type: Easing.InOutQuad
229 }
243 }
230 ScriptAction {
244 ScriptAction {
231− script: listView.newContentX = -1
245+ script: listView.newContentX = listView.disabledNewContentX
232 }
246 }
233 }
247 }
234
248
@@ -253,7 +267,7 @@ Item {
253 readonly property bool explicitScale: (!listView.moving ||
267 readonly property bool explicitScale: (!listView.moving ||
254 listView.realContentX <= 0 ||
268 listView.realContentX <= 0 ||
255 listView.realContentX >= listView.realContentWidth - listView.realWidth) &&
269 listView.realContentX >= listView.realContentWidth - listView.realWidth) &&
256− listView.newContentX < 0 &&
270+ listView.newContentX === listView.disabledNewContentX &&
257 index === listView.selectedIndex
271 index === listView.selectedIndex
258 readonly property real cachedTiles: listView.realPathItemCount + carousel.drawBuffer / listView.tileWidth
272 readonly property real cachedTiles: listView.realPathItemCount + carousel.drawBuffer / listView.tileWidth
259 readonly property real distance: listView.continuousIndex - index
273 readonly property real distance: listView.continuousIndex - index
@@ -272,6 +286,9 @@ Item {
272 itemTranslationScale,
286 itemTranslationScale,
273 listView.maximumItemTranslation)
287 listView.maximumItemTranslation)
274
288
289+ readonly property real xTransform: listView.viewTranslation + translationX * listView.scaleFactor
290+ readonly property real center: x - listView.contentX + xTransform - drawBuffer + (width/2)
291+
275 width: listView.tileWidth
292 width: listView.tileWidth
276 height: listView.tileHeight
293 height: listView.tileHeight
277 scale: itemScale * explicitScaleFactor
294 scale: itemScale * explicitScaleFactor
@@ -279,7 +296,7 @@ Item {
279 z: cachedTiles - Math.abs(index - listView.selectedIndex)
296 z: cachedTiles - Math.abs(index - listView.selectedIndex)
280
297
281 transform: Translate {
298 transform: Translate {
282− x: listView.viewTranslation + translationX * listView.scaleFactor
299+ x: xTransform
283 }
300 }
284
301
285 Behavior on explicitScaleFactor {
302 Behavior on explicitScaleFactor {
@@ -316,7 +333,6 @@ Item {
316 onPressAndHold: {
333 onPressAndHold: {
317 listView.itemPressAndHold(index, item)
334 listView.itemPressAndHold(index, item)
318 }
335 }
319−
320 }
336 }
321 }
337 }
322 }
338 }
Components/DragHandle.qml+22−24
@@ -17,7 +17,6 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import Ubuntu.Components 0.1
18import Ubuntu.Components 0.1
19import Ubuntu.Gestures 0.1
19import Ubuntu.Gestures 0.1
20−import "Math.js" as MathLocal
21
20
22/*
21/*
23 Put a DragHandle inside a Showable to enable the user to drag it from that handle.
22 Put a DragHandle inside a Showable to enable the user to drag it from that handle.
@@ -48,9 +47,12 @@ EdgeDragArea {
48 id: dragArea
47 id: dragArea
49 objectName: "dragHandle"
48 objectName: "dragHandle"
50
49
51− // Disable gesture detection by default when hinting is used.
50+ // Disable most of the gesture recognition parameters by default when hinting is used as
52− // It doesn't make sense to have both.
51+ // it conflicts with the hinting idea.
52+ // The only part we keep in this situation is that it must be a single-finger gesture.
53− distanceThreshold: hintDisplacement > 0 ? 0 : units.gu(1.5)
53+ distanceThreshold: hintDisplacement > 0 ? 0 : defaultDistanceThreshold
54+ maxSilenceTime: hintDisplacement > 0 ? 60*60*1000 : defaultMaxSilenceTime
55+ maxDeviation: hintDisplacement > 0 ? 999999 : defaultMaxDeviation
54
56
55 property bool stretch: false
57 property bool stretch: false
56
58
@@ -113,8 +115,8 @@ EdgeDragArea {
113 }
115 }
114 }
116 }
115
117
116− function limitMovement(step) {
118+ function limitMovement(inputStep) {
117− var targetValue = MathLocal.clamp(dragParent[targetProp] + step, minValue, maxValue);
119+ var targetValue = MathUtils.clamp(dragParent[targetProp] + inputStep, minValue, maxValue);
118 var step = targetValue - dragParent[targetProp];
120 var step = targetValue - dragParent[targetProp];
119
121
120 if (hintDisplacement == 0) {
122 if (hintDisplacement == 0) {
@@ -181,29 +183,25 @@ EdgeDragArea {
181 }
183 }
182 }
184 }
183
185
184− onDraggingChanged: {
185− if (dragging) {
186− if (hintDisplacement > 0) {
187− hintingAnimation.targetValue = d.startValue;
188− hintingAnimation.start();
189− }
190− } else {
191− hintingAnimation.stop();
192− }
193− }
194−
195 onStatusChanged: {
186 onStatusChanged: {
196 if (status === DirectionalDragArea.WaitingForTouch) {
187 if (status === DirectionalDragArea.WaitingForTouch) {
188+ hintingAnimation.stop();
197 if (d.previousStatus === DirectionalDragArea.Recognized) {
189 if (d.previousStatus === DirectionalDragArea.Recognized) {
198 d.onFinishedRecognizedGesture();
190 d.onFinishedRecognizedGesture();
191+ } else /* d.previousStatus === DirectionalDragArea.Undecided */ {
192+ // Gesture was rejected.
193+ d.rollbackDrag();
194+ }
195+ } else /* Undecided || Recognized */ {
196+ if (d.previousStatus === DirectionalDragArea.WaitingForTouch ||
197+ d.previousStatus === undefined) {
198+ dragEvaluator.reset();
199+ d.startValue = parent[d.targetProp];
200+ }
201+ if (hintDisplacement > 0) {
202+ hintingAnimation.targetValue = d.startValue;
203+ hintingAnimation.start();
199 }
204 }
200− d.startValue = parent[d.targetProp];
201− }
202−
203− if (d.previousStatus === DirectionalDragArea.WaitingForTouch ||
204− d.previousStatus === undefined) {
205− dragEvaluator.reset();
206− d.startValue = parent[d.targetProp];
207 }
205 }
208
206
209 d.previousStatus = status;
207 d.previousStatus = status;
Components/DraggingArea.qml+1−2
@@ -16,7 +16,6 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import Ubuntu.Components 0.1
18import Ubuntu.Components 0.1
19−import "Math.js" as MathLocal
20
19
21MouseArea {
20MouseArea {
22 id: draggingArea
21 id: draggingArea
@@ -26,7 +25,7 @@ MouseArea {
26 property real dragVelocity: 0
25 property real dragVelocity: 0
27 property real dragValue: (orientation == Qt.Vertical ? (mouseY - __pressedPosition.y)
26 property real dragValue: (orientation == Qt.Vertical ? (mouseY - __pressedPosition.y)
28 : (mouseX - __pressedPosition.x))
27 : (mouseX - __pressedPosition.x))
29− property real lateralPosition: orientation == Qt.Horizontal ? MathLocal.clamp(mouseY, 0, height) : MathLocal.clamp(mouseX, 0, width)
28+ property real lateralPosition: orientation == Qt.Horizontal ? MathUtils.clamp(mouseY, 0, height) : MathUtils.clamp(mouseX, 0, width)
30 property point __pressedPosition: Qt.point(0, 0)
29 property point __pressedPosition: Qt.point(0, 0)
31 property var __dragEvents: []
30 property var __dragEvents: []
32 property bool clickValidated: true
31 property bool clickValidated: true
Components/EdgeDemo.qml+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+2
@@ -105,6 +105,8 @@ Showable {
105 visible: overlay.active
105 visible: overlay.active
106
106
107 MouseArea {
107 MouseArea {
108+ objectName: "backgroundShadeMouseArea"
109+
108 anchors.fill: parent
110 anchors.fill: parent
109 enabled: overlay.edge == "none" && overlay.opacity == 1.0
111 enabled: overlay.edge == "none" && overlay.opacity == 1.0
110 onClicked: overlay.doSkip()
112 onClicked: overlay.doSkip()
Components/EdgeDragArea.qml+12−4
@@ -29,8 +29,16 @@ DirectionalDragArea {
29 //
29 //
30 // The idea here is that it's better having lax rules than false negatives.
30 // The idea here is that it's better having lax rules than false negatives.
31 // False negatives are very frustrating to the user.
31 // False negatives are very frustrating to the user.
32− maxDeviation: units.gu(3)
32+ maxDeviation: defaultMaxDeviation
33− wideningAngle: 50
33+ wideningAngle: defaultWideningAngle
34− distanceThreshold: units.gu(1.5)
34+ distanceThreshold: defaultDistanceThreshold
35+ minSpeed: defaultMinSpeed
36+ maxSilenceTime: defaultMaxSilenceTime
37+
38+ readonly property real defaultMaxDeviation: units.gu(3)
39+ readonly property real defaultWideningAngle: 50
40+ readonly property real defaultDistanceThreshold: units.gu(1.5)
35− minSpeed: units.gu(0) // some people were getting false negatives with it enabled.
41+ // some people were getting false negatives with it enabled.
42+ readonly property real defaultMinSpeed: units.gu(0)
43+ readonly property int defaultMaxSilenceTime: 200
36}
44}
Components/FilterGrid.qml+5−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
@@ -54,6 +55,7 @@ Item {
54 property alias delegateWidth: iconTileGrid.delegateWidth
55 property alias delegateWidth: iconTileGrid.delegateWidth
55 property alias delegateHeight: iconTileGrid.delegateHeight
56 property alias delegateHeight: iconTileGrid.delegateHeight
56 property alias verticalSpacing: iconTileGrid.verticalSpacing
57 property alias verticalSpacing: iconTileGrid.verticalSpacing
58+ readonly property alias margins: iconTileGrid.margins
57 property alias delegate: iconTileGrid.delegate
59 property alias delegate: iconTileGrid.delegate
58 property alias cellWidth: iconTileGrid.cellWidth
60 property alias cellWidth: iconTileGrid.cellWidth
59 property alias cellHeight: iconTileGrid.cellHeight
61 property alias cellHeight: iconTileGrid.cellHeight
@@ -62,6 +64,8 @@ Item {
62 readonly property alias flicking: iconTileGrid.flicking
64 readonly property alias flicking: iconTileGrid.flicking
63 readonly property alias moving: iconTileGrid.moving
65 readonly property alias moving: iconTileGrid.moving
64 readonly property alias pressDelay: iconTileGrid.pressDelay
66 readonly property alias pressDelay: iconTileGrid.pressDelay
67+ property alias highlightIndex: iconTileGrid.highlightIndex
68+ readonly property alias currentItem: iconTileGrid.currentItem
65
69
66 height: !filterAnimation.running ? childrenRect.height : height
70 height: !filterAnimation.running ? childrenRect.height : height
67 clip: filterAnimation.running
71 clip: filterAnimation.running
Components/LazyImage.qml+2−2
@@ -100,10 +100,10 @@ Item {
100 verticalAlignment: Image.AlignVCenter
100 verticalAlignment: Image.AlignVCenter
101 sourceSize.width: root.scaleTo == "width" ? root.width
101 sourceSize.width: root.scaleTo == "width" ? root.width
102 : root.scaleTo == "fit" && root.width < root.height ? root.width
102 : root.scaleTo == "fit" && root.width < root.height ? root.width
103− : undefined
103+ : 0
104 sourceSize.height: root.scaleTo == "height" ? root.height
104 sourceSize.height: root.scaleTo == "height" ? root.height
105 : root.scale == "fit" && root.height < root.width ? root.height
105 : root.scale == "fit" && root.height < root.width ? root.height
106− : undefined
106+ : 0
107 }
107 }
108 }
108 }
109
109
Components/Math.jsdeleted−26
@@ -1,26 +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−.pragma library
18−
19−function clamp(value, min, max) {
20− if (min <= max) {
21− return Math.max(min, Math.min(max, value))
22− } else {
23− // swap min/max if min > max
24− return clamp(value, max, min)
25− }
26−}
Components/PageHeader.qml+29−6
@@ -30,7 +30,7 @@ Item {
30
30
31 property bool searchEntryEnabled: false
31 property bool searchEntryEnabled: false
32 property alias searchQuery: searchField.text
32 property alias searchQuery: searchField.text
33− property ListModel searchHistory: SearchHistoryModel {}
33+ property ListModel searchHistory
34 property Scope scope
34 property Scope scope
35
35
36 height: units.gu(8.5)
36 height: units.gu(8.5)
@@ -44,7 +44,11 @@ Item {
44 if (!searchHistory) return;
44 if (!searchHistory) return;
45
45
46 searchHistory.addQuery(searchField.text);
46 searchHistory.addQuery(searchField.text);
47+ unfocus();
47 searchField.text = "";
48 searchField.text = "";
49+ }
50+
51+ function unfocus() {
48 searchField.focus = false;
52 searchField.focus = false;
49 }
53 }
50
54
@@ -108,6 +112,8 @@ Item {
108 objectName: "searchContainer"
112 objectName: "searchContainer"
109
113
110 visible: searchEntryEnabled
114 visible: searchEntryEnabled
115+ property bool popoverShouldOpen: false
116+ property bool popoverShouldClose: false
111
117
112 property bool narrowMode: parent.width < label.contentWidth + units.gu(50)
118 property bool narrowMode: parent.width < label.contentWidth + units.gu(50)
113
119
@@ -123,6 +129,16 @@ Item {
123 else if (active && !narrowMode) "active"
129 else if (active && !narrowMode) "active"
124 else if (!active && !narrowMode) "inactive"
130 else if (!active && !narrowMode) "inactive"
125
131
132+ onStateChanged: {
133+ if (state == "active" || state == "narrowActive") {
134+ popoverShouldOpen = true;
135+ popoverShouldClose = false;
136+ } else {
137+ popoverShouldOpen = false;
138+ popoverShouldClose = true;
139+ }
140+ }
141+
126 function openPopover() {
142 function openPopover() {
127 if (searchHistory.count > 0) {
143 if (searchHistory.count > 0) {
128 searchContainer.popover = PopupUtils.open(popoverComponent, searchField,
144 searchContainer.popover = PopupUtils.open(popoverComponent, searchField,
@@ -133,10 +149,17 @@ Item {
133 }
149 }
134 )
150 )
135 }
151 }
152+ popoverShouldOpen = false;
153+ popoverShouldClose = false;
136 }
154 }
137
155
138 function closePopover() {
156 function closePopover() {
157+ if (searchContainer.popover) {
139− if (searchContainer.popover) PopupUtils.close(searchContainer.popover)
158+ PopupUtils.close(searchContainer.popover);
159+ searchContainer.popover = null;
160+ }
161+ popoverShouldOpen = false;
162+ popoverShouldClose = false;
140 }
163 }
141
164
142 onActiveFocusChanged: if (!activeFocus) { searchHistory.addQuery(searchField.text) }
165 onActiveFocusChanged: if (!activeFocus) { searchHistory.addQuery(searchField.text) }
@@ -279,12 +302,12 @@ Item {
279 PropertyAction { target: primaryImage; property: "source" }
302 PropertyAction { target: primaryImage; property: "source" }
280 AnchorAnimation { targets: [searchContainer, textContainer]; duration: 200; easing.type: Easing.InOutQuad }
303 AnchorAnimation { targets: [searchContainer, textContainer]; duration: 200; easing.type: Easing.InOutQuad }
281 }
304 }
282− ScriptAction { script: searchContainer.openPopover() }
305+ ScriptAction { script: if (searchContainer.popoverShouldOpen) { searchContainer.openPopover(); } }
283 }
306 }
284 },
307 },
285 Transition {
308 Transition {
286 to: "inactive"
309 to: "inactive"
287− ScriptAction { script: searchContainer.closePopover() }
310+ ScriptAction { script: if (searchContainer.popoverShouldClose) { searchContainer.closePopover(); } }
288 NumberAnimation { targets: [searchContainer, searchField] ; property: "width"; duration: 200; easing.type: Easing.InOutQuad }
311 NumberAnimation { targets: [searchContainer, searchField] ; property: "width"; duration: 200; easing.type: Easing.InOutQuad }
289 AnchorAnimation { targets: [searchContainer, textContainer]; duration: 200; easing.type: Easing.InOutQuad }
312 AnchorAnimation { targets: [searchContainer, textContainer]; duration: 200; easing.type: Easing.InOutQuad }
290 },
313 },
@@ -295,12 +318,12 @@ Item {
295 NumberAnimation { targets: [searchContainer, searchField] ; property: "width"; duration: 200; easing.type: Easing.OutQuad }
318 NumberAnimation { targets: [searchContainer, searchField] ; property: "width"; duration: 200; easing.type: Easing.OutQuad }
296 AnchorAnimation { targets: [searchContainer, textContainer]; duration: 200; easing.type: Easing.InOutQuad }
319 AnchorAnimation { targets: [searchContainer, textContainer]; duration: 200; easing.type: Easing.InOutQuad }
297 }
320 }
298− ScriptAction { script: searchContainer.openPopover() }
321+ ScriptAction { script: if (searchContainer.popoverShouldOpen) { searchContainer.openPopover(); } }
299 }
322 }
300 },
323 },
301 Transition {
324 Transition {
302 to: "narrowInactive"
325 to: "narrowInactive"
303− ScriptAction { script: searchContainer.closePopover() }
326+ ScriptAction { script: if (searchContainer.popoverShouldClose) { searchContainer.closePopover(); } }
304 NumberAnimation { targets: [searchContainer, searchField] ; property: "width"; duration: 200; easing.type: Easing.OutQuad }
327 NumberAnimation { targets: [searchContainer, searchField] ; property: "width"; duration: 200; easing.type: Easing.OutQuad }
305 AnchorAnimation { targets: [searchContainer, textContainer]; duration: 200; easing.type: Easing.InOutQuad }
328 AnchorAnimation { targets: [searchContainer, textContainer]; duration: 200; easing.type: Easing.InOutQuad }
306 }
329 }
Components/PinPadButton.qml+40−13
@@ -21,24 +21,51 @@ Item {
21 id: root
21 id: root
22
22
23 property alias text: label.text
23 property alias text: label.text
24− property alias iconName: icon.name
24+ property alias subText: subTextLabel.text
25+ property string iconName
25
26
26 signal clicked()
27 signal clicked()
27
28
28− Label {
29+ Column {
29− id: label
30 anchors.centerIn: parent
30 anchors.centerIn: parent
31− color: "#f3f3e7"
31+ width: parent.width
32− fontSize: "large"
32+ height: childrenRect.height
33− font.weight: Font.DemiBold
34− }
35
33
34+ Item {
35+ anchors {
36+ left: parent.left
37+ right: parent.right
38+ }
39+ height: label.visible || icon.visible ? Math.max(label.height, icon.height) : 0
40+
41+ Label {
42+ id: label
43+ anchors.centerIn: parent
44+ width: parent.width
45+ horizontalAlignment: Text.AlignHCenter
46+ color: "#f3f3e7"
47+ fontSize: "large"
48+ font.weight: Font.DemiBold
49+ visible: text.length > 0
50+ }
51+
36− Icon {
52+ Icon {
37− id: icon
53+ id: icon
38− height: units.gu(3)
54+ height: units.gu(3)
39− width: height
55+ width: height
40− anchors.centerIn: parent
56+ anchors.centerIn: parent
57+ name: root.iconName
41− color: "#f3f3e7"
58+ color: "#f3f3e7"
59+ visible: name.length > 0
60+ }
61+ }
62+ Label {
63+ id: subTextLabel
64+ fontSize: "small"
65+ color: "grey"
66+ anchors.horizontalCenter: parent.horizontalCenter
67+ visible: text.length > 0
68+ }
42 }
69 }
43
70
44 MouseArea {
71 MouseArea {
Components/ResponsiveGridView.qml+10
@@ -26,6 +26,7 @@ Item {
26 property int maximumNumberOfColumns: 6
26 property int maximumNumberOfColumns: 6
27 readonly property int columns: gridView.columns
27 readonly property int columns: gridView.columns
28 property alias verticalSpacing: gridView.verticalSpacing
28 property alias verticalSpacing: gridView.verticalSpacing
29+ readonly property alias margins: gridView.margin
29 property int delegateWidth
30 property int delegateWidth
30 property int delegateHeight
31 property int delegateHeight
31 property alias model: gridView.model
32 property alias model: gridView.model
@@ -41,6 +42,8 @@ Item {
41 readonly property alias pressDelay: gridView.pressDelay
42 readonly property alias pressDelay: gridView.pressDelay
42 property alias delegateCreationBegin: gridView.delegateCreationBegin
43 property alias delegateCreationBegin: gridView.delegateCreationBegin
43 property alias delegateCreationEnd: gridView.delegateCreationEnd
44 property alias delegateCreationEnd: gridView.delegateCreationEnd
45+ property alias highlightIndex: gridView.highlightIndex
46+ readonly property alias currentItem: gridView.currentItem
44
47
45 function contentHeightForRows(rows) {
48 function contentHeightForRows(rows) {
46 return rows * cellHeight + verticalSpacing
49 return rows * cellHeight + verticalSpacing
@@ -77,8 +80,15 @@ Item {
77 property real horizontalSpacing: spacingForColumns(columns)
80 property real horizontalSpacing: spacingForColumns(columns)
78 property real verticalSpacing: horizontalSpacing
81 property real verticalSpacing: horizontalSpacing
79 property int margin: allocatableHorizontalSpace - columns * horizontalSpacing
82 property int margin: allocatableHorizontalSpace - columns * horizontalSpacing
83+ property int highlightIndex: -1
80
84
81 cellWidth: delegateWidth + horizontalSpacing
85 cellWidth: delegateWidth + horizontalSpacing
82 cellHeight: delegateHeight + verticalSpacing
86 cellHeight: delegateHeight + verticalSpacing
87+
88+ onHighlightIndexChanged: {
89+ if (highlightIndex != -1) {
90+ currentIndex = highlightIndex
91+ }
92+ }
83 }
93 }
84}
94}
Components/Revealer.qml+1−2
@@ -16,7 +16,6 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import Ubuntu.Components 0.1
18import Ubuntu.Components 0.1
19−import "Math.js" as MathLocal
20
19
21Item {
20Item {
22 id: revealer
21 id: revealer
@@ -95,7 +94,7 @@ Item {
95 onClosedValueChanged: if (!__opened && !dragging) target[boundProperty] = closedValue
94 onClosedValueChanged: if (!__opened && !dragging) target[boundProperty] = closedValue
96
95
97 function __computeValue(dragPosition) {
96 function __computeValue(dragPosition) {
98− return MathLocal.clamp(dragToValue(dragPosition), __hintValue, openedValue)
97+ return MathUtils.clamp(dragToValue(dragPosition), __hintValue, openedValue)
99 }
98 }
100
99
101 function __open() {
100 function __open() {
Components/Stage.qml+8−7
@@ -482,19 +482,20 @@ Showable {
482 switchToApplicationAnimationController.progress += 0.4 * delta
482 switchToApplicationAnimationController.progress += 0.4 * delta
483 }
483 }
484
484
485− property bool gotRejected: false
485+ property int lastStatus: -1
486
486
487 onStatusChanged: {
487 onStatusChanged: {
488 if (status == DirectionalDragArea.Undecided) {
488 if (status == DirectionalDragArea.Undecided) {
489− gotRejected = false
490 onUndecided();
489 onUndecided();
491− } else if (status == DirectionalDragArea.Rejected) {
492− switchToApplicationAnimationController.completeToBeginningWithSignal();
493− gotRejected = true;
494 } else if (status == DirectionalDragArea.WaitingForTouch) {
490 } else if (status == DirectionalDragArea.WaitingForTouch) {
495− if (!gotRejected)
491+ if (lastStatus == DirectionalDragArea.Undecided) {
492+ // got rejected
493+ switchToApplicationAnimationController.completeToBeginningWithSignal();
494+ } else {
496− onGestureEnded()
495+ onGestureEnded();
496+ }
497 }
497 }
498+ lastStatus = status;
498 }
499 }
499
500
500 function onUndecided() {
501 function onUndecided() {
Components/Tile.qml+9
@@ -26,5 +26,14 @@ AbstractButton {
26 property int imageHeight
26 property int imageHeight
27 property int maximumLineCount: 1
27 property int maximumLineCount: 1
28
28
29+ readonly property int center: (index % GridView.view.columns * width) + (width / 2)
30+
31+ opacity: GridView.view.highlightIndex === -1 ? 1 :
32+ GridView.view.highlightIndex === index ? 0.6 : 0.2
33+
34+ Behavior on opacity {
35+ UbuntuNumberAnimation {}
36+ }
37+
29 style: TileStyle {}
38 style: TileStyle {}
30}
39}
Components/Time.jsdeleted−49
@@ -1,49 +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−.pragma library
18−
19−var factors = {
20− "second": [ 1000, "a second ago", "in a second", "%1 seconds ago", "in %1 seconds" ],
21− "minute": [ 60, "a minute ago", "in a minute", "%1 minutes ago", "in %1 minutes" ],
22− "hour": [ 60, "an hour ago", "in an hour", "%1 hours ago", "in %1 hours" ],
23− "day": [ 24, "yesterday", "tomorrow", "%1 days ago", "in %1 days" ],
24− "week": [ 7, "a week ago", "in a week", "about %1 weeks ago", "in about %1 weeks" ],
25− "month": [ 4.35, "a month ago", "in a month", "%1 months ago", "in %1 months" ], // == 365.25 days / 12 months / 7 days
26− "year": [ 12, "a year ago", "in a year", "%1 years ago", "in %1 years" ]
27−}
28−
29−function readableFromNow(date, now) {
30− var then = new Date(date);
31− if (isNaN(then)) return "";
32− if (now === undefined) {
33− now = new Date();
34− } else if (isNaN(now)) throw "now is NaN";
35− var diff = Math.abs(now - then);
36− if (diff < 1000) return "just now";
37−
38− var future = now < then;
39− var humanDiff;
40− for (var k in factors) {
41− diff /= factors[k][0];
42− if (Math.floor(diff) == 1) {
43− humanDiff = factors[k][future ? 2 : 1];
44− } else if (Math.floor(diff) > 1) {
45− humanDiff = factors[k][future ? 4 : 3].arg(Math.round(diff));
46− } else break;
47− }
48− return humanDiff;
49−}
Components/UbuntuShapeForItem.qml+1
@@ -31,6 +31,7 @@ Item {
31
31
32 ShaderEffectSource {
32 ShaderEffectSource {
33 id: source
33 id: source
34+ anchors.centerIn: parent // Placed under shape, so it's hidden
34 width: 1
35 width: 1
35 height: 1
36 height: 1
36 hideSource: true
37 hideSource: true
Dash/Apps/AppInfo.qmldeleted−89
@@ -1,89 +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 "../../Components"
20−
21−Row {
22− id: root
23− property alias icon: image.source
24− property alias appName: appNameLabel.text
25− property alias rating: ratingStars.rating
26− property int rated: 0
27− property int reviews: 0
28−
29− spacing: units.gu(2)
30−
31− UbuntuShape {
32− id: imageShape
33− width: units.gu(6)
34− height: units.gu(6)
35− image: Image {
36− id: image
37− sourceSize { width: imageShape.width; height: imageShape.height }
38− asynchronous: true
39− fillMode: Image.PreserveAspectFit
40− }
41− }
42−
43− Column {
44− spacing: units.gu(1)
45−
46− Label {
47− id: appNameLabel
48− fontSize: "large"
49− color: "white"
50− style: Text.Raised
51− styleColor: "black"
52− opacity: .9
53− }
54−
55− Row {
56− visible: root.rating >= 0
57− spacing: units.gu(1)
58−
59− RatingStars {
60− id: ratingStars
61− maximumRating: 10
62− }
63−
64− Label {
65− id: ratedLabel
66− objectName: "ratedLabel"
67− fontSize: "medium"
68− color: "white"
69− style: Text.Raised
70− styleColor: "black"
71− opacity: .6
72− //TRANSLATORS: Number of persons who rated this app
73− text: i18n.tr("(%1)").arg(root.rated)
74− }
75−
76− Label {
77− id: reviewsLabel
78− objectName: "reviewsLabel"
79− fontSize: "medium"
80− color: "white"
81− style: Text.Raised
82− styleColor: "black"
83− opacity: .6
84− //TRANSLATORS: Number of persons who wrote reviews for this app
85− text: i18n.tr("%1 review", "%1 reviews", root.reviews).arg(root.reviews)
86− }
87− }
88− }
89−}
Dash/Apps/AppPreview.qml+9
@@ -44,6 +44,15 @@ GenericPreview {
44 model: previewData.infoMap["more-screenshots"] != null ? previewData.infoMap["more-screenshots"].value : [previewData.image]
44 model: previewData.infoMap["more-screenshots"] != null ? previewData.infoMap["more-screenshots"].value : [previewData.image]
45 cacheBuffer: width * 3
45 cacheBuffer: width * 3
46
46
47+ // FIXME: Because of ListViews inside ListViews inside Flickables inside ListViews (and some more)
48+ // we finally reached the point where this ListView doesn't correctly get swipe input any more but
49+ // instead the parent ListView is the one that is swiped. This MouseArea sort of creates a blocking
50+ // layer to make sure this ListView can be swiped, regardless of what's behind it.
51+ MouseArea {
52+ anchors.fill: parent
53+ enabled: parent.contentWidth > parent.width
54+ }
55+
47 LazyImage {
56 LazyImage {
48 objectName: "placeholderScreenshot"
57 objectName: "placeholderScreenshot"
49 anchors {
58 anchors {
Dash/Apps/ApplicationsFilterGrid.qmldeleted−55
@@ -1,55 +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 "../../Components"
19−import "../../Applications"
20−
21−FilterGrid {
22− id: filterGrid
23−
24− filter: false
25− minimumHorizontalSpacing: units.gu(0.5)
26− maximumNumberOfColumns: 6
27− delegateWidth: units.gu(11)
28− delegateHeight: units.gu(9.5)
29− verticalSpacing: units.gu(2)
30−
31− signal clicked(int index, variant data)
32−
33− delegate: Tile {
34− objectName: "delegate" + index
35− Application {
36− id: application
37− desktopFile: model.dndUri ? stripProtocol(model.dndUri) : model.desktopFile // FIXME: this is temporary
38−
39− function stripProtocol(uri) {
40− var chunks = uri.split('file://')
41− return chunks[chunks.length-1]
42− }
43− }
44−
45− property string icon: model.icon ? model.icon : "../../graphics/applicationIcons/" + application.icon + ".png" // FIXME: this is temporary
46−
47− width: filterGrid.cellWidth
48− height: filterGrid.cellHeight
49− text: model.title ? model.title : application.name // FIXME: this is temporary
50− imageWidth: units.gu(8)
51− imageHeight: units.gu(7.5)
52− source: icon
53− onClicked: filterGrid.clicked(index, application.desktopFile);
54− }
55−}
Dash/Apps/DashPluginFilterGrid.qml+2−4
@@ -37,13 +37,11 @@ GenericFilterGrid {
37 }
37 }
38
38
39 onClicked: {
39 onClicked: {
40− var data = { model: model }
41− filtergrid.clicked(index, data, tile.y)
40+ filtergrid.clicked(index, tile.y)
42 }
41 }
43
42
44 onPressAndHold: {
43 onPressAndHold: {
45− var data = { model: model }
46− filtergrid.pressAndHold(index, data, tile.y)
44+ filtergrid.pressAndHold(index, tile.y)
47 }
45 }
48 }
46 }
49}
47}
Dash/Apps/FrequentlyUsedAppsModel.qml+16−16
@@ -18,54 +18,54 @@ import QtQuick 2.0
18
18
19ListModel {
19ListModel {
20 ListElement {
20 ListElement {
21− uri: "application:///usr/share/applications/dialer-app.desktop"
21+ uri: "application://dialer-app.desktop"
22 icon: "../../graphics/applicationIcons/phone-app.png"
22 icon: "../../graphics/applicationIcons/phone-app.png"
23 category: 0
23 category: 0
24 mimetype: "application/x-desktop"
24 mimetype: "application/x-desktop"
25 title: "Dialer"
25 title: "Dialer"
26 comment: ""
26 comment: ""
27 dndUri: "file:///usr/share/applications/dialer-app.desktop"
27 dndUri: "file:///usr/share/applications/dialer-app.desktop"
28− metadata: ""
28+ metadata: "subscope:applications.scope/applications-non-click.scope"
29 }
29 }
30 ListElement {
30 ListElement {
31− uri: "application:///usr/share/applications/messaging-app.desktop"
31+ uri: "application://messaging-app.desktop"
32 icon: "../../graphics/applicationIcons/messages-app.png"
32 icon: "../../graphics/applicationIcons/messages-app.png"
33 category: 0
33 category: 0
34 mimetype: "application/x-desktop"
34 mimetype: "application/x-desktop"
35 title: "Messaging"
35 title: "Messaging"
36 comment: ""
36 comment: ""
37 dndUri: "file:///usr/share/applications/messaging-app.desktop"
37 dndUri: "file:///usr/share/applications/messaging-app.desktop"
38− metadata: ""
38+ metadata: "subscope:applications.scope/applications-non-click.scope"
39 }
39 }
40 ListElement {
40 ListElement {
41− uri: "application:///usr/share/applications/address-book-app.desktop"
41+ uri: "application://address-book-app.desktop"
42 icon: "../../graphics/applicationIcons/contacts-app.png"
42 icon: "../../graphics/applicationIcons/contacts-app.png"
43 category: 0
43 category: 0
44 mimetype: "application/x-desktop"
44 mimetype: "application/x-desktop"
45 title: "Contacts"
45 title: "Contacts"
46 comment: ""
46 comment: ""
47 dndUri: "file:///usr/share/applications/address-book-app.desktop"
47 dndUri: "file:///usr/share/applications/address-book-app.desktop"
48− metadata: ""
48+ metadata: "subscope:applications.scope/applications-non-click.scope"
49 }
49 }
50 ListElement {
50 ListElement {
51− uri: "application:///usr/share/applications/camera-app.desktop"
51+ uri: "application://camera-app.desktop"
52 icon: "../../graphics/applicationIcons/camera.png"
52 icon: "../../graphics/applicationIcons/camera.png"
53 category: 0
53 category: 0
54 mimetype: "application/x-desktop"
54 mimetype: "application/x-desktop"
55 title: "Camera"
55 title: "Camera"
56 comment: ""
56 comment: ""
57 dndUri: "file:///usr/share/applications/camera-app.desktop"
57 dndUri: "file:///usr/share/applications/camera-app.desktop"
58− metadata: ""
58+ metadata: "subscope:applications.scope/applications-non-click.scope"
59 }
59 }
60 ListElement {
60 ListElement {
61− uri: "application:///usr/share/applications/gallery-app.desktop"
61+ uri: "application://gallery-app.desktop"
62 icon: "../../graphics/applicationIcons/gallery.png"
62 icon: "../../graphics/applicationIcons/gallery.png"
63 category: 0
63 category: 0
64 mimetype: "application/x-desktop"
64 mimetype: "application/x-desktop"
65 title: "Gallery"
65 title: "Gallery"
66 comment: ""
66 comment: ""
67 dndUri: "file:///usr/share/applications/gallery.desktop"
67 dndUri: "file:///usr/share/applications/gallery.desktop"
68− metadata: ""
68+ metadata: "subscope:applications.scope/applications-non-click.scope"
69 }
69 }
70 ListElement {
70 ListElement {
71 uri: "appid://com.ubuntu.developer.webapps.webapp-facebook/webapp-facebook/current-user-version"
71 uri: "appid://com.ubuntu.developer.webapps.webapp-facebook/webapp-facebook/current-user-version"
@@ -75,17 +75,17 @@ ListModel {
75 title: "Facebook"
75 title: "Facebook"
76 comment: ""
76 comment: ""
77 dndUri: "appid://com.ubuntu.developer.webapps.webapp-facebook/webapp-facebook/current-user-version"
77 dndUri: "appid://com.ubuntu.developer.webapps.webapp-facebook/webapp-facebook/current-user-version"
78− metadata: ""
78+ metadata: "subscope:applications.scope/applications-click.scope?app_id=com.ubuntu.developer.webapps.webapp-facebook"
79 }
79 }
80 ListElement {
80 ListElement {
81− uri: "application:///usr/share/applications/webbrowser-app.desktop"
81+ uri: "application://webbrowser-app.desktop"
82 icon: "../../graphics/applicationIcons/browser.png"
82 icon: "../../graphics/applicationIcons/browser.png"
83 category: 0
83 category: 0
84 mimetype: "application/x-desktop"
84 mimetype: "application/x-desktop"
85 title: "Browser"
85 title: "Browser"
86 comment: ""
86 comment: ""
87 dndUri: "file:///usr/share/applications/webbrowser-app.desktop"
87 dndUri: "file:///usr/share/applications/webbrowser-app.desktop"
88− metadata: ""
88+ metadata: "subscope:applications.scope/applications-non-click.scope"
89 }
89 }
90 ListElement {
90 ListElement {
91 uri: "appid://com.ubuntu.developer.webapps.webapp-gmail/webapp-gmail/current-user-version"
91 uri: "appid://com.ubuntu.developer.webapps.webapp-gmail/webapp-gmail/current-user-version"
@@ -95,16 +95,16 @@ ListModel {
95 title: "GMail"
95 title: "GMail"
96 comment: ""
96 comment: ""
97 dndUri: "appid://com.ubuntu.developer.webapps.webapp-gmail/webapp-gmail/current-user-version"
97 dndUri: "appid://com.ubuntu.developer.webapps.webapp-gmail/webapp-gmail/current-user-version"
98− metadata: ""
98+ metadata: "subscope:applications.scope/applications-click.scope?app_id=com.ubuntu.developer.webapps.webapp-gmail"
99 }
99 }
100 ListElement {
100 ListElement {
101− uri: "application:///usr/share/applications/ubuntu-system-settings.desktop"
101+ uri: "application://ubuntu-system-settings.desktop"
102 icon: "../../graphics/applicationIcons/system-settings.png"
102 icon: "../../graphics/applicationIcons/system-settings.png"
103 category: 0
103 category: 0
104 mimetype: "application/x-desktop"
104 mimetype: "application/x-desktop"
105 title: "System Settings"
105 title: "System Settings"
106 comment: ""
106 comment: ""
107 dndUri: "file:///usr/share/applications/ubuntu-system-settings.desktop"
107 dndUri: "file:///usr/share/applications/ubuntu-system-settings.desktop"
108− metadata: ""
108+ metadata: "subscope:applications.scope/applications-non-click.scope"
109 }
109 }
110}
110}
Dash/Apps/RunningApplicationTile.qml−2
@@ -105,8 +105,6 @@ AbstractButton {
105 baseline: parent.bottom
105 baseline: parent.bottom
106 left: parent.left
106 left: parent.left
107 right: parent.right
107 right: parent.right
108− leftMargin: units.gu(1)
109− rightMargin: units.gu(1)
110 }
108 }
111 text: (application) ? application.name : ""
109 text: (application) ? application.name : ""
112
110
Dash/Apps/RunningApplicationsGrid.qml+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/Dash.qml+3
@@ -26,6 +26,8 @@ Showable {
26
26
27 visible: shown
27 visible: shown
28
28
29+ property ListModel searchHistory: SearchHistoryModel {}
30+
29 property alias contentProgress: dashContent.contentProgress
31 property alias contentProgress: dashContent.contentProgress
30 property string showScopeOnLoaded: "home.scope"
32 property string showScopeOnLoaded: "home.scope"
31 property real contentScale: 1.0
33 property real contentScale: 1.0
@@ -63,6 +65,7 @@ Showable {
63 anchors.fill: parent
65 anchors.fill: parent
64 model: filteredScopes
66 model: filteredScopes
65 scopes: scopes
67 scopes: scopes
68+ searchHistory: dash.searchHistory
66 onMovementStarted: dashbar.startNavigation()
69 onMovementStarted: dashbar.startNavigation()
67 onMovementEnded: dashbar.stopNavigation()
70 onMovementEnded: dashbar.stopNavigation()
68 onContentFlickStarted: dashbar.finishNavigation()
71 onContentFlickStarted: dashbar.finishNavigation()
Dash/DashApps.qml+3−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 {
@@ -30,6 +29,9 @@ GenericScopeView {
30 property var mainStageApplicationsModel: shell.applicationManager.mainStageApplications
29 property var mainStageApplicationsModel: shell.applicationManager.mainStageApplications
31 property var sideStageApplicationModel: shell.applicationManager.sideStageApplications
30 property var sideStageApplicationModel: shell.applicationManager.sideStageApplications
32
31
32+ //FIXME an alias to itself shouldn't be required. More than likely a Qt bug. Try removing with newer Qt.
33+ property alias searchHistory: scopeView.searchHistory
34+
33 ListModel {
35 ListModel {
34 id: dummyVisibilityModifier
36 id: dummyVisibilityModifier
35
37
Dash/DashBar.qml+2−2
@@ -35,7 +35,7 @@ Item {
35
35
36 function startNavigation() {
36 function startNavigation() {
37 timeout.stop()
37 timeout.stop()
38− panel.opened = true
38+ panel.open()
39 }
39 }
40
40
41 function stopNavigation() {
41 function stopNavigation() {
@@ -43,7 +43,7 @@ Item {
43 }
43 }
44
44
45 function finishNavigation() {
45 function finishNavigation() {
46− panel.opened = false
46+ panel.close()
47 }
47 }
48
48
49 Timer {
49 Timer {
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+12−5
@@ -27,6 +27,7 @@ Item {
27 property alias currentIndex: dashContentList.currentIndex
27 property alias currentIndex: dashContentList.currentIndex
28
28
29 property ScopeDelegateMapper scopeMapper : ScopeDelegateMapper {}
29 property ScopeDelegateMapper scopeMapper : ScopeDelegateMapper {}
30+ property ListModel searchHistory
30
31
31 signal movementStarted()
32 signal movementStarted()
32 signal movementEnded()
33 signal movementEnded()
@@ -104,8 +105,14 @@ Item {
104
105
105 // 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.
106 onCountChanged: {
107 onCountChanged: {
108+ if (count > 0) {
107− if (currentIndex >= count)
109+ if (currentIndex >= count) {
108− 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+ }
109 }
116 }
110
117
111 delegate:
118 delegate:
@@ -116,8 +123,8 @@ Item {
116 source: scopeMapper.map(scope.id)
123 source: scopeMapper.map(scope.id)
117 objectName: scope.id + " loader"
124 objectName: scope.id + " loader"
118
125
119− readonly property bool previewShown: item.previewShown
126+ readonly property bool previewShown: item ? item.previewShown : false
120− readonly property bool moving: item.moving
127+ readonly property bool moving: item ? item.moving : false
121
128
122 // these are needed for autopilot tests
129 // these are needed for autopilot tests
123 readonly property string scopeId: scope.id
130 readonly property string scopeId: scope.id
@@ -127,7 +134,7 @@ Item {
127 onLoaded: {
134 onLoaded: {
128 item.scope = Qt.binding(function() { return scope })
135 item.scope = Qt.binding(function() { return scope })
129 item.isCurrent = Qt.binding(function() { return visible && ListView.isCurrentItem })
136 item.isCurrent = Qt.binding(function() { return visible && ListView.isCurrentItem })
130− item.searchHistory = Qt.binding(function() { return shell.searchHistory })
137+ item.searchHistory = Qt.binding(function() { return dashContent.searchHistory })
131 dashContentList.movementStarted.connect(item.movementStarted)
138 dashContentList.movementStarted.connect(item.movementStarted)
132 dashContent.positionedAtBeginning.connect(item.positionedAtBeginning)
139 dashContent.positionedAtBeginning.connect(item.positionedAtBeginning)
133 dashContent.scopeLoaded(item.scope.id)
140 dashContent.scopeLoaded(item.scope.id)
Dash/DashFilterGrid.qmlnew file+64
@@ -0,0 +1,64 @@
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+ delegateCreationBegin: filterGrid.delegateCreationBegin
39+ delegateCreationEnd: filterGrid.delegateCreationEnd
40+ height: filterGrid.height
41+ margins: filterGrid.margins
42+ uncollapsedHeight: filterGrid.uncollapsedHeight
43+ verticalSpacing: filterGrid.verticalSpacing
44+
45+ function startFilterAnimation(filter) {
46+ filterGrid.startFilterAnimation(filter)
47+ }
48+
49+ FilterGrid {
50+ id: filterGrid
51+ width: dashFilterGrid.width
52+ minimumHorizontalSpacing: units.gu(0.5)
53+ delegateWidth: units.gu(11)
54+ delegateHeight: units.gu(9.5)
55+ verticalSpacing: units.gu(2)
56+ model: dashFilterGrid.model
57+ filter: dashFilterGrid.filter
58+ highlightIndex: dashFilterGrid.highlightIndex
59+
60+ onFilterChanged: {
61+ dashFilterGrid.filter = filter
62+ }
63+ }
64+}
Dash/DashPreview.qml+10−3
@@ -17,13 +17,15 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import Ubuntu.Components 0.1
18import Ubuntu.Components 0.1
19
19
20−Rectangle {
20+Item {
21 id: root
21 id: root
22
22
23 property int keyboardSize: Qt.inputMethod.visible ? Qt.inputMethod.keyboardRectangle.height : 0
23 property int keyboardSize: Qt.inputMethod.visible ? Qt.inputMethod.keyboardRectangle.height : 0
24 property var previewData
24 property var previewData
25+ property alias showProcessingAction: waitingForActionMouseArea.enabled
25
26
26 property real previewWidthRatio: 0.5
27 property real previewWidthRatio: 0.5
28+ property bool isCurrent: false
27
29
28 property Component previewImages
30 property Component previewImages
29 property Component header
31 property Component header
@@ -35,7 +37,6 @@ Rectangle {
35 readonly property int columnWidth: narrowMode ? contentRow.width : (contentRow.width / 3) - contentRow.spacing
37 readonly property int columnWidth: narrowMode ? contentRow.width : (contentRow.width / 3) - contentRow.spacing
36 readonly property int contentSpacing: units.gu(3)
38 readonly property int contentSpacing: units.gu(3)
37
39
38− color: Qt.rgba(0, 0, 0, .3)
39 clip: true
40 clip: true
40
41
41 function ensureVisible(item) {
42 function ensureVisible(item) {
@@ -60,7 +61,6 @@ Rectangle {
60 anchors.fill: parent
61 anchors.fill: parent
61 }
62 }
62
63
63−
64 Row {
64 Row {
65 id: contentRow
65 id: contentRow
66 anchors {
66 anchors {
@@ -196,4 +196,11 @@ Rectangle {
196 }
196 }
197 sourceComponent: root.header
197 sourceComponent: root.header
198 }
198 }
199+
200+ MouseArea {
201+ id: waitingForActionMouseArea
202+ objectName: "waitingForActionMouseArea"
203+ anchors.fill: parent
204+ enabled: false
205+ }
199}
206}
tests/mocks/QMenuModel/UnityMenuModel.qml → Dash/DashPreviewPlaceholder.qmlrenamed+6−7
@@ -1,9 +1,6 @@
1/*
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
3 *
4− * Authors:
5− * Mirco Müller <mirco.mueller@canonical.com>
6− *
7 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; version 3.
6 * the Free Software Foundation; version 3.
@@ -18,9 +15,11 @@
18 */
15 */
19
16
20import QtQuick 2.0
17import QtQuick 2.0
18+import Ubuntu.Components 0.1
21
19
22−QtObject {
20+DashPreview {
23− property variant busName
21+ ActivityIndicator {
24− property variant actions
22+ anchors.centerIn: parent
25− property variant menuObjectPath
23+ running: true
24+ }
26}
25}
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 real delegateCreationBegin
42+
43+ property real delegateCreationEnd
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/GenericCarousel.qml+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/GenericFilterGrid.qml+13−21
@@ -15,40 +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, var delegateItem, real itemY)
32− signal pressAndHold(int index, var delegateItem, 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− var data = { model: model }
46− filtergrid.clicked(index, data, tile.y)
43+ onClicked: genericFilterGrid.clicked(index, tile.y)
47− }
48−
49− onPressAndHold: {
50− var data = { model: model }
51− filtergrid.pressAndHold(index, data, tile.y)
44+ onPressAndHold: genericFilterGrid.pressAndHold(index, tile.y)
52− }
53 }
45 }
54}
46}
Dash/Generic/GenericFilterGridPotrait.qml+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+4−1
@@ -71,7 +71,10 @@ DashPreview {
71 text: modelData.displayName
71 text: modelData.displayName
72 iconSource: modelData.iconHint
72 iconSource: modelData.iconHint
73 iconPosition: "right"
73 iconPosition: "right"
74+ onClicked: {
74− onClicked: previewData.execute(modelData.id, { })
75+ previewData.execute(modelData.id, { })
76+ genericPreview.showProcessingAction = true;
77+ }
75 }
78 }
76 }
79 }
77 }
80 }
Dash/Generic/WeatherFilterGrid.qml+2−4
@@ -37,13 +37,11 @@ GenericFilterGrid {
37 style: FlatTileStyle {}
37 style: FlatTileStyle {}
38
38
39 onClicked: {
39 onClicked: {
40− var data = { model: model }
41− filtergrid.clicked(index, data, tile.y)
40+ filtergrid.clicked(index, tile.y)
42 }
41 }
43
42
44 onPressAndHold: {
43 onPressAndHold: {
45− var data = { model: model }
46− filtergrid.pressAndHold(index, data, tile.y)
44+ filtergrid.pressAndHold(index, tile.y)
47 }
45 }
48 }
46 }
49}
47}
Dash/GenericScopeView.qml+302−69
@@ -16,19 +16,64 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import Ubuntu.Components 0.1
18import Ubuntu.Components 0.1
19+import Utils 0.1
20+import Unity 0.1
19import "../Components"
21import "../Components"
20import "../Components/ListItems" as ListItems
22import "../Components/ListItems" as ListItems
21
23
22−ScopeView {
24+FocusScope {
23 id: scopeView
25 id: scopeView
26+
27+ property Scope scope
28+ property SortFilterProxyModel categories: categoryFilter
29+ property bool isCurrent
30+ property ListModel searchHistory
31+ property alias moving: categoryView.moving
32+
33+ signal endReached
34+ signal movementStarted
35+ signal positionedAtBeginning
36+
24− readonly property alias previewShown: previewLoader.onScreen
37+ readonly property alias previewShown: previewListView.onScreen
25 property bool enableHeightBehaviorOnNextCreation: false
38 property bool enableHeightBehaviorOnNextCreation: false
26
39
27− moving: categoryView.moving
40+ // FIXME delay the search so that daemons have time to settle, note that
41+ // removing this will break ScopeView::test_changeScope
42+ onScopeChanged: {
43+ if (scope) {
44+ timer.restart();
45+ scope.activateApplication.connect(activateApp);
46+ }
47+ }
48+
49+ function activateApp(appId) {
50+ shell.activateApplication(appId);
51+ }
52+
53+ Binding {
54+ target: scope
55+ property: "isActive"
56+ value: isCurrent
57+ }
58+
59+ Timer {
60+ id: timer
61+ interval: 2000
62+ onTriggered: scope.searchQuery = ""
63+ }
64+
65+ SortFilterProxyModel {
66+ id: categoryFilter
67+ model: scope ? scope.categories : null
68+ dynamicSortFilter: true
69+ filterRole: Categories.RoleCount
70+ filterRegExp: /^0$/
71+ invertMatch: true
72+ }
28
73
29 onIsCurrentChanged: {
74 onIsCurrentChanged: {
30 pageHeader.resetSearch();
75 pageHeader.resetSearch();
31− previewLoader.open = false;
76+ previewListView.open = false;
32 }
77 }
33
78
34 onMovementStarted: categoryView.showHeader()
79 onMovementStarted: categoryView.showHeader()
@@ -57,8 +102,8 @@ ScopeView {
57
102
58 Connections {
103 Connections {
59 target: scopeView.scope
104 target: scopeView.scope
60− onShowDash: previewLoader.open = false;
105+ onShowDash: previewListView.open = false;
61− onHideDash: previewLoader.open = false;
106+ onHideDash: previewListView.open = false;
62 }
107 }
63
108
64 ScopeListView {
109 ScopeListView {
@@ -66,15 +111,22 @@ ScopeView {
66 objectName: "categoryListView"
111 objectName: "categoryListView"
67 anchors.fill: parent
112 anchors.fill: parent
68 model: scopeView.categories
113 model: scopeView.categories
69− forceNoClip: previewLoader.onScreen
114+ forceNoClip: previewListView.onScreen
70
115
71 onAtYEndChanged: if (atYEnd) endReached()
116 onAtYEndChanged: if (atYEnd) endReached()
72 onMovingChanged: if (moving && atYEnd) endReached()
117 onMovingChanged: if (moving && atYEnd) endReached()
73
118
74 property string expandedCategoryId: ""
119 property string expandedCategoryId: ""
120+ signal correctExpandedCategory();
121+
122+ Behavior on contentY {
123+ enabled: previewListView.open
124+ UbuntuNumberAnimation {}
125+ }
75
126
76 delegate: ListItems.Base {
127 delegate: ListItems.Base {
77 id: baseItem
128 id: baseItem
129+ objectName: "dashCategory" + category
78 highlightWhenPressed: false
130 highlightWhenPressed: false
79
131
80 readonly property bool expandable: rendererLoader.item ? rendererLoader.item.expandable : false
132 readonly property bool expandable: rendererLoader.item ? rendererLoader.item.expandable : false
@@ -89,7 +141,7 @@ ScopeView {
89 right: parent.right
141 right: parent.right
90 }
142 }
91
143
92− source: getRenderer(model.renderer, model.contentType, model.rendererHint)
144+ source: getRenderer(model.renderer, model.contentType, model.rendererHint, results)
93
145
94 onLoaded: {
146 onLoaded: {
95 if (item.enableHeightBehavior !== undefined && item.enableHeightBehaviorOnNextCreation !== undefined) {
147 if (item.enableHeightBehavior !== undefined && item.enableHeightBehaviorOnNextCreation !== undefined) {
@@ -123,33 +175,50 @@ ScopeView {
123 Connections {
175 Connections {
124 target: rendererLoader.item
176 target: rendererLoader.item
125 onClicked: {
177 onClicked: {
178+ // Prepare the preview in case activate() triggers a preview only
126− effect.positionPx = mapToItem(categoryView, 0, itemY).y
179+ effect.positionPx = Math.max(mapToItem(categoryView, 0, itemY).y, pageHeader.height + categoryView.stickyHeaderHeight);
127− scopeView.scope.activate(delegateItem.model.uri,
180+ previewListView.categoryId = categoryId
128− delegateItem.model.icon,
181+ previewListView.categoryDelegate = rendererLoader.item
129− delegateItem.model.category,
182+ previewListView.model = target.model;
130− 0,
183+ previewListView.init = true;
131− delegateItem.model.mimetype,
184+ previewListView.currentIndex = index;
132− delegateItem.model.title,
185+
133− delegateItem.model.comment,
186+ var item = target.model.get(index);
134− delegateItem.model.dndUri,
187+
135− delegateItem.model.metadata)
188+ if ((scopeView.scope.id == "applications.scope" && categoryId == "installed")
189+ || (scopeView.scope.id == "home.scope" && categoryId == "applications.scope")) {
190+ scopeView.scope.activate(item.uri, item.icon, item.category, 0, item.mimetype, item.title,
191+ item.comment, item.dndUri, item.metadata)
192+ } else {
193+ previewListView.open = true
194+
195+ scopeView.scope.preview(item.uri, item.icon, item.category, 0, item.mimetype, item.title,
196+ item.comment, item.dndUri, item.metadata)
197+ }
136 }
198 }
137 onPressAndHold: {
199 onPressAndHold: {
138− effect.positionPx = mapToItem(categoryView, 0, itemY).y
200+ effect.positionPx = Math.max(mapToItem(categoryView, 0, itemY).y, pageHeader.height + categoryView.stickyHeaderHeight);
201+ previewListView.categoryId = categoryId
202+ previewListView.categoryDelegate = rendererLoader.item
203+ previewListView.model = target.model;
204+ previewListView.init = true;
205+ previewListView.currentIndex = index;
206+ previewListView.open = true
207+
208+ var item = target.model.get(index)
139− scopeView.scope.preview( delegateItem.model.uri,
209+ scopeView.scope.preview(item.uri, item.icon, item.category, 0, item.mimetype, item.title,
140− delegateItem.model.icon,
210+ item.comment, item.dndUri, item.metadata)
141− delegateItem.model.category,
142− 0,
143− delegateItem.model.mimetype,
144− delegateItem.model.title,
145− delegateItem.model.comment,
146− delegateItem.model.dndUri,
147− delegateItem.model.metadata)
148 }
211 }
149 }
212 }
150 Connections {
213 Connections {
151 target: categoryView
214 target: categoryView
152 onExpandedCategoryIdChanged: {
215 onExpandedCategoryIdChanged: {
216+ collapseAllButExpandedCategory();
217+ }
218+ onCorrectExpandedCategory: {
219+ collapseAllButExpandedCategory();
220+ }
221+ function collapseAllButExpandedCategory() {
153 var item = rendererLoader.item;
222 var item = rendererLoader.item;
154 if (item.expandable) {
223 if (item.expandable) {
155 var shouldFilter = categoryId != categoryView.expandedCategoryId;
224 var shouldFilter = categoryId != categoryView.expandedCategoryId;
@@ -157,13 +226,15 @@ ScopeView {
157 // If the filter animation will be seen start it, otherwise, just flip the switch
226 // If the filter animation will be seen start it, otherwise, just flip the switch
158 var shrinkingVisible = shouldFilter && y + item.collapsedHeight < categoryView.height;
227 var shrinkingVisible = shouldFilter && y + item.collapsedHeight < categoryView.height;
159 var growingVisible = !shouldFilter && y + height < categoryView.height;
228 var growingVisible = !shouldFilter && y + height < categoryView.height;
229+ if (!previewListView.open || !shouldFilter) {
160− if (shrinkingVisible || growingVisible) {
230+ if (shrinkingVisible || growingVisible) {
161− item.startFilterAnimation(shouldFilter)
231+ item.startFilterAnimation(shouldFilter)
162− } else {
232+ } else {
163− item.filter = shouldFilter;
233+ item.filter = shouldFilter;
164− }
234+ }
165− if (!shouldFilter) {
235+ if (!shouldFilter && !previewListView.open) {
166− categoryView.maximizeVisibleArea(index, item.uncollapsedHeight);
236+ categoryView.maximizeVisibleArea(index, item.uncollapsedHeight);
237+ }
167 }
238 }
168 }
239 }
169 }
240 }
@@ -201,6 +272,7 @@ ScopeView {
201
272
202 sectionProperty: "name"
273 sectionProperty: "name"
203 sectionDelegate: ListItems.Header {
274 sectionDelegate: ListItems.Header {
275+ objectName: "dashSectionHeader" + delegate.category
204 property var delegate: categoryView.item(delegateIndex)
276 property var delegate: categoryView.item(delegateIndex)
205 width: categoryView.width
277 width: categoryView.width
206 text: section
278 text: section
@@ -223,6 +295,7 @@ ScopeView {
223 text: scopeView.scope.name
295 text: scopeView.scope.name
224 searchEntryEnabled: true
296 searchEntryEnabled: true
225 scope: scopeView.scope
297 scope: scopeView.scope
298+ searchHistory: scopeView.searchHistory
226 }
299 }
227 }
300 }
228
301
@@ -232,31 +305,37 @@ ScopeView {
232 }
305 }
233 }
306 }
234
307
235− function getRenderer(rendererId, contentType, rendererHint) {
308+ function getRenderer(rendererId, contentType, rendererHint, results) {
236 if (rendererId == "default") {
309 if (rendererId == "default") {
237 rendererId = getDefaultRendererId(contentType);
310 rendererId = getDefaultRendererId(contentType);
238 }
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+ }
239 switch (rendererId) {
317 switch (rendererId) {
318+ case "carousel": {
319+ switch (contentType) {
320+ case "music": return "Music/MusicCarousel.qml";
321+ case "video": return "Video/VideoCarousel.qml";
322+ default: return "Generic/GenericCarousel.qml";
323+ }
324+ }
240 case "grid": {
325 case "grid": {
241 switch (contentType) {
326 switch (contentType) {
242− case "video": return "Video/VideoFilterGrid.qml";
243− case "music": return "Music/MusicFilterGrid.qml";
244 case "apps": {
327 case "apps": {
245 if (rendererHint == "toggled")
328 if (rendererHint == "toggled")
246 return "Apps/DashPluginFilterGrid.qml";
329 return "Apps/DashPluginFilterGrid.qml";
247 else
330 else
248 return "Generic/GenericFilterGrid.qml";
331 return "Generic/GenericFilterGrid.qml";
249 }
332 }
333+ case "music": return "Music/MusicFilterGrid.qml";
334+ case "video": return "Video/VideoFilterGrid.qml";
250 case "weather": return "Generic/WeatherFilterGrid.qml";
335 case "weather": return "Generic/WeatherFilterGrid.qml";
251 default: return "Generic/GenericFilterGrid.qml";
336 default: return "Generic/GenericFilterGrid.qml";
252 }
337 }
253 }
338 }
254− case "carousel": {
255− switch (contentType) {
256− case "music": return "Music/MusicCarousel.qml";
257− default: return "Generic/GenericCarousel.qml";
258− }
259− }
260 case "special": {
339 case "special": {
261 switch (contentType) {
340 switch (contentType) {
262 case "apps": return "Apps/RunningApplicationsGrid.qml";
341 case "apps": return "Apps/RunningApplicationsGrid.qml";
@@ -269,6 +348,7 @@ ScopeView {
269
348
270 OpenEffect {
349 OpenEffect {
271 id: effect
350 id: effect
351+ objectName: "openEffect"
272 anchors {
352 anchors {
273 fill: parent
353 fill: parent
274 bottomMargin: -bottomOverflow
354 bottomMargin: -bottomOverflow
@@ -281,29 +361,44 @@ ScopeView {
281 topOpacity: (1 - gap * 1.2)
361 topOpacity: (1 - gap * 1.2)
282 bottomGapPx: positionPx + gap * (targetBottomGapPx - positionPx)
362 bottomGapPx: positionPx + gap * (targetBottomGapPx - positionPx)
283 bottomOverflow: units.gu(20)
363 bottomOverflow: units.gu(20)
284− bottomOpacity: 1 - (gap * 0.8)
364+ live: !expansionAnimation.running
285
365
286 property int targetBottomGapPx: height - units.gu(8) - bottomOverflow
366 property int targetBottomGapPx: height - units.gu(8) - bottomOverflow
287− property real gap: previewLoader.open ? 1.0 : 0.0
367+ property real gap: previewListView.open ? 1.0 : 0.0
288
368
289 Behavior on gap {
369 Behavior on gap {
290 NumberAnimation {
370 NumberAnimation {
371+ id: expansionAnimation
291 duration: 200
372 duration: 200
292 easing.type: Easing.InOutQuad
373 easing.type: Easing.InOutQuad
293 onRunningChanged: {
374 onRunningChanged: {
294− if (!previewLoader.open && !running) {
375+ if (!previewListView.open && !running) {
295− previewLoader.onScreen = false
376+ previewListView.onScreen = false
296 }
377 }
297 }
378 }
298 }
379 }
299 }
380 }
381+ Behavior on positionPx {
382+ enabled: previewListView.open
383+ UbuntuNumberAnimation {}
384+ }
300 }
385 }
301
386
302 Connections {
387 Connections {
303 target: scopeView.scope
388 target: scopeView.scope
304 onPreviewReady: {
389 onPreviewReady: {
390+ if (previewListView.init) {
391+ // Preview was triggered because of a click on the item. Need to expand now.
392+ if (!previewListView.open) {
393+ previewListView.open = true
394+ }
395+
396+ var index = previewListView.currentIndex
397+ previewListView.currentIndex = -1
398+ previewListView.currentIndex = index
399+ previewListView.init = false
400+ }
305− previewLoader.previewData = preview
401+ previewListView.currentItem.previewData = preview
306− previewLoader.open = true
307 }
402 }
308 }
403 }
309
404
@@ -311,18 +406,9 @@ ScopeView {
311 id: previewDelegateMapper
406 id: previewDelegateMapper
312 }
407 }
313
408
314− Connections {
409+ ListView {
315− ignoreUnknownSignals: true
410+ id: previewListView
316− target: previewLoader.valid ? previewLoader.item : null
411+ objectName: "previewListView"
317− onClose: {
318− previewLoader.open = false
319− }
320− }
321−
322− Loader {
323− objectName: "previewLoader"
324− id: previewLoader
325− property var previewData
326 height: effect.bottomGapPx - effect.topGapPx
412 height: effect.bottomGapPx - effect.topGapPx
327 anchors {
413 anchors {
328 top: parent.top
414 top: parent.top
@@ -330,32 +416,179 @@ ScopeView {
330 left: parent.left
416 left: parent.left
331 right: parent.right
417 right: parent.right
332 }
418 }
333− source: onScreen ? previewDelegateMapper.map(previewLoader.previewData.rendererName) : ""
419+ orientation: ListView.Horizontal
420+ highlightRangeMode: ListView.StrictlyEnforceRange
421+ snapMode: ListView.SnapOneItem
422+ boundsBehavior: Flickable.DragAndOvershootBounds
423+ highlightMoveDuration: 250
424+ flickDeceleration: units.gu(625)
425+ maximumFlickVelocity: width * 5
426+ cacheBuffer: 0
427+
428+ // To be set before opening the preview
429+ property string categoryId: ""
430+ property var categoryDelegate
431+
432+ // because the ListView is built asynchronous, setting the
433+ // currentIndex directly won't work. We need to refresh it
434+ // when the first preview is ready to be displayed.
435+ property bool init: true
436+
437+ onCurrentIndexChanged: {
438+ var row = Math.floor(currentIndex / categoryDelegate.columns);
439+ if (categoryDelegate.collapsedRowCount <= row) {
440+ categoryView.expandedCategoryId = categoryId
441+ }
442+
443+ if (open) {
444+ categoryDelegate.highlightIndex = currentIndex
445+ }
446+
447+ if (!init && model !== undefined) {
448+ var item = model.get(currentIndex)
449+ scopeView.scope.preview(item.uri, item.icon, item.category, 0, item.mimetype, item.title, item.comment, item.dndUri, item.metadata)
450+ }
451+
452+ // Adjust contentY in case we need to change to it to show the next row
453+ if (categoryDelegate.rows > 1) {
454+ var itemY = categoryView.contentItem.mapFromItem(categoryDelegate.currentItem).y;
455+
456+ // Find new contentY and effect.postionPx
457+ var newContentY = itemY - effect.positionPx - categoryDelegate.verticalSpacing;
458+
459+ // Make sure the item is not covered by a header. Move the effect split down if necessary
460+ var headerHeight = pageHeader.height + categoryView.stickyHeaderHeight;
461+ var effectAdjust = Math.max(effect.positionPx, headerHeight);
462+
463+ // Make sure we don't overscroll the listview. If yes, adjust effect position
464+ if (newContentY < 0) {
465+ effectAdjust += newContentY;
466+ newContentY = 0;
467+ }
468+ if (newContentY > Math.max(0, categoryView.contentHeight - categoryView.height)) {
469+ effectAdjust += -(categoryView.contentHeight - categoryView.height) + newContentY
470+ newContentY = categoryView.contentHeight - categoryView.height;
471+ }
472+
473+ effect.positionPx = effectAdjust;
474+ categoryView.contentY = newContentY;
475+ }
476+ }
334
477
335 property bool open: false
478 property bool open: false
336 property bool onScreen: false
479 property bool onScreen: false
337− property bool valid: item !== null
338
480
339 onOpenChanged: {
481 onOpenChanged: {
340 if (open) {
482 if (open) {
341− onScreen = true
483+ onScreen = true;
484+ categoryDelegate.highlightIndex = currentIndex;
485+ pageHeader.unfocus();
486+ } else {
487+ // Cancel any pending preview requests or actions
488+ if (previewListView.currentItem.previewData !== undefined) {
489+ previewListView.currentItem.previewData.cancelAction();
490+ }
491+ scopeView.scope.cancelActivation();
492+ model = undefined;
493+ categoryView.correctExpandedCategory();
494+ categoryDelegate.highlightIndex = -1;
342 }
495 }
343 }
496 }
344
497
345− onLoaded: {
498+ Rectangle {
346− item.previewData = Qt.binding(function() { return previewLoader.previewData })
499+ anchors.fill: parent
500+ color: Qt.rgba(0, 0, 0, .3)
501+ z: -1
347 }
502 }
503+
504+ delegate: Loader {
505+ id: previewLoader
506+ objectName: "previewLoader" + index
507+ height: previewListView.height
508+ width: previewListView.width
509+ asynchronous: true
510+ source: previewListView.onScreen ?
511+ (previewData !== undefined ? previewDelegateMapper.map(previewData.rendererName) : "DashPreviewPlaceholder.qml") : ""
512+
513+ onPreviewDataChanged: {
514+ if (previewData !== undefined && source.toString().indexOf("DashPreviewPlaceholder.qml") != -1) {
515+ previewLoader.opacity = 0;
516+ }
517+ }
518+
519+ onSourceChanged: {
520+ if (previewData !== undefined) {
521+ fadeIn.start()
522+ }
523+ }
524+
525+ PropertyAnimation {
526+ id: fadeIn
527+ target: previewLoader
528+ property: "opacity"
529+ from: 0.0
530+ to: 1.0
531+ duration: UbuntuAnimation.BriskDuration
532+ }
533+
534+ property var previewData
535+ property bool valid: item !== null
536+
537+ onLoaded: {
538+ if (previewListView.onScreen && previewData !== undefined) {
539+ item.previewData = Qt.binding(function() { return previewData })
540+ item.isCurrent = Qt.binding(function() { return ListView.isCurrentItem })
541+ }
542+ }
543+
544+ Connections {
545+ ignoreUnknownSignals: true
546+ target: item
547+ onClose: {
548+ previewListView.open = false
549+ }
550+ }
551+
552+ function closePreviewSpinner() {
553+ if (item) {
554+ item.showProcessingAction = false;
555+ }
556+ }
557+ }
558+ }
559+
560+ Image {
561+ objectName: "pointerArrow"
562+ anchors {
563+ top: previewListView.bottom
564+ left: parent.left
565+ leftMargin: previewListView.categoryDelegate !== undefined && previewListView.categoryDelegate.currentItem ?
566+ previewListView.categoryDelegate.currentItem.center + (-width + margins) / 2 : 0
567+
568+ Behavior on leftMargin {
569+ SmoothedAnimation {
570+ duration: UbuntuAnimation.FastDuration
571+ }
572+ }
573+ }
574+ height: units.gu(1)
575+ width: units.gu(2)
576+ property int margins: previewListView.categoryDelegate ? previewListView.categoryDelegate.margins : 0
577+ opacity: previewListView.open ? .5 : 0
578+
579+ source: "graphics/tooltip_arrow.png"
348 }
580 }
349
581
350 // TODO: Move as InverseMouseArea to DashPreview
582 // TODO: Move as InverseMouseArea to DashPreview
351 MouseArea {
583 MouseArea {
584+ objectName: "closePreviewMouseArea"
352− enabled: previewLoader.onScreen
585+ enabled: previewListView.onScreen
353 anchors {
586 anchors {
354 fill: parent
587 fill: parent
355 topMargin: effect.bottomGapPx
588 topMargin: effect.bottomGapPx
356 }
589 }
357 onClicked: {
590 onClicked: {
358− previewLoader.open = false;
591+ previewListView.open = false;
359 }
592 }
360 }
593 }
361}
594}
Dash/Music/AlbumTile.qmldeleted−116
@@ -1,116 +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−
20−AbstractButton {
21− id: root
22− property url source
23− property alias album: albumLabel.text
24− property alias artist: artistLabel.text
25− property alias iconWidth: icon.width
26− property alias iconHeight: icon.height
27−
28− UbuntuShape {
29− id: icon
30− anchors {
31− top: parent.top
32− horizontalCenter: parent.horizontalCenter
33− }
34− radius: "medium"
35− image: Image {
36− source: root.source
37− sourceSize { width: icon.width; height: icon.height }
38− asynchronous: true
39− cache: false
40− }
41− }
42−
43− UbuntuShape {
44− id: borderPressed
45−
46− anchors.fill: icon
47− radius: "medium"
48− borderSource: "radius_pressed.sci"
49− opacity: root.pressed ? 1.0 : 0.0
50− Behavior on opacity { NumberAnimation { duration: 200; easing.type: Easing.OutQuint } }
51− }
52−
53− Item {
54− id: artistContainer
55− anchors {
56− left: parent.left
57− right: parent.right
58− top: icon.bottom
59− }
60− height: units.gu(2)
61−
62− Label {
63− id: artistLabel
64− anchors {
65− baseline: parent.bottom
66− left: parent.left
67− right: parent.right
68− leftMargin: units.gu(1)
69− rightMargin: units.gu(1)
70− }
71−
72− color: Theme.palette.selected.backgroundText
73− opacity: 0.9
74− style: Text.Raised
75− styleColor: "black"
76− fontSize: "small"
77− elide: Text.ElideMiddle
78− horizontalAlignment: Text.AlignHCenter
79− }
80− }
81−
82− Item {
83− anchors {
84− left: parent.left
85− right: parent.right
86− top: artistContainer.bottom
87− }
88− height: units.gu(1.5)
89−
90− Label {
91− id: albumLabel
92− anchors {
93− baseline: parent.bottom
94− left: parent.left
95− right: parent.right
96− leftMargin: units.gu(1)
97− rightMargin: units.gu(1)
98− }
99−
100− color: Theme.palette.selected.backgroundText
101− opacity: 0.9
102− style: Text.Raised
103− styleColor: "black"
104− fontSize: "small"
105− font.weight: Font.Light
106− elide: Text.ElideMiddle
107− horizontalAlignment: Text.AlignHCenter
108− }
109− }
110−
111− GridView.onRemove: SequentialAnimation {
112− PropertyAction { target: root; property: "GridView.delayRemove"; value: true }
113− NumberAnimation { target: root; property: "opacity"; from: 1; to: 0; duration: 200; easing.type: Easing.InOutQuad }
114− PropertyAction { target: root; property: "GridView.delayRemove"; value: false }
115− }
116−}
Dash/Music/MusicCarousel.qml+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/MusicFilterGrid.qml+7−15
@@ -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,14 +42,7 @@ GenericFilterGrid {
43 artist: model.title
42 artist: model.title
44 }
43 }
45
44
46− onClicked: {
47− var data = { model: model }
48− filtergrid.clicked(index, data, tile.y)
45+ onClicked: musicFilterGrid.clicked(index, tile.y)
49− }
50−
51− onPressAndHold: {
52− var data = { model: model }
53− filtergrid.pressAndHold(index, data, tile.y)
46+ onPressAndHold: musicFilterGrid.pressAndHold(index, tile.y)
54− }
55 }
47 }
56}
48}
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/graphics/music_progress_bg.pngnew file

Binary file not shown.

Dash/PreviewDelegateMapper.qml+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/ScopeView.qmldeleted−65
@@ -1,65 +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 Utils 0.1
19−import Unity 0.1
20−
21−FocusScope {
22− property Scope scope
23− property SortFilterProxyModel categories: categoryFilter
24− property bool isCurrent
25− property ListModel searchHistory
26− property bool moving: false
27−
28− signal endReached
29− signal movementStarted
30− signal positionedAtBeginning
31−
32− // FIXME delay the search so that daemons have time to settle, note that
33− // removing this will break ScopeView::test_changeScope
34− onScopeChanged: {
35− if (scope) {
36− timer.restart();
37− scope.activateApplication.connect(activateApp);
38− }
39− }
40−
41− function activateApp(desktopFilePath) {
42− shell.activateApplication(desktopFilePath);
43− }
44−
45− Binding {
46− target: scope
47− property: "isActive"
48− value: isCurrent
49− }
50−
51− Timer {
52− id: timer
53− interval: 2000
54− onTriggered: scope.searchQuery = ""
55− }
56−
57− SortFilterProxyModel {
58− id: categoryFilter
59− model: scope ? scope.categories : null
60− dynamicSortFilter: true
61− filterRole: Categories.RoleCount
62− filterRegExp: /^0$/
63− invertMatch: true
64− }
65−}
Dash/SearchableResultModel.qml+4
@@ -25,6 +25,10 @@ SortFilterProxyModel {
25
25
26 filterRole: CategoryResults.RoleTitle
26 filterRole: CategoryResults.RoleTitle
27
27
28+ function get(index) {
29+ return model.get(mapToSource(index))
30+ }
31+
28 onSearchQueryChanged: {
32 onSearchQueryChanged: {
29 if (searchQuery.length == 0) {
33 if (searchQuery.length == 0) {
30 filterRegExp = RegExp("");
34 filterRegExp = RegExp("");
Dash/Video/VideosCarousel.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/VideoFilterGrid.qml+8−15
@@ -15,40 +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− var data = { model: model }
46− filtergrid.clicked(index, data, tile.y)
44+ onClicked: videoFilterGrid.clicked(index, tile.y)
47− }
48−
49− onPressAndHold: {
50− var data = { model: model }
51− filtergrid.pressAndHold(index, data, tile.y)
45+ onPressAndHold: videoFilterGrid.pressAndHold(index, tile.y)
52− }
53 }
46 }
54}
47}
Dash/Video/VideoInfo.qmldeleted−84
@@ -1,84 +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 QtQuick.XmlListModel 2.0
19−
20−Item {
21− id: info
22− property string source
23−
24− property bool ready: nfo.status == XmlListModel.Ready || nfoTV.status == XmlListModel.Ready
25− property bool isMovie: true
26− property variant video: null
27− property variant tvShow: null
28−
29− function getActors() {
30− var c = []
31− if (video.actor1) c.push(video.actor1)
32− if (video.actor2) c.push(video.actor2)
33− if (video.actor3) c.push(video.actor3)
34− return c
35− }
36−
37− onSourceChanged: isMovie = true
38−
39− XmlListModel {
40− id: nfo
41− source: info.source
42− query: (isMovie) ? "/movie" : "/episodedetails"
43−
44− XmlRole { name: "title"; query: "title/string()" }
45− XmlRole { name: "year"; query: "year/number()" }
46− XmlRole { name: "runtime"; query: "runtime/number()" }
47− XmlRole { name: "rating"; query: "rating/number()" }
48− XmlRole { name: "plot"; query: "plot/string()" }
49− XmlRole { name: "director"; query: "director[1]/string()" }
50− XmlRole { name: "actor1"; query: "actor[1]/name/string()" }
51− XmlRole { name: "actor2"; query: "actor[2]/name/string()" }
52− XmlRole { name: "actor3"; query: "actor[3]/name/string()" }
53− XmlRole { name: "author"; query: "author[1]/string()" }
54− XmlRole { name: "season"; query: "season/number()" }
55− XmlRole { name: "episode"; query: "episode/number()" }
56−
57− XmlRole { name: "rentPrice"; query: "rent_price/string()" }
58− XmlRole { name: "buyPrice"; query: "buy_price/string()" }
59− XmlRole { name: "expires"; query: "expires/string()" }
60−
61− onStatusChanged: if (status == XmlListModel.Ready) {
62− if (count > 0) info.video = nfo.get(0)
63− else info.isMovie = false
64− } else if (status == XmlListModel.Error) info.isMovie = false
65− }
66−
67− XmlListModel {
68− id: nfoTV
69− source: (nfo.isMovie) ? "" : info.source.substring(0, info.source.lastIndexOf("/") + 1) + "tvshow.nfo"
70− query: "/tvshow"
71−
72− XmlRole { name: "title"; query: "title/string()" }
73−
74− onStatusChanged: if (status == XmlListModel.Ready) {
75− if (count > 0) info.tvShow = nfoTV.get(0)
76− } else if (status == XmlListModel.Error) {
77− // Search for tvshow.nfo in the directory above this one to cater
78− // for directory layout Show/Season
79− var path = info.source.split("/")
80− path.splice(-2, 2, "tvshow.nfo")
81− source = path.join("/")
82− }
83− }
84−}
Dash/graphics/phone/screenshots/angrybirds@12.pngdeleted

Binary file not shown.

Dash/graphics/tooltip_arrow@27.pngnew file

Binary file not shown.

Greeter/Greeter.qml+5−8
@@ -19,7 +19,6 @@ import Ubuntu.Components 0.1
19import Ubuntu.Gestures 0.1
19import Ubuntu.Gestures 0.1
20import LightDM 0.1 as LightDM
20import LightDM 0.1 as LightDM
21import "../Components"
21import "../Components"
22−import "../Components/Math.js" as MathLocal
23
22
24Showable {
23Showable {
25 id: greeter
24 id: greeter
@@ -29,7 +28,7 @@ Showable {
29 property url defaultBackground
28 property url defaultBackground
30
29
31 // 1 when fully shown and 0 when fully hidden
30 // 1 when fully shown and 0 when fully hidden
32− property real showProgress: MathLocal.clamp((width + x) / width, 0, 1)
31+ property real showProgress: MathUtils.clamp((width + x) / width, 0, 1)
33
32
34 showAnimation: StandardAnimation { property: "x"; to: 0 }
33 showAnimation: StandardAnimation { property: "x"; to: 0 }
35 hideAnimation: StandardAnimation { property: "x"; to: -width }
34 hideAnimation: StandardAnimation { property: "x"; to: -width }
@@ -52,7 +51,7 @@ Showable {
52 signal unlocked(int uid)
51 signal unlocked(int uid)
53
52
54 onRightTeaserPressedChanged: {
53 onRightTeaserPressedChanged: {
55− if (rightTeaserPressed && !locked) {
54+ if (rightTeaserPressed && (!locked || narrowMode) && x == 0) {
56 teasingTimer.start();
55 teasingTimer.start();
57 }
56 }
58 }
57 }
@@ -64,6 +63,7 @@ Showable {
64 property var model: LightDM.Users
63 property var model: LightDM.Users
65 property int currentIndex: 0
64 property int currentIndex: 0
66 property var infographicModel: LightDM.Infographic
65 property var infographicModel: LightDM.Infographic
66+ readonly property int backgroundTopMargin: -greeter.y
67
67
68 source: required ? "GreeterContent.qml" : ""
68 source: required ? "GreeterContent.qml" : ""
69
69
@@ -89,7 +89,7 @@ Showable {
89 when: teasingTimer.running
89 when: teasingTimer.running
90 PropertyChanges {
90 PropertyChanges {
91 target: greeter
91 target: greeter
92− x: -units.gu(2)
92+ x: -dragHandle.hintDisplacement
93 }
93 }
94 }
94 }
95 ]
95 ]
@@ -113,10 +113,7 @@ Showable {
113 anchors.bottom: parent.bottom
113 anchors.bottom: parent.bottom
114 anchors.right: parent.right
114 anchors.right: parent.right
115
115
116− // no need for requiring a directional drag since we are covering the screen
116+ hintDisplacement: units.gu(2)
117− // anyway (i.e., no change user could be trying to interact with some other
118− // UI element)
119− distanceThreshold: 0
120
117
121 enabled: greeter.narrowMode || !greeter.locked
118 enabled: greeter.narrowMode || !greeter.locked
122
119
Greeter/GreeterContent.qml+23−20
@@ -24,7 +24,7 @@ MouseArea {
24 id: root
24 id: root
25 anchors.fill: parent
25 anchors.fill: parent
26
26
27− property bool ready: wallpaper.source == "" || wallpaper.status == Image.Ready || wallpaper.status == Image.Error
27+ property bool ready: background.source == "" || background.status == Image.Ready || background.status == Image.Error
28 property bool leftTeaserPressed: teasingMouseArea.pressed &&
28 property bool leftTeaserPressed: teasingMouseArea.pressed &&
29 teasingMouseArea.mouseX < teasingMouseArea.width / 2
29 teasingMouseArea.mouseX < teasingMouseArea.width / 2
30 property bool rightTeaserPressed: teasingMouseArea.pressed &&
30 property bool rightTeaserPressed: teasingMouseArea.pressed &&
@@ -34,33 +34,36 @@ MouseArea {
34 signal unlocked(int uid)
34 signal unlocked(int uid)
35
35
36 Rectangle {
36 Rectangle {
37− // In case wallpaper fails to load
37+ // In case background fails to load
38− id: wallpaperBackup
38+ id: backgroundBackup
39 anchors.fill: parent
39 anchors.fill: parent
40 color: "black"
40 color: "black"
41 }
41 }
42
42
43 property url backgroundValue: AccountsService.backgroundFile != undefined && AccountsService.backgroundFile.length > 0 ? AccountsService.backgroundFile : greeter.defaultBackground
43 property url backgroundValue: AccountsService.backgroundFile != undefined && AccountsService.backgroundFile.length > 0 ? AccountsService.backgroundFile : greeter.defaultBackground
44− onBackgroundValueChanged: wallpaper.source = backgroundValue
44+ onBackgroundValueChanged: background.source = backgroundValue
45
45
46 CrossFadeImage {
46 CrossFadeImage {
47− id: wallpaper
47+ id: background
48− objectName: "wallpaper"
48+ objectName: "greeterBackground"
49+ anchors {
49− anchors.fill: parent
50+ fill: parent
51+ topMargin: backgroundTopMargin
52+ }
50 fillMode: Image.PreserveAspectCrop
53 fillMode: Image.PreserveAspectCrop
51 }
54 }
52
55
53 // See Shell.qml's backgroundSettings treatment for why we need a separate
56 // See Shell.qml's backgroundSettings treatment for why we need a separate
54 // Image, but it boils down to avoiding binding loop detection.
57 // Image, but it boils down to avoiding binding loop detection.
55 Image {
58 Image {
56− source: wallpaper.source
59+ source: background.source
57 height: 0
60 height: 0
58 width: 0
61 width: 0
59 sourceSize.height: 0
62 sourceSize.height: 0
60 sourceSize.width: 0
63 sourceSize.width: 0
61 onStatusChanged: {
64 onStatusChanged: {
62 if (status == Image.Error && source != greeter.defaultBackground) {
65 if (status == Image.Error && source != greeter.defaultBackground) {
63− wallpaper.source = greeter.defaultBackground
66+ background.source = greeter.defaultBackground
64 }
67 }
65 }
68 }
66 }
69 }
@@ -71,17 +74,6 @@ MouseArea {
71 opacity: 0.4
74 opacity: 0.4
72 }
75 }
73
76
74− Clock {
75− id: clock
76− visible: narrowMode
77−
78− anchors {
79− top: parent.top
80− topMargin: units.gu(2)
81− horizontalCenter: parent.horizontalCenter
82− }
83− }
84−
85 MouseArea {
77 MouseArea {
86 id: teasingMouseArea
78 id: teasingMouseArea
87 anchors.fill: parent
79 anchors.fill: parent
@@ -160,4 +152,15 @@ MouseArea {
160 right: root.right
152 right: root.right
161 }
153 }
162 }
154 }
155+
156+ Clock {
157+ id: clock
158+ visible: narrowMode
159+
160+ anchors {
161+ top: parent.top
162+ topMargin: units.gu(2)
163+ horizontalCenter: parent.horizontalCenter
164+ }
165+ }
163}
166}
Greeter/Lockscreen.qml+14−22
@@ -17,7 +17,6 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import Ubuntu.Components 0.1
18import Ubuntu.Components 0.1
19import "../Components"
19import "../Components"
20−import LightDM 0.1 as LightDM
21
20
22Showable {
21Showable {
23 id: root
22 id: root
@@ -37,7 +36,7 @@ Showable {
37
36
38 property url background: ""
37 property url background: ""
39
38
40− signal unlocked()
39+ signal entered(string passphrase)
41 signal cancel()
40 signal cancel()
42 signal emergencyCall()
41 signal emergencyCall()
43
42
@@ -53,16 +52,24 @@ Showable {
53 pinPadLoader.resetting = false;
52 pinPadLoader.resetting = false;
54 }
53 }
55
54
55+ function clear(showAnimation) {
56+ pinPadLoader.item.clear(showAnimation);
57+ }
58+
56 Rectangle {
59 Rectangle {
57− // In case wallpaper fails to load or is undefined
60+ // In case background fails to load or is undefined
58− id: wallpaperBackup
61+ id: backgroundBackup
59 anchors.fill: parent
62 anchors.fill: parent
60 color: "black"
63 color: "black"
61 }
64 }
62
65
63 Image {
66 Image {
64− id: wallpaper
67+ id: backgroundImage
68+ objectName: "lockscreenBackground"
69+ anchors {
65− anchors.fill: parent
70+ fill: parent
71+ topMargin: backgroundTopMargin
72+ }
66 source: root.required ? root.background : ""
73 source: root.required ? root.background : ""
67 fillMode: Image.PreserveAspectCrop
74 fillMode: Image.PreserveAspectCrop
68 }
75 }
@@ -88,7 +95,7 @@ Showable {
88 target: pinPadLoader.item
95 target: pinPadLoader.item
89
96
90 onEntered: {
97 onEntered: {
91− LightDM.Greeter.respond(passphrase);
98+ root.entered(passphrase);
92 }
99 }
93
100
94 onCancel: {
101 onCancel: {
@@ -146,19 +153,4 @@ Showable {
146 anchors.horizontalCenter: parent.horizontalCenter
153 anchors.horizontalCenter: parent.horizontalCenter
147 }
154 }
148 }
155 }
149−
150− Connections {
151− target: LightDM.Greeter
152−
153− onAuthenticationComplete: {
154− if (LightDM.Greeter.promptless) {
155− return;
156− }
157− if (LightDM.Greeter.authenticated) {
158− root.unlocked();
159− } else {
160− pinPadLoader.item.clear(true);
161− }
162− }
163− }
164}
156}
Greeter/LoginList.qml+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/PassphraseLockscreen.qml+1
@@ -82,6 +82,7 @@ Item {
82
82
83 WrongPasswordAnimation {
83 WrongPasswordAnimation {
84 id: wrongPasswordAnimation
84 id: wrongPasswordAnimation
85+ objectName: "wrongPasswordAnimation"
85 target: pinentryField
86 target: pinentryField
86 }
87 }
87}
88}
Greeter/PinLockscreen.qml+35−4
@@ -27,7 +27,7 @@ Column {
27 property alias placeholderText: pinentryField.placeholderText
27 property alias placeholderText: pinentryField.placeholderText
28 property int padWidth: units.gu(34)
28 property int padWidth: units.gu(34)
29 property int padHeight: units.gu(28)
29 property int padHeight: units.gu(28)
30− property int pinLength: 4
30+ property int pinLength: -1
31
31
32 signal entered(string passphrase)
32 signal entered(string passphrase)
33 signal cancel()
33 signal cancel()
@@ -65,6 +65,9 @@ Column {
65 Label {
65 Label {
66 id: pinentryFieldLabel
66 id: pinentryFieldLabel
67 anchors.centerIn: parent
67 anchors.centerIn: parent
68+ width: parent.width - (backspaceIcon.width + backspaceIcon.anchors.rightMargin) * 2
69+ elide: Text.ElideMiddle
70+ horizontalAlignment: Text.AlignHCenter
68 font.pixelSize: units.dp(44)
71 font.pixelSize: units.dp(44)
69 color: "#f3f3e7"
72 color: "#f3f3e7"
70 opacity: 0.6
73 opacity: 0.6
@@ -76,6 +79,26 @@ Column {
76 text: parent.placeholderText
79 text: parent.placeholderText
77 visible: pinentryFieldLabel.text.length == 0
80 visible: pinentryFieldLabel.text.length == 0
78 }
81 }
82+
83+ Icon {
84+ id: backspaceIcon
85+ objectName: "backspaceIcon"
86+ anchors {
87+ top: parent.top
88+ topMargin: units.gu(1)
89+ right: parent.right
90+ rightMargin: units.gu(2)
91+ bottom: parent.bottom
92+ bottomMargin: units.gu(1)
93+ }
94+ visible: root.pinLength == -1
95+ width: height
96+ name: "erase"
97+ MouseArea {
98+ anchors.fill: parent
99+ onClicked: pinentryField.text = pinentryField.text.substring(0, pinentryField.text.length-1);
100+ }
101+ }
79 }
102 }
80
103
81 UbuntuShape {
104 UbuntuShape {
@@ -154,7 +177,7 @@ Column {
154 objectName: "pinPadButtonBack"
177 objectName: "pinPadButtonBack"
155 width: root.padWidth / 3
178 width: root.padWidth / 3
156 height: root.padHeight / 4
179 height: root.padHeight / 4
157− iconName: "back"
180+ subText: "CANCEL"
158 onClicked: root.cancel();
181 onClicked: root.cancel();
159 }
182 }
160
183
@@ -171,8 +194,15 @@ Column {
171 objectName: "pinPadButtonErase"
194 objectName: "pinPadButtonErase"
172 width: root.padWidth / 3
195 width: root.padWidth / 3
173 height: root.padHeight / 4
196 height: root.padHeight / 4
174− iconName: "erase"
197+ iconName: root.pinLength == -1 ? "" : "erase"
198+ subText: root.pinLength == -1 ? "DONE" : ""
199+ onClicked: {
200+ if (root.pinLength !== -1) {
175− onClicked: pinentryField.text = pinentryField.text.substring(0, pinentryField.text.length-1)
201+ pinentryField.text = pinentryField.text.substring(0, pinentryField.text.length-1);
202+ } else {
203+ root.entered(pinentryField.text);
204+ }
205+ }
176 enabled: entryEnabled
206 enabled: entryEnabled
177 }
207 }
178 }
208 }
@@ -180,6 +210,7 @@ Column {
180
210
181 WrongPasswordAnimation {
211 WrongPasswordAnimation {
182 id: wrongPasswordAnimation
212 id: wrongPasswordAnimation
213+ objectName: "wrongPasswordAnimation"
183 target: pinentryField
214 target: pinentryField
184 }
215 }
185}
216}
Hud/SliderLabel.qml+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
Launcher/Launcher.qml+2−2
@@ -28,8 +28,8 @@ Item {
28
28
29 property int panelWidth: units.gu(8)
29 property int panelWidth: units.gu(8)
30 property int dragAreaWidth: units.gu(1)
30 property int dragAreaWidth: units.gu(1)
31− property int minimizeDistance: panelWidth * 2.5
31+ property int minimizeDistance: units.gu(26)
32− property real progress: dragArea.dragging && dragArea.touchX > panelWidth ?
32+ property real progress: dragArea.dragging && dragArea.touchX > panelWidth ?
33 (width * (dragArea.touchX-panelWidth) / (width - panelWidth)) : 0
33 (width * (dragArea.touchX-panelWidth) / (width - panelWidth)) : 0
34
34
35 readonly property bool shown: panel.x > -panel.width
35 readonly property bool shown: panel.x > -panel.width
Launcher/LauncherDelegate.qml+1
@@ -57,6 +57,7 @@ Item {
57 anchors.fill: parent
57 anchors.fill: parent
58 anchors.margins: units.gu(1)
58 anchors.margins: units.gu(1)
59 radius: "medium"
59 radius: "medium"
60+ borderSource: "none"
60
61
61 image: Image {
62 image: Image {
62 id: iconImage
63 id: iconImage
Launcher/LauncherPanel.qml+88−47
@@ -21,6 +21,7 @@ import Unity 0.1
21import Unity.Launcher 0.1
21import Unity.Launcher 0.1
22import Ubuntu.Components.Popups 0.1
22import Ubuntu.Components.Popups 0.1
23import "../Components/ListItems"
23import "../Components/ListItems"
24+import "../Components/"
24
25
25Item {
26Item {
26 id: root
27 id: root
@@ -31,7 +32,7 @@ Item {
31 property bool inverted: true
32 property bool inverted: true
32 property bool dragging: false
33 property bool dragging: false
33 property bool moving: launcherListView.moving || launcherListView.flicking
34 property bool moving: launcherListView.moving || launcherListView.flicking
34− property bool preventHiding: moving || dndArea.draggedIndex >= 0 || dndArea.quickListPopover !== null || dndArea.pressed
35+ property bool preventHiding: moving || dndArea.draggedIndex >= 0 || quickList.state === "open" || dndArea.pressed
35 property int highlightIndex: -1
36 property int highlightIndex: -1
36
37
37 signal applicationSelected(string appId)
38 signal applicationSelected(string appId)
@@ -278,7 +279,6 @@ Item {
278 property bool postDragging: false
279 property bool postDragging: false
279 property int startX
280 property int startX
280 property int startY
281 property int startY
281− property var quickListPopover: null
282
282
283 onPressed: {
283 onPressed: {
284 selectedItem = launcherListView.itemAt(mouseX, mouseY + launcherListView.realContentY)
284 selectedItem = launcherListView.itemAt(mouseX, mouseY + launcherListView.realContentY)
@@ -357,18 +357,17 @@ Item {
357 draggedIndex = Math.floor((mouseY + launcherListView.realContentY) / launcherListView.realItemHeight);
357 draggedIndex = Math.floor((mouseY + launcherListView.realContentY) / launcherListView.realItemHeight);
358
358
359 // Opening QuickList
359 // Opening QuickList
360− var quickListModel = launcherListView.model.get(draggedIndex).quickList
360+ quickList.item = selectedItem;
361− var quickListAppId = launcherListView.model.get(draggedIndex).appId
361+ quickList.model = launcherListView.model.get(draggedIndex).quickList;
362−
362+ quickList.appId = launcherListView.model.get(draggedIndex).appId;
363− quickListPopover = PopupUtils.open(popoverComponent, selectedItem,
363+ quickList.state = "open";
364− {model: quickListModel, appId: quickListAppId})
365
364
366 launcherListView.interactive = false
365 launcherListView.interactive = false
367
366
368 var yOffset = draggedIndex > 0 ? (mouseY + launcherListView.realContentY) % (draggedIndex * launcherListView.realItemHeight) : mouseY + launcherListView.realContentY
367 var yOffset = draggedIndex > 0 ? (mouseY + launcherListView.realContentY) % (draggedIndex * launcherListView.realItemHeight) : mouseY + launcherListView.realContentY
369
368
370 fakeDragItem.iconName = launcherListView.model.get(draggedIndex).icon
369 fakeDragItem.iconName = launcherListView.model.get(draggedIndex).icon
371− fakeDragItem.x = 0
370+ fakeDragItem.x = units.gu(0.5)
372 fakeDragItem.y = mouseY - yOffset + launcherListView.anchors.topMargin + launcherListView.topMargin
371 fakeDragItem.y = mouseY - yOffset + launcherListView.anchors.topMargin + launcherListView.topMargin
373 fakeDragItem.angle = selectedItem.angle * (root.inverted ? -1 : 1)
372 fakeDragItem.angle = selectedItem.angle * (root.inverted ? -1 : 1)
374 fakeDragItem.offset = selectedItem.offset * (root.inverted ? -1 : 1)
373 fakeDragItem.offset = selectedItem.offset * (root.inverted ? -1 : 1)
@@ -387,7 +386,7 @@ Item {
387 var distance = Math.max(Math.abs(mouseX - startX), Math.abs(mouseY - startY))
386 var distance = Math.max(Math.abs(mouseX - startX), Math.abs(mouseY - startY))
388 if (!preDragging && distance > units.gu(1.5)) {
387 if (!preDragging && distance > units.gu(1.5)) {
389 preDragging = true;
388 preDragging = true;
390− PopupUtils.close(quickListPopover)
389+ quickList.state = "";
391 }
390 }
392 if (distance > launcherListView.itemHeight) {
391 if (distance > launcherListView.itemHeight) {
393 selectedItem.dragging = true
392 selectedItem.dragging = true
@@ -482,53 +481,95 @@ Item {
482 }
481 }
483 }
482 }
484
483
485− Component {
484+ UbuntuShapeForItem {
486− id: popoverComponent
485+ id: quickListShape
486+ objectName: "quickListShape"
487+ anchors.fill: quickList
488+ opacity: quickList.state === "open" ? 0.8 : 0
489+ visible: opacity > 0
490+ rotation: root.rotation
491+
492+ Behavior on opacity {
493+ UbuntuNumberAnimation {}
494+ }
495+
496+ image: quickList
497+
498+ Image {
499+ anchors {
500+ right: parent.left
501+ rightMargin: -units.dp(4)
502+ verticalCenter: parent.verticalCenter
503+ verticalCenterOffset: -quickList.offset
504+ }
505+ height: units.gu(1)
506+ width: units.gu(2)
507+ source: "graphics/quicklist_tooltip.png"
508+ rotation: 90
509+ }
510+
511+ InverseMouseArea {
512+ anchors.fill: parent
513+ enabled: quickList.state == "open"
514+ onClicked: {
515+ quickList.state = ""
516+ }
517+ }
518+
519+ }
520+
521+ Rectangle {
522+ id: quickList
523+ objectName: "quickList"
524+ color: "#221e1c"
525+ width: units.gu(30)
526+ height: quickListColumn.height
527+ anchors {
528+ left: root.inverted ? undefined : parent.right
529+ right: root.inverted ? parent.left : undefined
530+ margins: units.gu(1)
487
531
488− Popover {
532+ }
489− id: popover
533+ y: itemCenter - (height / 2) + offset
490− property var model
534+ rotation: root.rotation
491− property string appId
492− contentWidth: quickListColumn.width
493− foregroundStyle: QuicklistForegroundStyle {}
494
535
495− // FIXME: There's a bug in the Popover positioning that it covers the item in case it is rotated.
536+ property var model
496− // https://bugs.launchpad.net/ubuntu-ui-toolkit/+bug/1204470
537+ property string appId
497− // For now, let's move the Popover around with callerMargin.
538+ property var item
498− // Remove popupMargin once the bug is fixed.
499− property int popupMargin: root.inverted ? launcherListView.itemHeight : 0;
500
539
501− callerMargin: units.gu(1) + popupMargin
540+ // internal
541+ property int itemCenter: item ? root.mapFromItem(quickList.item).y + (item.height / 2) : units.gu(1)
542+ property int offset: itemCenter + (height/2) + units.gu(1) > parent.height ? -itemCenter - (height/2) - units.gu(1) + parent.height :
543+ itemCenter - (height/2) < units.gu(1) ? (height/2) - itemCenter + units.gu(1) : 0
502
544
503− Column {
545+ Column {
504− id: quickListColumn
546+ id: quickListColumn
505− width: units.gu(30)
547+ width: parent.width
506− height: childrenRect.height
548+ height: childrenRect.height
507
549
508− Repeater {
550+ Repeater {
509− id: popoverRepeater
551+ id: popoverRepeater
510− model: popover.model
552+ model: quickList.model
511
553
512− ListItems.Standard {
554+ ListItems.Standard {
513− objectName: "quickListEntry" + index
555+ objectName: "quickListEntry" + index
514− text: (model.clickable ? "" : "<b>") + model.label + (model.clickable ? "" : "</b>")
556+ text: (model.clickable ? "" : "<b>") + model.label + (model.clickable ? "" : "</b>")
515− highlightWhenPressed: model.clickable
557+ highlightWhenPressed: model.clickable
516
558
517− // FIXME: This is a workaround for the theme not being context sensitive. I.e. the
559+ // FIXME: This is a workaround for the theme not being context sensitive. I.e. the
518− // ListItems don't know that they are sitting in a themed Popover where the color
560+ // ListItems don't know that they are sitting in a themed Popover where the color
519− // needs to be inverted.
561+ // needs to be inverted.
520− __foregroundColor: Theme.palette.selected.backgroundText
562+ __foregroundColor: Theme.palette.selected.backgroundText
521
563
522− onClicked: {
564+ onClicked: {
523− if (!model.clickable) {
565+ if (!model.clickable) {
524− return;
566+ return;
525− }
526− PopupUtils.close(popover);
527− // Unsetting model to prevent showing changing entries during fading out
528− // that may happen because of triggering an action.
529− LauncherModel.quickListActionInvoked(appId, index);
530− popoverRepeater.model = undefined;
531 }
567 }
568+ quickList.state = "";
569+ // Unsetting model to prevent showing changing entries during fading out
570+ // that may happen because of triggering an action.
571+ LauncherModel.quickListActionInvoked(quickList.appId, index);
572+ quickList.model = undefined;
532 }
573 }
533 }
574 }
534 }
575 }
Notifications/Notification.qml+5−8
@@ -23,7 +23,7 @@ import Utils 0.1
23UbuntuShape {
23UbuntuShape {
24 id: notification
24 id: notification
25
25
26− property alias iconSource: avatarIcon.source
26+ property alias iconSource: icon.fileSource
27 property alias secondaryIconSource: secondaryIcon.source
27 property alias secondaryIconSource: secondaryIcon.source
28 property alias summary: summaryLabel.text
28 property alias summary: summaryLabel.text
29 property alias body: bodyLabel.text
29 property alias body: bodyLabel.text
@@ -34,12 +34,13 @@ UbuntuShape {
34 property var notification
34 property var notification
35
35
36 objectName: "background"
36 objectName: "background"
37− implicitHeight: contentColumn.height + contentColumn.spacing * 2
37+ implicitHeight: type != Notification.PlaceHolder ? contentColumn.height + contentColumn.spacing * 2 : 0
38 color: Qt.rgba(0.132, 0.117, 0.109, 0.97)
38 color: Qt.rgba(0.132, 0.117, 0.109, 0.97)
39 opacity: 0
39 opacity: 0
40 radius: "medium"
40 radius: "medium"
41
41
42 clip: true
42 clip: true
43+ visible: type != Notification.PlaceHolder
43
44
44 UnityMenuModelPaths {
45 UnityMenuModelPaths {
45 id: paths
46 id: paths
@@ -101,18 +102,14 @@ UbuntuShape {
101 right: parent.right
102 right: parent.right
102 }
103 }
103
104
104− UbuntuShape {
105+ ShapedIcon {
105 id: icon
106 id: icon
106
107
107 objectName: "icon"
108 objectName: "icon"
108 width: units.gu(6)
109 width: units.gu(6)
109 height: units.gu(6)
110 height: units.gu(6)
111+ shaped: notification.hints["x-canonical-non-shaped-icon"] == "true" ? false : true
110 visible: iconSource !== undefined && iconSource != ""
112 visible: iconSource !== undefined && iconSource != ""
111− image: Image {
112− id: avatarIcon
113−
114− fillMode: Image.PreserveAspectCrop
115− }
116 }
113 }
117
114
118 Image {
115 Image {
Notifications/NotificationMenuItemFactory.qml+20−6
@@ -54,7 +54,8 @@ Loader {
54
54
55 Component.onCompleted: {
55 Component.onCompleted: {
56 menuModel.loadExtendedAttributes(menuIndex, {"x-echo-mode-password": "bool"});
56 menuModel.loadExtendedAttributes(menuIndex, {"x-echo-mode-password": "bool"});
57− textfield.echoMode = menuData.ext.xEchoModePassword ? TextInput.Password : TextInput.Normal
57+ checkBox.checked = menuData.ext.xEchoModePassword ? false : true
58+ checkBoxRow.visible = menuData.ext.xEchoModePassword
58 }
59 }
59
60
60 Label {
61 Label {
@@ -65,11 +66,29 @@ Loader {
65 id: textfield
66 id: textfield
66
67
67 anchors.left: parent.left; anchors.right: parent.right
68 anchors.left: parent.left; anchors.right: parent.right
69+ echoMode: checkBox.checked ? TextInput.Normal : TextInput.Password
68 height: units.gu(5)
70 height: units.gu(5)
69 onTextChanged: {
71 onTextChanged: {
70 menuModel.changeState(menuIndex, text);
72 menuModel.changeState(menuIndex, text);
71 }
73 }
72 }
74 }
75+
76+ Row {
77+ id: checkBoxRow
78+
79+ spacing: units.gu(.5)
80+
81+ CheckBox {
82+ id: checkBox
83+
84+ checked: false
85+ }
86+
87+ Label {
88+ anchors.verticalCenter: checkBox.verticalCenter
89+ text: i18n.tr("Show password")
90+ }
91+ }
73 }
92 }
74 }
93 }
75
94
@@ -78,11 +97,6 @@ Loader {
78 PinLockscreen {
97 PinLockscreen {
79 anchors.left: parent.left; anchors.right: parent.right
98 anchors.left: parent.left; anchors.right: parent.right
80
99
81− Component.onCompleted: {
82− menuModel.loadExtendedAttributes(menuIndex, {'x-canonical-pin-length': 'int'});
83− pinLength = menuData.ext.xCanonicalPinLength;
84− }
85−
86 onEntered: {
100 onEntered: {
87 menuModel.changeState(menuIndex, passphrase);
101 menuModel.changeState(menuIndex, passphrase);
88 entryEnabled = false;
102 entryEnabled = false;
plugins/Unity/ratingoptionsmodel.cpp → Notifications/ShapedIcon.qmlrenamed+20−13
@@ -1,9 +1,6 @@
1/*
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
3 *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; version 3.
6 * the Free Software Foundation; version 3.
@@ -17,17 +14,27 @@
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
15 */
19
16
20−// self
17+import QtQuick 2.0
21−#include "ratingoptionsmodel.h"
18+import Ubuntu.Components 0.1
19+
20+Item {
21+ property string fileSource
22+ property bool shaped
23+
24+ UbuntuShape {
25+ objectName: "shapedIcon"
26+ anchors.fill: parent
27+ visible: shaped
28+ image: realImage
29+ }
22
30
23−// local
31+ Image {
24−#include "ratingfilteroption.h"
32+ id: realImage
25
33
26−RatingOptionsModel::RatingOptionsModel(bool showAllOption, QObject *parent) :
34+ objectName: "nonShapedIcon"
27− GenericOptionsModel(showAllOption, parent)
35+ anchors.fill: parent
28−{
36+ visible: !shaped
29− for (int i=1; i<=5; i++) {
37+ source: fileSource
30− auto opt = new RatingFilterOption(QString::number(i), i*0.2f, this);
38+ fillMode: Image.PreserveAspectCrop
31− addOption(opt);
32 }
39 }
33}
40}
Panel/Indicators.qml+37−10
@@ -21,7 +21,6 @@ import Unity.Indicators 0.1 as Indicators
21
21
22import "../Components"
22import "../Components"
23import "../Components/ListItems"
23import "../Components/ListItems"
24−import "../Components/Math.js" as MathLocal
25
24
26Showable {
25Showable {
27 id: indicators
26 id: indicators
@@ -38,6 +37,7 @@ Showable {
38 property bool partiallyOpened: height > panelHeight && !fullyOpened
37 property bool partiallyOpened: height > panelHeight && !fullyOpened
39 property real visualBottom: Math.max(y+height, y+indicatorRow.y+indicatorRow.height)
38 property real visualBottom: Math.max(y+height, y+indicatorRow.y+indicatorRow.height)
40 property bool contentEnabled: true
39 property bool contentEnabled: true
40+ property bool initalizeItem: true
41 readonly property alias content: menuContent
41 readonly property alias content: menuContent
42
42
43 // TODO: Perhaps we need a animation standard for showing/hiding? Each showable seems to
43 // TODO: Perhaps we need a animation standard for showing/hiding? Each showable seems to
@@ -64,14 +64,13 @@ Showable {
64 }
64 }
65
65
66 height: panelHeight
66 height: panelHeight
67+ onHeightChanged: updateRevealProgressState(indicators.height - panelHeight, true)
67
68
68− onHeightChanged: {
69+ function updateRevealProgressState(revealProgress, enableRelease) {
69− // need to use handle.get_height(). As the handle height depends on indicators.height changes (but this is called first!)
70− var revealProgress = indicators.height - panelHeight
71 if (!showAnimation.running && !hideAnimation.running) {
70 if (!showAnimation.running && !hideAnimation.running) {
72− if (revealProgress == 0) {
71+ if (revealProgress === 0) {
73 indicators.state = "initial";
72 indicators.state = "initial";
74− } else if (revealProgress <= hintValue) {
73+ } else if (revealProgress > 0 && revealProgress <= hintValue) {
75 indicators.state = "hint";
74 indicators.state = "hint";
76 } else if (revealProgress > hintValue && revealProgress < lockThreshold) {
75 } else if (revealProgress > hintValue && revealProgress < lockThreshold) {
77 indicators.state = "reveal";
76 indicators.state = "reveal";
@@ -80,7 +79,7 @@ Showable {
80 }
79 }
81 }
80 }
82
81
83− if (revealProgress == 0) {
82+ if (enableRelease && revealProgress === 0) {
84 menuContent.releaseContent();
83 menuContent.releaseContent();
85 }
84 }
86 }
85 }
@@ -100,14 +99,14 @@ Showable {
100 Otherwise it contains the bar's location as a fraction of the distance between hintValue (is 0) and lockThreshold (is 1).
99 Otherwise it contains the bar's location as a fraction of the distance between hintValue (is 0) and lockThreshold (is 1).
101 */
100 */
102 var verticalProgress =
101 var verticalProgress =
103− MathLocal.clamp((indicators.height - handle.height - hintValue) /
102+ MathUtils.clamp((indicators.height - handle.height - hintValue) /
104 (lockThreshold - hintValue), 0, 1);
103 (lockThreshold - hintValue), 0, 1);
105
104
106 /*
105 /*
107 Vertical velocity check. Don't change the indicator if we're moving too quickly.
106 Vertical velocity check. Don't change the indicator if we're moving too quickly.
108 */
107 */
109 var verticalSpeed = Math.abs(yVelocityCalculator.calculate());
108 var verticalSpeed = Math.abs(yVelocityCalculator.calculate());
110− if (verticalSpeed >= 0.05 && indicatorRow.currentItem!=null) {
109+ if (verticalSpeed >= 0.05 && !initalizeItem) {
111 return;
110 return;
112 }
111 }
113
112
@@ -147,6 +146,7 @@ Showable {
147 } else if (!currentItem) {
146 } else if (!currentItem) {
148 indicatorRow.setDefaultItem();
147 indicatorRow.setDefaultItem();
149 }
148 }
149+ initalizeItem = indicatorRow.currentItem == null;
150 }
150 }
151
151
152 // eater
152 // eater
@@ -282,6 +282,33 @@ Showable {
282 enableIndexChangeSignal = oldActive;
282 enableIndexChangeSignal = oldActive;
283 }
283 }
284 }
284 }
285+
286+ EdgeDragArea {
287+ id: rowDragArea
288+ anchors.fill: indicatorRow
289+ direction: Direction.Downwards
290+ maxSilenceTime: 2000
291+ distanceThreshold: 0
292+
293+ enabled: fullyOpened
294+ onDraggingChanged: {
295+ if (dragging) {
296+ initalizeItem = true;
297+ updateRevealProgressState(Math.max(touchSceneY - panelHeight, hintValue), false);
298+ indicators.calculateCurrentItem(touchX, false);
299+ } else {
300+ indicators.state = "commit";
301+ }
302+ }
303+
304+ onTouchXChanged: {
305+ indicators.calculateCurrentItem(touchX, true);
306+ }
307+ onTouchSceneYChanged: {
308+ updateRevealProgressState(Math.max(touchSceneY - panelHeight, hintValue), false);
309+ yVelocityCalculator.trackedPosition = touchSceneY;
310+ }
311+ }
285 }
312 }
286
313
287 Connections {
314 Connections {
@@ -298,7 +325,7 @@ Showable {
298 onRunningChanged: {
325 onRunningChanged: {
299 if (hideAnimation.running) {
326 if (hideAnimation.running) {
300 indicators.state = "initial";
327 indicators.state = "initial";
301− indicatorRow.currentItem = null;
328+ initalizeItem = true;
302 }
329 }
303 }
330 }
304 }
331 }
Panel/Indicators/DefaultIndicatorWidget.qml+32−10
@@ -24,7 +24,7 @@ import Unity.Indicators 0.1 as Indicators
24Indicators.IndicatorWidget {
24Indicators.IndicatorWidget {
25 id: indicatorWidget
25 id: indicatorWidget
26
26
27− width: itemRow.width + units.gu(0.5)
27+ width: itemRow.width
28
28
29 property alias leftLabel: itemLeftLabel.text
29 property alias leftLabel: itemLeftLabel.text
30 property alias rightLabel: itemRightLabel.text
30 property alias rightLabel: itemRightLabel.text
@@ -32,16 +32,17 @@ Indicators.IndicatorWidget {
32
32
33 Row {
33 Row {
34 id: itemRow
34 id: itemRow
35+ width: childrenRect.width
35 objectName: "itemRow"
36 objectName: "itemRow"
36 anchors {
37 anchors {
37 top: parent.top
38 top: parent.top
38 bottom: parent.bottom
39 bottom: parent.bottom
39 horizontalCenter: parent.horizontalCenter
40 horizontalCenter: parent.horizontalCenter
40 }
41 }
41− spacing: units.gu(0.5)
42
42
43 Label {
43 Label {
44 id: itemLeftLabel
44 id: itemLeftLabel
45+ width: guRoundUp(implicitWidth)
45 objectName: "leftLabel"
46 objectName: "leftLabel"
46 color: Theme.palette.selected.backgroundText
47 color: Theme.palette.selected.backgroundText
47 opacity: 0.8
48 opacity: 0.8
@@ -57,25 +58,35 @@ Indicators.IndicatorWidget {
57 top: parent.top
58 top: parent.top
58 bottom: parent.bottom
59 bottom: parent.bottom
59 }
60 }
60− spacing: units.gu(0.5)
61
61
62 Repeater {
62 Repeater {
63 model: indicatorWidget.icons
63 model: indicatorWidget.icons
64
64
65− Image {
65+ Item {
66− id: itemImage
66+ width: guRoundUp(itemImage.width)
67− objectName: "itemImage"
68− visible: source != ""
69− source: modelData
70 height: indicatorWidget.iconSize
67 height: indicatorWidget.iconSize
68+
69+ Image {
70+ id: itemImage
71+ objectName: "itemImage"
72+ visible: source != ""
73+ source: modelData
74+ height: parent.height
75+ anchors.horizontalCenter: parent.horizontalCenter
76+ fillMode: Image.PreserveAspectFit
77+
78+ sourceSize {
71− width: indicatorWidget.iconSize
79+ width: indicatorWidget.iconSize
72− anchors.verticalCenter: parent.verticalCenter
80+ height: indicatorWidget.iconSize
81+ }
82+ }
73 }
83 }
74 }
84 }
75 }
85 }
76
86
77 Label {
87 Label {
78 id: itemRightLabel
88 id: itemRightLabel
89+ width: guRoundUp(implicitWidth)
79 objectName: "rightLabel"
90 objectName: "rightLabel"
80 color: Theme.palette.selected.backgroundText
91 color: Theme.palette.selected.backgroundText
81 opacity: 0.8
92 opacity: 0.8
@@ -86,6 +97,17 @@ Indicators.IndicatorWidget {
86 }
97 }
87 }
98 }
88
99
100+ // TODO: Use toolkit function https://bugs.launchpad.net/ubuntu-ui-toolkit/+bug/1242575
101+ function guRoundUp(width) {
102+ if (width == 0) {
103+ return 0;
104+ }
105+ var gu1 = units.gu(1.0);
106+ var mod = (width % gu1);
107+
108+ return mod == 0 ? width : width + (gu1 - mod);
109+ }
110+
89 onRootActionStateChanged: {
111 onRootActionStateChanged: {
90 if (rootActionState == undefined) {
112 if (rootActionState == undefined) {
91 leftLabel = "";
113 leftLabel = "";
Panel/Indicators/client/IndicatorsTree.qml+2−3
@@ -29,10 +29,9 @@ Page {
29
29
30 property string busName: unityModel.busName
30 property string busName: unityModel.busName
31 property string actionsObjectPath
31 property string actionsObjectPath
32− property var menuObjectPaths: undefined
32+ property string menuObjectPath
33− readonly property string device: "phone"
34
33
35− property string deviceMenuObjectPath: menuObjectPaths.hasOwnProperty(device) ? menuObjectPaths[device] : ""
34+ property string deviceMenuObjectPath: menuObjectPath
36
35
37 function start() {
36 function start() {
38 }
37 }
Shell.qml+35−12
@@ -30,7 +30,6 @@ import "Launcher"
30import "Panel"
30import "Panel"
31import "Hud"
31import "Hud"
32import "Components"
32import "Components"
33−import "Components/Math.js" as MathLocal
34import "Bottombar"
33import "Bottombar"
35import "SideStage"
34import "SideStage"
36import "Notifications"
35import "Notifications"
@@ -62,8 +61,6 @@ FocusScope {
62 }
61 }
63 }
62 }
64
63
65− property ListModel searchHistory: SearchHistoryModel {}
66−
67 property var applicationManager: ApplicationManagerWrapper {}
64 property var applicationManager: ApplicationManagerWrapper {}
68
65
69 Binding {
66 Binding {
@@ -99,21 +96,21 @@ FocusScope {
99 }
96 }
100 }
97 }
101
98
102− function activateApplication(desktopFile, argument) {
99+ function activateApplication(appId, argument) {
103 if (applicationManager) {
100 if (applicationManager) {
104 // 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
105 // 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.
106− var addDelay = !applicationManager.getApplicationFromDesktopFile(desktopFile);
103+ var addDelay = !applicationManager.getApplicationFromDesktopFile(appId);
107
104
108 var application;
105 var application;
109− application = applicationManager.activateApplication(desktopFile, argument);
106+ application = applicationManager.activateApplication(appId, argument);
110 if (application == null) {
107 if (application == null) {
111 return;
108 return;
112 }
109 }
113 if (application.stage == ApplicationInfo.MainStage || !sideStage.enabled) {
110 if (application.stage == ApplicationInfo.MainStage || !sideStage.enabled) {
114− mainStage.activateApplication(desktopFile, addDelay);
111+ mainStage.activateApplication(appId, addDelay);
115 } else {
112 } else {
116− sideStage.activateApplication(desktopFile, addDelay);
113+ sideStage.activateApplication(appId, addDelay);
117 }
114 }
118 stages.show();
115 stages.show();
119 }
116 }
@@ -237,7 +234,7 @@ FocusScope {
237 Behavior on x {SmoothedAnimation{velocity: 600}}
234 Behavior on x {SmoothedAnimation{velocity: 600}}
238
235
239 property real showProgress:
236 property real showProgress:
240− MathLocal.clamp(1 - (x + stages.x) / shell.width, 0, 1)
237+ MathUtils.clamp(1 - (x + stages.x) / shell.width, 0, 1)
241
238
242 Showable {
239 Showable {
243 id: stages
240 id: stages
@@ -402,6 +399,10 @@ FocusScope {
402
399
403 Lockscreen {
400 Lockscreen {
404 id: lockscreen
401 id: lockscreen
402+ objectName: "lockscreen"
403+
404+ readonly property int backgroundTopMargin: -panel.panelHeight
405+
405 hides: [launcher, panel.indicators, hud]
406 hides: [launcher, panel.indicators, hud]
406 shown: false
407 shown: false
407 enabled: true
408 enabled: true
@@ -413,7 +414,7 @@ FocusScope {
413 height: parent.height - panel.panelHeight
414 height: parent.height - panel.panelHeight
414 background: shell.background
415 background: shell.background
415
416
416− onUnlocked: lockscreen.hide()
417+ onEntered: LightDM.Greeter.respond(passphrase);
417 onCancel: greeter.show()
418 onCancel: greeter.show()
418
419
419 Component.onCompleted: {
420 Component.onCompleted: {
@@ -439,6 +440,17 @@ FocusScope {
439 lockscreen.show();
440 lockscreen.show();
440 }
441 }
441 }
442 }
443+
444+ onAuthenticationComplete: {
445+ if (LightDM.Greeter.promptless) {
446+ return;
447+ }
448+ if (LightDM.Greeter.authenticated) {
449+ lockscreen.hide();
450+ } else {
451+ lockscreen.clear(true);
452+ }
453+ }
442 }
454 }
443
455
444 Greeter {
456 Greeter {
@@ -647,20 +659,31 @@ FocusScope {
647 Launcher {
659 Launcher {
648 id: launcher
660 id: launcher
649
661
662+ readonly property bool dashSwipe: progress > 0
663+
650 anchors.top: parent.top
664 anchors.top: parent.top
651 anchors.bottom: parent.bottom
665 anchors.bottom: parent.bottom
652 width: parent.width
666 width: parent.width
653 dragAreaWidth: shell.edgeSize
667 dragAreaWidth: shell.edgeSize
654 available: (!greeter.shown || greeter.narrowMode) && edgeDemo.launcherEnabled
668 available: (!greeter.shown || greeter.narrowMode) && edgeDemo.launcherEnabled
669+
655− onDashItemSelected: showHome()
670+ onDashItemSelected: {
671+ if (edgeDemo.running)
672+ return;
673+
674+ showHome()
675+ }
656 onDash: {
676 onDash: {
657 if (stages.shown) {
677 if (stages.shown) {
658− dash.setCurrentScope("applications.scope", true /* animate */, true /* reset */)
659 stages.hide();
678 stages.hide();
660 launcher.hide();
679 launcher.hide();
661 }
680 }
662 }
681 }
682+ onDashSwipeChanged: if (dashSwipe && stages.shown) dash.setCurrentScope("applications.scope", false, true)
663 onLauncherApplicationSelected:{
683 onLauncherApplicationSelected:{
684+ if (edgeDemo.running)
685+ return;
686+
664 greeter.hide()
687 greeter.hide()
665 shell.activateApplication(appId)
688 shell.activateApplication(appId)
666 }
689 }
build+1
@@ -50,6 +50,7 @@ install_dependencies() {
50 ubuntu-mobile-icons \
50 ubuntu-mobile-icons \
51 unity-scope-home \
51 unity-scope-home \
52 unity-lens-applications \
52 unity-lens-applications \
53+ unity-plugin-scopes \
53 || exit 5
54 || exit 5
54}
55}
55
56
cmake/modules/Plugins.cmake+3−3
@@ -28,7 +28,7 @@ macro(export_qmlfiles PLUGIN PLUGIN_SUBPATH)
28
28
29 # install the qmlfiles file.
29 # install the qmlfiles file.
30 install(FILES ${QMLFILES}
30 install(FILES ${QMLFILES}
31− DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/${PLUGIN_SUBPATH}
31+ DESTINATION ${SHELL_INSTALL_QML}/${PLUGIN_SUBPATH}
32 )
32 )
33endmacro(export_qmlfiles)
33endmacro(export_qmlfiles)
34
34
@@ -56,12 +56,12 @@ macro(export_qmlplugin PLUGIN VERSION PLUGIN_SUBPATH)
56
56
57 # install the qmltypes file.
57 # install the qmltypes file.
58 install(FILES ${CMAKE_BINARY_DIR}/plugins/${PLUGIN_SUBPATH}/plugin.qmltypes
58 install(FILES ${CMAKE_BINARY_DIR}/plugins/${PLUGIN_SUBPATH}/plugin.qmltypes
59− DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/${PLUGIN_SUBPATH}
59+ DESTINATION ${SHELL_INSTALL_QML}/${PLUGIN_SUBPATH}
60 )
60 )
61 endif()
61 endif()
62
62
63 # install the additional targets
63 # install the additional targets
64 install(TARGETS ${qmlplugin_TARGETS}
64 install(TARGETS ${qmlplugin_TARGETS}
65− DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/${PLUGIN_SUBPATH}
65+ DESTINATION ${SHELL_INSTALL_QML}/${PLUGIN_SUBPATH}
66 )
66 )
67endmacro(export_qmlplugin)
67endmacro(export_qmlplugin)
cmake/modules/autopilot.cmake+1−1
@@ -2,7 +2,7 @@ add_custom_target(autopilot)
2
2
3function(declare_autopilot_test TEST_NAME TEST_SUITE WORKING_DIR)
3function(declare_autopilot_test TEST_NAME TEST_SUITE WORKING_DIR)
4 add_custom_target(autopilot-${TEST_NAME}
4 add_custom_target(autopilot-${TEST_NAME}
5− COMMAND LANG=C UBUNTU_ICON_THEME=ubuntu-mobile QML2_IMPORT_PATH=${SHELL_PRIVATE_LIBDIR}/qml/mocks autopilot run ${TEST_SUITE}
5+ COMMAND LANG=C UBUNTU_ICON_THEME=ubuntu-mobile QML2_IMPORT_PATH=${SHELL_INSTALL_QML}/mocks autopilot run ${TEST_SUITE}
6 WORKING_DIRECTORY ${WORKING_DIR}
6 WORKING_DIRECTORY ${WORKING_DIR}
7 DEPENDS install
7 DEPENDS install
8 )
8 )
data/unity8-setcap.confdeleted−32
@@ -1,32 +0,0 @@
1−# unity8-setcap - ugly hacks to arrange for /usr/bin/unity8 to have CAP_SYS_RESOURCE
2−
3−# XXX replace me with some root-helper to gain CAP_SYS_RESOURCE XXX
4−
5−author "Loïc Minier <loic.minier@ubuntu.com>"
6−description "Ugly hacks to arrange for /usr/bin/unity8 to have CAP_SYS_RESOURCE"
7−
8−# start when first boot-hooks event is emitted and before lightdm (lightdm
9−# starts ubuntu-touch-session which starts unity8); note that /run is
10−# guaranteeds to be be there because lightdm starts on filesystem
11−start on boot-hooks and starting lightdm
12−
13−# NOT a task as otherwise this would block restarting lightdm
14−
15−env RUNDIR=/run/unity8-setcap
16−
17−# work needs to be done in pre-start as this really is a job with nothing to
18−# start
19−pre-start script
20− if [ ! -e "$RUNDIR" ]; then
21− mkdir "$RUNDIR"
22− # /run is noexec, hence mounting another tmpfs exec
23− # NB: unity8 is 35K; 512K should be enough for everyone
24− mount -o rw,nosuid,nodev,exec,relatime,mode=755,size=512k -t tmpfs tmpfs "$RUNDIR"
25− cp -a /usr/bin/unity8 "$RUNDIR"
26− setcap CAP_SYS_RESOURCE=+ep "$RUNDIR/unity8"
27− # bind-mount this back as unity8 checks dirname(argv[0]'s) == /usr to
28− # decide whether it's installed or not
29− mount --bind "$RUNDIR/unity8" /usr/bin/unity8
30− fi
31−end script
32−
data/unity8.conf+21
@@ -5,5 +5,26 @@ 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
9+
10+pre-start script
11+ if [ -n "$MIR_SOCKET" ]; then
12+ if [ -z "$UNITY_MIR_SOCKET" ]; then
13+ # Save original value of MIR_SOCKET in case we are restarted,
14+ # as we modify the variable for future jobs, including ourself.
15+ UNITY_MIR_SOCKET=$MIR_SOCKET
16+ initctl set-env --global UNITY_MIR_SOCKET=$UNITY_MIR_SOCKET
17+ fi
18+
19+ # Point unity8 at unity-system-compositor
20+ MIR_SERVER_FILE=$XDG_RUNTIME_DIR/mir_socket
21+ initctl set-env MIR_SERVER_FILE=$MIR_SERVER_FILE
22+ initctl set-env MIR_SERVER_HOST_SOCKET=$UNITY_MIR_SOCKET
23+
24+ # Point all future jobs in this session to our Mir socket instead of
25+ # unity-system-compositor's socket.
26+ initctl set-env --global MIR_SOCKET=$MIR_SERVER_FILE
27+ fi
28+end script
8
29
9exec ${BINARY:-unity8} $ARGS
30exec ${BINARY:-unity8} $ARGS
debian/changelog+395−2
@@ -1,8 +1,401 @@
1−unity8 (7.83) UNRELEASED; urgency=low
1+unity8 (7.84+14.04.20131206.1-0ubuntu1) trusty; urgency=low
2
2
3+ [ Michal Hruby ]
4+ * Ensure DashContent's ListView's currentItem is set if the model is
5+ not empty.
6+
7+ [ Michał Sawicz ]
8+ * Don't generate build-deps .deb twice and allow overriding
9+ QML2_IMPORT_PATH in ./run.
10+
11+ [ Albert Astals ]
12+ * Remove unused Applications/ folder .
13+ * Implement an 'interface' for Dash Renderers.
14+ * Use deelistmodel's conversion method Instead of a copy of the code .
15+ * Remove icons we don't use .
16+ * Do not start apps or go to dash on demo If you are pulling the
17+ launcher out while in demo mode it doesn't make sense to let you
18+ start applications. Besides it locks you out because it starts the
19+ app and the demo is still not finished so you can't really use any
20+ of the edges to escape Bug #1233696. (LP: #1233696)
21+ * Add a test for the carousel showing the preview when being clicked .
22+ * Fix collapsing of categories not working and the
23+ expansion/collapsing animation +test.
24+
25+ [ Timo Jyrinki ]
26+ * Depend on either Qt 5.2 or libqt5v8-5-private-dev.
27+ * qtdeclarative5-private-dev 5.0.2-6ubuntu5 now depends directly on Qt
28+ V8 private headers. The remaining "qtdeclarative5-private-dev"
29+ dependency is enough now both when compiling against 5.0.2 or 5.2.
30+
31+ [ Pete Woods ]
32+ * Handle optional parameterized action properties. (LP: #1256258)
33+
34+ [ Andrea Cimitan ]
35+ * Implement an 'interface' for Dash Renderers.
36+
37+ [ Michael Zanetti ]
38+ * Added music preview.
39+ * rename some parameters from desktopFile to appId as scopes are now
40+ changed to give us the appId.
41+ * unhardcode launcher's search paths for .desktop files.
42+ * Enable teasing of the phone greeter even though we have a
43+ lockscreen.
44+ * check if variant is valid to avoid asserting in debug mode when the
45+ connection to AccountsService doesn't work for some reason .
46+
47+ [ Michael Terry ]
48+ * Add the DBus greeter API from the desktop greeter into the unity8
49+ greeter.
50+
51+ [ Daniel d'Andrada ]
52+ * Dash: disable close mode when you click outside app thumbnails To
53+ leave the termination mode you can now just mouse/touch press
54+ anywhere outside the running applications' thumbnails The other way,
55+ which still works, is long-pressing a thumbnail once more. (LP:
56+ #1193414)
57+
58+ [ Ubuntu daily release ]
59+ * Automatic snapshot from revision 579
60+
61+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Fri, 06 Dec 2013 13:15:57 +0000
62+
63+unity8 (7.84+14.04.20131128.2-0ubuntu1) trusty; urgency=low
64+
65+ [ Michal Hruby ]
66+ * Depend on the separate scopes plugin
67+ * Move the BottomBar* DBus communicator to the Utils plugin.
68+
69+ [ Michał Sawicz ]
70+ * Wait for DashHome to be available in tst_Shell. (LP: #1254898)
71+ * Use plugindir from unity-shell-api.pc.
72+ * Expect stop in upstart job and raise in case of surfaceflinger. (LP:
73+ #1239876)
74+
75+ [ Albert Astals ]
76+ * Fix time test in Qt 5.2 Make factors an array instead of a
77+ object/dict Objects/dicts are unordered by definition, it happened
78+ that Qt 5.0 gave them in the orrder we wanted, but with Qt 5.2 is
79+ failing, and we don't even need the "key", so array works as well
80+ :).
81+ * Test that the dash hswipe is disabled while the inner stuff is
82+ moving .
83+ * Skip restMaximizeVisibleAreaMoveUpAndShowHeader, it's causing too
84+ many failed runs And we are confident it's failing because of the
85+ suboptimal scenegraph run in 5.0.x.
86+ * Make Dash::test_show_scope_on_load more robust If we are testing
87+ showScopeOnLoaded make sure we force a scope reload after we set it,
88+ otherwise it may just happen that the scope has already been loaded
89+ and the expectaction that we'll change the list to it is just wrong.
90+ * Dash renderer signals: No need to pass the model up and down Whoever
91+ is listening to the signal has access to the item that emits the
92+ signal and has the model right there accessible if needs it.
93+ * LVWPH: Fix header going bad when setContentHeight ends up moving the
94+ viewport How to reproduce the bug easily without the patch: * In the
95+ Dash Home, search for london * Scroll to the bottom * Start moving
96+ to the apps scope very slowly * At around 3/4 of the move you'll see
97+ the header in the home scope went to a bad position * Go back to the
98+ Dash Home. (LP: #1237942, #1246351)
99+ * Remove unused AppInfo and VideoInfo files .
100+ * Kill unused ApplicationsFilterGrid.qml .
101+ * Unify ScopeView and GenericScopeView .
102+ * Fix header getting lost as per bug 1245824. (LP: #1245824)
103+ * Remove unused Time.js and its test .
104+ * Do not include the QtQml megaheader Include only qqml.h which is
105+ what we need in these files.
106+ * Don't do stuff if our parent context is gone We'll be gone soon too
107+ (and crash probably) so don't do anything. This looks a bit like a
108+ workaround, wait for 5.2 better painting/dispatching loop to see if
109+ this is not needed anymore, we find a better way to do it, or we
110+ decide this is fine.
111+
112+ [ Lars Uebernickel ]
113+ * Allow setting different indicator positions for different profiles.
114+
115+ [ Mirco Müller ]
116+ * Added checkbox for toggling between echo-modes of password-
117+ entryfields in ext. snap-decisions.
118+ * Fixes bug #1200569. (LP: #1200569)
119+
120+ [ Andrea Cimitan ]
121+ * Switch to application scope when a dash swipe is taking place and an
122+ app is on foreground. (LP: #1231996)
123+ * Shifts wallpaper rendering for greeter lockscreen to be inline with
124+ shell. (LP: #1231731)
125+ * Dinamically load the Carousel/Filtergrid with more than 6 items.
126+ (LP: #1226288, #1234105)
127+ * Removes Math.js and its usage. Use SDK ones.
128+
129+ [ Gerry Boland ]
130+ * DragHandle: javascript argument name clashes with local variable.
131+ Yes it works, but is a little unsafe.
132+
133+ [ Nick Dedekind ]
134+ * Added UnityMenuModel submenu row removal awareness in
135+ UnityMenuModelStack.
136+ * Round indicator widget icon/label width up to closest gu for
137+ alignment. (LP: #1236267)
138+ * Indicator re-select by dragging from top when fully opened. (LP:
139+ #1213164)
140+ * Fixed a race condition causing search history popup to show up when
141+ it shouldn't. (LP: #1249369)
142+
143+ [ Christopher Lee ]
144+ * Unity8 tests now make use of the helper functions (added in the pre-
145+ req branch) so that the helper functions are tested as part of daily
146+ business.
147+
148+ [ Daniel d'Andrada ]
149+ * Improve DirectionalDragArea Removed Rejected status, simplifying
150+ state machine. Added compositionTime property. Multi-finger
151+ scenarios are better handled now. Refactored TimeSource in
152+ Ubuntu.Gestures plugin. Added an easy way to debug
153+ DirectionalDragArea by having switchable debug prints. Updated tests
154+ to also simulate the passage of time. Use touch point scene
155+ coordinates for gesture recognition so that moving the.
156+ DirectionalDragArea (as in a hinting DragHandle) won't affect it.
157+ (LP: #1228336)
158+ * Add right-edge drag hinting to Greeter To match with the existing
159+ teasing animation when you tap on the right half of the Greeter.
160+ Also has the side benefit of making the code look a bit nicer.
161+ * Refactor Ubuntu.Gesture tests to share common logic Take the common
162+ part out of tst_DirectionalDragArea and put it into a separate base
163+ class, GestureTest, so that it can be shared with other, future,
164+ tests. In CMakeLists.txt, create a macro out of DirectionalDragArea
165+ build script to be used by future tests with similar requirements
166+ and structure. Also add the "m_" prefix to member variables.
167+ * Remove dead code from Utils plugin They are not being used anywhere.
168+
169+ [ Michael Terry ]
170+ * Make EdgeDemoOverlay test more reliable by testing for what we
171+ really care about, not an indirect indicator of it. (LP: #1248232)
172+ * Explicitly set MIR_SOCKET for other upstart jobs, rather than
173+ relying on the default socket, since that won't work once we move to
174+ a nested Mir.
175+
176+ [ Michael Zanetti ]
177+ * don't add margins to RunningApplicationTile's label. (LP: #1245482)
178+ * allow SIM PIN entry to have a variable pin length (by adding a done-
179+ button). (LP: #1240561)
180+ * fix launcher wording for pinning actions. (LP: #1240891)
181+ * fix preview background positioning don't explicitly take originY
182+ into account as it's already in there implicitly. make sure we don't
183+ split the openeffect in a place where it can be covered by the
184+ header.
185+ * fix album artwork containing / in the name. (LP: #1237829)
186+ * small launcher tweaks fix fakeDragItem's initial position to match
187+ with real item. remove UbuntuShape's border glow. .
188+ * drop all references to LighDM from the Lockscreen This should make
189+ it generic enough to allow reusing it for SIM PIN entry .
190+
191+ [ Omer Akram ]
192+ * make the non working code in the screen unlocker helper work.
193+
194+ [ Nicolas d'Offay ]
195+ * Pushed up the z order of the clock in GreeterContent. (LP: #1233146)
196+ * Search history is now persistent across all scopes and remains in
197+ QML. (LP: #1226221)
198+
199+ [ Ubuntu daily release ]
200+ * Automatic snapshot from revision 556
201+
202+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 28 Nov 2013 18:09:17 +0000
203+
204+unity8 (7.83+14.04.20131106-0ubuntu1) trusty; urgency=low
205+
206+ [ Andrea Cimitan ]
207+ * Place ShaderEffectSource of UbuntuShapeForItem under the Shape Item.
208+ (LP: #1239317)
209+
210+ [ Omer Akram ]
211+ * test: make sure the search indicator hides when an app has focus.
212+
213+ [ Nick Dedekind ]
214+ * Fixed indicator slider menu item alignment to label field and icon.
215+ (LP: #1240756)
216+
217+ [ chris.gagnon ]
218+ * Update to autopilot 1.4.
219+
220+ [ Ubuntu daily release ]
221+ * Automatic snapshot from revision 500
222+
223+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Wed, 06 Nov 2013 03:37:02 +0000
224+
225+unity8 (7.83+14.04.20131105.1-0ubuntu1) trusty; urgency=low
226+
227+ [ Michał Sawicz ]
228+ * Implement switching between previews by swiping. (LP: #1220651,
229+ #1088572)
230+
231+ [ Nick Dedekind ]
232+ * Faster loading of indicator menus. (LP: #1226650)
233+
234+ [ Albert Astals ]
235+ * Make sure we have ssh started when we need it .
236+ * Fix a few warnings in DashContent.qml on shutdown
237+ Dash/DashContent.qml:119: TypeError: Cannot read property
238+ 'previewShown' of null Dash/DashContent.qml:120: TypeError: Cannot
239+ read property 'moving' of null .
240+ * Don't use deprecated Panel methods.
241+
242+ [ Christopher Lee ]
243+ * Adds an easy to consume function that attempts to unlock the unity
244+ greeter. (LP: #1240261)
245+
246+ [ Lars Uebernickel ]
247+ * Indicators: add TimeFormatter and use it in the messaging menu This
248+ component can be used to turn a timestamp and a format string into a
249+ string with the corresponding time and format. The string will
250+ change whenever the timezone changes. (LP: #1236413)
251+
252+ [ Andrea Cimitan ]
253+ * Allow drag over bounds, but not overshoot. (LP: #1204300)
254+ * Threshold to activate the left edge swipe to reveal dash is now 26
255+ GU. (LP: #1236286)
256+
257+ [ Michael Zanetti ]
258+ * replace the launcher quicklist's Popover with an own quicklist
259+ implementation The Popover probably won't ever support what the
260+ launcher needs.
261+ * Implement switching between previews by swiping. (LP: #1220651,
262+ #1088572)
263+ * don't trigger the greeter teasing during a movement of the greeter.
264+
265+ [ Ubuntu daily release ]
266+ * Automatic snapshot from revision 495
267+
268+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 05 Nov 2013 12:22:04 +0000
269+
270+unity8 (7.83+14.04.20131031-0ubuntu1) trusty; urgency=low
271+
272+ [ Michał Sawicz ]
273+ * Use setenv as early as possible to avoid setenv and getenv clashing
274+ in multi-threaded situations. (LP: #1240866)
275+
276+ [ Ubuntu daily release ]
277+ * Automatic snapshot from revision 482
278+
279+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 31 Oct 2013 20:10:56 +0000
280+
281+unity8 (7.83+14.04.20131028.1-0ubuntu1) trusty; urgency=low
282+
283+ * New rebuild forced
284+ * Automatic snapshot from revision 480
285+
286+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Mon, 28 Oct 2013 22:42:07 +0000
287+
288+unity8 (7.83+14.04.20131028-0ubuntu1) trusty; urgency=low
289+
290+ [ Andrea Cimitan ]
291+ * Fix 1195349 by counting drawbuffer on the newContentX logic of the
292+ carousel When we changed carousel from repeater to listview, we
293+ added drawbuffer. this breaks the logic of newContentX, which was
294+ considered disabled and set to -1. The correct disabled value now
295+ has to take into account the drawbuffer. (LP: #1195349)
296+
297+ [ Christopher Lee ]
298+ * Checks both then env and upstart env for the currently set
299+ XDG_DATA_DIRS so they can be set correctly for the test.
300+
301+ [ Ubuntu daily release ]
302+ * Automatic snapshot from revision 479
303+
304+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Mon, 28 Oct 2013 03:08:59 +0000
305+
306+unity8 (7.83+13.10.20131016.2-0ubuntu1) saucy; urgency=low
307+
308+ [ Loïc Minier ]
309+ * Merge ~lool/unity8/drop-setcap-conf. Drop unity8-setcap.conf as this
310+ breaks desktop installs (no boot-hook event is emitted, boot
311+ stalls); add maintscript snippet to rm_conffile on upgrades; this
312+ boot-hook is now shipped under a different name in lxc-android-
313+ config.
314+
315+ [ Michał Sawicz ]
316+ * Ship a camera-app.desktop file and use a custom XDG_DATA_DIRS for
317+ testing.
318+
319+ [ Ubuntu daily release ]
320+ * Automatic snapshot from revision 472
321+
322+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Wed, 16 Oct 2013 23:15:48 +0000
323+
324+unity8 (7.83+13.10.20131016.1-0ubuntu1) saucy; urgency=low
325+
326+ [ Diego Sarmentero ]
327+ * Disable Preview interaction until the scope responds.
328+
329+ [ Albert Astals ]
330+ * Hide placeholder notification.
331+
332+ [ Ubuntu daily release ]
333+ * Automatic snapshot from revision 469
334+
335+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Wed, 16 Oct 2013 17:29:36 +0000
336+
337+unity8 (7.83+13.10.20131016-0ubuntu1) saucy; urgency=low
338+
339+ [ Loïc Minier ]
340+ * Add upstart job to copy unity8 to a new tmpfs, setcap it, and bind-
341+ mount it back; this is an ugly hack to set CAP_SYS_RESOURCE until we
342+ have a root-helper for it.
343+
344+ [ Michal Hruby ]
345+ * Enable definition of scope back references in overridden results.
346+
347+ [ Ubuntu daily release ]
348+ * Automatic snapshot from revision 466
349+
350+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Wed, 16 Oct 2013 11:29:52 +0000
351+
352+unity8 (7.83+13.10.20131015.4-0ubuntu1) saucy; urgency=low
353+
354+ [ Michał Sawicz ]
3 * Replace ubuntu-touch-session's unity8.conf upstart job.
355 * Replace ubuntu-touch-session's unity8.conf upstart job.
356+ * Revert r440 that made the dash collapse animation worse, rather than
357+ better.
358+
359+ [ om26er@ubuntu.com ]
360+ * close the app only when the close button is tapped, not the entire
361+ thumbnail
362+
363+ [ Nick Dedekind ]
364+ * Added missing Unity.Indicator mock objects causing qmltests to fail.
365+ Approved by: Michał Sawicz.
366+
367+ [ Christopher Lee ]
368+ * Launch unity8 for autopilot with upstart, and bring unity8 session
369+ over from session-manager-touch.
370+
371+ [ Pawel Stolowski ]
372+ * Temporarily disable category_order changed signal handling.
373+
374+ [ Daniel d'Andrada ]
375+ * OSKController area shouldn't cover the indicators' bar Since ubuntu-
376+ keyboard surface area doesn't cover the indicators' bar,
377+ OSKController should follow suit. Otherwise the OSKContoller's
378+ internal InputFilterArea (and others) wouldn't perfectly overlap the
379+ graphical keyboard rendered by ubuntu-keyboard (i.e. the opaque part
380+ of ubuntu-keyboard's surface).
381+
382+ [ Michael Zanetti ]
383+ * Initialize initialHeight/Width to height/width depending on scaleTo
384+ add checks for initialWidth/Height in the tests change sizes in
385+ tests to something else than the default for initialWidth/Height in
386+ order to catch failures there more easily
387+
388+ [ Omer Akram ]
389+ * Only show search indicator while the Dash is focued.
390+ * Add 2dp left margin for music and video tiles' title.
391+
392+ [ Nicolas d'Offay ]
393+ * Changed Infographics to use Ubuntu font.
394+
395+ [ Ubuntu daily release ]
396+ * Automatic snapshot from revision 463
4
397
5− -- Michał Sawicz <michal.sawicz@canonical.com> Tue, 15 Oct 2013 01:12:45 +0200
398+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 15 Oct 2013 11:05:04 +0000
6
399
7unity8 (7.82+13.10.20131011.2-0ubuntu1) saucy; urgency=low
400unity8 (7.82+13.10.20131011.2-0ubuntu1) saucy; urgency=low
8
401
debian/control+6−7
@@ -16,11 +16,7 @@ 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− libsigc++-2.0-dev,
21− libunity-api-dev (>= 7.80.3),
19+ libunity-api-dev (>= 7.80.4),
22− libunity-core-6.0-dev (>= 7.1.1),
23− libunity-dev (>= 7.0.12),
24 libunity-mir-dev,
20 libunity-mir-dev,
25 libunity-scopes-json-def-phone,
21 libunity-scopes-json-def-phone,
26 libupstart-dev,
22 libupstart-dev,
@@ -37,6 +33,7 @@ Build-Depends: cmake,
37 qtbase5-private-dev,
33 qtbase5-private-dev,
38 qtdeclarative5-dev,
34 qtdeclarative5-dev,
39 qtdeclarative5-dev-tools,
35 qtdeclarative5-dev-tools,
36+ qtdeclarative5-qtmultimedia-plugin,
40 qtdeclarative5-private-dev,
37 qtdeclarative5-private-dev,
41 qtdeclarative5-qtquick2-plugin,
38 qtdeclarative5-qtquick2-plugin,
42 qtdeclarative5-test-plugin,
39 qtdeclarative5-test-plugin,
@@ -66,7 +63,7 @@ Package: unity8
66Architecture: any
63Architecture: any
67Provides: indicator-renderer,
64Provides: indicator-renderer,
68Depends: gsettings-desktop-schemas,
65Depends: gsettings-desktop-schemas,
69− libunity-mir1,
66+ libunity-mir1 (>= 0.2),
70 qmenumodel-qml (>= 0.2.7),
67 qmenumodel-qml (>= 0.2.7),
71 qtdeclarative5-dee-plugin,
68 qtdeclarative5-dee-plugin,
72 qtdeclarative5-gsettings1.0,
69 qtdeclarative5-gsettings1.0,
@@ -78,6 +75,8 @@ Depends: gsettings-desktop-schemas,
78 unity8-fake-env | qtubuntu-shell,
75 unity8-fake-env | qtubuntu-shell,
79 unity8-private (= ${binary:Version}),
76 unity8-private (= ${binary:Version}),
80 unity8-private | unity-launcher-impl,
77 unity8-private | unity-launcher-impl,
78+ unity-plugin-scopes | unity-scopes-impl,
79+ unity-scopes-impl-0,
81# for setcap:
80# for setcap:
82 libcap2-bin,
81 libcap2-bin,
83 ${misc:Depends},
82 ${misc:Depends},
@@ -91,7 +90,7 @@ Description: Unity 8 shell
91Package: unity8-autopilot
90Package: unity8-autopilot
92Architecture: all
91Architecture: all
93Depends: gir1.2-glib-2.0,
92Depends: gir1.2-glib-2.0,
94− libautopilot-qt,
93+ libautopilot-qt (>= 1.4),
95 libqt5test5,
94 libqt5test5,
96 libqt5widgets5,
95 libqt5widgets5,
97 python-evdev,
96 python-evdev,
debian/unity8-fake-env.install+1
@@ -1 +1,2 @@
1usr/lib/*/unity8/qml/mocks
1usr/lib/*/unity8/qml/mocks
2+usr/share/unity8/mocks
debian/unity8.install−2
@@ -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
@@ -14,4 +13,3 @@ usr/share/unity8/Shell.qml
14usr/share/unity8/SideStage
13usr/share/unity8/SideStage
15usr/share/unity8/graphics
14usr/share/unity8/graphics
16data/unity8.conf usr/share/upstart/sessions/
15data/unity8.conf usr/share/upstart/sessions/
17−data/unity8-setcap.conf etc/init/boot-hooks/
debian/unity8.maintscriptnew file+1
@@ -0,0 +1 @@
1+rm_conffile /etc/init/boot-hooks/unity8-setcap.conf
graphics/applicationIcons/angrybirds@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/media-player@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/music@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/ski_safari@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/skype@18.pngdeleted

Binary file not shown.

main.cpp+14−8
@@ -28,6 +28,7 @@
28#include <QDebug>
28#include <QDebug>
29#include <libintl.h>
29#include <libintl.h>
30#include <dlfcn.h>
30#include <dlfcn.h>
31+#include <csignal>
31
32
32// local
33// local
33#include "paths.h"
34#include "paths.h"
@@ -78,14 +79,6 @@ void resolveIconTheme() {
78
79
79int startShell(int argc, const char** argv, void* server)
80int startShell(int argc, const char** argv, void* server)
80{
81{
81− /* Workaround Qt platform integration plugin not advertising itself
82− as having the following capabilities:
83− - QPlatformIntegration::ThreadedOpenGL
84− - QPlatformIntegration::BufferQueueingOpenGL
85− */
86− setenv("QML_FORCE_THREADED_RENDERER", "1", 1);
87− setenv("QML_FIXED_ANIMATION_STEP", "1", 1);
88−
89 const bool isUbuntuMirServer = qgetenv("QT_QPA_PLATFORM") == "ubuntumirserver";
82 const bool isUbuntuMirServer = qgetenv("QT_QPA_PLATFORM") == "ubuntumirserver";
90
83
91 QGuiApplication::setApplicationName("Unity 8");
84 QGuiApplication::setApplicationName("Unity 8");
@@ -186,6 +179,14 @@ int startShell(int argc, const char** argv, void* server)
186
179
187int main(int argc, const char *argv[])
180int main(int argc, const char *argv[])
188{
181{
182+ /* Workaround Qt platform integration plugin not advertising itself
183+ as having the following capabilities:
184+ - QPlatformIntegration::ThreadedOpenGL
185+ - QPlatformIntegration::BufferQueueingOpenGL
186+ */
187+ setenv("QML_FORCE_THREADED_RENDERER", "1", 1);
188+ setenv("QML_FIXED_ANIMATION_STEP", "1", 1);
189+
189 // For ubuntumirserver/ubuntumirclient
190 // For ubuntumirserver/ubuntumirclient
190 if (qgetenv("QT_QPA_PLATFORM").startsWith("ubuntumir")) {
191 if (qgetenv("QT_QPA_PLATFORM").startsWith("ubuntumir")) {
191 setenv("QT_QPA_PLATFORM", "ubuntumirserver", 1);
192 setenv("QT_QPA_PLATFORM", "ubuntumirserver", 1);
@@ -218,6 +219,11 @@ int main(int argc, const char *argv[])
218
219
219 return runWithClient(mirServer, startShell);
220 return runWithClient(mirServer, startShell);
220 } else {
221 } else {
222+ if (qgetenv("UPSTART_JOB") == "unity8") {
223+ // Emit SIGSTOP as expected by upstart, under Mir it's unity-mir that will raise it.
224+ // see http://upstart.ubuntu.com/cookbook/#expect-stop
225+ raise(SIGSTOP);
226+ }
221 return startShell(argc, argv, nullptr);
227 return startShell(argc, argv, nullptr);
222 }
228 }
223}
229}
paths.h.in+4−2
@@ -58,9 +58,11 @@ inline QStringList overrideImportPaths() {
58inline QStringList fallbackImportPaths() {
58inline QStringList fallbackImportPaths() {
59 QStringList paths;
59 QStringList paths;
60 if (isRunningInstalled()) {
60 if (isRunningInstalled()) {
61− paths << QString("@CMAKE_INSTALL_PREFIX@/@SHELL_PRIVATE_LIBDIR@/qml");
61+ paths << QString("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@");
62+ paths << QString("@SHELL_PLUGINDIR@");
62− paths << QString("@CMAKE_INSTALL_PREFIX@/@SHELL_PRIVATE_LIBDIR@/qml/mocks");
63+ paths << QString("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
63 } else {
64 } else {
65+ paths << QString("@SHELL_PLUGINDIR@");
64 paths << QString("@CMAKE_BINARY_DIR@/tests/mocks");
66 paths << QString("@CMAKE_BINARY_DIR@/tests/mocks");
65 }
67 }
66 return paths;
68 return paths;
plugins/AccountsService/plugin.cpp+1−1
@@ -20,7 +20,7 @@
20#include "AccountsService.h"
20#include "AccountsService.h"
21
21
22#include <QDBusMetaType>
22#include <QDBusMetaType>
23−#include <QtQml>
23+#include <QtQml/qqml.h>
24
24
25static QObject *service_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
25static QObject *service_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
26{
26{
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+2−1
@@ -17,6 +17,7 @@ include_directories(
17
17
18set(QMLPLUGIN_SRC
18set(QMLPLUGIN_SRC
19 ../Utils/qsortfilterproxymodelqml.cpp # FIXME evaluate a more generic approach for using other plugins
19 ../Utils/qsortfilterproxymodelqml.cpp # FIXME evaluate a more generic approach for using other plugins
20+ DBusGreeterList.cpp
20 Greeter.cpp
21 Greeter.cpp
21 plugin.cpp
22 plugin.cpp
22 UsersModel.cpp
23 UsersModel.cpp
@@ -33,7 +34,7 @@ target_link_libraries(LightDM-qml
33 ${LIBUSERMETRICSOUTPUT_LDFLAGS}
34 ${LIBUSERMETRICSOUTPUT_LDFLAGS}
34 )
35 )
35
36
36−qt5_use_modules(LightDM-qml Gui Qml)
37+qt5_use_modules(LightDM-qml DBus Gui Qml)
37
38
38# export the qmldir qmltypes and plugin files
39# export the qmldir qmltypes and plugin files
39export_qmlfiles(LightDM LightDM)
40export_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/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/listviewwithpageheader.cpp+32−6
@@ -155,6 +155,7 @@ ListViewWithPageHeader::ListViewWithPageHeader()
155 , m_topSectionItem(nullptr)
155 , m_topSectionItem(nullptr)
156 , m_forceNoClip(false)
156 , m_forceNoClip(false)
157 , m_inLayout(false)
157 , m_inLayout(false)
158+ , m_inContentHeightKeepHeaderShown(false)
158{
159{
159 m_clipItem = new QQuickItem(contentItem());
160 m_clipItem = new QQuickItem(contentItem());
160// m_clipItem = new QQuickRectangle(contentItem());
161// m_clipItem = new QQuickRectangle(contentItem());
@@ -286,10 +287,12 @@ void ListViewWithPageHeader::setSectionDelegate(QQmlComponent *delegate)
286 m_topSectionItem = getSectionItem(QString());
287 m_topSectionItem = getSectionItem(QString());
287 m_topSectionItem->setZ(3);
288 m_topSectionItem->setZ(3);
288 QQuickItemPrivate::get(m_topSectionItem)->setCulled(true);
289 QQuickItemPrivate::get(m_topSectionItem)->setCulled(true);
290+ connect(m_topSectionItem, SIGNAL(heightChanged()), SIGNAL(stickyHeaderHeightChanged()));
289
291
290 // TODO create sections for existing items
292 // TODO create sections for existing items
291
293
292 Q_EMIT sectionDelegateChanged();
294 Q_EMIT sectionDelegateChanged();
295+ Q_EMIT stickyHeaderHeightChanged();
293 }
296 }
294}
297}
295
298
@@ -325,6 +328,11 @@ void ListViewWithPageHeader::setForceNoClip(bool noClip)
325 }
328 }
326}
329}
327
330
331+int ListViewWithPageHeader::stickyHeaderHeight() const
332+{
333+ return m_topSectionItem ? m_topSectionItem->height() : 0;
334+}
335+
328void ListViewWithPageHeader::positionAtBeginning()
336void ListViewWithPageHeader::positionAtBeginning()
329{
337{
330 if (m_delegateModel->count() <= 0)
338 if (m_delegateModel->count() <= 0)
@@ -471,12 +479,18 @@ void ListViewWithPageHeader::componentComplete()
471
479
472void ListViewWithPageHeader::viewportMoved(Qt::Orientations orient)
480void ListViewWithPageHeader::viewportMoved(Qt::Orientations orient)
473{
481{
482+ // Check we are not being taken down and don't paint anything
483+ // TODO Check if we still need this in 5.2
484+ // For reproduction just inifnite loop testDash or testDashContent
485+ if (!QQmlEngine::contextForObject(this)->parentContext())
486+ return;
487+
474 QQuickFlickable::viewportMoved(orient);
488 QQuickFlickable::viewportMoved(orient);
475// qDebug() << "ListViewWithPageHeader::viewportMoved" << contentY();
489// qDebug() << "ListViewWithPageHeader::viewportMoved" << contentY();
476 qreal diff = m_previousContentY - contentY();
490 qreal diff = m_previousContentY - contentY();
477 const bool showHeaderAnimationRunning = m_contentYAnimation->isRunning() && contentYAnimationType == ContentYAnimationShowHeader;
491 const bool showHeaderAnimationRunning = m_contentYAnimation->isRunning() && contentYAnimationType == ContentYAnimationShowHeader;
478 if (m_headerItem) {
492 if (m_headerItem) {
479− auto oldHeaderItemShownHeight = m_headerItemShownHeight;
493+ const auto oldHeaderItemShownHeight = m_headerItemShownHeight;
480 if (contentY() < -m_minYExtent) {
494 if (contentY() < -m_minYExtent) {
481 // Stick the header item to the top when dragging down
495 // Stick the header item to the top when dragging down
482 m_headerItem->setY(contentY());
496 m_headerItem->setY(contentY());
@@ -491,10 +505,10 @@ void ListViewWithPageHeader::viewportMoved(Qt::Orientations orient)
491 const bool notShownByItsOwn = contentY() + diff >= m_headerItem->y() + m_headerItem->height();
505 const bool notShownByItsOwn = contentY() + diff >= m_headerItem->y() + m_headerItem->height();
492 const bool maximizeVisibleAreaRunning = m_contentYAnimation->isRunning() && contentYAnimationType == ContentYAnimationMaximizeVisibleArea;
506 const bool maximizeVisibleAreaRunning = m_contentYAnimation->isRunning() && contentYAnimationType == ContentYAnimationMaximizeVisibleArea;
493
507
494− if (!scrolledUp && contentY() == -m_minYExtent) {
508+ if (!scrolledUp && (contentY() == -m_minYExtent || (m_headerItemShownHeight == 0 && m_previousContentY == m_headerItem->y()))) {
495 m_headerItemShownHeight = 0;
509 m_headerItemShownHeight = 0;
496− m_headerItem->setY(contentY());
510+ m_headerItem->setY(-m_minYExtent);
497− } else if ((scrolledUp && notRebounding && notShownByItsOwn && !maximizeVisibleAreaRunning) || (m_headerItemShownHeight > 0)) {
511+ } else if ((scrolledUp && notRebounding && notShownByItsOwn && !maximizeVisibleAreaRunning) || (m_headerItemShownHeight > 0) || m_inContentHeightKeepHeaderShown) {
498 if (maximizeVisibleAreaRunning && diff > 0) // If we are maximizing and the header was shown, make sure we hide it
512 if (maximizeVisibleAreaRunning && diff > 0) // If we are maximizing and the header was shown, make sure we hide it
499 m_headerItemShownHeight -= diff;
513 m_headerItemShownHeight -= diff;
500 else
514 else
@@ -847,6 +861,11 @@ void ListViewWithPageHeader::itemCreated(int modelIndex, QObject *object)
847 }
861 }
848#endif
862#endif
849// qDebug() << "ListViewWithPageHeader::itemCreated" << modelIndex << item;
863// qDebug() << "ListViewWithPageHeader::itemCreated" << modelIndex << item;
864+ // Check we are not being taken down and don't paint anything
865+ // TODO Check if we still need this in 5.2
866+ // For reproduction just inifnite loop testDash or testDashContent
867+ if (!QQmlEngine::contextForObject(this)->parentContext())
868+ return;
850
869
851 item->setParentItem(m_clipItem);
870 item->setParentItem(m_clipItem);
852 QQmlContext *context = QQmlEngine::contextForObject(item)->parentContext();
871 QQmlContext *context = QQmlEngine::contextForObject(item)->parentContext();
@@ -980,7 +999,6 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
980 if (growUp) {
999 if (growUp) {
981 ListItem *firstItem = m_visibleItems.first();
1000 ListItem *firstItem = m_visibleItems.first();
982 firstItem->setY(firstItem->y() - item->height());
1001 firstItem->setY(firstItem->y() - item->height());
983− adjustMinYExtent();
984 }
1002 }
985 // Adding an item may break a "same section" chain, so check
1003 // Adding an item may break a "same section" chain, so check
986 // if we need adding a new section item
1004 // if we need adding a new section item
@@ -991,7 +1009,6 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
991 if (growUp && nextItem->m_sectionItem) {
1009 if (growUp && nextItem->m_sectionItem) {
992 ListItem *firstItem = m_visibleItems.first();
1010 ListItem *firstItem = m_visibleItems.first();
993 firstItem->setY(firstItem->y() - nextItem->m_sectionItem->height());
1011 firstItem->setY(firstItem->y() - nextItem->m_sectionItem->height());
994− adjustMinYExtent();
995 }
1012 }
996 }
1013 }
997 }
1014 }
@@ -1000,6 +1017,7 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
1000 ListItem *firstItem = m_visibleItems.first();
1017 ListItem *firstItem = m_visibleItems.first();
1001 firstItem->setY(oldFirstValidIndexPos);
1018 firstItem->setY(oldFirstValidIndexPos);
1002 }
1019 }
1020+ adjustMinYExtent();
1003 } else if (insert.index <= m_firstVisibleIndex) {
1021 } else if (insert.index <= m_firstVisibleIndex) {
1004 m_firstVisibleIndex += insert.count;
1022 m_firstVisibleIndex += insert.count;
1005 }
1023 }
@@ -1228,6 +1246,12 @@ void ListViewWithPageHeader::layout()
1228
1246
1229void ListViewWithPageHeader::updatePolish()
1247void ListViewWithPageHeader::updatePolish()
1230{
1248{
1249+ // Check we are not being taken down and don't paint anything
1250+ // TODO Check if we still need this in 5.2
1251+ // For reproduction just inifnite loop testDash or testDashContent
1252+ if (!QQmlEngine::contextForObject(this)->parentContext())
1253+ return;
1254+
1231 Q_FOREACH(ListItem *item, m_itemsToRelease)
1255 Q_FOREACH(ListItem *item, m_itemsToRelease)
1232 reallyReleaseItem(item);
1256 reallyReleaseItem(item);
1233 m_itemsToRelease.clear();
1257 m_itemsToRelease.clear();
@@ -1267,7 +1291,9 @@ void ListViewWithPageHeader::updatePolish()
1267
1291
1268 m_contentHeightDirty = false;
1292 m_contentHeightDirty = false;
1269 adjustMinYExtent();
1293 adjustMinYExtent();
1294+ m_inContentHeightKeepHeaderShown = m_headerItem && m_headerItem->y() == contentY();
1270 setContentHeight(contentHeight);
1295 setContentHeight(contentHeight);
1296+ m_inContentHeightKeepHeaderShown = false;
1271 }
1297 }
1272}
1298}
1273
1299
plugins/ListViewWithPageHeader/listviewwithpageheader.h+5
@@ -60,6 +60,7 @@ class ListViewWithPageHeader : public QQuickFlickable, public QQuickItemChangeLi
60 Q_PROPERTY(QQmlComponent *sectionDelegate READ sectionDelegate WRITE setSectionDelegate NOTIFY sectionDelegateChanged)
60 Q_PROPERTY(QQmlComponent *sectionDelegate READ sectionDelegate WRITE setSectionDelegate NOTIFY sectionDelegateChanged)
61 Q_PROPERTY(QString sectionProperty READ sectionProperty WRITE setSectionProperty NOTIFY sectionPropertyChanged)
61 Q_PROPERTY(QString sectionProperty READ sectionProperty WRITE setSectionProperty NOTIFY sectionPropertyChanged)
62 Q_PROPERTY(bool forceNoClip READ forceNoClip WRITE setForceNoClip NOTIFY forceNoClipChanged)
62 Q_PROPERTY(bool forceNoClip READ forceNoClip WRITE setForceNoClip NOTIFY forceNoClipChanged)
63+ Q_PROPERTY(int stickyHeaderHeight READ stickyHeaderHeight NOTIFY stickyHeaderHeightChanged)
63
64
64 friend class ListViewWithPageHeaderTest;
65 friend class ListViewWithPageHeaderTest;
65 friend class ListViewWithPageHeaderTestSection;
66 friend class ListViewWithPageHeaderTestSection;
@@ -87,6 +88,8 @@ public:
87 bool forceNoClip() const;
88 bool forceNoClip() const;
88 void setForceNoClip(bool noClip);
89 void setForceNoClip(bool noClip);
89
90
91+ int stickyHeaderHeight() const;
92+
90 Q_INVOKABLE void positionAtBeginning();
93 Q_INVOKABLE void positionAtBeginning();
91 Q_INVOKABLE void showHeader();
94 Q_INVOKABLE void showHeader();
92 Q_INVOKABLE QQuickItem *item(int modelIndex) const;
95 Q_INVOKABLE QQuickItem *item(int modelIndex) const;
@@ -104,6 +107,7 @@ Q_SIGNALS:
104 void sectionDelegateChanged();
107 void sectionDelegateChanged();
105 void sectionPropertyChanged();
108 void sectionPropertyChanged();
106 void forceNoClipChanged();
109 void forceNoClipChanged();
110+ void stickyHeaderHeightChanged();
107
111
108protected:
112protected:
109 void componentComplete();
113 void componentComplete();
@@ -202,6 +206,7 @@ private:
202
206
203 bool m_forceNoClip;
207 bool m_forceNoClip;
204 bool m_inLayout;
208 bool m_inLayout;
209+ bool m_inContentHeightKeepHeaderShown;
205
210
206 // Qt 5.0 doesn't like releasing the items just after itemCreated
211 // Qt 5.0 doesn't like releasing the items just after itemCreated
207 // so we delay the releasing until the next updatePolish
212 // so we delay the releasing until the next updatePolish
plugins/SessionBroadcast/plugin.cpp+1−1
@@ -19,7 +19,7 @@
19#include "plugin.h"
19#include "plugin.h"
20#include "SessionBroadcast.h"
20#include "SessionBroadcast.h"
21
21
22−#include <QtQml>
22+#include <QtQml/qqml.h>
23
23
24static QObject *broadcast_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
24static QObject *broadcast_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
25{
25{
plugins/Ubuntu/Gestures/AxisVelocityCalculator.cpp+9−18
@@ -21,25 +21,19 @@
21#include "AxisVelocityCalculator.h"
21#include "AxisVelocityCalculator.h"
22#include <QtCore/QElapsedTimer>
22#include <QtCore/QElapsedTimer>
23
23
24−class RealTimeSource : public UbuntuGestures::TimeSource {
25−public:
26− RealTimeSource()
27− : UbuntuGestures::TimeSource() {
24+using namespace UbuntuGestures;
28− m_timer.start();
29− }
30− virtual qint64 msecsSinceReference() {
31− return m_timer.elapsed();
32− }
33−private:
34− QElapsedTimer m_timer;
35−};
36
25
37AxisVelocityCalculator::AxisVelocityCalculator(QObject *parent)
26AxisVelocityCalculator::AxisVelocityCalculator(QObject *parent)
27+ : AxisVelocityCalculator(SharedTimeSource(new RealTimeSource), parent)
28+{
29+}
30+
31+AxisVelocityCalculator::AxisVelocityCalculator(const SharedTimeSource &timeSource,
32+ QObject *parent)
38 : QObject(parent)
33 : QObject(parent)
39− , m_timeSource(new RealTimeSource)
34+ , m_timeSource(timeSource)
40 , m_trackedPosition(0.0)
35 , m_trackedPosition(0.0)
41{
36{
42− m_timeSource->setParent(this);
43 reset();
37 reset();
44}
38}
45
39
@@ -142,11 +136,8 @@ int AxisVelocityCalculator::numSamples() const
142 }
136 }
143}
137}
144
138
145−void AxisVelocityCalculator::setTimeSource(UbuntuGestures::TimeSource *timeSource)
139+void AxisVelocityCalculator::setTimeSource(const SharedTimeSource &timeSource)
146{
140{
147− if (m_timeSource && m_timeSource->parent() == this)
148− delete m_timeSource;
149−
150 m_timeSource = timeSource;
141 m_timeSource = timeSource;
151
142
152 if (numSamples() > 0) {
143 if (numSamples() > 0) {
plugins/Ubuntu/Gestures/AxisVelocityCalculator.h+9−16
@@ -24,19 +24,7 @@
24#include "UbuntuGesturesGlobal.h"
24#include "UbuntuGesturesGlobal.h"
25#include <stdint.h>
25#include <stdint.h>
26#include <QtCore/QObject>
26#include <QtCore/QObject>
27−
27+#include "TimeSource.h"
28−namespace UbuntuGestures {
29−/*
30− Interface for a time source.
31− */
32−class UBUNTUGESTURES_EXPORT TimeSource : public QObject {
33− Q_OBJECT
34−public:
35− virtual ~TimeSource() {}
36− /* Returns the current time in milliseconds since some reference time in the past. */
37− virtual qint64 msecsSinceReference() = 0;
38−};
39−}
40
28
41/*
29/*
42 Estimates the current velocity of a finger based on recent movement along an axis
30 Estimates the current velocity of a finger based on recent movement along an axis
@@ -73,10 +61,15 @@ class UBUNTUGESTURES_EXPORT AxisVelocityCalculator : public QObject
73public:
61public:
74
62
75 /*
63 /*
76− Regular constructor
64+ Regular, simple, constructor
77 */
65 */
78 AxisVelocityCalculator(QObject *parent = 0);
66 AxisVelocityCalculator(QObject *parent = 0);
79
67
68+ /*
69+ Constructor that takes a TimeSource
70+ */
71+ AxisVelocityCalculator(const UbuntuGestures::SharedTimeSource &timeSource, QObject *parent = 0);
72+
80 virtual ~AxisVelocityCalculator();
73 virtual ~AxisVelocityCalculator();
81
74
82 qreal trackedPosition() const;
75 qreal trackedPosition() const;
@@ -97,7 +90,7 @@ public:
97 /*
90 /*
98 Replaces the TimeSource with the given one. Useful for testing purposes.
91 Replaces the TimeSource with the given one. Useful for testing purposes.
99 */
92 */
100− void setTimeSource(UbuntuGestures::TimeSource *timeSource);
93+ void setTimeSource(const UbuntuGestures::SharedTimeSource &timeSource);
101
94
102 /*
95 /*
103 The minimum amount of samples needed for a velocity calculation.
96 The minimum amount of samples needed for a velocity calculation.
@@ -145,7 +138,7 @@ private:
145 int m_samplesRead; /* index of the oldest sample available. -1 if buffer is empty */
138 int m_samplesRead; /* index of the oldest sample available. -1 if buffer is empty */
146 int m_samplesWrite; /* index where the next sample will be written */
139 int m_samplesWrite; /* index where the next sample will be written */
147
140
148− UbuntuGestures::TimeSource *m_timeSource;
141+ UbuntuGestures::SharedTimeSource m_timeSource;
149
142
150 qreal m_trackedPosition;
143 qreal m_trackedPosition;
151};
144};
plugins/Ubuntu/Gestures/CMakeLists.txt+2
@@ -6,6 +6,8 @@ set(UbuntuGestureQml_SOURCES
6 AxisVelocityCalculator.cpp
6 AxisVelocityCalculator.cpp
7 Direction.cpp
7 Direction.cpp
8 DirectionalDragArea.cpp
8 DirectionalDragArea.cpp
9+ PressedOutsideNotifier.cpp
10+ TimeSource.cpp
9)
11)
10
12
11add_definitions(-DUBUNTUGESTURES_LIBRARY)
13add_definitions(-DUBUNTUGESTURES_LIBRARY)
plugins/Ubuntu/Gestures/DirectionalDragArea.cpp+307−71
@@ -18,6 +18,75 @@
18
18
19#include <QtCore/qmath.h>
19#include <QtCore/qmath.h>
20#include <QtCore/QTimer>
20#include <QtCore/QTimer>
21+#include <QDebug>
22+
23+using namespace UbuntuGestures;
24+
25+#define DIRECTIONALDRAGAREA_DEBUG 0
26+
27+#if DIRECTIONALDRAGAREA_DEBUG
28+#define DDA_DEBUG(msg) qDebug("[DDA] " msg)
29+namespace {
30+QString touchPointStateToString(Qt::TouchPointState state) {
31+ switch (state) {
32+ case Qt::TouchPointPressed:
33+ return QString("pressed");
34+ case Qt::TouchPointMoved:
35+ return QString("moved");
36+ case Qt::TouchPointStationary:
37+ return QString("stationary");
38+ default: // Qt::TouchPointReleased:
39+ return QString("released");
40+ }
41+}
42+QString touchEventToString(QTouchEvent *ev)
43+{
44+ QString message;
45+
46+ switch (ev->type()) {
47+ case QEvent::TouchBegin:
48+ message.append("TouchBegin ");
49+ break;
50+ case QEvent::TouchUpdate:
51+ message.append("TouchUpdate ");
52+ break;
53+ case QEvent::TouchEnd:
54+ message.append("TouchEnd ");
55+ break;
56+ default: //QEvent::TouchCancel
57+ message.append("TouchCancel ");
58+ }
59+
60+ for (int i=0; i < ev->touchPoints().size(); ++i) {
61+
62+ const QTouchEvent::TouchPoint& touchPoint = ev->touchPoints().at(i);
63+ message.append(
64+ QString("(id:%1, state:%2, scenePos:(%3,%4)) ")
65+ .arg(touchPoint.id())
66+ .arg(touchPointStateToString(touchPoint.state()))
67+ .arg(touchPoint.scenePos().x())
68+ .arg(touchPoint.scenePos().y())
69+ );
70+ }
71+
72+ return message;
73+}
74+
75+const char *statusToString(DirectionalDragArea::Status status)
76+{
77+ if (status == DirectionalDragArea::WaitingForTouch) {
78+ return "WaitingForTouch";
79+ } else if (status == DirectionalDragArea::Undecided) {
80+ return "Undecided";
81+ } else {
82+ return "Recognized";
83+ }
84+}
85+
86+} // namespace {
87+#else // DIRECTIONALDRAGAREA_DEBUG
88+#define DDA_DEBUG(msg) do{}while(0)
89+#endif // DIRECTIONALDRAGAREA_DEBUG
21
90
22// Essentially a QTimer wrapper
91// Essentially a QTimer wrapper
23class RecognitionTimer : public UbuntuGestures::AbstractTimer
92class RecognitionTimer : public UbuntuGestures::AbstractTimer
@@ -48,9 +117,12 @@ DirectionalDragArea::DirectionalDragArea(QQuickItem *parent)
48 , m_minSpeed(0)
117 , m_minSpeed(0)
49 , m_maxSilenceTime(200)
118 , m_maxSilenceTime(200)
50 , m_silenceTime(0)
119 , m_silenceTime(0)
120+ , m_compositionTime(60)
51 , m_numSamplesOnLastSpeedCheck(0)
121 , m_numSamplesOnLastSpeedCheck(0)
52 , m_recognitionTimer(0)
122 , m_recognitionTimer(0)
53 , m_velocityCalculator(0)
123 , m_velocityCalculator(0)
124+ , m_timeSource(new RealTimeSource)
125+ , m_activeTouches(m_timeSource)
54{
126{
55 setRecognitionTimer(new RecognitionTimer(this));
127 setRecognitionTimer(new RecognitionTimer(this));
56 m_recognitionTimer->setInterval(60);
128 m_recognitionTimer->setInterval(60);
@@ -73,8 +145,8 @@ void DirectionalDragArea::setDirection(Direction::Type direction)
73
145
74void DirectionalDragArea::setMaxDeviation(qreal value)
146void DirectionalDragArea::setMaxDeviation(qreal value)
75{
147{
76− if (m_dampedPos.maxDelta() != value) {
148+ if (m_dampedScenePos.maxDelta() != value) {
77− m_dampedPos.setMaxDelta(value);
149+ m_dampedScenePos.setMaxDelta(value);
78 Q_EMIT maxDeviationChanged(value);
150 Q_EMIT maxDeviationChanged(value);
79 }
151 }
80}
152}
@@ -118,6 +190,14 @@ void DirectionalDragArea::setMaxSilenceTime(int value)
118 }
190 }
119}
191}
120
192
193+void DirectionalDragArea::setCompositionTime(int value)
194+{
195+ if (m_compositionTime != value) {
196+ m_compositionTime = value;
197+ Q_EMIT compositionTimeChanged(value);
198+ }
199+}
200+
121void DirectionalDragArea::setRecognitionTimer(UbuntuGestures::AbstractTimer *timer)
201void DirectionalDragArea::setRecognitionTimer(UbuntuGestures::AbstractTimer *timer)
122{
202{
123 int interval = 0;
203 int interval = 0;
@@ -141,9 +221,11 @@ void DirectionalDragArea::setRecognitionTimer(UbuntuGestures::AbstractTimer *tim
141 }
221 }
142}
222}
143
223
144−void DirectionalDragArea::setTimeSource(UbuntuGestures::TimeSource *timeSource)
224+void DirectionalDragArea::setTimeSource(const SharedTimeSource &timeSource)
145{
225{
226+ m_timeSource = timeSource;
146 m_velocityCalculator->setTimeSource(timeSource);
227 m_velocityCalculator->setTimeSource(timeSource);
228+ m_activeTouches.m_timeSource = timeSource;
147}
229}
148
230
149qreal DirectionalDragArea::distance() const
231qreal DirectionalDragArea::distance() const
@@ -186,6 +268,12 @@ qreal DirectionalDragArea::touchSceneY() const
186
268
187void DirectionalDragArea::touchEvent(QTouchEvent *event)
269void DirectionalDragArea::touchEvent(QTouchEvent *event)
188{
270{
271+ #if DIRECTIONALDRAGAREA_DEBUG
272+ // TODO Consider using qCDebug() when available (Qt 5.2)
273+ qDebug() << "[DDA]" << m_timeSource->msecsSinceReference()
274+ << qPrintable(touchEventToString(event));
275+ #endif
276+
189 if (!isEnabled() || !isVisible()) {
277 if (!isEnabled() || !isVisible()) {
190 QQuickItem::touchEvent(event);
278 QQuickItem::touchEvent(event);
191 return;
279 return;
@@ -198,76 +286,124 @@ void DirectionalDragArea::touchEvent(QTouchEvent *event)
198 case Undecided:
286 case Undecided:
199 touchEvent_undecided(event);
287 touchEvent_undecided(event);
200 break;
288 break;
201− case Recognized:
289+ default: // Recognized:
202 touchEvent_recognized(event);
290 touchEvent_recognized(event);
203 break;
291 break;
204− default: // Rejected
205− touchEvent_rejected(event);
206− break;
207 }
292 }
293+
294+ m_activeTouches.update(event);
208}
295}
209
296
210void DirectionalDragArea::touchEvent_absent(QTouchEvent *event)
297void DirectionalDragArea::touchEvent_absent(QTouchEvent *event)
211{
298{
212− if ((event->touchPointStates() && (Qt::TouchPointPressed || Qt::TouchPointMoved))
299+ if (!event->touchPointStates().testFlag(Qt::TouchPointPressed)) {
213− && event->touchPoints().count() == 1) {
300+ // Nothing to see here. No touch starting in this event.
214− const QTouchEvent::TouchPoint &touchPoint = event->touchPoints()[0];
301+ return;
215− m_startPos = touchPoint.pos();
302+ }
216− m_startScenePos = touchPoint.scenePos();
217− m_touchId = touchPoint.id();
218− m_dampedPos.reset(m_startPos);
219− updateVelocityCalculator(m_startPos);
220− m_velocityCalculator->reset();
221− m_numSamplesOnLastSpeedCheck = 0;
222− m_silenceTime = 0;
223− setPreviousPos(m_startPos);
224− setPreviousScenePos(m_startScenePos);
225
303
226− if (m_distanceThreshold > 0)
304+ if (isWithinTouchCompositionWindow()) {
227− setStatus(Undecided);
305+ // too close to the last touch start. So we consider them as starting roughly at the same time.
228− else
306+ // Can't be a single-touch gesture.
229− setStatus(Recognized);
307+ #if DIRECTIONALDRAGAREA_DEBUG
308+ qDebug("[DDA] A new touch point came in but we're still within time composition window. Ignoring it.");
309+ #endif
310+ return;
230 }
311 }
312+
313+ const QList<QTouchEvent::TouchPoint> &touchPoints = event->touchPoints();
314+
315+ const QTouchEvent::TouchPoint *newTouchPoint = nullptr;
316+ for (int i = 0; i < touchPoints.count(); ++i) {
317+ const QTouchEvent::TouchPoint &touchPoint = touchPoints.at(i);
318+ if (touchPoint.state() == Qt::TouchPointPressed) {
319+ if (newTouchPoint) {
320+ // more than one touch starting in this QTouchEvent. Can't be a single-touch gesture
321+ return;
322+ } else {
323+ // that's our candidate
324+ m_touchId = touchPoint.id();
325+ newTouchPoint = &touchPoint;
326+ }
327+ }
328+ }
329+
330+ Q_ASSERT(newTouchPoint);
331+
332+ // If we have made this far, we are good to go to the next status.
333+
334+ m_startPos = newTouchPoint->pos();
335+ m_startScenePos = newTouchPoint->scenePos();
336+ m_touchId = newTouchPoint->id();
337+ m_dampedScenePos.reset(m_startScenePos);
338+ updateVelocityCalculator(m_startScenePos);
339+ m_velocityCalculator->reset();
340+ m_numSamplesOnLastSpeedCheck = 0;
341+ m_silenceTime = 0;
342+ setPreviousPos(m_startPos);
343+ setPreviousScenePos(m_startScenePos);
344+
345+ setStatus(Undecided);
231}
346}
232
347
233void DirectionalDragArea::touchEvent_undecided(QTouchEvent *event)
348void DirectionalDragArea::touchEvent_undecided(QTouchEvent *event)
234{
349{
235 const QTouchEvent::TouchPoint *touchPoint = fetchTargetTouchPoint(event);
350 const QTouchEvent::TouchPoint *touchPoint = fetchTargetTouchPoint(event);
351+
352+ if (!touchPoint) {
353+ qCritical() << "DirectionalDragArea[status=Undecided]: touch " << m_touchId
354+ << "missing from QTouchEvent without first reaching state Qt::TouchPointReleased. "
355+ "Considering it as released.";
356+ setStatus(WaitingForTouch);
357+ return;
358+ }
359+
236− const QPointF &touchPos = touchPoint->pos();
360+ const QPointF &touchScenePos = touchPoint->scenePos();
237
361
238 if (touchPoint->state() == Qt::TouchPointReleased) {
362 if (touchPoint->state() == Qt::TouchPointReleased) {
239 // touch has ended before recognition concluded
363 // touch has ended before recognition concluded
364+ DDA_DEBUG("Touch has ended before recognition concluded");
240 setStatus(WaitingForTouch);
365 setStatus(WaitingForTouch);
241 return;
366 return;
242 }
367 }
243
368
244− if (event->touchPointStates().testFlag(Qt::TouchPointPressed)
369+ if (event->touchPointStates().testFlag(Qt::TouchPointPressed) && isWithinTouchCompositionWindow()) {
245− || event->touchPoints().count() > 1) {
246 // multi-finger drags are not accepted
370 // multi-finger drags are not accepted
371+ DDA_DEBUG("Multi-finger drags are not accepted");
247− setStatus(Rejected);
372+ setStatus(WaitingForTouch);
248 return;
373 return;
249 }
374 }
250
375
251− m_previousDampedPos.setX(m_dampedPos.x());
376+ m_previousDampedScenePos.setX(m_dampedScenePos.x());
252− m_previousDampedPos.setY(m_dampedPos.y());
377+ m_previousDampedScenePos.setY(m_dampedScenePos.y());
253− m_dampedPos.update(touchPos);
378+ m_dampedScenePos.update(touchScenePos);
254− updateVelocityCalculator(touchPos);
379+ updateVelocityCalculator(touchScenePos);
255
380
256 if (!pointInsideAllowedArea()) {
381 if (!pointInsideAllowedArea()) {
382+ DDA_DEBUG("Rejecting gesture because touch point is outside allowed area.");
257− setStatus(Rejected);
383+ setStatus(WaitingForTouch);
258 return;
384 return;
259 }
385 }
260
386
261 if (!movingInRightDirection()) {
387 if (!movingInRightDirection()) {
388+ DDA_DEBUG("Rejecting gesture becauuse touch point is moving in the wrong direction.");
262− setStatus(Rejected);
389+ setStatus(WaitingForTouch);
263 return;
390 return;
264 }
391 }
265
392
266− setPreviousPos(touchPos);
393+ setPreviousPos(touchPoint->pos());
267− setPreviousScenePos(touchPoint->scenePos());
394+ setPreviousScenePos(touchScenePos);
268
395
396+ if (isWithinTouchCompositionWindow()) {
397+ // There's still time for some new touch to appear and ruin our party as it would be combined
398+ // with our m_touchId one and therefore deny the possibility of a single-finger gesture.
399+ DDA_DEBUG("Sill within composition window. Let's wait more.");
400+ return;
401+ }
402+
269− if (movedFarEnough(touchPos)) {
403+ if (movedFarEnough(touchScenePos)) {
270 setStatus(Recognized);
404 setStatus(Recognized);
405+ } else {
406+ DDA_DEBUG("Didn't move far enough yet. Let's wait more.");
271 }
407 }
272}
408}
273
409
@@ -275,20 +411,18 @@ void DirectionalDragArea::touchEvent_recognized(QTouchEvent *event)
275{
411{
276 const QTouchEvent::TouchPoint *touchPoint = fetchTargetTouchPoint(event);
412 const QTouchEvent::TouchPoint *touchPoint = fetchTargetTouchPoint(event);
277
413
278− setPreviousPos(touchPoint->pos());
279− setPreviousScenePos(touchPoint->scenePos());
280−
281− if (touchPoint->state() == Qt::TouchPointReleased) {
414+ if (!touchPoint) {
415+ qCritical() << "DirectionalDragArea[status=Recognized]: touch " << m_touchId
416+ << "missing from QTouchEvent without first reaching state Qt::TouchPointReleased. "
417+ "Considering it as released.";
282 setStatus(WaitingForTouch);
418 setStatus(WaitingForTouch);
283− }
419+ } else {
284−}
420+ setPreviousPos(touchPoint->pos());
285−
421+ setPreviousScenePos(touchPoint->scenePos());
286−void DirectionalDragArea::touchEvent_rejected(QTouchEvent *event)
287−{
288− const QTouchEvent::TouchPoint *touchPoint = fetchTargetTouchPoint(event);
289
422
290− if (!touchPoint || touchPoint->state() == Qt::TouchPointReleased) {
423+ if (touchPoint->state() == Qt::TouchPointReleased) {
291− setStatus(WaitingForTouch);
424+ setStatus(WaitingForTouch);
425+ }
292 }
426 }
293}
427}
294
428
@@ -307,8 +441,8 @@ const QTouchEvent::TouchPoint *DirectionalDragArea::fetchTargetTouchPoint(QTouch
307
441
308bool DirectionalDragArea::pointInsideAllowedArea() const
442bool DirectionalDragArea::pointInsideAllowedArea() const
309{
443{
310− qreal dX = m_dampedPos.x() - m_startPos.x();
444+ qreal dX = m_dampedScenePos.x() - m_startScenePos.x();
311− qreal dY = m_dampedPos.y() - m_startPos.y();
445+ qreal dY = m_dampedScenePos.y() - m_startScenePos.y();
312
446
313 switch (m_direction) {
447 switch (m_direction) {
314 case Direction::Upwards:
448 case Direction::Upwards:
@@ -326,22 +460,26 @@ bool DirectionalDragArea::movingInRightDirection() const
326{
460{
327 switch (m_direction) {
461 switch (m_direction) {
328 case Direction::Upwards:
462 case Direction::Upwards:
329− return m_dampedPos.y() <= m_previousDampedPos.y();
463+ return m_dampedScenePos.y() <= m_previousDampedScenePos.y();
330 case Direction::Downwards:
464 case Direction::Downwards:
331− return m_dampedPos.y() >= m_previousDampedPos.y();
465+ return m_dampedScenePos.y() >= m_previousDampedScenePos.y();
332 case Direction::Leftwards:
466 case Direction::Leftwards:
333− return m_dampedPos.x() <= m_previousDampedPos.x();
467+ return m_dampedScenePos.x() <= m_previousDampedScenePos.x();
334 default: // Direction::Rightwards:
468 default: // Direction::Rightwards:
335− return m_dampedPos.x() >= m_previousDampedPos.x();
469+ return m_dampedScenePos.x() >= m_previousDampedScenePos.x();
336 }
470 }
337}
471}
338
472
339bool DirectionalDragArea::movedFarEnough(const QPointF &point) const
473bool DirectionalDragArea::movedFarEnough(const QPointF &point) const
340{
474{
475+ if (m_distanceThreshold > 0) {
341− if (Direction::isHorizontal(m_direction))
476+ if (Direction::isHorizontal(m_direction))
342− return qFabs(point.x() - m_startPos.x()) > m_distanceThreshold;
477+ return qFabs(point.x() - m_startScenePos.x()) > m_distanceThreshold;
343− else
478+ else
344− return qFabs(point.y() - m_startPos.y()) > m_distanceThreshold;
479+ return qFabs(point.y() - m_startScenePos.y()) > m_distanceThreshold;
480+ } else {
481+ return true;
482+ }
345}
483}
346
484
347void DirectionalDragArea::checkSpeed()
485void DirectionalDragArea::checkSpeed()
@@ -351,7 +489,8 @@ void DirectionalDragArea::checkSpeed()
351 qreal minSpeedMsecs = m_minSpeed / 1000.0;
489 qreal minSpeedMsecs = m_minSpeed / 1000.0;
352
490
353 if (speed < minSpeedMsecs) {
491 if (speed < minSpeedMsecs) {
492+ DDA_DEBUG("Rejecting gesture because it's below minimum speed.");
354− setStatus(Rejected);
493+ setStatus(WaitingForTouch);
355 }
494 }
356 }
495 }
357
496
@@ -359,7 +498,8 @@ void DirectionalDragArea::checkSpeed()
359 m_silenceTime += m_recognitionTimer->interval();
498 m_silenceTime += m_recognitionTimer->interval();
360
499
361 if (m_silenceTime > m_maxSilenceTime) {
500 if (m_silenceTime > m_maxSilenceTime) {
501+ DDA_DEBUG("Rejecting gesture because it's silence time has been exceeded.");
362− setStatus(Rejected);
502+ setStatus(WaitingForTouch);
363 }
503 }
364 } else {
504 } else {
365 m_silenceTime = 0;
505 m_silenceTime = 0;
@@ -381,11 +521,13 @@ void DirectionalDragArea::setStatus(DirectionalDragArea::Status newStatus)
381 m_status = newStatus;
521 m_status = newStatus;
382 Q_EMIT statusChanged(m_status);
522 Q_EMIT statusChanged(m_status);
383
523
524+ #if DIRECTIONALDRAGAREA_DEBUG
525+ qDebug() << "[DDA]" << statusToString(oldStatus) << "->" << statusToString(newStatus);
526+ #endif
527+
384 switch (newStatus) {
528 switch (newStatus) {
385 case WaitingForTouch:
529 case WaitingForTouch:
386− if (oldStatus != DirectionalDragArea::Rejected) {
387− Q_EMIT draggingChanged(false);
530+ Q_EMIT draggingChanged(false);
388− }
389 break;
531 break;
390 case Undecided:
532 case Undecided:
391 m_recognitionTimer->start();
533 m_recognitionTimer->start();
@@ -395,9 +537,6 @@ void DirectionalDragArea::setStatus(DirectionalDragArea::Status newStatus)
395 if (oldStatus == WaitingForTouch)
537 if (oldStatus == WaitingForTouch)
396 Q_EMIT draggingChanged(true);
538 Q_EMIT draggingChanged(true);
397 break;
539 break;
398− case Rejected:
399− Q_EMIT draggingChanged(false);
400− break;
401 default:
540 default:
402 // no-op
541 // no-op
403 break;
542 break;
@@ -406,8 +545,6 @@ void DirectionalDragArea::setStatus(DirectionalDragArea::Status newStatus)
406
545
407void DirectionalDragArea::setPreviousPos(const QPointF &point)
546void DirectionalDragArea::setPreviousPos(const QPointF &point)
408{
547{
409− Q_ASSERT(m_status != Rejected);
410−
411 bool xChanged = m_previousPos.x() != point.x();
548 bool xChanged = m_previousPos.x() != point.x();
412 bool yChanged = m_previousPos.y() != point.y();
549 bool yChanged = m_previousPos.y() != point.y();
413
550
@@ -428,8 +565,6 @@ void DirectionalDragArea::setPreviousPos(const QPointF &point)
428
565
429void DirectionalDragArea::setPreviousScenePos(const QPointF &point)
566void DirectionalDragArea::setPreviousScenePos(const QPointF &point)
430{
567{
431− Q_ASSERT(m_status != Rejected);
432−
433 bool xChanged = m_previousScenePos.x() != point.x();
568 bool xChanged = m_previousScenePos.x() != point.x();
434 bool yChanged = m_previousScenePos.y() != point.y();
569 bool yChanged = m_previousScenePos.y() != point.y();
435
570
@@ -457,5 +592,106 @@ void DirectionalDragArea::updateVelocityCalculator(const QPointF &point)
457 }
592 }
458}
593}
459
594
595+bool DirectionalDragArea::isWithinTouchCompositionWindow()
596+{
597+ return !m_activeTouches.isEmpty() &&
598+ m_timeSource->msecsSinceReference() <=
599+ m_activeTouches.mostRecentStartTime() + (qint64)compositionTime();
600+}
601+
602+//************************** ActiveTouchesInfo **************************
603+
604+DirectionalDragArea::ActiveTouchesInfo::ActiveTouchesInfo(const SharedTimeSource &timeSource)
605+ : m_timeSource(timeSource), m_lastUsedIndex(-1)
606+{
607+ // Estimate of the maximum number of active touches we might reach.
608+ // Not a problem if it ends up being an underestimate as this is just
609+ // an optimization.
610+ m_vector.resize(3);
611+}
612+
613+void DirectionalDragArea::ActiveTouchesInfo::update(QTouchEvent *event)
614+{
615+ if (!(event->touchPointStates() & (Qt::TouchPointPressed | Qt::TouchPointReleased))) {
616+ // nothing to update
617+ return;
618+ }
619+
620+ const QList<QTouchEvent::TouchPoint> &touchPoints = event->touchPoints();
621+ for (int i = 0; i < touchPoints.count(); ++i) {
622+ const QTouchEvent::TouchPoint &touchPoint = touchPoints.at(i);
623+ if (touchPoint.state() == Qt::TouchPointPressed) {
624+ addTouchPoint(touchPoint);
625+ } else if (touchPoint.state() == Qt::TouchPointReleased) {
626+ removeTouchPoint(touchPoint);
627+ }
628+ }
629+}
630+
631+void DirectionalDragArea::ActiveTouchesInfo::addTouchPoint(const QTouchEvent::TouchPoint &touchPoint)
632+{
633+ ActiveTouchInfo &activeTouchInfo = getEmptySlot();
634+ activeTouchInfo.id = touchPoint.id();
635+ activeTouchInfo.startTime = m_timeSource->msecsSinceReference();
636+}
637+
638+void DirectionalDragArea::ActiveTouchesInfo::removeTouchPoint(const QTouchEvent::TouchPoint &touchPoint)
639+{
640+ for (int i = 0; i <= m_lastUsedIndex; ++i) {
641+ if (touchPoint.id() == m_vector.at(i).id) {
642+ freeSlot(i);
643+ return;
644+ }
645+ }
646+ Q_ASSERT(false); // shouldn't reach this point
647+}
648+
649+DirectionalDragArea::ActiveTouchInfo &DirectionalDragArea::ActiveTouchesInfo::getEmptySlot()
650+{
651+ Q_ASSERT(m_lastUsedIndex < m_vector.size());
652+
653+ // Look for an in-between vacancy first
654+ for (int i = 0; i < m_lastUsedIndex; ++i) {
655+ ActiveTouchInfo &activeTouchInfo = m_vector[i];
656+ if (!activeTouchInfo.isValid()) {
657+ return activeTouchInfo;
658+ }
659+ }
660+
661+ ++m_lastUsedIndex;
662+ if (m_lastUsedIndex >= m_vector.size()) {
663+ m_vector.resize(m_lastUsedIndex + 1);
664+ }
665+
666+ return m_vector[m_lastUsedIndex];
667+}
668+
669+void DirectionalDragArea::ActiveTouchesInfo::freeSlot(int index)
670+{
671+ m_vector[index].reset();
672+ if (index == m_lastUsedIndex) {
673+ do {
674+ --m_lastUsedIndex;
675+ } while (m_lastUsedIndex >= 0 && !m_vector.at(m_lastUsedIndex).isValid());
676+ }
677+}
678+
679+qint64 DirectionalDragArea::ActiveTouchesInfo::mostRecentStartTime()
680+{
681+ Q_ASSERT(m_lastUsedIndex >= 0);
682+
683+ qint64 highestStartTime = m_vector.at(0).startTime;
684+ int i = 1;
685+ do {
686+ const ActiveTouchInfo &activeTouchInfo = m_vector.at(i);
687+ if (activeTouchInfo.isValid() && activeTouchInfo.startTime > highestStartTime) {
688+ highestStartTime = activeTouchInfo.startTime;
689+ }
690+ ++i;
691+ } while (i < m_lastUsedIndex);
692+
693+ return highestStartTime;
694+}
695+
460// Because we are defining a new QObject-based class (RecognitionTimer) here.
696// Because we are defining a new QObject-based class (RecognitionTimer) here.
461#include "DirectionalDragArea.moc"
697#include "DirectionalDragArea.moc"
plugins/Ubuntu/Gestures/DirectionalDragArea.h+50−13
@@ -117,9 +117,17 @@ class UBUNTUGESTURES_EXPORT DirectionalDragArea : public QQuickItem {
117 Q_PROPERTY(int maxSilenceTime READ maxSilenceTime
117 Q_PROPERTY(int maxSilenceTime READ maxSilenceTime
118 WRITE setMaxSilenceTime
118 WRITE setMaxSilenceTime
119 NOTIFY maxSilenceTimeChanged)
119 NOTIFY maxSilenceTimeChanged)
120+
120 //
121 //
121 /////
122 /////
122
123
124+ // Maximum time (in milliseconds) after the start of a given touch point where
125+ // subsequent touch starts are grouped with the first one into an N-touches gesture
126+ // (e.g. a two-fingers tap or drag).
127+ Q_PROPERTY(int compositionTime READ compositionTime
128+ WRITE setCompositionTime
129+ NOTIFY compositionTimeChanged)
130+
123 Q_ENUMS(Direction)
131 Q_ENUMS(Direction)
124 Q_ENUMS(Status)
132 Q_ENUMS(Status)
125public:
133public:
@@ -130,26 +138,23 @@ public:
130
138
131 // Describes the state of the directional drag gesture.
139 // Describes the state of the directional drag gesture.
132 enum Status {
140 enum Status {
133− // There's no touch point over this area.
141+ // Waiting for a new touch point to land on this area. No gesture is being processed
142+ // or tracked.
134 WaitingForTouch,
143 WaitingForTouch,
135
144
136 // A touch point has landed on this area but it's not know yet whether it is
145 // A touch point has landed on this area but it's not know yet whether it is
137 // performing a drag in the correct direction.
146 // performing a drag in the correct direction.
147+ // If it's decided that the touch point is not performing a directional drag gesture,
148+ // it will be rejected/ignored and status will return to WaitingForTouch.
138 Undecided, //Recognizing,
149 Undecided, //Recognizing,
139
150
140 // There's a touch point in this area and it performed a drag in the correct
151 // There's a touch point in this area and it performed a drag in the correct
141 // direction.
152 // direction.
142 //
153 //
143− // Once recognized, the gesture state will move back to Absent only once
154+ // Once recognized, the gesture state will move back to WaitingForTouch only once
144 // that touch point ends. The gesture will remain in the Recognized state even if
155 // that touch point ends. The gesture will remain in the Recognized state even if
145 // the touch point starts moving in other directions or halts.
156 // the touch point starts moving in other directions or halts.
146 Recognized,
157 Recognized,
147−
148− // A gesture was performed but it wasn't a single-touch drag in the correct
149− // direction.
150− // It will remain in this state until there are no more touch points over this
151− // area, at which point it will move to Absent state.
152− Rejected
153 };
158 };
154 Status status() const { return m_status; }
159 Status status() const { return m_status; }
155
160
@@ -164,7 +169,7 @@ public:
164
169
165 bool dragging() const { return (m_status == Undecided) || (m_status == Recognized); }
170 bool dragging() const { return (m_status == Undecided) || (m_status == Recognized); }
166
171
167− qreal maxDeviation() const { return m_dampedPos.maxDelta(); }
172+ qreal maxDeviation() const { return m_dampedScenePos.maxDelta(); }
168 void setMaxDeviation(qreal value);
173 void setMaxDeviation(qreal value);
169
174
170 qreal wideningAngle() const;
175 qreal wideningAngle() const;
@@ -179,13 +184,16 @@ public:
179 int maxSilenceTime() const { return m_maxSilenceTime; }
184 int maxSilenceTime() const { return m_maxSilenceTime; }
180 void setMaxSilenceTime(int value);
185 void setMaxSilenceTime(int value);
181
186
187+ int compositionTime() const { return m_compositionTime; }
188+ void setCompositionTime(int value);
189+
182 // Replaces the existing Timer with the given one.
190 // Replaces the existing Timer with the given one.
183 //
191 //
184 // Useful for providing a fake timer when testing.
192 // Useful for providing a fake timer when testing.
185 void setRecognitionTimer(UbuntuGestures::AbstractTimer *timer);
193 void setRecognitionTimer(UbuntuGestures::AbstractTimer *timer);
186
194
187 // Useful for testing, where a fake time source can be supplied
195 // Useful for testing, where a fake time source can be supplied
188− void setTimeSource(UbuntuGestures::TimeSource *timeSource);
196+ void setTimeSource(const UbuntuGestures::SharedTimeSource &timeSource);
189
197
190Q_SIGNALS:
198Q_SIGNALS:
191 void directionChanged(Direction::Type direction);
199 void directionChanged(Direction::Type direction);
@@ -198,6 +206,7 @@ Q_SIGNALS:
198 void distanceThresholdChanged(qreal value);
206 void distanceThresholdChanged(qreal value);
199 void minSpeedChanged(qreal value);
207 void minSpeedChanged(qreal value);
200 void maxSilenceTimeChanged(int value);
208 void maxSilenceTimeChanged(int value);
209+ void compositionTimeChanged(int value);
201 void touchXChanged(qreal value);
210 void touchXChanged(qreal value);
202 void touchYChanged(qreal value);
211 void touchYChanged(qreal value);
203 void touchSceneXChanged(qreal value);
212 void touchSceneXChanged(qreal value);
@@ -213,7 +222,6 @@ private:
213 void touchEvent_absent(QTouchEvent *event);
222 void touchEvent_absent(QTouchEvent *event);
214 void touchEvent_undecided(QTouchEvent *event);
223 void touchEvent_undecided(QTouchEvent *event);
215 void touchEvent_recognized(QTouchEvent *event);
224 void touchEvent_recognized(QTouchEvent *event);
216− void touchEvent_rejected(QTouchEvent *event);
217 bool pointInsideAllowedArea() const;
225 bool pointInsideAllowedArea() const;
218 bool movingInRightDirection() const;
226 bool movingInRightDirection() const;
219 bool movedFarEnough(const QPointF &point) const;
227 bool movedFarEnough(const QPointF &point) const;
@@ -222,6 +230,7 @@ private:
222 void setPreviousPos(const QPointF &point);
230 void setPreviousPos(const QPointF &point);
223 void setPreviousScenePos(const QPointF &point);
231 void setPreviousScenePos(const QPointF &point);
224 void updateVelocityCalculator(const QPointF &point);
232 void updateVelocityCalculator(const QPointF &point);
233+ bool isWithinTouchCompositionWindow();
225
234
226 Status m_status;
235 Status m_status;
227
236
@@ -233,8 +242,8 @@ private:
233
242
234 // A movement damper is used in some of the gesture recognition calculations
243 // A movement damper is used in some of the gesture recognition calculations
235 // to get rid of noise or small oscillations in the touch position.
244 // to get rid of noise or small oscillations in the touch position.
236− DampedPointF m_dampedPos;
245+ DampedPointF m_dampedScenePos;
237− QPointF m_previousDampedPos;
246+ QPointF m_previousDampedScenePos;
238
247
239 Direction::Type m_direction;
248 Direction::Type m_direction;
240 qreal m_wideningAngle; // in degrees
249 qreal m_wideningAngle; // in degrees
@@ -243,9 +252,37 @@ private:
243 qreal m_minSpeed;
252 qreal m_minSpeed;
244 int m_maxSilenceTime; // in milliseconds
253 int m_maxSilenceTime; // in milliseconds
245 int m_silenceTime; // in milliseconds
254 int m_silenceTime; // in milliseconds
255+ int m_compositionTime; // in milliseconds
246 int m_numSamplesOnLastSpeedCheck;
256 int m_numSamplesOnLastSpeedCheck;
247 UbuntuGestures::AbstractTimer *m_recognitionTimer;
257 UbuntuGestures::AbstractTimer *m_recognitionTimer;
248 AxisVelocityCalculator *m_velocityCalculator;
258 AxisVelocityCalculator *m_velocityCalculator;
259+
260+ UbuntuGestures::SharedTimeSource m_timeSource;
261+
262+ // Information about an active touch point
263+ struct ActiveTouchInfo {
264+ ActiveTouchInfo() : id(-1), startTime(-1) {}
265+ bool isValid() const { return id != -1; }
266+ void reset() { id = -1; }
267+ int id;
268+ qint64 startTime;
269+ };
270+ class ActiveTouchesInfo {
271+ public:
272+ ActiveTouchesInfo(const UbuntuGestures::SharedTimeSource &timeSource);
273+ void update(QTouchEvent *event);
274+ ActiveTouchInfo &touchInfo(int id);
275+ qint64 mostRecentStartTime();
276+ UbuntuGestures::SharedTimeSource m_timeSource;
277+ bool isEmpty() const { return m_lastUsedIndex == -1; }
278+ private:
279+ void addTouchPoint(const QTouchEvent::TouchPoint &touchPoint);
280+ ActiveTouchInfo &getEmptySlot();
281+ void freeSlot(int index);
282+ void removeTouchPoint(const QTouchEvent::TouchPoint &touchPoint);
283+ QVector<struct ActiveTouchInfo> m_vector;
284+ int m_lastUsedIndex;
285+ } m_activeTouches;
249};
286};
250
287
251#endif // DIRECTIONAL_DRAG_AREA_H
288#endif // DIRECTIONAL_DRAG_AREA_H
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/TimeSource.cppnew file+49
@@ -0,0 +1,49 @@
1+/*
2+ * Copyright (C) 2013 - Canonical Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it
5+ * under the terms of the GNU Lesser General Public License, as
6+ * published by the Free Software Foundation; either version 2.1 or 3.0
7+ * of the License.
8+ *
9+ * This program is distributed in the hope that it will be useful, but
10+ * WITHOUT ANY WARRANTY; without even the implied warranties of
11+ * MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
12+ * PURPOSE. See the applicable version of the GNU Lesser General Public
13+ * License for more details.
14+ *
15+ * You should have received a copy of both the GNU Lesser General Public
16+ * License along with this program. If not, see <http://www.gnu.org/licenses/>
17+ *
18+ * Authored by: Daniel d'Andrada <daniel.dandrada@canonical.com>
19+ */
20+
21+#include "TimeSource.h"
22+
23+#include <QElapsedTimer>
24+
25+namespace UbuntuGestures {
26+class RealTimeSourcePrivate {
27+public:
28+ QElapsedTimer timer;
29+};
30+}
31+
32+using namespace UbuntuGestures;
33+
34+RealTimeSource::RealTimeSource()
35+ : UbuntuGestures::TimeSource()
36+ , d(new RealTimeSourcePrivate)
37+{
38+ d->timer.start();
39+}
40+
41+RealTimeSource::~RealTimeSource()
42+{
43+ delete d;
44+}
45+
46+qint64 RealTimeSource::msecsSinceReference()
47+{
48+ return d->timer.elapsed();
49+}
plugins/Ubuntu/Gestures/TimeSource.hnew file+54
@@ -0,0 +1,54 @@
1+/*
2+ * Copyright (C) 2013 - Canonical Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it
5+ * under the terms of the GNU Lesser General Public License, as
6+ * published by the Free Software Foundation; either version 2.1 or 3.0
7+ * of the License.
8+ *
9+ * This program is distributed in the hope that it will be useful, but
10+ * WITHOUT ANY WARRANTY; without even the implied warranties of
11+ * MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
12+ * PURPOSE. See the applicable version of the GNU Lesser General Public
13+ * License for more details.
14+ *
15+ * You should have received a copy of both the GNU Lesser General Public
16+ * License along with this program. If not, see <http://www.gnu.org/licenses/>
17+ *
18+ * Authored by: Daniel d'Andrada <daniel.dandrada@canonical.com>
19+ */
20+
21+#ifndef UBUNTUGESTURES_TIMESOURCE_H
22+#define UBUNTUGESTURES_TIMESOURCE_H
23+
24+#include "UbuntuGesturesGlobal.h"
25+#include <QSharedPointer>
26+
27+namespace UbuntuGestures {
28+/*
29+ Interface for a time source.
30+ */
31+class UBUNTUGESTURES_EXPORT TimeSource {
32+public:
33+ virtual ~TimeSource() {}
34+ /* Returns the current time in milliseconds since some reference time in the past. */
35+ virtual qint64 msecsSinceReference() = 0;
36+};
37+typedef QSharedPointer<TimeSource> SharedTimeSource;
38+
39+/*
40+ Implementation of a time source
41+ */
42+class RealTimeSourcePrivate;
43+class RealTimeSource : public TimeSource {
44+public:
45+ RealTimeSource();
46+ virtual ~RealTimeSource();
47+ qint64 msecsSinceReference() override;
48+private:
49+ RealTimeSourcePrivate *d;
50+};
51+
52+} // namespace UbuntuGestures
53+
54+#endif // UBUNTUGESTURES_TIMESOURCE_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/CMakeLists.txt−69
@@ -1,71 +1,2 @@
1−# export_qmlplugin macro
2−include(Plugins)
3−
4add_subdirectory(Indicators)
1add_subdirectory(Indicators)
5−
6−# Dependencies
7−include(FindPkgConfig)
8−pkg_check_modules(QTDEE REQUIRED libdee-qt5>=3.2)
9−pkg_check_modules(UNITYCORE REQUIRED unity-core-6.0>=7.1.1)
10−
11−include_directories(
12− ${CMAKE_CURRENT_SOURCE_DIR}
13− ${CMAKE_CURRENT_BINARY_DIR}
14− ${QTDEE_INCLUDE_DIRS}
15− ${UNITYCORE_INCLUDE_DIRS}
16− ${Qt5DBus_INCLUDE_DIRS}
17−)
18−
19−set(QMLPLUGIN_SRC
20− abstractfilteroption.cpp
21− scope.cpp
22− scopes.cpp
23− categories.cpp
24− checkoptionfilter.cpp
25− filter.cpp
26− filteroption.cpp
27− filters.cpp
28− genericoptionsmodel.cpp
29− ratingoptionsmodel.cpp
30− unityoptionsmodel.cpp
31− categoryresults.cpp
32− plugin.cpp
33− multirangefilter.cpp
34− radiooptionfilter.cpp
35− ratingsfilter.cpp
36− ratingfilteroption.cpp
37− bottombarvisibilitycommunicatorshell.cpp
38− applicationpreview.cpp
39− genericpreview.cpp
40− moviepreview.cpp
41− musicpreview.cpp
42− preview.cpp
43− previewaction.cpp
44− previewinfohint.cpp
45− result.cpp
46− showallfilteroption.cpp
47− signalslist.cpp
48− socialpreview.cpp
49− socialpreviewcomment.cpp
50− iconutils.cpp
51− variantutils.cpp
52−)
53−
54−add_library(Unity-qml MODULE
55− ${QMLPLUGIN_SRC}
56− )
57−
58−target_link_libraries(Unity-qml
59− ${QTDEE_LDFLAGS}
60− ${UNITYCORE_LDFLAGS}
61− ${Qt5DBus_LIBRARIES}
62− ${Qt5Gui_LIBRARIES}
63− )
64−
65−qt5_use_modules(Unity-qml Qml)
66−
67−# export the qmldir qmltypes and plugin files
68−export_qmlfiles(Unity Unity)
69−export_qmlplugin(Unity 0.1 Unity TARGETS Unity-qml)
70−
71add_subdirectory(Launcher)
2add_subdirectory(Launcher)
plugins/Unity/Indicators/indicator.cpp+8−16
@@ -31,32 +31,24 @@ Indicator::~Indicator()
31{
31{
32}
32}
33
33
34−void Indicator::init(const QString& busName, const QSettings& settings)
34+void Indicator::init(const QString &profile, const QString& busName, const QSettings& settings)
35{
35{
36 setId(settings.value("Indicator Service/Name").toString());
36 setId(settings.value("Indicator Service/Name").toString());
37− setPosition(settings.value("Indicator Service/Position", QVariant::fromValue(0)).toInt());
38
37
39− QString actionObjectPath = settings.value("Indicator Service/ObjectPath").toString();
38+ QVariant pos = settings.value(profile + "/Position");
40−
39+ if (!pos.isValid())
41− QVariantMap mapMenuObjectPaths;
40+ pos = settings.value("Indicator Service/Position", QVariant::fromValue(0));
42− Q_FOREACH(const QString& childGroup, settings.childGroups())
41+ setPosition(pos.toInt());
43− {
44− if (childGroup == "Indicator Service")
45− continue;
46
42
47− QString menuPath = childGroup+"/ObjectPath";
43+ QString actionObjectPath = settings.value("Indicator Service/ObjectPath").toString();
48− if (settings.contains(menuPath))
44+ QString menuObjectPath = settings.value(profile + "/ObjectPath").toString();
49− {
50− mapMenuObjectPaths[childGroup] = settings.value(menuPath).toString();
51− }
52− }
53
45
54 QVariantMap properties;
46 QVariantMap properties;
55 properties.clear();
47 properties.clear();
56 properties.insert("busType", 1);
48 properties.insert("busType", 1);
57 properties.insert("busName", busName);
49 properties.insert("busName", busName);
58 properties.insert("actionsObjectPath", actionObjectPath);
50 properties.insert("actionsObjectPath", actionObjectPath);
59− properties.insert("menuObjectPaths", mapMenuObjectPaths);
51+ properties.insert("menuObjectPath", menuObjectPath);
60 setIndicatorProperties(properties);
52 setIndicatorProperties(properties);
61}
53}
62
54
plugins/Unity/Indicators/indicator.h+1−1
@@ -35,7 +35,7 @@ public:
35 Indicator(QObject *parent = 0);
35 Indicator(QObject *parent = 0);
36 virtual ~Indicator();
36 virtual ~Indicator();
37
37
38− void init(const QString& busName, const QSettings& settings);
38+ void init(const QString &profile, const QString& busName, const QSettings& settings);
39
39
40 QString identifier() const;
40 QString identifier() const;
41 int position() const;
41 int position() const;
plugins/Unity/Indicators/indicatorsmanager.cpp+3−1
@@ -26,6 +26,8 @@
26
26
27#include "paths.h"
27#include "paths.h"
28
28
29+const QString profile = "phone";
30+
29
31
30class IndicatorsManager::IndicatorData
32class IndicatorsManager::IndicatorData
31{
33{
@@ -298,7 +300,7 @@ Indicator::Ptr IndicatorsManager::indicator(const QString& indicator_name)
298 Indicator::Ptr new_indicator(new Indicator(this));
300 Indicator::Ptr new_indicator(new Indicator(this));
299 data->m_indicator = new_indicator;
301 data->m_indicator = new_indicator;
300 QSettings settings(data->m_fileInfo.absoluteFilePath(), QSettings::IniFormat, this);
302 QSettings settings(data->m_fileInfo.absoluteFilePath(), QSettings::IniFormat, this);
301− new_indicator->init(data->m_fileInfo.fileName(), settings);
303+ new_indicator->init(profile, data->m_fileInfo.fileName(), settings);
302 return new_indicator;
304 return new_indicator;
303}
305}
304
306
plugins/Unity/Indicators/qml/IndicatorBase.qml+3−4
@@ -24,16 +24,15 @@ import Unity.Indicators 0.1 as Indicators
24Item {
24Item {
25 id: indicatorItem
25 id: indicatorItem
26
26
27− enabled: menuObjectPaths.hasOwnProperty(device)
27+ enabled: menuObjectPath != ""
28
28
29 //const
29 //const
30 property string busName
30 property string busName
31 property string actionsObjectPath
31 property string actionsObjectPath
32− property var menuObjectPaths: undefined
32+ property string menuObjectPath
33− readonly property string device: "phone"
34 property string rootMenuType: "com.canonical.indicator.root"
33 property string rootMenuType: "com.canonical.indicator.root"
35
34
36− property string deviceMenuObjectPath: menuObjectPaths.hasOwnProperty(device) ? menuObjectPaths[device] : ""
35+ property string deviceMenuObjectPath: menuObjectPath
37
36
38 property alias menuModel: cachedModel.model
37 property alias menuModel: cachedModel.model
39
38
plugins/Unity/Indicators/qml/IndicatorPage.qml+27−6
@@ -34,11 +34,36 @@ IndicatorBase {
34 Indicators.UnityMenuModelStack {
34 Indicators.UnityMenuModelStack {
35 id: menuStack
35 id: menuStack
36 head: contentActive ? main.menuModel : null
36 head: contentActive ? main.menuModel : null
37+
38+ property var rootMenu: null
39+
40+ onTailChanged: {
41+ if (!tail) {
42+ rootMenu = null;
43+ } else if (rootMenu != tail) {
44+ if (tail.get(0, "type") === rootMenuType) {
45+ rootMenu = menuStack.tail.submenu(0);
46+ push(rootMenu, 0);
47+ } else {
48+ rootMenu = null;
49+ }
50+ }
51+ }
52+ }
53+
54+ Connections {
55+ target: menuStack.tail
56+ onRowsInserted: {
57+ if (menuStack.rootMenu !== menuStack.tail && menuStack.tail.get(0, "type") === rootMenuType) {
58+ menuStack.rootMenu = menuStack.tail.submenu(0);
59+ menuStack.push(menuStack.rootMenu, 0);
60+ }
61+ }
37 }
62 }
38
63
39 ListView {
64 ListView {
40 id: mainMenu
65 id: mainMenu
41− model: menuStack.tail ? menuStack.tail : null
66+ model: menuStack.rootMenu
42
67
43 anchors {
68 anchors {
44 fill: parent
69 fill: parent
@@ -102,7 +127,7 @@ IndicatorBase {
102
127
103 Loader {
128 Loader {
104 id: loader
129 id: loader
105− asynchronous: true
130+ asynchronous: false
106
131
107 property int modelIndex: index
132 property int modelIndex: index
108
133
@@ -114,10 +139,6 @@ IndicatorBase {
114 sourceComponent: factory.load(model)
139 sourceComponent: factory.load(model)
115
140
116 onLoaded: {
141 onLoaded: {
117− if (model.type === rootMenuType) {
118− menuStack.push(mainMenu.model.submenu(index));
119− }
120−
121 if (item.hasOwnProperty("menuSelected")) {
142 if (item.hasOwnProperty("menuSelected")) {
122 item.menuSelected = Qt.binding(function() { return mainMenu.selectedIndex == index; });
143 item.menuSelected = Qt.binding(function() { return mainMenu.selectedIndex == index; });
123 item.selectMenu.connect(function() { mainMenu.selectedIndex = index; });
144 item.selectMenu.connect(function() { mainMenu.selectedIndex = index; });
plugins/Unity/Indicators/qml/IndicatorWidget.qml+1−1
@@ -24,5 +24,5 @@ IndicatorBase {
24 id: indicatorWidget
24 id: indicatorWidget
25
25
26 enabled: false
26 enabled: false
27− property int iconSize: height - units.gu(0.5)
27+ property int iconSize: height
28}
28}
plugins/Unity/Indicators/qml/SliderMenuItem.qml+3−2
@@ -51,12 +51,12 @@ FramedMenuItem {
51
51
52 control: Item {
52 control: Item {
53 id: row
53 id: row
54− width: sliderMenu.text ? units.gu(20) : menuItem.width - (2 * menuItem.__contentsMargins)
54+ width: menuItem.text ? units.gu(20) : menuItem.width - (2 * menuItem.__contentsMargins)
55 height: slider.height
55 height: slider.height
56
56
57 Image {
57 Image {
58 id: leftImage
58 id: leftImage
59− visible: source != ""
59+ visible: status === Image.Ready
60 anchors.left: row.left
60 anchors.left: row.left
61 anchors.verticalCenter: row.verticalCenter
61 anchors.verticalCenter: row.verticalCenter
62 height: units.gu(4)
62 height: units.gu(4)
@@ -96,6 +96,7 @@ FramedMenuItem {
96
96
97 Image {
97 Image {
98 id: rightImage
98 id: rightImage
99+ visible: status === Image.Ready
99 anchors.right: row.right
100 anchors.right: row.right
100 anchors.verticalCenter: row.verticalCenter
101 anchors.verticalCenter: row.verticalCenter
101 height: units.gu(4)
102 height: units.gu(4)
plugins/Unity/Indicators/unitymenumodelstack.cpp+98−7
@@ -19,6 +19,64 @@
19
19
20#include "unitymenumodelstack.h"
20#include "unitymenumodelstack.h"
21
21
22+#include <QDebug>
23+#include <unitymenumodel.h>
24+
25+class UnityMenuModelEntry : public QObject {
26+ Q_OBJECT
27+public:
28+ UnityMenuModelEntry(UnityMenuModel* model, UnityMenuModel* parentModel, int index)
29+ : m_model(model),
30+ m_parentModel(parentModel),
31+ m_index(index)
32+ {
33+ if (m_parentModel) {
34+ QObject::connect(m_parentModel, SIGNAL(rowsInserted(QModelIndex, int, int)), this, SLOT(onRowsInserted(QModelIndex, int, int)));
35+ QObject::connect(m_parentModel, SIGNAL(rowsRemoved(QModelIndex, int, int)), this, SLOT(onRowsRemoved(QModelIndex, int, int)));
36+ QObject::connect(m_parentModel, SIGNAL(modelReset()), this, SLOT(onModelReset()));
37+ }
38+ }
39+
40+ UnityMenuModel* model() const { return m_model; }
41+
42+private Q_SLOTS:
43+ void onRowsInserted(const QModelIndex&, int start, int end)
44+ {
45+ int delta = end-start + 1;
46+ if (start <= m_index) {
47+ m_index += delta;
48+ }
49+ }
50+
51+ void onRowsRemoved(const QModelIndex&, int start, int end)
52+ {
53+ int delta = end-start + 1;
54+ if (start <= m_index) {
55+ if (start + delta > m_index) {
56+ // in the range removed
57+ Q_EMIT remove();
58+ disconnect(m_parentModel, 0, this, 0);
59+ } else {
60+ m_index -= delta;
61+ }
62+ }
63+ }
64+
65+ void onModelReset()
66+ {
67+ Q_EMIT remove();
68+ disconnect(m_parentModel, 0, this, 0);
69+ }
70+
71+Q_SIGNALS:
72+ void remove();
73+
74+private:
75+ UnityMenuModel* m_model;
76+ UnityMenuModel* m_parentModel;
77+ int m_index;
78+};
79+
22UnityMenuModelStack::UnityMenuModelStack(QObject* parent)
80UnityMenuModelStack::UnityMenuModelStack(QObject* parent)
23 : QObject(parent)
81 : QObject(parent)
24{
82{
@@ -26,31 +84,44 @@ UnityMenuModelStack::UnityMenuModelStack(QObject* parent)
26
84
27UnityMenuModelStack::~UnityMenuModelStack()
85UnityMenuModelStack::~UnityMenuModelStack()
28{
86{
87+ qDeleteAll(m_menuModels);
88+ m_menuModels.clear();
29}
89}
30
90
31UnityMenuModel* UnityMenuModelStack::head() const
91UnityMenuModel* UnityMenuModelStack::head() const
32{
92{
33− return !m_menuModels.isEmpty() ? m_menuModels.first() : NULL;
93+ return !m_menuModels.isEmpty() ? m_menuModels.first()->model() : NULL;
34}
94}
35
95
36void UnityMenuModelStack::setHead(UnityMenuModel* model)
96void UnityMenuModelStack::setHead(UnityMenuModel* model)
37{
97{
38 if (head() != model) {
98 if (head() != model) {
99+ qDeleteAll(m_menuModels);
39 m_menuModels.clear();
100 m_menuModels.clear();
101+
40− push(model);
102+ push(model, 0);
41 Q_EMIT headChanged(model);
103 Q_EMIT headChanged(model);
42 }
104 }
43}
105}
44
106
45UnityMenuModel* UnityMenuModelStack::tail() const
107UnityMenuModel* UnityMenuModelStack::tail() const
46{
108{
47− return !m_menuModels.isEmpty() ? m_menuModels.last() : NULL;
109+ return !m_menuModels.isEmpty() ? m_menuModels.last()->model() : NULL;
110+}
111+
112+int UnityMenuModelStack::count() const
113+{
114+ return m_menuModels.count();
48}
115}
49
116
50−void UnityMenuModelStack::push(UnityMenuModel* model)
117+void UnityMenuModelStack::push(UnityMenuModel* model, int index)
51{
118{
119+ UnityMenuModelEntry* entry = new UnityMenuModelEntry(model, tail(), index);
120+ QObject::connect(entry, SIGNAL(remove()), SLOT(onRemove()));
121+
52− m_menuModels << model;
122+ m_menuModels << entry;
53 Q_EMIT tailChanged(model);
123 Q_EMIT tailChanged(model);
124+ Q_EMIT countChanged(m_menuModels.count());
54}
125}
55
126
56UnityMenuModel* UnityMenuModelStack::pop()
127UnityMenuModel* UnityMenuModelStack::pop()
@@ -58,12 +129,32 @@ UnityMenuModel* UnityMenuModelStack::pop()
58 if (m_menuModels.isEmpty()) {
129 if (m_menuModels.isEmpty()) {
59 return NULL;
130 return NULL;
60 }
131 }
61− UnityMenuModel* model = m_menuModels.takeLast();
132+ UnityMenuModelEntry* entry = m_menuModels.takeLast();
133+ UnityMenuModel* model = entry->model();
134+ entry->deleteLater();
62
135
63 Q_EMIT tailChanged(tail());
136 Q_EMIT tailChanged(tail());
64 if (m_menuModels.isEmpty()) {
137 if (m_menuModels.isEmpty()) {
65 Q_EMIT headChanged(NULL);
138 Q_EMIT headChanged(NULL);
66 }
139 }
140+ Q_EMIT countChanged(m_menuModels.count());
67
141
68 return model;
142 return model;
69−}
143+}
144+
145+void UnityMenuModelStack::onRemove()
146+{
147+ UnityMenuModelEntry* removed = qobject_cast<UnityMenuModelEntry*>(sender());
148+ if (!m_menuModels.contains(removed))
149+ return;
150+
151+ for (int i = m_menuModels.count() -1; i >= 0; i--) {
152+ UnityMenuModelEntry* entry = m_menuModels[i];
153+ pop();
154+ if (entry == removed) {
155+ break;
156+ }
157+ }
158+}
159+
160+#include "unitymenumodelstack.moc"
plugins/Unity/Indicators/unitymenumodelstack.h+10−2
@@ -25,6 +25,7 @@
25#include <QObject>
25#include <QObject>
26#include <QList>
26#include <QList>
27
27
28+class UnityMenuModelEntry;
28class UnityMenuModel;
29class UnityMenuModel;
29
30
30// A LIFO queue for storing the current submenu of a UnityMenuModel.
31// A LIFO queue for storing the current submenu of a UnityMenuModel.
@@ -37,6 +38,7 @@ class UNITYINDICATORS_EXPORT UnityMenuModelStack : public QObject
37 Q_OBJECT
38 Q_OBJECT
38 Q_PROPERTY(UnityMenuModel* head READ head WRITE setHead NOTIFY headChanged)
39 Q_PROPERTY(UnityMenuModel* head READ head WRITE setHead NOTIFY headChanged)
39 Q_PROPERTY(UnityMenuModel* tail READ tail NOTIFY tailChanged)
40 Q_PROPERTY(UnityMenuModel* tail READ tail NOTIFY tailChanged)
41+ Q_PROPERTY(int count READ count NOTIFY countChanged)
40public:
42public:
41 UnityMenuModelStack(QObject*parent=NULL);
43 UnityMenuModelStack(QObject*parent=NULL);
42 ~UnityMenuModelStack();
44 ~UnityMenuModelStack();
@@ -46,15 +48,21 @@ public:
46
48
47 UnityMenuModel* tail() const;
49 UnityMenuModel* tail() const;
48
50
51+ int count() const;
52+
49− Q_INVOKABLE void push(UnityMenuModel* model);
53+ Q_INVOKABLE void push(UnityMenuModel* model, int menuIndex);
50 Q_INVOKABLE UnityMenuModel* pop();
54 Q_INVOKABLE UnityMenuModel* pop();
51
55
52Q_SIGNALS:
56Q_SIGNALS:
53 void headChanged(UnityMenuModel* head);
57 void headChanged(UnityMenuModel* head);
54 void tailChanged(UnityMenuModel* tail);
58 void tailChanged(UnityMenuModel* tail);
59+ void countChanged(int count);
60+
61+private Q_SLOTS:
62+ void onRemove();
55
63
56private:
64private:
57− QList<UnityMenuModel*> m_menuModels;
65+ QList<UnityMenuModelEntry*> m_menuModels;
58};
66};
59
67
60#endif // UNITYMENUMODELSTACK_H
68#endif // UNITYMENUMODELSTACK_H
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/Unity/Launcher/launcheritem.cpp+4−2
@@ -20,6 +20,8 @@
20#include "launcheritem.h"
20#include "launcheritem.h"
21#include "quicklistmodel.h"
21#include "quicklistmodel.h"
22
22
23+#include <libintl.h>
24+
23LauncherItem::LauncherItem(const QString &appId, const QString &name, const QString &icon, QObject *parent) :
25LauncherItem::LauncherItem(const QString &appId, const QString &name, const QString &icon, QObject *parent) :
24 LauncherItemInterface(parent),
26 LauncherItemInterface(parent),
25 m_appId(appId),
27 m_appId(appId),
@@ -38,7 +40,7 @@ LauncherItem::LauncherItem(const QString &appId, const QString &name, const QStr
38 m_quickList->appendAction(nameAction);
40 m_quickList->appendAction(nameAction);
39 QuickListEntry pinningAction;
41 QuickListEntry pinningAction;
40 pinningAction.setActionId("pin_item");
42 pinningAction.setActionId("pin_item");
41− pinningAction.setText("Pin to Launcher");
43+ pinningAction.setText(gettext("Lock to Launcher"));
42 m_quickList->appendAction(pinningAction);
44 m_quickList->appendAction(pinningAction);
43}
45}
44
46
@@ -68,7 +70,7 @@ void LauncherItem::setPinned(bool pinned)
68 m_pinned = pinned;
70 m_pinned = pinned;
69 QuickListEntry entry;
71 QuickListEntry entry;
70 entry.setActionId("pin_item");
72 entry.setActionId("pin_item");
71− entry.setText(pinned ? "Remove from Launcher": "Pin to Launcher");
73+ entry.setText(pinned ? gettext("Unlock from Launcher") : gettext("Lock to Launcher"));
72 m_quickList->updateAction(entry);
74 m_quickList->updateAction(entry);
73 Q_EMIT pinnedChanged(pinned);
75 Q_EMIT pinnedChanged(pinned);
74 }
76 }
plugins/Unity/abstractfilteroption.hdeleted−58
@@ -1,58 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#ifndef ABSTRACTFILTEROPTION_H
21−#define ABSTRACTFILTEROPTION_H
22−
23−// Qt
24−#include <QObject>
25−#include <QMetaType>
26−
27−class Q_DECL_EXPORT AbstractFilterOption : public QObject
28−{
29− Q_OBJECT
30−
31− Q_PROPERTY(QString id READ id NOTIFY idChanged)
32− Q_PROPERTY(QString name READ name NOTIFY nameChanged)
33− Q_PROPERTY(QString iconHint READ iconHint NOTIFY iconHintChanged)
34− Q_PROPERTY(bool active READ active WRITE setActive NOTIFY activeChanged)
35−
36−public:
37− /* getters */
38− virtual QString id() const = 0;
39− virtual QString name() const = 0;
40− virtual QString iconHint() const = 0;
41− virtual bool active() const = 0;
42−
43− /* setters */
44− virtual void setActive(bool active) = 0;
45−
46−protected:
47− AbstractFilterOption(QObject *parent);
48−
49−Q_SIGNALS:
50− void idChanged(const QString &);
51− void nameChanged(const QString &);
52− void iconHintChanged(const QString &);
53− void activeChanged(bool);
54−};
55−
56−Q_DECLARE_METATYPE(AbstractFilterOption*)
57−
58−#endif // ABSTRACTFILTEROPTION_H
plugins/Unity/applicationpreview.cppdeleted−100
@@ -1,100 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−// local
21−#include "applicationpreview.h"
22−#include "iconutils.h"
23−
24−#include <QDebug>
25−
26−ApplicationPreview::ApplicationPreview(QObject *parent):
27− Preview(parent),
28− m_unityAppPreview(nullptr)
29−{
30−}
31−
32−QString ApplicationPreview::lastUpdate() const
33−{
34− if (m_unityAppPreview) {
35− return QString::fromStdString(m_unityAppPreview->last_update());
36− } else {
37− qWarning() << "Preview not set";
38− }
39− return QString();
40−}
41−
42−QString ApplicationPreview::copyright() const
43−{
44− if (m_unityAppPreview) {
45− return QString::fromStdString(m_unityAppPreview->copyright());
46− } else {
47− qWarning() << "Preview not set";
48− }
49− return QString();
50−}
51−
52−QString ApplicationPreview::license() const
53−{
54− if (m_unityAppPreview) {
55− return QString::fromStdString(m_unityAppPreview->license());
56− } else {
57− qWarning() << "Preview not set";
58− }
59− return QString();
60−}
61−
62−QString ApplicationPreview::appIcon() const
63−{
64− if (m_unityAppPreview) {
65− auto giconString = g_icon_to_string(m_unityAppPreview->app_icon());
66− QString result(gIconToDeclarativeImageProviderString(QString::fromUtf8(giconString)));
67− g_free(giconString);
68− return result;
69− } else {
70− qWarning() << "Preview not set";
71− }
72− return QString();
73−}
74−
75−float ApplicationPreview::rating() const
76−{
77− if (m_unityAppPreview) {
78− return m_unityAppPreview->rating();
79− } else {
80− qWarning() << "Preview not set";
81− }
82− return 0.0f;
83−}
84−
85−unsigned int ApplicationPreview::numRatings() const
86−{
87− if (m_unityAppPreview) {
88− return m_unityAppPreview->num_ratings();
89− } else {
90− qWarning() << "Preview not set";
91− }
92− return 0;
93−}
94−
95−void ApplicationPreview::setUnityPreview(unity::dash::Preview::Ptr unityPreview)
96−{
97− m_unityAppPreview = std::dynamic_pointer_cast<unity::dash::ApplicationPreview>(unityPreview);
98−
99− Q_EMIT previewChanged();
100−}
plugins/Unity/applicationpreview.hdeleted−66
@@ -1,66 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#ifndef APPLICATIONPREVIEW_H
21−#define APPLICATIONPREVIEW_H
22−
23−// local
24−#include "preview.h"
25−
26−// Qt
27−#include <QObject>
28−#include <QMetaType>
29−
30−// libunity-core
31−#include <UnityCore/ApplicationPreview.h>
32−
33−class Q_DECL_EXPORT ApplicationPreview: public Preview
34−{
35− Q_OBJECT
36−
37− Q_PROPERTY(QString lastUpdate READ lastUpdate NOTIFY previewChanged)
38− Q_PROPERTY(QString copyright READ copyright NOTIFY previewChanged)
39− Q_PROPERTY(QString license READ license NOTIFY previewChanged)
40− Q_PROPERTY(QString appIcon READ appIcon NOTIFY previewChanged)
41− Q_PROPERTY(float rating READ rating NOTIFY previewChanged)
42− Q_PROPERTY(unsigned int numRatings READ numRatings NOTIFY previewChanged)
43−
44−public:
45− explicit ApplicationPreview(QObject *parent = 0);
46−
47− QString lastUpdate() const;
48− QString copyright() const;
49− QString license() const;
50− QString appIcon() const;
51− float rating() const;
52− unsigned int numRatings() const;
53−
54−Q_SIGNALS:
55− void previewChanged();
56−
57−protected:
58− void setUnityPreview(unity::dash::Preview::Ptr unityPreview) override;
59−
60−private:
61− unity::dash::ApplicationPreview::Ptr m_unityAppPreview;
62−};
63−
64−Q_DECLARE_METATYPE(ApplicationPreview *)
65−
66−#endif
plugins/Unity/categories.cppdeleted−299
@@ -1,299 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Michał Sawicz <michal.sawicz@canonical.com>
6− * Michal Hruby <michal.hruby@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−// self
22−#include "categories.h"
23−#include "categoryresults.h"
24−#include <QDebug>
25−
26−// TODO: use something from libunity once it's public
27−enum CategoryColumn {
28− ID,
29− DISPLAY_NAME,
30− ICON_HINT,
31− RENDERER_NAME,
32− HINTS
33−};
34−
35−Categories::Categories(QObject* parent)
36− : DeeListModel(parent)
37−{
38− m_roles[Categories::RoleCategoryId] = "categoryId";
39− m_roles[Categories::RoleName] = "name";
40− m_roles[Categories::RoleIcon] = "icon";
41− m_roles[Categories::RoleRenderer] = "renderer";
42− m_roles[Categories::RoleContentType] = "contentType";
43− m_roles[Categories::RoleRendererHint] = "rendererHint";
44− m_roles[Categories::RoleProgressSource] = "progressSource";
45− m_roles[Categories::RoleHints] = "hints";
46− m_roles[Categories::RoleResults] = "results";
47− m_roles[Categories::RoleCount] = "count";
48−
49− // TODO This should not be needed but accumulatting the count changes
50− // makes the visualization more stable and also makes crashes on fast
51− // change of the search term harder to reproduce
52− m_timer.setSingleShot(true);
53− m_timer.setInterval(50);
54− connect(&m_timer, &QTimer::timeout, this, &Categories::onEmitCountChanged);
55−}
56−
57−DeeListModel*
58−Categories::getResults(int index) const
59−{
60− if (!m_results.contains(index)) {
61− CategoryResults* results = new CategoryResults(const_cast<Categories*>(this));
62− results->setCategoryIndex(index);
63− connect(results, &DeeListModel::countChanged, this, &Categories::onCountChanged);
64−
65− unsigned categoryIndex = static_cast<unsigned>(index);
66− auto unity_results = m_unityScope->GetResultsForCategory(categoryIndex);
67− if (unity_results) {
68− results->setModel(unity_results->model());
69− } else {
70− // No results model returned by unity core; this can be the case when the global
71− // results model of this scope is still not set in unity core. Don't set backend
72− // model in DeeListModel - it will still beahve properly as an empty model. Since
73− // we're connected to the category model change signal, and it is set by unity core
74− // at the same time as results model (on channel opening), we'll reset category
75− // results models with proper models when we're notifed again.
76− qWarning() << "No results model for category" << categoryIndex;
77− }
78−
79− m_results.insert(index, results);
80− }
81−
82− return m_results[index];
83−}
84−
85−void Categories::onCategoriesModelChanged(unity::glib::Object<DeeModel> model)
86−{
87− m_updatedCategories.clear();
88− // FIXME: this might destroy the renderer view and re-create it, optimize?
89− Q_FOREACH(DeeListModel* model, m_results) {
90− delete model;
91− }
92− m_results.clear();
93− m_categoryOrder.clear();
94−
95− setModel(model);
96−}
97−
98−void Categories::onCategoryOrderChanged(const std::vector<unsigned int>& cat_order)
99−{
100− for (unsigned int pos = 0; pos<cat_order.size(); pos++)
101− {
102− unsigned int cat = cat_order[pos];
103− const int old_pos = m_categoryOrder.indexOf(cat);
104−
105− if (old_pos < 0) {
106− qWarning() << "No such category index:" << cat;
107− continue;
108− }
109−
110− if (static_cast<int>(pos) != old_pos) {
111− int target_pos = pos;
112− if (target_pos > old_pos)
113− target_pos++;
114− const bool status = beginMoveRows(QModelIndex(), old_pos, old_pos, QModelIndex(), target_pos);
115− if (status)
116− m_categoryOrder.move(old_pos, pos);
117− else
118− qWarning() << "beginMoveRows failed:" << old_pos << target_pos;
119− endMoveRows();
120− }
121− }
122−}
123−
124−void
125−Categories::setUnityScope(const unity::dash::Scope::Ptr& scope)
126−{
127− m_unityScope = scope;
128−
129− // no need to call this, we'll get notified
130− //setModel(m_unityScope->categories()->model());
131−
132− m_signals.disconnectAll();
133− m_signals << m_unityScope->categories()->model.changed.connect(sigc::mem_fun(this, &Categories::onCategoriesModelChanged));
134−
135− // FIXME: Don't handle category order changes for now as it causes UI issues (https://bugs.launchpad.net/unity8/+bug/1239584).
136− //m_signals << m_unityScope->category_order.changed.connect(sigc::mem_fun(this, &Categories::onCategoryOrderChanged));
137−}
138−
139−void
140−Categories::onCountChanged()
141−{
142− CategoryResults* results = qobject_cast<CategoryResults*>(sender());
143− if (results) {
144− if (!m_updatedCategories.contains(results->categoryIndex())) {
145− m_updatedCategories << results->categoryIndex();
146− }
147− m_timer.start();
148− }
149−}
150−
151−void Categories::onRowCountChanged()
152−{
153− QAbstractItemModel* model = qobject_cast<QAbstractItemModel*>(sender());
154− // find the corresponding category index
155− for (auto iter = m_overriddenCategories.begin(); iter != m_overriddenCategories.end(); ++iter) {
156− if (iter.value() == model) {
157− for (int i = 0; i < rowCount(); i++) {
158− auto id = data(index(i), RoleCategoryId).toString();
159− if (id != iter.key()) continue;
160− QVector<int> roles;
161− roles.append(RoleCount);
162− QModelIndex changedIndex = index(i);
163− Q_EMIT dataChanged(changedIndex, changedIndex, roles);
164− break;
165− }
166− }
167− }
168−}
169−
170−void
171−Categories::onEmitCountChanged()
172−{
173− QVector<int> roles;
174− roles.append(Categories::RoleCount);
175− Q_FOREACH(int categoryIndex, m_updatedCategories) {
176− if (!m_results.contains(categoryIndex)) continue;
177− const int realIndex = m_categoryOrder.indexOf(categoryIndex);
178− const QModelIndex changedIndex = index(realIndex);
179− Q_EMIT dataChanged(changedIndex, changedIndex, roles);
180− }
181− m_updatedCategories.clear();
182−}
183−
184−QHash<int, QByteArray>
185−Categories::roleNames() const
186−{
187− return m_roles;
188−}
189−
190−void Categories::onOverrideModelDestroyed()
191−{
192− QObject* model = sender();
193− auto iter = m_overriddenCategories.begin();
194− while (iter != m_overriddenCategories.end()) {
195− if (iter.value() == model) {
196− iter = m_overriddenCategories.erase(iter);
197− continue;
198− }
199− ++iter;
200− }
201−}
202−
203−void Categories::overrideResults(const QString& categoryId, QAbstractItemModel* model)
204−{
205− m_overriddenCategories[categoryId] = model;
206− // watch the model
207− connect(model, &QObject::destroyed, this, &Categories::onOverrideModelDestroyed);
208− connect(model, &QAbstractItemModel::rowsInserted, this, &Categories::onRowCountChanged);
209− connect(model, &QAbstractItemModel::rowsRemoved, this, &Categories::onRowCountChanged);
210− connect(model, &QAbstractItemModel::modelReset, this, &Categories::onRowCountChanged);
211−
212− // emit the dataChanged signal if the category is already in the model
213− for (int i = 0; i < rowCount(); i++) {
214− auto id = data(index(i), RoleCategoryId).toString();
215− if (id != categoryId) continue;
216− QVector<int> roles;
217− roles.append(RoleCount);
218− roles.append(RoleResults);
219− QModelIndex changedIndex = index(i);
220− Q_EMIT dataChanged(changedIndex, changedIndex, roles);
221− break;
222− }
223−}
224−
225−QVariant
226−Categories::data(const QModelIndex& index, int role) const
227−{
228− if (!index.isValid()) {
229− return QVariant();
230− }
231−
232− if (m_categoryOrder.size() != rowCount())
233− {
234− // populate category order vector with 0..n
235− m_categoryOrder.clear();
236− const unsigned int lim = rowCount();
237− for (unsigned int i = 0; i<lim; i++) {
238− m_categoryOrder.append(i);
239− }
240− }
241−
242− int realRow = index.row();
243− if (index.row() < m_categoryOrder.size()) {
244− realRow = m_categoryOrder[index.row()];
245− } else {
246− qWarning() << "Invalid index" << index.row();
247− return QVariant();
248− }
249−
250− const QModelIndex realIndex = createIndex(realRow, index.column());
251−
252− switch (role) {
253− case RoleCategoryId:
254− return DeeListModel::data(realIndex, CategoryColumn::ID);
255− case RoleName:
256− return DeeListModel::data(realIndex, CategoryColumn::DISPLAY_NAME);
257− case RoleIcon:
258− return DeeListModel::data(realIndex, CategoryColumn::ICON_HINT);
259− case RoleRenderer:
260− return DeeListModel::data(realIndex, CategoryColumn::RENDERER_NAME);
261− case RoleContentType:
262− {
263− auto hints = DeeListModel::data(realIndex, CategoryColumn::HINTS).toHash();
264− return hints.contains("content-type") ? hints["content-type"] : QVariant(QString("default"));
265− }
266− case RoleRendererHint:
267− {
268− auto hints = DeeListModel::data(realIndex, CategoryColumn::HINTS).toHash();
269− return hints.contains("renderer-hint") ? hints["renderer-hint"] : QVariant(QString());
270− }
271− case RoleProgressSource:
272− {
273− auto hints = DeeListModel::data(realIndex, CategoryColumn::HINTS).toHash();
274− return hints.contains("progress-source") ? hints["progress-source"] : QVariant();
275− }
276− case RoleHints:
277− return DeeListModel::data(realIndex, CategoryColumn::HINTS);
278− case RoleResults:
279− if (m_overriddenCategories.size() > 0)
280− {
281− auto id = DeeListModel::data(realIndex, CategoryColumn::ID).toString();
282− if (m_overriddenCategories.find(id) != m_overriddenCategories.end())
283− return QVariant::fromValue(m_overriddenCategories[id]);
284− }
285− return QVariant::fromValue(getResults(realRow));
286− case RoleCount:
287− if (m_overriddenCategories.size() > 0)
288− {
289− auto id = DeeListModel::data(realIndex, CategoryColumn::ID).toString();
290− if (m_overriddenCategories.find(id) != m_overriddenCategories.end())
291− {
292− return QVariant::fromValue(m_overriddenCategories[id]->rowCount());
293− }
294− }
295− return QVariant::fromValue(getResults(realRow)->rowCount());
296− default:
297− return QVariant();
298− }
299−}
plugins/Unity/categories.hdeleted−95
@@ -1,95 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Michał Sawicz <michal.sawicz@canonical.com>
6− * Michal Hruby <michal.hruby@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−
22−#ifndef CATEGORIES_H
23−#define CATEGORIES_H
24−
25−// unity-core
26−#include <UnityCore/Scope.h>
27−
28−// dee-qt
29−#include "deelistmodel.h"
30−
31−#include <QPointer>
32−#include <QSet>
33−#include <QTimer>
34−
35−// local
36−#include "signalslist.h"
37−
38−class Categories : public DeeListModel
39−{
40− Q_OBJECT
41−
42− Q_ENUMS(Roles)
43−
44−public:
45− explicit Categories(QObject* parent = 0);
46−
47− enum Roles {
48− RoleCategoryId,
49− RoleName,
50− RoleIcon,
51− RoleRenderer,
52− RoleContentType,
53− RoleRendererHint,
54− RoleProgressSource,
55− RoleHints,
56− RoleResults,
57− RoleCount
58− };
59−
60− Q_INVOKABLE void overrideResults(const QString& categoryId, QAbstractItemModel* model);
61−
62− QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
63−
64− QHash<int, QByteArray> roleNames() const;
65−
66− /* setters */
67− void setUnityScope(const unity::dash::Scope::Ptr& scope);
68−
69−private Q_SLOTS:
70− void onCountChanged();
71− void onRowCountChanged();
72− void onEmitCountChanged();
73− void onOverrideModelDestroyed();
74−
75−private:
76− void onCategoriesModelChanged(unity::glib::Object<DeeModel> model);
77− void onCategoryOrderChanged(const std::vector<unsigned int>& cat_order);
78−
79− DeeListModel* getResults(int index) const;
80−
81− unity::dash::Scope::Ptr m_unityScope;
82− QTimer m_timer;
83− QSet<int> m_updatedCategories;
84− QHash<int, QByteArray> m_roles;
85− QMap<QString, QAbstractItemModel*> m_overriddenCategories;
86− mutable QMap<int, DeeListModel*> m_results;
87− SignalsList m_signals;
88−
89− /* Category order array contains indices of actual categories in the underlying DeeListModel.
90− It's used internally to reflect category order reported by scope.
91− */
92− mutable QList<unsigned int> m_categoryOrder;
93−};
94−
95−#endif // CATEGORIES_H
plugins/Unity/checkoptionfilter.cppdeleted−65
@@ -1,65 +0,0 @@
1−/*
2− * Copyright (C) 2011 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−// Self
21−#include "checkoptionfilter.h"
22−
23−// local
24−#include "unityoptionsmodel.h"
25−
26−CheckOptionFilter::CheckOptionFilter(QObject *parent) :
27− Filter(parent),
28− m_unityCheckOptionFilter(nullptr),
29− m_options(nullptr)
30−{
31−}
32−
33−GenericOptionsModel* CheckOptionFilter::options() const
34−{
35− return m_options;
36−}
37−
38−void CheckOptionFilter::setUnityFilter(unity::dash::Filter::Ptr filter)
39−{
40− Filter::setUnityFilter(filter);
41− m_unityCheckOptionFilter = std::dynamic_pointer_cast<unity::dash::CheckOptionFilter>(m_unityFilter);
42− onOptionsChanged(m_unityCheckOptionFilter->options);
43−}
44−
45−void CheckOptionFilter::onOptionsChanged(unity::dash::CheckOptionFilter::CheckOptions options)
46−{
47− if (m_options != nullptr) {
48− m_signals.disconnectAll();
49− delete m_options;
50− m_options = nullptr;
51− }
52−
53− m_options = new UnityOptionsModel(this, options,
54− m_unityCheckOptionFilter->option_added,
55− m_unityCheckOptionFilter->option_removed,
56− m_unityCheckOptionFilter->show_all_button);
57−
58− connect(m_options, SIGNAL(activeChanged(AbstractFilterOption *)), m_options, SLOT(ensureTheOnlyActive(AbstractFilterOption *)));
59− connect(m_options, SIGNAL(showAllActivated()), this, SLOT(clear()));
60−
61− /* Property change signals */
62− m_signals << m_unityCheckOptionFilter->options.changed.connect(sigc::mem_fun(this, &CheckOptionFilter::onOptionsChanged));
63−
64− Q_EMIT optionsChanged();
65−}
plugins/Unity/checkoptionfilter.hdeleted−57
@@ -1,57 +0,0 @@
1−/*
2− * Copyright (C) 2011 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#ifndef CHECKOPTIONFILTER_H
21−#define CHECKOPTIONFILTER_H
22−
23−// Qt
24−#include <QObject>
25−#include <QMetaType>
26−
27−// libunity-core
28−#include <UnityCore/CheckOptionFilter.h>
29−
30−// Local
31−#include "filter.h"
32−#include "signalslist.h"
33−
34−class Q_DECL_EXPORT CheckOptionFilter : public Filter
35−{
36− Q_OBJECT
37−
38−public:
39− explicit CheckOptionFilter(QObject *parent = nullptr);
40−
41− /* getters */
42− GenericOptionsModel* options() const override;
43−
44−protected:
45− void setUnityFilter(unity::dash::Filter::Ptr filter) override;
46−
47−private:
48− void onOptionsChanged(unity::dash::CheckOptionFilter::CheckOptions filter);
49−
50− unity::dash::CheckOptionFilter::Ptr m_unityCheckOptionFilter;
51− SignalsList m_signals;
52− GenericOptionsModel* m_options;
53−};
54−
55−Q_DECLARE_METATYPE(CheckOptionFilter*)
56−
57−#endif // CHECKOPTIONFILTER_H
plugins/Unity/filter.cppdeleted−129
@@ -1,129 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−// Self
22−#include "filter.h"
23−
24−// local
25−#include "ratingsfilter.h"
26−#include "radiooptionfilter.h"
27−#include "checkoptionfilter.h"
28−#include "multirangefilter.h"
29−
30−// libunity-core
31−#include <UnityCore/Filter.h>
32−#include <UnityCore/RatingsFilter.h>
33−#include <UnityCore/RadioOptionFilter.h>
34−#include <UnityCore/CheckOptionFilter.h>
35−#include <UnityCore/MultiRangeFilter.h>
36−
37−// Qt
38−#include <QDebug>
39−
40−Filter::Filter(QObject *parent) :
41− QObject(parent)
42−{
43−}
44−
45−QString Filter::id() const
46−{
47− if (!m_unityFilter)
48− return QString::Null();
49− return QString::fromStdString(m_unityFilter->id());
50−}
51−
52−QString Filter::name() const
53−{
54− if (!m_unityFilter)
55− return QString::Null();
56− return QString::fromStdString(m_unityFilter->name());
57−}
58−
59−QString Filter::iconHint() const
60−{
61− if (!m_unityFilter)
62− return QString::Null();
63− return QString::fromStdString(m_unityFilter->icon_hint());
64−}
65−
66−QString Filter::rendererName() const
67−{
68− if (!m_unityFilter)
69− return QString::Null();
70− return QString::fromStdString(m_unityFilter->renderer_name());
71−}
72−
73−bool Filter::visible() const
74−{
75− if (!m_unityFilter)
76− return false;
77− return m_unityFilter->visible();
78−}
79−
80−bool Filter::collapsed() const
81−{
82− if (!m_unityFilter)
83− return false;
84− return m_unityFilter->collapsed();
85−}
86−
87−bool Filter::filtering() const
88−{
89− if (!m_unityFilter)
90− return false;
91− return m_unityFilter->filtering();
92−}
93−
94−void Filter::clear()
95−{
96− if (m_unityFilter)
97− m_unityFilter->Clear();
98−}
99−
100−void Filter::setUnityFilter(unity::dash::Filter::Ptr unityFilter)
101−{
102− m_unityFilter = unityFilter;
103−}
104−
105−Filter* Filter::newFromUnityFilter(unity::dash::Filter::Ptr unityFilter)
106−{
107− Filter* filter;
108−
109− if (typeid(*unityFilter) == typeid(unity::dash::RatingsFilter)) {
110− filter = new RatingsFilter;
111− } else if (typeid(*unityFilter) == typeid(unity::dash::CheckOptionFilter)) {
112− filter = new CheckOptionFilter;
113− } else if (typeid(*unityFilter) == typeid(unity::dash::RadioOptionFilter)) {
114− filter = new RadioOptionFilter;
115− } else if (typeid(*unityFilter) == typeid(unity::dash::MultiRangeFilter)) {
116− filter = new MultiRangeFilter;
117− } else {
118− qWarning() << "Filter of unknown type: " << typeid(*unityFilter).name();
119− return nullptr;
120− }
121−
122− filter->setUnityFilter(unityFilter);
123− return filter;
124−}
125−
126−bool Filter::hasUnityFilter(unity::dash::Filter::Ptr unityFilter) const
127−{
128− return m_unityFilter == unityFilter;
129−}
plugins/Unity/filter.hdeleted−75
@@ -1,75 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−#ifndef FILTER_H
22−#define FILTER_H
23−
24−// Qt
25−#include <QObject>
26−#include <QMetaType>
27−
28−// libunity-core
29−#include <UnityCore/Filter.h>
30−
31−class GenericOptionsModel;
32−
33−class Q_DECL_EXPORT Filter : public QObject
34−{
35− Q_OBJECT
36−
37− Q_PROPERTY(QString id READ id CONSTANT)
38− Q_PROPERTY(QString name READ name CONSTANT)
39− Q_PROPERTY(QString iconHint READ iconHint CONSTANT)
40− Q_PROPERTY(QString rendererName READ rendererName CONSTANT)
41− Q_PROPERTY(bool visible READ visible CONSTANT)
42− Q_PROPERTY(bool collapsed READ collapsed CONSTANT)
43− Q_PROPERTY(bool filtering READ filtering CONSTANT)
44− Q_PROPERTY(GenericOptionsModel* options READ options NOTIFY optionsChanged)
45−
46−public:
47− explicit Filter(QObject *parent = nullptr);
48−
49− /* getters */
50− QString id() const;
51− QString name() const;
52− QString iconHint() const;
53− QString rendererName() const;
54− bool visible() const;
55− bool collapsed() const;
56− bool filtering() const;
57− virtual GenericOptionsModel* options() const = 0;
58−
59− static Filter* newFromUnityFilter(unity::dash::Filter::Ptr unityFilter);
60− bool hasUnityFilter(unity::dash::Filter::Ptr unityFilter) const;
61−
62−public Q_SLOTS:
63− void clear();
64−
65−Q_SIGNALS:
66− void optionsChanged();
67−
68−protected:
69− unity::dash::Filter::Ptr m_unityFilter;
70− virtual void setUnityFilter(unity::dash::Filter::Ptr unityFilter);
71−};
72−
73−Q_DECLARE_METATYPE(Filter*)
74−
75−#endif // FILTER_H
plugins/Unity/filteroption.cppdeleted−91
@@ -1,91 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−// Self
22−#include "filteroption.h"
23−
24−// libunity-core
25−#include <UnityCore/Filter.h>
26−
27−FilterOption::FilterOption(unity::dash::FilterOption::Ptr unityFilterOption, QObject *parent) :
28− AbstractFilterOption(parent), m_unityFilterOption(nullptr)
29−{
30− setUnityFilterOption(unityFilterOption);
31−}
32−
33−QString FilterOption::id() const
34−{
35− return QString::fromStdString(m_unityFilterOption->id());
36−}
37−
38−QString FilterOption::name() const
39−{
40− return QString::fromStdString(m_unityFilterOption->name());
41−}
42−
43−QString FilterOption::iconHint() const
44−{
45− return QString::fromStdString(m_unityFilterOption->icon_hint());
46−}
47−
48−bool FilterOption::active() const
49−{
50− return m_unityFilterOption->active();
51−}
52−
53−void FilterOption::setActive(bool active)
54−{
55− m_unityFilterOption->active = active;
56−}
57−
58−void FilterOption::setUnityFilterOption(unity::dash::FilterOption::Ptr unityFilterOption)
59−{
60− if (m_unityFilterOption != nullptr) {
61− m_signals.disconnectAll();
62− }
63−
64− m_unityFilterOption = unityFilterOption;
65−
66− /* Property change signals */
67− m_signals << m_unityFilterOption->id.changed.connect(sigc::mem_fun(this, &FilterOption::onIdChanged))
68− << m_unityFilterOption->name.changed.connect(sigc::mem_fun(this, &FilterOption::onNameChanged))
69− << m_unityFilterOption->icon_hint.changed.connect(sigc::mem_fun(this, &FilterOption::onIconHintChanged))
70− << m_unityFilterOption->active.changed.connect(sigc::mem_fun(this, &FilterOption::onActiveChanged));
71−}
72−
73−void FilterOption::onIdChanged(const std::string &id)
74−{
75− Q_EMIT idChanged(QString::fromStdString(id));
76−}
77−
78−void FilterOption::onNameChanged(const std::string &name)
79−{
80− Q_EMIT nameChanged(QString::fromStdString(name));
81−}
82−
83−void FilterOption::onIconHintChanged(const std::string &iconHint)
84−{
85− Q_EMIT iconHintChanged(QString::fromStdString(iconHint));
86−}
87−
88−void FilterOption::onActiveChanged(bool active)
89−{
90− Q_EMIT activeChanged(active);
91−}
plugins/Unity/filteroption.hdeleted−61
@@ -1,61 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−#ifndef FILTEROPTION_H
22−#define FILTEROPTION_H
23−
24−// Local
25−#include "abstractfilteroption.h"
26−#include "signalslist.h"
27−
28−// libunity-core
29−#include <UnityCore/Filter.h>
30−
31−class Q_DECL_EXPORT FilterOption : public AbstractFilterOption
32−{
33− Q_OBJECT
34−
35−public:
36− explicit FilterOption(unity::dash::FilterOption::Ptr unityFilterOption, QObject *parent = nullptr);
37−
38− /* getters */
39− QString id() const override;
40− QString name() const override;
41− QString iconHint() const override;
42− bool active() const override;
43−
44− /* setters */
45− void setActive(bool active) override;
46−
47−private:
48− void onIdChanged(const std::string &id);
49− void onNameChanged(const std::string &name);
50− void onIconHintChanged(const std::string &iconHint);
51− void onActiveChanged(bool active);
52−
53− void setUnityFilterOption(unity::dash::FilterOption::Ptr unityFilterOption);
54− SignalsList m_signals;
55−
56− unity::dash::FilterOption::Ptr m_unityFilterOption;
57−};
58−
59−Q_DECLARE_METATYPE(FilterOption*)
60−
61−#endif // FILTEROPTION_H
plugins/Unity/filters.cppdeleted−165
@@ -1,165 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−// Self
22−#include "filters.h"
23−
24−// Local
25−#include "filter.h"
26−#include "genericoptionsmodel.h"
27−
28−// Qt
29−#include <QDebug>
30−
31−Filters::Filters(unity::dash::Filters::Ptr unityFilters, QObject *parent) :
32− QAbstractListModel(parent), m_unityFilters(unityFilters)
33−{
34− for (unsigned int i=0; i<m_unityFilters->count(); i++) {
35− unity::dash::Filter::Ptr unityFilter = m_unityFilters->FilterAtIndex(i);
36− addFilter(unityFilter, i);
37− }
38− m_unityFilters->filter_added.connect(sigc::mem_fun(this, &Filters::onFilterAdded));
39− m_unityFilters->filter_changed.connect(sigc::mem_fun(this, &Filters::onFilterChanged));
40− m_unityFilters->filter_removed.connect(sigc::mem_fun(this, &Filters::onFilterRemoved));
41−}
42−
43−Filters::~Filters()
44−{
45− while (!m_filters.isEmpty()) {
46− delete m_filters.takeFirst();
47− }
48−}
49−
50−int Filters::rowCount(const QModelIndex& parent) const
51−{
52− Q_UNUSED(parent)
53−
54− return m_unityFilters->count();
55−}
56−
57−QVariant Filters::data(const QModelIndex& index, int role) const
58−{
59− if (!index.isValid()) {
60− return QVariant();
61− }
62−
63− Filter* filter = m_filters.at(index.row());
64− switch (role)
65− {
66− case Filters::RoleId:
67− return filter->id();
68− case Filters::RoleName:
69− case Qt::DisplayRole:
70− return filter->name();
71− case Filters::RoleIconHint:
72− return filter->iconHint();
73− case Filters::RoleRendererName:
74− return filter->rendererName();
75− case Filters::RoleVisible:
76− return filter->visible();
77− case Filters::RoleCollapsed:
78− return filter->collapsed();
79− case Filters::RoleFiltering:
80− return filter->filtering();
81− case Filters::RoleOptions:
82− return QVariant::fromValue(filter->options());
83− default:
84− break;
85− }
86− return QVariant();
87−}
88−
89−QHash<int, QByteArray> Filters::roleNames() const
90−{
91− QHash<int, QByteArray> roles;
92− roles[Filters::RoleId] = "id";
93− roles[Filters::RoleName] = "name";
94− roles[Filters::RoleIconHint] = "iconHint";
95− roles[Filters::RoleRendererName] = "rendererName";
96− roles[Filters::RoleVisible] = "visible";
97− roles[Filters::RoleCollapsed] = "collapsed";
98− roles[Filters::RoleFiltering] = "filtering";
99− roles[Filters::RoleOptions] = "options";
100− return roles;
101−}
102−
103−Filter* Filters::getFilter(const QString& id) const
104−{
105− Q_FOREACH (Filter* filter, m_filters) {
106− if (filter->id() == id) {
107− return filter;
108− }
109− }
110− return nullptr;
111−}
112−
113−void Filters::onFilterAdded(unity::dash::Filter::Ptr unityFilter)
114−{
115− if (unityFilter == nullptr) {
116− return;
117− }
118−
119− int index = m_filters.count();
120− addFilter(unityFilter, index);
121−}
122−
123−void Filters::onFilterChanged(unity::dash::Filter::Ptr unityFilter)
124−{
125− if (unityFilter == nullptr) {
126− return;
127− }
128−
129− QModelIndex filterIndex = index(indexForFilter(unityFilter));
130− Q_EMIT dataChanged(filterIndex, filterIndex);
131−}
132−
133−void Filters::onFilterRemoved(unity::dash::Filter::Ptr unityFilter)
134−{
135− removeFilter(indexForFilter(unityFilter));
136−}
137−
138−void Filters::addFilter(unity::dash::Filter::Ptr unityFilter, int index)
139−{
140− beginInsertRows(QModelIndex(), index, index);
141− Filter* filter = Filter::newFromUnityFilter(unityFilter);
142− if (filter != nullptr) {
143− m_filters.insert(index, filter);
144− }
145− endInsertRows();
146−}
147−
148−void Filters::removeFilter(int index)
149−{
150− beginRemoveRows(QModelIndex(), index, index);
151− Filter* filter = m_filters.takeAt(index);
152− delete filter;
153− endRemoveRows();
154−}
155−
156−int Filters::indexForFilter(unity::dash::Filter::Ptr unityFilter)
157−{
158− for (int index=0; index<m_filters.count(); index++) {
159− if (m_filters[index]->hasUnityFilter(unityFilter)) {
160− return index;
161− }
162− }
163− qWarning() << "Filter" << QString::fromStdString(unityFilter->name()) << "not found in local cache.";
164− return -1;
165−}
plugins/Unity/filters.hdeleted−77
@@ -1,77 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−#ifndef FILTERS_H
22−#define FILTERS_H
23−
24−// Qt
25−#include <QAbstractListModel>
26−#include <QList>
27−
28−// libunity-core
29−#include <UnityCore/Filters.h>
30−#include <UnityCore/Filter.h>
31−
32−class Filter;
33−
34−class Filters : public QAbstractListModel
35−{
36− Q_OBJECT
37−
38− Q_ENUMS(Roles)
39−
40−public:
41− explicit Filters(unity::dash::Filters::Ptr unityFilters, QObject *parent = nullptr);
42− ~Filters();
43−
44− enum Roles {
45− RoleId = Qt::UserRole,
46− RoleName,
47− RoleIconHint,
48− RoleRendererName,
49− RoleVisible,
50− RoleCollapsed,
51− RoleFiltering,
52− RoleOptions
53− };
54−
55− QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
56− int rowCount(const QModelIndex& parent = QModelIndex()) const override;
57− QHash<int, QByteArray> roleNames() const override;
58−
59− Filter* getFilter(const QString& id) const;
60−
61−private:
62− void onFilterAdded(unity::dash::Filter::Ptr unityFilter);
63− void onFilterChanged(unity::dash::Filter::Ptr unityFilter);
64− void onFilterRemoved(unity::dash::Filter::Ptr unityFilter);
65−
66− void addFilter(unity::dash::Filter::Ptr unityFilter, int index);
67− void removeFilter(int index);
68−
69− int indexForFilter(unity::dash::Filter::Ptr unityFilter);
70−
71− unity::dash::Filters::Ptr m_unityFilters;
72− QList<Filter*> m_filters;
73−};
74−
75−Q_DECLARE_METATYPE(Filters*)
76−
77−#endif // FILTERS_H
plugins/Unity/genericoptionsmodel.cppdeleted−187
@@ -1,187 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−// self
21−#include "genericoptionsmodel.h"
22−
23−// local
24−#include "abstractfilteroption.h"
25−#include "showallfilteroption.h"
26−
27−GenericOptionsModel::GenericOptionsModel(bool showAllOption, QObject *parent)
28− : QAbstractListModel(parent)
29−{
30− if (showAllOption)
31− {
32− auto showAll = new ShowAllFilterOption(this);
33− connect(showAll, SIGNAL(activeChanged(bool)), this, SLOT(onOptionChanged()));
34− connect(showAll, SIGNAL(activeChanged(bool)), this, SLOT(onShowAllClicked(bool)));
35− addOption(showAll);
36− }
37−}
38−
39−GenericOptionsModel::~GenericOptionsModel()
40−{
41− Q_FOREACH(auto opt, m_options)
42− {
43− opt->deleteLater();
44− }
45−}
46−
47−QHash<int, QByteArray> GenericOptionsModel::roleNames() const
48−{
49− QHash<int, QByteArray> roles;
50− roles[GenericOptionsModel::RoleId] = "id";
51− roles[GenericOptionsModel::RoleName] = "name";
52− roles[GenericOptionsModel::RoleIconHint] = "iconHint";
53− roles[GenericOptionsModel::RoleActive] = "active";
54− return roles;
55−}
56−
57−QVariant GenericOptionsModel::data(const QModelIndex& index, int role) const
58−{
59− if (!index.isValid()) {
60− return QVariant();
61− }
62−
63− auto filterOption = m_options[index.row()];
64− switch (role)
65− {
66− case GenericOptionsModel::RoleId:
67− return filterOption->id();
68− case GenericOptionsModel::RoleName:
69− case Qt::DisplayRole:
70− return filterOption->name();
71− case GenericOptionsModel::RoleIconHint:
72− return filterOption->iconHint();
73− case GenericOptionsModel::RoleActive:
74− return filterOption->active();
75− default:
76− break;
77− }
78−
79− return QVariant();
80−}
81−
82−int GenericOptionsModel::rowCount(const QModelIndex& /* parent */) const
83−{
84− return m_options.size();
85−}
86−
87−void GenericOptionsModel::setActive(int idx, bool value)
88−{
89− if (idx >= 0 && idx < m_options.size())
90− {
91− m_options[idx]->setActive(value);
92− }
93−}
94−
95−void GenericOptionsModel::setActive(const QString &id, bool value)
96−{
97− Q_FOREACH(auto opt, m_options) {
98− if (opt->id() == id) {
99− opt->setActive(value);
100− break;
101− }
102− }
103−}
104−
105−AbstractFilterOption* GenericOptionsModel::getRawOption(QVector<AbstractFilterOption *>::size_type idx) const
106−{
107− if (idx < m_options.size())
108− {
109− return m_options[idx];
110− }
111− return nullptr;
112−}
113−
114−void GenericOptionsModel::ensureTheOnlyActive(AbstractFilterOption *activeOption)
115−{
116− if (activeOption->active()) {
117− // disable all other options
118− Q_FOREACH(auto opt, m_options) {
119− if (opt != activeOption && opt->active()) {
120− opt->setActive(false);
121− }
122− }
123− }
124−}
125−
126−void GenericOptionsModel::addOption(AbstractFilterOption *option, int index)
127−{
128− if (index >= 0)
129− m_options.insert(index, option);
130− else
131− m_options.append(option);
132−
133− connect(option, SIGNAL(idChanged(const QString &)), this, SLOT(onOptionChanged()));
134− connect(option, SIGNAL(nameChanged(const QString &)), this, SLOT(onOptionChanged()));
135− connect(option, SIGNAL(iconHintChanged(const QString &)), this, SLOT(onOptionChanged()));
136− connect(option, SIGNAL(activeChanged(bool)), this, SLOT(onOptionChanged()));
137− connect(option, SIGNAL(activeChanged(bool)), this, SLOT(onActiveChanged()));
138−}
139−
140−void GenericOptionsModel::removeOption(int index)
141−{
142− m_options[index]->deleteLater();
143− m_options.remove(index);
144−}
145−
146−int GenericOptionsModel::indexOf(const QString &option_id)
147−{
148− int row = 0;
149− Q_FOREACH(auto opt, m_options)
150− {
151− if (opt->id() == option_id)
152− {
153− return row;
154− }
155− ++row;
156− }
157− return -1;
158−}
159−
160−void GenericOptionsModel::onOptionChanged()
161−{
162− AbstractFilterOption *option = dynamic_cast<AbstractFilterOption*>(QObject::sender());
163− if (option)
164− {
165− int idx = indexOf(option->id());
166− if (idx >= 0)
167− {
168− QModelIndex optionIndex = index(idx);
169− Q_EMIT dataChanged(optionIndex, optionIndex);
170− }
171− }
172−}
173−
174−void GenericOptionsModel::onActiveChanged()
175−{
176− AbstractFilterOption *option = dynamic_cast<AbstractFilterOption*>(QObject::sender());
177− if (option)
178− {
179− Q_EMIT activeChanged(option);
180− }
181−}
182−
183−void GenericOptionsModel::onShowAllClicked(bool active)
184−{
185− if (active)
186− Q_EMIT showAllActivated();
187−}
plugins/Unity/genericoptionsmodel.hdeleted−79
@@ -1,79 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#ifndef GENERICOPTIONSMODEL_H
21−#define GENERICOPTIONSMODEL_H
22−
23−// Qt
24−#include <QObject>
25−#include <QAbstractListModel>
26−#include <QHash>
27−#include <QVector>
28−
29−class AbstractFilterOption;
30−
31−class Q_DECL_EXPORT GenericOptionsModel : public QAbstractListModel
32−{
33− Q_OBJECT
34−
35− Q_ENUMS(Roles)
36−
37−public:
38− GenericOptionsModel(bool showAllOption = false, QObject *parent = nullptr);
39− ~GenericOptionsModel();
40−
41− enum Roles {
42− RoleId = Qt::UserRole,
43− RoleName,
44− RoleIconHint,
45− RoleActive
46− };
47−
48− QHash<int, QByteArray> roleNames() const override;
49− QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
50− int rowCount(const QModelIndex& parent = QModelIndex()) const override;
51−
52− Q_INVOKABLE void setActive(int idx, bool value);
53− Q_INVOKABLE void setActive(const QString &id, bool value);
54−
55− AbstractFilterOption* getRawOption(QVector<AbstractFilterOption *>::size_type idx) const;
56−
57−public Q_SLOTS:
58− virtual void ensureTheOnlyActive(AbstractFilterOption *activeOption);
59−
60−Q_SIGNALS:
61− void activeChanged(AbstractFilterOption *option);
62− void showAllActivated();
63−
64−protected Q_SLOTS:
65− void onOptionChanged();
66− void onActiveChanged();
67− void onShowAllClicked(bool active);
68−
69−protected:
70− void addOption(AbstractFilterOption *option, int index = -1);
71− void removeOption(int index);
72− int indexOf(const QString &option_id);
73−
74− QVector<AbstractFilterOption *> m_options;
75−};
76−
77−Q_DECLARE_METATYPE(GenericOptionsModel*)
78−
79−#endif // GENERICOPTIONSMODEL_H
plugins/Unity/moviepreview.cppdeleted−67
@@ -1,67 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−// local
21−#include "moviepreview.h"
22−
23−// Qt
24−#include <QDebug>
25−
26−MoviePreview::MoviePreview(QObject *parent):
27− Preview(parent),
28− m_unityMoviePreview(nullptr)
29−{
30−}
31−
32−QString MoviePreview::year() const
33−{
34− if (m_unityMoviePreview) {
35− return QString::fromStdString(m_unityMoviePreview->year());
36− } else {
37− qWarning() << "Preview not set";
38− }
39− return QString();
40−}
41−
42−float MoviePreview::rating() const
43−{
44− if (m_unityMoviePreview) {
45− return m_unityMoviePreview->rating();
46− } else {
47− qWarning() << "Preview not set";
48− }
49− return 0.0f;
50−}
51−
52−unsigned int MoviePreview::numRatings() const
53−{
54− if (m_unityMoviePreview) {
55− return m_unityMoviePreview->num_ratings();
56− } else {
57− qWarning() << "Preview not set";
58− }
59− return 0;
60−}
61−
62−void MoviePreview::setUnityPreview(unity::dash::Preview::Ptr unityPreview)
63−{
64− m_unityMoviePreview = std::dynamic_pointer_cast<unity::dash::MoviePreview>(unityPreview);
65−
66− Q_EMIT previewChanged();
67−}
plugins/Unity/moviepreview.hdeleted−60
@@ -1,60 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#ifndef MOVIEPREVIEW_H
21−#define MOVIEPREVIEW_H
22−
23−// local
24−#include "preview.h"
25−
26−// Qt
27−#include <QObject>
28−#include <QMetaType>
29−
30−// libunity-core
31−#include <UnityCore/MoviePreview.h>
32−
33−class Q_DECL_EXPORT MoviePreview: public Preview
34−{
35− Q_OBJECT
36−
37− Q_PROPERTY(QString year READ year NOTIFY previewChanged)
38− Q_PROPERTY(float rating READ rating NOTIFY previewChanged)
39− Q_PROPERTY(unsigned int numRatings READ numRatings NOTIFY previewChanged)
40−
41−public:
42− explicit MoviePreview(QObject *parent = 0);
43−
44− QString year() const;
45− float rating() const;
46− unsigned int numRatings() const;
47−
48−Q_SIGNALS:
49− void previewChanged();
50−
51−protected:
52− void setUnityPreview(unity::dash::Preview::Ptr unityPreview) override;
53−
54−private:
55− unity::dash::MoviePreview::Ptr m_unityMoviePreview;
56−};
57−
58−Q_DECLARE_METATYPE(MoviePreview *)
59−
60−#endif
plugins/Unity/multirangefilter.cppdeleted−65
@@ -1,65 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−// Self
22−#include "multirangefilter.h"
23−
24−// local
25−#include "unityoptionsmodel.h"
26−
27−MultiRangeFilter::MultiRangeFilter(QObject *parent) :
28− Filter(parent), m_unityMultiRangeFilter(nullptr), m_options(nullptr)
29−{
30−}
31−
32−GenericOptionsModel* MultiRangeFilter::options() const
33−{
34− return m_options;
35−}
36−
37−void MultiRangeFilter::setUnityFilter(unity::dash::Filter::Ptr filter)
38−{
39− Filter::setUnityFilter(filter);
40− m_unityMultiRangeFilter = std::dynamic_pointer_cast<unity::dash::MultiRangeFilter>(m_unityFilter);
41−
42− onOptionsChanged(m_unityMultiRangeFilter->options);
43−}
44−
45−void MultiRangeFilter::onOptionsChanged(unity::dash::MultiRangeFilter::Options options)
46−{
47− if (m_options != nullptr) {
48− m_signals.disconnectAll();
49− delete m_options;
50− m_options = nullptr;
51− }
52−
53− m_options = new UnityOptionsModel(this, options,
54− m_unityMultiRangeFilter->option_added,
55− m_unityMultiRangeFilter->option_removed,
56− m_unityMultiRangeFilter->show_all_button);
57−
58− connect(m_options, SIGNAL(activeChanged(AbstractFilterOption *)), m_options, SLOT(ensureTheOnlyActive(AbstractFilterOption *)));
59− connect(m_options, SIGNAL(showAllActivated()), this, SLOT(clear()));
60−
61− /* Property change signals */
62− m_signals << m_unityMultiRangeFilter->options.changed.connect(sigc::mem_fun(this, &MultiRangeFilter::onOptionsChanged));
63−
64− Q_EMIT optionsChanged();
65−}
plugins/Unity/multirangefilter.hdeleted−60
@@ -1,60 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−#ifndef MULTIRANGEFILTER_H
22−#define MULTIRANGEFILTER_H
23−
24−// Qt
25−#include <QObject>
26−#include <QMetaType>
27−
28−// libunity-core
29−#include <UnityCore/MultiRangeFilter.h>
30−
31−// Local
32−#include "filter.h"
33−#include "signalslist.h"
34−
35−class GenericOptionsModel;
36−
37−class Q_DECL_EXPORT MultiRangeFilter : public Filter
38−{
39− Q_OBJECT
40−
41−public:
42− explicit MultiRangeFilter(QObject *parent = nullptr);
43−
44− /* getters */
45− GenericOptionsModel* options() const override;
46−
47−protected:
48− void setUnityFilter(unity::dash::Filter::Ptr filter) override;
49−
50−private:
51− unity::dash::MultiRangeFilter::Ptr m_unityMultiRangeFilter;
52− SignalsList m_signals;
53− GenericOptionsModel* m_options;
54−
55− void onOptionsChanged(unity::dash::MultiRangeFilter::Options);
56−};
57−
58−Q_DECLARE_METATYPE(MultiRangeFilter*)
59−
60−#endif // MULTIRANGEFILTER_H
plugins/Unity/musicpreview.cppdeleted−54
@@ -1,54 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#include "musicpreview.h"
21−#include <QDebug>
22−
23−// dee-qt
24−#include "deelistmodel.h"
25−
26−MusicPreview::MusicPreview(QObject *parent):
27− Preview(parent),
28− m_unityMusicPreview(nullptr)
29−{
30− m_tracks = new DeeListModel(this);
31−}
32−
33−void MusicPreview::setUnityPreview(unity::dash::Preview::Ptr unityPreview)
34−{
35− m_unityMusicPreview = std::dynamic_pointer_cast<unity::dash::MusicPreview>(unityPreview);
36− m_tracks->setModel(m_unityMusicPreview->GetTracksModel()->model());
37− m_unityMusicPreview->GetTracksModel()->model.changed.connect(sigc::mem_fun(this, &MusicPreview::onTracksModelChanged));
38−
39− Q_EMIT previewChanged();
40− Q_EMIT tracksChanged();
41−}
42−
43−DeeListModel* MusicPreview::tracks() const
44−{
45− if (m_unityMusicPreview == nullptr) {
46− qWarning() << "Preview not set";
47− }
48− return m_tracks;
49−}
50−
51−void MusicPreview::onTracksModelChanged(unity::glib::Object<DeeModel> /* model */)
52−{
53− m_tracks->setModel(m_unityMusicPreview->GetTracksModel()->model());
54−}
plugins/Unity/musicpreview.hdeleted−62
@@ -1,62 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#ifndef MUSICPREVIEW_H
21−#define MUSICPREVIEW_H
22−
23−// local
24−#include "preview.h"
25−
26−// Qt
27−#include <QObject>
28−#include <QMetaType>
29−
30−// libunity-core
31−#include <UnityCore/MusicPreview.h>
32−
33−class DeeListModel;
34−
35−class Q_DECL_EXPORT MusicPreview: public Preview
36−{
37− Q_OBJECT
38−
39− Q_PROPERTY(DeeListModel* tracks READ tracks NOTIFY tracksChanged)
40−
41−public:
42− explicit MusicPreview(QObject *parent = 0);
43−
44− DeeListModel* tracks() const;
45−
46−Q_SIGNALS:
47− void tracksChanged();
48−
49−protected:
50− void setUnityPreview(unity::dash::Preview::Ptr unityPreview) override;
51−
52−private Q_SLOTS:
53− void onTracksModelChanged(unity::glib::Object<DeeModel> model);
54−
55−private:
56− unity::dash::MusicPreview::Ptr m_unityMusicPreview;
57− DeeListModel *m_tracks;
58−};
59−
60−Q_DECLARE_METATYPE(MusicPreview *)
61−
62−#endif
plugins/Unity/plugin.cppdeleted−74
@@ -1,74 +0,0 @@
1−/*
2− * Copyright (C) 2012 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: Michał Sawicz <michal.sawicz@canonical.com>
17− */
18−
19−// Qt
20−#include <QDBusConnection>
21−#include <QQmlContext>
22−#include <qqml.h>
23−
24−// self
25−#include "plugin.h"
26−
27−// local
28−#include "preview.h"
29−#include "previewaction.h"
30−#include "previewinfohint.h"
31−#include "socialpreviewcomment.h"
32−#include "scope.h"
33−#include "scopes.h"
34−#include "categories.h"
35−#include "categoryresults.h"
36−#include "bottombarvisibilitycommunicatorshell.h"
37−#include "genericoptionsmodel.h"
38−#include "result.h"
39−
40−// libqtdee
41−#include "deelistmodel.h"
42−
43−static const char* BOTTOM_BAR_VISIBILITY_COMMUNICATOR_DBUS_PATH = "/BottomBarVisibilityCommunicator";
44−static const char* DBUS_SERVICE = "com.canonical.Shell.BottomBarVisibilityCommunicator";
45−
46−void UnityPlugin::registerTypes(const char *uri)
47−{
48− Q_ASSERT(uri == QLatin1String("Unity"));
49− qmlRegisterUncreatableType<Preview>(uri, 0, 1, "Preview", "Can't create Preview object in QML.");
50− qmlRegisterUncreatableType<PreviewAction>(uri, 0, 1, "PreviewAction", "Can't create PreviewAction object in QML.");
51− qmlRegisterUncreatableType<PreviewInfoHint>(uri, 0, 1, "PreviewInfoHint", "Can't create PreviewInfoHint object in QML.");
52− qmlRegisterUncreatableType<SocialPreviewComment>(uri, 0, 1, "SocialPreviewComment", "Can't create SocialPreviewComment object in QML.");
53− qmlRegisterUncreatableType<GenericOptionsModel>(uri, 0, 1, "GenericOptionsModel", "Can't create options model in QML.");
54− qmlRegisterUncreatableType<Result>(uri, 0, 1, "Result", "Can't create result object in QML.");
55− qmlRegisterType<Scope>(uri, 0, 1, "Scope");
56− qmlRegisterType<Scopes>(uri, 0, 1, "Scopes");
57− qmlRegisterType<Categories>(uri, 0, 1, "Categories");
58− qmlRegisterUncreatableType<CategoryResults>(uri, 0, 1, "CategoryResults", "Can't create new Category Results in QML. Get them from Categories instance.");
59− qmlRegisterType<DeeListModel>(uri, 0, 1, "DeeListModel");
60− qmlRegisterUncreatableType<BottomBarVisibilityCommunicatorShell>(uri, 0, 1, "BottomBarVisibilityCommunicatorShell", "Can't create BottomBarVisibilityCommunicatorShell");
61−}
62−
63−void UnityPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
64−{
65− QQmlExtensionPlugin::initializeEngine(engine, uri);
66−#ifndef GLIB_VERSION_2_36
67− g_type_init();
68−#endif
69−
70− QDBusConnection::sessionBus().registerService(DBUS_SERVICE);
71− BottomBarVisibilityCommunicatorShell *bottomBarVisibilityCommunicator = &BottomBarVisibilityCommunicatorShell::instance();
72− QDBusConnection::sessionBus().registerObject(BOTTOM_BAR_VISIBILITY_COMMUNICATOR_DBUS_PATH, bottomBarVisibilityCommunicator, QDBusConnection::ExportAllContents);
73− engine->rootContext()->setContextProperty("bottomBarVisibilityCommunicatorShell", bottomBarVisibilityCommunicator);
74−}
plugins/Unity/preview.cppdeleted−199
@@ -1,199 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−// local
21−#include "preview.h"
22−#include "previewaction.h"
23−#include "previewinfohint.h"
24−#include "genericpreview.h"
25−#include "applicationpreview.h"
26−#include "moviepreview.h"
27−#include "musicpreview.h"
28−#include "socialpreview.h"
29−#include "iconutils.h"
30−#include "variantutils.h"
31−
32−// Qt
33−#include <QDebug>
34−#include <QtAlgorithms>
35−
36−#include <UnityCore/GenericPreview.h>
37−#include <UnityCore/ApplicationPreview.h>
38−#include <UnityCore/MoviePreview.h>
39−#include <UnityCore/MusicPreview.h>
40−#include <UnityCore/SocialPreview.h>
41−
42−#include <UnityCore/GLibWrapper.h>
43−
44−Preview::Preview(QObject *parent):
45− QObject(parent),
46− m_unityPreview(nullptr),
47− m_result(new Result(this))
48−{
49−}
50−
51−QString Preview::rendererName() const
52−{
53− if (m_unityPreview) {
54− return QString::fromStdString(m_unityPreview->renderer_name());
55− } else {
56− qWarning() << "Preview not set";
57− }
58− return QString();
59−}
60−
61−QString Preview::title() const
62−{
63− if (m_unityPreview) {
64− return QString::fromStdString(m_unityPreview->title());
65− } else {
66− qWarning() << "Preview not set";
67− }
68− return QString();
69−}
70−
71−QString Preview::subtitle () const
72−{
73− if (m_unityPreview) {
74− return QString::fromStdString(m_unityPreview->subtitle());
75− } else {
76− qWarning() << "Preview not set";
77− }
78− return QString();
79−}
80−
81−QString Preview::description() const
82−{
83− if (m_unityPreview) {
84− return QString::fromStdString(m_unityPreview->description());
85− } else {
86− qWarning() << "Preview not set";
87− }
88− return QString();
89−}
90−
91−QVariant Preview::actions()
92−{
93− return QVariant::fromValue(m_actions);
94−}
95−
96−QVariant Preview::infoHints()
97−{
98− return QVariant::fromValue(m_infoHints);
99−}
100−
101−QVariantMap Preview::infoHintsHash() const
102−{
103− return m_infoHintsHash;
104−}
105−
106−QString Preview::image() const
107−{
108− if (m_unityPreview) {
109− if (m_unityPreview->image() != nullptr) {
110− auto giconString = g_icon_to_string(m_unityPreview->image());
111− QString result(gIconToDeclarativeImageProviderString(QString::fromUtf8(giconString)));
112− g_free(giconString);
113− return result;
114− } else {
115− QString sourceMedia(QString::fromStdString(m_unityPreview->image_source_uri()));
116− QString thumbnailUri(uriToThumbnailerProviderString(sourceMedia, m_result->mimeType(), m_result->metadata().toHash()));
117− if (!thumbnailUri.isNull()) return thumbnailUri;
118− }
119− } else {
120− qWarning() << "Preview not set";
121− }
122− return QString::null;
123−}
124−
125−QVariant Preview::result() const
126−{
127− return QVariant::fromValue(m_result);
128−}
129−
130−Preview* Preview::newFromUnityPreview(unity::dash::Preview::Ptr unityPreview)
131−{
132− Preview* preview = nullptr;
133−
134− if (dynamic_cast<unity::dash::GenericPreview *>(unityPreview.get()) != nullptr) {
135− preview = new GenericPreview();
136− } else if (dynamic_cast<unity::dash::MusicPreview *>(unityPreview.get()) != nullptr) {
137− preview = new MusicPreview();
138− } else if (dynamic_cast<unity::dash::MoviePreview *>(unityPreview.get()) != nullptr) {
139− preview = new MoviePreview();
140− } else if (dynamic_cast<unity::dash::ApplicationPreview *>(unityPreview.get()) != nullptr) {
141− preview = new ApplicationPreview();
142− } else if (dynamic_cast<unity::dash::SocialPreview *>(unityPreview.get()) != nullptr) {
143− preview = new SocialPreview();
144− } else {
145− qWarning() << "Unknown preview type: " << typeid(*unityPreview).name();
146− preview = new GenericPreview();
147− }
148−
149− preview->setUnityPreviewBase(unityPreview);
150− preview->setUnityPreview(unityPreview);
151−
152− return preview;
153−}
154−
155−void Preview::setUnityPreviewBase(unity::dash::Preview::Ptr unityPreview)
156−{
157− m_unityPreview = unityPreview;
158− m_result->setPreview(unityPreview);
159−
160− qDeleteAll(m_infoHints);
161− m_infoHints.clear();
162− m_infoHintsHash.clear();
163− qDeleteAll(m_actions);
164− m_actions.clear();
165−
166− for (auto unityInfoHint: m_unityPreview->GetInfoHints()) {
167− auto hint = new PreviewInfoHint(this);
168− hint->setUnityInfoHint(unityInfoHint);
169− m_infoHints.append(hint);
170− m_infoHintsHash[hint->id()] = QVariant::fromValue(hint);
171− }
172−
173− for (auto unityAction: m_unityPreview->GetActions()) {
174− auto action = new PreviewAction(this);
175− action->setUnityAction(unityAction);
176− m_actions.append(action);
177− }
178−}
179−
180−void Preview::setUnityPreview(unity::dash::Preview::Ptr /* unityPreview */)
181−{
182− // default implementation does nothing
183−}
184−
185−void Preview::execute(const QString& actionId, const QHash<QString, QVariant>& hints)
186−{
187− if (m_unityPreview) {
188− auto unityHints = convertToHintsMap(hints);
189− m_actionCancellable.Renew();
190− m_unityPreview->PerformAction(actionId.toStdString(), unityHints, nullptr, m_actionCancellable);
191− } else {
192− qWarning() << "Preview not set";
193− }
194−}
195−
196−void Preview::cancelAction()
197−{
198− m_actionCancellable.Cancel();
199−}
plugins/Unity/preview.hdeleted−89
@@ -1,89 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#ifndef PREVIEW_H
21−#define PREVIEW_H
22−
23−// Qt
24−#include <QObject>
25−#include <QString>
26−#include <QMetaType>
27−#include <QList>
28−#include <QVariantMap>
29−
30−// libunity-core
31−#include <UnityCore/Preview.h>
32−
33−// local
34−#include "result.h"
35−#include "previewaction.h"
36−#include <UnityCore/GLibWrapper.h>
37−
38−class Q_DECL_EXPORT Preview : public QObject
39−{
40− Q_OBJECT
41−
42− Q_PROPERTY(QString rendererName READ rendererName NOTIFY previewChanged)
43− Q_PROPERTY(QString title READ title NOTIFY previewChanged)
44− Q_PROPERTY(QString subtitle READ subtitle NOTIFY previewChanged)
45− Q_PROPERTY(QString description READ description NOTIFY previewChanged)
46− Q_PROPERTY(QVariant actions READ actions NOTIFY previewChanged)
47− Q_PROPERTY(QVariant infoHints READ infoHints NOTIFY previewChanged)
48− Q_PROPERTY(QVariantMap infoMap READ infoHintsHash NOTIFY previewChanged)
49− Q_PROPERTY(QString image READ image NOTIFY previewChanged)
50− Q_PROPERTY(QVariant result READ result NOTIFY previewChanged)
51−
52−public:
53− explicit Preview(QObject *parent = 0);
54− static Preview* newFromUnityPreview(unity::dash::Preview::Ptr unityPreview);
55−
56− QString rendererName() const;
57− QString title() const;
58− QString subtitle() const;
59− QString description() const;
60− QVariant actions();
61− QVariant infoHints();
62− QVariantMap infoHintsHash() const;
63− QString image() const;
64− QVariant result() const;
65−
66− Q_INVOKABLE void execute(const QString& actionId, const QHash<QString, QVariant>& hints);
67− Q_INVOKABLE void cancelAction();
68−
69−Q_SIGNALS:
70− void previewChanged();
71−
72−protected:
73− virtual void setUnityPreview(unity::dash::Preview::Ptr unityPreview);
74−
75− unity::dash::Preview::Ptr m_unityPreview;
76− Result* m_result;
77−
78−private:
79− void setUnityPreviewBase(unity::dash::Preview::Ptr unityPreview);
80−
81− QList<QObject *> m_actions;
82− QList<QObject *> m_infoHints;
83− QVariantMap m_infoHintsHash;
84− unity::glib::Cancellable m_actionCancellable;
85−};
86−
87−Q_DECLARE_METATYPE(Preview *)
88−
89−#endif
plugins/Unity/previewaction.cppdeleted−75
@@ -1,75 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#include "previewaction.h"
21−
22−PreviewAction::PreviewAction(QObject *parent)
23− : QObject(parent),
24− m_unityAction(nullptr)
25−{
26−}
27−
28−void PreviewAction::setUnityAction(unity::dash::Preview::ActionPtr unityAction)
29−{
30− m_unityAction = unityAction;
31−
32− Q_EMIT previewActionChanged();
33−}
34−
35−QString PreviewAction::id() const
36−{
37− if (m_unityAction)
38− return QString::fromStdString(m_unityAction->id);
39− return QString();
40−}
41−
42−QString PreviewAction::displayName() const
43−{
44− if (m_unityAction)
45− return QString::fromStdString(m_unityAction->display_name);
46− return QString();
47−}
48−
49−QString PreviewAction::iconHint() const
50−{
51− if (m_unityAction)
52− return QString::fromStdString(m_unityAction->icon_hint);
53− return QString();
54−}
55−
56−QString PreviewAction::extraText() const
57−{
58− if (m_unityAction)
59− return QString::fromStdString(m_unityAction->extra_text);
60− return QString();
61−}
62−
63−QString PreviewAction::activationUri() const
64−{
65− if (m_unityAction)
66− return QString::fromStdString(m_unityAction->activation_uri);
67− return QString();
68−}
69−
70−LayoutHint PreviewAction::layoutHint() const
71−{
72− if (m_unityAction)
73− return static_cast<LayoutHint>(m_unityAction->layout_hint);
74− return LayoutHint::None;
75−}
plugins/Unity/previewaction.hdeleted−71
@@ -1,71 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#ifndef PREVIEWACTION_H
21−#define PREVIEWACTION_H
22−
23−// Qt
24−#include <QObject>
25−#include <QList>
26−
27−// libuinity-core
28−#include <UnityCore/Preview.h>
29−
30−enum LayoutHint // keep in sync with unty::dash::LayoutHint
31−{
32− None,
33− Left,
34− Right,
35− Top,
36− Bottom
37−};
38−
39−class Q_DECL_EXPORT PreviewAction : public QObject
40−{
41− Q_OBJECT
42−
43− Q_PROPERTY(QString id READ id NOTIFY previewActionChanged)
44− Q_PROPERTY(QString displayName READ displayName NOTIFY previewActionChanged)
45− Q_PROPERTY(QString iconHint READ iconHint NOTIFY previewActionChanged)
46− Q_PROPERTY(QString extraText READ extraText NOTIFY previewActionChanged)
47− Q_PROPERTY(QString activationUri READ activationUri NOTIFY previewActionChanged)
48− Q_PROPERTY(LayoutHint layoutHint READ layoutHint NOTIFY previewActionChanged)
49−
50−public:
51− explicit PreviewAction(QObject *parent = 0);
52− void setUnityAction(unity::dash::Preview::ActionPtr unityAction);
53−
54− QString id() const;
55− QString displayName() const;
56− QString iconHint() const;
57− QString extraText() const;
58− QString activationUri() const;
59− LayoutHint layoutHint() const;
60−
61−Q_SIGNALS:
62− void previewActionChanged();
63−
64−private:
65− unity::dash::Preview::ActionPtr m_unityAction;
66−};
67−
68−Q_DECLARE_METATYPE(PreviewAction *)
69−Q_DECLARE_METATYPE(LayoutHint)
70−
71−#endif
plugins/Unity/previewinfohint.cppdeleted−67
@@ -1,67 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#include <deelistmodel.h>
21−// local
22−#include "previewinfohint.h"
23−
24−PreviewInfoHint::PreviewInfoHint(QObject *parent):
25− QObject(parent),
26− m_unityInfoHint(nullptr)
27−{
28−}
29−
30−void PreviewInfoHint::setUnityInfoHint(unity::dash::Preview::InfoHintPtr unityInfoHint)
31−{
32− m_unityInfoHint = unityInfoHint;
33−
34− Q_EMIT previewInfoHintChanged();
35−}
36−
37−QString PreviewInfoHint::id() const
38−{
39− if (m_unityInfoHint) {
40− return QString::fromStdString(m_unityInfoHint->id);
41− }
42− return QString();
43−}
44−
45−QString PreviewInfoHint::displayName() const
46−{
47− if (m_unityInfoHint) {
48− return QString::fromStdString(m_unityInfoHint->display_name);
49− }
50− return QString();
51−}
52−
53−QString PreviewInfoHint::iconHint() const
54−{
55− if (m_unityInfoHint) {
56− return QString::fromStdString(m_unityInfoHint->icon_hint);
57− }
58− return QString();
59−}
60−
61−QVariant PreviewInfoHint::value() const
62−{
63− if (m_unityInfoHint) {
64− return DeeListModel::VariantForData(m_unityInfoHint->value);
65− }
66− return QVariant();
67−}
plugins/Unity/previewinfohint.hdeleted−58
@@ -1,58 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#ifndef PREVIEWINFOHINT_H
21−#define PREVIEWINFOHINT_H
22−
23−// Qt
24−#include <QObject>
25−#include <QString>
26−#include <QVariant>
27−
28−// libunity-core
29−#include <UnityCore/Preview.h>
30−
31−class PreviewInfoHint : public QObject
32−{
33− Q_OBJECT
34−
35− Q_PROPERTY(QString id READ id NOTIFY previewInfoHintChanged)
36− Q_PROPERTY(QString displayName READ displayName NOTIFY previewInfoHintChanged)
37− Q_PROPERTY(QString iconHint READ iconHint NOTIFY previewInfoHintChanged)
38− Q_PROPERTY(QVariant value READ value NOTIFY previewInfoHintChanged)
39−
40−public:
41− explicit PreviewInfoHint(QObject *parent = 0);
42− void setUnityInfoHint(unity::dash::Preview::InfoHintPtr unityInfoHint);
43−
44− QString id() const;
45− QString displayName() const;
46− QString iconHint() const;
47− QVariant value() const;
48−
49−Q_SIGNALS:
50− void previewInfoHintChanged();
51−
52−private:
53− unity::dash::Preview::InfoHintPtr m_unityInfoHint;
54−};
55−
56−Q_DECLARE_METATYPE(PreviewInfoHint *)
57−
58−#endif
plugins/Unity/qmldirdeleted−3
@@ -1,3 +0,0 @@
1−module Unity
2−plugin Unity-qml
3−typeinfo plugin.qmltypes
plugins/Unity/radiooptionfilter.cppdeleted−61
@@ -1,61 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−// Self
22−#include "radiooptionfilter.h"
23−
24−// local
25−#include "unityoptionsmodel.h"
26−
27−RadioOptionFilter::RadioOptionFilter(QObject *parent) :
28− Filter(parent), m_unityRadioOptionFilter(nullptr), m_options(nullptr)
29−{
30−}
31−
32−GenericOptionsModel* RadioOptionFilter::options() const
33−{
34− return m_options;
35−}
36−
37−void RadioOptionFilter::setUnityFilter(unity::dash::Filter::Ptr filter)
38−{
39− Filter::setUnityFilter(filter);
40− m_unityRadioOptionFilter = std::dynamic_pointer_cast<unity::dash::RadioOptionFilter>(m_unityFilter);
41−
42− onOptionsChanged(m_unityRadioOptionFilter->options);
43−}
44−
45−void RadioOptionFilter::onOptionsChanged(unity::dash::RadioOptionFilter::RadioOptions)
46−{
47− if (m_options != nullptr) {
48− m_signals.disconnectAll();
49− delete m_options;
50− m_options = nullptr;
51− }
52− m_options = new UnityOptionsModel(this, m_unityRadioOptionFilter->options,
53− m_unityRadioOptionFilter->option_added,
54− m_unityRadioOptionFilter->option_removed,
55− m_unityRadioOptionFilter->show_all_button);
56− connect(m_options, SIGNAL(showAllActivated()), this, SLOT(clear()));
57−
58− m_signals << m_unityRadioOptionFilter->options.changed.connect(sigc::mem_fun(this, &RadioOptionFilter::onOptionsChanged));
59−
60− Q_EMIT optionsChanged();
61−}
plugins/Unity/radiooptionfilter.hdeleted−59
@@ -1,59 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−#ifndef RADIOOPTIONFILTER_H
22−#define RADIOOPTIONFILTER_H
23−
24−// Qt
25−#include <QObject>
26−#include <QMetaType>
27−
28−// libunity-core
29−#include <UnityCore/RadioOptionFilter.h>
30−
31−// Local
32−#include "filter.h"
33−#include "filteroption.h"
34−#include "signalslist.h"
35−
36−class Q_DECL_EXPORT RadioOptionFilter : public Filter
37−{
38− Q_OBJECT
39−
40−public:
41− explicit RadioOptionFilter(QObject *parent = nullptr);
42−
43− /* getters */
44− GenericOptionsModel* options() const override;
45−
46−protected:
47− void setUnityFilter(unity::dash::Filter::Ptr filter) override;
48−
49−private:
50− unity::dash::RadioOptionFilter::Ptr m_unityRadioOptionFilter;
51− GenericOptionsModel* m_options;
52− SignalsList m_signals;
53−
54− void onOptionsChanged(unity::dash::RadioOptionFilter::RadioOptions);
55−};
56−
57−Q_DECLARE_METATYPE(RadioOptionFilter*)
58−
59−#endif // RADIOOPTIONFILTER_H
plugins/Unity/ratingfilteroption.cppdeleted−62
@@ -1,62 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−// self
21−#include "ratingfilteroption.h"
22−
23−RatingFilterOption::RatingFilterOption(const QString &id, float value, QObject *parent) :
24− AbstractFilterOption(parent),
25− m_active(false),
26− m_id(id),
27− m_value(value)
28−{
29−}
30−
31−QString RatingFilterOption::id() const
32−{
33− return m_id;
34−}
35−
36−QString RatingFilterOption::name() const
37−{
38− return QString::Null();
39−}
40−
41−QString RatingFilterOption::iconHint() const
42−{
43− return QString::Null();
44−}
45−
46−float RatingFilterOption::value() const
47−{
48− return m_value;
49−}
50−
51−bool RatingFilterOption::active() const
52−{
53− return m_active;
54−}
55−
56−void RatingFilterOption::setActive(bool active)
57−{
58− if (active != m_active) {
59− m_active = active;
60− Q_EMIT activeChanged(m_active);
61− }
62−}
plugins/Unity/ratingfilteroption.hdeleted−53
@@ -1,53 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#ifndef RATINGFILTEROPTION_H
21−#define RATINGFILTEROPTION_H
22−
23−// local
24−#include "abstractfilteroption.h"
25−
26−class Q_DECL_EXPORT RatingFilterOption : public AbstractFilterOption
27−{
28− Q_OBJECT
29−
30− Q_PROPERTY(float value READ value CONSTANT)
31−
32−public:
33− explicit RatingFilterOption(const QString &id, float ratingValue, QObject *parent = nullptr);
34−
35− /* getters */
36− QString id() const override;
37− QString name() const override;
38− QString iconHint() const override;
39− bool active() const override;
40− float value() const;
41−
42− /* setters */
43− void setActive(bool active) override;
44−
45−private:
46− bool m_active;
47− QString m_id;
48− float m_value;
49−};
50−
51−Q_DECLARE_METATYPE(RatingFilterOption*)
52−
53−#endif // RATINGFILTEROPTION_H
plugins/Unity/ratingsfilter.cppdeleted−73
@@ -1,73 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−// Self
22−#include "ratingsfilter.h"
23−
24−// local
25−#include "ratingfilteroption.h"
26−#include "ratingoptionsmodel.h"
27−
28−RatingsFilter::RatingsFilter(QObject *parent) :
29− Filter(parent),
30− m_unityRatingsFilter(nullptr),
31− m_options(nullptr)
32−{
33−}
34−
35−GenericOptionsModel* RatingsFilter::options() const
36−{
37− return m_options;
38−}
39−
40−float RatingsFilter::rating() const
41−{
42− if (m_unityRatingsFilter)
43− {
44− return m_unityRatingsFilter->rating;
45− }
46− return 0.0f;
47−}
48−
49−void RatingsFilter::setUnityFilter(unity::dash::Filter::Ptr filter)
50−{
51− Filter::setUnityFilter(filter);
52− m_unityRatingsFilter = std::dynamic_pointer_cast<unity::dash::RatingsFilter>(m_unityFilter);
53−
54− delete m_options;
55−
56− m_options = new RatingOptionsModel(m_unityRatingsFilter->show_all_button, this);
57− connect(m_options, SIGNAL(activeChanged(AbstractFilterOption *)), m_options, SLOT(ensureTheOnlyActive(AbstractFilterOption *)));
58− connect(m_options, SIGNAL(activeChanged(AbstractFilterOption *)), this, SLOT(onActiveChanged(AbstractFilterOption *)));
59− connect(m_options, SIGNAL(showAllActivated()), this, SLOT(clear()));
60−
61− Q_EMIT optionsChanged();
62−}
63−
64−void RatingsFilter::onActiveChanged(AbstractFilterOption *option)
65−{
66− RatingFilterOption *ratingOption = dynamic_cast<RatingFilterOption*>(option);
67− if (ratingOption != nullptr)
68− {
69− const float val = ratingOption->active() ? ratingOption->value() : 0.0f;
70− m_unityRatingsFilter->rating = val;
71− Q_EMIT ratingChanged(val);
72− }
73−}
plugins/Unity/ratingsfilter.hdeleted−66
@@ -1,66 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−#ifndef RATINGSFILTER_H
22−#define RATINGSFILTER_H
23−
24−// Qt
25−#include <QObject>
26−#include <QMetaType>
27−
28−// libunity-core
29−#include <UnityCore/RatingsFilter.h>
30−
31−// Local
32−#include "filter.h"
33−
34−class GenericOptionsModel;
35−class AbstractFilterOption;
36−
37−class Q_DECL_EXPORT RatingsFilter : public Filter
38−{
39− Q_OBJECT
40−
41− Q_PROPERTY(float rating READ rating NOTIFY ratingChanged)
42−
43−public:
44− explicit RatingsFilter(QObject *parent = nullptr);
45−
46− /* getters */
47− GenericOptionsModel* options() const override;
48− float rating() const;
49−
50−Q_SIGNALS:
51− void ratingChanged(float);
52−
53−protected:
54− void setUnityFilter(unity::dash::Filter::Ptr filter) override;
55−
56−protected Q_SLOTS:
57− void onActiveChanged(AbstractFilterOption *option);
58−
59−private:
60− unity::dash::RatingsFilter::Ptr m_unityRatingsFilter;
61− GenericOptionsModel *m_options;
62−};
63−
64−Q_DECLARE_METATYPE(RatingsFilter*)
65−
66−#endif // RATINGSFILTER_H
plugins/Unity/result.cppdeleted−82
@@ -1,82 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#include "result.h"
21−#include "variantutils.h"
22−
23−Result::Result(QObject *parent) :
24− QObject(parent)
25−{
26−}
27−
28−Result::Result(unity::dash::Preview::Ptr preview, QObject *parent) :
29− QObject(parent),
30− m_preview(preview)
31−{
32−}
33−
34−void Result::setPreview(unity::dash::Preview::Ptr preview)
35−{
36− m_preview = preview;
37−}
38−
39−QString Result::uri() const
40−{
41− return m_preview != nullptr ? QString::fromStdString(m_preview->preview_result.uri) : QString::null;
42−}
43−
44−QString Result::iconHint() const
45−{
46− return m_preview != nullptr ? QString::fromStdString(m_preview->preview_result.icon_hint) : QString::null;
47−}
48−
49−unsigned Result::categoryIndex() const
50−{
51− return m_preview != nullptr ? m_preview->preview_result.category_index : 0;
52−}
53−
54−unsigned Result::resultType() const
55−{
56− return m_preview != nullptr ? m_preview->preview_result.result_type : 0;
57−}
58−
59−QString Result::mimeType() const
60−{
61− return m_preview != nullptr ? QString::fromStdString(m_preview->preview_result.mimetype) : QString::null;
62−}
63−
64−QString Result::title() const
65−{
66− return m_preview != nullptr ? QString::fromStdString(m_preview->preview_result.name) : QString::null;
67−}
68−
69−QString Result::comment() const
70−{
71− return m_preview != nullptr ? QString::fromStdString(m_preview->preview_result.comment) : QString::null;
72−}
73−
74−QString Result::dndUri() const
75−{
76− return m_preview != nullptr ? QString::fromStdString(m_preview->preview_result.dnd_uri) : QString::null;
77−}
78−
79−QVariant Result::metadata() const
80−{
81− return m_preview != nullptr ? convertToQVariantHash(m_preview->preview_result.hints) : QVariant();
82−}
plugins/Unity/result.hdeleted−69
@@ -1,69 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#ifndef RESULT_H
21−#define RESULT_H
22−
23−// Qt
24−#include <QObject>
25−#include <QVariant>
26−
27−// libunity-core
28−#include <UnityCore/Preview.h>
29−
30−class Q_DECL_EXPORT Result : public QObject
31−{
32− Q_OBJECT
33−
34− Q_PROPERTY(QString uri READ uri CONSTANT)
35− Q_PROPERTY(QString iconHint READ iconHint CONSTANT)
36− Q_PROPERTY(unsigned categoryIndex READ categoryIndex CONSTANT)
37− Q_PROPERTY(unsigned resultType READ resultType CONSTANT)
38− Q_PROPERTY(QString mimeType READ mimeType CONSTANT)
39− Q_PROPERTY(QString title READ title CONSTANT)
40− Q_PROPERTY(QString comment READ comment CONSTANT)
41− Q_PROPERTY(QString dndUri READ dndUri CONSTANT)
42− Q_PROPERTY(QVariant metadata READ metadata CONSTANT)
43−
44−public:
45− Result(QObject *parent = nullptr);
46− Result(unity::dash::Preview::Ptr preview, QObject *parent = nullptr);
47−
48− void setPreview(unity::dash::Preview::Ptr preview);
49−
50− QString uri() const;
51− QString iconHint() const;
52− unsigned categoryIndex() const;
53− unsigned resultType() const;
54− QString mimeType() const;
55− QString title() const;
56− QString comment() const;
57− QString dndUri() const;
58− QVariant metadata() const;
59−
60−private:
61− /* Keep reference to the original preview to access result attributes via it, rather than keeping copies of them;
62− this will save us a bit on copying, especially as UI is mostly interested in just uri.
63− */
64− unity::dash::Preview::Ptr m_preview;
65−};
66−
67−Q_DECLARE_METATYPE(Result *)
68−
69−#endif
plugins/Unity/scope.cppdeleted−404
@@ -1,404 +0,0 @@
1−/*
2− * Copyright (C) 2011 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Michal Hruby <michal.hruby@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−// Self
22−#include "scope.h"
23−
24−// local
25−#include "categories.h"
26−#include "preview.h"
27−#include "variantutils.h"
28−
29−// Qt
30−#include <QUrl>
31−#include <QDebug>
32−#include <QtGui/QDesktopServices>
33−#include <QQmlEngine>
34−
35−#include <UnityCore/Variant.h>
36−#include <UnityCore/GLibWrapper.h>
37−
38−#include <libintl.h>
39−#include <glib.h>
40−
41−Scope::Scope(QObject *parent) : QObject(parent)
42− , m_formFactor("phone")
43− , m_isActive(false)
44− , m_searchInProgress(false)
45−{
46− m_categories.reset(new Categories(this));
47−
48− connect(this, &Scope::isActiveChanged, this, &Scope::scopeIsActiveChanged);
49−}
50−
51−QString Scope::id() const
52−{
53− return QString::fromStdString(m_unityScope->id());
54−}
55−
56−QString Scope::name() const
57−{
58− return QString::fromStdString(m_unityScope->name());
59−}
60−
61−QString Scope::iconHint() const
62−{
63− return QString::fromStdString(m_unityScope->icon_hint());
64−}
65−
66−QString Scope::description() const
67−{
68− return QString::fromStdString(m_unityScope->description());
69−}
70−
71−QString Scope::searchHint() const
72−{
73− return QString::fromStdString(m_unityScope->search_hint());
74−}
75−
76−bool Scope::searchInProgress() const
77−{
78− return m_searchInProgress;
79−}
80−
81−bool Scope::visible() const
82−{
83− return m_unityScope->visible();
84−}
85−
86−QString Scope::shortcut() const
87−{
88− return QString::fromStdString(m_unityScope->shortcut());
89−}
90−
91−bool Scope::connected() const
92−{
93− return m_unityScope->connected();
94−}
95−
96−Categories* Scope::categories() const
97−{
98− return m_categories.get();
99−}
100−
101−QString Scope::searchQuery() const
102−{
103− return m_searchQuery;
104−}
105−
106−QString Scope::noResultsHint() const
107−{
108− return m_noResultsHint;
109−}
110−
111−QString Scope::formFactor() const
112−{
113− return m_formFactor;
114−}
115−
116−bool Scope::isActive() const
117−{
118− return m_isActive;
119−}
120−
121−Filters* Scope::filters() const
122−{
123− return m_filters.get();
124−}
125−
126−void Scope::setSearchQuery(const QString& search_query)
127−{
128− /* Checking for m_searchQuery.isNull() which returns true only when the string
129− has never been set is necessary because when search_query is the empty
130− string ("") and m_searchQuery is the null string,
131− search_query != m_searchQuery is still true.
132− */
133− using namespace std::placeholders;
134−
135− if (m_searchQuery.isNull() || search_query != m_searchQuery) {
136− m_searchQuery = search_query;
137− m_cancellable.Renew();
138− m_unityScope->Search(search_query.toStdString(), std::bind(&Scope::onSearchFinished, this, _1, _2, _3), m_cancellable);
139− Q_EMIT searchQueryChanged();
140− if (!m_searchInProgress) {
141− m_searchInProgress = true;
142− Q_EMIT searchInProgressChanged();
143− }
144− }
145−}
146−
147−void Scope::setNoResultsHint(const QString& hint) {
148− if (hint != m_noResultsHint) {
149− m_noResultsHint = hint;
150− Q_EMIT noResultsHintChanged();
151− }
152−}
153−
154−void Scope::setFormFactor(const QString& form_factor) {
155− if (form_factor != m_formFactor) {
156− m_formFactor = form_factor;
157− if (m_unityScope) {
158− m_unityScope->form_factor = m_formFactor.toStdString();
159− synchronizeStates(); // will trigger a re-search
160− }
161− Q_EMIT formFactorChanged();
162− }
163−}
164−
165−void Scope::setActive(const bool active) {
166− if (active != m_isActive) {
167− m_isActive = active;
168− Q_EMIT isActiveChanged(m_isActive);
169− }
170−}
171−
172−unity::dash::LocalResult Scope::createLocalResult(const QVariant &uri, const QVariant &icon_hint,
173− const QVariant &category, const QVariant &result_type,
174− const QVariant &mimetype, const QVariant &title,
175− const QVariant &comment, const QVariant &dnd_uri,
176− const QVariant &metadata)
177−{
178− unity::dash::LocalResult res;
179− res.uri = uri.toString().toStdString();
180− res.icon_hint = icon_hint.toString().toStdString();
181− res.category_index = category.toUInt();
182− res.result_type = result_type.toUInt();
183− res.mimetype = mimetype.toString().toStdString();
184− res.name = title.toString().toStdString();
185− res.comment = comment.toString().toStdString();
186− res.dnd_uri = dnd_uri.toString().toStdString();
187− res.hints = convertToHintsMap(metadata);
188−
189− return res;
190−}
191−
192−// FIXME: Change to use row index.
193−void Scope::activate(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
194− const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
195− const QVariant &comment, const QVariant &dnd_uri, const QVariant &metadata)
196−{
197− auto res = createLocalResult(uri, icon_hint, category, result_type, mimetype, title, comment, dnd_uri, metadata);
198− m_unityScope->Activate(res);
199−}
200−
201−// FIXME: Change to use row index.
202−void Scope::preview(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
203− const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
204− const QVariant &comment, const QVariant &dnd_uri, const QVariant &metadata)
205−{
206− auto res = createLocalResult(uri, icon_hint, category, result_type, mimetype, title, comment, dnd_uri, metadata);
207− m_previewCancellable.Renew();
208−
209− // canned queries don't have previews, must be activated
210− if (uri.toString().startsWith("x-unity-no-preview-scopes-query://")) {
211− m_unityScope->Activate(res);
212− } else {
213− m_unityScope->Preview(res, nullptr, m_previewCancellable);
214− }
215−}
216−
217−void Scope::cancelActivation()
218−{
219− m_previewCancellable.Cancel();
220−}
221−
222−void Scope::onActivated(unity::dash::LocalResult const& result, unity::dash::ScopeHandledType type, unity::glib::HintsMap const& hints)
223−{
224− // note: we will not get called on SHOW_PREVIEW, instead UnityCore will signal preview_ready.
225− switch (type)
226− {
227− case unity::dash::NOT_HANDLED:
228− fallbackActivate(QString::fromStdString(result.uri));
229− break;
230− case unity::dash::SHOW_DASH:
231− Q_EMIT showDash();
232− break;
233− case unity::dash::HIDE_DASH:
234− Q_EMIT hideDash();
235− break;
236− case unity::dash::GOTO_DASH_URI:
237− if (hints.find("goto-uri") != hints.end()) {
238− Q_EMIT gotoUri(QString::fromStdString(g_variant_get_string(hints.at("goto-uri"), nullptr)));
239− } else {
240− qWarning() << "Missing goto-uri hint for GOTO_DASH_URI activation reply";
241− }
242− break;
243− case unity::dash::PERFORM_SEARCH:
244− if (hints.find("query") != hints.end()) {
245− // note: this will emit searchQueryChanged, and shell will call setSearchQuery back with a new query,
246− // but it will get ignored.
247− setSearchQuery(QString::fromStdString(g_variant_get_string(hints.at("query"), nullptr)));
248− }
249− break;
250− default:
251− qWarning() << "Unhandled activation response:" << type;
252− }
253−}
254−
255−void Scope::onPreviewReady(unity::dash::LocalResult const& /* result */, unity::dash::Preview::Ptr const& preview)
256−{
257− auto prv = Preview::newFromUnityPreview(preview);
258− // is this the best solution? QML may need to keep more than one preview instance around, so we can't own it.
259− // passing it by value is not possible.
260− QQmlEngine::setObjectOwnership(prv, QQmlEngine::JavaScriptOwnership);
261− Q_EMIT previewReady(prv);
262−}
263−
264−void Scope::fallbackActivate(const QString& uri)
265−{
266− /* Tries various methods to trigger a sensible action for the given 'uri'.
267− If it has no understanding of the given scheme it falls back on asking
268− Qt to open the uri.
269− */
270− QUrl url(uri);
271− if (url.scheme() == "file") {
272− /* Override the files place's default URI handler: we want the file
273− manager to handle opening folders, not the dash.
274−
275− Ref: https://bugs.launchpad.net/upicek/+bug/689667
276− */
277− QDesktopServices::openUrl(url);
278− return;
279− }
280− if (url.scheme() == "application") {
281− // get the full path to the desktop file
282− QString path(url.path().isEmpty() ? url.authority() : url.path());
283− if (path.startsWith("/")) {
284− Q_EMIT activateApplication(path);
285− } else {
286− // TODO: use the new desktop file finder/parser when it's ready
287− gchar* full_path = nullptr;
288− GKeyFile* key_file = g_key_file_new();
289− QString apps_path = "applications/" + path;
290− if (g_key_file_load_from_data_dirs(key_file, apps_path.toLocal8Bit().constData(), &full_path,
291− G_KEY_FILE_NONE, nullptr)) {
292− path = full_path;
293− Q_EMIT activateApplication(path);
294− } else {
295− qWarning() << "Unable to activate " << path;
296− }
297− g_key_file_free(key_file);
298− g_free(full_path);
299− }
300− return;
301− }
302−
303− qDebug() << "Trying to open" << uri;
304−
305− /* Try our luck */
306− QDesktopServices::openUrl(uri); //url?
307−}
308−
309−void Scope::setUnityScope(const unity::dash::Scope::Ptr& scope)
310−{
311− m_unityScope = scope;
312−
313− m_categories->setUnityScope(m_unityScope);
314− m_filters.reset(new Filters(m_unityScope->filters, this));
315−
316− m_unityScope->form_factor = m_formFactor.toStdString();
317− /* Property change signals */
318− m_unityScope->id.changed.connect(sigc::mem_fun(this, &Scope::idChanged));
319− m_unityScope->name.changed.connect(sigc::mem_fun(this, &Scope::nameChanged));
320− m_unityScope->icon_hint.changed.connect(sigc::mem_fun(this, &Scope::iconHintChanged));
321− m_unityScope->description.changed.connect(sigc::mem_fun(this, &Scope::descriptionChanged));
322− m_unityScope->search_hint.changed.connect(sigc::mem_fun(this, &Scope::searchHintChanged));
323− m_unityScope->visible.changed.connect(sigc::mem_fun(this, &Scope::visibleChanged));
324− m_unityScope->shortcut.changed.connect(sigc::mem_fun(this, &Scope::shortcutChanged));
325− m_unityScope->connected.changed.connect(sigc::mem_fun(this, &Scope::connectedChanged));
326− m_unityScope->results_dirty.changed.connect(sigc::mem_fun(this, &Scope::resultsDirtyToggled));
327−
328− /* FIXME: signal should be forwarded instead of calling the handler directly */
329− m_unityScope->activated.connect(sigc::mem_fun(this, &Scope::onActivated));
330−
331− m_unityScope->preview_ready.connect(sigc::mem_fun(this, &Scope::onPreviewReady));
332−
333− /* Synchronize local states with m_unityScope right now and whenever
334− m_unityScope becomes connected */
335− /* FIXME: should emit change notification signals for all properties */
336− connect(this, SIGNAL(connectedChanged(bool)), SLOT(synchronizeStates()));
337− synchronizeStates();
338−}
339−
340−unity::dash::Scope::Ptr Scope::unityScope() const
341−{
342− return m_unityScope;
343−}
344−
345−void Scope::synchronizeStates()
346−{
347− using namespace std::placeholders;
348−
349− if (connected()) {
350− /* Forward local states to m_unityScope */
351− if (!m_searchQuery.isNull()) {
352− m_cancellable.Renew();
353− m_unityScope->Search(m_searchQuery.toStdString(), std::bind(&Scope::onSearchFinished, this, _1, _2, _3), m_cancellable);
354− if (!m_searchInProgress) {
355− m_searchInProgress = true;
356− Q_EMIT searchInProgressChanged();
357− }
358− }
359− }
360−}
361−
362−void Scope::scopeIsActiveChanged()
363−{
364− if (!isActive() || !m_unityScope || !m_unityScope->results_dirty()) return;
365−
366− // force new search
367− synchronizeStates();
368−}
369−
370−void Scope::resultsDirtyToggled(bool results_dirty)
371−{
372− if (!results_dirty || !isActive()) return;
373−
374− // force new search
375− synchronizeStates();
376−}
377−
378−void Scope::onSearchFinished(std::string const& /* query */, unity::glib::HintsMap const& hints, unity::glib::Error const& err)
379−{
380− QString hint;
381−
382− GError* error = const_cast<unity::glib::Error&>(err);
383−
384− if (!err || !g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
385− if (m_searchInProgress) {
386− m_searchInProgress = false;
387− Q_EMIT searchInProgressChanged();
388− }
389− } else {
390− // no need to check the results hint, we're still searching
391− return;
392− }
393−
394− if (!m_unityScope->results()->count()) {
395− unity::glib::HintsMap::const_iterator it = hints.find("no-results-hint");
396− if (it != hints.end()) {
397− hint = QString::fromStdString(it->second.GetString());
398− } else {
399− hint = QString::fromUtf8(dgettext("unity", "Sorry, there is nothing that matches your search."));
400− }
401− }
402−
403− setNoResultsHint(hint);
404−}
plugins/Unity/scope.hdeleted−153
@@ -1,153 +0,0 @@
1−/*
2− * Copyright (C) 2011 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#ifndef SCOPE_H
21−#define SCOPE_H
22−
23−// Qt
24−#include <QObject>
25−#include <QString>
26−#include <QMetaType>
27−
28−// libunity-core
29−#include <UnityCore/Scope.h>
30−#include <UnityCore/Results.h>
31−#include <UnityCore/GLibWrapper.h>
32−
33−#include "categories.h"
34−#include "filters.h"
35−
36−class Preview;
37−
38−class Scope : public QObject
39−{
40− Q_OBJECT
41−
42− Q_PROPERTY(QString id READ id NOTIFY idChanged)
43− Q_PROPERTY(QString name READ name NOTIFY nameChanged)
44− Q_PROPERTY(QString iconHint READ iconHint NOTIFY iconHintChanged)
45− Q_PROPERTY(QString description READ description NOTIFY descriptionChanged)
46− Q_PROPERTY(QString searchHint READ searchHint NOTIFY searchHintChanged)
47− Q_PROPERTY(bool searchInProgress READ searchInProgress NOTIFY searchInProgressChanged)
48− Q_PROPERTY(bool visible READ visible NOTIFY visibleChanged)
49− Q_PROPERTY(QString shortcut READ shortcut NOTIFY shortcutChanged)
50− Q_PROPERTY(bool connected READ connected NOTIFY connectedChanged)
51− Q_PROPERTY(Categories* categories READ categories NOTIFY categoriesChanged)
52− Q_PROPERTY(Filters* filters READ filters NOTIFY filtersChanged)
53−
54− Q_PROPERTY(QString searchQuery READ searchQuery WRITE setSearchQuery NOTIFY searchQueryChanged)
55− Q_PROPERTY(QString noResultsHint READ noResultsHint WRITE setNoResultsHint NOTIFY noResultsHintChanged)
56− Q_PROPERTY(QString formFactor READ formFactor WRITE setFormFactor NOTIFY formFactorChanged)
57− Q_PROPERTY(bool isActive READ isActive WRITE setActive NOTIFY isActiveChanged)
58−
59−public:
60− explicit Scope(QObject *parent = 0);
61−
62− /* getters */
63− QString id() const;
64− QString name() const;
65− QString iconHint() const;
66− QString description() const;
67− QString searchHint() const;
68− bool visible() const;
69− QString shortcut() const;
70− bool connected() const;
71− bool searchInProgress() const;
72− Categories* categories() const;
73− Filters* filters() const;
74− QString searchQuery() const;
75− QString noResultsHint() const;
76− QString formFactor() const;
77− bool isActive() const;
78−
79− /* setters */
80− void setSearchQuery(const QString& search_query);
81− void setNoResultsHint(const QString& hint);
82− void setFormFactor(const QString& form_factor);
83− void setActive(const bool);
84−
85− Q_INVOKABLE void activate(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
86− const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
87− const QVariant &comment, const QVariant &dnd_uri, const QVariant &metadata);
88− Q_INVOKABLE void preview(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
89− const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
90− const QVariant &comment, const QVariant &dnd_uri, const QVariant &metadata);
91− Q_INVOKABLE void cancelActivation();
92−
93− void setUnityScope(const unity::dash::Scope::Ptr& scope);
94− unity::dash::Scope::Ptr unityScope() const;
95−
96−Q_SIGNALS:
97− void idChanged(const std::string&);
98− void dbusNameChanged(const std::string&);
99− void dbusPathChanged(const std::string&);
100− void nameChanged(const std::string&);
101− void iconHintChanged(const std::string&);
102− void descriptionChanged(const std::string&);
103− void searchHintChanged(const std::string&);
104− void searchInProgressChanged();
105− void visibleChanged(bool);
106− void shortcutChanged(const std::string&);
107− void connectedChanged(bool);
108− void categoriesChanged();
109− void searchQueryChanged();
110− void noResultsHintChanged();
111− void formFactorChanged();
112− void isActiveChanged(bool);
113− void filtersChanged();
114−
115− // signals triggered by activate(..) or preview(..) requests.
116− void previewReady(Preview *preview);
117− void showDash();
118− void hideDash();
119− void gotoUri(const QString &uri);
120−
121− void activateApplication(const QString &desktop);
122−
123−private Q_SLOTS:
124− void synchronizeStates();
125− void scopeIsActiveChanged();
126− void onSearchFinished(std::string const &, unity::glib::HintsMap const &, unity::glib::Error const&);
127−
128−private:
129− unity::dash::LocalResult createLocalResult(const QVariant &uri, const QVariant &icon_hint,
130− const QVariant &category, const QVariant &result_type,
131− const QVariant &mimetype, const QVariant &title,
132− const QVariant &comment, const QVariant &dnd_uri,
133− const QVariant &metadata);
134− void onActivated(unity::dash::LocalResult const& result, unity::dash::ScopeHandledType type, unity::glib::HintsMap const& hints);
135− void onPreviewReady(unity::dash::LocalResult const& result, unity::dash::Preview::Ptr const& preview);
136− void fallbackActivate(const QString& uri);
137− void resultsDirtyToggled(bool);
138−
139− unity::dash::Scope::Ptr m_unityScope;
140− std::unique_ptr<Categories> m_categories;
141− std::unique_ptr<Filters> m_filters;
142− QString m_searchQuery;
143− QString m_noResultsHint;
144− QString m_formFactor;
145− bool m_isActive;
146− bool m_searchInProgress;
147− unity::glib::Cancellable m_cancellable;
148− unity::glib::Cancellable m_previewCancellable;
149−};
150−
151−Q_DECLARE_METATYPE(Scope*)
152−
153−#endif // SCOPE_H
plugins/Unity/scopes.cppdeleted−176
@@ -1,176 +0,0 @@
1−/*
2− * Copyright (C) 2011 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−// Self
21−#include "scopes.h"
22−
23−// Local
24−#include "scope.h"
25−
26−// Qt
27−#include <QDebug>
28−#include <QtCore/QStringList>
29−#include <QtGui/QKeySequence>
30−
31−Scopes::Scopes(QObject *parent)
32− : QAbstractListModel(parent)
33− , m_unityScopes(std::make_shared<unity::dash::GSettingsScopes>())
34− , m_loaded(false)
35−{
36− m_roles[Scopes::RoleScope] = "scope";
37− m_roles[Scopes::RoleId] = "id";
38− m_roles[Scopes::RoleVisible] = "visible";
39−
40− m_unityScopes->scope_added.connect(sigc::mem_fun(this, &Scopes::onScopeAdded));
41− m_unityScopes->scope_removed.connect(sigc::mem_fun(this, &Scopes::onScopeRemoved));
42− m_unityScopes->scopes_reordered.connect(sigc::mem_fun(this, &Scopes::onScopesReordered));
43− m_unityScopes->LoadScopes();
44−}
45−
46−QHash<int, QByteArray> Scopes::roleNames() const
47−{
48− return m_roles;
49−}
50−
51−int Scopes::rowCount(const QModelIndex& parent) const
52−{
53− Q_UNUSED(parent)
54−
55− return m_scopes.count();
56−}
57−
58−QVariant Scopes::data(const QModelIndex& index, int role) const
59−{
60− Q_UNUSED(role)
61−
62− if (!index.isValid()) {
63− return QVariant();
64− }
65−
66− Scope* scope = m_scopes.at(index.row());
67−
68− if (role == Scopes::RoleScope) {
69− return QVariant::fromValue(scope);
70− } else if (role == Scopes::RoleId) {
71− return QVariant::fromValue(scope->id());
72− } else if (role == Scopes::RoleVisible) {
73− return QVariant::fromValue(scope->visible());
74− } else {
75− return QVariant();
76− }
77−}
78−
79−QVariant Scopes::get(int row) const
80−{
81− return data(QAbstractListModel::index(row), 0);
82−}
83−
84−QVariant Scopes::get(const QString& scope_id) const
85−{
86− Q_FOREACH(Scope* scope, m_scopes) {
87− if (scope->id() == scope_id) {
88− return QVariant::fromValue(scope);
89− }
90− }
91−
92− return QVariant();
93−}
94−
95−bool Scopes::loaded() const
96−{
97− return m_loaded;
98−}
99−
100−void Scopes::onScopeAdded(const unity::dash::Scope::Ptr& scope, int /*position*/)
101−{
102− int index = m_scopes.count();
103− beginInsertRows(QModelIndex(), index, index);
104− addUnityScope(scope);
105− endInsertRows();
106−
107− // FIXME: do only once after all loaded?
108− m_loaded = true;
109− Q_EMIT loadedChanged(m_loaded);
110−}
111−
112−void Scopes::onScopesLoaded()
113−{
114−}
115−
116−void Scopes::onScopeRemoved(const unity::dash::Scope::Ptr& scope)
117−{
118− auto id = QString::fromStdString(scope->id);
119− auto index = findScopeById(id);
120− if (index >= 0) {
121− beginRemoveRows(QModelIndex(), index, index);
122− removeUnityScope(index);
123− endRemoveRows();
124−
125− Q_EMIT scopeRemoved(id, index);
126− }
127−}
128−
129−void Scopes::onScopesReordered(const unity::dash::Scopes::ScopeList& scopes)
130−{
131− // FIXME Should use beginMoveRows()/endMoveRows() to not recreate the UI for every scope.
132− beginResetModel();
133−
134− // remove existing scopes
135− for (auto i=m_scopes.count()-1; i>=0; i--) {
136− removeUnityScope(i);
137− }
138−
139− // re-create scopes
140− for (uint i=0; i<scopes.size(); i++) {
141− addUnityScope(scopes[i]);
142− }
143− endResetModel();
144−}
145−
146−void Scopes::onScopePropertyChanged()
147−{
148− QModelIndex scopeIndex = index(m_scopes.indexOf(qobject_cast<Scope*>(sender())));
149− Q_EMIT dataChanged(scopeIndex, scopeIndex);
150−}
151−
152−void Scopes::addUnityScope(const unity::dash::Scope::Ptr& unity_scope)
153−{
154− Scope* scope = new Scope(this);
155− scope->setUnityScope(unity_scope);
156− /* DOCME */
157− QObject::connect(scope, SIGNAL(visibleChanged(bool)), this, SLOT(onScopePropertyChanged()));
158− m_scopes.append(scope);
159−}
160−
161−void Scopes::removeUnityScope(int index)
162−{
163− Scope* scope = m_scopes.takeAt(index);
164−
165− delete scope;
166−}
167−
168−int Scopes::findScopeById(const QString& scope_id)
169−{
170− for (int i=0; i<m_scopes.count(); i++) {
171− if (m_scopes[i]->id() == scope_id) {
172− return i;
173− }
174− }
175− return -1;
176−}
plugins/Unity/scopes.hdeleted−94
@@ -1,94 +0,0 @@
1−/*
2− * Copyright (C) 2011 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#ifndef SCOPES_H
21−#define SCOPES_H
22−
23−// Qt
24−#include <QAbstractListModel>
25−#include <QList>
26−
27−// libunity-core
28−#include <UnityCore/Scope.h>
29−#include <UnityCore/GSettingsScopes.h>
30−
31−namespace unity
32−{
33−namespace dash
34−{
35−class Scopes;
36−}
37−}
38−
39−class Hotkey;
40−class Scope;
41−
42−class Scopes : public QAbstractListModel
43−{
44− Q_OBJECT
45−
46− Q_ENUMS(Roles)
47−
48− Q_PROPERTY(bool loaded READ loaded NOTIFY loadedChanged)
49−
50−public:
51− explicit Scopes(QObject *parent = 0);
52− ~Scopes() = default;
53−
54− enum Roles {
55− RoleScope,
56− RoleId,
57− RoleVisible
58− };
59−
60− QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
61− Q_INVOKABLE int rowCount(const QModelIndex& parent = QModelIndex()) const;
62−
63− Q_INVOKABLE QVariant get(int row) const;
64− Q_INVOKABLE QVariant get(const QString& scope_id) const;
65−
66− QHash<int, QByteArray> roleNames() const;
67−
68− bool loaded() const;
69−
70−Q_SIGNALS:
71− void activateScopeRequested(const QString& scope_id);
72− void loadedChanged(bool loaded);
73− void scopeRemoved(const QString& scope_id, int index);
74−
75−private Q_SLOTS:
76− void onScopesLoaded();
77− void onScopeAdded(const unity::dash::Scope::Ptr& scope, int position);
78− void onScopeRemoved(const unity::dash::Scope::Ptr& scope);
79− void onScopesReordered(const unity::dash::Scopes::ScopeList& scopes);
80− void onScopePropertyChanged();
81−
82−private:
83− unity::dash::GSettingsScopesReader::Ptr m_scopesReader;
84− unity::dash::Scopes::Ptr m_unityScopes;
85− QList<Scope*> m_scopes;
86− QHash<int, QByteArray> m_roles;
87− bool m_loaded;
88−
89− void addUnityScope(const unity::dash::Scope::Ptr& unity_scope);
90− void removeUnityScope(int index);
91− int findScopeById(const QString& scope_id);
92−};
93−
94−#endif // SCOPES_H
plugins/Unity/showallfilteroption.cppdeleted−60
@@ -1,60 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−// self
21−#include "showallfilteroption.h"
22−
23−#include <libintl.h>
24−
25−unsigned int ShowAllFilterOption::m_showAllCount = 0;
26−
27−ShowAllFilterOption::ShowAllFilterOption(QObject *parent) :
28− AbstractFilterOption(parent),
29− m_active(false)
30−{
31− m_id = QString("show_all::%1").arg(m_showAllCount++);
32−}
33−
34−QString ShowAllFilterOption::id() const
35−{
36− return m_id;
37−}
38−
39−QString ShowAllFilterOption::name() const
40−{
41− return QString::fromUtf8(dgettext("unity", "All"));
42−}
43−
44−QString ShowAllFilterOption::iconHint() const
45−{
46− return QString::Null();
47−}
48−
49−bool ShowAllFilterOption::active() const
50−{
51− return m_active;
52−}
53−
54−void ShowAllFilterOption::setActive(bool active)
55−{
56− if (active != m_active) {
57− m_active = active;
58− Q_EMIT activeChanged(m_active);
59− }
60−}
plugins/Unity/showallfilteroption.hdeleted−51
@@ -1,51 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#ifndef SHOWALLFILTEROPTION_H
21−#define SHOWALLFILTEROPTION_H
22−
23−// local
24−#include "abstractfilteroption.h"
25−
26−class Q_DECL_EXPORT ShowAllFilterOption : public AbstractFilterOption
27−{
28− Q_OBJECT
29−
30−public:
31− explicit ShowAllFilterOption(QObject *parent = nullptr);
32−
33− /* getters */
34− QString id() const override;
35− QString name() const override;
36− QString iconHint() const override;
37− bool active() const override;
38−
39− /* setters */
40− void setActive(bool active) override;
41−
42−private:
43− bool m_active;
44− QString m_id;
45−
46− static unsigned int m_showAllCount;
47−};
48−
49−Q_DECLARE_METATYPE(ShowAllFilterOption*)
50−
51−#endif // SHOWALLFILTEROPTION_H
plugins/Unity/signalslist.cppdeleted−39
@@ -1,39 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#include "signalslist.h"
21−
22−void SignalsList::append(const sigc::connection &c)
23−{
24− m_signals.append(c);
25−}
26−
27−void SignalsList::disconnectAll()
28−{
29− Q_FOREACH(auto sig, m_signals) {
30− sig.disconnect();
31− }
32− m_signals.clear();
33−}
34−
35−SignalsList& SignalsList::operator<<(const sigc::connection &c)
36−{
37− append(c);
38− return *this;
39−}
plugins/Unity/signalslist.hdeleted−38
@@ -1,38 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#ifndef SIGNALSLIST_H
21−#define SIGNALSLIST_H
22−
23−#include <QList>
24−#include <sigc++/sigc++.h>
25−
26−class Q_DECL_EXPORT SignalsList
27−{
28−public:
29− void append(const sigc::connection &c);
30− void disconnectAll();
31−
32− SignalsList& operator<<(const sigc::connection &c);
33−
34−private:
35− QList<sigc::connection> m_signals;
36−};
37−
38−#endif // SIGNALSLIST_H
plugins/Unity/socialpreview.cppdeleted−87
@@ -1,87 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#include "socialpreview.h"
21−#include "socialpreviewcomment.h"
22−#include "iconutils.h"
23−
24−#include <QDebug>
25−
26−SocialPreview::SocialPreview(QObject *parent):
27− Preview(parent),
28− m_unitySocialPreview(nullptr)
29−{
30−}
31−
32−QString SocialPreview::sender() const
33−{
34− if (m_unitySocialPreview) {
35− return QString::fromStdString(m_unitySocialPreview->sender());
36− } else {
37− qWarning() << "Preview not set";
38− }
39− return QString();
40−}
41−
42−QString SocialPreview::content() const
43−{
44− if (m_unitySocialPreview) {
45− return QString::fromStdString(m_unitySocialPreview->content());
46− } else {
47− qWarning() << "Preview not set";
48− }
49− return QString();
50−}
51−
52−QString SocialPreview::avatar() const
53−{
54− if (m_unitySocialPreview) {
55− auto giconString = g_icon_to_string(m_unitySocialPreview->avatar());
56− QString result(gIconToDeclarativeImageProviderString(QString::fromUtf8(giconString)));
57− g_free(giconString);
58− return result;
59− } else {
60− qWarning() << "Preview not set";
61− }
62− return QString();
63−}
64−
65−QVariant SocialPreview::comments()
66−{
67− return QVariant::fromValue(m_comments);
68−}
69−
70−void SocialPreview::setUnityPreview(unity::dash::Preview::Ptr unityPreview)
71−{
72− m_unitySocialPreview = std::dynamic_pointer_cast<unity::dash::SocialPreview>(unityPreview);
73− qDeleteAll(m_comments);
74− m_comments.clear();
75−
76− if (m_unitySocialPreview) {
77− for (auto unityComment: m_unitySocialPreview->GetComments()) {
78− auto comment = new SocialPreviewComment(this);
79− comment->setUnityComment(unityComment);
80− m_comments.append(comment);
81−
82− Q_EMIT previewChanged();
83− }
84− } else {
85− qWarning() << "Incorrect preview type";
86− }
87−}
plugins/Unity/socialpreview.hdeleted−63
@@ -1,63 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#ifndef SOCIALPREVIEW_H
21−#define SOCIALPREVIEW_H
22−
23−// local
24−#include "preview.h"
25−
26−// Qt
27−#include <QObject>
28−#include <QList>
29−#include <QMetaType>
30−
31−// libunity-core
32−#include <UnityCore/SocialPreview.h>
33−
34−class Q_DECL_EXPORT SocialPreview: public Preview
35−{
36− Q_OBJECT
37−
38− Q_PROPERTY(QString sender READ sender NOTIFY previewChanged)
39− Q_PROPERTY(QString content READ content NOTIFY previewChanged)
40− Q_PROPERTY(QString avatar READ avatar NOTIFY previewChanged)
41−
42−public:
43− explicit SocialPreview(QObject *parent = 0);
44−
45− QString sender() const;
46− QString content() const;
47− QString avatar() const;
48− QVariant comments();
49−
50−Q_SIGNALS:
51− void previewChanged();
52−
53−protected:
54− void setUnityPreview(unity::dash::Preview::Ptr unityPreview) override;
55−
56−private:
57− unity::dash::SocialPreview::Ptr m_unitySocialPreview;
58− QList<QObject *> m_comments;
59−};
60−
61−Q_DECLARE_METATYPE(SocialPreview *)
62−
63−#endif
plugins/Unity/socialpreviewcomment.cppdeleted−63
@@ -1,63 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−// local
21−#include "socialpreviewcomment.h"
22−
23−SocialPreviewComment::SocialPreviewComment(QObject *parent) :
24− QObject(parent)
25−{
26−}
27−
28−void SocialPreviewComment::setUnityComment(unity::dash::SocialPreview::CommentPtr unityComment)
29−{
30− m_unityComment = unityComment;
31−}
32−
33−QString SocialPreviewComment::id() const
34−{
35− if (m_unityComment) {
36− return QString::fromStdString(m_unityComment->id);
37− }
38− return QString();
39−}
40−
41−QString SocialPreviewComment::displayName() const
42−{
43− if (m_unityComment) {
44− return QString::fromStdString(m_unityComment->display_name);
45− }
46− return QString();
47−}
48−
49−QString SocialPreviewComment::content() const
50−{
51− if (m_unityComment) {
52− return QString::fromStdString(m_unityComment->content);
53− }
54− return QString();
55−}
56−
57−QString SocialPreviewComment::time() const
58−{
59− if (m_unityComment) {
60− return QString::fromStdString(m_unityComment->time);
61− }
62− return QString();
63−}
plugins/Unity/socialpreviewcomment.hdeleted−57
@@ -1,57 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#ifndef SOCIALPREVIEWCOMMENT_H
21−#define SOCIALPREVIEWCOMMENT_H
22−
23−// Qt
24−#include <QObject>
25−#include <QMetaType>
26−
27−// libunity-core
28−#include <UnityCore/SocialPreview.h>
29−
30−class Q_DECL_EXPORT SocialPreviewComment : public QObject
31−{
32− Q_OBJECT
33−
34− Q_PROPERTY(QString id READ id NOTIFY socialPreviewCommentChanged)
35− Q_PROPERTY(QString displayName READ displayName NOTIFY socialPreviewCommentChanged)
36− Q_PROPERTY(QString content READ content NOTIFY socialPreviewCommentChanged)
37− Q_PROPERTY(QString time READ time NOTIFY socialPreviewCommentChanged)
38−
39−public:
40− explicit SocialPreviewComment(QObject *parent = 0);
41− void setUnityComment(unity::dash::SocialPreview::CommentPtr unityComment);
42−
43− QString id() const;
44− QString displayName() const;
45− QString content() const;
46− QString time() const;
47−
48−Q_SIGNALS:
49− void socialPreviewCommentChanged();
50−
51−private:
52− unity::dash::SocialPreview::CommentPtr m_unityComment;
53−};
54−
55−Q_DECLARE_METATYPE(SocialPreviewComment *)
56−
57−#endif
plugins/Unity/unityoptionsmodel.cppdeleted−68
@@ -1,68 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−// self
21−#include "unityoptionsmodel.h"
22−
23−// local
24−#include "filteroption.h"
25−
26−UnityOptionsModel::UnityOptionsModel(QObject *parent,
27− const std::vector<unity::dash::FilterOption::Ptr> options,
28− sigc::signal<void, unity::dash::FilterOption::Ptr> optionAdded,
29− sigc::signal<void, unity::dash::FilterOption::Ptr> optionRemoved,
30− bool showAllOption) :
31− GenericOptionsModel(showAllOption, parent)
32−{
33− setOptions(options, optionAdded, optionRemoved);
34−}
35−
36−void UnityOptionsModel::setOptions(const std::vector<unity::dash::FilterOption::Ptr> options,
37− sigc::signal<void, unity::dash::FilterOption::Ptr> optionAdded,
38− sigc::signal<void, unity::dash::FilterOption::Ptr> optionRemoved)
39−{
40− for (unsigned int i=0; i<options.size(); i++)
41− {
42− addOption(new FilterOption(options[i], this));
43− }
44− optionAdded.connect(sigc::mem_fun(this, &UnityOptionsModel::onOptionAdded));
45− optionRemoved.connect(sigc::mem_fun(this, &UnityOptionsModel::onOptionRemoved));
46−}
47−
48−void UnityOptionsModel::onOptionAdded(unity::dash::FilterOption::Ptr option)
49−{
50− int index = m_options.count();
51− if (index >= 0)
52− {
53− beginInsertRows(QModelIndex(), index, index);
54− addOption(new FilterOption(option, this));
55− endInsertRows();
56− }
57−}
58−
59−void UnityOptionsModel::onOptionRemoved(unity::dash::FilterOption::Ptr option)
60−{
61− auto index = indexOf(QString::fromStdString(option->id));
62− if (index >= 0)
63− {
64− beginRemoveRows(QModelIndex(), index, index);
65− removeOption(index);
66− endRemoveRows();
67− }
68−}
plugins/Unity/unityoptionsmodel.hdeleted−50
@@ -1,50 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#ifndef UNITYOPTIONSMODEL_H
21−#define UNITYOPTIONSMODEL_H
22−
23−#include "genericoptionsmodel.h"
24−
25−// libunity-core
26−#include <UnityCore/Filter.h>
27−
28−#include <sigc++/signal.h>
29−
30−class UnityOptionsModel : public GenericOptionsModel
31−{
32− Q_OBJECT
33−
34−public:
35− UnityOptionsModel(QObject *parent,
36− const std::vector<unity::dash::FilterOption::Ptr> options,
37− sigc::signal<void, unity::dash::FilterOption::Ptr> optionAdded,
38− sigc::signal<void, unity::dash::FilterOption::Ptr> optionRemoved,
39− bool showAllOption);
40−
41−private:
42− void setOptions(const std::vector<unity::dash::FilterOption::Ptr> options,
43− sigc::signal<void, unity::dash::FilterOption::Ptr> optionAdded,
44− sigc::signal<void, unity::dash::FilterOption::Ptr> optionRemoved);
45−
46− void onOptionAdded(unity::dash::FilterOption::Ptr option);
47− void onOptionRemoved(unity::dash::FilterOption::Ptr option);
48−};
49−
50−#endif // UNITYOPTIONSMODEL_H
plugins/Unity/variantutils.cppdeleted−51
@@ -1,51 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#include <deelistmodel.h>
21−#include "variantutils.h"
22−
23−unity::glib::HintsMap convertToHintsMap(const QHash<QString, QVariant> &val)
24−{
25− unity::glib::HintsMap hintsMap;
26− QHash<QString, QVariant>::const_iterator it = val.constBegin();
27− while (it != val.constEnd()) {
28− hintsMap[it.key().toStdString()] = DeeListModel::DataFromVariant(it.value());
29− ++it;
30− }
31− return hintsMap;
32−}
33−
34−unity::glib::HintsMap convertToHintsMap(const QVariant &var)
35−{
36− if (var.type() == QVariant::Hash) {
37− unity::glib::HintsMap hintsMap;
38− const auto hash = var.toHash();
39− return convertToHintsMap(hash);
40− }
41− return unity::glib::HintsMap();
42−}
43−
44−QVariantHash convertToQVariantHash(const unity::glib::HintsMap& var)
45−{
46− QVariantHash hash;
47− for (auto hint: var) {
48− hash.insert(QString::fromStdString(hint.first), DeeListModel::VariantForData(hint.second));
49− }
50− return hash;
51−}
plugins/Unity/variantutils.hdeleted−33
@@ -1,33 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; version 3.
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−#ifndef VARIANTUTILS_H
21−#define VARIANTUTILS_H
22−
23−#include <glib.h>
24−#include <QVariant>
25−
26−// libunity-core
27−#include <UnityCore/Variant.h>
28−
29−unity::glib::HintsMap convertToHintsMap(const QHash<QString, QVariant> &val);
30−unity::glib::HintsMap convertToHintsMap(const QVariant &var);
31−QVariantHash convertToQVariantHash(const unity::glib::HintsMap& var);
32−
33−#endif
plugins/Utils/CMakeLists.txt+1−2
@@ -12,12 +12,11 @@ include_directories(
12
12
13set(QMLPLUGIN_SRC
13set(QMLPLUGIN_SRC
14 albumartprovider.cpp
14 albumartprovider.cpp
15− applicationpaths.h
15+ bottombarvisibilitycommunicatorshell.cpp
16 mediaartcache.cpp
16 mediaartcache.cpp
17 qlimitproxymodelqml.cpp
17 qlimitproxymodelqml.cpp
18 qsortfilterproxymodelqml.cpp
18 qsortfilterproxymodelqml.cpp
19 timeformatter.cpp
19 timeformatter.cpp
20− ubuntuwindow.cpp
21 unitymenumodelpaths.cpp
20 unitymenumodelpaths.cpp
22 plugin.cpp
21 plugin.cpp
23 )
22 )
plugins/Utils/albumartprovider.cpp+10−7
@@ -32,6 +32,7 @@
32#include <QByteArray>
32#include <QByteArray>
33#include <QImage>
33#include <QImage>
34#include <QUrl>
34#include <QUrl>
35+#include <QUrlQuery>
35
36
36using namespace std;
37using namespace std;
37
38
@@ -65,6 +66,9 @@ AlbumArtProvider::~AlbumArtProvider()
65std::string AlbumArtProvider::get_lastfm_url(const albuminfo &ai) {
66std::string AlbumArtProvider::get_lastfm_url(const albuminfo &ai) {
66 QString artist = QString::fromStdString(ai.artist);
67 QString artist = QString::fromStdString(ai.artist);
67 QString album = QString::fromStdString(ai.album);
68 QString album = QString::fromStdString(ai.album);
69+ // audioscrobbler wants it without any / (as it would break the URL)
70+ artist.remove('/');
71+ album.remove('/');
68
72
69 /// @todo: this is the old API which will probably get axed at some point in the future
73 /// @todo: this is the old API which will probably get axed at some point in the future
70 /// The new 2.0 API requires an API key, but supports JSON output, etc, so switching
74 /// The new 2.0 API requires an API key, but supports JSON output, etc, so switching
@@ -200,21 +204,20 @@ std::string AlbumArtProvider::get_image(const std::string &artist, const std::st
200QImage AlbumArtProvider::requestImage(const QString &id, QSize *realSize, const QSize &requestedSize) {
204QImage AlbumArtProvider::requestImage(const QString &id, QSize *realSize, const QSize &requestedSize) {
201 Q_UNUSED(requestedSize)
205 Q_UNUSED(requestedSize)
202
206
203− const QStringList parts = id.split("/");
207+ QUrlQuery query(id);
204− if (parts.size() != 2) {
208+ if (!query.hasQueryItem(QStringLiteral("artist")) || !query.hasQueryItem(QStringLiteral("album"))) {
205 qWarning() << "Invalid albumart uri:" << id;
209 qWarning() << "Invalid albumart uri:" << id;
206 return QImage(QString::fromStdString(DEFAULT_ALBUM_ART));
210 return QImage(QString::fromStdString(DEFAULT_ALBUM_ART));
207 }
211 }
208− const std::string artist = QUrl::fromPercentEncoding(parts[0].toUtf8()).toStdString();
212+ const QString artist = query.queryItemValue(QStringLiteral("artist"), QUrl::FullyEncoded);
209− const std::string album = QUrl::fromPercentEncoding(parts[1].toUtf8()).toStdString();
213+ const QString album = query.queryItemValue(QStringLiteral("album"), QUrl::FullyEncoded);
210
214
211 std::string tgt_path;
215 std::string tgt_path;
212 try {
216 try {
213− tgt_path = get_image(artist, album);
217+ tgt_path = get_image(artist.toStdString(), album.toStdString());
214 if(!tgt_path.empty()) {
218 if(!tgt_path.empty()) {
215− QString tgt(tgt_path.c_str());
216 QImage image;
219 QImage image;
217− image.load(tgt);
220+ image.load(QString::fromStdString(tgt_path));
218 // FIXME: Rescale to requested size preserving aspect.
221 // FIXME: Rescale to requested size preserving aspect.
219 *realSize = image.size();
222 *realSize = image.size();
220 return image;
223 return image;
plugins/Utils/applicationpaths.hdeleted−38
@@ -1,38 +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− * Authored by: Nick Dedekind <nick.dedekind@canonical.com>
17− */
18−
19−
20−#ifndef APPLICATION_PATHS_H
21−#define APPLICATION_PATHS_H
22−
23−#include <QObject>
24−#include "paths.h"
25−
26−class ApplicationPaths : public QObject
27−{
28− Q_OBJECT
29−public:
30− Q_INVOKABLE bool isRunningInstalled() const { return ::isRunningInstalled(); }
31− Q_INVOKABLE QString shellAppDirectory() const { return ::shellAppDirectory(); }
32− Q_INVOKABLE QStringList overrideImportPaths() const { return ::overrideImportPaths(); }
33− Q_INVOKABLE QStringList fallbackImportPaths() const { return ::fallbackImportPaths(); }
34− Q_INVOKABLE QStringList shellDataDirs() const { return ::shellDataDirs(); }
35− Q_INVOKABLE QString sourceDirectory() const { return ::sourceDirectory(); }
36−};
37−
38−#endif // APPLICATION_PATHS_H
plugins/Unity/bottombarvisibilitycommunicatorshell.cpp → plugins/Utils/bottombarvisibilitycommunicatorshell.cpprenamed

The content is the same.

plugins/Unity/bottombarvisibilitycommunicatorshell.h → plugins/Utils/bottombarvisibilitycommunicatorshell.hrenamed

The content is the same.

plugins/Utils/plugin.cpp+11−9
@@ -18,6 +18,8 @@
18
18
19// Qt
19// Qt
20#include <QtQml/qqml.h>
20#include <QtQml/qqml.h>
21+#include <QDBusConnection>
22+#include <QQmlContext>
21#include <QtQuick/QQuickWindow>
23#include <QtQuick/QQuickWindow>
22#include <QDebug>
24#include <QDebug>
23// self
25// self
@@ -25,18 +27,14 @@
25
27
26// local
28// local
27#include "albumartprovider.h"
29#include "albumartprovider.h"
28−#include "applicationpaths.h"
30+#include "bottombarvisibilitycommunicatorshell.h"
29#include "qlimitproxymodelqml.h"
31#include "qlimitproxymodelqml.h"
30#include "qsortfilterproxymodelqml.h"
32#include "qsortfilterproxymodelqml.h"
31#include "timeformatter.h"
33#include "timeformatter.h"
32−#include "ubuntuwindow.h"
33#include "unitymenumodelpaths.h"
34#include "unitymenumodelpaths.h"
34
35
35−static QObject* applicationsPathsSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
36+static const char* BOTTOM_BAR_VISIBILITY_COMMUNICATOR_DBUS_PATH = "/BottomBarVisibilityCommunicator";
36− Q_UNUSED(engine);
37+static const char* DBUS_SERVICE = "com.canonical.Shell.BottomBarVisibilityCommunicator";
37− Q_UNUSED(scriptEngine);
38− return new ApplicationPaths;
39−}
40
38
41void UtilsPlugin::registerTypes(const char *uri)
39void UtilsPlugin::registerTypes(const char *uri)
42{
40{
@@ -45,10 +43,9 @@ void UtilsPlugin::registerTypes(const char *uri)
45 qmlRegisterType<QLimitProxyModelQML>(uri, 0, 1, "LimitProxyModel");
43 qmlRegisterType<QLimitProxyModelQML>(uri, 0, 1, "LimitProxyModel");
46 qmlRegisterType<QSortFilterProxyModelQML>(uri, 0, 1, "SortFilterProxyModel");
44 qmlRegisterType<QSortFilterProxyModelQML>(uri, 0, 1, "SortFilterProxyModel");
47 qmlRegisterType<UnityMenuModelPaths>(uri, 0, 1, "UnityMenuModelPaths");
45 qmlRegisterType<UnityMenuModelPaths>(uri, 0, 1, "UnityMenuModelPaths");
48− qmlRegisterExtendedType<QQuickWindow, UbuntuWindow>(uri, 0, 1, "Window");
49− qmlRegisterSingletonType<ApplicationPaths>(uri, 0, 1, "ApplicationPaths", applicationsPathsSingleton);
50 qmlRegisterType<TimeFormatter>(uri, 0, 1, "TimeFormatter");
46 qmlRegisterType<TimeFormatter>(uri, 0, 1, "TimeFormatter");
51 qmlRegisterType<GDateTimeFormatter>(uri, 0, 1, "GDateTimeFormatter");
47 qmlRegisterType<GDateTimeFormatter>(uri, 0, 1, "GDateTimeFormatter");
48+ qmlRegisterUncreatableType<BottomBarVisibilityCommunicatorShell>(uri, 0, 1, "BottomBarVisibilityCommunicatorShell", "Can't create BottomBarVisibilityCommunicatorShell");
52}
49}
53
50
54void UtilsPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
51void UtilsPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
@@ -67,4 +64,9 @@ void UtilsPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
67 {
64 {
68 qWarning() << "Failed to register image provider for albumart (unknown error)";
65 qWarning() << "Failed to register image provider for albumart (unknown error)";
69 }
66 }
67+
68+ QDBusConnection::sessionBus().registerService(DBUS_SERVICE);
69+ BottomBarVisibilityCommunicatorShell *bottomBarVisibilityCommunicator = &BottomBarVisibilityCommunicatorShell::instance();
70+ QDBusConnection::sessionBus().registerObject(BOTTOM_BAR_VISIBILITY_COMMUNICATOR_DBUS_PATH, bottomBarVisibilityCommunicator, QDBusConnection::ExportAllContents);
71+ engine->rootContext()->setContextProperty("bottomBarVisibilityCommunicatorShell", bottomBarVisibilityCommunicator);
70}
72}
plugins/Utils/ubuntuwindow.cppdeleted−36
@@ -1,36 +0,0 @@
1−/*
2− * Copyright (C) 2012 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 "ubuntuwindow.h"
18−#include <QDebug>
19−
20−
21−UbuntuWindow::UbuntuWindow(QObject *parent)
22− : QObject(parent),
23− m_window(static_cast<QQuickWindow*>(parent))
24−{
25−}
26−
27−int UbuntuWindow::ubuntuSurfaceRole() const
28−{
29− return m_window->property("UbuntuSurfaceRole").toInt();
30−}
31−
32−void UbuntuWindow::setUbuntuSurfaceRole(int ubuntuSurfaceRole)
33−{
34− qDebug() << "setUbuntuSurfaceRole" << ubuntuSurfaceRole;
35− m_window->setProperty("UbuntuSurfaceRole", ubuntuSurfaceRole);
36−}
plugins/Utils/ubuntuwindow.hdeleted−42
@@ -1,42 +0,0 @@
1−/*
2− * Copyright (C) 2012 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 UBUNTUWINDOW_H
18−#define UBUNTUWINDOW_H
19−
20−#include <QtCore/QObject>
21−#include <QtQuick/QQuickWindow>
22−
23−class UbuntuWindow : public QObject
24−{
25− Q_OBJECT
26−
27− Q_PROPERTY(int ubuntuSurfaceRole READ ubuntuSurfaceRole WRITE setUbuntuSurfaceRole NOTIFY ubuntuSurfaceRoleChanged)
28−
29−public:
30− explicit UbuntuWindow(QObject *parent = 0);
31−
32− int ubuntuSurfaceRole() const;
33− void setUbuntuSurfaceRole(int ubuntuSurfaceRole);
34−
35−Q_SIGNALS:
36− void ubuntuSurfaceRoleChanged(int);
37−
38−private:
39− QQuickWindow* m_window;
40−};
41−
42−#endif // UBUNTUWINDOW_H
po/ar.po+50−126
@@ -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-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-06-26 23:26+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,166 +16,103 @@ 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-10-13 05:43+0000\n"
19+"X-Launchpad-Export-Date: 2013-12-06 06:30+0000\n"
20−"X-Generator: Launchpad (build 16799)\n"
20+"X-Generator: Launchpad (build 16863)\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:149
22+#: Components/EdgeDemoOverlay.qml:151
91msgid "Skip intro"
23msgid "Skip intro"
92−msgstr ""
24+msgstr "تخطي المقدمة"
93
25
94#: Components/EdgeDemo.qml:112
26#: Components/EdgeDemo.qml:112
95msgid "Right edge"
27msgid "Right edge"
96−msgstr ""
28+msgstr "الحافة اليمنى"
97
29
98#: Components/EdgeDemo.qml:113
30#: Components/EdgeDemo.qml:113
99msgid "Try swiping from the right edge to unlock the phone"
31msgid "Try swiping from the right edge to unlock the phone"
100−msgstr ""
32+msgstr "اسحب اصبعك من الحافة اليمنى لفتح قفل الهاتف"
101
33
102#: Components/EdgeDemo.qml:144
34#: Components/EdgeDemo.qml:144
103msgid "Top edge"
35msgid "Top edge"
104−msgstr ""
36+msgstr "الحافة العلوية"
105
37
106#: Components/EdgeDemo.qml:145
38#: Components/EdgeDemo.qml:145
107msgid "Try swiping from the top edge to access the indicators"
39msgid "Try swiping from the top edge to access the indicators"
108−msgstr ""
40+msgstr "اسحب اصبعك من الحافة العلوية للوصول إلى المؤشرات"
109
41
110#: Components/EdgeDemo.qml:170
42#: Components/EdgeDemo.qml:170
111msgid "Close"
43msgid "Close"
112−msgstr ""
44+msgstr "أغلق"
113
45
114#: Components/EdgeDemo.qml:171
46#: Components/EdgeDemo.qml:171
115msgid "Swipe up again to close the settings screen"
47msgid "Swipe up again to close the settings screen"
116−msgstr ""
48+msgstr "اسحب اصعبك لأعلى مرة أخرى لغلق شاشة الإعدادات"
117
49
118#: Components/EdgeDemo.qml:198
50#: Components/EdgeDemo.qml:198
119msgid "Left edge"
51msgid "Left edge"
120−msgstr ""
52+msgstr "الحافة اليسرى"
121
53
122#: Components/EdgeDemo.qml:199
54#: Components/EdgeDemo.qml:199
123msgid "Swipe from the left to reveal the launcher for quick access to apps"
55msgid "Swipe from the left to reveal the launcher for quick access to apps"
124msgstr ""
56msgstr ""
57+"اسحب أصبعك من الحافة اليسرى لإظهار شريط يونتي للوصول السريع للتطبيقات"
125
58
126#: Components/EdgeDemo.qml:226
59#: Components/EdgeDemo.qml:226
127msgid "Well done"
60msgid "Well done"
128−msgstr ""
61+msgstr "أحسنت!"
129
62
130#: Components/EdgeDemo.qml:227
63#: Components/EdgeDemo.qml:227
131msgid ""
64msgid ""
132"You have now mastered the edge gestures and can start using the "
65"You have now mastered the edge gestures and can start using the "
133"phone<br><br>Tap anywhere to start"
66"phone<br><br>Tap anywhere to start"
134msgstr ""
67msgstr ""
68+"لقد أتقنت الآن إيماءات الحواف ويمكنك البدء باستخدام الهاتف<br><br>انقر في أي "
69+"مكان للبدء"
135
70
136−#: Components/PageHeader.qml:341
71+#: Components/PageHeader.qml:364
137msgid "Recent searches"
72msgid "Recent searches"
138msgstr "عمليات البحث الأخيرة"
73msgstr "عمليات البحث الأخيرة"
139
74
140−#. TRANSLATORS: Number of persons who rated this app
75+#: Dash/Apps/AppPreview.qml:135
76+msgid "Rate this"
77+msgstr "قيّم ذلك"
78+
141#. TRANSLATORS: Number of persons who rated this app/video/whatever
79#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
80+#: Dash/Previews/Header.qml:93
143#, qt-format
81#, qt-format
144msgid "(%1)"
82msgid "(%1)"
145−msgstr ""
83+msgstr "(%1)"
146
84
147−#. TRANSLATORS: Number of persons who wrote reviews for this app
148#. 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
149−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
86+#: Dash/Previews/Header.qml:105
150#, qt-format
87#, qt-format
151msgid "%1 review"
88msgid "%1 review"
152msgid_plural "%1 reviews"
89msgid_plural "%1 reviews"
153−msgstr[0] ""
90+msgstr[0] "لا تعليقات (%1)"
154−msgstr[1] ""
91+msgstr[1] "تعليق واحد (%1)"
155−
92+msgstr[2] "تعليقان (%1)"
156−#: Dash/Apps/AppPreview.qml:126
93+msgstr[3] "%1 تعليقات"
157−msgid "Rate this"
94+msgstr[4] "%1 تعليقا"
158−msgstr ""
95+msgstr[5] "%1 تعليق"
159
96
160#: Dash/Previews/Reviews.qml:74
97#: Dash/Previews/Reviews.qml:74
161msgid "Add a review"
98msgid "Add a review"
162−msgstr ""
99+msgstr "أضف تعليق"
163
100
164#: Dash/Previews/Reviews.qml:86
101#: Dash/Previews/Reviews.qml:86
165msgid "Review"
102msgid "Review"
166−msgstr ""
103+msgstr "التعليق"
167
104
168#: Dash/Previews/Reviews.qml:121
105#: Dash/Previews/Reviews.qml:121
169msgid "Send"
106msgid "Send"
170−msgstr ""
107+msgstr "أرسل"
171
108
172#: Dash/Previews/Reviews.qml:139
109#: Dash/Previews/Reviews.qml:139
173msgid "Comments:"
110msgid "Comments:"
174−msgstr ""
111+msgstr "التعليقات:"
175
112
176−#: Greeter/Lockscreen.qml:142
113+#: Greeter/Lockscreen.qml:149
177msgid "Emergency Call"
114msgid "Emergency Call"
178−msgstr ""
115+msgstr "مكالمة طوارئ"
179
116
180#: Greeter/PassphraseLockscreen.qml:59
117#: Greeter/PassphraseLockscreen.qml:59
181#, qt-format
118#, qt-format
@@ -206,37 +143,24 @@ msgstr "تكلم الآن..."
206msgid "Speaking..."
143msgid "Speaking..."
207msgstr "تتكلم الآن..."
144msgstr "تتكلم الآن..."
208
145
146+#: Notifications/NotificationMenuItemFactory.qml:89
147+msgid "Show password"
148+msgstr "عرض كلمة السر"
149+
209#: Panel/SearchIndicator.qml:27
150#: Panel/SearchIndicator.qml:27
210msgid "Search"
151msgid "Search"
211msgstr "ابحث"
152msgstr "ابحث"
212
153
213−#: plugins/Unity/scope.cpp:398
154+#: plugins/Unity/Launcher/launcheritem.cpp:43
214−msgid "Sorry, there is nothing that matches your search."
155+#: plugins/Unity/Launcher/launcheritem.cpp:73
215−msgstr "عذراً، لا يوجد ما يطابق بحثك."
156+msgid "Lock to Launcher"
157+msgstr "ثبّت في الشريط"
216
158
217−#: plugins/Unity/showallfilteroption.cpp:41
159+#: plugins/Unity/Launcher/launcheritem.cpp:73
218−msgid "All"
160+msgid "Unlock from Launcher"
219−msgstr ""
161+msgstr "فُك التثبيت من الشريط"
220
162
221−#: Shell.qml:438
163+#: Shell.qml:439
222#, qt-format
164#, qt-format
223msgid "Please enter %1"
165msgid "Please enter %1"
224−msgstr ""
166+msgstr "من فضلك أدخِل %1"
225−
226−#~ msgid "Featured"
227−#~ msgstr "المميز"
228−
229−#~ msgid "Recent"
230−#~ msgstr "الحديث"
231−
232−#~ msgid "New Releases"
233−#~ msgstr "الإصدارات الجديدة"
234−
235−#~ msgid "Music"
236−#~ msgstr "موسيقى"
237−
238−#~ msgid "Popular Online"
239−#~ msgstr "الشائع على الإنترنت"
240−
241−#~ msgid "Videos"
242−#~ msgstr "فيديوهات"
po/ast.po+24−110
@@ -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-10-11 12:12+0200\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-10-03 14:02+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"
@@ -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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20
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−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr "Omitir la intro"
23msgstr "Omitir la intro"
92
24
@@ -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:341
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:126
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:142
109+#: Greeter/Lockscreen.qml:149
180msgid "Emergency Call"
110msgid "Emergency Call"
181msgstr "Llamada d'emerxencia"
111msgstr "Llamada d'emerxencia"
182
112
@@ -209,40 +139,24 @@ msgstr "Fala agora…"
209msgid "Speaking..."
139msgid "Speaking..."
210msgstr "Falando…"
140msgstr "Falando…"
211
141
142+#: Notifications/NotificationMenuItemFactory.qml:89
143+msgid "Show password"
144+msgstr ""
145+
212#: Panel/SearchIndicator.qml:27
146#: Panel/SearchIndicator.qml:27
213msgid "Search"
147msgid "Search"
214msgstr "Guetar"
148msgstr "Guetar"
215
149
216−#: plugins/Unity/scope.cpp:398
150+#: plugins/Unity/Launcher/launcheritem.cpp:43
217−msgid "Sorry, there is nothing that matches your search."
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
218−msgstr "Sentímoslo, nun hai res que concase cola gueta"
152+msgid "Lock to Launcher"
153+msgstr ""
219
154
220−#: plugins/Unity/showallfilteroption.cpp:41
155+#: plugins/Unity/Launcher/launcheritem.cpp:73
221−msgid "All"
156+msgid "Unlock from Launcher"
222−msgstr "Too"
157+msgstr ""
223
158
224−#: Shell.qml:438
159+#: Shell.qml:439
225#, qt-format
160#, qt-format
226msgid "Please enter %1"
161msgid "Please enter %1"
227msgstr "Introduz %1"
162msgstr "Introduz %1"
228−
229−#~ msgid "New Releases"
230−#~ msgstr "Llanzamientos nuevos"
231−
232−#~ msgid "Featured"
233−#~ msgstr "Destacaos"
234−
235−#~ msgid "Top Charting"
236−#~ msgstr "Meyor posicionaes"
237−
238−#~ msgid "Recent"
239−#~ msgstr "Recientes"
240−
241−#~ msgid "Videos"
242−#~ msgstr "Vídeos"
243−
244−#~ msgid "Music"
245−#~ msgstr "Música"
246−
247−#~ msgid "Popular Online"
248−#~ msgstr "Populares en llinia"
po/az.po+23−94
@@ -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-10-11 12:12+0200\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,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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\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:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr ""
23msgstr ""
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -205,25 +135,24 @@ msgstr "Söyləyin..."
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr "Söylənilir..."
136msgstr "Söylənilir..."
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr "Axtar"
144msgstr "Axtar"
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
214−msgstr "Bağışlayın, amma axtarışınıza heç bir nəticə uyğun gəlmir."
148+msgid "Lock to Launcher"
149+msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218msgstr ""
153msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr ""
158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "Musiqi"
227−
228−#~ msgid "Videos"
229−#~ msgstr "Videolar"
po/bg.po+23−100
@@ -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-10-11 12:12+0200\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,78 +16,10 @@ 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-10-13 05:43+0000\n"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20−"X-Generator: Launchpad (build 16799)\n"
20+"X-Generator: Launchpad (build 16856)\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 "YouTube"
89−
90−#: Components/EdgeDemoOverlay.qml:149
22+#: Components/EdgeDemoOverlay.qml:151
91msgid "Skip intro"
23msgid "Skip intro"
92msgstr ""
24msgstr ""
93
25
@@ -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:341
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:126
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:142
106+#: Greeter/Lockscreen.qml:149
177msgid "Emergency Call"
107msgid "Emergency Call"
178msgstr ""
108msgstr ""
179
109
@@ -206,31 +136,24 @@ msgstr ""
206msgid "Speaking..."
136msgid "Speaking..."
207msgstr ""
137msgstr ""
208
138
139+#: Notifications/NotificationMenuItemFactory.qml:89
140+msgid "Show password"
141+msgstr ""
142+
209#: Panel/SearchIndicator.qml:27
143#: Panel/SearchIndicator.qml:27
210msgid "Search"
144msgid "Search"
211msgstr "Търсене"
145msgstr "Търсене"
212
146
213−#: plugins/Unity/scope.cpp:398
147+#: plugins/Unity/Launcher/launcheritem.cpp:43
214−msgid "Sorry, there is nothing that matches your search."
148+#: plugins/Unity/Launcher/launcheritem.cpp:73
215−msgstr "Съжаляваме, няма нищо, което да отговаря на вашето търсене."
149+msgid "Lock to Launcher"
150+msgstr ""
216
151
217−#: plugins/Unity/showallfilteroption.cpp:41
152+#: plugins/Unity/Launcher/launcheritem.cpp:73
218−msgid "All"
153+msgid "Unlock from Launcher"
219msgstr ""
154msgstr ""
220
155
221−#: Shell.qml:438
156+#: Shell.qml:439
222#, qt-format
157#, qt-format
223msgid "Please enter %1"
158msgid "Please enter %1"
224msgstr ""
159msgstr ""
225−
226−#~ msgid "Featured"
227−#~ msgstr "Най-отличени"
228−
229−#~ msgid "Recent"
230−#~ msgstr "Най-нови"
231−
232−#~ msgid "Music"
233−#~ msgstr "Музика"
234−
235−#~ msgid "Videos"
236−#~ msgstr "Видеоклипове"
po/ca.po+23−109
@@ -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-10-11 12:12+0200\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,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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20
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−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr "Omet la introducció"
23msgstr "Omet la introducció"
92
24
@@ -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:341
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:126
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:142
111+#: Greeter/Lockscreen.qml:149
182msgid "Emergency Call"
112msgid "Emergency Call"
183msgstr "Trucada d'emergència"
113msgstr "Trucada d'emergència"
184
114
@@ -211,40 +141,24 @@ msgstr "Parleu..."
211msgid "Speaking..."
141msgid "Speaking..."
212msgstr "S'està parlant..."
142msgstr "S'està parlant..."
213
143
144+#: Notifications/NotificationMenuItemFactory.qml:89
145+msgid "Show password"
146+msgstr ""
147+
214#: Panel/SearchIndicator.qml:27
148#: Panel/SearchIndicator.qml:27
215msgid "Search"
149msgid "Search"
216msgstr "Cerca"
150msgstr "Cerca"
217
151
218−#: plugins/Unity/scope.cpp:398
152+#: plugins/Unity/Launcher/launcheritem.cpp:43
219−msgid "Sorry, there is nothing that matches your search."
153+#: plugins/Unity/Launcher/launcheritem.cpp:73
220−msgstr "No hi ha res que coincideixi amb la cerca"
154+msgid "Lock to Launcher"
155+msgstr ""
221
156
222−#: plugins/Unity/showallfilteroption.cpp:41
157+#: plugins/Unity/Launcher/launcheritem.cpp:73
223−msgid "All"
158+msgid "Unlock from Launcher"
224msgstr ""
159msgstr ""
225
160
226−#: Shell.qml:438
161+#: Shell.qml:439
227#, qt-format
162#, qt-format
228msgid "Please enter %1"
163msgid "Please enter %1"
229msgstr "Introduïu %1"
164msgstr "Introduïu %1"
230−
231−#~ msgid "Music"
232−#~ msgstr "Música"
233−
234−#~ msgid "Videos"
235−#~ msgstr "Vídeos"
236−
237−#~ msgid "Recent"
238−#~ msgstr "Recents"
239−
240−#~ msgid "Featured"
241−#~ msgstr "Destacats"
242−
243−#~ msgid "New Releases"
244−#~ msgstr "Novetats"
245−
246−#~ msgid "Top Charting"
247−#~ msgstr "El millor de les llistes"
248−
249−#~ msgid "Popular Online"
250−#~ msgstr "Popular a la xarxa"
po/cs.po+24−104
@@ -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-10-11 12:12+0200\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,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=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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20
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−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr "Přeskočit intro"
23msgstr "Přeskočit intro"
92
24
@@ -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:341
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:126
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:142
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
@@ -206,34 +136,24 @@ msgstr "Mluvte..."
206msgid "Speaking..."
136msgid "Speaking..."
207msgstr "Mluvte..."
137msgstr "Mluvte..."
208
138
139+#: Notifications/NotificationMenuItemFactory.qml:89
140+msgid "Show password"
141+msgstr ""
142+
209#: Panel/SearchIndicator.qml:27
143#: Panel/SearchIndicator.qml:27
210msgid "Search"
144msgid "Search"
211msgstr "Hledat"
145msgstr "Hledat"
212
146
213−#: plugins/Unity/scope.cpp:398
147+#: plugins/Unity/Launcher/launcheritem.cpp:43
214−msgid "Sorry, there is nothing that matches your search."
148+#: plugins/Unity/Launcher/launcheritem.cpp:73
215−msgstr "Je nám líto, ale nic neodpovídá zadání"
149+msgid "Lock to Launcher"
150+msgstr ""
216
151
217−#: plugins/Unity/showallfilteroption.cpp:41
152+#: plugins/Unity/Launcher/launcheritem.cpp:73
218−msgid "All"
153+msgid "Unlock from Launcher"
219−msgstr "Vše"
154+msgstr ""
220
155
221−#: Shell.qml:438
156+#: Shell.qml:439
222#, qt-format
157#, qt-format
223msgid "Please enter %1"
158msgid "Please enter %1"
224msgstr "Zadejte prosím %1"
159msgstr "Zadejte prosím %1"
225−
226−#~ msgid "Featured"
227−#~ msgstr "Oblíbené"
228−
229−#~ msgid "Recent"
230−#~ msgstr "Nedávné"
231−
232−#~ msgid "Videos"
233−#~ msgstr "Videa"
234−
235−#~ msgid "Music"
236−#~ msgstr "Hudba"
237−
238−#~ msgid "Popular Online"
239−#~ msgstr "Oblíbené on-line"
po/de.po+33−115
@@ -7,86 +7,18 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-10-06 10:57+0000\n"
11+"PO-Revision-Date: 2013-10-18 12:26+0000\n"
12−"Last-Translator: SaGrLand <sg@samuel-greef.de>\n"
12+"Last-Translator: Phillip Sz <Unknown>\n"
13"Language-Team: German <de@li.org>\n"
13"Language-Team: German <de@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20
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−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr "Überspringe Einführung"
23msgstr "Überspringe Einführung"
92
24
@@ -96,7 +28,7 @@ msgstr "Rechter Rand"
96
28
97#: Components/EdgeDemo.qml:113
29#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
30msgid "Try swiping from the right edge to unlock the phone"
99−msgstr ""
31+msgstr "Vom rechten Rand her wischen, um das Gerät zu entsperren"
100
32
101#: Components/EdgeDemo.qml:144
33#: Components/EdgeDemo.qml:144
102msgid "Top edge"
34msgid "Top edge"
@@ -104,7 +36,7 @@ msgstr "Oberer Rand"
104
36
105#: Components/EdgeDemo.qml:145
37#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
38msgid "Try swiping from the top edge to access the indicators"
107−msgstr ""
39+msgstr "Vom oberen Rand her wischen, um die Statusmeldungen anzuzeigen"
108
40
109#: Components/EdgeDemo.qml:170
41#: Components/EdgeDemo.qml:170
110msgid "Close"
42msgid "Close"
@@ -112,7 +44,7 @@ msgstr "Schließen"
112
44
113#: Components/EdgeDemo.qml:171
45#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
46msgid "Swipe up again to close the settings screen"
115−msgstr ""
47+msgstr "Nochmals nach oben wischen, um das Einstellungsmenü zu schließen"
116
48
117#: Components/EdgeDemo.qml:198
49#: Components/EdgeDemo.qml:198
118msgid "Left edge"
50msgid "Left edge"
@@ -121,6 +53,8 @@ msgstr "Linker Rand"
121#: Components/EdgeDemo.qml:199
53#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
54msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
55msgstr ""
56+"Von links wischen, um die Seitenleiste für den Anwendungs-Schnellzugriff "
57+"aufzurufen"
124
58
125#: Components/EdgeDemo.qml:226
59#: Components/EdgeDemo.qml:226
126msgid "Well done"
60msgid "Well done"
@@ -131,31 +65,31 @@ msgid ""
131"You have now mastered the edge gestures and can start using the "
65"You have now mastered the edge gestures and can start using the "
132"phone<br><br>Tap anywhere to start"
66"phone<br><br>Tap anywhere to start"
133msgstr ""
67msgstr ""
68+"Sie haben nun die Einführung abgeschlossen und können Ihr Gerät nun "
69+"verwenden<br><br>Antippen um zu starten"
134
70
135−#: Components/PageHeader.qml:341
71+#: Components/PageHeader.qml:364
136msgid "Recent searches"
72msgid "Recent searches"
137msgstr "Letzte Suchbegriffe"
73msgstr "Letzte Suchbegriffe"
138
74
139−#. TRANSLATORS: Number of persons who rated this app
75+#: Dash/Apps/AppPreview.qml:135
76+msgid "Rate this"
77+msgstr "Bewerten"
78+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
79#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
80+#: Dash/Previews/Header.qml:93
142#, qt-format
81#, qt-format
143msgid "(%1)"
82msgid "(%1)"
144msgstr "(%1)"
83msgstr "(%1)"
145
84
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. 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
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
86+#: Dash/Previews/Header.qml:105
149#, qt-format
87#, qt-format
150msgid "%1 review"
88msgid "%1 review"
151msgid_plural "%1 reviews"
89msgid_plural "%1 reviews"
152msgstr[0] "%1 Bewertung"
90msgstr[0] "%1 Bewertung"
153msgstr[1] "%1 Bewertungen"
91msgstr[1] "%1 Bewertungen"
154
92
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr "Bewerten"
158−
159#: Dash/Previews/Reviews.qml:74
93#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
94msgid "Add a review"
161msgstr "Bewertung hinzufügen"
95msgstr "Bewertung hinzufügen"
@@ -172,7 +106,7 @@ msgstr "Senden"
172msgid "Comments:"
106msgid "Comments:"
173msgstr "Kommentare:"
107msgstr "Kommentare:"
174
108
175−#: Greeter/Lockscreen.qml:142
109+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
110msgid "Emergency Call"
177msgstr "Notruf"
111msgstr "Notruf"
178
112
@@ -205,40 +139,24 @@ msgstr "Sprechen Sie jetzt …"
205msgid "Speaking..."
139msgid "Speaking..."
206msgstr "Sie sprechen …"
140msgstr "Sie sprechen …"
207
141
142+#: Notifications/NotificationMenuItemFactory.qml:89
143+msgid "Show password"
144+msgstr ""
145+
208#: Panel/SearchIndicator.qml:27
146#: Panel/SearchIndicator.qml:27
209msgid "Search"
147msgid "Search"
210msgstr "Suchen"
148msgstr "Suchen"
211
149
212−#: plugins/Unity/scope.cpp:398
150+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
214−msgstr "Entschuldigung, es wurden keine Treffer erzielt."
152+msgid "Lock to Launcher"
153+msgstr ""
215
154
216−#: plugins/Unity/showallfilteroption.cpp:41
155+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
156+msgid "Unlock from Launcher"
218−msgstr "Alle"
157+msgstr ""
219
158
220−#: Shell.qml:438
159+#: Shell.qml:439
221#, qt-format
160#, qt-format
222msgid "Please enter %1"
161msgid "Please enter %1"
223msgstr "Bitte geben Sie %1 ein"
162msgstr "Bitte geben Sie %1 ein"
224−
225−#~ msgid "Featured"
226−#~ msgstr "Empfehlungen"
227−
228−#~ msgid "Recent"
229−#~ msgstr "Zuletzt verwendet"
230−
231−#~ msgid "New Releases"
232−#~ msgstr "Neue Veröffentlichungen"
233−
234−#~ msgid "Top Charting"
235−#~ msgstr "Top Tabellenplatz"
236−
237−#~ msgid "Music"
238−#~ msgstr "Musik"
239−
240−#~ msgid "Popular Online"
241−#~ msgstr "Online Beliebt"
242−
243−#~ msgid "Videos"
244−#~ msgstr "Videos"
po/el.po+23−94
@@ -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-10-11 12:12+0200\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,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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\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:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr ""
23msgstr ""
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -205,25 +135,24 @@ msgstr "Μιλήστε τώρα..."
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr "Ομιλία..."
136msgstr "Ομιλία..."
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr "Αναζήτηση"
144msgstr "Αναζήτηση"
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
214−msgstr "Λυπούμαστε, δεν υπάρχει τίποτα που να ταιριάζει στην αναζήτησή σας."
148+msgid "Lock to Launcher"
149+msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218msgstr ""
153msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr ""
158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "Μουσική"
227−
228−#~ msgid "Videos"
229−#~ msgstr "Βίντεο"
po/en_AU.po+23−109
@@ -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-10-11 12:12+0200\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,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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20
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−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr "Skip intro"
23msgstr "Skip intro"
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr "Emergency Call"
107msgstr "Emergency Call"
178
108
@@ -205,40 +135,24 @@ msgstr "Speak Now..."
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr "Speaking..."
136msgstr "Speaking..."
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr "Search"
144msgstr "Search"
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
214−msgstr "Sorry, there is nothing that matches your search."
148+msgid "Lock to Launcher"
149+msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218msgstr ""
153msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr "Please enter %1"
158msgstr "Please enter %1"
224−
225−#~ msgid "Featured"
226−#~ msgstr "Featured"
227−
228−#~ msgid "Recent"
229−#~ msgstr "Recent"
230−
231−#~ msgid "New Releases"
232−#~ msgstr "New Releases"
233−
234−#~ msgid "Top Charting"
235−#~ msgstr "Top Charting"
236−
237−#~ msgid "Music"
238−#~ msgstr "Music"
239−
240−#~ msgid "Popular Online"
241−#~ msgstr "Popular Online"
242−
243−#~ msgid "Videos"
244−#~ msgstr "Videos"
po/en_GB.po+23−109
@@ -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-10-11 12:12+0200\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,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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20
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−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr ""
23msgstr ""
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -205,40 +135,24 @@ msgstr "Speak Now..."
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr "Speaking..."
136msgstr "Speaking..."
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr "Search"
144msgstr "Search"
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
214−msgstr "Sorry, there is nothing that matches your search."
148+msgid "Lock to Launcher"
149+msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218msgstr ""
153msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr "Please enter %1"
158msgstr "Please enter %1"
224−
225−#~ msgid "Featured"
226−#~ msgstr "Featured"
227−
228−#~ msgid "Recent"
229−#~ msgstr "Recent"
230−
231−#~ msgid "New Releases"
232−#~ msgstr "New Releases"
233−
234−#~ msgid "Top Charting"
235−#~ msgstr "Top Charting"
236−
237−#~ msgid "Music"
238−#~ msgstr "Music"
239−
240−#~ msgid "Popular Online"
241−#~ msgstr "Popular Online"
242−
243−#~ msgid "Videos"
244−#~ msgstr "Videos"
po/eo.po+22−87
@@ -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-10-11 12:12+0200\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,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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\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:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr ""
23msgstr ""
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -205,19 +135,24 @@ msgstr ""
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr ""
136msgstr ""
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr ""
144msgstr ""
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
214msgstr ""
149msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218msgstr ""
153msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr ""
158msgstr ""
po/es.po+25−111
@@ -7,86 +7,18 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-10-02 04:59+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"
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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20
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−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr "Omitir la introducción"
23msgstr "Omitir la introducción"
92
24
@@ -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:341
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:126
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:142
109+#: Greeter/Lockscreen.qml:149
180msgid "Emergency Call"
110msgid "Emergency Call"
181msgstr "Llamada de emergencia"
111msgstr "Llamada de emergencia"
182
112
@@ -209,40 +139,24 @@ msgstr "Hable ahora…"
209msgid "Speaking..."
139msgid "Speaking..."
210msgstr "Hablando…"
140msgstr "Hablando…"
211
141
142+#: Notifications/NotificationMenuItemFactory.qml:89
143+msgid "Show password"
144+msgstr "Mostrar contraseña"
145+
212#: Panel/SearchIndicator.qml:27
146#: Panel/SearchIndicator.qml:27
213msgid "Search"
147msgid "Search"
214msgstr "Buscar"
148msgstr "Buscar"
215
149
216−#: plugins/Unity/scope.cpp:398
150+#: plugins/Unity/Launcher/launcheritem.cpp:43
217−msgid "Sorry, there is nothing that matches your search."
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
218−msgstr "No hay nada que coincida con su búsqueda."
152+msgid "Lock to Launcher"
153+msgstr "Mantener en el lanzador"
219
154
220−#: plugins/Unity/showallfilteroption.cpp:41
155+#: plugins/Unity/Launcher/launcheritem.cpp:73
221−msgid "All"
156+msgid "Unlock from Launcher"
222−msgstr "Todo"
157+msgstr "No mantener en el lanzador"
223
158
224−#: Shell.qml:438
159+#: Shell.qml:439
225#, qt-format
160#, qt-format
226msgid "Please enter %1"
161msgid "Please enter %1"
227msgstr "Introduzca %1"
162msgstr "Introduzca %1"
228−
229−#~ msgid "Featured"
230−#~ msgstr "Destacados"
231−
232−#~ msgid "Recent"
233−#~ msgstr "Recientes"
234−
235−#~ msgid "New Releases"
236−#~ msgstr "Lanzamientos nuevos"
237−
238−#~ msgid "Top Charting"
239−#~ msgstr "Mejor posicionadas"
240−
241−#~ msgid "Music"
242−#~ msgstr "Música"
243−
244−#~ msgid "Popular Online"
245−#~ msgstr "Populares en línea"
246−
247−#~ msgid "Videos"
248−#~ msgstr "Vídeos"
po/fa.ponew file+158
@@ -0,0 +1,158 @@
1+# Persian translation for unity8
2+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
3+# This file is distributed under the same license as the unity8 package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity8\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2013-10-31 19:02+0000\n"
12+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13+"Language-Team: Persian <fa@li.org>\n"
14+"MIME-Version: 1.0\n"
15+"Content-Type: text/plain; charset=UTF-8\n"
16+"Content-Transfer-Encoding: 8bit\n"
17+"Plural-Forms: nplurals=1; plural=0;\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
20+
21+#: Components/EdgeDemoOverlay.qml:151
22+msgid "Skip intro"
23+msgstr ""
24+
25+#: Components/EdgeDemo.qml:112
26+msgid "Right edge"
27+msgstr ""
28+
29+#: Components/EdgeDemo.qml:113
30+msgid "Try swiping from the right edge to unlock the phone"
31+msgstr ""
32+
33+#: Components/EdgeDemo.qml:144
34+msgid "Top edge"
35+msgstr ""
36+
37+#: Components/EdgeDemo.qml:145
38+msgid "Try swiping from the top edge to access the indicators"
39+msgstr ""
40+
41+#: Components/EdgeDemo.qml:170
42+msgid "Close"
43+msgstr ""
44+
45+#: Components/EdgeDemo.qml:171
46+msgid "Swipe up again to close the settings screen"
47+msgstr ""
48+
49+#: Components/EdgeDemo.qml:198
50+msgid "Left edge"
51+msgstr ""
52+
53+#: Components/EdgeDemo.qml:199
54+msgid "Swipe from the left to reveal the launcher for quick access to apps"
55+msgstr ""
56+
57+#: Components/EdgeDemo.qml:226
58+msgid "Well done"
59+msgstr ""
60+
61+#: Components/EdgeDemo.qml:227
62+msgid ""
63+"You have now mastered the edge gestures and can start using the "
64+"phone<br><br>Tap anywhere to start"
65+msgstr ""
66+
67+#: Components/PageHeader.qml:364
68+msgid "Recent searches"
69+msgstr ""
70+
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
75+#. TRANSLATORS: Number of persons who rated this app/video/whatever
76+#: Dash/Previews/Header.qml:93
77+#, qt-format
78+msgid "(%1)"
79+msgstr ""
80+
81+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
82+#: Dash/Previews/Header.qml:105
83+#, qt-format
84+msgid "%1 review"
85+msgid_plural "%1 reviews"
86+msgstr[0] ""
87+msgstr[1] ""
88+
89+#: Dash/Previews/Reviews.qml:74
90+msgid "Add a review"
91+msgstr ""
92+
93+#: Dash/Previews/Reviews.qml:86
94+msgid "Review"
95+msgstr ""
96+
97+#: Dash/Previews/Reviews.qml:121
98+msgid "Send"
99+msgstr ""
100+
101+#: Dash/Previews/Reviews.qml:139
102+msgid "Comments:"
103+msgstr ""
104+
105+#: Greeter/Lockscreen.qml:149
106+msgid "Emergency Call"
107+msgstr ""
108+
109+#: Greeter/PassphraseLockscreen.qml:59
110+#, qt-format
111+msgid "Hello %1"
112+msgstr ""
113+
114+#: Greeter/PassphraseLockscreen.qml:59
115+msgid "Hello"
116+msgstr ""
117+
118+#: Hud/HudParametrizedActionsPage.qml:132
119+msgid "Confirm"
120+msgstr ""
121+
122+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
123+msgid "Type or say a command"
124+msgstr ""
125+
126+#: Hud/Hud.qml:84
127+msgid "Loading. Please Wait..."
128+msgstr ""
129+
130+#: Hud/Hud.qml:89
131+msgid "Speak Now..."
132+msgstr ""
133+
134+#: Hud/Hud.qml:94
135+msgid "Speaking..."
136+msgstr ""
137+
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
142+#: Panel/SearchIndicator.qml:27
143+msgid "Search"
144+msgstr ""
145+
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
149+msgstr ""
150+
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
153+msgstr ""
154+
155+#: Shell.qml:439
156+#, qt-format
157+msgid "Please enter %1"
158+msgstr ""
po/fi.po+25−111
@@ -7,86 +7,18 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-10-03 09:21+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"
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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20
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−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr "Ohita esittely"
23msgstr "Ohita esittely"
92
24
@@ -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:341
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:126
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:142
107+#: Greeter/Lockscreen.qml:149
178msgid "Emergency Call"
108msgid "Emergency Call"
179msgstr "Hätäpuhelu"
109msgstr "Hätäpuhelu"
180
110
@@ -207,40 +137,24 @@ msgstr "Puhu nyt..."
207msgid "Speaking..."
137msgid "Speaking..."
208msgstr "Puhutaan..."
138msgstr "Puhutaan..."
209
139
140+#: Notifications/NotificationMenuItemFactory.qml:89
141+msgid "Show password"
142+msgstr "Näytä salasana"
143+
210#: Panel/SearchIndicator.qml:27
144#: Panel/SearchIndicator.qml:27
211msgid "Search"
145msgid "Search"
212msgstr "Hae"
146msgstr "Hae"
213
147
214−#: plugins/Unity/scope.cpp:398
148+#: plugins/Unity/Launcher/launcheritem.cpp:43
215−msgid "Sorry, there is nothing that matches your search."
149+#: plugins/Unity/Launcher/launcheritem.cpp:73
216−msgstr "Hakuun täsmääviä tuloksia ei löydy."
150+msgid "Lock to Launcher"
151+msgstr "Kiinnitä käynnistimeen"
217
152
218−#: plugins/Unity/showallfilteroption.cpp:41
153+#: plugins/Unity/Launcher/launcheritem.cpp:73
219−msgid "All"
154+msgid "Unlock from Launcher"
220−msgstr "Kaikki"
155+msgstr "Poista käynnistimestä"
221
156
222−#: Shell.qml:438
157+#: Shell.qml:439
223#, qt-format
158#, qt-format
224msgid "Please enter %1"
159msgid "Please enter %1"
225msgstr "Kirjoita %1"
160msgstr "Kirjoita %1"
226−
227−#~ msgid "Featured"
228−#~ msgstr "Suositellut"
229−
230−#~ msgid "Recent"
231−#~ msgstr "Viimeisimmät"
232−
233−#~ msgid "New Releases"
234−#~ msgstr "Uudet julkaisut"
235−
236−#~ msgid "Top Charting"
237−#~ msgstr "Nousukiidossa"
238−
239−#~ msgid "Music"
240−#~ msgstr "Musiikki"
241−
242−#~ msgid "Popular Online"
243−#~ msgstr "Suosittua verkossa"
244−
245−#~ msgid "Videos"
246−#~ msgstr "Videot"
po/fo.po+23−94
@@ -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-10-11 12:12+0200\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,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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20
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−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr ""
23msgstr ""
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -205,25 +135,24 @@ msgstr "Snakka nú..."
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr "Snakkar..."
136msgstr "Snakkar..."
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr "Leita"
144msgstr "Leita"
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
214−msgstr "Tíanverri er tað einki sum hóskar til tína leiting."
148+msgid "Lock to Launcher"
149+msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218msgstr ""
153msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr ""
158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "Tónleikur"
227−
228−#~ msgid "Videos"
229−#~ msgstr "Sjónbond"
po/fr.po+22−93
@@ -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-10-11 12:12+0200\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,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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\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:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr ""
23msgstr ""
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -205,25 +135,24 @@ msgstr ""
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr ""
136msgstr ""
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr ""
144msgstr ""
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
214msgstr ""
149msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218msgstr ""
153msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr ""
158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "Musique"
227−
228−#~ msgid "Videos"
229−#~ msgstr "Vidéos"
po/gd.po+23−109
@@ -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-10-11 12:12+0200\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,78 +16,10 @@ 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-10-13 05:43+0000\n"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20−"X-Generator: Launchpad (build 16799)\n"
20+"X-Generator: Launchpad (build 16856)\n"
21
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−
90−#: Components/EdgeDemoOverlay.qml:149
22+#: Components/EdgeDemoOverlay.qml:151
91msgid "Skip intro"
23msgid "Skip intro"
92msgstr "Gearr leum thairis air an ro-ràdh"
24msgstr "Gearr leum thairis air an ro-ràdh"
93
25
@@ -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:341
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:126
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:142
114+#: Greeter/Lockscreen.qml:149
185msgid "Emergency Call"
115msgid "Emergency Call"
186msgstr "Gairm èiginn"
116msgstr "Gairm èiginn"
187
117
@@ -214,40 +144,24 @@ msgstr "Can rud a-nis..."
214msgid "Speaking..."
144msgid "Speaking..."
215msgstr "A' bruidhinn..."
145msgstr "A' bruidhinn..."
216
146
147+#: Notifications/NotificationMenuItemFactory.qml:89
148+msgid "Show password"
149+msgstr ""
150+
217#: Panel/SearchIndicator.qml:27
151#: Panel/SearchIndicator.qml:27
218msgid "Search"
152msgid "Search"
219msgstr "Lorg"
153msgstr "Lorg"
220
154
221−#: plugins/Unity/scope.cpp:398
155+#: plugins/Unity/Launcher/launcheritem.cpp:43
222−msgid "Sorry, there is nothing that matches your search."
156+#: plugins/Unity/Launcher/launcheritem.cpp:73
223−msgstr "Tha sinn duilich ach chan eil dad a' freagairt ris na lorg thu."
157+msgid "Lock to Launcher"
158+msgstr ""
224
159
225−#: plugins/Unity/showallfilteroption.cpp:41
160+#: plugins/Unity/Launcher/launcheritem.cpp:73
226−msgid "All"
161+msgid "Unlock from Launcher"
227msgstr ""
162msgstr ""
228
163
229−#: Shell.qml:438
164+#: Shell.qml:439
230#, qt-format
165#, qt-format
231msgid "Please enter %1"
166msgid "Please enter %1"
232msgstr "Cuir a-steach %1"
167msgstr "Cuir a-steach %1"
233−
234−#~ msgid "Top Charting"
235−#~ msgstr "Gràinnean-mullaich nan cairt"
236−
237−#~ msgid "Featured"
238−#~ msgstr "Brosnaichte"
239−
240−#~ msgid "Recent"
241−#~ msgstr "O chionn goirid"
242−
243−#~ msgid "New Releases"
244−#~ msgstr "Air ùr-sgaoileadh"
245−
246−#~ msgid "Videos"
247−#~ msgstr "Videothan"
248−
249−#~ msgid "Music"
250−#~ msgstr "Ceòl"
251−
252−#~ msgid "Popular Online"
253−#~ msgstr "Fèill mhòr air air loidhne"
po/gl.po+25−108
@@ -7,86 +7,18 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-12-07 06:35+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16869)\n"
20
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−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr "Saltar introdución"
23msgstr "Saltar introdución"
92
24
@@ -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:341
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:126
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:142
107+#: Greeter/Lockscreen.qml:149
178msgid "Emergency Call"
108msgid "Emergency Call"
179msgstr "Chamada de emerxencia"
109msgstr "Chamada de emerxencia"
180
110
@@ -207,37 +137,24 @@ msgstr "Fale agora…"
207msgid "Speaking..."
137msgid "Speaking..."
208msgstr "Falando…"
138msgstr "Falando…"
209
139
140+#: Notifications/NotificationMenuItemFactory.qml:89
141+msgid "Show password"
142+msgstr "Mostrar contrasinal"
143+
210#: Panel/SearchIndicator.qml:27
144#: Panel/SearchIndicator.qml:27
211msgid "Search"
145msgid "Search"
212msgstr "Buscar"
146msgstr "Buscar"
213
147
214−#: plugins/Unity/scope.cpp:398
148+#: plugins/Unity/Launcher/launcheritem.cpp:43
215−msgid "Sorry, there is nothing that matches your search."
149+#: plugins/Unity/Launcher/launcheritem.cpp:73
216−msgstr "Sentímolo, non hai nada que coincida con esta busca."
150+msgid "Lock to Launcher"
151+msgstr "Manter no Iniciador"
217
152
218−#: plugins/Unity/showallfilteroption.cpp:41
153+#: plugins/Unity/Launcher/launcheritem.cpp:73
219−msgid "All"
154+msgid "Unlock from Launcher"
220−msgstr "Todo"
155+msgstr "Non manter no Iniciador"
221
156
222−#: Shell.qml:438
157+#: Shell.qml:439
223#, qt-format
158#, qt-format
224msgid "Please enter %1"
159msgid "Please enter %1"
225msgstr "Introduza %1"
160msgstr "Introduza %1"
226−
227−#~ msgid "Music"
228−#~ msgstr "Música"
229−
230−#~ msgid "Videos"
231−#~ msgstr "Vídeos"
232−
233−#~ msgid "Featured"
234−#~ msgstr "Destacado"
235−
236−#~ msgid "Recent"
237−#~ msgstr "Recentes"
238−
239−#~ msgid "New Releases"
240−#~ msgstr "Novas versións"
241−
242−#~ msgid "Popular Online"
243−#~ msgstr "Populares en liña"
po/he.po+27−111
@@ -7,86 +7,18 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-10-01 09:19+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"
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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\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 "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−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr "לדלג על הפתיחה"
23msgstr "לדלג על הפתיחה"
92
24
@@ -131,31 +63,31 @@ msgid ""
131"You have now mastered the edge gestures and can start using the "
63"You have now mastered the edge gestures and can start using the "
132"phone<br><br>Tap anywhere to start"
64"phone<br><br>Tap anywhere to start"
133msgstr ""
65msgstr ""
66+"עתה מכשסיימת את ההשתלמות לשימוש במחוות קצה יש לך את הכלים להשתמש "
67+"בטלפון<br><br>ניתן לגעת במקום כלשהו במסך כדי להתחיל"
134
68
135−#: Components/PageHeader.qml:341
69+#: Components/PageHeader.qml:364
136msgid "Recent searches"
70msgid "Recent searches"
137msgstr "חיפושים אחרונים"
71msgstr "חיפושים אחרונים"
138
72
139−#. TRANSLATORS: Number of persons who rated this app
73+#: Dash/Apps/AppPreview.qml:135
74+msgid "Rate this"
75+msgstr "דירוג היישום"
76+
140#. TRANSLATORS: Number of persons who rated this app/video/whatever
77#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
78+#: Dash/Previews/Header.qml:93
142#, qt-format
79#, qt-format
143msgid "(%1)"
80msgid "(%1)"
144msgstr "(%1)"
81msgstr "(%1)"
145
82
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. 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
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
84+#: Dash/Previews/Header.qml:105
149#, qt-format
85#, qt-format
150msgid "%1 review"
86msgid "%1 review"
151msgid_plural "%1 reviews"
87msgid_plural "%1 reviews"
152msgstr[0] "סקירה %1"
88msgstr[0] "סקירה %1"
153msgstr[1] "%1 סקירות"
89msgstr[1] "%1 סקירות"
154
90
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr "דירוג היישום"
158−
159#: Dash/Previews/Reviews.qml:74
91#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
92msgid "Add a review"
161msgstr "הוספת סקירה"
93msgstr "הוספת סקירה"
@@ -172,7 +104,7 @@ msgstr "שליחה"
172msgid "Comments:"
104msgid "Comments:"
173msgstr "הערות:"
105msgstr "הערות:"
174
106
175−#: Greeter/Lockscreen.qml:142
107+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
108msgid "Emergency Call"
177msgstr "שיחת חירום"
109msgstr "שיחת חירום"
178
110
@@ -205,40 +137,24 @@ msgstr "יש לדבר כעת..."
205msgid "Speaking..."
137msgid "Speaking..."
206msgstr "הדיבור מושמע…"
138msgstr "הדיבור מושמע…"
207
139
140+#: Notifications/NotificationMenuItemFactory.qml:89
141+msgid "Show password"
142+msgstr "הצגת הססמה"
143+
208#: Panel/SearchIndicator.qml:27
144#: Panel/SearchIndicator.qml:27
209msgid "Search"
145msgid "Search"
210msgstr "חיפוש"
146msgstr "חיפוש"
211
147
212−#: plugins/Unity/scope.cpp:398
148+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
149+#: plugins/Unity/Launcher/launcheritem.cpp:73
214−msgstr "שום דבר אינו תואם לחיפוש שלך, עמך הסליחה."
150+msgid "Lock to Launcher"
151+msgstr "נעילה למשגר"
215
152
216−#: plugins/Unity/showallfilteroption.cpp:41
153+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
154+msgid "Unlock from Launcher"
218−msgstr ""
155+msgstr "הפרדה מהמשגר"
219
156
220−#: Shell.qml:438
157+#: Shell.qml:439
221#, qt-format
158#, qt-format
222msgid "Please enter %1"
159msgid "Please enter %1"
223msgstr "נא להזין %1"
160msgstr "נא להזין %1"
224−
225−#~ msgid "Music"
226−#~ msgstr "מוזיקה"
227−
228−#~ msgid "Videos"
229−#~ msgstr "סרטונים"
230−
231−#~ msgid "Top Charting"
232−#~ msgstr "בראש הטבלה"
233−
234−#~ msgid "Featured"
235−#~ msgstr "מומלצים"
236−
237−#~ msgid "Recent"
238−#~ msgstr "אחרונים"
239−
240−#~ msgid "New Releases"
241−#~ msgstr "מהדורות חדשות"
242−
243−#~ msgid "Popular Online"
244−#~ msgstr "פופולריים ברחבי הרשת"
po/hr.po+23−94
@@ -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-10-11 12:12+0200\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,78 +16,10 @@ 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-10-13 05:43+0000\n"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20−"X-Generator: Launchpad (build 16799)\n"
20+"X-Generator: Launchpad (build 16856)\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:149
22+#: Components/EdgeDemoOverlay.qml:151
91msgid "Skip intro"
23msgid "Skip intro"
92msgstr ""
24msgstr ""
93
25
@@ -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:341
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:126
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:142
106+#: Greeter/Lockscreen.qml:149
177msgid "Emergency Call"
107msgid "Emergency Call"
178msgstr ""
108msgstr ""
179
109
@@ -206,25 +136,24 @@ msgstr "Recite..."
206msgid "Speaking..."
136msgid "Speaking..."
207msgstr "Govor..."
137msgstr "Govor..."
208
138
139+#: Notifications/NotificationMenuItemFactory.qml:89
140+msgid "Show password"
141+msgstr ""
142+
209#: Panel/SearchIndicator.qml:27
143#: Panel/SearchIndicator.qml:27
210msgid "Search"
144msgid "Search"
211msgstr "Pretraživanje"
145msgstr "Pretraživanje"
212
146
213−#: plugins/Unity/scope.cpp:398
147+#: plugins/Unity/Launcher/launcheritem.cpp:43
214−msgid "Sorry, there is nothing that matches your search."
148+#: plugins/Unity/Launcher/launcheritem.cpp:73
215−msgstr "Nažalost, ne postoji ništa što odgovara vašoj pretrazi."
149+msgid "Lock to Launcher"
150+msgstr ""
216
151
217−#: plugins/Unity/showallfilteroption.cpp:41
152+#: plugins/Unity/Launcher/launcheritem.cpp:73
218−msgid "All"
153+msgid "Unlock from Launcher"
219msgstr ""
154msgstr ""
220
155
221−#: Shell.qml:438
156+#: Shell.qml:439
222#, qt-format
157#, qt-format
223msgid "Please enter %1"
158msgid "Please enter %1"
224msgstr ""
159msgstr ""
225−
226−#~ msgid "Music"
227−#~ msgstr "Glazba"
228−
229−#~ msgid "Videos"
230−#~ msgstr "Video"
po/hu.po+23−94
@@ -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-10-11 12:12+0200\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,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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\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:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr ""
23msgstr ""
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -205,25 +135,24 @@ msgstr "Beszéljen most…"
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr "Beszéd…"
136msgstr "Beszéd…"
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr "Keresés"
144msgstr "Keresés"
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
214−msgstr "Elnézést, nincs találat a keresésre."
148+msgid "Lock to Launcher"
149+msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218msgstr ""
153msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr ""
158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "Zene"
227−
228−#~ msgid "Videos"
229−#~ msgstr "Videók"
po/hy.po+23−94
@@ -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-10-11 12:12+0200\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,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=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\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:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr ""
23msgstr ""
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -205,25 +135,24 @@ msgstr "Խոսի՛ր"
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr "Խոսում եմ..."
136msgstr "Խոսում եմ..."
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr "Որոնում"
144msgstr "Որոնում"
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
214−msgstr "Կներերք, բայց Ձեր հարցումով ոչինչ չկար"
148+msgid "Lock to Launcher"
149+msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218msgstr ""
153msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr ""
158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "Երգեր"
227−
228−#~ msgid "Videos"
229−#~ msgstr "Վիդեոներ"
po/id.po+22−87
@@ -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-10-11 12:12+0200\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,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=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\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:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr ""
23msgstr ""
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -205,19 +135,24 @@ msgstr ""
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr ""
136msgstr ""
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr ""
144msgstr ""
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
214msgstr ""
149msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218msgstr ""
153msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr ""
158msgstr ""
po/is.po+23−109
@@ -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-10-11 12:12+0200\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,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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20
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−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr "Hoppa yfir kynningu"
23msgstr "Hoppa yfir kynningu"
92
24
@@ -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:341
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:126
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:142
106+#: Greeter/Lockscreen.qml:149
177msgid "Emergency Call"
107msgid "Emergency Call"
178msgstr "Neyðarsímtal"
108msgstr "Neyðarsímtal"
179
109
@@ -206,40 +136,24 @@ msgstr "Talaðu Núna..."
206msgid "Speaking..."
136msgid "Speaking..."
207msgstr "Tala..."
137msgstr "Tala..."
208
138
139+#: Notifications/NotificationMenuItemFactory.qml:89
140+msgid "Show password"
141+msgstr ""
142+
209#: Panel/SearchIndicator.qml:27
143#: Panel/SearchIndicator.qml:27
210msgid "Search"
144msgid "Search"
211msgstr "Leita"
145msgstr "Leita"
212
146
213−#: plugins/Unity/scope.cpp:398
147+#: plugins/Unity/Launcher/launcheritem.cpp:43
214−msgid "Sorry, there is nothing that matches your search."
148+#: plugins/Unity/Launcher/launcheritem.cpp:73
215−msgstr "Því miður, það var ekkert sem passaði við leitarorðið þitt."
149+msgid "Lock to Launcher"
150+msgstr ""
216
151
217−#: plugins/Unity/showallfilteroption.cpp:41
152+#: plugins/Unity/Launcher/launcheritem.cpp:73
218−msgid "All"
153+msgid "Unlock from Launcher"
219msgstr ""
154msgstr ""
220
155
221−#: Shell.qml:438
156+#: Shell.qml:439
222#, qt-format
157#, qt-format
223msgid "Please enter %1"
158msgid "Please enter %1"
224msgstr ""
159msgstr ""
225−
226−#~ msgid "Top Charting"
227−#~ msgstr "Topp Listi"
228−
229−#~ msgid "Featured"
230−#~ msgstr "Efst á baugi"
231−
232−#~ msgid "Recent"
233−#~ msgstr "Nýlegt"
234−
235−#~ msgid "New Releases"
236−#~ msgstr "Nýjar Útgáfur"
237−
238−#~ msgid "Videos"
239−#~ msgstr "Myndbönd"
240−
241−#~ msgid "Music"
242−#~ msgstr "Tónlist"
243−
244−#~ msgid "Popular Online"
245−#~ msgstr "Vinsælt á Netinu"
po/it.po+24−110
@@ -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-10-11 12:12+0200\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,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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20
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−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr "Salta introduzione"
23msgstr "Salta introduzione"
92
24
@@ -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:341
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:126
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:142
112+#: Greeter/Lockscreen.qml:149
183msgid "Emergency Call"
113msgid "Emergency Call"
184msgstr "Chiamata di emergenza"
114msgstr "Chiamata di emergenza"
185
115
@@ -212,40 +142,24 @@ msgstr "Parla ora..."
212msgid "Speaking..."
142msgid "Speaking..."
213msgstr "Sto parlando..."
143msgstr "Sto parlando..."
214
144
145+#: Notifications/NotificationMenuItemFactory.qml:89
146+msgid "Show password"
147+msgstr ""
148+
215#: Panel/SearchIndicator.qml:27
149#: Panel/SearchIndicator.qml:27
216msgid "Search"
150msgid "Search"
217msgstr "Cerca"
151msgstr "Cerca"
218
152
219−#: plugins/Unity/scope.cpp:398
153+#: plugins/Unity/Launcher/launcheritem.cpp:43
220−msgid "Sorry, there is nothing that matches your search."
154+#: plugins/Unity/Launcher/launcheritem.cpp:73
221−msgstr "Nessun risultato corrispondente alla ricerca."
155+msgid "Lock to Launcher"
156+msgstr ""
222
157
223−#: plugins/Unity/showallfilteroption.cpp:41
158+#: plugins/Unity/Launcher/launcheritem.cpp:73
224−msgid "All"
159+msgid "Unlock from Launcher"
225−msgstr "Tutto"
160+msgstr ""
226
161
227−#: Shell.qml:438
162+#: Shell.qml:439
228#, qt-format
163#, qt-format
229msgid "Please enter %1"
164msgid "Please enter %1"
230msgstr "Inserire %1"
165msgstr "Inserire %1"
231−
232−#~ msgid "Music"
233−#~ msgstr "Musica"
234−
235−#~ msgid "Videos"
236−#~ msgstr "Video"
237−
238−#~ msgid "Recent"
239−#~ msgstr "Recenti"
240−
241−#~ msgid "New Releases"
242−#~ msgstr "Nuovi rilasci"
243−
244−#~ msgid "Featured"
245−#~ msgstr "In evidenza"
246−
247−#~ msgid "Popular Online"
248−#~ msgstr "Popolari online"
249−
250−#~ msgid "Top Charting"
251−#~ msgstr "Più votate"
po/ja.po+22−87
@@ -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-10-11 12:12+0200\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,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=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\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:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr ""
23msgstr ""
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -205,19 +135,24 @@ msgstr ""
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr ""
136msgstr ""
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr ""
144msgstr ""
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
214msgstr ""
149msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218msgstr ""
153msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr ""
158msgstr ""
po/km.po+25−111
@@ -7,86 +7,18 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-10-11 08:49+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"
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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\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 "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−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr "រំលង​ការ​ណែនាំ"
23msgstr "រំលង​ការ​ណែនាំ"
92
24
@@ -137,29 +69,27 @@ msgstr ""
137"និង​អាច​ចាប់ផ្ដើម​ប្រើ​ទូរស័ព្ទ​បាន<br><br>ប៉ះ​កន្លែង​ណា​មួយ​ "
69"និង​អាច​ចាប់ផ្ដើម​ប្រើ​ទូរស័ព្ទ​បាន<br><br>ប៉ះ​កន្លែង​ណា​មួយ​ "
138"ដើម្បី​ចាប់ផ្ដើម"
70"ដើម្បី​ចាប់ផ្ដើម"
139
71
140−#: Components/PageHeader.qml:341
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:126
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:142
109+#: Greeter/Lockscreen.qml:149
180msgid "Emergency Call"
110msgid "Emergency Call"
181msgstr "ការ​ហៅ​ពេល​អាសន្ន"
111msgstr "ការ​ហៅ​ពេល​អាសន្ន"
182
112
@@ -209,40 +139,24 @@ msgstr "និយាយ​ឥឡូវ..."
209msgid "Speaking..."
139msgid "Speaking..."
210msgstr "កំពុង​និយាយ..."
140msgstr "កំពុង​និយាយ..."
211
141
142+#: Notifications/NotificationMenuItemFactory.qml:89
143+msgid "Show password"
144+msgstr "បង្ហាញ​ពាក្យ​សម្ងាត់"
145+
212#: Panel/SearchIndicator.qml:27
146#: Panel/SearchIndicator.qml:27
213msgid "Search"
147msgid "Search"
214msgstr "ស្វែង​រក"
148msgstr "ស្វែង​រក"
215
149
216−#: plugins/Unity/scope.cpp:398
150+#: plugins/Unity/Launcher/launcheritem.cpp:43
217−msgid "Sorry, there is nothing that matches your search."
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
218−msgstr "សូម​ទោស មិនមាន​ពាក្យ​ដែល​អ្នក​ស្វែងរក​ទេ​។"
152+msgid "Lock to Launcher"
153+msgstr "ចាក់​សោ​​ទៅ​កម្មវិធី​ចាប់ផ្ដើម"
219
154
220−#: plugins/Unity/showallfilteroption.cpp:41
155+#: plugins/Unity/Launcher/launcheritem.cpp:73
221−msgid "All"
156+msgid "Unlock from Launcher"
222−msgstr "ទាំង​អស់"
157+msgstr "ដោះសោ​ពី​កម្មវិធី​ចាប់ផ្ដើម"
223
158
224−#: Shell.qml:438
159+#: Shell.qml:439
225#, qt-format
160#, qt-format
226msgid "Please enter %1"
161msgid "Please enter %1"
227msgstr "សូម​បញ្ចូល %1"
162msgstr "សូម​បញ្ចូល %1"
228−
229−#~ msgid "Popular Online"
230−#~ msgstr "លើ​បណ្ដាញ​ប្រជាប្រិយ"
231−
232−#~ msgid "Music"
233−#~ msgstr "តន្ត្រី"
234−
235−#~ msgid "New Releases"
236−#~ msgstr "ការ​ចេញ​ផ្សាយ​ថ្មី"
237−
238−#~ msgid "Top Charting"
239−#~ msgstr "តារាង​ខាង​លើ"
240−
241−#~ msgid "Featured"
242−#~ msgstr "ដែល​ល្បី"
243−
244−#~ msgid "Recent"
245−#~ msgstr "ថ្មីៗ"
246−
247−#~ msgid "Videos"
248−#~ msgstr "វីដេអូ"
po/kn.po+23−94
@@ -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-10-11 12:12+0200\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,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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\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:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr ""
23msgstr ""
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -205,25 +135,24 @@ msgstr "ಈಗ ಮಾತನಾಡಿ ..."
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr "ಮಾತನಾಡುತಿದ್ದೀರಿ"
136msgstr "ಮಾತನಾಡುತಿದ್ದೀರಿ"
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr "ಹುಡುಕು"
144msgstr "ಹುಡುಕು"
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
214−msgstr "ಕ್ಷಮಿಸಿ ನಿಮ್ಮ ಶೋಧನೆಗೆ ಸರಿಯಾದ ಹೊಂದಾಣಿಕೆಗಳು ದೊರಕುತ್ತಿಲ್ಲ"
148+msgid "Lock to Launcher"
149+msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218msgstr ""
153msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr ""
158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "ಸಂಗೀತ"
227−
228−#~ msgid "Videos"
229−#~ msgstr "ವೀಡಿಯೋಗಳು"
po/ko.po+22−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-10-11 12:12+0200\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,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=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\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:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr "도입부 건너뛰기"
23msgstr "도입부 건너뛰기"
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -205,22 +135,24 @@ msgstr ""
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr ""
136msgstr ""
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr "검색"
144msgstr "검색"
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
214msgstr ""
149msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218msgstr ""
153msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr ""
158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "음악"
po/ky.po+23−94
@@ -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-10-11 12:12+0200\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,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=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\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:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr ""
23msgstr ""
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -205,25 +135,24 @@ msgstr "Азыр сүйлөңүз..."
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr "Сүйлөнүүдө..."
136msgstr "Сүйлөнүүдө..."
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr "Издөө"
144msgstr "Издөө"
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
214−msgstr "Тилекке каршы, сиздин издөөңүзгө эч нерсе дал келген жок."
148+msgid "Lock to Launcher"
149+msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218msgstr ""
153msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr ""
158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "Музыка"
227−
228−#~ msgid "Videos"
229−#~ msgstr "Видеолор"
po/lo.po+23−94
@@ -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-10-11 12:12+0200\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,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=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\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 "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−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr ""
23msgstr ""
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -205,25 +135,24 @@ msgstr "ເວົ້າໂລດ"
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr "ກໍາລັງເວົ້າ"
136msgstr "ກໍາລັງເວົ້າ"
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr "ຊອກຫາ"
144msgstr "ຊອກຫາ"
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
214msgstr ""
149msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218−msgstr "ທັງໝົດ"
153+msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr "ກະລູນາປ້ອນ %1"
158msgstr "ກະລູນາປ້ອນ %1"
224−
225−#~ msgid "Videos"
226−#~ msgstr "ວິດີໂອ"
227−
228−#~ msgid "Music"
229−#~ msgstr "ດົນຕີ"
po/lv.po+23−94
@@ -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-10-11 12:12+0200\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,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=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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20
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−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr ""
23msgstr ""
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -205,25 +135,24 @@ msgstr "Runajiet Tagad"
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr "Runa..."
136msgstr "Runa..."
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr "Meklēt"
144msgstr "Meklēt"
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
214−msgstr "Diemžēl nekas neatbilst jūsu meklētajam."
148+msgid "Lock to Launcher"
149+msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218msgstr ""
153msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr ""
158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "Mūzika"
227−
228−#~ msgid "Videos"
229−#~ msgstr "Video"
po/ml.ponew file+162
@@ -0,0 +1,162 @@
1+# Malayalam translation for unity8
2+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
3+# This file is distributed under the same license as the unity8 package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity8\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2013-11-23 11:44+0000\n"
12+"Last-Translator: STyM Alfazz <Unknown>\n"
13+"Language-Team: Malayalam <ml@li.org>\n"
14+"MIME-Version: 1.0\n"
15+"Content-Type: text/plain; charset=UTF-8\n"
16+"Content-Transfer-Encoding: 8bit\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
20+
21+#: Components/EdgeDemoOverlay.qml:151
22+msgid "Skip intro"
23+msgstr "ആമുഖം ഒഴിവാക്കുക"
24+
25+#: Components/EdgeDemo.qml:112
26+msgid "Right edge"
27+msgstr "വലത് മൂല"
28+
29+#: Components/EdgeDemo.qml:113
30+msgid "Try swiping from the right edge to unlock the phone"
31+msgstr "ഫോണ്‍ അണ്‍ലോക്ക് ചെയ്യാന്‍ വലതു വശത്തുനിന്ന് സ്വൈപ് ചെയ്ത് നോക്കുക"
32+
33+#: Components/EdgeDemo.qml:144
34+msgid "Top edge"
35+msgstr "മുകള്‍ വശം"
36+
37+#: Components/EdgeDemo.qml:145
38+msgid "Try swiping from the top edge to access the indicators"
39+msgstr "സൂചകങ്ങള്‍ ലഭ്യമാക്കാന്‍ മുകള്‍ വശത്തുനിന്നും സ്വൈപ് ചെയ്യുക"
40+
41+#: Components/EdgeDemo.qml:170
42+msgid "Close"
43+msgstr "അടക്കുക"
44+
45+#: Components/EdgeDemo.qml:171
46+msgid "Swipe up again to close the settings screen"
47+msgstr "ക്രമീകരണങ്ങളുടെ സ്ക്രീന്‍ അടക്കാന്‍ മുകളിലേക്ക് സ്വൈപ് ചെയ്യുക"
48+
49+#: Components/EdgeDemo.qml:198
50+msgid "Left edge"
51+msgstr "ഇടത് വശം"
52+
53+#: Components/EdgeDemo.qml:199
54+msgid "Swipe from the left to reveal the launcher for quick access to apps"
55+msgstr ""
56+"പ്രയോഗങ്ങള്‍ പെട്ടെന്ന് ലഭ്യമാക്കുന്ന വിക്ഷേപിക ലഭ്യമാക്കാന്‍ ഇടതു വശത്ത് "
57+"നിന്നും സ്വൈപ് ചെയ്യുക"
58+
59+#: Components/EdgeDemo.qml:226
60+msgid "Well done"
61+msgstr "നന്നായി ചെയ്തിരിക്കുന്നു"
62+
63+#: Components/EdgeDemo.qml:227
64+msgid ""
65+"You have now mastered the edge gestures and can start using the "
66+"phone<br><br>Tap anywhere to start"
67+msgstr ""
68+"നിങ്ങളിപ്പോള്‍ സ്വൈപുകളും മറ്റും പഠിച്ചിരിക്കുന്നു<br><br>തുടങ്ങാന്‍ "
69+"എവിടെയെങ്കിലും ടാപ് ചെയ്യുക"
70+
71+#: Components/PageHeader.qml:364
72+msgid "Recent searches"
73+msgstr "സമീപകാല തിരയലുകള്‍"
74+
75+#: Dash/Apps/AppPreview.qml:135
76+msgid "Rate this"
77+msgstr "ഇത് അവലോകനം ചെയ്യുക"
78+
79+#. TRANSLATORS: Number of persons who rated this app/video/whatever
80+#: Dash/Previews/Header.qml:93
81+#, qt-format
82+msgid "(%1)"
83+msgstr "(%1)"
84+
85+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
86+#: Dash/Previews/Header.qml:105
87+#, qt-format
88+msgid "%1 review"
89+msgid_plural "%1 reviews"
90+msgstr[0] "%1 അവലോകനം"
91+msgstr[1] "%1 അവലോകനങ്ങള്‍"
92+
93+#: Dash/Previews/Reviews.qml:74
94+msgid "Add a review"
95+msgstr "ഒരു അവലോകനം ചേര്‍ക്കുക"
96+
97+#: Dash/Previews/Reviews.qml:86
98+msgid "Review"
99+msgstr "അവലോകനം"
100+
101+#: Dash/Previews/Reviews.qml:121
102+msgid "Send"
103+msgstr "അയയ്‌ക്കുക"
104+
105+#: Dash/Previews/Reviews.qml:139
106+msgid "Comments:"
107+msgstr "അഭിപ്രായങ്ങള്‍:"
108+
109+#: Greeter/Lockscreen.qml:149
110+msgid "Emergency Call"
111+msgstr "അടിയന്തിര വിളി"
112+
113+#: Greeter/PassphraseLockscreen.qml:59
114+#, qt-format
115+msgid "Hello %1"
116+msgstr "ഹലോ %1"
117+
118+#: Greeter/PassphraseLockscreen.qml:59
119+msgid "Hello"
120+msgstr "ഹലോ"
121+
122+#: Hud/HudParametrizedActionsPage.qml:132
123+msgid "Confirm"
124+msgstr "സ്ഥിരീകരിക്കുക"
125+
126+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
127+msgid "Type or say a command"
128+msgstr "ഒരു ആജ്ഞ പറയുകയോ ടൈപ്പുകയോ ചെയ്യുക"
129+
130+#: Hud/Hud.qml:84
131+msgid "Loading. Please Wait..."
132+msgstr "വരുന്നു. ദയവായി കാത്തിരിക്കുക..."
133+
134+#: Hud/Hud.qml:89
135+msgid "Speak Now..."
136+msgstr "ഇപ്പോള്‍ സംസാരിക്കുക..."
137+
138+#: Hud/Hud.qml:94
139+msgid "Speaking..."
140+msgstr "സംസാരിക്കുന്നു..."
141+
142+#: Notifications/NotificationMenuItemFactory.qml:89
143+msgid "Show password"
144+msgstr "രഹസ്യവാക്ക് കാണിക്കുക"
145+
146+#: Panel/SearchIndicator.qml:27
147+msgid "Search"
148+msgstr "തിരയുക"
149+
150+#: plugins/Unity/Launcher/launcheritem.cpp:43
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Lock to Launcher"
153+msgstr "വിക്ഷേപികയില്‍ സ്ഥിരപ്പെടുത്തുക"
154+
155+#: plugins/Unity/Launcher/launcheritem.cpp:73
156+msgid "Unlock from Launcher"
157+msgstr "വിക്ഷേപികാ സ്ഥിരപ്പെടുത്തല്‍ ഒഴിവാക്കുക"
158+
159+#: Shell.qml:439
160+#, qt-format
161+msgid "Please enter %1"
162+msgstr "ദയവായി %1 നല്‍കുക"
po/my.po+23−103
@@ -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-10-11 12:12+0200\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-10-09 11:35+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"
@@ -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=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\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 "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−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr "မိတ်ဆက်ကိုကျော်မည်"
23msgstr "မိတ်ဆက်ကိုကျော်မည်"
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -205,34 +135,24 @@ msgstr "ယခုပြောပါ"
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr "ပြောနေသည်"
136msgstr "ပြောနေသည်"
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr "ရှာဖွေ"
144msgstr "ရှာဖွေ"
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
214−msgstr "ဆောရီး၊ သင်၏ရှာဖွေမူနှင့်တူညီတာဘာမှမရှိပါ။"
148+msgid "Lock to Launcher"
149+msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218msgstr ""
153msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr ""
158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "တေးဂီတ"
227−
228−#~ msgid "Videos"
229−#~ msgstr "ဗီဒီယိုများ"
230−
231−#~ msgid "New Releases"
232−#~ msgstr "အသစ်ထွက်ရှိသော"
233−
234−#~ msgid "Recent"
235−#~ msgstr "မကြာသေးခင်က"
236−
237−#~ msgid "Popular Online"
238−#~ msgstr "အွန်လိုင်းတွင်ပေါ်ပြူလာဖြစ်သော"
po/nb.po+23−94
@@ -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-10-11 12:12+0200\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,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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20
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−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr ""
23msgstr ""
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -205,25 +135,24 @@ msgstr "Snakk nå …"
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr "Snakker …"
136msgstr "Snakker …"
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr "Søk"
144msgstr "Søk"
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
214−msgstr "Søket ga ingen treff."
149+msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218msgstr ""
153msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr ""
158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "Musikk"
227−
228−#~ msgid "Videos"
229−#~ msgstr "Videoer"
po/nl.po+23−94
@@ -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-10-11 12:12+0200\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,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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\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:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr ""
23msgstr ""
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -205,25 +135,24 @@ msgstr "Nu inspreken…"
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr "Inspreken…"
136msgstr "Inspreken…"
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr "Zoeken"
144msgstr "Zoeken"
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
214−msgstr "Er is helaas niets dat met uw zoekopdracht overeenkomt."
148+msgid "Lock to Launcher"
149+msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218msgstr ""
153msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr ""
158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "Muziek"
227−
228−#~ msgid "Videos"
229−#~ msgstr "Video's"
po/pl.po+24−89
@@ -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-10-11 12:12+0200\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,78 +16,10 @@ 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-10-14 05:47+0000\n"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20−"X-Generator: Launchpad (build 16799)\n"
20+"X-Generator: Launchpad (build 16856)\n"
21
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−
90−#: Components/EdgeDemoOverlay.qml:149
22+#: Components/EdgeDemoOverlay.qml:151
91msgid "Skip intro"
23msgid "Skip intro"
92msgstr "Pomiń intro"
24msgstr "Pomiń intro"
93
25
@@ -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:341
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:126
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:142
111+#: Greeter/Lockscreen.qml:149
182msgid "Emergency Call"
112msgid "Emergency Call"
183msgstr "Telefon ratunkowy"
113msgstr "Telefon ratunkowy"
184
114
@@ -211,19 +141,24 @@ msgstr "Mów teraz..."
211msgid "Speaking..."
141msgid "Speaking..."
212msgstr "Rozpoznanie..."
142msgstr "Rozpoznanie..."
213
143
144+#: Notifications/NotificationMenuItemFactory.qml:89
145+msgid "Show password"
146+msgstr ""
147+
214#: Panel/SearchIndicator.qml:27
148#: Panel/SearchIndicator.qml:27
215msgid "Search"
149msgid "Search"
216msgstr "Szukaj"
150msgstr "Szukaj"
217
151
218−#: plugins/Unity/scope.cpp:398
152+#: plugins/Unity/Launcher/launcheritem.cpp:43
219−msgid "Sorry, there is nothing that matches your search."
153+#: plugins/Unity/Launcher/launcheritem.cpp:73
220−msgstr "Nie znaleziono pasujących wyników."
154+msgid "Lock to Launcher"
155+msgstr ""
221
156
222−#: plugins/Unity/showallfilteroption.cpp:41
157+#: plugins/Unity/Launcher/launcheritem.cpp:73
223−msgid "All"
158+msgid "Unlock from Launcher"
224−msgstr "Wszystko"
159+msgstr ""
225
160
226−#: Shell.qml:438
161+#: Shell.qml:439
227#, qt-format
162#, qt-format
228msgid "Please enter %1"
163msgid "Please enter %1"
229msgstr "Wprowadź %1"
164msgstr "Wprowadź %1"
po/pt_BR.po+23−109
@@ -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-10-11 12:12+0200\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,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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20
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−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr "Pular introdução"
23msgstr "Pular introdução"
92
24
@@ -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:341
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:126
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:142
107+#: Greeter/Lockscreen.qml:149
178msgid "Emergency Call"
108msgid "Emergency Call"
179msgstr "Chamada de emergência"
109msgstr "Chamada de emergência"
180
110
@@ -207,40 +137,24 @@ msgstr "Fale agora..."
207msgid "Speaking..."
137msgid "Speaking..."
208msgstr "Falando..."
138msgstr "Falando..."
209
139
140+#: Notifications/NotificationMenuItemFactory.qml:89
141+msgid "Show password"
142+msgstr ""
143+
210#: Panel/SearchIndicator.qml:27
144#: Panel/SearchIndicator.qml:27
211msgid "Search"
145msgid "Search"
212msgstr "Pesquisar"
146msgstr "Pesquisar"
213
147
214−#: plugins/Unity/scope.cpp:398
148+#: plugins/Unity/Launcher/launcheritem.cpp:43
215−msgid "Sorry, there is nothing that matches your search."
149+#: plugins/Unity/Launcher/launcheritem.cpp:73
216−msgstr "Desculpe, não há nada que corresponda à sua pesquisa."
150+msgid "Lock to Launcher"
151+msgstr ""
217
152
218−#: plugins/Unity/showallfilteroption.cpp:41
153+#: plugins/Unity/Launcher/launcheritem.cpp:73
219−msgid "All"
154+msgid "Unlock from Launcher"
220msgstr ""
155msgstr ""
221
156
222−#: Shell.qml:438
157+#: Shell.qml:439
223#, qt-format
158#, qt-format
224msgid "Please enter %1"
159msgid "Please enter %1"
225msgstr "Por favor, digite %1"
160msgstr "Por favor, digite %1"
226−
227−#~ msgid "Music"
228−#~ msgstr "Músicas"
229−
230−#~ msgid "Videos"
231−#~ msgstr "Vídeos"
232−
233−#~ msgid "New Releases"
234−#~ msgstr "Lançamentos"
235−
236−#~ msgid "Recent"
237−#~ msgstr "Recente"
238−
239−#~ msgid "Featured"
240−#~ msgstr "Em destaque"
241−
242−#~ msgid "Top Charting"
243−#~ msgstr "Top gráficos"
244−
245−#~ msgid "Popular Online"
246−#~ msgstr "Popular Online"
po/ro.po+22−94
@@ -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-10-11 12:12+0200\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,78 +16,10 @@ 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-10-13 05:43+0000\n"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20−"X-Generator: Launchpad (build 16799)\n"
20+"X-Generator: Launchpad (build 16856)\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:149
22+#: Components/EdgeDemoOverlay.qml:151
91msgid "Skip intro"
23msgid "Skip intro"
92msgstr ""
24msgstr ""
93
25
@@ -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:341
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:126
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:142
106+#: Greeter/Lockscreen.qml:149
177msgid "Emergency Call"
107msgid "Emergency Call"
178msgstr ""
108msgstr ""
179
109
@@ -206,26 +136,24 @@ msgstr "Vorbiți acum..."
206msgid "Speaking..."
136msgid "Speaking..."
207msgstr "Vorbire..."
137msgstr "Vorbire..."
208
138
139+#: Notifications/NotificationMenuItemFactory.qml:89
140+msgid "Show password"
141+msgstr ""
142+
209#: Panel/SearchIndicator.qml:27
143#: Panel/SearchIndicator.qml:27
210msgid "Search"
144msgid "Search"
211msgstr "Căutare"
145msgstr "Căutare"
212
146
213−#: plugins/Unity/scope.cpp:398
147+#: plugins/Unity/Launcher/launcheritem.cpp:43
214−msgid "Sorry, there is nothing that matches your search."
148+#: plugins/Unity/Launcher/launcheritem.cpp:73
149+msgid "Lock to Launcher"
215msgstr ""
150msgstr ""
216−"Ne pare rău, nu este nimic care se potrivește căutării dumneavoastră."
217
151
218−#: plugins/Unity/showallfilteroption.cpp:41
152+#: plugins/Unity/Launcher/launcheritem.cpp:73
219−msgid "All"
153+msgid "Unlock from Launcher"
220msgstr ""
154msgstr ""
221
155
222−#: Shell.qml:438
156+#: Shell.qml:439
223#, qt-format
157#, qt-format
224msgid "Please enter %1"
158msgid "Please enter %1"
225msgstr ""
159msgstr ""
226−
227−#~ msgid "Music"
228−#~ msgstr "Muzică"
229−
230−#~ msgid "Videos"
231−#~ msgstr "Video"
po/ru.po+23−109
@@ -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-10-11 12:12+0200\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,78 +16,10 @@ 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-10-13 05:43+0000\n"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20−"X-Generator: Launchpad (build 16799)\n"
20+"X-Generator: Launchpad (build 16856)\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 "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−
90−#: Components/EdgeDemoOverlay.qml:149
22+#: Components/EdgeDemoOverlay.qml:151
91msgid "Skip intro"
23msgid "Skip intro"
92msgstr "Пропустить обучение"
24msgstr "Пропустить обучение"
93
25
@@ -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:341
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:126
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:142
110+#: Greeter/Lockscreen.qml:149
181msgid "Emergency Call"
111msgid "Emergency Call"
182msgstr "Экстренный вызов"
112msgstr "Экстренный вызов"
183
113
@@ -210,40 +140,24 @@ msgstr "Говорите..."
210msgid "Speaking..."
140msgid "Speaking..."
211msgstr "Говорите..."
141msgstr "Говорите..."
212
142
143+#: Notifications/NotificationMenuItemFactory.qml:89
144+msgid "Show password"
145+msgstr ""
146+
213#: Panel/SearchIndicator.qml:27
147#: Panel/SearchIndicator.qml:27
214msgid "Search"
148msgid "Search"
215msgstr "Поиск"
149msgstr "Поиск"
216
150
217−#: plugins/Unity/scope.cpp:398
151+#: plugins/Unity/Launcher/launcheritem.cpp:43
218−msgid "Sorry, there is nothing that matches your search."
152+#: plugins/Unity/Launcher/launcheritem.cpp:73
219−msgstr "Извините, поиск не дал результатов."
153+msgid "Lock to Launcher"
154+msgstr ""
220
155
221−#: plugins/Unity/showallfilteroption.cpp:41
156+#: plugins/Unity/Launcher/launcheritem.cpp:73
222−msgid "All"
157+msgid "Unlock from Launcher"
223msgstr ""
158msgstr ""
224
159
225−#: Shell.qml:438
160+#: Shell.qml:439
226#, qt-format
161#, qt-format
227msgid "Please enter %1"
162msgid "Please enter %1"
228msgstr "Пожалуйста, введите %1"
163msgstr "Пожалуйста, введите %1"
229−
230−#~ msgid "New Releases"
231−#~ msgstr "Новые релизы"
232−
233−#~ msgid "Music"
234−#~ msgstr "Музыка"
235−
236−#~ msgid "Videos"
237−#~ msgstr "Видео"
238−
239−#~ msgid "Recent"
240−#~ msgstr "Недавние"
241−
242−#~ msgid "Top Charting"
243−#~ msgstr "Наиболее популярное"
244−
245−#~ msgid "Popular Online"
246−#~ msgstr "Популярное в Интернете"
247−
248−#~ msgid "Featured"
249−#~ msgstr "Рекомендованное"
po/shn.po+22−87
@@ -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-10-11 12:12+0200\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,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) ? 0 : 1;\n"
17"Plural-Forms: nplurals=2; plural=(n == 1) ? 0 : 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\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:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr ""
23msgstr ""
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -205,19 +135,24 @@ msgstr ""
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr ""
136msgstr ""
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr ""
144msgstr ""
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
214msgstr ""
149msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218msgstr ""
153msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr ""
158msgstr ""
po/si.po+22−87
@@ -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-10-11 12:12+0200\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,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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\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:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr ""
23msgstr ""
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -205,19 +135,24 @@ msgstr ""
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr ""
136msgstr ""
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr ""
144msgstr ""
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
214msgstr ""
149msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218msgstr ""
153msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr ""
158msgstr ""
po/sl.po+25−111
@@ -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-10-11 12:12+0200\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,78 +16,10 @@ 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-10-13 05:43+0000\n"
19+"X-Launchpad-Export-Date: 2013-12-01 05:47+0000\n"
20−"X-Generator: Launchpad (build 16799)\n"
20+"X-Generator: Launchpad (build 16856)\n"
21
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−
90−#: Components/EdgeDemoOverlay.qml:149
22+#: Components/EdgeDemoOverlay.qml:151
91msgid "Skip intro"
23msgid "Skip intro"
92msgstr "Preskoči uvod"
24msgstr "Preskoči uvod"
93
25
@@ -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:341
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:126
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:142
112+#: Greeter/Lockscreen.qml:149
183msgid "Emergency Call"
113msgid "Emergency Call"
184msgstr "Klic v sili"
114msgstr "Klic v sili"
185
115
@@ -212,40 +142,24 @@ msgstr "Govorite zdaj ..."
212msgid "Speaking..."
142msgid "Speaking..."
213msgstr "Govorjenje ..."
143msgstr "Govorjenje ..."
214
144
145+#: Notifications/NotificationMenuItemFactory.qml:89
146+msgid "Show password"
147+msgstr "Pokaži geslo"
148+
215#: Panel/SearchIndicator.qml:27
149#: Panel/SearchIndicator.qml:27
216msgid "Search"
150msgid "Search"
217msgstr "Iskanje"
151msgstr "Iskanje"
218
152
219−#: plugins/Unity/scope.cpp:398
153+#: plugins/Unity/Launcher/launcheritem.cpp:43
220−msgid "Sorry, there is nothing that matches your search."
154+#: plugins/Unity/Launcher/launcheritem.cpp:73
221−msgstr "Nič se ne ujema z vašim iskalnim nizom."
155+msgid "Lock to Launcher"
156+msgstr "Zakleni na zaganjalnik"
222
157
223−#: plugins/Unity/showallfilteroption.cpp:41
158+#: plugins/Unity/Launcher/launcheritem.cpp:73
224−msgid "All"
159+msgid "Unlock from Launcher"
225−msgstr "Vse"
160+msgstr "Odkleni z zaganjalnika"
226
161
227−#: Shell.qml:438
162+#: Shell.qml:439
228#, qt-format
163#, qt-format
229msgid "Please enter %1"
164msgid "Please enter %1"
230msgstr "Vnesite %1"
165msgstr "Vnesite %1"
231−
232−#~ msgid "Music"
233−#~ msgstr "Glasba"
234−
235−#~ msgid "Videos"
236−#~ msgstr "Videi"
237−
238−#~ msgid "New Releases"
239−#~ msgstr "Nove izdaje"
240−
241−#~ msgid "Top Charting"
242−#~ msgstr "Najvišje na lestvici"
243−
244−#~ msgid "Featured"
245−#~ msgstr "Predstavljeno"
246−
247−#~ msgid "Recent"
248−#~ msgstr "Nedavno"
249−
250−#~ msgid "Popular Online"
251−#~ msgstr "Priljubljeno na spletu"
po/sr.po+23−94
@@ -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-10-11 12:12+0200\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,78 +16,10 @@ 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-10-13 05:43+0000\n"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20−"X-Generator: Launchpad (build 16799)\n"
20+"X-Generator: Launchpad (build 16856)\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:149
22+#: Components/EdgeDemoOverlay.qml:151
91msgid "Skip intro"
23msgid "Skip intro"
92msgstr ""
24msgstr ""
93
25
@@ -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:341
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:126
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:142
106+#: Greeter/Lockscreen.qml:149
177msgid "Emergency Call"
107msgid "Emergency Call"
178msgstr ""
108msgstr ""
179
109
@@ -206,25 +136,24 @@ msgstr "Изговорите сада..."
206msgid "Speaking..."
136msgid "Speaking..."
207msgstr "Говор..."
137msgstr "Говор..."
208
138
139+#: Notifications/NotificationMenuItemFactory.qml:89
140+msgid "Show password"
141+msgstr ""
142+
209#: Panel/SearchIndicator.qml:27
143#: Panel/SearchIndicator.qml:27
210msgid "Search"
144msgid "Search"
211msgstr "Претрага"
145msgstr "Претрага"
212
146
213−#: plugins/Unity/scope.cpp:398
147+#: plugins/Unity/Launcher/launcheritem.cpp:43
214−msgid "Sorry, there is nothing that matches your search."
148+#: plugins/Unity/Launcher/launcheritem.cpp:73
215−msgstr "Нажалост, претрага није наишла на икакво подударање."
149+msgid "Lock to Launcher"
150+msgstr ""
216
151
217−#: plugins/Unity/showallfilteroption.cpp:41
152+#: plugins/Unity/Launcher/launcheritem.cpp:73
218−msgid "All"
153+msgid "Unlock from Launcher"
219msgstr ""
154msgstr ""
220
155
221−#: Shell.qml:438
156+#: Shell.qml:439
222#, qt-format
157#, qt-format
223msgid "Please enter %1"
158msgid "Please enter %1"
224msgstr ""
159msgstr ""
225−
226−#~ msgid "Music"
227−#~ msgstr "Музика"
228−
229−#~ msgid "Videos"
230−#~ msgstr "Видео"
po/sv.po+22−87
@@ -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-10-11 12:12+0200\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,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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\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:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr ""
23msgstr ""
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -205,19 +135,24 @@ msgstr ""
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr ""
136msgstr ""
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr ""
144msgstr ""
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
214msgstr ""
149msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218msgstr ""
153msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr ""
158msgstr ""
po/ta.ponew file+164
@@ -0,0 +1,164 @@
1+# Tamil translation for unity8
2+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
3+# This file is distributed under the same license as the unity8 package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
5+# துளசி <Thangamani Arun<thangam.arunx@gmail.com>>, 2013.
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity8\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2013-10-24 11:36+0000\n"
12+"Last-Translator: Thangamani Arun - தங்கமணி அருண் <thangam.arunx@gmail.com>\n"
13+"Language-Team: Ubuntu Tamil Team/Free Tamil Computing/Thamizha\n"
14+"MIME-Version: 1.0\n"
15+"Content-Type: text/plain; charset=UTF-8\n"
16+"Content-Transfer-Encoding: 8bit\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
20+"Language: ta\n"
21+
22+#: Components/EdgeDemoOverlay.qml:151
23+msgid "Skip intro"
24+msgstr "அறிமுகத்தை தவிர்"
25+
26+#: Components/EdgeDemo.qml:112
27+msgid "Right edge"
28+msgstr "வலது விளிம்பு"
29+
30+#: Components/EdgeDemo.qml:113
31+msgid "Try swiping from the right edge to unlock the phone"
32+msgstr "தொலைபேசியை திறக்க வலது முனையிலிருந்து தேய்த்து முயற்சி செய்"
33+
34+#: Components/EdgeDemo.qml:144
35+msgid "Top edge"
36+msgstr "மேல் விளிம்பு"
37+
38+#: Components/EdgeDemo.qml:145
39+msgid "Try swiping from the top edge to access the indicators"
40+msgstr "காட்டிகளை அனுக மேல் விளிம்பிலிருந்து தேய்த்து முயற்சி செய்"
41+
42+#: Components/EdgeDemo.qml:170
43+msgid "Close"
44+msgstr "மூடு"
45+
46+#: Components/EdgeDemo.qml:171
47+msgid "Swipe up again to close the settings screen"
48+msgstr "அமைவுகளின் திரையை மூட மறுபடியும் மேலே தேய்க்கவும்"
49+
50+#: Components/EdgeDemo.qml:198
51+msgid "Left edge"
52+msgstr "இடது விளிம்பு"
53+
54+#: Components/EdgeDemo.qml:199
55+msgid "Swipe from the left to reveal the launcher for quick access to apps"
56+msgstr ""
57+"பயன்பாடுகளின் விரைவான அணுகலை பெறத்தேவையான தொடக்கியை இடமிருந்து தேய்த்தால் "
58+"வெளிப்படும்"
59+
60+#: Components/EdgeDemo.qml:226
61+msgid "Well done"
62+msgstr "நன்றாக செய்தீர்கள்"
63+
64+#: Components/EdgeDemo.qml:227
65+msgid ""
66+"You have now mastered the edge gestures and can start using the "
67+"phone<br><br>Tap anywhere to start"
68+msgstr ""
69+"நீங்கள் இப்போது விளிம்பு சைகைகளில் கைதேர்ந்தவர் மற்றும் தொலைபேசி "
70+"பயன்படுத்த தொடங்கவும் <br> <br>தட்டுவதன் மூலம் எங்க வேண்டுமானாலும் "
71+"தொடங்கலாம்."
72+
73+#: Components/PageHeader.qml:364
74+msgid "Recent searches"
75+msgstr "கடையாக தேடப்பட்டவைகள்"
76+
77+#: Dash/Apps/AppPreview.qml:135
78+msgid "Rate this"
79+msgstr "இதை மதிப்பிடு"
80+
81+#. TRANSLATORS: Number of persons who rated this app/video/whatever
82+#: Dash/Previews/Header.qml:93
83+#, qt-format
84+msgid "(%1)"
85+msgstr "(%1)"
86+
87+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
88+#: Dash/Previews/Header.qml:105
89+#, qt-format
90+msgid "%1 review"
91+msgid_plural "%1 reviews"
92+msgstr[0] "%1 பரிசீலனை"
93+msgstr[1] "%1 பரிசீலனைகள்"
94+
95+#: Dash/Previews/Reviews.qml:74
96+msgid "Add a review"
97+msgstr "ஒரு பரிசீலனையை சேர்"
98+
99+#: Dash/Previews/Reviews.qml:86
100+msgid "Review"
101+msgstr "மறுஆய்வு"
102+
103+#: Dash/Previews/Reviews.qml:121
104+msgid "Send"
105+msgstr "அனுப்பு"
106+
107+#: Dash/Previews/Reviews.qml:139
108+msgid "Comments:"
109+msgstr "கருத்துகள்:"
110+
111+#: Greeter/Lockscreen.qml:149
112+msgid "Emergency Call"
113+msgstr "அவசர அழைப்பு"
114+
115+#: Greeter/PassphraseLockscreen.qml:59
116+#, qt-format
117+msgid "Hello %1"
118+msgstr "வணக்கம் %1"
119+
120+#: Greeter/PassphraseLockscreen.qml:59
121+msgid "Hello"
122+msgstr "வணக்கம்"
123+
124+#: Hud/HudParametrizedActionsPage.qml:132
125+msgid "Confirm"
126+msgstr "உறுதிப்படுத்து"
127+
128+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
129+msgid "Type or say a command"
130+msgstr "ஒரு கட்டளையை உச்சரி அல்லது தட்டச்சுசெய்"
131+
132+#: Hud/Hud.qml:84
133+msgid "Loading. Please Wait..."
134+msgstr "ஏற்றுகிறது. தயைசெய்து காத்திருக்கவும்..."
135+
136+#: Hud/Hud.qml:89
137+msgid "Speak Now..."
138+msgstr "இப்பொது பேசு..."
139+
140+#: Hud/Hud.qml:94
141+msgid "Speaking..."
142+msgstr "பேசுகிறது..."
143+
144+#: Notifications/NotificationMenuItemFactory.qml:89
145+msgid "Show password"
146+msgstr ""
147+
148+#: Panel/SearchIndicator.qml:27
149+msgid "Search"
150+msgstr "தெடு"
151+
152+#: plugins/Unity/Launcher/launcheritem.cpp:43
153+#: plugins/Unity/Launcher/launcheritem.cpp:73
154+msgid "Lock to Launcher"
155+msgstr ""
156+
157+#: plugins/Unity/Launcher/launcheritem.cpp:73
158+msgid "Unlock from Launcher"
159+msgstr ""
160+
161+#: Shell.qml:439
162+#, qt-format
163+msgid "Please enter %1"
164+msgstr "தயவுச்செய்து %1 உள்ளிடு"
po/te.po+22−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-10-11 12:12+0200\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,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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\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:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr ""
23msgstr ""
92
24
@@ -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:341
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:126
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:142
105+#: Greeter/Lockscreen.qml:149
176msgid "Emergency Call"
106msgid "Emergency Call"
177msgstr ""
107msgstr ""
178
108
@@ -205,22 +135,24 @@ msgstr ""
205msgid "Speaking..."
135msgid "Speaking..."
206msgstr ""
136msgstr ""
207
137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208#: Panel/SearchIndicator.qml:27
142#: Panel/SearchIndicator.qml:27
209msgid "Search"
143msgid "Search"
210msgstr ""
144msgstr ""
211
145
212−#: plugins/Unity/scope.cpp:398
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
213−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
214msgstr ""
149msgstr ""
215
150
216−#: plugins/Unity/showallfilteroption.cpp:41
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
217−msgid "All"
152+msgid "Unlock from Launcher"
218msgstr ""
153msgstr ""
219
154
220−#: Shell.qml:438
155+#: Shell.qml:439
221#, qt-format
156#, qt-format
222msgid "Please enter %1"
157msgid "Please enter %1"
223msgstr ""
158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "సంగీతం"
po/tr.po+23−109
@@ -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-10-11 12:12+0200\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-10-01 13:21+0000\n"
12"Last-Translator: Volkan Gezer <Unknown>\n"
12"Last-Translator: Volkan Gezer <Unknown>\n"
13"Language-Team: Turkish <tr@li.org>\n"
13"Language-Team: Turkish <tr@li.org>\n"
@@ -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-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\n"
20
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−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr "İntro'yu geç"
23msgstr "İntro'yu geç"
92
24
@@ -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:341
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:126
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:142
106+#: Greeter/Lockscreen.qml:149
177msgid "Emergency Call"
107msgid "Emergency Call"
178msgstr "Acil Arama"
108msgstr "Acil Arama"
179
109
@@ -206,40 +136,24 @@ msgstr "Şimdi Konuşun..."
206msgid "Speaking..."
136msgid "Speaking..."
207msgstr "Konuşuyor..."
137msgstr "Konuşuyor..."
208
138
139+#: Notifications/NotificationMenuItemFactory.qml:89
140+msgid "Show password"
141+msgstr ""
142+
209#: Panel/SearchIndicator.qml:27
143#: Panel/SearchIndicator.qml:27
210msgid "Search"
144msgid "Search"
211msgstr "Ara"
145msgstr "Ara"
212
146
213−#: plugins/Unity/scope.cpp:398
147+#: plugins/Unity/Launcher/launcheritem.cpp:43
214−msgid "Sorry, there is nothing that matches your search."
148+#: plugins/Unity/Launcher/launcheritem.cpp:73
215−msgstr "Üzgünüz, aramanızla eşleşen hiçbir şey yok."
149+msgid "Lock to Launcher"
150+msgstr ""
216
151
217−#: plugins/Unity/showallfilteroption.cpp:41
152+#: plugins/Unity/Launcher/launcheritem.cpp:73
218−msgid "All"
153+msgid "Unlock from Launcher"
219msgstr ""
154msgstr ""
220
155
221−#: Shell.qml:438
156+#: Shell.qml:439
222#, qt-format
157#, qt-format
223msgid "Please enter %1"
158msgid "Please enter %1"
224msgstr "Lütfen %1 girin"
159msgstr "Lütfen %1 girin"
225−
226−#~ msgid "Featured"
227−#~ msgstr "Öne Çıkanlar"
228−
229−#~ msgid "Recent"
230−#~ msgstr "En Son"
231−
232−#~ msgid "Music"
233−#~ msgstr "Müzik"
234−
235−#~ msgid "Popular Online"
236−#~ msgstr "Genellikle Çevrimiçi"
237−
238−#~ msgid "Videos"
239−#~ msgstr "Videolar"
240−
241−#~ msgid "Top Charting"
242−#~ msgstr "En Çok Beğenilenler"
243−
244−#~ msgid "New Releases"
245−#~ msgstr "Yeni Sürümler"
po/ug.po+24−104
@@ -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-10-11 12:12+0200\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,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=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
19+"X-Generator: Launchpad (build 16856)\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 "فېيىسبۇك(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−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
90msgid "Skip intro"
22msgid "Skip intro"
91msgstr ""
23msgstr ""
92
24
@@ -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:341
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:126
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:142
104+#: Greeter/Lockscreen.qml:149
175msgid "Emergency Call"
105msgid "Emergency Call"
176msgstr ""
106msgstr ""
177
107
@@ -204,34 +134,24 @@ msgstr "ئەمدى سۆزلەڭ…"
204msgid "Speaking..."
134msgid "Speaking..."
205msgstr "سۆزلەۋاتىسىز…"
135msgstr "سۆزلەۋاتىسىز…"
206
136
137+#: Notifications/NotificationMenuItemFactory.qml:89
138+msgid "Show password"
139+msgstr ""
140+
207#: Panel/SearchIndicator.qml:27
141#: Panel/SearchIndicator.qml:27
208msgid "Search"
142msgid "Search"
209msgstr "ئىزدە"
143msgstr "ئىزدە"
210
144
211−#: plugins/Unity/scope.cpp:398
145+#: plugins/Unity/Launcher/launcheritem.cpp:43
212−msgid "Sorry, there is nothing that matches your search."
146+#: plugins/Unity/Launcher/launcheritem.cpp:73
213−msgstr "كەچۈرۈڭ، ئىزدىگىنىڭىزگە ماس نەتىجە تېپىلمىدى."
147+msgid "Lock to Launcher"
148+msgstr ""
214
149
215−#: plugins/Unity/showallfilteroption.cpp:41
150+#: plugins/Unity/Launcher/launcheritem.cpp:73
216−msgid "All"
151+msgid "Unlock from Launcher"
217−msgstr "ھەممىسى"
152+msgstr ""
218
153
219−#: Shell.qml:438
154+#: Shell.qml:439
220#, qt-format
155#, qt-format
221msgid "Please enter %1"
156msgid "Please enter %1"
222msgstr "%1 نى كىرگۈزۈڭ"
157msgstr "%1 نى كىرگۈزۈڭ"
223−
224−#~ msgid "Featured"
225−#~ msgstr "داڭلىق"
226−
227−#~ msgid "Recent"
228−#~ msgstr "يېقىنقى"
229−
230−#~ msgid "New Releases"
231−#~ msgstr "يېڭى ئېلان قىلىنغانلىرى"
232−
233−#~ msgid "Music"
234−#~ msgstr "مۇزىكا"
235−
236−#~ msgid "Videos"
237−#~ msgstr "سىنلار"
po/uk.po+28−112

This diff is too big to show here.

po/unity8.pot+20−85

This diff is too big to show here.

po/xh.po+22−87

This diff is too big to show here.

po/zh_CN.po+23−109

This diff is too big to show here.

po/zh_TW.po+23−94

This diff is too big to show here.

run+6−3

This diff is too big to show here.

run_on_device+25−6

This diff is too big to show here.

tests/autopilot/unity8/__init__.py+46−1

This diff is too big to show here.

tests/autopilot/unity8/process_helpers.pynew file+143

This diff is too big to show here.

tests/autopilot/unity8/shell/emulators/create_interactive_notification.pymode 100755 → 100644

Only the mode changed.

tests/autopilot/unity8/shell/emulators/dash.py+7−17

This diff is too big to show here.

tests/autopilot/unity8/shell/emulators/hud.py+12−4

This diff is too big to show here.

tests/autopilot/unity8/shell/emulators/main_window.py+7−7

This diff is too big to show here.

tests/autopilot/unity8/shell/tests/__init__.py+62−36

This diff is too big to show here.

tests/autopilot/unity8/shell/tests/test_greeter.pynew file+38

This diff is too big to show here.

tests/autopilot/unity8/shell/tests/test_hud.py+11−10

This diff is too big to show here.

tests/autopilot/unity8/shell/tests/test_notifications.py+76−73

This diff is too big to show here.

tests/autopilot/unity8/shell/tests/test_upstart.pynew file+99

This diff is too big to show here.

tests/mocks/AccountsService/CMakeLists.txt+2−2

This diff is too big to show here.

tests/mocks/AccountsService/plugin.cpp+1−1

This diff is too big to show here.

tests/mocks/CMakeLists.txt+6

This diff is too big to show here.

tests/mocks/LightDM/CMakeLists.txt+4−3

This diff is too big to show here.

tests/mocks/LightDM/full/CMakeLists.txt+1−1

This diff is too big to show here.

tests/mocks/LightDM/single-passphrase/CMakeLists.txt+1−1

This diff is too big to show here.

tests/mocks/LightDM/single-pin/CMakeLists.txt+1−1

This diff is too big to show here.

tests/mocks/LightDM/single/CMakeLists.txt+1−1

This diff is too big to show here.

tests/mocks/Powerd/CMakeLists.txt+2−2

This diff is too big to show here.

tests/mocks/QMenuModel/CMakeLists.txt+23

This diff is too big to show here.

plugins/Unity/genericpreview.cpp → tests/mocks/QMenuModel/UnityMenuAction.qmlrenamed+11−12

This diff is too big to show here.

Launcher/QuicklistForegroundStyle.qml → tests/mocks/QMenuModel/actionstateparser.cpprenamed+3−7

This diff is too big to show here.

tests/plugins/Unity/resultstest.h → tests/mocks/QMenuModel/actionstateparser.hrenamed+11−13

This diff is too big to show here.

tests/mocks/QMenuModel/plugin.cppnew file+30

This diff is too big to show here.

plugins/Unity/ratingoptionsmodel.h → tests/mocks/QMenuModel/plugin.hrenamed+11−10

This diff is too big to show here.

tests/mocks/QMenuModel/qmldir+3−1

This diff is too big to show here.

tests/mocks/QMenuModel/unitymenumodel.cppnew file+239

This diff is too big to show here.

tests/mocks/QMenuModel/unitymenumodel.hnew file+96

This diff is too big to show here.

tests/mocks/QtMultimedia/CMakeLists.txtnew file+19

This diff is too big to show here.

tests/mocks/QtMultimedia/audio.cppnew file+107

This diff is too big to show here.

tests/mocks/QtMultimedia/audio.hnew file+78

This diff is too big to show here.

tests/plugins/Unity/signalslisttest.h → tests/mocks/QtMultimedia/plugin.cpprenamed+10−12

This diff is too big to show here.

plugins/Unity/plugin.h → tests/mocks/QtMultimedia/plugin.hrenamed+5−6

This diff is too big to show here.

tests/mocks/QtMultimedia/qmldirnew file+2

This diff is too big to show here.

tests/mocks/Ubuntu/DownloadDaemonListener/CMakeLists.txt+1−1

This diff is too big to show here.

tests/mocks/Unity/Application/CMakeLists.txt+2−2

This diff is too big to show here.

tests/mocks/Unity/CMakeLists.txt+2−3

This diff is too big to show here.

tests/mocks/Unity/Indicators/IndicatorBase.qmlnew file+37

This diff is too big to show here.

tests/mocks/Unity/Indicators/IndicatorWidget.qmlnew file+28

This diff is too big to show here.

tests/mocks/Unity/Indicators/RootActionState.qml+17−9

This diff is too big to show here.

tests/mocks/Unity/Indicators/qmldir+2

This diff is too big to show here.

plugins/Unity/categoryresults.cpp → tests/mocks/Unity/categoryresults.cpprenamed

The content is the same.

plugins/Unity/categoryresults.h → tests/mocks/Unity/categoryresults.hrenamed

The content is the same.

tests/mocks/Unity/fake_preview.cpp+9−1

This diff is too big to show here.

tests/mocks/Unity/fake_preview.h+2

This diff is too big to show here.

tests/mocks/Unity/fake_scope.cpp+22−18

This diff is too big to show here.

tests/mocks/Unity/fake_scope.h+7−2

This diff is too big to show here.

tests/mocks/Unity/fake_unity_plugin.cpp+3

This diff is too big to show here.

plugins/Unity/iconutils.cpp → tests/mocks/Unity/iconutils.cpprenamed+10−10

This diff is too big to show here.

plugins/Unity/iconutils.h → tests/mocks/Unity/iconutils.hrenamed

The content is the same.

tests/mocks/data/applications/camera-app.desktopnew file

No changes to the content.

tests/mocks/libusermetrics/CMakeLists.txt+1−1

This diff is too big to show here.

tests/plugins/CMakeLists.txt+1

This diff is too big to show here.

tests/plugins/LightDM/CMakeLists.txtnew file+24

This diff is too big to show here.

tests/plugins/LightDM/dbus.cppnew file+166

This diff is too big to show here.

plugins/Unity/abstractfilteroption.cpp → tests/plugins/LightDM/greeter.qmlrenamed+5−8

This diff is too big to show here.

tests/plugins/ListViewWithPageHeader/CMakeLists.txt+7

This diff is too big to show here.

tests/plugins/ListViewWithPageHeader/listviewwithpageheadertest.cpp+42

This diff is too big to show here.

tests/plugins/ListViewWithPageHeader/listviewwithpageheadertestsection.cpp+81−1

This diff is too big to show here.

tests/plugins/ListViewWithPageHeader/tst_listviewwithpageheaderqml.qmlnew file+138

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/CMakeLists.txt+21−18

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/DownwardsLauncher.qml+2−10

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/GestureTest.cppnew file+54

This diff is too big to show here.

plugins/Unity/genericpreview.h → tests/plugins/Ubuntu/Gestures/GestureTest.hrenamed+19−19

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/LeftwardsLauncher.qml+5−13

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/RightwardsLauncher.qml+3−10

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/UpwardsLauncher.qml+5−13

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_AxisVelocityCalculator.cpp+3−3

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.cpp+326−168

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/edgeDragExample.qml → tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.qmlrenamed+9−3

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_PressedOutsideNotifier.cppnew file+150

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_PressedOutsideNotifier.qmlnew file+62

This diff is too big to show here.

tests/plugins/Unity/CMakeLists.txt−51

This diff is too big to show here.

tests/plugins/Unity/Indicators/CMakeLists.txt+35−26

This diff is too big to show here.

tests/plugins/Unity/Indicators/indicatorsmanagertest.cpp+1−3

This diff is too big to show here.

tests/plugins/Unity/Indicators/unitymenumodelstacktest.cppnew file+206

This diff is too big to show here.

tests/plugins/Unity/filtersbindingstest.cppdeleted−515

This diff is too big to show here.

tests/plugins/Unity/filtersbindingstest.hdeleted−47

This diff is too big to show here.

tests/plugins/Unity/previewbindingstest.cppdeleted−194

This diff is too big to show here.

tests/plugins/Unity/previewbindingstest.hdeleted−35

This diff is too big to show here.

tests/plugins/Unity/resultstest.cppdeleted−196

This diff is too big to show here.

tests/plugins/Unity/signalslisttest.cppdeleted−57

This diff is too big to show here.

tests/qmltests/CMakeLists.txt+9−6

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle.cpp+4−5

This diff is too big to show here.

tests/qmltests/Components/tst_EdgeDemoOverlay.qml+2−2

This diff is too big to show here.

tests/qmltests/Components/tst_MathLocal.qmldeleted−91

This diff is too big to show here.

tests/qmltests/Components/tst_PageHeader.qml+44−3

This diff is too big to show here.

tests/qmltests/Components/tst_TimeLocal.qmldeleted−117

This diff is too big to show here.

tests/qmltests/Dash/Apps/tst_AppPreview.qml+3−2

This diff is too big to show here.

tests/qmltests/Dash/Apps/tst_RunningApplicationsGrid.qml+21

This diff is too big to show here.

tests/qmltests/Dash/Movie/tst_MoviePreview.qml+1

This diff is too big to show here.

tests/qmltests/Dash/Music/tst_MusicPreview.qmlnew file+174

This diff is too big to show here.

tests/qmltests/Dash/qml/FakeScopeView.qml+3−68

This diff is too big to show here.

tests/qmltests/Dash/tst_Dash.qml+7−1

This diff is too big to show here.

tests/qmltests/Dash/tst_DashContent.qml+64−3

This diff is too big to show here.

tests/qmltests/Dash/tst_FilterGrids.qml+1−2

This diff is too big to show here.

tests/qmltests/Dash/tst_GenericPreview.qml+1

This diff is too big to show here.

tests/qmltests/Dash/tst_GenericScopeView.qml+220−10

This diff is too big to show here.

tests/qmltests/Dash/tst_ScopeView.qmldeleted−52

This diff is too big to show here.

tests/qmltests/Greeter/tst_Clock.qml+16

This diff is too big to show here.

tests/qmltests/Greeter/tst_Lockscreen.qml+81−15

This diff is too big to show here.

tests/qmltests/Greeter/tst_Phone.qml+23−10

This diff is too big to show here.

tests/qmltests/Greeter/tst_Tablet.qml+11

This diff is too big to show here.

tests/qmltests/Launcher/tst_Launcher.qml+47−11

This diff is too big to show here.

tests/qmltests/Notifications/tst_Notifications.qml+56

This diff is too big to show here.

tests/qmltests/Panel/Indicators/tst_DefaultIndicatorWidget.qmlnew file+97

This diff is too big to show here.

tests/qmltests/Panel/tst_Panel.qml+13−5

This diff is too big to show here.

tests/qmltests/tst_Shell.qml+88−22

This diff is too big to show here.

tests/utils/modules/Unity/Test/UnityTestCase.qml+36

This diff is too big to show here.